{
  "contractName": "ERC1155ERC721",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newBosonRouter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_triggeredBy",
          "type": "address"
        }
      ],
      "name": "LogBosonRouterSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newVoucherKernel",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_triggeredBy",
          "type": "address"
        }
      ],
      "name": "LogVoucherKernelSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "_ids",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "_values",
          "type": "uint256[]"
        }
      ],
      "name": "TransferBatch",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "TransferSingle",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "_value",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_id",
          "type": "uint256"
        }
      ],
      "name": "URI",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "bosonRouterAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "voucherKernelAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "_tokenIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeBatchTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_accounts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "balanceOfBatch",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_approve",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "_tokenIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "mintBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "_tokenIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_values",
          "type": "uint256[]"
        }
      ],
      "name": "burnBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_newBase",
          "type": "string"
        }
      ],
      "name": "_setMetadataBase",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_newRoute",
          "type": "string"
        }
      ],
      "name": "_set1155Route",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_newRoute",
          "type": "string"
        }
      ],
      "name": "_set721Route",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "uri",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_voucherKernelAddress",
          "type": "address"
        }
      ],
      "name": "setVoucherKernelAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bosonRouterAddress",
          "type": "address"
        }
      ],
      "name": "setBosonRouterAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newBosonRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_triggeredBy\",\"type\":\"address\"}],\"name\":\"LogBosonRouterSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newVoucherKernel\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_triggeredBy\",\"type\":\"address\"}],\"name\":\"LogVoucherKernelSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_newRoute\",\"type\":\"string\"}],\"name\":\"_set1155Route\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_newRoute\",\"type\":\"string\"}],\"name\":\"_set721Route\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_newBase\",\"type\":\"string\"}],\"name\":\"_setMetadataBase\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bosonRouterAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"}],\"name\":\"burnBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"mintBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approve\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bosonRouterAddress\",\"type\":\"address\"}],\"name\":\"setBosonRouterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_voucherKernelAddress\",\"type\":\"address\"}],\"name\":\"setVoucherKernelAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"voucherKernelAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"_set1155Route(string)\":{\"params\":{\"_newRoute\":\"New route to be used\"}},\"_set721Route(string)\":{\"params\":{\"_newRoute\":\"New route to be used\"}},\"_setMetadataBase(string)\":{\"params\":{\"_newBase\":\"New prefix to be used\"}},\"approve(address,uint256)\":{\"details\":\"ERC-721\",\"params\":{\"_to\":\"address to be approved for the given token ID\",\"_tokenId\":\"uint256 ID of the token to be approved\"}},\"balanceOf(address)\":{\"details\":\"ERC-721\",\"params\":{\"_owner\":\"An address for whom to query the balance\"},\"returns\":{\"_0\":\"The number of NFTs owned by `_owner`, possibly zero\"}},\"balanceOf(address,uint256)\":{\"details\":\"ERC-1155\",\"params\":{\"_account\":\"The address of the token holder\",\"_tokenId\":\"ID of the token\"},\"returns\":{\"_0\":\"balance\"}},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"ERC-1155\",\"params\":{\"_accounts\":\"The addresses of the token holders\",\"_tokenIds\":\"IDs of the tokens\"},\"returns\":{\"_0\":\"balances\"}},\"burn(address,uint256,uint256)\":{\"details\":\"ERC-1155\",\"params\":{\"_account\":\"Account which owns the token\",\"_tokenId\":\"ID of the token\",\"_value\":\"Amount of the token\"}},\"burnBatch(address,uint256[],uint256[])\":{\"details\":\"ERC-1155\",\"params\":{\"_account\":\"Account which owns the token\",\"_tokenIds\":\"IDs of the tokens\",\"_values\":\"Amounts of the tokens\"}},\"getApproved(uint256)\":{\"details\":\"ERC-721\",\"params\":{\"_tokenId\":\"uint256 ID of the token to query the approval of\"},\"returns\":{\"_0\":\"address currently approved for the given token ID\"}},\"isApprovedForAll(address,address)\":{\"details\":\"ERC-1155 & ERC-721\",\"params\":{\"_account\":\"token holder\",\"_operator\":\"operator to check\"},\"returns\":{\"_0\":\"True if the operator is approved, false if not\"}},\"mint(address,uint256)\":{\"details\":\"ERC-721\",\"params\":{\"to\":\"The address that will receive the minted tokens.\",\"tokenId\":\"The token id to mint.\"},\"returns\":{\"_0\":\"A boolean that indicates if the operation was successful.\"}},\"mint(address,uint256,uint256,bytes)\":{\"details\":\"ERC-1155\",\"params\":{\"_data\":\"Additional data forwarded to onERC1155BatchReceived if _to is a contract\",\"_to\":\"owner of the minted token\",\"_tokenId\":\"ID of the token to be minted\",\"_value\":\"Amount of the token to be minted\"}},\"mintBatch(address,uint256[],uint256[],bytes)\":{\"details\":\"ERC-1155\",\"params\":{\"_data\":\"Additional data forwarded to onERC1155BatchReceived if _to is a contract\",\"_to\":\"The address that will own the minted token\",\"_tokenIds\":\"IDs of the tokens to be minted\",\"_values\":\"Amounts of the tokens to be minted\"}},\"name()\":{\"details\":\"ERC-721\"},\"ownerOf(uint256)\":{\"details\":\"ERC-721\",\"params\":{\"_tokenId\":\"uint256 ID of the token to query the owner of\"},\"returns\":{\"_0\":\"address currently marked as the owner of the given token ID\"}},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"ERC-1155\",\"params\":{\"_data\":\"Additional data forwarded to onERC1155BatchReceived if _to is a contract\",\"_from\":\"Source address\",\"_to\":\"Destination address\",\"_tokenIds\":\"array of token IDs\",\"_values\":\"array of transfer amounts\"}},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"ERC-721\",\"params\":{\"_from\":\"current owner of the token\",\"_to\":\"address to receive the ownership of the given token ID\",\"_tokenId\":\"uint256 ID of the token to be transferred\"}},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"ERC-721\",\"params\":{\"_data\":\"bytes data to send along with a safe transfer check\",\"_from\":\"current owner of the token\",\"_to\":\"address to receive the ownership of the given token ID\",\"_tokenId\":\"uint256 ID of the token to be transferred\"}},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"ERC-1155\",\"params\":{\"_data\":\"Additional data forwarded to onERC1155Received if _to is a contract\",\"_from\":\"Source address\",\"_to\":\"Destination address\",\"_tokenId\":\"ID of the token\",\"_value\":\"Transfer amount\"}},\"setApprovalForAll(address,bool)\":{\"details\":\"ERC-1155 & ERC-721\",\"params\":{\"_approve\":\"flag to set or unset\",\"_operator\":\"to (un)approve\"}},\"setBosonRouterAddress(address)\":{\"params\":{\"_bosonRouterAddress\":\"The Boson Router  contract\"}},\"setVoucherKernelAddress(address)\":{\"params\":{\"_voucherKernelAddress\":\"The address of the Voucher Kernel contract\"}},\"symbol()\":{\"details\":\"ERC-721\"},\"tokenURI(uint256)\":{\"details\":\"ERC-721 Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC 3986. The URI may point to a JSON file that conforms to the \\\"ERC721 Metadata JSON Schema\\\".\",\"params\":{\"_tokenId\":\"ID of the token\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"ERC-721\",\"params\":{\"_from\":\"current owner of the token\",\"_to\":\"address to receive the ownership of the given token ID\",\"_tokenId\":\"uint256 ID of the token to be transferred\"}},\"uri(uint256)\":{\"details\":\"ERC-1155 URIs are defined in RFC 3986. The URI MUST point to a JSON file that conforms to the \\\"ERC-1155 Metadata URI JSON Schema\\\".\",\"params\":{\"_tokenId\":\"The ID of the token\"},\"returns\":{\"_0\":\"Full URI string for metadata of the _tokenId\"}}},\"title\":\"Multi-token contract, implementing ERC-1155 and ERC-721 hybrid  Inspired by: https://github.com/pixowl/sandbox-smart-contracts\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"_set1155Route(string)\":{\"notice\":\"Setting the URL route for ERC1155 tokens metadata\"},\"_set721Route(string)\":{\"notice\":\"Setting the URL route for ERC721 tokens metadata\"},\"_setMetadataBase(string)\":{\"notice\":\"Setting the URL prefix for tokens metadata\"},\"approve(address,uint256)\":{\"notice\":\"Approves another address to transfer the given token ID The zero address indicates there is no approved address. There can only be one approved address per token at a given time. Can only be called by the token owner or an approved operator.\"},\"balanceOf(address)\":{\"notice\":\"Count all NFTs assigned to an owner\"},\"balanceOf(address,uint256)\":{\"notice\":\"Get the balance of tokens of an account\"},\"balanceOfBatch(address[],uint256[])\":{\"notice\":\"Get the balance of account-token pairs.\"},\"burn(address,uint256,uint256)\":{\"notice\":\"Burn an amount of tokens with the given ID\"},\"burnBatch(address,uint256[],uint256[])\":{\"notice\":\"Batch burn an amounts of tokens\"},\"getApproved(uint256)\":{\"notice\":\"Gets the approved address for a token ID, or zero if no address set Reverts if the token ID does not exist.\"},\"isApprovedForAll(address,address)\":{\"notice\":\"Gets approval status of an operator for a given account.\"},\"mint(address,uint256)\":{\"notice\":\"Function to mint tokens.\"},\"mint(address,uint256,uint256,bytes)\":{\"notice\":\"Mint an amount of a desired token Currently no restrictions as to who is allowed to mint - so, it is public.\"},\"mintBatch(address,uint256[],uint256[],bytes)\":{\"notice\":\"Batch minting of tokens Currently no restrictions as to who is allowed to mint - so, it is public.\"},\"name()\":{\"notice\":\"A descriptive name for a collection of NFTs in this contract\"},\"ownerOf(uint256)\":{\"notice\":\"Gets the owner of the specified token ID.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"Transfers amount of _tokenId from-to addresses with safety call. If _to is a smart contract, will call onERC1155BatchReceived\"},\"safeTransferFrom(address,address,uint256)\":{\"notice\":\"Safely transfers the ownership of a given token ID to another address If the target address is a contract, it must implement `onERC721Received`, which is called upon a safe transfer, and return the magic value `bytes4(keccak256(\\\"onERC721Received(address,address,uint256,bytes)\\\"))`; otherwise, the transfer is reverted. Requires the msg.sender to be the owner, approved, or operator\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"notice\":\"Safely transfers the ownership of a given token ID to another address If the target address is a contract, it must implement `onERC721Received` Requires the msg.sender to be the owner, approved, or operator\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"notice\":\"Transfers amount of _tokenId from-to addresses with safety call. If _to is a smart contract, will call onERC1155Received\"},\"setApprovalForAll(address,bool)\":{\"notice\":\"Approves or unapproves the operator. will revert if the caller attempts to approve itself as it is redundant\"},\"setBosonRouterAddress(address)\":{\"notice\":\"Set the address of the Boson Router contract\"},\"setVoucherKernelAddress(address)\":{\"notice\":\"Set the address of the VoucherKernel contract\"},\"supportsInterface(bytes4)\":{\"notice\":\"Returns true if this contract implements the interface defined by _interfaceId_. This function call must use less than 30 000 gas. ATM not enforced.\"},\"symbol()\":{\"notice\":\"An abbreviated name for NFTs in this contract\"},\"tokenURI(uint256)\":{\"notice\":\"A distinct Uniform Resource Identifier (URI) for a given asset.\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Transfers the ownership of a given token ID to another address. Usage of this method is discouraged, use `safeTransferFrom` whenever possible. Requires the msg.sender to be the owner, approved, or operator.\"},\"uri(uint256)\":{\"notice\":\"A distinct Uniform Resource Identifier (URI) for a given token.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/ERC1155ERC721.sol\":\"ERC1155ERC721\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/ERC1155ERC721.sol\":{\"keccak256\":\"0xcb5ee42e48c89f96e200dda38bbc7f719710bf8632d32e7ba2e44cb7c35cb9ba\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://907320c0dc8aad99e0510a39a396a7e256eecb807f115f482308580f24438a08\",\"dweb:/ipfs/QmPxLaq2MhBB4mkeQV8gsdTE4QgScdy1pNaAZtT6kbP7Ra\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IBosonRouter.sol\":{\"keccak256\":\"0xd13767ad573961330234334623e40d57488f76de4eed1fee6343f935d94059dc\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://fab096e21ec59f823d4e6b6782ea070c9ce774c58a338bed96903c27518f0cd2\",\"dweb:/ipfs/QmSAQti8VEEh2JHahfpEjWfkE8Tmwveg11U9MKyN3q43fY\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155.sol\":{\"keccak256\":\"0x34796b446a93c5ac705507913582dcab993b7cc86429c5e272b99597b64e51d9\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://51ba6851cc9c12c62f8ba7f20780880d590f1030c265edee05158064b9f67a36\",\"dweb:/ipfs/QmNidTbLJeMMFFk3iftCeWP9pLsFxdSHsckvakXgKnxoKC\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155ERC721.sol\":{\"keccak256\":\"0xb68cc7a34d977123a71b5c3e1bd1647378cbabee490c4c04666bc206815b6beb\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://bfe1b32910fc6676cc622fab356a87b98190f41a1c5eb81d9af82613515d019f\",\"dweb:/ipfs/QmYQXbVa4XqsHevFhFj55zaqoxAE6trp5fdT4SQmFpoFyB\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155TokenReceiver.sol\":{\"keccak256\":\"0x153171c151b621968c8ac8120ff7ec28b973a40baf4f9350a89e35349084c159\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://c1120712a0584dd1883453bde9a08811e69b94d3bbb89c93c5d2933dde77a8cd\",\"dweb:/ipfs/QmcncVW9ayK5wAVSgsadMLZk5YrzjBHZPjq7vNvkDzbaZh\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x39c55885f7e34a407316f0f15d337baaf69723252f154d7c727c97f818b23e5e\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://3c297eddef2d21c163eecc6758ae3fe9872594025eff98f22d3cb84d4771df9f\",\"dweb:/ipfs/QmTvQ8URMHEHy1GTBfYqkQZXcu1jb9DpxTWUbNFX7BrEX8\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC721.sol\":{\"keccak256\":\"0xff346a09a5d08dfe7196c4516d78522da0dec1bde99e04e0f3b269f96796d29f\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://197cdfdd6994addd3ef4702e3b367d4563f907106c6be50b2932cb7d336daf0c\",\"dweb:/ipfs/QmSKe383xVyeY8ecpEPHdvEevMVDR121Qqq4udmeaipXQe\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC721TokenReceiver.sol\":{\"keccak256\":\"0x7b8243200a7630a258025cc2a9fa2fec0ec9f009b0f6e4b7dc0b0bdcb64b2761\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://7a1037cfbea713ba1649ec7c9c44570e012cf3f2eafcec3fd7e8da323e81248b\",\"dweb:/ipfs/QmaZzB7rN4RyPhGgfn9Fkvf5K6ynd4owHj6vA8iMH2k3N9\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IVoucherKernel.sol\":{\"keccak256\":\"0x66567497a0c44e8b9932655e34df87aeba11ed8cb451b4fceffc3f3575839d3f\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://ba21239d29d9186785f7de199f6ec67cd7b14ff327405917eb15a1313bdd1dd3\",\"dweb:/ipfs/QmeHtpbNfT57dce5YyY4pwXcZj89CaMFkXAjYtjKEFAckh\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xe22a1fc7400ae196eba2ad1562d0386462b00a6363b742d55a2fd2021a58586f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a635cec58fb4141a16cfd408f1a21ac944c335a3beaba541c35d2e95c04536f\",\"dweb:/ipfs/QmXWcz73UenN1ji8jiWMbzxHjjfLbNQwLVKTEB5zNFE34K\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf89f005a3d98f7768cdee2583707db0ac725cf567d455751af32ee68132f3db3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f963d438177764b5f43f637c02311c951c0f0025d12fe1ac7e62e295bf416c41\",\"dweb:/ipfs/QmcfVb9JsWrYeTwFUJsKVHpKB7EaWBKydAH9S4sKg2pzcK\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50600080546001600160a01b031916331790556134f5806100326000396000f3fe608060405234801561001057600080fd5b50600436106101745760003560e01c8062fdd58e1461017957806301ffc9a7146101b757806306fdde03146101f2578063081812fc1461026f578063095ea7b3146102a85780630e89341c146102d65780631f7fdffa146102f357806323b872dd146104ab5780632eb2c2d6146104e157806335649a831461060857806338b6db2e1461061057806340c10f19146106b457806342842e0e146106e05780634e1273f4146107165780636352211e146108245780636b20c4541461084157806370a0823114610974578063731133e91461099a5780637d64afde14610a5a5780638cfb578e14610afe5780638da5cb5b14610b0657806395d89b4114610b0e578063a22cb46514610b16578063b88d4fde14610b44578063bb49944014610c08578063bd17de4014610cac578063c87b56dd14610cd2578063d95be43a14610cef578063e985e9c514610d15578063f242432a14610d43578063f5298aca14610dd6575b600080fd5b6101a56004803603604081101561018f57600080fd5b506001600160a01b038135169060200135610e08565b60408051918252519081900360200190f35b6101de600480360360208110156101cd57600080fd5b50356001600160e01b031916610e2f565b604080519115158252519081900360200190f35b6101fa610eb9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023457818101518382015260200161021c565b50505050905090810190601f1680156102615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61028c6004803603602081101561028557600080fd5b5035610ee6565b604080516001600160a01b039092168252519081900360200190f35b6102d4600480360360408110156102be57600080fd5b506001600160a01b038135169060200135610f55565b005b6101fa600480360360208110156102ec57600080fd5b5035611092565b6102d46004803603608081101561030957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561033357600080fd5b82018360208201111561034557600080fd5b803590602001918460208302840111600160201b8311171561036657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103b557600080fd5b8201836020820111156103c757600080fd5b803590602001918460208302840111600160201b831117156103e857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561043757600080fd5b82018360208201111561044957600080fd5b803590602001918460018302840111600160201b8311171561046a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506111c1945050505050565b6102d4600480360360608110156104c157600080fd5b506001600160a01b0381358116916020810135909116906040013561126f565b6102d4600480360360a08110156104f757600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561052a57600080fd5b82018360208201111561053c57600080fd5b803590602001918460208302840111600160201b8311171561055d57600080fd5b919390929091602081019035600160201b81111561057a57600080fd5b82018360208201111561058c57600080fd5b803590602001918460208302840111600160201b831117156105ad57600080fd5b919390929091602081019035600160201b8111156105ca57600080fd5b8201836020820111156105dc57600080fd5b803590602001918460018302840111600160201b831117156105fd57600080fd5b5090925090506112fe565b61028c6117cc565b6102d46004803603602081101561062657600080fd5b810190602081018135600160201b81111561064057600080fd5b82018360208201111561065257600080fd5b803590602001918460018302840111600160201b8311171561067357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506117db945050505050565b6101de600480360360408110156106ca57600080fd5b506001600160a01b038135169060200135611842565b6102d4600480360360608110156106f657600080fd5b506001600160a01b038135811691602081013590911690604001356118f4565b6107d46004803603604081101561072c57600080fd5b810190602081018135600160201b81111561074657600080fd5b82018360208201111561075857600080fd5b803590602001918460208302840111600160201b8311171561077957600080fd5b919390929091602081019035600160201b81111561079657600080fd5b8201836020820111156107a857600080fd5b803590602001918460208302840111600160201b831117156107c957600080fd5b50909250905061190f565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108105781810151838201526020016107f8565b505050509050019250505060405180910390f35b61028c6004803603602081101561083a57600080fd5b5035611a30565b6102d46004803603606081101561085757600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561088157600080fd5b82018360208201111561089357600080fd5b803590602001918460208302840111600160201b831117156108b457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561090357600080fd5b82018360208201111561091557600080fd5b803590602001918460208302840111600160201b8311171561093657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611a8c945050505050565b6101a56004803603602081101561098a57600080fd5b50356001600160a01b0316611b33565b6102d4600480360360808110156109b057600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b8111156109e657600080fd5b8201836020820111156109f857600080fd5b803590602001918460018302840111600160201b83111715610a1957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611b9a945050505050565b6102d460048036036020811015610a7057600080fd5b810190602081018135600160201b811115610a8a57600080fd5b820183602082011115610a9c57600080fd5b803590602001918460018302840111600160201b83111715610abd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611c42945050505050565b61028c611ca5565b61028c611cb4565b6101fa611cc3565b6102d460048036036040811015610b2c57600080fd5b506001600160a01b0381351690602001351515611ce0565b6102d460048036036080811015610b5a57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b811115610b9457600080fd5b820183602082011115610ba657600080fd5b803590602001918460018302840111600160201b83111715610bc757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d9d945050505050565b6102d460048036036020811015610c1e57600080fd5b810190602081018135600160201b811115610c3857600080fd5b820183602082011115610c4a57600080fd5b803590602001918460018302840111600160201b83111715610c6b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f11945050505050565b6102d460048036036020811015610cc257600080fd5b50356001600160a01b0316611f74565b6101fa60048036036020811015610ce857600080fd5b503561206a565b6102d460048036036020811015610d0557600080fd5b50356001600160a01b03166120d0565b6101de60048036036040811015610d2b57600080fd5b506001600160a01b03813581169160200135166121c6565b6102d4600480360360a0811015610d5957600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b811115610d9857600080fd5b820183602082011115610daa57600080fd5b803590602001918460018302840111600160201b83111715610dcb57600080fd5b5090925090506121f4565b6102d460048036036060811015610dec57600080fd5b506001600160a01b0381351690602081013590604001356124b1565b60009081526003602090815260408083206001600160a01b03949094168352929052205490565b60006301ffc9a760e01b6001600160e01b031983161480610e605750636cdb3d1360e11b6001600160e01b03198316145b80610e7b57506380ac58cd60e01b6001600160e01b03198316145b80610e965750635b5e139f60e01b6001600160e01b03198316145b80610eb157506303a24d0760e21b6001600160e01b03198316145b90505b919050565b6040805180820190915260138152722137b9b7b71029b6b0b93a102b37bab1b432b960691b602082015290565b6000818152600560205260408120546001600160a01b0316610f395760405162461bcd60e51b815260040180806020018281038252602c815260200180613454602c913960400191505060405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610f6082611a30565b9050806001600160a01b0316836001600160a01b03161415610fba576040805162461bcd60e51b815260206004820152600e60248201526d14915115539110539517d0d0531360921b604482015290519081900360640190fd5b336001600160a01b0382161480610ff457506001600160a01b038116600090815260076020908152604080832033845290915290205460ff165b611036576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4160901b604482015290519081900360640190fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6060600860096110a184612558565b60405160200180848054600181600116156101000203166002900480156110ff5780601f106110dd5761010080835404028352918201916110ff565b820191906000526020600020905b8154815290600101906020018083116110eb575b5050838054600181600116156101000203166002900480156111585780601f10611136576101008083540402835291820191611158565b820191906000526020600020905b815481529060010190602001808311611144575b5050825160208401908083835b602083106111845780518252601f199092019160209182019101611165565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040529050919050565b6001546001600160a01b031661120c576040805162461bcd60e51b81526020600482015260196024820152600080516020613434833981519152604482015290519081900360640190fd5b6001546001600160a01b0316331461125d576040805162461bcd60e51b815260206004820152600f60248201526e554e415554484f52495a45445f564b60881b604482015290519081900360640190fd5b6112698484848461262f565b50505050565b6000818152600660205260409020546001600160a01b03163314806112a457503361129982611a30565b6001600160a01b0316145b6112ee576040805162461bcd60e51b81526020600482015260166024820152751393d517d3d5d3915497d393d497d054141493d5915160521b604482015290519081900360640190fd5b6112f9838383612858565b505050565b6001600160a01b038716611347576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b848314611389576040805162461bcd60e51b81526020600482015260186024820152600080516020613480833981519152604482015290519081900360640190fd5b6001600160a01b0388163314806113c857506001600160a01b038816600090815260076020908152604080832033845290915290205460ff1615156001145b61140b576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa9a160891b604482015290519081900360640190fd5b60005b8581101561167e57600087878381811061142457fe5b905060200201359050600086868481811061143b57fe5b905060200201359050600260009054906101000a90046001600160a01b03166001600160a01b0316639692d8568c84846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001838152602001828152602001935050505060006040518083038186803b1580156114b657600080fd5b505afa1580156114ca573d6000803e3d6000fd5b50505050611517816003600085815260200190815260200160002060008e6001600160a01b03166001600160a01b0316815260200190815260200160002054612aba90919063ffffffff16565b6003600084815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000208190555061159a6003600084815260200190815260200160002060008c6001600160a01b03166001600160a01b031681526020019081526020016000205482612b1790919063ffffffff16565b6003600084815260200190815260200160002060008c6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600260009054906101000a90046001600160a01b03166001600160a01b031663aa35569b8c8c85856040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b03168152602001838152602001828152602001945050505050600060405180830381600087803b15801561165957600080fd5b505af115801561166d573d6000803e3d6000fd5b50505050505080600101905061140e565b50866001600160a01b0316886001600160a01b0316336001600160a01b03166000805160206133d4833981519152898989896040518080602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600083820152604051601f909101601f19169092018290039850909650505050505050a46117c233898989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b91829185019084908082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250612b7692505050565b5050505050505050565b6001546001600160a01b031681565b6000546001600160a01b0316331461182b576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4f60901b604482015290519081900360640190fd5b805161183e906008906020840190613340565b5050565b6001546000906001600160a01b0316611890576040805162461bcd60e51b81526020600482015260196024820152600080516020613434833981519152604482015290519081900360640190fd5b6001546001600160a01b031633146118e1576040805162461bcd60e51b815260206004820152600f60248201526e554e415554484f52495a45445f564b60881b604482015290519081900360640190fd5b6118eb8383612d6d565b50600192915050565b6112f983838360405180602001604052806000815250611d9d565b6060838214611953576040805162461bcd60e51b81526020600482015260186024820152600080516020613480833981519152604482015290519081900360640190fd5b6060846001600160401b038111801561196b57600080fd5b50604051908082528060200260200182016040528015611995578160200160208202803683370190505b50905060005b85811015611a2657600360008686848181106119b357fe5b90506020020135815260200190815260200160002060008888848181106119d657fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611a1357fe5b602090810291909101015260010161199b565b5095945050505050565b6000818152600560205260408120546001600160a01b031680610eb1576040805162461bcd60e51b815260206004820152600f60248201526e2aa72222a324a722a22fa7aba722a960891b604482015290519081900360640190fd5b6001546001600160a01b0316611ad7576040805162461bcd60e51b81526020600482015260196024820152600080516020613434833981519152604482015290519081900360640190fd5b6001546001600160a01b03163314611b28576040805162461bcd60e51b815260206004820152600f60248201526e554e415554484f52495a45445f564b60881b604482015290519081900360640190fd5b6112f9838383612e79565b60006001600160a01b038216611b7e576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b506001600160a01b031660009081526004602052604090205490565b6001546001600160a01b0316611be5576040805162461bcd60e51b81526020600482015260196024820152600080516020613434833981519152604482015290519081900360640190fd5b6001546001600160a01b03163314611c36576040805162461bcd60e51b815260206004820152600f60248201526e554e415554484f52495a45445f564b60881b604482015290519081900360640190fd5b61126984848484613098565b6000546001600160a01b03163314611c92576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4f60901b604482015290519081900360640190fd5b805161183e90600a906020840190613340565b6002546001600160a01b031681565b6000546001600160a01b031681565b6040805180820190915260038152622129ab60e91b602082015290565b336001600160a01b0383161415611d2f576040805162461bcd60e51b815260206004820152600e60248201526d14915115539110539517d0d0531360921b604482015290519081900360640190fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b611da884848461126f565b611dba836001600160a01b031661316b565b1561126957604051630a85bd0160e11b8082526001600160a01b038681166004840190815290861660248401819052604484018690526080606485019081528551608486015285519394919363150b7a02938a938a938a938a939260a40190602085019080838360005b83811015611e3c578181015183820152602001611e24565b50505050905090810190601f168015611e695780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015611e8b57600080fd5b505af1158015611e9f573d6000803e3d6000fd5b505050506040513d6020811015611eb557600080fd5b50516001600160e01b03191614611269576040805162461bcd60e51b815260206004820152601b60248201527a155394d5541413d495115117d15490cdcc8c57d49150d152559151602a1b604482015290519081900360640190fd5b6000546001600160a01b03163314611f61576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4f60901b604482015290519081900360640190fd5b805161183e906009906020840190613340565b6000546001600160a01b03163314611fc4576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4f60901b604482015290519081900360640190fd5b806001600160a01b03811661200f576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0384169081179091556040805191825233602083015280517fac81fe7dd460bb5162a4a7d8fb92a13bd2baf450914fc6b1c4cc3180eba55af09281900390910190a15050565b6000818152600560205260409020546060906001600160a01b03166120c3576040805162461bcd60e51b815260206004820152600a6024820152691253959053125117d25160b21b604482015290519081900360640190fd5b6008600a6110a184612558565b6000546001600160a01b03163314612120576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4f60901b604482015290519081900360640190fd5b806001600160a01b03811661216b576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0384169081179091556040805191825233602083015280517f94d4208cb05337821fef5da6205084b70818af988524d8a2609a53a1ac1033d19281900390910190a15050565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6001600160a01b03851661223d576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b6001600160a01b03861633148061227c57506001600160a01b038616600090815260076020908152604080832033845290915290205460ff1615156001145b6122bf576040805162461bcd60e51b815260206004820152600f60248201526e15539055551213d49256915117d4d5608a1b604482015290519081900360640190fd5b60025460408051634b496c2b60e11b81526001600160a01b038981166004830152602482018890526044820187905291519190921691639692d856916064808301926000929190829003018186803b15801561231a57600080fd5b505afa15801561232e573d6000803e3d6000fd5b50505060008581526003602090815260408083206001600160a01b038b16845290915290205461235f915084612aba565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054612397908490612b17565b60008581526003602090815260408083206001600160a01b03808b168086529190935281842094909455600254815163aa35569b60e01b81528b8416600482015260248101959095526044850189905260648501889052905191169263aa35569b92608480830193919282900301818387803b15801561241657600080fd5b505af115801561242a573d6000803e3d6000fd5b5050604080518781526020810187905281516001600160a01b03808b1695508b16935033926000805160206133f4833981519152928290030190a46124a9338787878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317192505050565b505050505050565b6001546001600160a01b03166124fc576040805162461bcd60e51b81526020600482015260196024820152600080516020613434833981519152604482015290519081900360640190fd5b6001546001600160a01b0316331461254d576040805162461bcd60e51b815260206004820152600f60248201526e554e415554484f52495a45445f564b60881b604482015290519081900360640190fd5b6112f9838383613274565b60608161257d57506040805180820190915260018152600360fc1b6020820152610eb4565b8160005b811561259557600101600a82049150612581565b6060816001600160401b03811180156125ad57600080fd5b506040519080825280601f01601f1916602001820160405280156125d8576020820181803683370190505b50905060001982015b851561262657600a860660300160f81b8282806001900393508151811061260457fe5b60200101906001600160f81b031916908160001a905350600a860495506125e1565b50949350505050565b6001600160a01b038416612678576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b81518351146126bc576040805162461bcd60e51b81526020600482015260186024820152600080516020613480833981519152604482015290519081900360640190fd5b60005b835181101561278057612737600360008684815181106126db57fe5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000205484838151811061272157fe5b6020026020010151612b1790919063ffffffff16565b6003600086848151811061274757fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a1682529092529020556001016126bf565b50836001600160a01b031660006001600160a01b0316336001600160a01b03166000805160206133d48339815191528686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156127f55781810151838201526020016127dd565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561283457818101518382015260200161281c565b5050505090500194505050505060405180910390a461126933600086868686612b76565b826001600160a01b031661286b82611a30565b6001600160a01b0316146128b7576040805162461bcd60e51b815260206004820152600e60248201526d15539055551213d49256915117d560921b604482015290519081900360640190fd5b6001600160a01b038216612900576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b600081815260066020908152604080832080546001600160a01b03199081169091556001600160a01b0387811685526004808552838620805460001901905587821680875284872080546001908101909155888852600587529685902080549094161790925593548251632da3ce8d60e11b815291820186905291519190931692635b479d1a926024808301939192829003018186803b1580156129a357600080fd5b505afa1580156129b7573d6000803e3d6000fd5b505050506040513d60208110156129cd57600080fd5b5051612a11576040805162461bcd60e51b815260206004820152600e60248201526d1195539114d7d49153115054d15160921b604482015290519081900360640190fd5b60025460408051630185545960e01b81526001600160a01b03868116600483015285811660248301526044820185905291519190921691630185545991606480830192600092919082900301818387803b158015612a6e57600080fd5b505af1158015612a82573d6000803e3d6000fd5b5050505080826001600160a01b0316846001600160a01b03166000805160206134a083398151915260405160405180910390a4505050565b600082821115612b11576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015612b6f576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b612b88846001600160a01b031661316b565b156124a95763bc197c8160e01b6001600160e01b031916846001600160a01b031663bc197c8188888787876040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015612c28578181015183820152602001612c10565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015612c67578181015183820152602001612c4f565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612ca3578181015183820152602001612c8b565b50505050905090810190601f168015612cd05780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015612cf557600080fd5b505af1158015612d09573d6000803e3d6000fd5b505050506040513d6020811015612d1f57600080fd5b50516001600160e01b031916146124a9576040805162461bcd60e51b815260206004820152600d60248201526c1393d517d4d5541413d4951151609a1b604482015290519081900360640190fd5b6001600160a01b038216612db6576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b6000818152600560205260409020546001600160a01b031615612e1f576040805162461bcd60e51b815260206004820152601c60248201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600490925280832080546001019055518392906000805160206134a0833981519152908290a45050565b6001600160a01b038316612ec2576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b8051825114612f06576040805162461bcd60e51b81526020600482015260186024820152600080516020613480833981519152604482015290519081900360640190fd5b60005b8251811015612fca57612f81828281518110612f2157fe5b602002602001015160036000868581518110612f3957fe5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b0316815260200190815260200160002054612aba90919063ffffffff16565b60036000858481518110612f9157fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b0389168252909252902055600101612f09565b5060006001600160a01b0316836001600160a01b0316336001600160a01b03166000805160206133d48339815191528585604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561303f578181015183820152602001613027565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561307e578181015183820152602001613066565b5050505090500194505050505060405180910390a4505050565b6001600160a01b0384166130e1576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b60008381526003602090815260408083206001600160a01b038816845290915290205461310e9083612b17565b60008481526003602090815260408083206001600160a01b038916808552908352818420949094558051878152918201869052805133926000805160206133f483398151915292908290030190a461126933600086868686613171565b3b151590565b613183846001600160a01b031661316b565b156124a95763f23a6e6160e01b6001600160e01b031916846001600160a01b031663f23a6e6188888787876040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561322457818101518382015260200161320c565b50505050905090810190601f1680156132515780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612cf557600080fd5b6001600160a01b0383166132bd576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b60008281526003602090815260408083206001600160a01b03871684529091529020546132ea9082612aba565b60008381526003602090815260408083206001600160a01b038816808552908352818420949094558051868152918201859052805192939233926000805160206133f483398151915292908290030190a4505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061338157805160ff19168380011785556133ae565b828001600101855582156133ae579182015b828111156133ae578251825591602001919060010190613393565b506133ba9291506133be565b5090565b5b808211156133ba57600081556001016133bf56fe4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fbc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62554e5350454349464945445f4144445245535300000000000000000000000000554e5350454349464945445f564f55434845524b45524e454c000000000000004552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4d49534d4154434845445f41525241595f4c454e475448530000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220fda738bcf665c0786787f55bf56877161c62224da548f5bf5998fd8d12f2bfa364736f6c63430007010033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101745760003560e01c8062fdd58e1461017957806301ffc9a7146101b757806306fdde03146101f2578063081812fc1461026f578063095ea7b3146102a85780630e89341c146102d65780631f7fdffa146102f357806323b872dd146104ab5780632eb2c2d6146104e157806335649a831461060857806338b6db2e1461061057806340c10f19146106b457806342842e0e146106e05780634e1273f4146107165780636352211e146108245780636b20c4541461084157806370a0823114610974578063731133e91461099a5780637d64afde14610a5a5780638cfb578e14610afe5780638da5cb5b14610b0657806395d89b4114610b0e578063a22cb46514610b16578063b88d4fde14610b44578063bb49944014610c08578063bd17de4014610cac578063c87b56dd14610cd2578063d95be43a14610cef578063e985e9c514610d15578063f242432a14610d43578063f5298aca14610dd6575b600080fd5b6101a56004803603604081101561018f57600080fd5b506001600160a01b038135169060200135610e08565b60408051918252519081900360200190f35b6101de600480360360208110156101cd57600080fd5b50356001600160e01b031916610e2f565b604080519115158252519081900360200190f35b6101fa610eb9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023457818101518382015260200161021c565b50505050905090810190601f1680156102615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61028c6004803603602081101561028557600080fd5b5035610ee6565b604080516001600160a01b039092168252519081900360200190f35b6102d4600480360360408110156102be57600080fd5b506001600160a01b038135169060200135610f55565b005b6101fa600480360360208110156102ec57600080fd5b5035611092565b6102d46004803603608081101561030957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561033357600080fd5b82018360208201111561034557600080fd5b803590602001918460208302840111600160201b8311171561036657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103b557600080fd5b8201836020820111156103c757600080fd5b803590602001918460208302840111600160201b831117156103e857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561043757600080fd5b82018360208201111561044957600080fd5b803590602001918460018302840111600160201b8311171561046a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506111c1945050505050565b6102d4600480360360608110156104c157600080fd5b506001600160a01b0381358116916020810135909116906040013561126f565b6102d4600480360360a08110156104f757600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561052a57600080fd5b82018360208201111561053c57600080fd5b803590602001918460208302840111600160201b8311171561055d57600080fd5b919390929091602081019035600160201b81111561057a57600080fd5b82018360208201111561058c57600080fd5b803590602001918460208302840111600160201b831117156105ad57600080fd5b919390929091602081019035600160201b8111156105ca57600080fd5b8201836020820111156105dc57600080fd5b803590602001918460018302840111600160201b831117156105fd57600080fd5b5090925090506112fe565b61028c6117cc565b6102d46004803603602081101561062657600080fd5b810190602081018135600160201b81111561064057600080fd5b82018360208201111561065257600080fd5b803590602001918460018302840111600160201b8311171561067357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506117db945050505050565b6101de600480360360408110156106ca57600080fd5b506001600160a01b038135169060200135611842565b6102d4600480360360608110156106f657600080fd5b506001600160a01b038135811691602081013590911690604001356118f4565b6107d46004803603604081101561072c57600080fd5b810190602081018135600160201b81111561074657600080fd5b82018360208201111561075857600080fd5b803590602001918460208302840111600160201b8311171561077957600080fd5b919390929091602081019035600160201b81111561079657600080fd5b8201836020820111156107a857600080fd5b803590602001918460208302840111600160201b831117156107c957600080fd5b50909250905061190f565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108105781810151838201526020016107f8565b505050509050019250505060405180910390f35b61028c6004803603602081101561083a57600080fd5b5035611a30565b6102d46004803603606081101561085757600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561088157600080fd5b82018360208201111561089357600080fd5b803590602001918460208302840111600160201b831117156108b457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561090357600080fd5b82018360208201111561091557600080fd5b803590602001918460208302840111600160201b8311171561093657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611a8c945050505050565b6101a56004803603602081101561098a57600080fd5b50356001600160a01b0316611b33565b6102d4600480360360808110156109b057600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b8111156109e657600080fd5b8201836020820111156109f857600080fd5b803590602001918460018302840111600160201b83111715610a1957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611b9a945050505050565b6102d460048036036020811015610a7057600080fd5b810190602081018135600160201b811115610a8a57600080fd5b820183602082011115610a9c57600080fd5b803590602001918460018302840111600160201b83111715610abd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611c42945050505050565b61028c611ca5565b61028c611cb4565b6101fa611cc3565b6102d460048036036040811015610b2c57600080fd5b506001600160a01b0381351690602001351515611ce0565b6102d460048036036080811015610b5a57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b811115610b9457600080fd5b820183602082011115610ba657600080fd5b803590602001918460018302840111600160201b83111715610bc757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d9d945050505050565b6102d460048036036020811015610c1e57600080fd5b810190602081018135600160201b811115610c3857600080fd5b820183602082011115610c4a57600080fd5b803590602001918460018302840111600160201b83111715610c6b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f11945050505050565b6102d460048036036020811015610cc257600080fd5b50356001600160a01b0316611f74565b6101fa60048036036020811015610ce857600080fd5b503561206a565b6102d460048036036020811015610d0557600080fd5b50356001600160a01b03166120d0565b6101de60048036036040811015610d2b57600080fd5b506001600160a01b03813581169160200135166121c6565b6102d4600480360360a0811015610d5957600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b811115610d9857600080fd5b820183602082011115610daa57600080fd5b803590602001918460018302840111600160201b83111715610dcb57600080fd5b5090925090506121f4565b6102d460048036036060811015610dec57600080fd5b506001600160a01b0381351690602081013590604001356124b1565b60009081526003602090815260408083206001600160a01b03949094168352929052205490565b60006301ffc9a760e01b6001600160e01b031983161480610e605750636cdb3d1360e11b6001600160e01b03198316145b80610e7b57506380ac58cd60e01b6001600160e01b03198316145b80610e965750635b5e139f60e01b6001600160e01b03198316145b80610eb157506303a24d0760e21b6001600160e01b03198316145b90505b919050565b6040805180820190915260138152722137b9b7b71029b6b0b93a102b37bab1b432b960691b602082015290565b6000818152600560205260408120546001600160a01b0316610f395760405162461bcd60e51b815260040180806020018281038252602c815260200180613454602c913960400191505060405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610f6082611a30565b9050806001600160a01b0316836001600160a01b03161415610fba576040805162461bcd60e51b815260206004820152600e60248201526d14915115539110539517d0d0531360921b604482015290519081900360640190fd5b336001600160a01b0382161480610ff457506001600160a01b038116600090815260076020908152604080832033845290915290205460ff165b611036576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4160901b604482015290519081900360640190fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6060600860096110a184612558565b60405160200180848054600181600116156101000203166002900480156110ff5780601f106110dd5761010080835404028352918201916110ff565b820191906000526020600020905b8154815290600101906020018083116110eb575b5050838054600181600116156101000203166002900480156111585780601f10611136576101008083540402835291820191611158565b820191906000526020600020905b815481529060010190602001808311611144575b5050825160208401908083835b602083106111845780518252601f199092019160209182019101611165565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040529050919050565b6001546001600160a01b031661120c576040805162461bcd60e51b81526020600482015260196024820152600080516020613434833981519152604482015290519081900360640190fd5b6001546001600160a01b0316331461125d576040805162461bcd60e51b815260206004820152600f60248201526e554e415554484f52495a45445f564b60881b604482015290519081900360640190fd5b6112698484848461262f565b50505050565b6000818152600660205260409020546001600160a01b03163314806112a457503361129982611a30565b6001600160a01b0316145b6112ee576040805162461bcd60e51b81526020600482015260166024820152751393d517d3d5d3915497d393d497d054141493d5915160521b604482015290519081900360640190fd5b6112f9838383612858565b505050565b6001600160a01b038716611347576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b848314611389576040805162461bcd60e51b81526020600482015260186024820152600080516020613480833981519152604482015290519081900360640190fd5b6001600160a01b0388163314806113c857506001600160a01b038816600090815260076020908152604080832033845290915290205460ff1615156001145b61140b576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa9a160891b604482015290519081900360640190fd5b60005b8581101561167e57600087878381811061142457fe5b905060200201359050600086868481811061143b57fe5b905060200201359050600260009054906101000a90046001600160a01b03166001600160a01b0316639692d8568c84846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001838152602001828152602001935050505060006040518083038186803b1580156114b657600080fd5b505afa1580156114ca573d6000803e3d6000fd5b50505050611517816003600085815260200190815260200160002060008e6001600160a01b03166001600160a01b0316815260200190815260200160002054612aba90919063ffffffff16565b6003600084815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000208190555061159a6003600084815260200190815260200160002060008c6001600160a01b03166001600160a01b031681526020019081526020016000205482612b1790919063ffffffff16565b6003600084815260200190815260200160002060008c6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600260009054906101000a90046001600160a01b03166001600160a01b031663aa35569b8c8c85856040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b03168152602001838152602001828152602001945050505050600060405180830381600087803b15801561165957600080fd5b505af115801561166d573d6000803e3d6000fd5b50505050505080600101905061140e565b50866001600160a01b0316886001600160a01b0316336001600160a01b03166000805160206133d4833981519152898989896040518080602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600083820152604051601f909101601f19169092018290039850909650505050505050a46117c233898989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b91829185019084908082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250612b7692505050565b5050505050505050565b6001546001600160a01b031681565b6000546001600160a01b0316331461182b576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4f60901b604482015290519081900360640190fd5b805161183e906008906020840190613340565b5050565b6001546000906001600160a01b0316611890576040805162461bcd60e51b81526020600482015260196024820152600080516020613434833981519152604482015290519081900360640190fd5b6001546001600160a01b031633146118e1576040805162461bcd60e51b815260206004820152600f60248201526e554e415554484f52495a45445f564b60881b604482015290519081900360640190fd5b6118eb8383612d6d565b50600192915050565b6112f983838360405180602001604052806000815250611d9d565b6060838214611953576040805162461bcd60e51b81526020600482015260186024820152600080516020613480833981519152604482015290519081900360640190fd5b6060846001600160401b038111801561196b57600080fd5b50604051908082528060200260200182016040528015611995578160200160208202803683370190505b50905060005b85811015611a2657600360008686848181106119b357fe5b90506020020135815260200190815260200160002060008888848181106119d657fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611a1357fe5b602090810291909101015260010161199b565b5095945050505050565b6000818152600560205260408120546001600160a01b031680610eb1576040805162461bcd60e51b815260206004820152600f60248201526e2aa72222a324a722a22fa7aba722a960891b604482015290519081900360640190fd5b6001546001600160a01b0316611ad7576040805162461bcd60e51b81526020600482015260196024820152600080516020613434833981519152604482015290519081900360640190fd5b6001546001600160a01b03163314611b28576040805162461bcd60e51b815260206004820152600f60248201526e554e415554484f52495a45445f564b60881b604482015290519081900360640190fd5b6112f9838383612e79565b60006001600160a01b038216611b7e576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b506001600160a01b031660009081526004602052604090205490565b6001546001600160a01b0316611be5576040805162461bcd60e51b81526020600482015260196024820152600080516020613434833981519152604482015290519081900360640190fd5b6001546001600160a01b03163314611c36576040805162461bcd60e51b815260206004820152600f60248201526e554e415554484f52495a45445f564b60881b604482015290519081900360640190fd5b61126984848484613098565b6000546001600160a01b03163314611c92576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4f60901b604482015290519081900360640190fd5b805161183e90600a906020840190613340565b6002546001600160a01b031681565b6000546001600160a01b031681565b6040805180820190915260038152622129ab60e91b602082015290565b336001600160a01b0383161415611d2f576040805162461bcd60e51b815260206004820152600e60248201526d14915115539110539517d0d0531360921b604482015290519081900360640190fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b611da884848461126f565b611dba836001600160a01b031661316b565b1561126957604051630a85bd0160e11b8082526001600160a01b038681166004840190815290861660248401819052604484018690526080606485019081528551608486015285519394919363150b7a02938a938a938a938a939260a40190602085019080838360005b83811015611e3c578181015183820152602001611e24565b50505050905090810190601f168015611e695780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015611e8b57600080fd5b505af1158015611e9f573d6000803e3d6000fd5b505050506040513d6020811015611eb557600080fd5b50516001600160e01b03191614611269576040805162461bcd60e51b815260206004820152601b60248201527a155394d5541413d495115117d15490cdcc8c57d49150d152559151602a1b604482015290519081900360640190fd5b6000546001600160a01b03163314611f61576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4f60901b604482015290519081900360640190fd5b805161183e906009906020840190613340565b6000546001600160a01b03163314611fc4576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4f60901b604482015290519081900360640190fd5b806001600160a01b03811661200f576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0384169081179091556040805191825233602083015280517fac81fe7dd460bb5162a4a7d8fb92a13bd2baf450914fc6b1c4cc3180eba55af09281900390910190a15050565b6000818152600560205260409020546060906001600160a01b03166120c3576040805162461bcd60e51b815260206004820152600a6024820152691253959053125117d25160b21b604482015290519081900360640190fd5b6008600a6110a184612558565b6000546001600160a01b03163314612120576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4f60901b604482015290519081900360640190fd5b806001600160a01b03811661216b576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0384169081179091556040805191825233602083015280517f94d4208cb05337821fef5da6205084b70818af988524d8a2609a53a1ac1033d19281900390910190a15050565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6001600160a01b03851661223d576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b6001600160a01b03861633148061227c57506001600160a01b038616600090815260076020908152604080832033845290915290205460ff1615156001145b6122bf576040805162461bcd60e51b815260206004820152600f60248201526e15539055551213d49256915117d4d5608a1b604482015290519081900360640190fd5b60025460408051634b496c2b60e11b81526001600160a01b038981166004830152602482018890526044820187905291519190921691639692d856916064808301926000929190829003018186803b15801561231a57600080fd5b505afa15801561232e573d6000803e3d6000fd5b50505060008581526003602090815260408083206001600160a01b038b16845290915290205461235f915084612aba565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054612397908490612b17565b60008581526003602090815260408083206001600160a01b03808b168086529190935281842094909455600254815163aa35569b60e01b81528b8416600482015260248101959095526044850189905260648501889052905191169263aa35569b92608480830193919282900301818387803b15801561241657600080fd5b505af115801561242a573d6000803e3d6000fd5b5050604080518781526020810187905281516001600160a01b03808b1695508b16935033926000805160206133f4833981519152928290030190a46124a9338787878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317192505050565b505050505050565b6001546001600160a01b03166124fc576040805162461bcd60e51b81526020600482015260196024820152600080516020613434833981519152604482015290519081900360640190fd5b6001546001600160a01b0316331461254d576040805162461bcd60e51b815260206004820152600f60248201526e554e415554484f52495a45445f564b60881b604482015290519081900360640190fd5b6112f9838383613274565b60608161257d57506040805180820190915260018152600360fc1b6020820152610eb4565b8160005b811561259557600101600a82049150612581565b6060816001600160401b03811180156125ad57600080fd5b506040519080825280601f01601f1916602001820160405280156125d8576020820181803683370190505b50905060001982015b851561262657600a860660300160f81b8282806001900393508151811061260457fe5b60200101906001600160f81b031916908160001a905350600a860495506125e1565b50949350505050565b6001600160a01b038416612678576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b81518351146126bc576040805162461bcd60e51b81526020600482015260186024820152600080516020613480833981519152604482015290519081900360640190fd5b60005b835181101561278057612737600360008684815181106126db57fe5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000205484838151811061272157fe5b6020026020010151612b1790919063ffffffff16565b6003600086848151811061274757fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a1682529092529020556001016126bf565b50836001600160a01b031660006001600160a01b0316336001600160a01b03166000805160206133d48339815191528686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156127f55781810151838201526020016127dd565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561283457818101518382015260200161281c565b5050505090500194505050505060405180910390a461126933600086868686612b76565b826001600160a01b031661286b82611a30565b6001600160a01b0316146128b7576040805162461bcd60e51b815260206004820152600e60248201526d15539055551213d49256915117d560921b604482015290519081900360640190fd5b6001600160a01b038216612900576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b600081815260066020908152604080832080546001600160a01b03199081169091556001600160a01b0387811685526004808552838620805460001901905587821680875284872080546001908101909155888852600587529685902080549094161790925593548251632da3ce8d60e11b815291820186905291519190931692635b479d1a926024808301939192829003018186803b1580156129a357600080fd5b505afa1580156129b7573d6000803e3d6000fd5b505050506040513d60208110156129cd57600080fd5b5051612a11576040805162461bcd60e51b815260206004820152600e60248201526d1195539114d7d49153115054d15160921b604482015290519081900360640190fd5b60025460408051630185545960e01b81526001600160a01b03868116600483015285811660248301526044820185905291519190921691630185545991606480830192600092919082900301818387803b158015612a6e57600080fd5b505af1158015612a82573d6000803e3d6000fd5b5050505080826001600160a01b0316846001600160a01b03166000805160206134a083398151915260405160405180910390a4505050565b600082821115612b11576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015612b6f576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b612b88846001600160a01b031661316b565b156124a95763bc197c8160e01b6001600160e01b031916846001600160a01b031663bc197c8188888787876040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015612c28578181015183820152602001612c10565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015612c67578181015183820152602001612c4f565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612ca3578181015183820152602001612c8b565b50505050905090810190601f168015612cd05780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015612cf557600080fd5b505af1158015612d09573d6000803e3d6000fd5b505050506040513d6020811015612d1f57600080fd5b50516001600160e01b031916146124a9576040805162461bcd60e51b815260206004820152600d60248201526c1393d517d4d5541413d4951151609a1b604482015290519081900360640190fd5b6001600160a01b038216612db6576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b6000818152600560205260409020546001600160a01b031615612e1f576040805162461bcd60e51b815260206004820152601c60248201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600490925280832080546001019055518392906000805160206134a0833981519152908290a45050565b6001600160a01b038316612ec2576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b8051825114612f06576040805162461bcd60e51b81526020600482015260186024820152600080516020613480833981519152604482015290519081900360640190fd5b60005b8251811015612fca57612f81828281518110612f2157fe5b602002602001015160036000868581518110612f3957fe5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b0316815260200190815260200160002054612aba90919063ffffffff16565b60036000858481518110612f9157fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b0389168252909252902055600101612f09565b5060006001600160a01b0316836001600160a01b0316336001600160a01b03166000805160206133d48339815191528585604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561303f578181015183820152602001613027565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561307e578181015183820152602001613066565b5050505090500194505050505060405180910390a4505050565b6001600160a01b0384166130e1576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b60008381526003602090815260408083206001600160a01b038816845290915290205461310e9083612b17565b60008481526003602090815260408083206001600160a01b038916808552908352818420949094558051878152918201869052805133926000805160206133f483398151915292908290030190a461126933600086868686613171565b3b151590565b613183846001600160a01b031661316b565b156124a95763f23a6e6160e01b6001600160e01b031916846001600160a01b031663f23a6e6188888787876040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561322457818101518382015260200161320c565b50505050905090810190601f1680156132515780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612cf557600080fd5b6001600160a01b0383166132bd576040805162461bcd60e51b81526020600482015260136024820152600080516020613414833981519152604482015290519081900360640190fd5b60008281526003602090815260408083206001600160a01b03871684529091529020546132ea9082612aba565b60008381526003602090815260408083206001600160a01b038816808552908352818420949094558051868152918201859052805192939233926000805160206133f483398151915292908290030190a4505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061338157805160ff19168380011785556133ae565b828001600101855582156133ae579182015b828111156133ae578251825591602001919060010190613393565b506133ba9291506133be565b5090565b5b808211156133ba57600081556001016133bf56fe4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fbc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62554e5350454349464945445f4144445245535300000000000000000000000000554e5350454349464945445f564f55434845524b45524e454c000000000000004552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4d49534d4154434845445f41525241595f4c454e475448530000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220fda738bcf665c0786787f55bf56877161c62224da548f5bf5998fd8d12f2bfa364736f6c63430007010033",
  "immutableReferences": {},
  "sourceMap": "683:31050:2:-:0;;;2872:51;;;;;;;;;-1:-1:-1;2897:5:2;:18;;-1:-1:-1;;;;;;2897:18:2;2905:10;2897:18;;;683:31050;;;;;;",
  "deployedSourceMap": "683:31050:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15700:191;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15700:191:2;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19222:512;;;;;;;;;;;;;;;;-1:-1:-1;19222:512:2;-1:-1:-1;;;;;;19222:512:2;;:::i;:::-;;;;;;;;;;;;;;;;;;29073:107;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10570:306;;;;;;;;;;;;;;;;-1:-1:-1;10570:306:2;;:::i;:::-;;;;-1:-1:-1;;;;;10570:306:2;;;;;;;;;;;;;;9530:722;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9530:722:2;;;;;;;;:::i;:::-;;28731:218;;;;;;;;;;;;;;;;-1:-1:-1;28731:218:2;;:::i;23120:276::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23120:276:2;;;;;;;;;;;;;;;-1:-1:-1;;;23120:276:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23120:276:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23120:276:2;;;;;;;;-1:-1:-1;23120:276:2;;-1:-1:-1;;;;;23120:276:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23120:276:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23120:276:2;;;;;;;;-1:-1:-1;23120:276:2;;-1:-1:-1;;;;;23120:276:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23120:276:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23120:276:2;;-1:-1:-1;23120:276:2;;-1:-1:-1;;;;;23120:276:2:i;7380:428::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7380:428:2;;;;;;;;;;;;;;;;;:::i;11356:1881::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11356:1881:2;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11356:1881:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11356:1881:2;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11356:1881:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11356:1881:2;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11356:1881:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11356:1881:2;;;;;;;;;;-1:-1:-1;11356:1881:2;;-1:-1:-1;11356:1881:2;-1:-1:-1;11356:1881:2;:::i;881:35::-;;;:::i;27746:109::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27746:109:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27746:109:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27746:109:2;;-1:-1:-1;27746:109:2;;-1:-1:-1;;;;;27746:109:2:i;21750:196::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21750:196:2;;;;;;;;:::i;5511:183::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5511:183:2;;;;;;;;;;;;;;;;;:::i;17192:628::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17192:628:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17192:628:2;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17192:628:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17192:628:2;;;;;;;;;;-1:-1:-1;17192:628:2;;-1:-1:-1;17192:628:2;-1:-1:-1;17192:628:2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16631:316;;;;;;;;;;;;;;;;-1:-1:-1;16631:316:2;;:::i;26235:213::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26235:213:2;;;;;;;;;;;;;;;-1:-1:-1;;;26235:213:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26235:213:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26235:213:2;;;;;;;;-1:-1:-1;26235:213:2;;-1:-1:-1;;;;;26235:213:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26235:213:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26235:213:2;;-1:-1:-1;26235:213:2;;-1:-1:-1;;;;;26235:213:2:i;16107:273::-;;;;;;;;;;;;;;;;-1:-1:-1;16107:273:2;-1:-1:-1;;;;;16107:273:2;;:::i;20259:216::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20259:216:2;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20259:216:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20259:216:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20259:216:2;;-1:-1:-1;20259:216:2;;-1:-1:-1;;;;;20259:216:2:i;28247:111::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28247:111:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28247:111:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28247:111:2;;-1:-1:-1;28247:111:2;;-1:-1:-1;;;;;28247:111:2:i;963:33::-;;;:::i;837:20::-;;;:::i;29289:95::-;;;:::i;18096:413::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18096:413:2;;;;;;;;;;:::i;6241:665::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6241:665:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6241:665:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6241:665:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6241:665:2;;-1:-1:-1;6241:665:2;;-1:-1:-1;;;;;6241:665:2:i;27995:113::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27995:113:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27995:113:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27995:113:2;;-1:-1:-1;27995:113:2;;-1:-1:-1;;;;;27995:113:2:i;30688:272::-;;;;;;;;;;;;;;;;-1:-1:-1;30688:272:2;-1:-1:-1;;;;;30688:272:2;;:::i;29716:289::-;;;;;;;;;;;;;;;;-1:-1:-1;29716:289:2;;:::i;30249:288::-;;;;;;;;;;;;;;;;-1:-1:-1;30249:288:2;-1:-1:-1;;;;;30249:288:2;;:::i;18800:223::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18800:223:2;;;;;;;;;;:::i;3371:1467::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3371:1467:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3371:1467:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3371:1467:2;;;;;;;;;;-1:-1:-1;3371:1467:2;;-1:-1:-1;3371:1467:2;-1:-1:-1;3371:1467:2;:::i;24978:190::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24978:190:2;;;;;;;;;;;;;:::i;15700:191::-;15823:7;15855:18;;;:8;:18;;;;;;;;-1:-1:-1;;;;;15855:28:2;;;;;;;;;;;;15700:191::o;19222:512::-;19338:4;-1:-1:-1;;;;;;;;;19438:26:2;;;;:79;;-1:-1:-1;;;;;;;;;;19491:26:2;;;19438:79;:133;;;-1:-1:-1;;;;;;;;;;19545:26:2;;;19438:133;:186;;;-1:-1:-1;;;;;;;;;;19598:26:2;;;19438:186;:258;;;-1:-1:-1;;;;;;;;;;19670:26:2;;;19438:258;19360:336;;19222:512;;;;:::o;29073:107::-;29144:28;;;;;;;;;;;;-1:-1:-1;;;29144:28:2;;;;29073:107;:::o;10570:306::-;10675:7;10722:19;;;:9;:19;;;;;;-1:-1:-1;;;;;10722:19:2;10700:127;;;;-1:-1:-1;;;10700:127:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10847:21:2;;;;:11;:21;;;;;;-1:-1:-1;;;;;10847:21:2;;10570:306::o;9530:722::-;9605:18;9626:17;9634:8;9626:7;:17::i;:::-;9605:38;;9669:10;-1:-1:-1;;;;;9662:17:2;:3;-1:-1:-1;;;;;9662:17:2;;;9654:44;;;;;-1:-1:-1;;;9654:44:2;;;;;;;;;;;;-1:-1:-1;;;9654:44:2;;;;;;;;;;;;;;;9831:10;-1:-1:-1;;;;;9831:24:2;;;;:86;;-1:-1:-1;;;;;;9876:29:2;;;;;;:17;:29;;;;;;;;9906:10;9876:41;;;;;;;;;;9831:86;9809:190;;;;;-1:-1:-1;;;9809:190:2;;;;;;;;;;;;-1:-1:-1;;;9809:190:2;;;;;;;;;;;;;;;10166:21;;;;:11;:21;;;;;;:27;;-1:-1:-1;;;;;;10166:27:2;-1:-1:-1;;;;;10166:27:2;;;;;;;;;10209:35;;10166:21;;10209:35;;;;;;;9530:722;;;:::o;28731:218::-;28785:13;28873:12;28887:17;28906:19;28916:8;28906:9;:19::i;:::-;28856:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28856:70:2;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28856:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28811:130;;28731:218;;;:::o;23120:276::-;2382:20;;-1:-1:-1;;;;;2382:20:2;2360:109;;;;;-1:-1:-1;;;2360:109:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2360:109:2;;;;;;;;;;;;;;;2592:20;;-1:-1:-1;;;;;2592:20:2;2578:10;:34;2570:62;;;;;-1:-1:-1;;;2570:62:2;;;;;;;;;;;;-1:-1:-1;;;2570:62:2;;;;;;;;;;;;;;;23346:42:::1;23357:3;23362:9;23373:7;23382:5;23346:10;:42::i;:::-;23120:276:::0;;;;:::o;7380:428::-;7531:21;;;;:11;:21;;;;;;-1:-1:-1;;;;;7531:21:2;7556:10;7531:35;;:87;;-1:-1:-1;7608:10:2;7587:17;7595:8;7587:7;:17::i;:::-;-1:-1:-1;;;;;7587:31:2;;7531:87;7509:159;;;;;-1:-1:-1;;;7509:159:2;;;;;;;;;;;;-1:-1:-1;;;7509:159:2;;;;;;;;;;;;;;;7765:35;7779:5;7786:3;7791:8;7765:13;:35::i;:::-;7380:428;;;:::o;11356:1881::-;-1:-1:-1;;;;;11584:17:2;;11576:49;;;;;-1:-1:-1;;;11576:49:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11576:49:2;;;;;;;;;;;;;;;11734:34;;;11726:71;;;;;-1:-1:-1;;;11726:71:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11726:71:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;11921:19:2;;11930:10;11921:19;;:67;;-1:-1:-1;;;;;;11944:24:2;;;;;;:17;:24;;;;;;;;11969:10;11944:36;;;;;;;;;;:44;;:36;:44;11921:67;11899:132;;;;;-1:-1:-1;;;11899:132:2;;;;;;;;;;;;-1:-1:-1;;;11899:132:2;;;;;;;;;;;;;;;12133:9;12128:736;12148:20;;;12128:736;;;12190:15;12208:9;;12218:1;12208:12;;;;;;;;;;;;;12190:30;;12235:13;12251:7;;12259:1;12251:10;;;;;;;;;;;;;12235:26;;12291:18;;;;;;;;;-1:-1:-1;;;;;12291:18:2;-1:-1:-1;;;;;12278:55:2;;12352:5;12376:7;12402:5;12278:144;;;;;;;;;;;;;-1:-1:-1;;;;;12278:144:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12565:35;12594:5;12565:8;:17;12574:7;12565:17;;;;;;;;;;;:24;12583:5;-1:-1:-1;;;;;12565:24:2;-1:-1:-1;;;;;12565:24:2;;;;;;;;;;;;;:28;;:35;;;;:::i;:::-;12538:8;:17;12547:7;12538:17;;;;;;;;;;;:24;12556:5;-1:-1:-1;;;;;12538:24:2;-1:-1:-1;;;;;12538:24:2;;;;;;;;;;;;:62;;;;12640:33;12650:8;:17;12659:7;12650:17;;;;;;;;;;;:22;12668:3;-1:-1:-1;;;;;12650:22:2;-1:-1:-1;;;;;12650:22:2;;;;;;;;;;;;;12640:5;:9;;:33;;;;:::i;:::-;12615:8;:17;12624:7;12615:17;;;;;;;;;;;:22;12633:3;-1:-1:-1;;;;;12615:22:2;-1:-1:-1;;;;;12615:22:2;;;;;;;;;;;;:58;;;;12703:18;;;;;;;;;-1:-1:-1;;;;;12703:18:2;-1:-1:-1;;;;;12690:51:2;;12760:5;12784:3;12806:7;12832:5;12690:162;;;;;;;;;;;;;-1:-1:-1;;;;;12690:162:2;;;;;;-1:-1:-1;;;;;12690:162:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12128:736;;12170:3;;;;;12128:736;;;;12914:3;-1:-1:-1;;;;;12881:57:2;12907:5;-1:-1:-1;;;;;12881:57:2;12895:10;-1:-1:-1;;;;;12881:57:2;-1:-1:-1;;;;;;;;;;;12919:9:2;;12930:7;;12881:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12881:57:2;;;;;;;;;;;;;;;;;-1:-1:-1;12881:57:2;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12881:57:2;;;;;;;;-1:-1:-1;12881:57:2;;-1:-1:-1;;;;;;;12881:57:2;13054:175;13104:10;13129:5;13149:3;13167:9;;13054:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13054:175:2;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13191:7:2;;-1:-1:-1;13191:7:2;;;;13054:175;;;13191:7;;13054:175;13191:7;13054:175;;;;;;;;;-1:-1:-1;;13054:175:2;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13213:5:2;;-1:-1:-1;13213:5:2;;;;13054:175;;13213:5;;;;13054:175;;;;;;;;;-1:-1:-1;13054:35:2;;-1:-1:-1;;;13054:175:2:i;:::-;11356:1881;;;;;;;;:::o;881:35::-;;;-1:-1:-1;;;;;881:35:2;;:::o;27746:109::-;2180:5;;-1:-1:-1;;;;;2180:5:2;2166:10;:19;2158:46;;;;;-1:-1:-1;;;2158:46:2;;;;;;;;;;;;-1:-1:-1;;;2158:46:2;;;;;;;;;;;;;;;27824:23;;::::1;::::0;:12:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;:::-;;27746:109:::0;:::o;21750:196::-;2382:20;;21876:4;;-1:-1:-1;;;;;2382:20:2;2360:109;;;;;-1:-1:-1;;;2360:109:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2360:109:2;;;;;;;;;;;;;;;2592:20;;-1:-1:-1;;;;;2592:20:2;2578:10;:34;2570:62;;;;;-1:-1:-1;;;2570:62:2;;;;;;;;;;;;-1:-1:-1;;;2570:62:2;;;;;;;;;;;;;;;21898:18:::1;21904:2;21908:7;21898:5;:18::i;:::-;-1:-1:-1::0;21934:4:2::1;21750:196:::0;;;;:::o;5511:183::-;5644:42;5661:5;5668:3;5673:8;5644:42;;;;;;;;;;;;:16;:42::i;17192:628::-;17333:16;17384:36;;;17362:110;;;;;-1:-1:-1;;;17362:110:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17362:110:2;;;;;;;;;;;;;;;17574:30;17621:9;-1:-1:-1;;;;;17607:31:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17607:31:2;;17574:64;;17656:9;17651:129;17671:20;;;17651:129;;;17732:8;:22;17741:9;;17751:1;17741:12;;;;;;;;;;;;;17732:22;;;;;;;;;;;:36;17755:9;;17765:1;17755:12;;;;;;;;;;;;;-1:-1:-1;;;;;17755:12:2;-1:-1:-1;;;;;17732:36:2;-1:-1:-1;;;;;17732:36:2;;;;;;;;;;;;;17713:13;17727:1;17713:16;;;;;;;;;;;;;;;;;:55;17693:3;;17651:129;;;-1:-1:-1;17799:13:2;17192:628;-1:-1:-1;;;;;17192:628:2:o;16631:316::-;16696:7;16737:19;;;:9;:19;;;;;;-1:-1:-1;;;;;16737:19:2;16775:24;16767:52;;;;;-1:-1:-1;;;16767:52:2;;;;;;;;;;;;-1:-1:-1;;;16767:52:2;;;;;;;;;;;;;;26235:213;2382:20;;-1:-1:-1;;;;;2382:20:2;2360:109;;;;;-1:-1:-1;;;2360:109:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2360:109:2;;;;;;;;;;;;;;;2592:20;;-1:-1:-1;;;;;2592:20:2;2578:10;:34;2570:62;;;;;-1:-1:-1;;;2570:62:2;;;;;;;;;;;;-1:-1:-1;;;2570:62:2;;;;;;;;;;;;;;;26400:40:::1;26411:8;26421:9;26432:7;26400:10;:40::i;16107:273::-:0;16172:7;-1:-1:-1;;;;;16200:20:2;;16192:52;;;;;-1:-1:-1;;;16192:52:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16192:52:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16354:18:2;;;;;:10;:18;;;;;;;16107:273::o;20259:216::-;2382:20;;-1:-1:-1;;;;;2382:20:2;2360:109;;;;;-1:-1:-1;;;2360:109:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2360:109:2;;;;;;;;;;;;;;;2592:20;;-1:-1:-1;;;;;2592:20:2;2578:10;:34;2570:62;;;;;-1:-1:-1;;;2570:62:2;;;;;;;;;;;;-1:-1:-1;;;2570:62:2;;;;;;;;;;;;;;;20432:35:::1;20438:3;20443:8;20453:6;20461:5;20432;:35::i;28247:111::-:0;2180:5;;-1:-1:-1;;;;;2180:5:2;2166:10;:19;2158:46;;;;;-1:-1:-1;;;2158:46:2;;;;;;;;;;;;-1:-1:-1;;;2158:46:2;;;;;;;;;;;;;;;28322:28;;::::1;::::0;:16:::1;::::0;:28:::1;::::0;::::1;::::0;::::1;:::i;963:33::-:0;;;-1:-1:-1;;;;;963:33:2;;:::o;837:20::-;;;-1:-1:-1;;;;;837:20:2;;:::o;29289:95::-;29364:12;;;;;;;;;;;;-1:-1:-1;;;29364:12:2;;;;29289:95;:::o;18096:413::-;18236:10;-1:-1:-1;;;;;18236:23:2;;;;18228:50;;;;;-1:-1:-1;;;18228:50:2;;;;;;;;;;;;-1:-1:-1;;;18228:50:2;;;;;;;;;;;;;;;18405:10;18387:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;18387:40:2;;;;;;;;;;;;:51;;-1:-1:-1;;18387:51:2;;;;;;;;;;18454:47;;;;;;;18387:40;;18405:10;18454:47;;;;;;;;;;;18096:413;;:::o;6241:665::-;6403:34;6416:5;6423:3;6428:8;6403:12;:34::i;:::-;6454:16;:3;-1:-1:-1;;;;;6454:14:2;;:16::i;:::-;6450:449;;;6513:173;;-1:-1:-1;;;6513:173:2;;;-1:-1:-1;;;;;6513:173:2;;;;;;;;;:41;;;:173;;;;;;;;;;;;;;;;;;;;;;;;;;;6690:50;;6513:41;;6690:50;;6577:5;;6533:3;;6631:8;;6662:5;;6513:173;;;;;;;;;;;-1:-1:-1;6513:173:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6513:173:2;-1:-1:-1;;;;;;6513:227:2;;6487:316;;;;;-1:-1:-1;;;6487:316:2;;;;;;;;;;;;-1:-1:-1;;;6487:316:2;;;;;;;;;;;;;;27995:113;2180:5;;-1:-1:-1;;;;;2180:5:2;2166:10;:19;2158:46;;;;;-1:-1:-1;;;2158:46:2;;;;;;;;;;;;-1:-1:-1;;;2158:46:2;;;;;;;;;;;;;;;28071:29;;::::1;::::0;:17:::1;::::0;:29:::1;::::0;::::1;::::0;::::1;:::i;30688:272::-:0;2180:5;;-1:-1:-1;;;;;2180:5:2;2166:10;:19;2158:46;;;;;-1:-1:-1;;;2158:46:2;;;;;;;;;;;;-1:-1:-1;;;2158:46:2;;;;;;;;;;;;;;;30809:19;-1:-1:-1;;;;;2805:22:2;::::1;2797:47;;;::::0;;-1:-1:-1;;;2797:47:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2797:47:2;;;;;;;;;;;;;::::1;;30846:18:::2;:40:::0;;-1:-1:-1;;;;;;30846:40:2::2;-1:-1:-1::0;;;;;30846:40:2;::::2;::::0;;::::2;::::0;;;30902:50:::2;::::0;;;;;30941:10:::2;30902:50;::::0;::::2;::::0;;;::::2;::::0;;;;;;;;::::2;2299:1:::1;30688:272:::0;:::o;29716:289::-;29840:1;29809:19;;;:9;:19;;;;;;29775:13;;-1:-1:-1;;;;;29809:19:2;29801:56;;;;;-1:-1:-1;;;29801:56:2;;;;;;;;;;;;-1:-1:-1;;;29801:56:2;;;;;;;;;;;;;;;29930:12;29944:16;29962:19;29972:8;29962:9;:19::i;30249:288::-;2180:5;;-1:-1:-1;;;;;2180:5:2;2166:10;:19;2158:46;;;;;-1:-1:-1;;;2158:46:2;;;;;;;;;;;;-1:-1:-1;;;2158:46:2;;;;;;;;;;;;;;;30374:21;-1:-1:-1;;;;;2805:22:2;::::1;2797:47;;;::::0;;-1:-1:-1;;;2797:47:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2797:47:2;;;;;;;;;;;;;::::1;;30413:20:::2;:44:::0;;-1:-1:-1;;;;;;30413:44:2::2;-1:-1:-1::0;;;;;30413:44:2;::::2;::::0;;::::2;::::0;;;30475:54:::2;::::0;;;;;30518:10:::2;30475:54;::::0;::::2;::::0;;;::::2;::::0;;;;;;;;::::2;2299:1:::1;30249:288:::0;:::o;18800:223::-;-1:-1:-1;;;;;18977:27:2;;;18948:4;18977:27;;;:17;:27;;;;;;;;:38;;;;;;;;;;;;;;;18800:223::o;3371:1467::-;-1:-1:-1;;;;;3570:17:2;;3562:49;;;;;-1:-1:-1;;;3562:49:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3562:49:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;3734:19:2;;3743:10;3734:19;;:67;;-1:-1:-1;;;;;;3757:24:2;;;;;;:17;:24;;;;;;;;3782:10;3757:36;;;;;;;;;;:44;;:36;:44;3734:67;3712:132;;;;;-1:-1:-1;;;3712:132:2;;;;;;;;;;;;-1:-1:-1;;;3712:132:2;;;;;;;;;;;;;;;3953:18;;3940:130;;;-1:-1:-1;;;3940:130:2;;-1:-1:-1;;;;;3940:130:2;;;;;;;;;;;;;;;;;;;;;3953:18;;;;;3940:55;;:130;;;;;3953:18;;3940:130;;;;;;;3953:18;3940:130;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4206:18:2;;;;:8;:18;;;;;;;;-1:-1:-1;;;;;4206:25:2;;;;;;;;;;:37;;-1:-1:-1;4236:6:2;4206:29;:37::i;:::-;4178:18;;;;:8;:18;;;;;;;;-1:-1:-1;;;;;4178:25:2;;;;;;;;;;:65;;;;4291:23;;;;;;4280:35;;:6;;:10;:35::i;:::-;4254:18;;;;:8;:18;;;;;;;;-1:-1:-1;;;;;4254:23:2;;;;;;;;;;;;;:61;;;;4341:18;;4328:144;;-1:-1:-1;;;4328:144:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4341:18;;;4328:51;;:144;;;;;4254:18;;4328:144;;;;;4254:18;4341;4328:144;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4490:56:2;;;;;;;;;;;;;;-1:-1:-1;;;;;4490:56:2;;;;-1:-1:-1;4490:56:2;;;-1:-1:-1;4505:10:2;;-1:-1:-1;;;;;;;;;;;4490:56:2;;;;;;;4662:168;4707:10;4732:5;4752:3;4770:8;4793:6;4814:5;;4662:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4662:30:2;;-1:-1:-1;;;4662:168:2:i;:::-;3371:1467;;;;;;:::o;24978:190::-;2382:20;;-1:-1:-1;;;;;2382:20:2;2360:109;;;;;-1:-1:-1;;;2360:109:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2360:109:2;;;;;;;;;;;;;;;2592:20;;-1:-1:-1;;;;;2592:20:2;2578:10;:34;2570:62;;;;;-1:-1:-1;;;2570:62:2;;;;;;;;;;;;-1:-1:-1;;;2570:62:2;;;;;;;;;;;;;;;25127:33:::1;25133:8;25143;25153:6;25127:5;:33::i;31199:531::-:0;31280:27;31329:7;31325:50;;-1:-1:-1;31353:10:2;;;;;;;;;;;;-1:-1:-1;;;31353:10:2;;;;;;31325:50;31397:2;31385:9;31432:69;31439:6;;31432:69;;31462:5;;31487:2;31482:7;;;;31432:69;;;31511:17;31541:3;-1:-1:-1;;;;;31531:14:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31531:14:2;-1:-1:-1;31511:34:2;-1:-1:-1;;;31568:7:2;;31586:107;31593:7;;31586:107;;31653:2;31648;:7;31642:2;:14;31629:29;;31617:4;31622:3;;;;;;;31617:9;;;;;;;;;;;:41;-1:-1:-1;;;;;31617:41:2;;;;;;;;-1:-1:-1;31679:2:2;31673:8;;;;31586:107;;;-1:-1:-1;31717:4:2;31199:531;-1:-1:-1;;;;31199:531:2:o;23777:954::-;-1:-1:-1;;;;;23955:17:2;;23947:49;;;;;-1:-1:-1;;;23947:49:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23947:49:2;;;;;;;;;;;;;;;24125:7;:14;24105:9;:16;:34;24097:71;;;;;-1:-1:-1;;;24097:71:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24097:71:2;;;;;;;;;;;;;;;24277:9;24272:179;24296:9;:16;24292:1;:20;24272:179;;;24364:75;24397:8;:22;24406:9;24416:1;24406:12;;;;;;;;;;;;;;24397:22;;;;;;;;;;;:27;24420:3;-1:-1:-1;;;;;24397:27:2;-1:-1:-1;;;;;24397:27:2;;;;;;;;;;;;;24364:7;24372:1;24364:10;;;;;;;;;;;;;;:14;;:75;;;;:::i;:::-;24334:8;:22;24343:9;24353:1;24343:12;;;;;;;;;;;;;;;;;;;24334:22;;;;;;;;;;;;;-1:-1:-1;24334:22:2;;;-1:-1:-1;;;;;24334:27:2;;;;;;;;;:105;24314:3;;24272:179;;;;24506:3;-1:-1:-1;;;;;24468:62:2;24502:1;-1:-1:-1;;;;;24468:62:2;24482:10;-1:-1:-1;;;;;24468:62:2;-1:-1:-1;;;;;;;;;;;24511:9:2;24522:7;24468:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24543:180;24593:10;24626:1;24643:3;24661:9;24685:7;24707:5;24543:35;:180::i;8219:854::-;8371:5;-1:-1:-1;;;;;8350:26:2;:17;8358:8;8350:7;:17::i;:::-;-1:-1:-1;;;;;8350:26:2;;8342:53;;;;;-1:-1:-1;;;8342:53:2;;;;;;;;;;;;-1:-1:-1;;;8342:53:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;8498:17:2;;8490:49;;;;;-1:-1:-1;;;8490:49:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8490:49:2;;;;;;;;;;;;;;;8674:1;8642:21;;;:11;:21;;;;;;;;:34;;-1:-1:-1;;;;;;8642:34:2;;;;;;-1:-1:-1;;;;;8689:17:2;;;;;:10;:17;;;;;;:19;;-1:-1:-1;;8689:19:2;;;8719:15;;;;;;;;;:17;;8642:34;8719:17;;;;;;8749:19;;;:9;:19;;;;;;:25;;;;;;;;;8810:20;;8795:68;;-1:-1:-1;;;8795:68:2;;;;;;;;;;8810:20;;;;;8795:58;;:68;;;;;8642:21;;8795:68;;;;;8810:20;8795:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8795:68:2;8787:95;;;;;-1:-1:-1;;;8787:95:2;;;;;;;;;;;;-1:-1:-1;;;8787:95:2;;;;;;;;;;;;;;;8908:18;;8895:122;;;-1:-1:-1;;;8895:122:2;;-1:-1:-1;;;;;8895:122:2;;;;;;;;;;;;;;;;;;;;;;8908:18;;;;;8895:50;;:122;;;;;8908:18;;8895:122;;;;;;;8908:18;;8895:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9056:8;9051:3;-1:-1:-1;;;;;9035:30:2;9044:5;-1:-1:-1;;;;;9035:30:2;-1:-1:-1;;;;;;;;;;;9035:30:2;;;;;;;;;8219:854;;;:::o;3128:155:22:-;3186:7;3218:1;3213;:6;;3205:49;;;;;-1:-1:-1;;;3205:49:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3271:5:22;;;3128:155::o;2682:175::-;2740:7;2771:5;;;2794:6;;;;2786:46;;;;;-1:-1:-1;;;2786:46:22;;;;;;;;;;;;-1:-1:-1;;;2786:46:22;;;;;;;;;;;;;;;2849:1;2682:175;-1:-1:-1;;;2682:175:22:o;14723:740:2:-;14974:16;:3;-1:-1:-1;;;;;14974:14:2;;:16::i;:::-;14970:486;;;15254:57;;;-1:-1:-1;;;;;15033:278:2;;15054:3;-1:-1:-1;;;;;15033:48:2;;15104:9;15136:5;15164:9;15196:7;15226:5;15033:217;;;;;;;;;;;;;-1:-1:-1;;;;;15033:217:2;;;;;;-1:-1:-1;;;;;15033:217:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15033:217:2;-1:-1:-1;;;;;;15033:278:2;;15007:353;;;;;-1:-1:-1;;;15007:353:2;;;;;;;;;;;;-1:-1:-1;;;15007:353:2;;;;;;;;;;;;;;22225:454;-1:-1:-1;;;;;22299:17:2;;22291:49;;;;;-1:-1:-1;;;22291:49:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22291:49:2;;;;;;;;;;;;;;;22494:1;22463:19;;;:9;:19;;;;;;-1:-1:-1;;;;;22463:19:2;:33;22441:111;;;;;-1:-1:-1;;;22441:111:2;;;;;;;;;;;;-1:-1:-1;;;22441:111:2;;;;;;;;;;;;;;;22565:19;;;;:9;:19;;;;;;;;:25;;-1:-1:-1;;;;;;22565:25:2;-1:-1:-1;;;;;22565:25:2;;;;;;;;22601:15;;;:10;:15;;;;;;:17;;-1:-1:-1;22601:17:2;;;22636:35;22565:19;;;-1:-1:-1;;;;;;;;;;;22636:35:2;22565:19;;22636:35;22225:454;;:::o;26706:819::-;-1:-1:-1;;;;;26860:22:2;;26852:54;;;;;-1:-1:-1;;;26852:54:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26852:54:2;;;;;;;;;;;;;;;27035:7;:14;27015:9;:16;:34;27007:71;;;;;-1:-1:-1;;;27007:71:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27007:71:2;;;;;;;;;;;;;;;27187:9;27182:175;27206:9;:16;27202:1;:20;27182:175;;;27279:66;27334:7;27342:1;27334:10;;;;;;;;;;;;;;27279:8;:22;27288:9;27298:1;27288:12;;;;;;;;;;;;;;27279:22;;;;;;;;;;;:32;27302:8;-1:-1:-1;;;;;27279:32:2;-1:-1:-1;;;;;27279:32:2;;;;;;;;;;;;;:54;;:66;;;;:::i;:::-;27244:8;:22;27253:9;27263:1;27253:12;;;;;;;;;;;;;;;;;;;27244:22;;;;;;;;;;;;;-1:-1:-1;27244:22:2;;;-1:-1:-1;;;;;27244:32:2;;;;;;;;;:101;27224:3;;27182:175;;;;27458:1;-1:-1:-1;;;;;27374:143:2;27427:8;-1:-1:-1;;;;;27374:143:2;27402:10;-1:-1:-1;;;;;27374:143:2;-1:-1:-1;;;;;;;;;;;27475:9:2;27499:7;27374:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26706:819;;;:::o;20855:621::-;-1:-1:-1;;;;;21008:17:2;;21000:49;;;;;-1:-1:-1;;;21000:49:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21000:49:2;;;;;;;;;;;;;;;21170:18;;;;:8;:18;;;;;;;;-1:-1:-1;;;;;21170:23:2;;;;;;;;;;:35;;21198:6;21170:27;:35::i;:::-;21144:18;;;;:8;:18;;;;;;;;-1:-1:-1;;;;;21144:23:2;;;;;;;;;;;:61;;;;21221;;;;;;;;;;;;;21236:10;;-1:-1:-1;;;;;;;;;;;21221:61:2;;;;;;;;21295:173;21340:10;21373:1;21390:3;21408:8;21431:6;21452:5;21295:30;:173::i;718:413:25:-;1078:20;1116:8;;;718:413::o;13620:703:2:-;13846:16;:3;-1:-1:-1;;;;;13846:14:2;;:16::i;:::-;13842:474;;;14119:52;;;-1:-1:-1;;;;;13905:266:2;;13926:3;-1:-1:-1;;;;;13905:43:2;;13971:9;14003:5;14031:8;14062:6;14091:5;13905:210;;;;;;;;;;;;;-1:-1:-1;;;;;13905:210:2;;;;;;-1:-1:-1;;;;;13905:210:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25415:453;-1:-1:-1;;;;;25544:22:2;;25536:54;;;;;-1:-1:-1;;;25536:54:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25536:54:2;;;;;;;;;;;;;;;25738:18;;;;:8;:18;;;;;;;;-1:-1:-1;;;;;25738:28:2;;;;;;;;;;:40;;25771:6;25738:32;:40::i;:::-;25707:18;;;;:8;:18;;;;;;;;-1:-1:-1;;;;;25707:28:2;;;;;;;;;;;:71;;;;25794:66;;;;;;;;;;;;;25707:18;;:28;25809:10;;-1:-1:-1;;;;;;;;;;;25794:66:2;;;;;;;;25415:453;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;",
  "source": "// SPDX-License-Identifier: LGPL-3.0-or-later\r\n\r\npragma solidity 0.7.1;\r\n\r\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\r\nimport \"@openzeppelin/contracts/utils/Address.sol\";\r\n\r\nimport \"./interfaces/IERC1155.sol\";\r\nimport \"./interfaces/IERC1155TokenReceiver.sol\";\r\nimport \"./interfaces/IERC721.sol\";\r\nimport \"./interfaces/IERC721TokenReceiver.sol\";\r\nimport \"./interfaces/IERC1155ERC721.sol\";\r\nimport \"./interfaces/IBosonRouter.sol\";\r\nimport \"./interfaces/IVoucherKernel.sol\";\r\n\r\n//preparing for ERC-1066, ERC-1444, EIP-838\r\n\r\n/**\r\n * @title Multi-token contract, implementing ERC-1155 and ERC-721 hybrid\r\n *  Inspired by: https://github.com/pixowl/sandbox-smart-contracts\r\n */\r\ncontract ERC1155ERC721 is IERC1155, IERC721, IERC1155ERC721 {\r\n    using SafeMath for uint256;\r\n    using Address for address;\r\n\r\n    //min security\r\n    address public owner; //contract owner\r\n    address public voucherKernelAddress; //address of the VoucherKernel contract\r\n    address public bosonRouterAddress; //address of the BosonRouter contract\r\n\r\n    //standard reqs\r\n    //ERC-1155\r\n    mapping(uint256 => mapping(address => uint256)) private balances; //balance of token ids of an account\r\n\r\n    //ERC-721\r\n    mapping(address => uint256) private balance721;\r\n    mapping(uint256 => address) private owners721;\r\n    mapping(uint256 => address) private operator721;\r\n\r\n    //shared storage: ERC-1155 & ERC-721\r\n    mapping(address => mapping(address => bool)) private operatorApprovals; //approval of accounts of an operator\r\n    //metadata is shared, too (but ERC-1155 and ERC-721 have different metadata extension reqs)\r\n    string internal metadataBase;\r\n    string internal metadata1155Route;\r\n    string internal metadata721Route;\r\n\r\n    //ERC-1155 metadata event: URIs are defined in RFC 3986. The URI MUST point to a JSON file that conforms to the ERC-1155 Metadata URI JSON Schema.\r\n    //not used ATM\r\n    //event URI(string _value, uint256 indexed _id);\r\n\r\n    event LogVoucherKernelSet(address _newVoucherKernel, address _triggeredBy);\r\n\r\n    event LogBosonRouterSet(address _newBosonRouter, address _triggeredBy);\r\n\r\n    modifier onlyOwner() {\r\n        require(msg.sender == owner, \"UNAUTHORIZED_O\"); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n        _;\r\n    }\r\n\r\n    modifier onlyFromVoucherKernel() {\r\n        require(\r\n            voucherKernelAddress != address(0),\r\n            \"UNSPECIFIED_VOUCHERKERNEL\"\r\n        ); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n        require(msg.sender == voucherKernelAddress, \"UNAUTHORIZED_VK\"); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n        _;\r\n    }\r\n\r\n    modifier notZeroAddress(address _address) {\r\n        require(_address != address(0), \"ZERO_ADDRESS\");\r\n        _;\r\n    }\r\n\r\n    constructor() {\r\n        owner = msg.sender;\r\n    }\r\n\r\n    /**\r\n     * @notice Transfers amount of _tokenId from-to addresses with safety call.\r\n     * If _to is a smart contract, will call onERC1155Received\r\n     * @dev ERC-1155\r\n     * @param _from    Source address\r\n     * @param _to      Destination address\r\n     * @param _tokenId ID of the token\r\n     * @param _value   Transfer amount\r\n     * @param _data    Additional data forwarded to onERC1155Received if _to is a contract\r\n     */\r\n    function safeTransferFrom(\r\n        address _from,\r\n        address _to,\r\n        uint256 _tokenId,\r\n        uint256 _value,\r\n        bytes calldata _data\r\n    ) external override {\r\n        require(_to != address(0), \"UNSPECIFIED_ADDRESS\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n        require(\r\n            _from == msg.sender || operatorApprovals[_from][msg.sender] == true,\r\n            \"UNAUTHORIZED_ST\"\r\n        ); //hex\"10\"FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n\r\n        IBosonRouter(bosonRouterAddress)._beforeERC1155Transfer(\r\n            _from,\r\n            _tokenId,\r\n            _value\r\n        );\r\n\r\n        // SafeMath throws with insufficient funds or if _id is not valid (balance will be 0)\r\n        balances[_tokenId][_from] = balances[_tokenId][_from].sub(_value);\r\n        balances[_tokenId][_to] = _value.add(balances[_tokenId][_to]);\r\n\r\n        IBosonRouter(bosonRouterAddress)._onERC1155Transfer(\r\n            _from,\r\n            _to,\r\n            _tokenId,\r\n            _value\r\n        );\r\n\r\n        emit TransferSingle(msg.sender, _from, _to, _tokenId, _value);\r\n\r\n        //make sure the tx was accepted - in case of a revert below, the event above is reverted, too\r\n        _doSafeTransferAcceptanceCheck(\r\n            msg.sender,\r\n            _from,\r\n            _to,\r\n            _tokenId,\r\n            _value,\r\n            _data\r\n        );\r\n    }\r\n\r\n    /**\r\n     * @notice Safely transfers the ownership of a given token ID to another address\r\n     * If the target address is a contract, it must implement `onERC721Received`,\r\n     * which is called upon a safe transfer, and return the magic value\r\n     * `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`; otherwise,\r\n     * the transfer is reverted.\r\n     * Requires the msg.sender to be the owner, approved, or operator\r\n     * @dev ERC-721\r\n     * @param _from current owner of the token\r\n     * @param _to address to receive the ownership of the given token ID\r\n     * @param _tokenId uint256 ID of the token to be transferred\r\n     */\r\n    function safeTransferFrom(\r\n        address _from,\r\n        address _to,\r\n        uint256 _tokenId\r\n    ) public override {\r\n        safeTransferFrom(_from, _to, _tokenId, \"\");\r\n    }\r\n\r\n    /**\r\n     * @notice Safely transfers the ownership of a given token ID to another address\r\n     * If the target address is a contract, it must implement `onERC721Received`\r\n     * Requires the msg.sender to be the owner, approved, or operator\r\n     * @dev ERC-721\r\n     * @param _from current owner of the token\r\n     * @param _to address to receive the ownership of the given token ID\r\n     * @param _tokenId uint256 ID of the token to be transferred\r\n     * @param _data bytes data to send along with a safe transfer check\r\n     */\r\n    function safeTransferFrom(\r\n        address _from,\r\n        address _to,\r\n        uint256 _tokenId,\r\n        bytes memory _data\r\n    ) public override {\r\n        transferFrom(_from, _to, _tokenId);\r\n\r\n        if (_to.isContract()) {\r\n            require(\r\n                ERC721TokenReceiver(_to).onERC721Received(\r\n                    _from,\r\n                    _to,\r\n                    _tokenId,\r\n                    _data\r\n                ) == ERC721TokenReceiver(_to).onERC721Received.selector,\r\n                \"UNSUPPORTED_ERC721_RECEIVED\"\r\n            ); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @notice Transfers the ownership of a given token ID to another address.\r\n     * Usage of this method is discouraged, use `safeTransferFrom` whenever possible.\r\n     * Requires the msg.sender to be the owner, approved, or operator.\r\n     * @dev ERC-721\r\n     * @param _from current owner of the token\r\n     * @param _to address to receive the ownership of the given token ID\r\n     * @param _tokenId uint256 ID of the token to be transferred\r\n     */\r\n    function transferFrom(\r\n        address _from,\r\n        address _to,\r\n        uint256 _tokenId\r\n    ) public override {\r\n        require(\r\n            operator721[_tokenId] == msg.sender ||\r\n                ownerOf(_tokenId) == msg.sender,\r\n            \"NOT_OWNER_NOR_APPROVED\"\r\n        ); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n\r\n        _transferFrom(_from, _to, _tokenId);\r\n    }\r\n\r\n    /**\r\n     * @notice Internal function to transfer ownership of a given token ID to another address.\r\n     * As opposed to transferFrom, this imposes no restrictions on msg.sender.\r\n     * @dev ERC-721\r\n     * @param _from current owner of the token\r\n     * @param _to address to receive the ownership of the given token ID\r\n     * @param _tokenId uint256 ID of the token to be transferred\r\n     */\r\n    function _transferFrom(\r\n        address _from,\r\n        address _to,\r\n        uint256 _tokenId\r\n    ) internal {\r\n        require(ownerOf(_tokenId) == _from, \"UNAUTHORIZED_T\"); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n        require(_to != address(0), \"UNSPECIFIED_ADDRESS\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n\r\n        operator721[_tokenId] = address(0);\r\n\r\n        balance721[_from]--;\r\n        balance721[_to]++;\r\n\r\n        owners721[_tokenId] = _to;\r\n\r\n        require(IVoucherKernel(voucherKernelAddress).isVoucherTransferable(_tokenId), \"FUNDS_RELEASED\");\r\n\r\n        IBosonRouter(bosonRouterAddress)._onERC721Transfer(\r\n            _from,\r\n            _to,\r\n            _tokenId\r\n        );\r\n\r\n        emit Transfer(_from, _to, _tokenId);\r\n    }\r\n\r\n    /**\r\n     * @notice Approves another address to transfer the given token ID\r\n     * The zero address indicates there is no approved address.\r\n     * There can only be one approved address per token at a given time.\r\n     * Can only be called by the token owner or an approved operator.\r\n     * @dev ERC-721\r\n     * @param _to address to be approved for the given token ID\r\n     * @param _tokenId uint256 ID of the token to be approved\r\n     */\r\n    function approve(address _to, uint256 _tokenId) public override {\r\n        address tokenOwner = ownerOf(_tokenId);\r\n        require(_to != tokenOwner, \"REDUNDANT_CALL\"); //hex\"18\" FISSION.code(FISSION.Category.Permission, FISSION.Status.NotApplicatableToCurrentState)\r\n\r\n        require(\r\n            msg.sender == tokenOwner ||\r\n                operatorApprovals[tokenOwner][msg.sender], // isApprovedForAll(owner, msg.sender),\r\n            \"UNAUTHORIZED_A\"\r\n        ); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n        //\"ERC721: approve caller is not owner nor approved for all\"\r\n\r\n        operator721[_tokenId] = _to;\r\n        emit Approval(tokenOwner, _to, _tokenId);\r\n    }\r\n\r\n    /**\r\n     * @notice Gets the approved address for a token ID, or zero if no address set\r\n     * Reverts if the token ID does not exist.\r\n     * @dev ERC-721\r\n     * @param _tokenId uint256 ID of the token to query the approval of\r\n     * @return address currently approved for the given token ID\r\n     */\r\n    function getApproved(uint256 _tokenId)\r\n        public\r\n        view\r\n        override\r\n        returns (address)\r\n    {\r\n        require(\r\n            owners721[_tokenId] != address(0),\r\n            \"ERC721: approved query for nonexistent token\"\r\n        );\r\n\r\n        return operator721[_tokenId];\r\n    }\r\n\r\n    /**\r\n        @notice Transfers amount of _tokenId from-to addresses with safety call.\r\n        If _to is a smart contract, will call onERC1155BatchReceived\r\n        @dev ERC-1155\r\n        @param _from    Source address\r\n        @param _to      Destination address\r\n        @param _tokenIds array of token IDs\r\n        @param _values   array of transfer amounts\r\n        @param _data    Additional data forwarded to onERC1155BatchReceived if _to is a contract\r\n    */\r\n    function safeBatchTransferFrom(\r\n        address _from,\r\n        address _to,\r\n        uint256[] calldata _tokenIds,\r\n        uint256[] calldata _values,\r\n        bytes calldata _data\r\n    ) external override {\r\n        require(_to != address(0), \"UNSPECIFIED_ADDRESS\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n        require(_tokenIds.length == _values.length, \"MISMATCHED_ARRAY_LENGTHS\"); //hex\"28\" FISSION.code(FISSION.Category.Find, FISSION.Status.Duplicate_Conflict_Collision)\r\n        require(\r\n            _from == msg.sender || operatorApprovals[_from][msg.sender] == true,\r\n            \"UNAUTHORIZED_SB\"\r\n        ); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n\r\n        for (uint256 i = 0; i < _tokenIds.length; ++i) {\r\n            uint256 tokenId = _tokenIds[i];\r\n            uint256 value = _values[i];\r\n\r\n            IBosonRouter(bosonRouterAddress)._beforeERC1155Transfer(\r\n                _from,\r\n                tokenId,\r\n                value\r\n            );\r\n\r\n            // SafeMath throws with insufficient funds or if _id is not valid (balance will be 0)\r\n            balances[tokenId][_from] = balances[tokenId][_from].sub(value);\r\n            balances[tokenId][_to] = value.add(balances[tokenId][_to]);\r\n\r\n            IBosonRouter(bosonRouterAddress)._onERC1155Transfer(\r\n                _from,\r\n                _to,\r\n                tokenId,\r\n                value\r\n            );\r\n        }\r\n\r\n        emit TransferBatch(msg.sender, _from, _to, _tokenIds, _values);\r\n\r\n        //make sure the tx was accepted - in case of a revert below, the event above is reverted, too\r\n        _doSafeBatchTransferAcceptanceCheck(\r\n            msg.sender,\r\n            _from,\r\n            _to,\r\n            _tokenIds,\r\n            _values,\r\n            _data\r\n        );\r\n    }\r\n\r\n    /**\r\n     * @notice Check successful transfer if recipient is a contract\r\n     * @dev ERC-1155\r\n     * @param _operator The operator of the transfer\r\n     * @param _from     Address of sender\r\n     * @param _to       Address of recipient\r\n     * @param _tokenId  ID of the token\r\n     * @param _value    Value transferred\r\n     * @param _data     Optional data\r\n     */\r\n    function _doSafeTransferAcceptanceCheck(\r\n        address _operator,\r\n        address _from,\r\n        address _to,\r\n        uint256 _tokenId,\r\n        uint256 _value,\r\n        bytes memory _data\r\n    ) internal {\r\n        if (_to.isContract()) {\r\n            require(\r\n                ERC1155TokenReceiver(_to).onERC1155Received(\r\n                    _operator,\r\n                    _from,\r\n                    _tokenId,\r\n                    _value,\r\n                    _data\r\n                ) == ERC1155TokenReceiver(_to).onERC1155Received.selector,\r\n                \"NOT_SUPPORTED\"\r\n            ); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @notice Check successful transfer if recipient is a contract\r\n     * @dev ERC-1155\r\n     * @param _operator The operator of the transfer\r\n     * @param _from     Address of sender\r\n     * @param _to       Address of recipient\r\n     * @param _tokenIds Array of IDs of tokens\r\n     * @param _values   Array of values transferred\r\n     * @param _data     Optional data\r\n     */\r\n    function _doSafeBatchTransferAcceptanceCheck(\r\n        address _operator,\r\n        address _from,\r\n        address _to,\r\n        uint256[] memory _tokenIds,\r\n        uint256[] memory _values,\r\n        bytes memory _data\r\n    ) internal {\r\n        if (_to.isContract()) {\r\n            require(\r\n                ERC1155TokenReceiver(_to).onERC1155BatchReceived(\r\n                    _operator,\r\n                    _from,\r\n                    _tokenIds,\r\n                    _values,\r\n                    _data\r\n                ) == ERC1155TokenReceiver(_to).onERC1155BatchReceived.selector,\r\n                \"NOT_SUPPORTED\"\r\n            ); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n        }\r\n    }\r\n\r\n    /**\r\n        @notice Get the balance of tokens of an account\r\n        @dev ERC-1155\r\n        @param _account The address of the token holder\r\n        @param _tokenId ID of the token\r\n        @return         balance\r\n     */\r\n    function balanceOf(address _account, uint256 _tokenId)\r\n        external\r\n        view\r\n        override\r\n        returns (uint256)\r\n    {\r\n        return balances[_tokenId][_account];\r\n    }\r\n\r\n    /// @notice Count all NFTs assigned to an owner\r\n    /// @dev ERC-721\r\n    /// @param _owner An address for whom to query the balance\r\n    /// @return The number of NFTs owned by `_owner`, possibly zero\r\n    function balanceOf(address _owner) public view override returns (uint256) {\r\n        require(_owner != address(0), \"UNSPECIFIED_ADDRESS\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n\r\n        return balance721[_owner];\r\n    }\r\n\r\n    /**\r\n     * @notice Gets the owner of the specified token ID.\r\n     * @dev ERC-721\r\n     * @param _tokenId uint256 ID of the token to query the owner of\r\n     * @return address currently marked as the owner of the given token ID\r\n     */\r\n    function ownerOf(uint256 _tokenId) public view override returns (address) {\r\n        address tokenOwner = owners721[_tokenId];\r\n        require(tokenOwner != address(0), \"UNDEFINED_OWNER\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n\r\n        return tokenOwner;\r\n    }\r\n\r\n    /**\r\n        @notice Get the balance of account-token pairs.\r\n        @dev ERC-1155\r\n        @param _accounts The addresses of the token holders\r\n        @param _tokenIds IDs of the tokens\r\n        @return         balances\r\n     */\r\n    function balanceOfBatch(\r\n        address[] calldata _accounts,\r\n        uint256[] calldata _tokenIds\r\n    ) external view override returns (uint256[] memory) {\r\n        require(\r\n            _accounts.length == _tokenIds.length,\r\n            \"MISMATCHED_ARRAY_LENGTHS\"\r\n        ); //hex\"28\" FISSION.code(FISSION.Category.Find, FISSION.Status.Duplicate_Conflict_Collision)\r\n        uint256[] memory batchBalances = new uint256[](_accounts.length);\r\n\r\n        for (uint256 i = 0; i < _accounts.length; ++i) {\r\n            batchBalances[i] = balances[_tokenIds[i]][_accounts[i]];\r\n        }\r\n\r\n        return batchBalances;\r\n    }\r\n\r\n    /**\r\n     * @notice Approves or unapproves the operator.\r\n     * will revert if the caller attempts to approve itself as it is redundant\r\n     * @dev ERC-1155 & ERC-721\r\n     * @param _operator to (un)approve\r\n     * @param _approve flag to set or unset\r\n     */\r\n    function setApprovalForAll(address _operator, bool _approve)\r\n        external\r\n        override(IERC1155, IERC721)\r\n    {\r\n        require(msg.sender != _operator, \"REDUNDANT_CALL\"); //hex\"18\" FISSION.code(FISSION.Category.Permission, FISSION.Status.NotApplicatableToCurrentState)\r\n        operatorApprovals[msg.sender][_operator] = _approve;\r\n        emit ApprovalForAll(msg.sender, _operator, _approve);\r\n    }\r\n\r\n    /**\r\n        @notice Gets approval status of an operator for a given account.\r\n        @dev ERC-1155 & ERC-721\r\n        @param _account   token holder\r\n        @param _operator  operator to check\r\n        @return           True if the operator is approved, false if not\r\n    */\r\n    function isApprovedForAll(address _account, address _operator)\r\n        public\r\n        view\r\n        override(IERC1155, IERC721)\r\n        returns (bool)\r\n    {\r\n        return operatorApprovals[_account][_operator];\r\n    }\r\n\r\n    /**\r\n     * @notice Returns true if this contract implements the interface defined by _interfaceId_.\r\n     * This function call must use less than 30 000 gas. ATM not enforced.\r\n     */\r\n    function supportsInterface(bytes4 _interfaceId)\r\n        external\r\n        pure\r\n        override\r\n        returns (bool)\r\n    {\r\n        return\r\n            //check matching against ERC-165 identifiers\r\n            _interfaceId == 0x01ffc9a7 || //ERC-165\r\n            _interfaceId == 0xd9b67a26 || //ERC-1155\r\n            _interfaceId == 0x80ac58cd || //ERC-721\r\n            _interfaceId == 0x5b5e139f || //ERC-721 metadata extension\r\n            _interfaceId == 0x0e89341c; //ERC-1155 metadata extension\r\n    }\r\n\r\n    // // // // // // // //\r\n    // STANDARD - UTILS\r\n    // // // // // // // //\r\n    /**\r\n     * @notice Mint an amount of a desired token\r\n     * Currently no restrictions as to who is allowed to mint - so, it is public.\r\n     * @dev ERC-1155\r\n     * @param _to       owner of the minted token\r\n     * @param _tokenId  ID of the token to be minted\r\n     * @param _value    Amount of the token to be minted\r\n     * @param _data     Additional data forwarded to onERC1155BatchReceived if _to is a contract\r\n     */\r\n    function mint(\r\n        address _to,\r\n        uint256 _tokenId,\r\n        uint256 _value,\r\n        bytes memory _data\r\n    ) public override onlyFromVoucherKernel {\r\n        _mint(_to, _tokenId, _value, _data);\r\n    }\r\n\r\n    /**\r\n     * @notice Internal function to mint an amount of a desired token\r\n     * @dev ERC-1155\r\n     * @param _to       owner of the minted token\r\n     * @param _tokenId  ID of the token to be minted\r\n     * @param _value    Amount of the token to be minted\r\n     * @param _data     Additional data forwarded to onERC1155BatchReceived if _to is a contract\r\n     */\r\n    function _mint(\r\n        address _to,\r\n        uint256 _tokenId,\r\n        uint256 _value,\r\n        bytes memory _data\r\n    ) internal {\r\n        require(_to != address(0), \"UNSPECIFIED_ADDRESS\"); //FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n\r\n        balances[_tokenId][_to] = balances[_tokenId][_to].add(_value);\r\n        emit TransferSingle(msg.sender, address(0), _to, _tokenId, _value);\r\n\r\n        _doSafeTransferAcceptanceCheck(\r\n            msg.sender,\r\n            address(0),\r\n            _to,\r\n            _tokenId,\r\n            _value,\r\n            _data\r\n        );\r\n    }\r\n\r\n    /**\r\n     * @notice Function to mint tokens.\r\n     * @dev ERC-721\r\n     * @param to The address that will receive the minted tokens.\r\n     * @param tokenId The token id to mint.\r\n     * @return A boolean that indicates if the operation was successful.\r\n     */\r\n    function mint(address to, uint256 tokenId)\r\n        public\r\n        override\r\n        onlyFromVoucherKernel\r\n        returns (bool)\r\n    {\r\n        _mint(to, tokenId);\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * @notice Internal function to mint a new token.\r\n     * Reverts if the given token ID already exists.\r\n     * @dev ERC-721\r\n     * @param _to The address that will own the minted token\r\n     * @param _tokenId uint256 ID of the token to be minted\r\n     */\r\n    function _mint(address _to, uint256 _tokenId) internal {\r\n        require(_to != address(0), \"UNSPECIFIED_ADDRESS\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n        require(\r\n            owners721[_tokenId] == address(0),\r\n            \"ERC721: token already minted\"\r\n        );\r\n\r\n        owners721[_tokenId] = _to;\r\n        balance721[_to]++;\r\n\r\n        emit Transfer(address(0), _to, _tokenId);\r\n    }\r\n\r\n    /**\r\n     * @notice Batch minting of tokens\r\n     * Currently no restrictions as to who is allowed to mint - so, it is public.\r\n     * @dev ERC-1155\r\n     * @param _to The address that will own the minted token\r\n     * @param _tokenIds IDs of the tokens to be minted\r\n     * @param _values Amounts of the tokens to be minted\r\n     * @param _data Additional data forwarded to onERC1155BatchReceived if _to is a contract\r\n     */\r\n    function mintBatch(\r\n        address _to,\r\n        uint256[] memory _tokenIds,\r\n        uint256[] memory _values,\r\n        bytes memory _data\r\n    ) public onlyFromVoucherKernel {\r\n        //require approved minter\r\n\r\n        _mintBatch(_to, _tokenIds, _values, _data);\r\n    }\r\n\r\n    /**\r\n     * @notice Internal function for batch minting of tokens\\\r\n     * @dev ERC-1155\r\n     * @param _to The address that will own the minted token\r\n     * @param _tokenIds IDs of the tokens to be minted\r\n     * @param _values Amounts of the tokens to be minted\r\n     * @param _data Additional data forwarded to onERC1155BatchReceived if _to is a contract\r\n     */\r\n    function _mintBatch(\r\n        address _to,\r\n        uint256[] memory _tokenIds,\r\n        uint256[] memory _values,\r\n        bytes memory _data\r\n    ) internal {\r\n        require(_to != address(0), \"UNSPECIFIED_ADDRESS\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n        require(_tokenIds.length == _values.length, \"MISMATCHED_ARRAY_LENGTHS\"); //hex\"28\" FISSION.code(FISSION.Category.Find, FISSION.Status.Duplicate_Conflict_Collision)\r\n\r\n        for (uint256 i = 0; i < _tokenIds.length; i++) {\r\n            balances[_tokenIds[i]][_to] = _values[i].add(\r\n                balances[_tokenIds[i]][_to]\r\n            );\r\n        }\r\n\r\n        emit TransferBatch(msg.sender, address(0), _to, _tokenIds, _values);\r\n\r\n        _doSafeBatchTransferAcceptanceCheck(\r\n            msg.sender,\r\n            address(0),\r\n            _to,\r\n            _tokenIds,\r\n            _values,\r\n            _data\r\n        );\r\n    }\r\n\r\n    /**\r\n     * @notice Burn an amount of tokens with the given ID\r\n     * @dev ERC-1155\r\n     * @param _account  Account which owns the token\r\n     * @param _tokenId  ID of the token\r\n     * @param _value    Amount of the token\r\n     */\r\n    function burn(\r\n        address _account,\r\n        uint256 _tokenId,\r\n        uint256 _value\r\n    ) public override onlyFromVoucherKernel {\r\n        _burn(_account, _tokenId, _value);\r\n    }\r\n\r\n    /**\r\n     * @notice Burn an amount of tokens with the given ID\r\n     * @dev ERC-1155\r\n     * @param _account  Account which owns the token\r\n     * @param _tokenId  ID of the token\r\n     * @param _value    Amount of the token\r\n     */\r\n    function _burn(\r\n        address _account,\r\n        uint256 _tokenId,\r\n        uint256 _value\r\n    ) internal {\r\n        require(_account != address(0), \"UNSPECIFIED_ADDRESS\"); //\"UNSPECIFIED_ADDRESS\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n\r\n        balances[_tokenId][_account] = balances[_tokenId][_account].sub(_value);\r\n        emit TransferSingle(msg.sender, _account, address(0), _tokenId, _value);\r\n    }\r\n\r\n    /* Burning ERC-721 is not allowed, as a voucher (being an ERC-721 token) has a final state and shouldn't be destructed. */\r\n\r\n    /**\r\n     * @notice Batch burn an amounts of tokens\r\n     * @dev ERC-1155\r\n     * @param _account Account which owns the token\r\n     * @param _tokenIds IDs of the tokens\r\n     * @param _values Amounts of the tokens\r\n     */\r\n    function burnBatch(\r\n        address _account,\r\n        uint256[] memory _tokenIds,\r\n        uint256[] memory _values\r\n    ) public onlyFromVoucherKernel {\r\n        _burnBatch(_account, _tokenIds, _values);\r\n    }\r\n\r\n    /**\r\n     * @notice Internal function to batch burn an amounts of tokens\r\n     * @dev ERC-1155\r\n     * @param _account Account which owns the token\r\n     * @param _tokenIds IDs of the tokens\r\n     * @param _values Amounts of the tokens\r\n     */\r\n    function _burnBatch(\r\n        address _account,\r\n        uint256[] memory _tokenIds,\r\n        uint256[] memory _values\r\n    ) internal {\r\n        require(_account != address(0), \"UNSPECIFIED_ADDRESS\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n        require(_tokenIds.length == _values.length, \"MISMATCHED_ARRAY_LENGTHS\"); //hex\"28\" FISSION.code(FISSION.Category.Find, FISSION.Status.Duplicate_Conflict_Collision)\r\n\r\n        for (uint256 i = 0; i < _tokenIds.length; i++) {\r\n            balances[_tokenIds[i]][_account] = balances[_tokenIds[i]][_account]\r\n                .sub(_values[i]);\r\n        }\r\n\r\n        emit TransferBatch(\r\n            msg.sender,\r\n            _account,\r\n            address(0),\r\n            _tokenIds,\r\n            _values\r\n        );\r\n    }\r\n\r\n    // // // // // // // //\r\n    // METADATA EXTENSIONS\r\n    // // // // // // // //\r\n\r\n    /**\r\n     * @notice Setting the URL prefix for tokens metadata\r\n     * @param _newBase   New prefix to be used\r\n     */\r\n    function _setMetadataBase(string memory _newBase) public onlyOwner {\r\n        metadataBase = _newBase;\r\n    }\r\n\r\n    /**\r\n     * @notice Setting the URL route for ERC1155 tokens metadata\r\n     * @param _newRoute   New route to be used\r\n     */\r\n    function _set1155Route(string memory _newRoute) public onlyOwner {\r\n        metadata1155Route = _newRoute;\r\n    }\r\n\r\n    /**\r\n     * @notice Setting the URL route for ERC721 tokens metadata\r\n     * @param _newRoute   New route to be used\r\n     */\r\n    function _set721Route(string memory _newRoute) public onlyOwner {\r\n        metadata721Route = _newRoute;\r\n    }\r\n\r\n    /**\r\n     * @notice A distinct Uniform Resource Identifier (URI) for a given token.\r\n     * @dev ERC-1155\r\n     * URIs are defined in RFC 3986. The URI MUST point to a JSON file that conforms to the \"ERC-1155 Metadata URI JSON Schema\".\r\n     * @param _tokenId  The ID of the token\r\n     * @return          Full URI string for metadata of the _tokenId\r\n     */\r\n    function uri(uint256 _tokenId) external view returns (string memory) {\r\n        return\r\n            string(\r\n                abi.encodePacked(metadataBase, metadata1155Route, _uint2str(_tokenId))\r\n            );\r\n    }\r\n\r\n    /**\r\n     * @notice A descriptive name for a collection of NFTs in this contract\r\n     * @dev ERC-721\r\n     */\r\n    function name() external pure returns (string memory _name) {\r\n        return \"Boson Smart Voucher\";\r\n    }\r\n\r\n    /**\r\n     * @notice An abbreviated name for NFTs in this contract\r\n     * @dev ERC-721\r\n     */\r\n    function symbol() external pure returns (string memory _symbol) {\r\n        return \"BSV\";\r\n    }\r\n\r\n    /**\r\n     * @notice A distinct Uniform Resource Identifier (URI) for a given asset.\r\n     * @dev ERC-721\r\n     * Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC 3986. The URI may point to a JSON file that conforms to the \"ERC721 Metadata JSON Schema\".\r\n     * @param _tokenId  ID of the token\r\n     */\r\n    function tokenURI(uint256 _tokenId) external view returns (string memory) {\r\n        require(owners721[_tokenId] != address(0), \"INVALID_ID\");\r\n        return\r\n            string(\r\n                abi.encodePacked(metadataBase, metadata721Route, _uint2str(_tokenId))\r\n            );\r\n    }\r\n\r\n    // // // // // // // //\r\n    // UTILS\r\n    // // // // // // // //\r\n\r\n    /**\r\n     * @notice Set the address of the VoucherKernel contract\r\n     * @param _voucherKernelAddress   The address of the Voucher Kernel contract\r\n     */\r\n    function setVoucherKernelAddress(address _voucherKernelAddress)\r\n        external\r\n        onlyOwner\r\n        notZeroAddress(_voucherKernelAddress)\r\n    {\r\n        voucherKernelAddress = _voucherKernelAddress;\r\n\r\n        emit LogVoucherKernelSet(_voucherKernelAddress, msg.sender);\r\n    }\r\n\r\n    /**\r\n     * @notice Set the address of the Boson Router contract\r\n     * @param _bosonRouterAddress   The Boson Router  contract\r\n     */\r\n    function setBosonRouterAddress(address _bosonRouterAddress)\r\n        external\r\n        onlyOwner\r\n        notZeroAddress(_bosonRouterAddress)\r\n    {\r\n        bosonRouterAddress = _bosonRouterAddress;\r\n        emit LogBosonRouterSet(_bosonRouterAddress, msg.sender);\r\n    }\r\n\r\n    /**\r\n     * @notice Convert UINT to string\r\n     *  Thank you, Oraclize (aka Provable)!\r\n     *      https://github.com/provable-things/ethereum-api/blob/master/provableAPI_0.5.sol\r\n     * @param _i    uint parameter\r\n     */\r\n    function _uint2str(uint256 _i)\r\n        internal\r\n        pure\r\n        returns (string memory _uintAsString)\r\n    {\r\n        if (_i == 0) {\r\n            return \"0\";\r\n        }\r\n        uint256 j = _i;\r\n        uint256 len;\r\n        while (j != 0) {\r\n            len++;\r\n            j /= 10;\r\n        }\r\n        bytes memory bstr = new bytes(len);\r\n        uint256 k = len - 1;\r\n        while (_i != 0) {\r\n            bstr[k--] = bytes1(uint8(48 + (_i % 10)));\r\n            _i /= 10;\r\n        }\r\n        return string(bstr);\r\n    }\r\n}\r\n",
  "sourcePath": "E:\\Ludo\\Documents\\Developpement\\BOSON\\contracts\\contracts\\ERC1155ERC721.sol",
  "ast": {
    "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/ERC1155ERC721.sol",
    "exportedSymbols": {
      "ERC1155ERC721": [
        6007
      ]
    },
    "id": 6008,
    "license": "LGPL-3.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4381,
        "literals": [
          "solidity",
          "0.7",
          ".1"
        ],
        "nodeType": "PragmaDirective",
        "src": "49:22:2"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 4382,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 10850,
        "src": "75:51:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
        "file": "@openzeppelin/contracts/utils/Address.sol",
        "id": 4383,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 11437,
        "src": "128:51:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155.sol",
        "file": "./interfaces/IERC1155.sol",
        "id": 4384,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 8932,
        "src": "183:35:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155TokenReceiver.sol",
        "file": "./interfaces/IERC1155TokenReceiver.sol",
        "id": 4385,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 9014,
        "src": "220:48:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC721.sol",
        "file": "./interfaces/IERC721.sol",
        "id": 4386,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 9251,
        "src": "270:34:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC721TokenReceiver.sol",
        "file": "./interfaces/IERC721TokenReceiver.sol",
        "id": 4387,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 9269,
        "src": "306:47:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155ERC721.sol",
        "file": "./interfaces/IERC1155ERC721.sol",
        "id": 4388,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 8976,
        "src": "355:41:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IBosonRouter.sol",
        "file": "./interfaces/IBosonRouter.sol",
        "id": 4389,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 8748,
        "src": "398:39:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IVoucherKernel.sol",
        "file": "./interfaces/IVoucherKernel.sol",
        "id": 4390,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 9589,
        "src": "439:41:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 4392,
              "name": "IERC1155",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8931,
              "src": "709:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC1155_$8931",
                "typeString": "contract IERC1155"
              }
            },
            "id": 4393,
            "nodeType": "InheritanceSpecifier",
            "src": "709:8:2"
          },
          {
            "baseName": {
              "id": 4394,
              "name": "IERC721",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9250,
              "src": "719:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC721_$9250",
                "typeString": "contract IERC721"
              }
            },
            "id": 4395,
            "nodeType": "InheritanceSpecifier",
            "src": "719:7:2"
          },
          {
            "baseName": {
              "id": 4396,
              "name": "IERC1155ERC721",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8975,
              "src": "728:14:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC1155ERC721_$8975",
                "typeString": "contract IERC1155ERC721"
              }
            },
            "id": 4397,
            "nodeType": "InheritanceSpecifier",
            "src": "728:14:2"
          }
        ],
        "contractDependencies": [
          8931,
          8975,
          9025,
          9250
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 4391,
          "nodeType": "StructuredDocumentation",
          "src": "531:150:2",
          "text": " @title Multi-token contract, implementing ERC-1155 and ERC-721 hybrid\n  Inspired by: https://github.com/pixowl/sandbox-smart-contracts"
        },
        "fullyImplemented": true,
        "id": 6007,
        "linearizedBaseContracts": [
          6007,
          8975,
          9250,
          9025,
          8931
        ],
        "name": "ERC1155ERC721",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 4400,
            "libraryName": {
              "id": 4398,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10849,
              "src": "756:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$10849",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "750:27:2",
            "typeName": {
              "id": 4399,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "769:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 4403,
            "libraryName": {
              "id": 4401,
              "name": "Address",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11436,
              "src": "789:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Address_$11436",
                "typeString": "library Address"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "783:26:2",
            "typeName": {
              "id": 4402,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "801:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "constant": false,
            "functionSelector": "8da5cb5b",
            "id": 4405,
            "mutability": "mutable",
            "name": "owner",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "837:20:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 4404,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "837:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "35649a83",
            "id": 4407,
            "mutability": "mutable",
            "name": "voucherKernelAddress",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "881:35:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 4406,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "881:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8cfb578e",
            "id": 4409,
            "mutability": "mutable",
            "name": "bosonRouterAddress",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "963:33:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 4408,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "963:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4415,
            "mutability": "mutable",
            "name": "balances",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1080:64:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(uint256 => mapping(address => uint256))"
            },
            "typeName": {
              "id": 4414,
              "keyType": {
                "id": 4410,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1088:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1080:47:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(uint256 => mapping(address => uint256))"
              },
              "valueType": {
                "id": 4413,
                "keyType": {
                  "id": 4411,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1107:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1099:27:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 4412,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1118:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4419,
            "mutability": "mutable",
            "name": "balance721",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1205:46:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 4418,
              "keyType": {
                "id": 4416,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1213:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1205:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 4417,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1224:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4423,
            "mutability": "mutable",
            "name": "owners721",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1258:45:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
              "typeString": "mapping(uint256 => address)"
            },
            "typeName": {
              "id": 4422,
              "keyType": {
                "id": 4420,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1266:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1258:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                "typeString": "mapping(uint256 => address)"
              },
              "valueType": {
                "id": 4421,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1277:7:2",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4427,
            "mutability": "mutable",
            "name": "operator721",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1310:47:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
              "typeString": "mapping(uint256 => address)"
            },
            "typeName": {
              "id": 4426,
              "keyType": {
                "id": 4424,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1318:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1310:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                "typeString": "mapping(uint256 => address)"
              },
              "valueType": {
                "id": 4425,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1329:7:2",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4433,
            "mutability": "mutable",
            "name": "operatorApprovals",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1408:70:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
              "typeString": "mapping(address => mapping(address => bool))"
            },
            "typeName": {
              "id": 4432,
              "keyType": {
                "id": 4428,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1416:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1408:44:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                "typeString": "mapping(address => mapping(address => bool))"
              },
              "valueType": {
                "id": 4431,
                "keyType": {
                  "id": 4429,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1435:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1427:24:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "valueType": {
                  "id": 4430,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1446:4:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4435,
            "mutability": "mutable",
            "name": "metadataBase",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1620:28:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 4434,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1620:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 4437,
            "mutability": "mutable",
            "name": "metadata1155Route",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1655:33:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 4436,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1655:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 4439,
            "mutability": "mutable",
            "name": "metadata721Route",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1695:32:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 4438,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1695:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "id": 4445,
            "name": "LogVoucherKernelSet",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4444,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4441,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newVoucherKernel",
                  "nodeType": "VariableDeclaration",
                  "scope": 4445,
                  "src": "1990:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4440,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1990:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4443,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 4445,
                  "src": "2017:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4442,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2017:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1989:49:2"
            },
            "src": "1964:75:2"
          },
          {
            "anonymous": false,
            "id": 4451,
            "name": "LogBosonRouterSet",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4447,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newBosonRouter",
                  "nodeType": "VariableDeclaration",
                  "scope": 4451,
                  "src": "2071:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4446,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2071:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4449,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 4451,
                  "src": "2096:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4448,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2096:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2070:47:2"
            },
            "src": "2047:71:2"
          },
          {
            "body": {
              "id": 4462,
              "nodeType": "Block",
              "src": "2147:161:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4457,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 4454,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "2166:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "2166:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 4456,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4405,
                          "src": "2180:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2166:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f4f",
                        "id": 4458,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2187:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_66c322bb1fe23e7af9b87a20d4642a6419daf2ab57768ee94f75c472f3ebabb5",
                          "typeString": "literal_string \"UNAUTHORIZED_O\""
                        },
                        "value": "UNAUTHORIZED_O"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_66c322bb1fe23e7af9b87a20d4642a6419daf2ab57768ee94f75c472f3ebabb5",
                          "typeString": "literal_string \"UNAUTHORIZED_O\""
                        }
                      ],
                      "id": 4453,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2158:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2158:46:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4460,
                  "nodeType": "ExpressionStatement",
                  "src": "2158:46:2"
                },
                {
                  "id": 4461,
                  "nodeType": "PlaceholderStatement",
                  "src": "2299:1:2"
                }
              ]
            },
            "id": 4463,
            "name": "onlyOwner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4452,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2144:2:2"
            },
            "src": "2126:182:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4484,
              "nodeType": "Block",
              "src": "2349:387:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4471,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 4466,
                          "name": "voucherKernelAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4407,
                          "src": "2382:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 4469,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2414:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 4468,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2406:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4467,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2406:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4470,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2406:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2382:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f564f55434845524b45524e454c",
                        "id": 4472,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2431:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f35e7845fb5a39bd1c4191f758dba933d1bfe9e3c864842e431e6d5dc4068475",
                          "typeString": "literal_string \"UNSPECIFIED_VOUCHERKERNEL\""
                        },
                        "value": "UNSPECIFIED_VOUCHERKERNEL"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f35e7845fb5a39bd1c4191f758dba933d1bfe9e3c864842e431e6d5dc4068475",
                          "typeString": "literal_string \"UNSPECIFIED_VOUCHERKERNEL\""
                        }
                      ],
                      "id": 4465,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2360:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2360:109:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4474,
                  "nodeType": "ExpressionStatement",
                  "src": "2360:109:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4479,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 4476,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "2578:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4477,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "2578:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 4478,
                          "name": "voucherKernelAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4407,
                          "src": "2592:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2578:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f564b",
                        "id": 4480,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2614:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a2f0c2140d117207ed920dcb303a59a4da759cc226fe941427b02f3b235dfa27",
                          "typeString": "literal_string \"UNAUTHORIZED_VK\""
                        },
                        "value": "UNAUTHORIZED_VK"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a2f0c2140d117207ed920dcb303a59a4da759cc226fe941427b02f3b235dfa27",
                          "typeString": "literal_string \"UNAUTHORIZED_VK\""
                        }
                      ],
                      "id": 4475,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2570:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2570:62:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4482,
                  "nodeType": "ExpressionStatement",
                  "src": "2570:62:2"
                },
                {
                  "id": 4483,
                  "nodeType": "PlaceholderStatement",
                  "src": "2727:1:2"
                }
              ]
            },
            "id": 4485,
            "name": "onlyFromVoucherKernel",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4464,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2346:2:2"
            },
            "src": "2316:420:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4500,
              "nodeType": "Block",
              "src": "2786:78:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 4490,
                          "name": "_address",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4487,
                          "src": "2805:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 4493,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2825:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 4492,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2817:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4491,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2817:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4494,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2817:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2805:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5a45524f5f41444452455353",
                        "id": 4496,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2829:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_71869b3729b99fadce3ee30cb1aa2a0d639e6a2d24158c1ae1ae0059e81b72af",
                          "typeString": "literal_string \"ZERO_ADDRESS\""
                        },
                        "value": "ZERO_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_71869b3729b99fadce3ee30cb1aa2a0d639e6a2d24158c1ae1ae0059e81b72af",
                          "typeString": "literal_string \"ZERO_ADDRESS\""
                        }
                      ],
                      "id": 4489,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2797:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2797:47:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4498,
                  "nodeType": "ExpressionStatement",
                  "src": "2797:47:2"
                },
                {
                  "id": 4499,
                  "nodeType": "PlaceholderStatement",
                  "src": "2855:1:2"
                }
              ]
            },
            "id": 4501,
            "name": "notZeroAddress",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4488,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4487,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "scope": 4501,
                  "src": "2768:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4486,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2768:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2767:18:2"
            },
            "src": "2744:120:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4509,
              "nodeType": "Block",
              "src": "2886:37:2",
              "statements": [
                {
                  "expression": {
                    "id": 4507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4504,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4405,
                      "src": "2897:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 4505,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "2905:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4506,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "2905:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2897:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4508,
                  "nodeType": "ExpressionStatement",
                  "src": "2897:18:2"
                }
              ]
            },
            "id": 4510,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4502,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2883:2:2"
            },
            "returnParameters": {
              "id": 4503,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2886:0:2"
            },
            "scope": 6007,
            "src": "2872:51:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              8873
            ],
            "body": {
              "id": 4620,
              "nodeType": "Block",
              "src": "3551:1287:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4531,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 4526,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4515,
                          "src": "3570:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 4529,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3585:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 4528,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3577:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4527,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3577:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4530,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3577:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3570:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 4532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3589:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 4525,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3562:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3562:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4534,
                  "nodeType": "ExpressionStatement",
                  "src": "3562:49:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4548,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4536,
                            "name": "_from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4513,
                            "src": "3734:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 4537,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "3743:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4538,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "3743:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "3734:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 4540,
                                "name": "operatorApprovals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4433,
                                "src": "3757:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                  "typeString": "mapping(address => mapping(address => bool))"
                                }
                              },
                              "id": 4542,
                              "indexExpression": {
                                "id": 4541,
                                "name": "_from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4513,
                                "src": "3775:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3757:24:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 4545,
                            "indexExpression": {
                              "expression": {
                                "id": 4543,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3782:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4544,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3782:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3757:36:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "74727565",
                            "id": 4546,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3797:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "3757:44:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3734:67:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f5354",
                        "id": 4549,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3816:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ca5f8e7eb56d1b2f73830c4befc9c07536bf1cee80cce74bda91161d1c20d898",
                          "typeString": "literal_string \"UNAUTHORIZED_ST\""
                        },
                        "value": "UNAUTHORIZED_ST"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ca5f8e7eb56d1b2f73830c4befc9c07536bf1cee80cce74bda91161d1c20d898",
                          "typeString": "literal_string \"UNAUTHORIZED_ST\""
                        }
                      ],
                      "id": 4535,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3712:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4550,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3712:132:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4551,
                  "nodeType": "ExpressionStatement",
                  "src": "3712:132:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4556,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4513,
                        "src": "4010:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4557,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4517,
                        "src": "4030:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 4558,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4519,
                        "src": "4053:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 4553,
                            "name": "bosonRouterAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4409,
                            "src": "3953:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4552,
                          "name": "IBosonRouter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8747,
                          "src": "3940:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBosonRouter_$8747_$",
                            "typeString": "type(contract IBosonRouter)"
                          }
                        },
                        "id": 4554,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3940:32:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBosonRouter_$8747",
                          "typeString": "contract IBosonRouter"
                        }
                      },
                      "id": 4555,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_beforeERC1155Transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8728,
                      "src": "3940:55:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256) view external"
                      }
                    },
                    "id": 4559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3940:130:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4560,
                  "nodeType": "ExpressionStatement",
                  "src": "3940:130:2"
                },
                {
                  "expression": {
                    "id": 4574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 4561,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4415,
                          "src": "4178:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(uint256 => mapping(address => uint256))"
                          }
                        },
                        "id": 4564,
                        "indexExpression": {
                          "id": 4562,
                          "name": "_tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4517,
                          "src": "4187:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4178:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4565,
                      "indexExpression": {
                        "id": 4563,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4513,
                        "src": "4197:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4178:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 4572,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4519,
                          "src": "4236:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 4566,
                              "name": "balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4415,
                              "src": "4206:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(address => uint256))"
                              }
                            },
                            "id": 4568,
                            "indexExpression": {
                              "id": 4567,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4517,
                              "src": "4215:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4206:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 4570,
                          "indexExpression": {
                            "id": 4569,
                            "name": "_from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4513,
                            "src": "4225:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4206:25:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10698,
                        "src": "4206:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 4573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4206:37:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4178:65:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4575,
                  "nodeType": "ExpressionStatement",
                  "src": "4178:65:2"
                },
                {
                  "expression": {
                    "id": 4589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 4576,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4415,
                          "src": "4254:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(uint256 => mapping(address => uint256))"
                          }
                        },
                        "id": 4579,
                        "indexExpression": {
                          "id": 4577,
                          "name": "_tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4517,
                          "src": "4263:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4254:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4580,
                      "indexExpression": {
                        "id": 4578,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4515,
                        "src": "4273:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4254:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 4583,
                              "name": "balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4415,
                              "src": "4291:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(address => uint256))"
                              }
                            },
                            "id": 4585,
                            "indexExpression": {
                              "id": 4584,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4517,
                              "src": "4300:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4291:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 4587,
                          "indexExpression": {
                            "id": 4586,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4515,
                            "src": "4310:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4291:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 4581,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4519,
                          "src": "4280:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4582,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10676,
                        "src": "4280:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 4588,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4280:35:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4254:61:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4590,
                  "nodeType": "ExpressionStatement",
                  "src": "4254:61:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4595,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4513,
                        "src": "4394:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4596,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4515,
                        "src": "4414:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4597,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4517,
                        "src": "4432:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 4598,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4519,
                        "src": "4455:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 4592,
                            "name": "bosonRouterAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4409,
                            "src": "4341:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4591,
                          "name": "IBosonRouter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8747,
                          "src": "4328:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBosonRouter_$8747_$",
                            "typeString": "type(contract IBosonRouter)"
                          }
                        },
                        "id": 4593,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4328:32:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBosonRouter_$8747",
                          "typeString": "contract IBosonRouter"
                        }
                      },
                      "id": 4594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_onERC1155Transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8740,
                      "src": "4328:51:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256) external"
                      }
                    },
                    "id": 4599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4328:144:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4600,
                  "nodeType": "ExpressionStatement",
                  "src": "4328:144:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4602,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "4505:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4505:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 4604,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4513,
                        "src": "4517:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4605,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4515,
                        "src": "4524:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4606,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4517,
                        "src": "4529:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 4607,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4519,
                        "src": "4539:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4601,
                      "name": "TransferSingle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8837,
                      "src": "4490:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256)"
                      }
                    },
                    "id": 4608,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4490:56:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4609,
                  "nodeType": "EmitStatement",
                  "src": "4485:61:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4611,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "4707:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4612,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4707:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 4613,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4513,
                        "src": "4732:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4614,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4515,
                        "src": "4752:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4615,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4517,
                        "src": "4770:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 4616,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4519,
                        "src": "4793:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 4617,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4521,
                        "src": "4814:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 4610,
                      "name": "_doSafeTransferAcceptanceCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5064,
                      "src": "4662:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256,bytes memory)"
                      }
                    },
                    "id": 4618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4662:168:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4619,
                  "nodeType": "ExpressionStatement",
                  "src": "4662:168:2"
                }
              ]
            },
            "documentation": {
              "id": 4511,
              "nodeType": "StructuredDocumentation",
              "src": "2931:434:2",
              "text": " @notice Transfers amount of _tokenId from-to addresses with safety call.\n If _to is a smart contract, will call onERC1155Received\n @dev ERC-1155\n @param _from    Source address\n @param _to      Destination address\n @param _tokenId ID of the token\n @param _value   Transfer amount\n @param _data    Additional data forwarded to onERC1155Received if _to is a contract"
            },
            "functionSelector": "f242432a",
            "id": 4621,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 4523,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3542:8:2"
            },
            "parameters": {
              "id": 4522,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4513,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "3407:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4512,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3407:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4515,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "3431:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4514,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3431:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4517,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "3453:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4516,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3453:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4519,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "3480:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4518,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3480:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4521,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "3505:20:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4520,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3505:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3396:136:2"
            },
            "returnParameters": {
              "id": 4524,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3551:0:2"
            },
            "scope": 6007,
            "src": "3371:1467:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9205
            ],
            "body": {
              "id": 4639,
              "nodeType": "Block",
              "src": "5633:61:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4633,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4624,
                        "src": "5661:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4634,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4626,
                        "src": "5668:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4635,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4628,
                        "src": "5673:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 4636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5683:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 4632,
                      "name": "safeTransferFrom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4640,
                        4684
                      ],
                      "referencedDeclaration": 4684,
                      "src": "5644:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory)"
                      }
                    },
                    "id": 4637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5644:42:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4638,
                  "nodeType": "ExpressionStatement",
                  "src": "5644:42:2"
                }
              ]
            },
            "documentation": {
              "id": 4622,
              "nodeType": "StructuredDocumentation",
              "src": "4846:659:2",
              "text": " @notice Safely transfers the ownership of a given token ID to another address\n If the target address is a contract, it must implement `onERC721Received`,\n which is called upon a safe transfer, and return the magic value\n `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`; otherwise,\n the transfer is reverted.\n Requires the msg.sender to be the owner, approved, or operator\n @dev ERC-721\n @param _from current owner of the token\n @param _to address to receive the ownership of the given token ID\n @param _tokenId uint256 ID of the token to be transferred"
            },
            "functionSelector": "42842e0e",
            "id": 4640,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 4630,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5624:8:2"
            },
            "parameters": {
              "id": 4629,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4624,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4640,
                  "src": "5547:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4623,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5547:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4626,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4640,
                  "src": "5571:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4625,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5571:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4628,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4640,
                  "src": "5593:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4627,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5593:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5536:80:2"
            },
            "returnParameters": {
              "id": 4631,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5633:0:2"
            },
            "scope": 6007,
            "src": "5511:183:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9195
            ],
            "body": {
              "id": 4683,
              "nodeType": "Block",
              "src": "6392:514:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4654,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4643,
                        "src": "6416:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4655,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4645,
                        "src": "6423:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4656,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4647,
                        "src": "6428:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4653,
                      "name": "transferFrom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4719
                      ],
                      "referencedDeclaration": 4719,
                      "src": "6403:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 4657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6403:34:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4658,
                  "nodeType": "ExpressionStatement",
                  "src": "6403:34:2"
                },
                {
                  "condition": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 4659,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4645,
                        "src": "6454:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 4660,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isContract",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11160,
                      "src": "6454:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 4661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6454:16:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4682,
                  "nodeType": "IfStatement",
                  "src": "6450:449:2",
                  "trueBody": {
                    "id": 4681,
                    "nodeType": "Block",
                    "src": "6472:427:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 4677,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 4667,
                                    "name": "_from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4643,
                                    "src": "6577:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 4668,
                                    "name": "_to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4645,
                                    "src": "6605:3:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 4669,
                                    "name": "_tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4647,
                                    "src": "6631:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 4670,
                                    "name": "_data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4649,
                                    "src": "6662:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 4664,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4645,
                                        "src": "6533:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 4663,
                                      "name": "ERC721TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9268,
                                      "src": "6513:19:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$9268_$",
                                        "typeString": "type(contract ERC721TokenReceiver)"
                                      }
                                    },
                                    "id": 4665,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6513:24:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC721TokenReceiver_$9268",
                                      "typeString": "contract ERC721TokenReceiver"
                                    }
                                  },
                                  "id": 4666,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC721Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9267,
                                  "src": "6513:41:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 4671,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6513:173:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 4673,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4645,
                                        "src": "6710:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 4672,
                                      "name": "ERC721TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9268,
                                      "src": "6690:19:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$9268_$",
                                        "typeString": "type(contract ERC721TokenReceiver)"
                                      }
                                    },
                                    "id": 4674,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6690:24:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC721TokenReceiver_$9268",
                                      "typeString": "contract ERC721TokenReceiver"
                                    }
                                  },
                                  "id": 4675,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC721Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9267,
                                  "src": "6690:41:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 4676,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "selector",
                                "nodeType": "MemberAccess",
                                "src": "6690:50:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "6513:227:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "554e535550504f525445445f4552433732315f5245434549564544",
                              "id": 4678,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6759:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_93f4b73c3d86bd67195020f99055e3655658f7a9ebf8672f2b1df47f80c21821",
                                "typeString": "literal_string \"UNSUPPORTED_ERC721_RECEIVED\""
                              },
                              "value": "UNSUPPORTED_ERC721_RECEIVED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_93f4b73c3d86bd67195020f99055e3655658f7a9ebf8672f2b1df47f80c21821",
                                "typeString": "literal_string \"UNSUPPORTED_ERC721_RECEIVED\""
                              }
                            ],
                            "id": 4662,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6487:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4679,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6487:316:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4680,
                        "nodeType": "ExpressionStatement",
                        "src": "6487:316:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 4641,
              "nodeType": "StructuredDocumentation",
              "src": "5702:533:2",
              "text": " @notice Safely transfers the ownership of a given token ID to another address\n If the target address is a contract, it must implement `onERC721Received`\n Requires the msg.sender to be the owner, approved, or operator\n @dev ERC-721\n @param _from current owner of the token\n @param _to address to receive the ownership of the given token ID\n @param _tokenId uint256 ID of the token to be transferred\n @param _data bytes data to send along with a safe transfer check"
            },
            "functionSelector": "b88d4fde",
            "id": 4684,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 4651,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6383:8:2"
            },
            "parameters": {
              "id": 4650,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4643,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4684,
                  "src": "6277:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4642,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6277:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4645,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4684,
                  "src": "6301:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4644,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6301:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4647,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4684,
                  "src": "6323:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4646,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6323:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4649,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 4684,
                  "src": "6350:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4648,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6350:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6266:109:2"
            },
            "returnParameters": {
              "id": 4652,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6392:0:2"
            },
            "scope": 6007,
            "src": "6241:665:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9215
            ],
            "body": {
              "id": 4718,
              "nodeType": "Block",
              "src": "7498:310:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4708,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4701,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 4696,
                              "name": "operator721",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4427,
                              "src": "7531:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 4698,
                            "indexExpression": {
                              "id": 4697,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4691,
                              "src": "7543:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7531:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 4699,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "7556:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4700,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "7556:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "7531:35:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4707,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 4703,
                                "name": "_tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4691,
                                "src": "7595:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4702,
                              "name": "ownerOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                5178
                              ],
                              "referencedDeclaration": 5178,
                              "src": "7587:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                                "typeString": "function (uint256) view returns (address)"
                              }
                            },
                            "id": 4704,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7587:17:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 4705,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "7608:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4706,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "7608:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "7587:31:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7531:87:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4e4f545f4f574e45525f4e4f525f415050524f564544",
                        "id": 4709,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7633:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6c1ef0880797d80cfb5d03f0706d17419220d72dedb8d29675f3cf2fe13f3aba",
                          "typeString": "literal_string \"NOT_OWNER_NOR_APPROVED\""
                        },
                        "value": "NOT_OWNER_NOR_APPROVED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6c1ef0880797d80cfb5d03f0706d17419220d72dedb8d29675f3cf2fe13f3aba",
                          "typeString": "literal_string \"NOT_OWNER_NOR_APPROVED\""
                        }
                      ],
                      "id": 4695,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7509:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4710,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7509:159:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4711,
                  "nodeType": "ExpressionStatement",
                  "src": "7509:159:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4713,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4687,
                        "src": "7779:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4714,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4689,
                        "src": "7786:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4715,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4691,
                        "src": "7791:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4712,
                      "name": "_transferFrom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4799,
                      "src": "7765:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 4716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7765:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4717,
                  "nodeType": "ExpressionStatement",
                  "src": "7765:35:2"
                }
              ]
            },
            "documentation": {
              "id": 4685,
              "nodeType": "StructuredDocumentation",
              "src": "6914:460:2",
              "text": " @notice Transfers the ownership of a given token ID to another address.\n Usage of this method is discouraged, use `safeTransferFrom` whenever possible.\n Requires the msg.sender to be the owner, approved, or operator.\n @dev ERC-721\n @param _from current owner of the token\n @param _to address to receive the ownership of the given token ID\n @param _tokenId uint256 ID of the token to be transferred"
            },
            "functionSelector": "23b872dd",
            "id": 4719,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 4693,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7489:8:2"
            },
            "parameters": {
              "id": 4692,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4687,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4719,
                  "src": "7412:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4686,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7412:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4689,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4719,
                  "src": "7436:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4688,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7436:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4691,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4719,
                  "src": "7458:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4690,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7458:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7401:80:2"
            },
            "returnParameters": {
              "id": 4694,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7498:0:2"
            },
            "scope": 6007,
            "src": "7380:428:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4798,
              "nodeType": "Block",
              "src": "8331:742:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4734,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 4731,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4726,
                              "src": "8358:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4730,
                            "name": "ownerOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5178
                            ],
                            "referencedDeclaration": 5178,
                            "src": "8350:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 4732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8350:17:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 4733,
                          "name": "_from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4722,
                          "src": "8371:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "8350:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f54",
                        "id": 4735,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8378:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a346341f54e0d0a651e2d90fa5e8663272f9e42fbfd9680c5e5644c341fa6ca4",
                          "typeString": "literal_string \"UNAUTHORIZED_T\""
                        },
                        "value": "UNAUTHORIZED_T"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a346341f54e0d0a651e2d90fa5e8663272f9e42fbfd9680c5e5644c341fa6ca4",
                          "typeString": "literal_string \"UNAUTHORIZED_T\""
                        }
                      ],
                      "id": 4729,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8342:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8342:53:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4737,
                  "nodeType": "ExpressionStatement",
                  "src": "8342:53:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4744,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 4739,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4724,
                          "src": "8498:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 4742,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8513:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 4741,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8505:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4740,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "8505:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4743,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8505:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "8498:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 4745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8517:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 4738,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8490:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4746,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8490:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4747,
                  "nodeType": "ExpressionStatement",
                  "src": "8490:49:2"
                },
                {
                  "expression": {
                    "id": 4755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4748,
                        "name": "operator721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4427,
                        "src": "8642:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                          "typeString": "mapping(uint256 => address)"
                        }
                      },
                      "id": 4750,
                      "indexExpression": {
                        "id": 4749,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4726,
                        "src": "8654:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8642:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 4753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8674:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 4752,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8666:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 4751,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8666:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 4754,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8666:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "8642:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4756,
                  "nodeType": "ExpressionStatement",
                  "src": "8642:34:2"
                },
                {
                  "expression": {
                    "id": 4760,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "--",
                    "prefix": false,
                    "src": "8689:19:2",
                    "subExpression": {
                      "baseExpression": {
                        "id": 4757,
                        "name": "balance721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4419,
                        "src": "8689:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4759,
                      "indexExpression": {
                        "id": 4758,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4722,
                        "src": "8700:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8689:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4761,
                  "nodeType": "ExpressionStatement",
                  "src": "8689:19:2"
                },
                {
                  "expression": {
                    "id": 4765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "8719:17:2",
                    "subExpression": {
                      "baseExpression": {
                        "id": 4762,
                        "name": "balance721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4419,
                        "src": "8719:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4764,
                      "indexExpression": {
                        "id": 4763,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4724,
                        "src": "8730:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8719:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4766,
                  "nodeType": "ExpressionStatement",
                  "src": "8719:17:2"
                },
                {
                  "expression": {
                    "id": 4771,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4767,
                        "name": "owners721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4423,
                        "src": "8749:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                          "typeString": "mapping(uint256 => address)"
                        }
                      },
                      "id": 4769,
                      "indexExpression": {
                        "id": 4768,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4726,
                        "src": "8759:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8749:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4770,
                      "name": "_to",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4724,
                      "src": "8771:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8749:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4772,
                  "nodeType": "ExpressionStatement",
                  "src": "8749:25:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 4778,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4726,
                            "src": "8854:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "arguments": [
                              {
                                "id": 4775,
                                "name": "voucherKernelAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4407,
                                "src": "8810:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 4774,
                              "name": "IVoucherKernel",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9588,
                              "src": "8795:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IVoucherKernel_$9588_$",
                                "typeString": "type(contract IVoucherKernel)"
                              }
                            },
                            "id": 4776,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8795:36:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IVoucherKernel_$9588",
                              "typeString": "contract IVoucherKernel"
                            }
                          },
                          "id": 4777,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isVoucherTransferable",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9587,
                          "src": "8795:58:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view external returns (bool)"
                          }
                        },
                        "id": 4779,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8795:68:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "46554e44535f52454c4541534544",
                        "id": 4780,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8865:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_934bfe8ea9e27d246dfc9d0083a676a42c03dee49dfbc9a3462184e5c60a4d6a",
                          "typeString": "literal_string \"FUNDS_RELEASED\""
                        },
                        "value": "FUNDS_RELEASED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_934bfe8ea9e27d246dfc9d0083a676a42c03dee49dfbc9a3462184e5c60a4d6a",
                          "typeString": "literal_string \"FUNDS_RELEASED\""
                        }
                      ],
                      "id": 4773,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8787:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8787:95:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4782,
                  "nodeType": "ExpressionStatement",
                  "src": "8787:95:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4787,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4722,
                        "src": "8960:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4788,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4724,
                        "src": "8980:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4789,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4726,
                        "src": "8998:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 4784,
                            "name": "bosonRouterAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4409,
                            "src": "8908:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4783,
                          "name": "IBosonRouter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8747,
                          "src": "8895:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBosonRouter_$8747_$",
                            "typeString": "type(contract IBosonRouter)"
                          }
                        },
                        "id": 4785,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8895:32:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBosonRouter_$8747",
                          "typeString": "contract IBosonRouter"
                        }
                      },
                      "id": 4786,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_onERC721Transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8718,
                      "src": "8895:50:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 4790,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8895:122:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4791,
                  "nodeType": "ExpressionStatement",
                  "src": "8895:122:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 4793,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4722,
                        "src": "9044:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4794,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4724,
                        "src": "9051:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4795,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4726,
                        "src": "9056:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4792,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9158,
                      "src": "9035:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 4796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9035:30:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4797,
                  "nodeType": "EmitStatement",
                  "src": "9030:35:2"
                }
              ]
            },
            "documentation": {
              "id": 4720,
              "nodeType": "StructuredDocumentation",
              "src": "7816:397:2",
              "text": " @notice Internal function to transfer ownership of a given token ID to another address.\n As opposed to transferFrom, this imposes no restrictions on msg.sender.\n @dev ERC-721\n @param _from current owner of the token\n @param _to address to receive the ownership of the given token ID\n @param _tokenId uint256 ID of the token to be transferred"
            },
            "id": 4799,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_transferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4727,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4722,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4799,
                  "src": "8252:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4721,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8252:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4724,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4799,
                  "src": "8276:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4723,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8276:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4726,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4799,
                  "src": "8298:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4725,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8298:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8241:80:2"
            },
            "returnParameters": {
              "id": 4728,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8331:0:2"
            },
            "scope": 6007,
            "src": "8219:854:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              9223
            ],
            "body": {
              "id": 4848,
              "nodeType": "Block",
              "src": "9594:658:2",
              "statements": [
                {
                  "assignments": [
                    4809
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4809,
                      "mutability": "mutable",
                      "name": "tokenOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 4848,
                      "src": "9605:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4808,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "9605:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4813,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 4811,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4804,
                        "src": "9634:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4810,
                      "name": "ownerOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5178
                      ],
                      "referencedDeclaration": 5178,
                      "src": "9626:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view returns (address)"
                      }
                    },
                    "id": 4812,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9626:17:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9605:38:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4817,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 4815,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4802,
                          "src": "9662:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 4816,
                          "name": "tokenOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4809,
                          "src": "9669:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "9662:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "524544554e44414e545f43414c4c",
                        "id": 4818,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9681:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d0d6a83cea74c93af9d0ecf0d695b181905be0ac705b9f5c24f75ac5424c53e2",
                          "typeString": "literal_string \"REDUNDANT_CALL\""
                        },
                        "value": "REDUNDANT_CALL"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d0d6a83cea74c93af9d0ecf0d695b181905be0ac705b9f5c24f75ac5424c53e2",
                          "typeString": "literal_string \"REDUNDANT_CALL\""
                        }
                      ],
                      "id": 4814,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9654:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4819,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9654:44:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4820,
                  "nodeType": "ExpressionStatement",
                  "src": "9654:44:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4832,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4825,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 4822,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "9831:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4823,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "9831:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4824,
                            "name": "tokenOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4809,
                            "src": "9845:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9831:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 4826,
                              "name": "operatorApprovals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4433,
                              "src": "9876:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                "typeString": "mapping(address => mapping(address => bool))"
                              }
                            },
                            "id": 4828,
                            "indexExpression": {
                              "id": 4827,
                              "name": "tokenOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4809,
                              "src": "9894:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9876:29:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 4831,
                          "indexExpression": {
                            "expression": {
                              "id": 4829,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "9906:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4830,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "9906:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9876:41:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "9831:86:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f41",
                        "id": 4833,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9972:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b109989dc87862f05ce512959ee04fbc39856c04777748c77fbf8d55b7a8c011",
                          "typeString": "literal_string \"UNAUTHORIZED_A\""
                        },
                        "value": "UNAUTHORIZED_A"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b109989dc87862f05ce512959ee04fbc39856c04777748c77fbf8d55b7a8c011",
                          "typeString": "literal_string \"UNAUTHORIZED_A\""
                        }
                      ],
                      "id": 4821,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9809:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4834,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9809:190:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4835,
                  "nodeType": "ExpressionStatement",
                  "src": "9809:190:2"
                },
                {
                  "expression": {
                    "id": 4840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4836,
                        "name": "operator721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4427,
                        "src": "10166:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                          "typeString": "mapping(uint256 => address)"
                        }
                      },
                      "id": 4838,
                      "indexExpression": {
                        "id": 4837,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4804,
                        "src": "10178:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "10166:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4839,
                      "name": "_to",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4802,
                      "src": "10190:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "10166:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4841,
                  "nodeType": "ExpressionStatement",
                  "src": "10166:27:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 4843,
                        "name": "tokenOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4809,
                        "src": "10218:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4844,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4802,
                        "src": "10230:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4845,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4804,
                        "src": "10235:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4842,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9167,
                      "src": "10209:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 4846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10209:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4847,
                  "nodeType": "EmitStatement",
                  "src": "10204:40:2"
                }
              ]
            },
            "documentation": {
              "id": 4800,
              "nodeType": "StructuredDocumentation",
              "src": "9081:443:2",
              "text": " @notice Approves another address to transfer the given token ID\n The zero address indicates there is no approved address.\n There can only be one approved address per token at a given time.\n Can only be called by the token owner or an approved operator.\n @dev ERC-721\n @param _to address to be approved for the given token ID\n @param _tokenId uint256 ID of the token to be approved"
            },
            "functionSelector": "095ea7b3",
            "id": 4849,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 4806,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9585:8:2"
            },
            "parameters": {
              "id": 4805,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4802,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4849,
                  "src": "9547:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4801,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9547:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4804,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4849,
                  "src": "9560:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4803,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9560:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9546:31:2"
            },
            "returnParameters": {
              "id": 4807,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9594:0:2"
            },
            "scope": 6007,
            "src": "9530:722:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9239
            ],
            "body": {
              "id": 4874,
              "nodeType": "Block",
              "src": "10689:187:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 4859,
                            "name": "owners721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4423,
                            "src": "10722:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                              "typeString": "mapping(uint256 => address)"
                            }
                          },
                          "id": 4861,
                          "indexExpression": {
                            "id": 4860,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4852,
                            "src": "10732:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10722:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 4864,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10753:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 4863,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10745:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4862,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "10745:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4865,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10745:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "10722:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                        "id": 4867,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10770:46:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
                          "typeString": "literal_string \"ERC721: approved query for nonexistent token\""
                        },
                        "value": "ERC721: approved query for nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
                          "typeString": "literal_string \"ERC721: approved query for nonexistent token\""
                        }
                      ],
                      "id": 4858,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10700:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10700:127:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4869,
                  "nodeType": "ExpressionStatement",
                  "src": "10700:127:2"
                },
                {
                  "expression": {
                    "baseExpression": {
                      "id": 4870,
                      "name": "operator721",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4427,
                      "src": "10847:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                        "typeString": "mapping(uint256 => address)"
                      }
                    },
                    "id": 4872,
                    "indexExpression": {
                      "id": 4871,
                      "name": "_tokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4852,
                      "src": "10859:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10847:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4857,
                  "id": 4873,
                  "nodeType": "Return",
                  "src": "10840:28:2"
                }
              ]
            },
            "documentation": {
              "id": 4850,
              "nodeType": "StructuredDocumentation",
              "src": "10260:304:2",
              "text": " @notice Gets the approved address for a token ID, or zero if no address set\n Reverts if the token ID does not exist.\n @dev ERC-721\n @param _tokenId uint256 ID of the token to query the approval of\n @return address currently approved for the given token ID"
            },
            "functionSelector": "081812fc",
            "id": 4875,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getApproved",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 4854,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10648:8:2"
            },
            "parameters": {
              "id": 4853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4852,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4875,
                  "src": "10591:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4851,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10591:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10590:18:2"
            },
            "returnParameters": {
              "id": 4857,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4856,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4875,
                  "src": "10675:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4855,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10675:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10674:9:2"
            },
            "scope": 6007,
            "src": "10570:306:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              8889
            ],
            "body": {
              "id": 5021,
              "nodeType": "Block",
              "src": "11565:1672:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4898,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 4893,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4880,
                          "src": "11584:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 4896,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11599:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 4895,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11591:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4894,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "11591:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4897,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11591:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "11584:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 4899,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11603:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 4892,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11576:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11576:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4901,
                  "nodeType": "ExpressionStatement",
                  "src": "11576:49:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4907,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 4903,
                            "name": "_tokenIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4883,
                            "src": "11734:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 4904,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "11734:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 4905,
                            "name": "_values",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4886,
                            "src": "11754:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 4906,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "11754:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11734:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4d49534d4154434845445f41525241595f4c454e47544853",
                        "id": 4908,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11770:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        },
                        "value": "MISMATCHED_ARRAY_LENGTHS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        }
                      ],
                      "id": 4902,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11726:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4909,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11726:71:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4910,
                  "nodeType": "ExpressionStatement",
                  "src": "11726:71:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4915,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4912,
                            "name": "_from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4878,
                            "src": "11921:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 4913,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "11930:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4914,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "11930:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "11921:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4923,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 4916,
                                "name": "operatorApprovals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4433,
                                "src": "11944:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                  "typeString": "mapping(address => mapping(address => bool))"
                                }
                              },
                              "id": 4918,
                              "indexExpression": {
                                "id": 4917,
                                "name": "_from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4878,
                                "src": "11962:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "11944:24:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 4921,
                            "indexExpression": {
                              "expression": {
                                "id": 4919,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "11969:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4920,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "11969:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11944:36:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "74727565",
                            "id": 4922,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11984:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "11944:44:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11921:67:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f5342",
                        "id": 4925,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12003:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_184887f256bf91e0eafcb177f95f3c8e3b254b2c7e9eb81c480965f351bfe007",
                          "typeString": "literal_string \"UNAUTHORIZED_SB\""
                        },
                        "value": "UNAUTHORIZED_SB"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_184887f256bf91e0eafcb177f95f3c8e3b254b2c7e9eb81c480965f351bfe007",
                          "typeString": "literal_string \"UNAUTHORIZED_SB\""
                        }
                      ],
                      "id": 4911,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11899:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11899:132:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4927,
                  "nodeType": "ExpressionStatement",
                  "src": "11899:132:2"
                },
                {
                  "body": {
                    "id": 5000,
                    "nodeType": "Block",
                    "src": "12175:689:2",
                    "statements": [
                      {
                        "assignments": [
                          4940
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4940,
                            "mutability": "mutable",
                            "name": "tokenId",
                            "nodeType": "VariableDeclaration",
                            "scope": 5000,
                            "src": "12190:15:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4939,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "12190:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4944,
                        "initialValue": {
                          "baseExpression": {
                            "id": 4941,
                            "name": "_tokenIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4883,
                            "src": "12208:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 4943,
                          "indexExpression": {
                            "id": 4942,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4929,
                            "src": "12218:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12208:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12190:30:2"
                      },
                      {
                        "assignments": [
                          4946
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4946,
                            "mutability": "mutable",
                            "name": "value",
                            "nodeType": "VariableDeclaration",
                            "scope": 5000,
                            "src": "12235:13:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4945,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "12235:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4950,
                        "initialValue": {
                          "baseExpression": {
                            "id": 4947,
                            "name": "_values",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4886,
                            "src": "12251:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 4949,
                          "indexExpression": {
                            "id": 4948,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4929,
                            "src": "12259:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12251:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12235:26:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4955,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4878,
                              "src": "12352:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4956,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4940,
                              "src": "12376:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 4957,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4946,
                              "src": "12402:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 4952,
                                  "name": "bosonRouterAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4409,
                                  "src": "12291:18:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4951,
                                "name": "IBosonRouter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8747,
                                "src": "12278:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IBosonRouter_$8747_$",
                                  "typeString": "type(contract IBosonRouter)"
                                }
                              },
                              "id": 4953,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12278:32:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBosonRouter_$8747",
                                "typeString": "contract IBosonRouter"
                              }
                            },
                            "id": 4954,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_beforeERC1155Transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8728,
                            "src": "12278:55:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256) view external"
                            }
                          },
                          "id": 4958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12278:144:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4959,
                        "nodeType": "ExpressionStatement",
                        "src": "12278:144:2"
                      },
                      {
                        "expression": {
                          "id": 4973,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 4960,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4415,
                                "src": "12538:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(address => uint256))"
                                }
                              },
                              "id": 4963,
                              "indexExpression": {
                                "id": 4961,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4940,
                                "src": "12547:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12538:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 4964,
                            "indexExpression": {
                              "id": 4962,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4878,
                              "src": "12556:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "12538:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 4971,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4946,
                                "src": "12594:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 4965,
                                    "name": "balances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4415,
                                    "src": "12565:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 4967,
                                  "indexExpression": {
                                    "id": 4966,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4940,
                                    "src": "12574:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "12565:17:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 4969,
                                "indexExpression": {
                                  "id": 4968,
                                  "name": "_from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4878,
                                  "src": "12583:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "12565:24:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4970,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10698,
                              "src": "12565:28:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4972,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12565:35:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12538:62:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4974,
                        "nodeType": "ExpressionStatement",
                        "src": "12538:62:2"
                      },
                      {
                        "expression": {
                          "id": 4988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 4975,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4415,
                                "src": "12615:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(address => uint256))"
                                }
                              },
                              "id": 4978,
                              "indexExpression": {
                                "id": 4976,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4940,
                                "src": "12624:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12615:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 4979,
                            "indexExpression": {
                              "id": 4977,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4880,
                              "src": "12633:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "12615:22:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 4982,
                                    "name": "balances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4415,
                                    "src": "12650:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 4984,
                                  "indexExpression": {
                                    "id": 4983,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4940,
                                    "src": "12659:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "12650:17:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 4986,
                                "indexExpression": {
                                  "id": 4985,
                                  "name": "_to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4880,
                                  "src": "12668:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "12650:22:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 4980,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4946,
                                "src": "12640:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10676,
                              "src": "12640:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4987,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12640:33:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12615:58:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4989,
                        "nodeType": "ExpressionStatement",
                        "src": "12615:58:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4994,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4878,
                              "src": "12760:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4995,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4880,
                              "src": "12784:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4996,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4940,
                              "src": "12806:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 4997,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4946,
                              "src": "12832:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 4991,
                                  "name": "bosonRouterAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4409,
                                  "src": "12703:18:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4990,
                                "name": "IBosonRouter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8747,
                                "src": "12690:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IBosonRouter_$8747_$",
                                  "typeString": "type(contract IBosonRouter)"
                                }
                              },
                              "id": 4992,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12690:32:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBosonRouter_$8747",
                                "typeString": "contract IBosonRouter"
                              }
                            },
                            "id": 4993,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_onERC1155Transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8740,
                            "src": "12690:51:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256) external"
                            }
                          },
                          "id": 4998,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12690:162:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4999,
                        "nodeType": "ExpressionStatement",
                        "src": "12690:162:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4932,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4929,
                      "src": "12148:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 4933,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4883,
                        "src": "12152:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 4934,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "12152:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12148:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5001,
                  "initializationExpression": {
                    "assignments": [
                      4929
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4929,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 5001,
                        "src": "12133:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4928,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12133:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 4931,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 4930,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12145:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "12133:13:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 4937,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "12170:3:2",
                      "subExpression": {
                        "id": 4936,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4929,
                        "src": "12172:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4938,
                    "nodeType": "ExpressionStatement",
                    "src": "12170:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "12128:736:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5003,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "12895:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "12895:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5005,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4878,
                        "src": "12907:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5006,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4880,
                        "src": "12914:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5007,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4883,
                        "src": "12919:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 5008,
                        "name": "_values",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4886,
                        "src": "12930:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      ],
                      "id": 5002,
                      "name": "TransferBatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8852,
                      "src": "12881:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256[] memory,uint256[] memory)"
                      }
                    },
                    "id": 5009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12881:57:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5010,
                  "nodeType": "EmitStatement",
                  "src": "12876:62:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5012,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "13104:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5013,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "13104:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5014,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4878,
                        "src": "13129:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5015,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4880,
                        "src": "13149:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5016,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4883,
                        "src": "13167:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 5017,
                        "name": "_values",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4886,
                        "src": "13191:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 5018,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4888,
                        "src": "13213:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 5011,
                      "name": "_doSafeBatchTransferAcceptanceCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5108,
                      "src": "13054:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256[] memory,uint256[] memory,bytes memory)"
                      }
                    },
                    "id": 5019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13054:175:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5020,
                  "nodeType": "ExpressionStatement",
                  "src": "13054:175:2"
                }
              ]
            },
            "documentation": {
              "id": 4876,
              "nodeType": "StructuredDocumentation",
              "src": "10884:466:2",
              "text": "@notice Transfers amount of _tokenId from-to addresses with safety call.\nIf _to is a smart contract, will call onERC1155BatchReceived\n@dev ERC-1155\n@param _from    Source address\n@param _to      Destination address\n@param _tokenIds array of token IDs\n@param _values   array of transfer amounts\n@param _data    Additional data forwarded to onERC1155BatchReceived if _to is a contract"
            },
            "functionSelector": "2eb2c2d6",
            "id": 5022,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeBatchTransferFrom",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 4890,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11556:8:2"
            },
            "parameters": {
              "id": 4889,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4878,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 5022,
                  "src": "11397:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4877,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11397:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4880,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5022,
                  "src": "11421:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4879,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11421:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4883,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 5022,
                  "src": "11443:28:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4881,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11443:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4882,
                    "nodeType": "ArrayTypeName",
                    "src": "11443:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4886,
                  "mutability": "mutable",
                  "name": "_values",
                  "nodeType": "VariableDeclaration",
                  "scope": 5022,
                  "src": "11482:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4884,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11482:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4885,
                    "nodeType": "ArrayTypeName",
                    "src": "11482:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4888,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5022,
                  "src": "11519:20:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4887,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11519:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11386:160:2"
            },
            "returnParameters": {
              "id": 4891,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11565:0:2"
            },
            "scope": 6007,
            "src": "11356:1881:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 5063,
              "nodeType": "Block",
              "src": "13831:492:2",
              "statements": [
                {
                  "condition": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 5038,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5029,
                        "src": "13846:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 5039,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isContract",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11160,
                      "src": "13846:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 5040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13846:16:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5062,
                  "nodeType": "IfStatement",
                  "src": "13842:474:2",
                  "trueBody": {
                    "id": 5061,
                    "nodeType": "Block",
                    "src": "13864:452:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 5057,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 5046,
                                    "name": "_operator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5025,
                                    "src": "13971:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 5047,
                                    "name": "_from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5027,
                                    "src": "14003:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 5048,
                                    "name": "_tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5031,
                                    "src": "14031:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 5049,
                                    "name": "_value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5033,
                                    "src": "14062:6:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 5050,
                                    "name": "_data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5035,
                                    "src": "14091:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 5043,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5029,
                                        "src": "13926:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 5042,
                                      "name": "ERC1155TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9013,
                                      "src": "13905:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC1155TokenReceiver_$9013_$",
                                        "typeString": "type(contract ERC1155TokenReceiver)"
                                      }
                                    },
                                    "id": 5044,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13905:25:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC1155TokenReceiver_$9013",
                                      "typeString": "contract ERC1155TokenReceiver"
                                    }
                                  },
                                  "id": 5045,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC1155Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8994,
                                  "src": "13905:43:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 5051,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13905:210:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 5053,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5029,
                                        "src": "14140:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 5052,
                                      "name": "ERC1155TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9013,
                                      "src": "14119:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC1155TokenReceiver_$9013_$",
                                        "typeString": "type(contract ERC1155TokenReceiver)"
                                      }
                                    },
                                    "id": 5054,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14119:25:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC1155TokenReceiver_$9013",
                                      "typeString": "contract ERC1155TokenReceiver"
                                    }
                                  },
                                  "id": 5055,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC1155Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8994,
                                  "src": "14119:43:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 5056,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "selector",
                                "nodeType": "MemberAccess",
                                "src": "14119:52:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "13905:266:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4e4f545f535550504f52544544",
                              "id": 5058,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14190:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e2a8e7139f3bc1b76f03a9ab4d7a5e5329d0cc7d7a0c99dcd453eb8f41b24b0b",
                                "typeString": "literal_string \"NOT_SUPPORTED\""
                              },
                              "value": "NOT_SUPPORTED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e2a8e7139f3bc1b76f03a9ab4d7a5e5329d0cc7d7a0c99dcd453eb8f41b24b0b",
                                "typeString": "literal_string \"NOT_SUPPORTED\""
                              }
                            ],
                            "id": 5041,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "13879:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5059,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13879:341:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5060,
                        "nodeType": "ExpressionStatement",
                        "src": "13879:341:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 5023,
              "nodeType": "StructuredDocumentation",
              "src": "13245:369:2",
              "text": " @notice Check successful transfer if recipient is a contract\n @dev ERC-1155\n @param _operator The operator of the transfer\n @param _from     Address of sender\n @param _to       Address of recipient\n @param _tokenId  ID of the token\n @param _value    Value transferred\n @param _data     Optional data"
            },
            "id": 5064,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_doSafeTransferAcceptanceCheck",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5036,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5025,
                  "mutability": "mutable",
                  "name": "_operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 5064,
                  "src": "13670:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5024,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13670:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5027,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 5064,
                  "src": "13698:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5026,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13698:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5029,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5064,
                  "src": "13722:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5028,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13722:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5031,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5064,
                  "src": "13744:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5030,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13744:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5033,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 5064,
                  "src": "13771:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5032,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13771:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5035,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5064,
                  "src": "13796:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5034,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13796:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13659:162:2"
            },
            "returnParameters": {
              "id": 5037,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13831:0:2"
            },
            "scope": 6007,
            "src": "13620:703:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5107,
              "nodeType": "Block",
              "src": "14959:504:2",
              "statements": [
                {
                  "condition": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 5082,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5071,
                        "src": "14974:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 5083,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isContract",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11160,
                      "src": "14974:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 5084,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14974:16:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5106,
                  "nodeType": "IfStatement",
                  "src": "14970:486:2",
                  "trueBody": {
                    "id": 5105,
                    "nodeType": "Block",
                    "src": "14992:464:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 5101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 5090,
                                    "name": "_operator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5067,
                                    "src": "15104:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 5091,
                                    "name": "_from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5069,
                                    "src": "15136:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 5092,
                                    "name": "_tokenIds",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5074,
                                    "src": "15164:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  {
                                    "id": 5093,
                                    "name": "_values",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5077,
                                    "src": "15196:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  {
                                    "id": 5094,
                                    "name": "_data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5079,
                                    "src": "15226:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 5087,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5071,
                                        "src": "15054:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 5086,
                                      "name": "ERC1155TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9013,
                                      "src": "15033:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC1155TokenReceiver_$9013_$",
                                        "typeString": "type(contract ERC1155TokenReceiver)"
                                      }
                                    },
                                    "id": 5088,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "15033:25:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC1155TokenReceiver_$9013",
                                      "typeString": "contract ERC1155TokenReceiver"
                                    }
                                  },
                                  "id": 5089,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC1155BatchReceived",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9012,
                                  "src": "15033:48:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256[] memory,uint256[] memory,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 5095,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15033:217:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 5097,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5071,
                                        "src": "15275:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 5096,
                                      "name": "ERC1155TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9013,
                                      "src": "15254:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC1155TokenReceiver_$9013_$",
                                        "typeString": "type(contract ERC1155TokenReceiver)"
                                      }
                                    },
                                    "id": 5098,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "15254:25:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC1155TokenReceiver_$9013",
                                      "typeString": "contract ERC1155TokenReceiver"
                                    }
                                  },
                                  "id": 5099,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC1155BatchReceived",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9012,
                                  "src": "15254:48:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256[] memory,uint256[] memory,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 5100,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "selector",
                                "nodeType": "MemberAccess",
                                "src": "15254:57:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "15033:278:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4e4f545f535550504f52544544",
                              "id": 5102,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15330:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e2a8e7139f3bc1b76f03a9ab4d7a5e5329d0cc7d7a0c99dcd453eb8f41b24b0b",
                                "typeString": "literal_string \"NOT_SUPPORTED\""
                              },
                              "value": "NOT_SUPPORTED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e2a8e7139f3bc1b76f03a9ab4d7a5e5329d0cc7d7a0c99dcd453eb8f41b24b0b",
                                "typeString": "literal_string \"NOT_SUPPORTED\""
                              }
                            ],
                            "id": 5085,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "15007:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15007:353:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5104,
                        "nodeType": "ExpressionStatement",
                        "src": "15007:353:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 5065,
              "nodeType": "StructuredDocumentation",
              "src": "14331:386:2",
              "text": " @notice Check successful transfer if recipient is a contract\n @dev ERC-1155\n @param _operator The operator of the transfer\n @param _from     Address of sender\n @param _to       Address of recipient\n @param _tokenIds Array of IDs of tokens\n @param _values   Array of values transferred\n @param _data     Optional data"
            },
            "id": 5108,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_doSafeBatchTransferAcceptanceCheck",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5080,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5067,
                  "mutability": "mutable",
                  "name": "_operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 5108,
                  "src": "14778:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5066,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14778:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5069,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 5108,
                  "src": "14806:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5068,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14806:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5071,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5108,
                  "src": "14830:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5070,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14830:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5074,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 5108,
                  "src": "14852:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5072,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "14852:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5073,
                    "nodeType": "ArrayTypeName",
                    "src": "14852:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5077,
                  "mutability": "mutable",
                  "name": "_values",
                  "nodeType": "VariableDeclaration",
                  "scope": 5108,
                  "src": "14889:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5075,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "14889:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5076,
                    "nodeType": "ArrayTypeName",
                    "src": "14889:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5079,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5108,
                  "src": "14924:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5078,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14924:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14767:182:2"
            },
            "returnParameters": {
              "id": 5081,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14959:0:2"
            },
            "scope": 6007,
            "src": "14723:740:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              8899
            ],
            "body": {
              "id": 5125,
              "nodeType": "Block",
              "src": "15837:54:2",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 5119,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4415,
                        "src": "15855:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(uint256 => mapping(address => uint256))"
                        }
                      },
                      "id": 5121,
                      "indexExpression": {
                        "id": 5120,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5113,
                        "src": "15864:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "15855:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 5123,
                    "indexExpression": {
                      "id": 5122,
                      "name": "_account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5111,
                      "src": "15874:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "15855:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5118,
                  "id": 5124,
                  "nodeType": "Return",
                  "src": "15848:35:2"
                }
              ]
            },
            "documentation": {
              "id": 5109,
              "nodeType": "StructuredDocumentation",
              "src": "15471:223:2",
              "text": "@notice Get the balance of tokens of an account\n@dev ERC-1155\n@param _account The address of the token holder\n@param _tokenId ID of the token\n@return         balance"
            },
            "functionSelector": "00fdd58e",
            "id": 5126,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5115,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15796:8:2"
            },
            "parameters": {
              "id": 5114,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5111,
                  "mutability": "mutable",
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5126,
                  "src": "15719:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5110,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15719:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5113,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5126,
                  "src": "15737:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5112,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15737:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15718:36:2"
            },
            "returnParameters": {
              "id": 5118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5117,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5126,
                  "src": "15823:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5116,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15823:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15822:9:2"
            },
            "scope": 6007,
            "src": "15700:191:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9175
            ],
            "body": {
              "id": 5149,
              "nodeType": "Block",
              "src": "16181:199:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5141,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5136,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5129,
                          "src": "16200:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5139,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16218:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5138,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16210:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5137,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "16210:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5140,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16210:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "16200:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 5142,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16222:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 5135,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "16192:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16192:52:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5144,
                  "nodeType": "ExpressionStatement",
                  "src": "16192:52:2"
                },
                {
                  "expression": {
                    "baseExpression": {
                      "id": 5145,
                      "name": "balance721",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4419,
                      "src": "16354:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 5147,
                    "indexExpression": {
                      "id": 5146,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5129,
                      "src": "16365:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16354:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5134,
                  "id": 5148,
                  "nodeType": "Return",
                  "src": "16347:25:2"
                }
              ]
            },
            "documentation": {
              "id": 5127,
              "nodeType": "StructuredDocumentation",
              "src": "15899:202:2",
              "text": "@notice Count all NFTs assigned to an owner\n @dev ERC-721\n @param _owner An address for whom to query the balance\n @return The number of NFTs owned by `_owner`, possibly zero"
            },
            "functionSelector": "70a08231",
            "id": 5150,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5131,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16154:8:2"
            },
            "parameters": {
              "id": 5130,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5129,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 5150,
                  "src": "16126:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5128,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16126:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16125:16:2"
            },
            "returnParameters": {
              "id": 5134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5133,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5150,
                  "src": "16172:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5132,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16172:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16171:9:2"
            },
            "scope": 6007,
            "src": "16107:273:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9183
            ],
            "body": {
              "id": 5177,
              "nodeType": "Block",
              "src": "16705:242:2",
              "statements": [
                {
                  "assignments": [
                    5160
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5160,
                      "mutability": "mutable",
                      "name": "tokenOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 5177,
                      "src": "16716:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5159,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "16716:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5164,
                  "initialValue": {
                    "baseExpression": {
                      "id": 5161,
                      "name": "owners721",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4423,
                      "src": "16737:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                        "typeString": "mapping(uint256 => address)"
                      }
                    },
                    "id": 5163,
                    "indexExpression": {
                      "id": 5162,
                      "name": "_tokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5153,
                      "src": "16747:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16737:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16716:40:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5166,
                          "name": "tokenOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5160,
                          "src": "16775:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5169,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16797:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5168,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16789:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5167,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "16789:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5170,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16789:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "16775:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e444546494e45445f4f574e4552",
                        "id": 5172,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16801:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_665a82e24970e95450234db0a05e4b37f2a03b4524d96a2fb7fddd76a7ed30de",
                          "typeString": "literal_string \"UNDEFINED_OWNER\""
                        },
                        "value": "UNDEFINED_OWNER"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_665a82e24970e95450234db0a05e4b37f2a03b4524d96a2fb7fddd76a7ed30de",
                          "typeString": "literal_string \"UNDEFINED_OWNER\""
                        }
                      ],
                      "id": 5165,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "16767:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16767:52:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5174,
                  "nodeType": "ExpressionStatement",
                  "src": "16767:52:2"
                },
                {
                  "expression": {
                    "id": 5175,
                    "name": "tokenOwner",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5160,
                    "src": "16929:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 5158,
                  "id": 5176,
                  "nodeType": "Return",
                  "src": "16922:17:2"
                }
              ]
            },
            "documentation": {
              "id": 5151,
              "nodeType": "StructuredDocumentation",
              "src": "16388:237:2",
              "text": " @notice Gets the owner of the specified token ID.\n @dev ERC-721\n @param _tokenId uint256 ID of the token to query the owner of\n @return address currently marked as the owner of the given token ID"
            },
            "functionSelector": "6352211e",
            "id": 5178,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerOf",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5155,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16678:8:2"
            },
            "parameters": {
              "id": 5154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5153,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5178,
                  "src": "16648:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5152,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16648:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16647:18:2"
            },
            "returnParameters": {
              "id": 5158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5157,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5178,
                  "src": "16696:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5156,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16696:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16695:9:2"
            },
            "scope": 6007,
            "src": "16631:316:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              8912
            ],
            "body": {
              "id": 5242,
              "nodeType": "Block",
              "src": "17351:469:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5197,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 5193,
                            "name": "_accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5182,
                            "src": "17384:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 5194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "17384:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 5195,
                            "name": "_tokenIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5185,
                            "src": "17404:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 5196,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "17404:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17384:36:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4d49534d4154434845445f41525241595f4c454e47544853",
                        "id": 5198,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17435:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        },
                        "value": "MISMATCHED_ARRAY_LENGTHS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        }
                      ],
                      "id": 5192,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17362:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17362:110:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5200,
                  "nodeType": "ExpressionStatement",
                  "src": "17362:110:2"
                },
                {
                  "assignments": [
                    5205
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5205,
                      "mutability": "mutable",
                      "name": "batchBalances",
                      "nodeType": "VariableDeclaration",
                      "scope": 5242,
                      "src": "17574:30:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5203,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17574:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5204,
                        "nodeType": "ArrayTypeName",
                        "src": "17574:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5212,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5209,
                          "name": "_accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5182,
                          "src": "17621:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        "id": 5210,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "17621:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5208,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "17607:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (uint256[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5206,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17611:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5207,
                        "nodeType": "ArrayTypeName",
                        "src": "17611:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      }
                    },
                    "id": 5211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17607:31:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17574:64:2"
                },
                {
                  "body": {
                    "id": 5238,
                    "nodeType": "Block",
                    "src": "17698:82:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 5236,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5224,
                              "name": "batchBalances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5205,
                              "src": "17713:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 5226,
                            "indexExpression": {
                              "id": 5225,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5214,
                              "src": "17727:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "17713:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 5227,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4415,
                                "src": "17732:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(address => uint256))"
                                }
                              },
                              "id": 5231,
                              "indexExpression": {
                                "baseExpression": {
                                  "id": 5228,
                                  "name": "_tokenIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5185,
                                  "src": "17741:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                    "typeString": "uint256[] calldata"
                                  }
                                },
                                "id": 5230,
                                "indexExpression": {
                                  "id": 5229,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5214,
                                  "src": "17751:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "17741:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "17732:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5235,
                            "indexExpression": {
                              "baseExpression": {
                                "id": 5232,
                                "name": "_accounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5182,
                                "src": "17755:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 5234,
                              "indexExpression": {
                                "id": 5233,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5214,
                                "src": "17765:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "17755:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "17732:36:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17713:55:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5237,
                        "nodeType": "ExpressionStatement",
                        "src": "17713:55:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5217,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5214,
                      "src": "17671:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 5218,
                        "name": "_accounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5182,
                        "src": "17675:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 5219,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "17675:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17671:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5239,
                  "initializationExpression": {
                    "assignments": [
                      5214
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 5214,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 5239,
                        "src": "17656:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5213,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17656:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 5216,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 5215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17668:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "17656:13:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 5222,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "17693:3:2",
                      "subExpression": {
                        "id": 5221,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5214,
                        "src": "17695:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5223,
                    "nodeType": "ExpressionStatement",
                    "src": "17693:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "17651:129:2"
                },
                {
                  "expression": {
                    "id": 5240,
                    "name": "batchBalances",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5205,
                    "src": "17799:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "functionReturnParameters": 5191,
                  "id": 5241,
                  "nodeType": "Return",
                  "src": "17792:20:2"
                }
              ]
            },
            "documentation": {
              "id": 5179,
              "nodeType": "StructuredDocumentation",
              "src": "16955:231:2",
              "text": "@notice Get the balance of account-token pairs.\n@dev ERC-1155\n@param _accounts The addresses of the token holders\n@param _tokenIds IDs of the tokens\n@return         balances"
            },
            "functionSelector": "4e1273f4",
            "id": 5243,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOfBatch",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5187,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17315:8:2"
            },
            "parameters": {
              "id": 5186,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5182,
                  "mutability": "mutable",
                  "name": "_accounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 5243,
                  "src": "17226:28:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5180,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "17226:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 5181,
                    "nodeType": "ArrayTypeName",
                    "src": "17226:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5185,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 5243,
                  "src": "17265:28:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5183,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "17265:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5184,
                    "nodeType": "ArrayTypeName",
                    "src": "17265:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17215:85:2"
            },
            "returnParameters": {
              "id": 5191,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5190,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5243,
                  "src": "17333:16:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5188,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "17333:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5189,
                    "nodeType": "ArrayTypeName",
                    "src": "17333:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17332:18:2"
            },
            "scope": 6007,
            "src": "17192:628:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              8920,
              9231
            ],
            "body": {
              "id": 5278,
              "nodeType": "Block",
              "src": "18217:292:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5258,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 5255,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "18236:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 5256,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "18236:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 5257,
                          "name": "_operator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5246,
                          "src": "18250:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "18236:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "524544554e44414e545f43414c4c",
                        "id": 5259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18261:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d0d6a83cea74c93af9d0ecf0d695b181905be0ac705b9f5c24f75ac5424c53e2",
                          "typeString": "literal_string \"REDUNDANT_CALL\""
                        },
                        "value": "REDUNDANT_CALL"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d0d6a83cea74c93af9d0ecf0d695b181905be0ac705b9f5c24f75ac5424c53e2",
                          "typeString": "literal_string \"REDUNDANT_CALL\""
                        }
                      ],
                      "id": 5254,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18228:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5260,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18228:50:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5261,
                  "nodeType": "ExpressionStatement",
                  "src": "18228:50:2"
                },
                {
                  "expression": {
                    "id": 5269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 5262,
                          "name": "operatorApprovals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4433,
                          "src": "18387:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(address => bool))"
                          }
                        },
                        "id": 5266,
                        "indexExpression": {
                          "expression": {
                            "id": 5263,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "18405:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 5264,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "18405:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18387:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 5267,
                      "indexExpression": {
                        "id": 5265,
                        "name": "_operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5246,
                        "src": "18417:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "18387:40:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5268,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5248,
                      "src": "18430:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "18387:51:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5270,
                  "nodeType": "ExpressionStatement",
                  "src": "18387:51:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5272,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "18469:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5273,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "18469:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5274,
                        "name": "_operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5246,
                        "src": "18481:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5275,
                        "name": "_approve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5248,
                        "src": "18492:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 5271,
                      "name": "ApprovalForAll",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8974,
                      "src": "18454:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,bool)"
                      }
                    },
                    "id": 5276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18454:47:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5277,
                  "nodeType": "EmitStatement",
                  "src": "18449:52:2"
                }
              ]
            },
            "documentation": {
              "id": 5244,
              "nodeType": "StructuredDocumentation",
              "src": "17828:262:2",
              "text": " @notice Approves or unapproves the operator.\n will revert if the caller attempts to approve itself as it is redundant\n @dev ERC-1155 & ERC-721\n @param _operator to (un)approve\n @param _approve flag to set or unset"
            },
            "functionSelector": "a22cb465",
            "id": 5279,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setApprovalForAll",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5252,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 5250,
                  "name": "IERC1155",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 8931,
                  "src": "18193:8:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC1155_$8931",
                    "typeString": "contract IERC1155"
                  }
                },
                {
                  "id": 5251,
                  "name": "IERC721",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 9250,
                  "src": "18203:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC721_$9250",
                    "typeString": "contract IERC721"
                  }
                }
              ],
              "src": "18184:27:2"
            },
            "parameters": {
              "id": 5249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5246,
                  "mutability": "mutable",
                  "name": "_operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 5279,
                  "src": "18123:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5245,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18123:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5248,
                  "mutability": "mutable",
                  "name": "_approve",
                  "nodeType": "VariableDeclaration",
                  "scope": 5279,
                  "src": "18142:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5247,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18142:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18122:34:2"
            },
            "returnParameters": {
              "id": 5253,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18217:0:2"
            },
            "scope": 6007,
            "src": "18096:413:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              8930,
              9249
            ],
            "body": {
              "id": 5298,
              "nodeType": "Block",
              "src": "18959:64:2",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 5292,
                        "name": "operatorApprovals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4433,
                        "src": "18977:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                          "typeString": "mapping(address => mapping(address => bool))"
                        }
                      },
                      "id": 5294,
                      "indexExpression": {
                        "id": 5293,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5282,
                        "src": "18995:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "18977:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 5296,
                    "indexExpression": {
                      "id": 5295,
                      "name": "_operator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5284,
                      "src": "19005:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18977:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5291,
                  "id": 5297,
                  "nodeType": "Return",
                  "src": "18970:45:2"
                }
              ]
            },
            "documentation": {
              "id": 5280,
              "nodeType": "StructuredDocumentation",
              "src": "18517:277:2",
              "text": "@notice Gets approval status of an operator for a given account.\n@dev ERC-1155 & ERC-721\n@param _account   token holder\n@param _operator  operator to check\n@return           True if the operator is approved, false if not"
            },
            "functionSelector": "e985e9c5",
            "id": 5299,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isApprovedForAll",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5288,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 5286,
                  "name": "IERC1155",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 8931,
                  "src": "18911:8:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC1155_$8931",
                    "typeString": "contract IERC1155"
                  }
                },
                {
                  "id": 5287,
                  "name": "IERC721",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 9250,
                  "src": "18921:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC721_$9250",
                    "typeString": "contract IERC721"
                  }
                }
              ],
              "src": "18902:27:2"
            },
            "parameters": {
              "id": 5285,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5282,
                  "mutability": "mutable",
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5299,
                  "src": "18826:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5281,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18826:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5284,
                  "mutability": "mutable",
                  "name": "_operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 5299,
                  "src": "18844:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5283,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18844:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18825:37:2"
            },
            "returnParameters": {
              "id": 5291,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5290,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5299,
                  "src": "18948:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5289,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18948:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18947:6:2"
            },
            "scope": 6007,
            "src": "18800:223:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9024
            ],
            "body": {
              "id": 5328,
              "nodeType": "Block",
              "src": "19349:385:2",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5326,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 5322,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 5318,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 5314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 5310,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5308,
                              "name": "_interfaceId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5302,
                              "src": "19438:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "30783031666663396137",
                              "id": 5309,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19454:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_33540519_by_1",
                                "typeString": "int_const 33540519"
                              },
                              "value": "0x01ffc9a7"
                            },
                            "src": "19438:26:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 5313,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5311,
                              "name": "_interfaceId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5302,
                              "src": "19491:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "30786439623637613236",
                              "id": 5312,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19507:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_3652614694_by_1",
                                "typeString": "int_const 3652614694"
                              },
                              "value": "0xd9b67a26"
                            },
                            "src": "19491:26:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "19438:79:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 5317,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5315,
                            "name": "_interfaceId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5302,
                            "src": "19545:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30783830616335386364",
                            "id": 5316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19561:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2158778573_by_1",
                              "typeString": "int_const 2158778573"
                            },
                            "value": "0x80ac58cd"
                          },
                          "src": "19545:26:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "19438:133:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 5321,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5319,
                          "name": "_interfaceId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5302,
                          "src": "19598:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30783562356531333966",
                          "id": 5320,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19614:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1532892063_by_1",
                            "typeString": "int_const 1532892063"
                          },
                          "value": "0x5b5e139f"
                        },
                        "src": "19598:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "19438:186:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 5325,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 5323,
                        "name": "_interfaceId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5302,
                        "src": "19670:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30783065383933343163",
                        "id": 5324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19686:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_243872796_by_1",
                          "typeString": "int_const 243872796"
                        },
                        "value": "0x0e89341c"
                      },
                      "src": "19670:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "19438:258:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5307,
                  "id": 5327,
                  "nodeType": "Return",
                  "src": "19360:336:2"
                }
              ]
            },
            "documentation": {
              "id": 5300,
              "nodeType": "StructuredDocumentation",
              "src": "19031:185:2",
              "text": " @notice Returns true if this contract implements the interface defined by _interfaceId_.\n This function call must use less than 30 000 gas. ATM not enforced."
            },
            "functionSelector": "01ffc9a7",
            "id": 5329,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5304,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "19311:8:2"
            },
            "parameters": {
              "id": 5303,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5302,
                  "mutability": "mutable",
                  "name": "_interfaceId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5329,
                  "src": "19249:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 5301,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "19249:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19248:21:2"
            },
            "returnParameters": {
              "id": 5307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5306,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5329,
                  "src": "19338:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5305,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19338:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19337:6:2"
            },
            "scope": 6007,
            "src": "19222:512:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              8945
            ],
            "body": {
              "id": 5351,
              "nodeType": "Block",
              "src": "20421:54:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5345,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5332,
                        "src": "20438:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5346,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5334,
                        "src": "20443:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5347,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5336,
                        "src": "20453:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5348,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5338,
                        "src": "20461:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5344,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5415,
                        5487
                      ],
                      "referencedDeclaration": 5415,
                      "src": "20432:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint256,bytes memory)"
                      }
                    },
                    "id": 5349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20432:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5350,
                  "nodeType": "ExpressionStatement",
                  "src": "20432:35:2"
                }
              ]
            },
            "documentation": {
              "id": 5330,
              "nodeType": "StructuredDocumentation",
              "src": "19825:428:2",
              "text": " @notice Mint an amount of a desired token\n Currently no restrictions as to who is allowed to mint - so, it is public.\n @dev ERC-1155\n @param _to       owner of the minted token\n @param _tokenId  ID of the token to be minted\n @param _value    Amount of the token to be minted\n @param _data     Additional data forwarded to onERC1155BatchReceived if _to is a contract"
            },
            "functionSelector": "731133e9",
            "id": 5352,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5342,
                "modifierName": {
                  "id": 5341,
                  "name": "onlyFromVoucherKernel",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4485,
                  "src": "20399:21:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20399:21:2"
              }
            ],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5340,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "20390:8:2"
            },
            "parameters": {
              "id": 5339,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5332,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5352,
                  "src": "20283:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5331,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20283:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5334,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5352,
                  "src": "20305:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5333,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20305:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5336,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 5352,
                  "src": "20332:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5335,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20332:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5338,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5352,
                  "src": "20357:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5337,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20357:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20272:110:2"
            },
            "returnParameters": {
              "id": 5343,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20421:0:2"
            },
            "scope": 6007,
            "src": "20259:216:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5414,
              "nodeType": "Block",
              "src": "20989:487:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5370,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5365,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5355,
                          "src": "21008:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5368,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "21023:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5367,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "21015:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5366,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "21015:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21015:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "21008:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 5371,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21027:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 5364,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "21000:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21000:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5373,
                  "nodeType": "ExpressionStatement",
                  "src": "21000:49:2"
                },
                {
                  "expression": {
                    "id": 5387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 5374,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4415,
                          "src": "21144:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(uint256 => mapping(address => uint256))"
                          }
                        },
                        "id": 5377,
                        "indexExpression": {
                          "id": 5375,
                          "name": "_tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5357,
                          "src": "21153:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "21144:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5378,
                      "indexExpression": {
                        "id": 5376,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5355,
                        "src": "21163:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "21144:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 5385,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5359,
                          "src": "21198:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 5379,
                              "name": "balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4415,
                              "src": "21170:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(address => uint256))"
                              }
                            },
                            "id": 5381,
                            "indexExpression": {
                              "id": 5380,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5357,
                              "src": "21179:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "21170:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 5383,
                          "indexExpression": {
                            "id": 5382,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5355,
                            "src": "21189:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "21170:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10676,
                        "src": "21170:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 5386,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21170:35:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21144:61:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5388,
                  "nodeType": "ExpressionStatement",
                  "src": "21144:61:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5390,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "21236:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5391,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "21236:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5394,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21256:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 5393,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21248:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5392,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "21248:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5395,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21248:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5396,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5355,
                        "src": "21260:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5397,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5357,
                        "src": "21265:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5398,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5359,
                        "src": "21275:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5389,
                      "name": "TransferSingle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8837,
                      "src": "21221:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256)"
                      }
                    },
                    "id": 5399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21221:61:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5400,
                  "nodeType": "EmitStatement",
                  "src": "21216:66:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5402,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "21340:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5403,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "21340:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5406,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21373:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 5405,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21365:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5404,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "21365:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5407,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21365:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5408,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5355,
                        "src": "21390:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5409,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5357,
                        "src": "21408:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5410,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5359,
                        "src": "21431:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5411,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5361,
                        "src": "21452:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5401,
                      "name": "_doSafeTransferAcceptanceCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5064,
                      "src": "21295:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256,bytes memory)"
                      }
                    },
                    "id": 5412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21295:173:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5413,
                  "nodeType": "ExpressionStatement",
                  "src": "21295:173:2"
                }
              ]
            },
            "documentation": {
              "id": 5353,
              "nodeType": "StructuredDocumentation",
              "src": "20483:366:2",
              "text": " @notice Internal function to mint an amount of a desired token\n @dev ERC-1155\n @param _to       owner of the minted token\n @param _tokenId  ID of the token to be minted\n @param _value    Amount of the token to be minted\n @param _data     Additional data forwarded to onERC1155BatchReceived if _to is a contract"
            },
            "id": 5415,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5362,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5355,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5415,
                  "src": "20880:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5354,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20880:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5357,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5415,
                  "src": "20902:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5356,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20902:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5359,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 5415,
                  "src": "20929:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5358,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20929:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5361,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5415,
                  "src": "20954:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5360,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20954:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20869:110:2"
            },
            "returnParameters": {
              "id": 5363,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20989:0:2"
            },
            "scope": 6007,
            "src": "20855:621:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              8965
            ],
            "body": {
              "id": 5435,
              "nodeType": "Block",
              "src": "21887:59:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5429,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5418,
                        "src": "21904:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5430,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5420,
                        "src": "21908:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5428,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5415,
                        5487
                      ],
                      "referencedDeclaration": 5487,
                      "src": "21898:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 5431,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21898:18:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5432,
                  "nodeType": "ExpressionStatement",
                  "src": "21898:18:2"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 5433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "21934:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 5427,
                  "id": 5434,
                  "nodeType": "Return",
                  "src": "21927:11:2"
                }
              ]
            },
            "documentation": {
              "id": 5416,
              "nodeType": "StructuredDocumentation",
              "src": "21484:260:2",
              "text": " @notice Function to mint tokens.\n @dev ERC-721\n @param to The address that will receive the minted tokens.\n @param tokenId The token id to mint.\n @return A boolean that indicates if the operation was successful."
            },
            "functionSelector": "40c10f19",
            "id": 5436,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5424,
                "modifierName": {
                  "id": 5423,
                  "name": "onlyFromVoucherKernel",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4485,
                  "src": "21836:21:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21836:21:2"
              }
            ],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5422,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "21818:8:2"
            },
            "parameters": {
              "id": 5421,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5418,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5436,
                  "src": "21764:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5417,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21764:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5420,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5436,
                  "src": "21776:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5419,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21776:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21763:29:2"
            },
            "returnParameters": {
              "id": 5427,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5426,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5436,
                  "src": "21876:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5425,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21876:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21875:6:2"
            },
            "scope": 6007,
            "src": "21750:196:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5486,
              "nodeType": "Block",
              "src": "22280:399:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5450,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5445,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5439,
                          "src": "22299:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5448,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22314:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5447,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "22306:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5446,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "22306:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5449,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22306:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "22299:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 5451,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22318:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 5444,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "22291:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5452,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22291:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5453,
                  "nodeType": "ExpressionStatement",
                  "src": "22291:49:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5462,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 5455,
                            "name": "owners721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4423,
                            "src": "22463:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                              "typeString": "mapping(uint256 => address)"
                            }
                          },
                          "id": 5457,
                          "indexExpression": {
                            "id": 5456,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5441,
                            "src": "22473:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "22463:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5460,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22494:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5459,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "22486:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5458,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "22486:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5461,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22486:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "22463:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a20746f6b656e20616c7265616479206d696e746564",
                        "id": 5463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22511:30:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
                          "typeString": "literal_string \"ERC721: token already minted\""
                        },
                        "value": "ERC721: token already minted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
                          "typeString": "literal_string \"ERC721: token already minted\""
                        }
                      ],
                      "id": 5454,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "22441:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5464,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22441:111:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5465,
                  "nodeType": "ExpressionStatement",
                  "src": "22441:111:2"
                },
                {
                  "expression": {
                    "id": 5470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 5466,
                        "name": "owners721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4423,
                        "src": "22565:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                          "typeString": "mapping(uint256 => address)"
                        }
                      },
                      "id": 5468,
                      "indexExpression": {
                        "id": 5467,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5441,
                        "src": "22575:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "22565:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5469,
                      "name": "_to",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5439,
                      "src": "22587:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "22565:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5471,
                  "nodeType": "ExpressionStatement",
                  "src": "22565:25:2"
                },
                {
                  "expression": {
                    "id": 5475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "22601:17:2",
                    "subExpression": {
                      "baseExpression": {
                        "id": 5472,
                        "name": "balance721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4419,
                        "src": "22601:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5474,
                      "indexExpression": {
                        "id": 5473,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5439,
                        "src": "22612:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "22601:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5476,
                  "nodeType": "ExpressionStatement",
                  "src": "22601:17:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5480,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "22653:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 5479,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "22645:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5478,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "22645:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5481,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "22645:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5482,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5439,
                        "src": "22657:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5483,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5441,
                        "src": "22662:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5477,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9158,
                      "src": "22636:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 5484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22636:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5485,
                  "nodeType": "EmitStatement",
                  "src": "22631:40:2"
                }
              ]
            },
            "documentation": {
              "id": 5437,
              "nodeType": "StructuredDocumentation",
              "src": "21954:265:2",
              "text": " @notice Internal function to mint a new token.\n Reverts if the given token ID already exists.\n @dev ERC-721\n @param _to The address that will own the minted token\n @param _tokenId uint256 ID of the token to be minted"
            },
            "id": 5487,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5442,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5439,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5487,
                  "src": "22240:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5438,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22240:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5441,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5487,
                  "src": "22253:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5440,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22253:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22239:31:2"
            },
            "returnParameters": {
              "id": 5443,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22280:0:2"
            },
            "scope": 6007,
            "src": "22225:454:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5510,
              "nodeType": "Block",
              "src": "23298:98:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5504,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5490,
                        "src": "23357:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5505,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5493,
                        "src": "23362:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 5506,
                        "name": "_values",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5496,
                        "src": "23373:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 5507,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5498,
                        "src": "23382:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5503,
                      "name": "_mintBatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5604,
                      "src": "23346:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256[] memory,uint256[] memory,bytes memory)"
                      }
                    },
                    "id": 5508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23346:42:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5509,
                  "nodeType": "ExpressionStatement",
                  "src": "23346:42:2"
                }
              ]
            },
            "documentation": {
              "id": 5488,
              "nodeType": "StructuredDocumentation",
              "src": "22687:427:2",
              "text": " @notice Batch minting of tokens\n Currently no restrictions as to who is allowed to mint - so, it is public.\n @dev ERC-1155\n @param _to The address that will own the minted token\n @param _tokenIds IDs of the tokens to be minted\n @param _values Amounts of the tokens to be minted\n @param _data Additional data forwarded to onERC1155BatchReceived if _to is a contract"
            },
            "functionSelector": "1f7fdffa",
            "id": 5511,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5501,
                "modifierName": {
                  "id": 5500,
                  "name": "onlyFromVoucherKernel",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4485,
                  "src": "23276:21:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "23276:21:2"
              }
            ],
            "name": "mintBatch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5499,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5490,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5511,
                  "src": "23149:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5489,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23149:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5493,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 5511,
                  "src": "23171:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5491,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "23171:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5492,
                    "nodeType": "ArrayTypeName",
                    "src": "23171:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5496,
                  "mutability": "mutable",
                  "name": "_values",
                  "nodeType": "VariableDeclaration",
                  "scope": 5511,
                  "src": "23208:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5494,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "23208:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5495,
                    "nodeType": "ArrayTypeName",
                    "src": "23208:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5498,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5511,
                  "src": "23243:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5497,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "23243:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23138:130:2"
            },
            "returnParameters": {
              "id": 5502,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23298:0:2"
            },
            "scope": 6007,
            "src": "23120:276:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5603,
              "nodeType": "Block",
              "src": "23936:795:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5531,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5526,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5514,
                          "src": "23955:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5529,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "23970:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5528,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "23962:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5527,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "23962:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5530,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23962:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "23955:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 5532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23974:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 5525,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "23947:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23947:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5534,
                  "nodeType": "ExpressionStatement",
                  "src": "23947:49:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5540,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 5536,
                            "name": "_tokenIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5517,
                            "src": "24105:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 5537,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "24105:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 5538,
                            "name": "_values",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5520,
                            "src": "24125:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 5539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "24125:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "24105:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4d49534d4154434845445f41525241595f4c454e47544853",
                        "id": 5541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24141:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        },
                        "value": "MISMATCHED_ARRAY_LENGTHS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        }
                      ],
                      "id": 5535,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "24097:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24097:71:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5543,
                  "nodeType": "ExpressionStatement",
                  "src": "24097:71:2"
                },
                {
                  "body": {
                    "id": 5576,
                    "nodeType": "Block",
                    "src": "24319:132:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 5574,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 5555,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4415,
                                "src": "24334:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(address => uint256))"
                                }
                              },
                              "id": 5560,
                              "indexExpression": {
                                "baseExpression": {
                                  "id": 5556,
                                  "name": "_tokenIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5517,
                                  "src": "24343:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 5558,
                                "indexExpression": {
                                  "id": 5557,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5545,
                                  "src": "24353:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "24343:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "24334:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5561,
                            "indexExpression": {
                              "id": 5559,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5514,
                              "src": "24357:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "24334:27:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 5566,
                                    "name": "balances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4415,
                                    "src": "24397:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 5570,
                                  "indexExpression": {
                                    "baseExpression": {
                                      "id": 5567,
                                      "name": "_tokenIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5517,
                                      "src": "24406:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 5569,
                                    "indexExpression": {
                                      "id": 5568,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5545,
                                      "src": "24416:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "24406:12:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "24397:22:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 5572,
                                "indexExpression": {
                                  "id": 5571,
                                  "name": "_to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5514,
                                  "src": "24420:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "24397:27:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 5562,
                                  "name": "_values",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5520,
                                  "src": "24364:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 5564,
                                "indexExpression": {
                                  "id": 5563,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5545,
                                  "src": "24372:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "24364:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5565,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10676,
                              "src": "24364:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5573,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24364:75:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "24334:105:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5575,
                        "nodeType": "ExpressionStatement",
                        "src": "24334:105:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5548,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5545,
                      "src": "24292:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 5549,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5517,
                        "src": "24296:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5550,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "24296:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24292:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5577,
                  "initializationExpression": {
                    "assignments": [
                      5545
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 5545,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 5577,
                        "src": "24277:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5544,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "24277:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 5547,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 5546,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24289:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "24277:13:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 5553,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "24314:3:2",
                      "subExpression": {
                        "id": 5552,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5545,
                        "src": "24314:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5554,
                    "nodeType": "ExpressionStatement",
                    "src": "24314:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "24272:179:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5579,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "24482:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "24482:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5583,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24502:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 5582,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "24494:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5581,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "24494:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5584,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24494:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5585,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5514,
                        "src": "24506:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5586,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5517,
                        "src": "24511:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 5587,
                        "name": "_values",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5520,
                        "src": "24522:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 5578,
                      "name": "TransferBatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8852,
                      "src": "24468:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256[] memory,uint256[] memory)"
                      }
                    },
                    "id": 5588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24468:62:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5589,
                  "nodeType": "EmitStatement",
                  "src": "24463:67:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5591,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "24593:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5592,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "24593:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5595,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24626:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 5594,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "24618:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5593,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "24618:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5596,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24618:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5597,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5514,
                        "src": "24643:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5598,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5517,
                        "src": "24661:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 5599,
                        "name": "_values",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5520,
                        "src": "24685:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 5600,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5522,
                        "src": "24707:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5590,
                      "name": "_doSafeBatchTransferAcceptanceCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5108,
                      "src": "24543:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256[] memory,uint256[] memory,bytes memory)"
                      }
                    },
                    "id": 5601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24543:180:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5602,
                  "nodeType": "ExpressionStatement",
                  "src": "24543:180:2"
                }
              ]
            },
            "documentation": {
              "id": 5512,
              "nodeType": "StructuredDocumentation",
              "src": "23404:367:2",
              "text": " @notice Internal function for batch minting of tokens\\\n @dev ERC-1155\n @param _to The address that will own the minted token\n @param _tokenIds IDs of the tokens to be minted\n @param _values Amounts of the tokens to be minted\n @param _data Additional data forwarded to onERC1155BatchReceived if _to is a contract"
            },
            "id": 5604,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mintBatch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5514,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5604,
                  "src": "23807:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5513,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23807:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5517,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 5604,
                  "src": "23829:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5515,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "23829:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5516,
                    "nodeType": "ArrayTypeName",
                    "src": "23829:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5520,
                  "mutability": "mutable",
                  "name": "_values",
                  "nodeType": "VariableDeclaration",
                  "scope": 5604,
                  "src": "23866:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5518,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "23866:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5519,
                    "nodeType": "ArrayTypeName",
                    "src": "23866:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5522,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5604,
                  "src": "23901:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5521,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "23901:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23796:130:2"
            },
            "returnParameters": {
              "id": 5524,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23936:0:2"
            },
            "scope": 6007,
            "src": "23777:954:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              8955
            ],
            "body": {
              "id": 5623,
              "nodeType": "Block",
              "src": "25116:52:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5618,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5607,
                        "src": "25133:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5619,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5609,
                        "src": "25143:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5620,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5611,
                        "src": "25153:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5617,
                      "name": "_burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5672,
                      "src": "25127:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 5621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25127:33:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5622,
                  "nodeType": "ExpressionStatement",
                  "src": "25127:33:2"
                }
              ]
            },
            "documentation": {
              "id": 5605,
              "nodeType": "StructuredDocumentation",
              "src": "24739:233:2",
              "text": " @notice Burn an amount of tokens with the given ID\n @dev ERC-1155\n @param _account  Account which owns the token\n @param _tokenId  ID of the token\n @param _value    Amount of the token"
            },
            "functionSelector": "f5298aca",
            "id": 5624,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5615,
                "modifierName": {
                  "id": 5614,
                  "name": "onlyFromVoucherKernel",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4485,
                  "src": "25094:21:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "25094:21:2"
              }
            ],
            "name": "burn",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5613,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "25085:8:2"
            },
            "parameters": {
              "id": 5612,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5607,
                  "mutability": "mutable",
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5624,
                  "src": "25002:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5606,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25002:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5609,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5624,
                  "src": "25029:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5608,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25029:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5611,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 5624,
                  "src": "25056:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5610,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25056:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24991:86:2"
            },
            "returnParameters": {
              "id": 5616,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25116:0:2"
            },
            "scope": 6007,
            "src": "24978:190:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5671,
              "nodeType": "Block",
              "src": "25525:343:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5640,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5635,
                          "name": "_account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5627,
                          "src": "25544:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5638,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25564:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5637,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "25556:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5636,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "25556:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25556:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "25544:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 5641,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "25568:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 5634,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "25536:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25536:54:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5643,
                  "nodeType": "ExpressionStatement",
                  "src": "25536:54:2"
                },
                {
                  "expression": {
                    "id": 5657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 5644,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4415,
                          "src": "25707:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(uint256 => mapping(address => uint256))"
                          }
                        },
                        "id": 5647,
                        "indexExpression": {
                          "id": 5645,
                          "name": "_tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5629,
                          "src": "25716:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "25707:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5648,
                      "indexExpression": {
                        "id": 5646,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5627,
                        "src": "25726:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "25707:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 5655,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5631,
                          "src": "25771:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 5649,
                              "name": "balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4415,
                              "src": "25738:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(address => uint256))"
                              }
                            },
                            "id": 5651,
                            "indexExpression": {
                              "id": 5650,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5629,
                              "src": "25747:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "25738:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 5653,
                          "indexExpression": {
                            "id": 5652,
                            "name": "_account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5627,
                            "src": "25757:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "25738:28:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5654,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10698,
                        "src": "25738:32:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 5656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25738:40:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25707:71:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5658,
                  "nodeType": "ExpressionStatement",
                  "src": "25707:71:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5660,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "25809:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5661,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "25809:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5662,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5627,
                        "src": "25821:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5665,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "25839:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 5664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "25831:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5663,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "25831:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5666,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "25831:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5667,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5629,
                        "src": "25843:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5668,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5631,
                        "src": "25853:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5659,
                      "name": "TransferSingle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8837,
                      "src": "25794:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256)"
                      }
                    },
                    "id": 5669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25794:66:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5670,
                  "nodeType": "EmitStatement",
                  "src": "25789:71:2"
                }
              ]
            },
            "documentation": {
              "id": 5625,
              "nodeType": "StructuredDocumentation",
              "src": "25176:233:2",
              "text": " @notice Burn an amount of tokens with the given ID\n @dev ERC-1155\n @param _account  Account which owns the token\n @param _tokenId  ID of the token\n @param _value    Amount of the token"
            },
            "id": 5672,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5632,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5627,
                  "mutability": "mutable",
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5672,
                  "src": "25440:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5626,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25440:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5629,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5672,
                  "src": "25467:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5628,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25467:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5631,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 5672,
                  "src": "25494:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5630,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25494:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25429:86:2"
            },
            "returnParameters": {
              "id": 5633,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25525:0:2"
            },
            "scope": 6007,
            "src": "25415:453:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5692,
              "nodeType": "Block",
              "src": "26389:59:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5687,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5675,
                        "src": "26411:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5688,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5678,
                        "src": "26421:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 5689,
                        "name": "_values",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5681,
                        "src": "26432:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 5686,
                      "name": "_burnBatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5771,
                      "src": "26400:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256[] memory,uint256[] memory)"
                      }
                    },
                    "id": 5690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26400:40:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5691,
                  "nodeType": "ExpressionStatement",
                  "src": "26400:40:2"
                }
              ]
            },
            "documentation": {
              "id": 5673,
              "nodeType": "StructuredDocumentation",
              "src": "26006:223:2",
              "text": " @notice Batch burn an amounts of tokens\n @dev ERC-1155\n @param _account Account which owns the token\n @param _tokenIds IDs of the tokens\n @param _values Amounts of the tokens"
            },
            "functionSelector": "6b20c454",
            "id": 5693,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5684,
                "modifierName": {
                  "id": 5683,
                  "name": "onlyFromVoucherKernel",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4485,
                  "src": "26367:21:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "26367:21:2"
              }
            ],
            "name": "burnBatch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5682,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5675,
                  "mutability": "mutable",
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5693,
                  "src": "26264:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5674,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26264:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5678,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 5693,
                  "src": "26291:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5676,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "26291:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5677,
                    "nodeType": "ArrayTypeName",
                    "src": "26291:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5681,
                  "mutability": "mutable",
                  "name": "_values",
                  "nodeType": "VariableDeclaration",
                  "scope": 5693,
                  "src": "26328:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5679,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "26328:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5680,
                    "nodeType": "ArrayTypeName",
                    "src": "26328:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26253:106:2"
            },
            "returnParameters": {
              "id": 5685,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26389:0:2"
            },
            "scope": 6007,
            "src": "26235:213:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5770,
              "nodeType": "Block",
              "src": "26841:684:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5711,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5706,
                          "name": "_account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5696,
                          "src": "26860:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5709,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26880:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5708,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "26872:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5707,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "26872:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26872:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "26860:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 5712,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "26884:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 5705,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "26852:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26852:54:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5714,
                  "nodeType": "ExpressionStatement",
                  "src": "26852:54:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5720,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 5716,
                            "name": "_tokenIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5699,
                            "src": "27015:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 5717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "27015:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 5718,
                            "name": "_values",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5702,
                            "src": "27035:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 5719,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "27035:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "27015:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4d49534d4154434845445f41525241595f4c454e47544853",
                        "id": 5721,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "27051:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        },
                        "value": "MISMATCHED_ARRAY_LENGTHS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        }
                      ],
                      "id": 5715,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "27007:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27007:71:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5723,
                  "nodeType": "ExpressionStatement",
                  "src": "27007:71:2"
                },
                {
                  "body": {
                    "id": 5756,
                    "nodeType": "Block",
                    "src": "27229:128:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 5754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 5735,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4415,
                                "src": "27244:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(address => uint256))"
                                }
                              },
                              "id": 5740,
                              "indexExpression": {
                                "baseExpression": {
                                  "id": 5736,
                                  "name": "_tokenIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5699,
                                  "src": "27253:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 5738,
                                "indexExpression": {
                                  "id": 5737,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5725,
                                  "src": "27263:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "27253:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "27244:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5741,
                            "indexExpression": {
                              "id": 5739,
                              "name": "_account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5696,
                              "src": "27267:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "27244:32:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "baseExpression": {
                                  "id": 5750,
                                  "name": "_values",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5702,
                                  "src": "27334:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 5752,
                                "indexExpression": {
                                  "id": 5751,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5725,
                                  "src": "27342:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "27334:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 5742,
                                    "name": "balances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4415,
                                    "src": "27279:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 5746,
                                  "indexExpression": {
                                    "baseExpression": {
                                      "id": 5743,
                                      "name": "_tokenIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5699,
                                      "src": "27288:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 5745,
                                    "indexExpression": {
                                      "id": 5744,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5725,
                                      "src": "27298:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "27288:12:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "27279:22:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 5748,
                                "indexExpression": {
                                  "id": 5747,
                                  "name": "_account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5696,
                                  "src": "27302:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "27279:32:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5749,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10698,
                              "src": "27279:54:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27279:66:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27244:101:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5755,
                        "nodeType": "ExpressionStatement",
                        "src": "27244:101:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5731,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5728,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5725,
                      "src": "27202:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 5729,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5699,
                        "src": "27206:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5730,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "27206:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27202:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5757,
                  "initializationExpression": {
                    "assignments": [
                      5725
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 5725,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 5757,
                        "src": "27187:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5724,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27187:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 5727,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 5726,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27199:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "27187:13:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 5733,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "27224:3:2",
                      "subExpression": {
                        "id": 5732,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5725,
                        "src": "27224:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5734,
                    "nodeType": "ExpressionStatement",
                    "src": "27224:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "27182:175:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5759,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "27402:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "27402:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5761,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5696,
                        "src": "27427:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5764,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "27458:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 5763,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "27450:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5762,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "27450:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5765,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27450:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5766,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5699,
                        "src": "27475:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 5767,
                        "name": "_values",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5702,
                        "src": "27499:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 5758,
                      "name": "TransferBatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8852,
                      "src": "27374:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256[] memory,uint256[] memory)"
                      }
                    },
                    "id": 5768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27374:143:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5769,
                  "nodeType": "EmitStatement",
                  "src": "27369:148:2"
                }
              ]
            },
            "documentation": {
              "id": 5694,
              "nodeType": "StructuredDocumentation",
              "src": "26456:244:2",
              "text": " @notice Internal function to batch burn an amounts of tokens\n @dev ERC-1155\n @param _account Account which owns the token\n @param _tokenIds IDs of the tokens\n @param _values Amounts of the tokens"
            },
            "id": 5771,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burnBatch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5703,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5696,
                  "mutability": "mutable",
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5771,
                  "src": "26736:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5695,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26736:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5699,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 5771,
                  "src": "26763:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5697,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "26763:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5698,
                    "nodeType": "ArrayTypeName",
                    "src": "26763:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5702,
                  "mutability": "mutable",
                  "name": "_values",
                  "nodeType": "VariableDeclaration",
                  "scope": 5771,
                  "src": "26800:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5700,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "26800:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5701,
                    "nodeType": "ArrayTypeName",
                    "src": "26800:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26725:106:2"
            },
            "returnParameters": {
              "id": 5704,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26841:0:2"
            },
            "scope": 6007,
            "src": "26706:819:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5783,
              "nodeType": "Block",
              "src": "27813:42:2",
              "statements": [
                {
                  "expression": {
                    "id": 5781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 5779,
                      "name": "metadataBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4435,
                      "src": "27824:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5780,
                      "name": "_newBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5774,
                      "src": "27839:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "27824:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 5782,
                  "nodeType": "ExpressionStatement",
                  "src": "27824:23:2"
                }
              ]
            },
            "documentation": {
              "id": 5772,
              "nodeType": "StructuredDocumentation",
              "src": "27621:119:2",
              "text": " @notice Setting the URL prefix for tokens metadata\n @param _newBase   New prefix to be used"
            },
            "functionSelector": "38b6db2e",
            "id": 5784,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5777,
                "modifierName": {
                  "id": 5776,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4463,
                  "src": "27803:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "27803:9:2"
              }
            ],
            "name": "_setMetadataBase",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5775,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5774,
                  "mutability": "mutable",
                  "name": "_newBase",
                  "nodeType": "VariableDeclaration",
                  "scope": 5784,
                  "src": "27772:22:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5773,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "27772:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27771:24:2"
            },
            "returnParameters": {
              "id": 5778,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27813:0:2"
            },
            "scope": 6007,
            "src": "27746:109:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5796,
              "nodeType": "Block",
              "src": "28060:48:2",
              "statements": [
                {
                  "expression": {
                    "id": 5794,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 5792,
                      "name": "metadata1155Route",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4437,
                      "src": "28071:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5793,
                      "name": "_newRoute",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5787,
                      "src": "28091:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "28071:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 5795,
                  "nodeType": "ExpressionStatement",
                  "src": "28071:29:2"
                }
              ]
            },
            "documentation": {
              "id": 5785,
              "nodeType": "StructuredDocumentation",
              "src": "27863:126:2",
              "text": " @notice Setting the URL route for ERC1155 tokens metadata\n @param _newRoute   New route to be used"
            },
            "functionSelector": "bb499440",
            "id": 5797,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5790,
                "modifierName": {
                  "id": 5789,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4463,
                  "src": "28050:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "28050:9:2"
              }
            ],
            "name": "_set1155Route",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5787,
                  "mutability": "mutable",
                  "name": "_newRoute",
                  "nodeType": "VariableDeclaration",
                  "scope": 5797,
                  "src": "28018:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5786,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "28018:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28017:25:2"
            },
            "returnParameters": {
              "id": 5791,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28060:0:2"
            },
            "scope": 6007,
            "src": "27995:113:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5809,
              "nodeType": "Block",
              "src": "28311:47:2",
              "statements": [
                {
                  "expression": {
                    "id": 5807,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 5805,
                      "name": "metadata721Route",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4439,
                      "src": "28322:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5806,
                      "name": "_newRoute",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5800,
                      "src": "28341:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "28322:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 5808,
                  "nodeType": "ExpressionStatement",
                  "src": "28322:28:2"
                }
              ]
            },
            "documentation": {
              "id": 5798,
              "nodeType": "StructuredDocumentation",
              "src": "28116:125:2",
              "text": " @notice Setting the URL route for ERC721 tokens metadata\n @param _newRoute   New route to be used"
            },
            "functionSelector": "7d64afde",
            "id": 5810,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5803,
                "modifierName": {
                  "id": 5802,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4463,
                  "src": "28301:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "28301:9:2"
              }
            ],
            "name": "_set721Route",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5801,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5800,
                  "mutability": "mutable",
                  "name": "_newRoute",
                  "nodeType": "VariableDeclaration",
                  "scope": 5810,
                  "src": "28269:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5799,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "28269:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28268:25:2"
            },
            "returnParameters": {
              "id": 5804,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28311:0:2"
            },
            "scope": 6007,
            "src": "28247:111:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5830,
              "nodeType": "Block",
              "src": "28800:149:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 5822,
                            "name": "metadataBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4435,
                            "src": "28873:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          {
                            "id": 5823,
                            "name": "metadata1155Route",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4437,
                            "src": "28887:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          {
                            "arguments": [
                              {
                                "id": 5825,
                                "name": "_tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5813,
                                "src": "28916:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 5824,
                              "name": "_uint2str",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6006,
                              "src": "28906:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (string memory)"
                              }
                            },
                            "id": 5826,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28906:19:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            },
                            {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            },
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "expression": {
                            "id": 5820,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "28856:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 5821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "28856:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 5827,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "28856:70:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5819,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "28831:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                        "typeString": "type(string storage pointer)"
                      },
                      "typeName": {
                        "id": 5818,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "28831:6:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 5828,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28831:110:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 5817,
                  "id": 5829,
                  "nodeType": "Return",
                  "src": "28811:130:2"
                }
              ]
            },
            "documentation": {
              "id": 5811,
              "nodeType": "StructuredDocumentation",
              "src": "28366:359:2",
              "text": " @notice A distinct Uniform Resource Identifier (URI) for a given token.\n @dev ERC-1155\n URIs are defined in RFC 3986. The URI MUST point to a JSON file that conforms to the \"ERC-1155 Metadata URI JSON Schema\".\n @param _tokenId  The ID of the token\n @return          Full URI string for metadata of the _tokenId"
            },
            "functionSelector": "0e89341c",
            "id": 5831,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "uri",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5813,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5831,
                  "src": "28744:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5812,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28744:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28743:18:2"
            },
            "returnParameters": {
              "id": 5817,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5816,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5831,
                  "src": "28785:13:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5815,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "28785:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28784:15:2"
            },
            "scope": 6007,
            "src": "28731:218:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 5839,
              "nodeType": "Block",
              "src": "29133:47:2",
              "statements": [
                {
                  "expression": {
                    "hexValue": "426f736f6e20536d61727420566f7563686572",
                    "id": 5837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "29151:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_e159fcbda7d26910aa4ad3595e63d436153de29c702fb8bd7431625d83ad332c",
                      "typeString": "literal_string \"Boson Smart Voucher\""
                    },
                    "value": "Boson Smart Voucher"
                  },
                  "functionReturnParameters": 5836,
                  "id": 5838,
                  "nodeType": "Return",
                  "src": "29144:28:2"
                }
              ]
            },
            "documentation": {
              "id": 5832,
              "nodeType": "StructuredDocumentation",
              "src": "28957:110:2",
              "text": " @notice A descriptive name for a collection of NFTs in this contract\n @dev ERC-721"
            },
            "functionSelector": "06fdde03",
            "id": 5840,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5833,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29086:2:2"
            },
            "returnParameters": {
              "id": 5836,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5835,
                  "mutability": "mutable",
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 5840,
                  "src": "29112:19:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5834,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "29112:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29111:21:2"
            },
            "scope": 6007,
            "src": "29073:107:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 5848,
              "nodeType": "Block",
              "src": "29353:31:2",
              "statements": [
                {
                  "expression": {
                    "hexValue": "425356",
                    "id": 5846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "29371:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_461172c92cee5274f34826f70861578ee76ece078643ef285832ecdd4c053844",
                      "typeString": "literal_string \"BSV\""
                    },
                    "value": "BSV"
                  },
                  "functionReturnParameters": 5845,
                  "id": 5847,
                  "nodeType": "Return",
                  "src": "29364:12:2"
                }
              ]
            },
            "documentation": {
              "id": 5841,
              "nodeType": "StructuredDocumentation",
              "src": "29188:95:2",
              "text": " @notice An abbreviated name for NFTs in this contract\n @dev ERC-721"
            },
            "functionSelector": "95d89b41",
            "id": 5849,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5842,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29304:2:2"
            },
            "returnParameters": {
              "id": 5845,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5844,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 5849,
                  "src": "29330:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5843,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "29330:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29329:23:2"
            },
            "scope": 6007,
            "src": "29289:95:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 5881,
              "nodeType": "Block",
              "src": "29790:215:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5865,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 5858,
                            "name": "owners721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4423,
                            "src": "29809:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                              "typeString": "mapping(uint256 => address)"
                            }
                          },
                          "id": 5860,
                          "indexExpression": {
                            "id": 5859,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5852,
                            "src": "29819:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "29809:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5863,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "29840:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5862,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "29832:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5861,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "29832:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29832:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "29809:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f4944",
                        "id": 5866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "29844:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b52f3514e43e374c92e7204127699761905777b31513f628693a3c35ef97334d",
                          "typeString": "literal_string \"INVALID_ID\""
                        },
                        "value": "INVALID_ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b52f3514e43e374c92e7204127699761905777b31513f628693a3c35ef97334d",
                          "typeString": "literal_string \"INVALID_ID\""
                        }
                      ],
                      "id": 5857,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "29801:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29801:56:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5868,
                  "nodeType": "ExpressionStatement",
                  "src": "29801:56:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 5873,
                            "name": "metadataBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4435,
                            "src": "29930:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          {
                            "id": 5874,
                            "name": "metadata721Route",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4439,
                            "src": "29944:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          {
                            "arguments": [
                              {
                                "id": 5876,
                                "name": "_tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5852,
                                "src": "29972:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 5875,
                              "name": "_uint2str",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6006,
                              "src": "29962:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (string memory)"
                              }
                            },
                            "id": 5877,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "29962:19:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            },
                            {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            },
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "expression": {
                            "id": 5871,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "29913:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 5872,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "29913:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 5878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "29913:69:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5870,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "29888:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                        "typeString": "type(string storage pointer)"
                      },
                      "typeName": {
                        "id": 5869,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "29888:6:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 5879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29888:109:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 5856,
                  "id": 5880,
                  "nodeType": "Return",
                  "src": "29868:129:2"
                }
              ]
            },
            "documentation": {
              "id": 5850,
              "nodeType": "StructuredDocumentation",
              "src": "29392:318:2",
              "text": " @notice A distinct Uniform Resource Identifier (URI) for a given asset.\n @dev ERC-721\n Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC 3986. The URI may point to a JSON file that conforms to the \"ERC721 Metadata JSON Schema\".\n @param _tokenId  ID of the token"
            },
            "functionSelector": "c87b56dd",
            "id": 5882,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokenURI",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5852,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5882,
                  "src": "29734:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5851,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29734:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29733:18:2"
            },
            "returnParameters": {
              "id": 5856,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5855,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5882,
                  "src": "29775:13:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5854,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "29775:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29774:15:2"
            },
            "scope": 6007,
            "src": "29716:289:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 5903,
              "nodeType": "Block",
              "src": "30402:135:2",
              "statements": [
                {
                  "expression": {
                    "id": 5895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 5893,
                      "name": "voucherKernelAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4407,
                      "src": "30413:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5894,
                      "name": "_voucherKernelAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5885,
                      "src": "30436:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "30413:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5896,
                  "nodeType": "ExpressionStatement",
                  "src": "30413:44:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 5898,
                        "name": "_voucherKernelAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5885,
                        "src": "30495:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 5899,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "30518:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5900,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "30518:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5897,
                      "name": "LogVoucherKernelSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4445,
                      "src": "30475:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 5901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30475:54:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5902,
                  "nodeType": "EmitStatement",
                  "src": "30470:59:2"
                }
              ]
            },
            "documentation": {
              "id": 5883,
              "nodeType": "StructuredDocumentation",
              "src": "30087:156:2",
              "text": " @notice Set the address of the VoucherKernel contract\n @param _voucherKernelAddress   The address of the Voucher Kernel contract"
            },
            "functionSelector": "d95be43a",
            "id": 5904,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5888,
                "modifierName": {
                  "id": 5887,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4463,
                  "src": "30340:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "30340:9:2"
              },
              {
                "arguments": [
                  {
                    "id": 5890,
                    "name": "_voucherKernelAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5885,
                    "src": "30374:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 5891,
                "modifierName": {
                  "id": 5889,
                  "name": "notZeroAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4501,
                  "src": "30359:14:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "30359:37:2"
              }
            ],
            "name": "setVoucherKernelAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5885,
                  "mutability": "mutable",
                  "name": "_voucherKernelAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 5904,
                  "src": "30282:29:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5884,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "30282:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30281:31:2"
            },
            "returnParameters": {
              "id": 5892,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30402:0:2"
            },
            "scope": 6007,
            "src": "30249:288:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 5925,
              "nodeType": "Block",
              "src": "30835:125:2",
              "statements": [
                {
                  "expression": {
                    "id": 5917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 5915,
                      "name": "bosonRouterAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4409,
                      "src": "30846:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5916,
                      "name": "_bosonRouterAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5907,
                      "src": "30867:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "30846:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5918,
                  "nodeType": "ExpressionStatement",
                  "src": "30846:40:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 5920,
                        "name": "_bosonRouterAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5907,
                        "src": "30920:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 5921,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "30941:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5922,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "30941:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5919,
                      "name": "LogBosonRouterSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4451,
                      "src": "30902:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 5923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30902:50:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5924,
                  "nodeType": "EmitStatement",
                  "src": "30897:55:2"
                }
              ]
            },
            "documentation": {
              "id": 5905,
              "nodeType": "StructuredDocumentation",
              "src": "30545:137:2",
              "text": " @notice Set the address of the Boson Router contract\n @param _bosonRouterAddress   The Boson Router  contract"
            },
            "functionSelector": "bd17de40",
            "id": 5926,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5910,
                "modifierName": {
                  "id": 5909,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4463,
                  "src": "30775:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "30775:9:2"
              },
              {
                "arguments": [
                  {
                    "id": 5912,
                    "name": "_bosonRouterAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5907,
                    "src": "30809:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 5913,
                "modifierName": {
                  "id": 5911,
                  "name": "notZeroAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4501,
                  "src": "30794:14:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "30794:35:2"
              }
            ],
            "name": "setBosonRouterAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5908,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5907,
                  "mutability": "mutable",
                  "name": "_bosonRouterAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 5926,
                  "src": "30719:27:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5906,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "30719:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30718:29:2"
            },
            "returnParameters": {
              "id": 5914,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30835:0:2"
            },
            "scope": 6007,
            "src": "30688:272:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6005,
              "nodeType": "Block",
              "src": "31314:416:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5936,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5934,
                      "name": "_i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5929,
                      "src": "31329:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 5935,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31335:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "31329:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5940,
                  "nodeType": "IfStatement",
                  "src": "31325:50:2",
                  "trueBody": {
                    "id": 5939,
                    "nodeType": "Block",
                    "src": "31338:37:2",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 5937,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "31360:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
                            "typeString": "literal_string \"0\""
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 5933,
                        "id": 5938,
                        "nodeType": "Return",
                        "src": "31353:10:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5942
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5942,
                      "mutability": "mutable",
                      "name": "j",
                      "nodeType": "VariableDeclaration",
                      "scope": 6005,
                      "src": "31385:9:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5941,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31385:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5944,
                  "initialValue": {
                    "id": 5943,
                    "name": "_i",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5929,
                    "src": "31397:2:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31385:14:2"
                },
                {
                  "assignments": [
                    5946
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5946,
                      "mutability": "mutable",
                      "name": "len",
                      "nodeType": "VariableDeclaration",
                      "scope": 6005,
                      "src": "31410:11:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5945,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31410:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5947,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31410:11:2"
                },
                {
                  "body": {
                    "id": 5958,
                    "nodeType": "Block",
                    "src": "31447:54:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 5952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "31462:5:2",
                          "subExpression": {
                            "id": 5951,
                            "name": "len",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5946,
                            "src": "31462:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5953,
                        "nodeType": "ExpressionStatement",
                        "src": "31462:5:2"
                      },
                      {
                        "expression": {
                          "id": 5956,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5954,
                            "name": "j",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5942,
                            "src": "31482:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "/=",
                          "rightHandSide": {
                            "hexValue": "3130",
                            "id": 5955,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "31487:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_10_by_1",
                              "typeString": "int_const 10"
                            },
                            "value": "10"
                          },
                          "src": "31482:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5957,
                        "nodeType": "ExpressionStatement",
                        "src": "31482:7:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5948,
                      "name": "j",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5942,
                      "src": "31439:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 5949,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31444:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "31439:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5959,
                  "nodeType": "WhileStatement",
                  "src": "31432:69:2"
                },
                {
                  "assignments": [
                    5961
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5961,
                      "mutability": "mutable",
                      "name": "bstr",
                      "nodeType": "VariableDeclaration",
                      "scope": 6005,
                      "src": "31511:17:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5960,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "31511:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5966,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 5964,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5946,
                        "src": "31541:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5963,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "31531:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 5962,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "31535:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 5965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31531:14:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31511:34:2"
                },
                {
                  "assignments": [
                    5968
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5968,
                      "mutability": "mutable",
                      "name": "k",
                      "nodeType": "VariableDeclaration",
                      "scope": 6005,
                      "src": "31556:9:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5967,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31556:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5972,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5969,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5946,
                      "src": "31568:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 5970,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31574:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "31568:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31556:19:2"
                },
                {
                  "body": {
                    "id": 5998,
                    "nodeType": "Block",
                    "src": "31602:91:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 5992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5976,
                              "name": "bstr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5961,
                              "src": "31617:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 5979,
                            "indexExpression": {
                              "id": 5978,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "--",
                              "prefix": false,
                              "src": "31622:3:2",
                              "subExpression": {
                                "id": 5977,
                                "name": "k",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5968,
                                "src": "31622:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "31617:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5989,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "3438",
                                      "id": 5984,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "31642:2:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_48_by_1",
                                        "typeString": "int_const 48"
                                      },
                                      "value": "48"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 5987,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 5985,
                                            "name": "_i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5929,
                                            "src": "31648:2:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "%",
                                          "rightExpression": {
                                            "hexValue": "3130",
                                            "id": 5986,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "31653:2:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_10_by_1",
                                              "typeString": "int_const 10"
                                            },
                                            "value": "10"
                                          },
                                          "src": "31648:7:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 5988,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "31647:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "31642:14:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 5983,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "31636:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint8_$",
                                    "typeString": "type(uint8)"
                                  },
                                  "typeName": {
                                    "id": 5982,
                                    "name": "uint8",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "31636:5:2",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5990,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "31636:21:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 5981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "31629:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes1_$",
                                "typeString": "type(bytes1)"
                              },
                              "typeName": {
                                "id": 5980,
                                "name": "bytes1",
                                "nodeType": "ElementaryTypeName",
                                "src": "31629:6:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5991,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31629:29:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "src": "31617:41:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 5993,
                        "nodeType": "ExpressionStatement",
                        "src": "31617:41:2"
                      },
                      {
                        "expression": {
                          "id": 5996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5994,
                            "name": "_i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5929,
                            "src": "31673:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "/=",
                          "rightHandSide": {
                            "hexValue": "3130",
                            "id": 5995,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "31679:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_10_by_1",
                              "typeString": "int_const 10"
                            },
                            "value": "10"
                          },
                          "src": "31673:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5997,
                        "nodeType": "ExpressionStatement",
                        "src": "31673:8:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5973,
                      "name": "_i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5929,
                      "src": "31593:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 5974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31599:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "31593:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5999,
                  "nodeType": "WhileStatement",
                  "src": "31586:107:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6002,
                        "name": "bstr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5961,
                        "src": "31717:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 6001,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "31710:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                        "typeString": "type(string storage pointer)"
                      },
                      "typeName": {
                        "id": 6000,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "31710:6:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 6003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31710:12:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 5933,
                  "id": 6004,
                  "nodeType": "Return",
                  "src": "31703:19:2"
                }
              ]
            },
            "documentation": {
              "id": 5927,
              "nodeType": "StructuredDocumentation",
              "src": "30968:225:2",
              "text": " @notice Convert UINT to string\n  Thank you, Oraclize (aka Provable)!\n      https://github.com/provable-things/ethereum-api/blob/master/provableAPI_0.5.sol\n @param _i    uint parameter"
            },
            "id": 6006,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_uint2str",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5930,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5929,
                  "mutability": "mutable",
                  "name": "_i",
                  "nodeType": "VariableDeclaration",
                  "scope": 6006,
                  "src": "31218:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5928,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31218:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "31217:12:2"
            },
            "returnParameters": {
              "id": 5933,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5932,
                  "mutability": "mutable",
                  "name": "_uintAsString",
                  "nodeType": "VariableDeclaration",
                  "scope": 6006,
                  "src": "31280:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5931,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "31280:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "31279:29:2"
            },
            "scope": 6007,
            "src": "31199:531:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 6008,
        "src": "683:31050:2"
      }
    ],
    "src": "49:31686:2"
  },
  "legacyAST": {
    "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/ERC1155ERC721.sol",
    "exportedSymbols": {
      "ERC1155ERC721": [
        6007
      ]
    },
    "id": 6008,
    "license": "LGPL-3.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4381,
        "literals": [
          "solidity",
          "0.7",
          ".1"
        ],
        "nodeType": "PragmaDirective",
        "src": "49:22:2"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 4382,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 10850,
        "src": "75:51:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
        "file": "@openzeppelin/contracts/utils/Address.sol",
        "id": 4383,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 11437,
        "src": "128:51:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155.sol",
        "file": "./interfaces/IERC1155.sol",
        "id": 4384,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 8932,
        "src": "183:35:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155TokenReceiver.sol",
        "file": "./interfaces/IERC1155TokenReceiver.sol",
        "id": 4385,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 9014,
        "src": "220:48:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC721.sol",
        "file": "./interfaces/IERC721.sol",
        "id": 4386,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 9251,
        "src": "270:34:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC721TokenReceiver.sol",
        "file": "./interfaces/IERC721TokenReceiver.sol",
        "id": 4387,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 9269,
        "src": "306:47:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155ERC721.sol",
        "file": "./interfaces/IERC1155ERC721.sol",
        "id": 4388,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 8976,
        "src": "355:41:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IBosonRouter.sol",
        "file": "./interfaces/IBosonRouter.sol",
        "id": 4389,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 8748,
        "src": "398:39:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IVoucherKernel.sol",
        "file": "./interfaces/IVoucherKernel.sol",
        "id": 4390,
        "nodeType": "ImportDirective",
        "scope": 6008,
        "sourceUnit": 9589,
        "src": "439:41:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 4392,
              "name": "IERC1155",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8931,
              "src": "709:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC1155_$8931",
                "typeString": "contract IERC1155"
              }
            },
            "id": 4393,
            "nodeType": "InheritanceSpecifier",
            "src": "709:8:2"
          },
          {
            "baseName": {
              "id": 4394,
              "name": "IERC721",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9250,
              "src": "719:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC721_$9250",
                "typeString": "contract IERC721"
              }
            },
            "id": 4395,
            "nodeType": "InheritanceSpecifier",
            "src": "719:7:2"
          },
          {
            "baseName": {
              "id": 4396,
              "name": "IERC1155ERC721",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8975,
              "src": "728:14:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC1155ERC721_$8975",
                "typeString": "contract IERC1155ERC721"
              }
            },
            "id": 4397,
            "nodeType": "InheritanceSpecifier",
            "src": "728:14:2"
          }
        ],
        "contractDependencies": [
          8931,
          8975,
          9025,
          9250
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 4391,
          "nodeType": "StructuredDocumentation",
          "src": "531:150:2",
          "text": " @title Multi-token contract, implementing ERC-1155 and ERC-721 hybrid\n  Inspired by: https://github.com/pixowl/sandbox-smart-contracts"
        },
        "fullyImplemented": true,
        "id": 6007,
        "linearizedBaseContracts": [
          6007,
          8975,
          9250,
          9025,
          8931
        ],
        "name": "ERC1155ERC721",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 4400,
            "libraryName": {
              "id": 4398,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10849,
              "src": "756:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$10849",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "750:27:2",
            "typeName": {
              "id": 4399,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "769:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 4403,
            "libraryName": {
              "id": 4401,
              "name": "Address",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11436,
              "src": "789:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Address_$11436",
                "typeString": "library Address"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "783:26:2",
            "typeName": {
              "id": 4402,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "801:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "constant": false,
            "functionSelector": "8da5cb5b",
            "id": 4405,
            "mutability": "mutable",
            "name": "owner",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "837:20:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 4404,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "837:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "35649a83",
            "id": 4407,
            "mutability": "mutable",
            "name": "voucherKernelAddress",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "881:35:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 4406,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "881:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8cfb578e",
            "id": 4409,
            "mutability": "mutable",
            "name": "bosonRouterAddress",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "963:33:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 4408,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "963:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4415,
            "mutability": "mutable",
            "name": "balances",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1080:64:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(uint256 => mapping(address => uint256))"
            },
            "typeName": {
              "id": 4414,
              "keyType": {
                "id": 4410,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1088:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1080:47:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(uint256 => mapping(address => uint256))"
              },
              "valueType": {
                "id": 4413,
                "keyType": {
                  "id": 4411,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1107:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1099:27:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 4412,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1118:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4419,
            "mutability": "mutable",
            "name": "balance721",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1205:46:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 4418,
              "keyType": {
                "id": 4416,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1213:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1205:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 4417,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1224:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4423,
            "mutability": "mutable",
            "name": "owners721",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1258:45:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
              "typeString": "mapping(uint256 => address)"
            },
            "typeName": {
              "id": 4422,
              "keyType": {
                "id": 4420,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1266:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1258:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                "typeString": "mapping(uint256 => address)"
              },
              "valueType": {
                "id": 4421,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1277:7:2",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4427,
            "mutability": "mutable",
            "name": "operator721",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1310:47:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
              "typeString": "mapping(uint256 => address)"
            },
            "typeName": {
              "id": 4426,
              "keyType": {
                "id": 4424,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1318:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1310:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                "typeString": "mapping(uint256 => address)"
              },
              "valueType": {
                "id": 4425,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1329:7:2",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4433,
            "mutability": "mutable",
            "name": "operatorApprovals",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1408:70:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
              "typeString": "mapping(address => mapping(address => bool))"
            },
            "typeName": {
              "id": 4432,
              "keyType": {
                "id": 4428,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1416:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1408:44:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                "typeString": "mapping(address => mapping(address => bool))"
              },
              "valueType": {
                "id": 4431,
                "keyType": {
                  "id": 4429,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1435:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1427:24:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "valueType": {
                  "id": 4430,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1446:4:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4435,
            "mutability": "mutable",
            "name": "metadataBase",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1620:28:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 4434,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1620:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 4437,
            "mutability": "mutable",
            "name": "metadata1155Route",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1655:33:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 4436,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1655:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 4439,
            "mutability": "mutable",
            "name": "metadata721Route",
            "nodeType": "VariableDeclaration",
            "scope": 6007,
            "src": "1695:32:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 4438,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1695:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "id": 4445,
            "name": "LogVoucherKernelSet",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4444,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4441,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newVoucherKernel",
                  "nodeType": "VariableDeclaration",
                  "scope": 4445,
                  "src": "1990:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4440,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1990:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4443,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 4445,
                  "src": "2017:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4442,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2017:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1989:49:2"
            },
            "src": "1964:75:2"
          },
          {
            "anonymous": false,
            "id": 4451,
            "name": "LogBosonRouterSet",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4447,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newBosonRouter",
                  "nodeType": "VariableDeclaration",
                  "scope": 4451,
                  "src": "2071:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4446,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2071:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4449,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 4451,
                  "src": "2096:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4448,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2096:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2070:47:2"
            },
            "src": "2047:71:2"
          },
          {
            "body": {
              "id": 4462,
              "nodeType": "Block",
              "src": "2147:161:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4457,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 4454,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "2166:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "2166:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 4456,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4405,
                          "src": "2180:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2166:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f4f",
                        "id": 4458,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2187:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_66c322bb1fe23e7af9b87a20d4642a6419daf2ab57768ee94f75c472f3ebabb5",
                          "typeString": "literal_string \"UNAUTHORIZED_O\""
                        },
                        "value": "UNAUTHORIZED_O"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_66c322bb1fe23e7af9b87a20d4642a6419daf2ab57768ee94f75c472f3ebabb5",
                          "typeString": "literal_string \"UNAUTHORIZED_O\""
                        }
                      ],
                      "id": 4453,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2158:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2158:46:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4460,
                  "nodeType": "ExpressionStatement",
                  "src": "2158:46:2"
                },
                {
                  "id": 4461,
                  "nodeType": "PlaceholderStatement",
                  "src": "2299:1:2"
                }
              ]
            },
            "id": 4463,
            "name": "onlyOwner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4452,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2144:2:2"
            },
            "src": "2126:182:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4484,
              "nodeType": "Block",
              "src": "2349:387:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4471,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 4466,
                          "name": "voucherKernelAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4407,
                          "src": "2382:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 4469,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2414:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 4468,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2406:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4467,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2406:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4470,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2406:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2382:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f564f55434845524b45524e454c",
                        "id": 4472,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2431:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f35e7845fb5a39bd1c4191f758dba933d1bfe9e3c864842e431e6d5dc4068475",
                          "typeString": "literal_string \"UNSPECIFIED_VOUCHERKERNEL\""
                        },
                        "value": "UNSPECIFIED_VOUCHERKERNEL"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f35e7845fb5a39bd1c4191f758dba933d1bfe9e3c864842e431e6d5dc4068475",
                          "typeString": "literal_string \"UNSPECIFIED_VOUCHERKERNEL\""
                        }
                      ],
                      "id": 4465,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2360:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2360:109:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4474,
                  "nodeType": "ExpressionStatement",
                  "src": "2360:109:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4479,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 4476,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "2578:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4477,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "2578:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 4478,
                          "name": "voucherKernelAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4407,
                          "src": "2592:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2578:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f564b",
                        "id": 4480,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2614:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a2f0c2140d117207ed920dcb303a59a4da759cc226fe941427b02f3b235dfa27",
                          "typeString": "literal_string \"UNAUTHORIZED_VK\""
                        },
                        "value": "UNAUTHORIZED_VK"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a2f0c2140d117207ed920dcb303a59a4da759cc226fe941427b02f3b235dfa27",
                          "typeString": "literal_string \"UNAUTHORIZED_VK\""
                        }
                      ],
                      "id": 4475,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2570:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2570:62:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4482,
                  "nodeType": "ExpressionStatement",
                  "src": "2570:62:2"
                },
                {
                  "id": 4483,
                  "nodeType": "PlaceholderStatement",
                  "src": "2727:1:2"
                }
              ]
            },
            "id": 4485,
            "name": "onlyFromVoucherKernel",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4464,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2346:2:2"
            },
            "src": "2316:420:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4500,
              "nodeType": "Block",
              "src": "2786:78:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 4490,
                          "name": "_address",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4487,
                          "src": "2805:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 4493,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2825:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 4492,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2817:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4491,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2817:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4494,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2817:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2805:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5a45524f5f41444452455353",
                        "id": 4496,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2829:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_71869b3729b99fadce3ee30cb1aa2a0d639e6a2d24158c1ae1ae0059e81b72af",
                          "typeString": "literal_string \"ZERO_ADDRESS\""
                        },
                        "value": "ZERO_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_71869b3729b99fadce3ee30cb1aa2a0d639e6a2d24158c1ae1ae0059e81b72af",
                          "typeString": "literal_string \"ZERO_ADDRESS\""
                        }
                      ],
                      "id": 4489,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2797:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2797:47:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4498,
                  "nodeType": "ExpressionStatement",
                  "src": "2797:47:2"
                },
                {
                  "id": 4499,
                  "nodeType": "PlaceholderStatement",
                  "src": "2855:1:2"
                }
              ]
            },
            "id": 4501,
            "name": "notZeroAddress",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4488,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4487,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "scope": 4501,
                  "src": "2768:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4486,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2768:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2767:18:2"
            },
            "src": "2744:120:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4509,
              "nodeType": "Block",
              "src": "2886:37:2",
              "statements": [
                {
                  "expression": {
                    "id": 4507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4504,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4405,
                      "src": "2897:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 4505,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "2905:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4506,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "2905:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2897:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4508,
                  "nodeType": "ExpressionStatement",
                  "src": "2897:18:2"
                }
              ]
            },
            "id": 4510,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4502,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2883:2:2"
            },
            "returnParameters": {
              "id": 4503,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2886:0:2"
            },
            "scope": 6007,
            "src": "2872:51:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              8873
            ],
            "body": {
              "id": 4620,
              "nodeType": "Block",
              "src": "3551:1287:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4531,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 4526,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4515,
                          "src": "3570:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 4529,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3585:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 4528,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3577:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4527,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3577:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4530,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3577:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3570:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 4532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3589:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 4525,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3562:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3562:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4534,
                  "nodeType": "ExpressionStatement",
                  "src": "3562:49:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4548,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4536,
                            "name": "_from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4513,
                            "src": "3734:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 4537,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "3743:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4538,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "3743:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "3734:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 4540,
                                "name": "operatorApprovals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4433,
                                "src": "3757:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                  "typeString": "mapping(address => mapping(address => bool))"
                                }
                              },
                              "id": 4542,
                              "indexExpression": {
                                "id": 4541,
                                "name": "_from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4513,
                                "src": "3775:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3757:24:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 4545,
                            "indexExpression": {
                              "expression": {
                                "id": 4543,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3782:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4544,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3782:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3757:36:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "74727565",
                            "id": 4546,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3797:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "3757:44:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3734:67:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f5354",
                        "id": 4549,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3816:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ca5f8e7eb56d1b2f73830c4befc9c07536bf1cee80cce74bda91161d1c20d898",
                          "typeString": "literal_string \"UNAUTHORIZED_ST\""
                        },
                        "value": "UNAUTHORIZED_ST"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ca5f8e7eb56d1b2f73830c4befc9c07536bf1cee80cce74bda91161d1c20d898",
                          "typeString": "literal_string \"UNAUTHORIZED_ST\""
                        }
                      ],
                      "id": 4535,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3712:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4550,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3712:132:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4551,
                  "nodeType": "ExpressionStatement",
                  "src": "3712:132:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4556,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4513,
                        "src": "4010:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4557,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4517,
                        "src": "4030:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 4558,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4519,
                        "src": "4053:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 4553,
                            "name": "bosonRouterAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4409,
                            "src": "3953:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4552,
                          "name": "IBosonRouter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8747,
                          "src": "3940:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBosonRouter_$8747_$",
                            "typeString": "type(contract IBosonRouter)"
                          }
                        },
                        "id": 4554,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3940:32:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBosonRouter_$8747",
                          "typeString": "contract IBosonRouter"
                        }
                      },
                      "id": 4555,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_beforeERC1155Transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8728,
                      "src": "3940:55:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256) view external"
                      }
                    },
                    "id": 4559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3940:130:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4560,
                  "nodeType": "ExpressionStatement",
                  "src": "3940:130:2"
                },
                {
                  "expression": {
                    "id": 4574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 4561,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4415,
                          "src": "4178:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(uint256 => mapping(address => uint256))"
                          }
                        },
                        "id": 4564,
                        "indexExpression": {
                          "id": 4562,
                          "name": "_tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4517,
                          "src": "4187:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4178:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4565,
                      "indexExpression": {
                        "id": 4563,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4513,
                        "src": "4197:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4178:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 4572,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4519,
                          "src": "4236:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 4566,
                              "name": "balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4415,
                              "src": "4206:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(address => uint256))"
                              }
                            },
                            "id": 4568,
                            "indexExpression": {
                              "id": 4567,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4517,
                              "src": "4215:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4206:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 4570,
                          "indexExpression": {
                            "id": 4569,
                            "name": "_from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4513,
                            "src": "4225:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4206:25:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10698,
                        "src": "4206:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 4573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4206:37:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4178:65:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4575,
                  "nodeType": "ExpressionStatement",
                  "src": "4178:65:2"
                },
                {
                  "expression": {
                    "id": 4589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 4576,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4415,
                          "src": "4254:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(uint256 => mapping(address => uint256))"
                          }
                        },
                        "id": 4579,
                        "indexExpression": {
                          "id": 4577,
                          "name": "_tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4517,
                          "src": "4263:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4254:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4580,
                      "indexExpression": {
                        "id": 4578,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4515,
                        "src": "4273:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4254:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 4583,
                              "name": "balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4415,
                              "src": "4291:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(address => uint256))"
                              }
                            },
                            "id": 4585,
                            "indexExpression": {
                              "id": 4584,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4517,
                              "src": "4300:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4291:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 4587,
                          "indexExpression": {
                            "id": 4586,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4515,
                            "src": "4310:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4291:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 4581,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4519,
                          "src": "4280:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4582,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10676,
                        "src": "4280:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 4588,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4280:35:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4254:61:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4590,
                  "nodeType": "ExpressionStatement",
                  "src": "4254:61:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4595,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4513,
                        "src": "4394:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4596,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4515,
                        "src": "4414:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4597,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4517,
                        "src": "4432:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 4598,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4519,
                        "src": "4455:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 4592,
                            "name": "bosonRouterAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4409,
                            "src": "4341:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4591,
                          "name": "IBosonRouter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8747,
                          "src": "4328:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBosonRouter_$8747_$",
                            "typeString": "type(contract IBosonRouter)"
                          }
                        },
                        "id": 4593,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4328:32:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBosonRouter_$8747",
                          "typeString": "contract IBosonRouter"
                        }
                      },
                      "id": 4594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_onERC1155Transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8740,
                      "src": "4328:51:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256) external"
                      }
                    },
                    "id": 4599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4328:144:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4600,
                  "nodeType": "ExpressionStatement",
                  "src": "4328:144:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4602,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "4505:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4505:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 4604,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4513,
                        "src": "4517:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4605,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4515,
                        "src": "4524:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4606,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4517,
                        "src": "4529:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 4607,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4519,
                        "src": "4539:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4601,
                      "name": "TransferSingle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8837,
                      "src": "4490:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256)"
                      }
                    },
                    "id": 4608,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4490:56:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4609,
                  "nodeType": "EmitStatement",
                  "src": "4485:61:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4611,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "4707:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4612,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4707:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 4613,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4513,
                        "src": "4732:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4614,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4515,
                        "src": "4752:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4615,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4517,
                        "src": "4770:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 4616,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4519,
                        "src": "4793:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 4617,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4521,
                        "src": "4814:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 4610,
                      "name": "_doSafeTransferAcceptanceCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5064,
                      "src": "4662:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256,bytes memory)"
                      }
                    },
                    "id": 4618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4662:168:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4619,
                  "nodeType": "ExpressionStatement",
                  "src": "4662:168:2"
                }
              ]
            },
            "documentation": {
              "id": 4511,
              "nodeType": "StructuredDocumentation",
              "src": "2931:434:2",
              "text": " @notice Transfers amount of _tokenId from-to addresses with safety call.\n If _to is a smart contract, will call onERC1155Received\n @dev ERC-1155\n @param _from    Source address\n @param _to      Destination address\n @param _tokenId ID of the token\n @param _value   Transfer amount\n @param _data    Additional data forwarded to onERC1155Received if _to is a contract"
            },
            "functionSelector": "f242432a",
            "id": 4621,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 4523,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3542:8:2"
            },
            "parameters": {
              "id": 4522,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4513,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "3407:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4512,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3407:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4515,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "3431:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4514,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3431:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4517,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "3453:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4516,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3453:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4519,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "3480:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4518,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3480:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4521,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "3505:20:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4520,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3505:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3396:136:2"
            },
            "returnParameters": {
              "id": 4524,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3551:0:2"
            },
            "scope": 6007,
            "src": "3371:1467:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9205
            ],
            "body": {
              "id": 4639,
              "nodeType": "Block",
              "src": "5633:61:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4633,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4624,
                        "src": "5661:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4634,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4626,
                        "src": "5668:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4635,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4628,
                        "src": "5673:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 4636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5683:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 4632,
                      "name": "safeTransferFrom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4640,
                        4684
                      ],
                      "referencedDeclaration": 4684,
                      "src": "5644:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory)"
                      }
                    },
                    "id": 4637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5644:42:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4638,
                  "nodeType": "ExpressionStatement",
                  "src": "5644:42:2"
                }
              ]
            },
            "documentation": {
              "id": 4622,
              "nodeType": "StructuredDocumentation",
              "src": "4846:659:2",
              "text": " @notice Safely transfers the ownership of a given token ID to another address\n If the target address is a contract, it must implement `onERC721Received`,\n which is called upon a safe transfer, and return the magic value\n `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`; otherwise,\n the transfer is reverted.\n Requires the msg.sender to be the owner, approved, or operator\n @dev ERC-721\n @param _from current owner of the token\n @param _to address to receive the ownership of the given token ID\n @param _tokenId uint256 ID of the token to be transferred"
            },
            "functionSelector": "42842e0e",
            "id": 4640,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 4630,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5624:8:2"
            },
            "parameters": {
              "id": 4629,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4624,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4640,
                  "src": "5547:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4623,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5547:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4626,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4640,
                  "src": "5571:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4625,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5571:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4628,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4640,
                  "src": "5593:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4627,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5593:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5536:80:2"
            },
            "returnParameters": {
              "id": 4631,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5633:0:2"
            },
            "scope": 6007,
            "src": "5511:183:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9195
            ],
            "body": {
              "id": 4683,
              "nodeType": "Block",
              "src": "6392:514:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4654,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4643,
                        "src": "6416:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4655,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4645,
                        "src": "6423:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4656,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4647,
                        "src": "6428:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4653,
                      "name": "transferFrom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4719
                      ],
                      "referencedDeclaration": 4719,
                      "src": "6403:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 4657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6403:34:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4658,
                  "nodeType": "ExpressionStatement",
                  "src": "6403:34:2"
                },
                {
                  "condition": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 4659,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4645,
                        "src": "6454:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 4660,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isContract",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11160,
                      "src": "6454:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 4661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6454:16:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4682,
                  "nodeType": "IfStatement",
                  "src": "6450:449:2",
                  "trueBody": {
                    "id": 4681,
                    "nodeType": "Block",
                    "src": "6472:427:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 4677,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 4667,
                                    "name": "_from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4643,
                                    "src": "6577:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 4668,
                                    "name": "_to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4645,
                                    "src": "6605:3:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 4669,
                                    "name": "_tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4647,
                                    "src": "6631:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 4670,
                                    "name": "_data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4649,
                                    "src": "6662:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 4664,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4645,
                                        "src": "6533:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 4663,
                                      "name": "ERC721TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9268,
                                      "src": "6513:19:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$9268_$",
                                        "typeString": "type(contract ERC721TokenReceiver)"
                                      }
                                    },
                                    "id": 4665,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6513:24:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC721TokenReceiver_$9268",
                                      "typeString": "contract ERC721TokenReceiver"
                                    }
                                  },
                                  "id": 4666,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC721Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9267,
                                  "src": "6513:41:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 4671,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6513:173:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 4673,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4645,
                                        "src": "6710:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 4672,
                                      "name": "ERC721TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9268,
                                      "src": "6690:19:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$9268_$",
                                        "typeString": "type(contract ERC721TokenReceiver)"
                                      }
                                    },
                                    "id": 4674,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6690:24:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC721TokenReceiver_$9268",
                                      "typeString": "contract ERC721TokenReceiver"
                                    }
                                  },
                                  "id": 4675,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC721Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9267,
                                  "src": "6690:41:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 4676,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "selector",
                                "nodeType": "MemberAccess",
                                "src": "6690:50:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "6513:227:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "554e535550504f525445445f4552433732315f5245434549564544",
                              "id": 4678,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6759:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_93f4b73c3d86bd67195020f99055e3655658f7a9ebf8672f2b1df47f80c21821",
                                "typeString": "literal_string \"UNSUPPORTED_ERC721_RECEIVED\""
                              },
                              "value": "UNSUPPORTED_ERC721_RECEIVED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_93f4b73c3d86bd67195020f99055e3655658f7a9ebf8672f2b1df47f80c21821",
                                "typeString": "literal_string \"UNSUPPORTED_ERC721_RECEIVED\""
                              }
                            ],
                            "id": 4662,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6487:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4679,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6487:316:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4680,
                        "nodeType": "ExpressionStatement",
                        "src": "6487:316:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 4641,
              "nodeType": "StructuredDocumentation",
              "src": "5702:533:2",
              "text": " @notice Safely transfers the ownership of a given token ID to another address\n If the target address is a contract, it must implement `onERC721Received`\n Requires the msg.sender to be the owner, approved, or operator\n @dev ERC-721\n @param _from current owner of the token\n @param _to address to receive the ownership of the given token ID\n @param _tokenId uint256 ID of the token to be transferred\n @param _data bytes data to send along with a safe transfer check"
            },
            "functionSelector": "b88d4fde",
            "id": 4684,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 4651,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6383:8:2"
            },
            "parameters": {
              "id": 4650,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4643,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4684,
                  "src": "6277:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4642,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6277:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4645,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4684,
                  "src": "6301:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4644,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6301:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4647,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4684,
                  "src": "6323:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4646,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6323:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4649,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 4684,
                  "src": "6350:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4648,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6350:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6266:109:2"
            },
            "returnParameters": {
              "id": 4652,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6392:0:2"
            },
            "scope": 6007,
            "src": "6241:665:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9215
            ],
            "body": {
              "id": 4718,
              "nodeType": "Block",
              "src": "7498:310:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4708,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4701,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 4696,
                              "name": "operator721",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4427,
                              "src": "7531:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 4698,
                            "indexExpression": {
                              "id": 4697,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4691,
                              "src": "7543:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7531:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 4699,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "7556:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4700,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "7556:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "7531:35:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4707,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 4703,
                                "name": "_tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4691,
                                "src": "7595:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4702,
                              "name": "ownerOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                5178
                              ],
                              "referencedDeclaration": 5178,
                              "src": "7587:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                                "typeString": "function (uint256) view returns (address)"
                              }
                            },
                            "id": 4704,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7587:17:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 4705,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "7608:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4706,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "7608:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "7587:31:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7531:87:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4e4f545f4f574e45525f4e4f525f415050524f564544",
                        "id": 4709,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7633:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6c1ef0880797d80cfb5d03f0706d17419220d72dedb8d29675f3cf2fe13f3aba",
                          "typeString": "literal_string \"NOT_OWNER_NOR_APPROVED\""
                        },
                        "value": "NOT_OWNER_NOR_APPROVED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6c1ef0880797d80cfb5d03f0706d17419220d72dedb8d29675f3cf2fe13f3aba",
                          "typeString": "literal_string \"NOT_OWNER_NOR_APPROVED\""
                        }
                      ],
                      "id": 4695,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7509:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4710,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7509:159:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4711,
                  "nodeType": "ExpressionStatement",
                  "src": "7509:159:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4713,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4687,
                        "src": "7779:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4714,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4689,
                        "src": "7786:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4715,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4691,
                        "src": "7791:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4712,
                      "name": "_transferFrom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4799,
                      "src": "7765:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 4716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7765:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4717,
                  "nodeType": "ExpressionStatement",
                  "src": "7765:35:2"
                }
              ]
            },
            "documentation": {
              "id": 4685,
              "nodeType": "StructuredDocumentation",
              "src": "6914:460:2",
              "text": " @notice Transfers the ownership of a given token ID to another address.\n Usage of this method is discouraged, use `safeTransferFrom` whenever possible.\n Requires the msg.sender to be the owner, approved, or operator.\n @dev ERC-721\n @param _from current owner of the token\n @param _to address to receive the ownership of the given token ID\n @param _tokenId uint256 ID of the token to be transferred"
            },
            "functionSelector": "23b872dd",
            "id": 4719,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 4693,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7489:8:2"
            },
            "parameters": {
              "id": 4692,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4687,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4719,
                  "src": "7412:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4686,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7412:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4689,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4719,
                  "src": "7436:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4688,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7436:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4691,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4719,
                  "src": "7458:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4690,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7458:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7401:80:2"
            },
            "returnParameters": {
              "id": 4694,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7498:0:2"
            },
            "scope": 6007,
            "src": "7380:428:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4798,
              "nodeType": "Block",
              "src": "8331:742:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4734,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 4731,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4726,
                              "src": "8358:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4730,
                            "name": "ownerOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5178
                            ],
                            "referencedDeclaration": 5178,
                            "src": "8350:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 4732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8350:17:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 4733,
                          "name": "_from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4722,
                          "src": "8371:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "8350:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f54",
                        "id": 4735,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8378:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a346341f54e0d0a651e2d90fa5e8663272f9e42fbfd9680c5e5644c341fa6ca4",
                          "typeString": "literal_string \"UNAUTHORIZED_T\""
                        },
                        "value": "UNAUTHORIZED_T"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a346341f54e0d0a651e2d90fa5e8663272f9e42fbfd9680c5e5644c341fa6ca4",
                          "typeString": "literal_string \"UNAUTHORIZED_T\""
                        }
                      ],
                      "id": 4729,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8342:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8342:53:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4737,
                  "nodeType": "ExpressionStatement",
                  "src": "8342:53:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4744,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 4739,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4724,
                          "src": "8498:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 4742,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8513:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 4741,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8505:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4740,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "8505:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4743,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8505:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "8498:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 4745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8517:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 4738,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8490:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4746,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8490:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4747,
                  "nodeType": "ExpressionStatement",
                  "src": "8490:49:2"
                },
                {
                  "expression": {
                    "id": 4755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4748,
                        "name": "operator721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4427,
                        "src": "8642:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                          "typeString": "mapping(uint256 => address)"
                        }
                      },
                      "id": 4750,
                      "indexExpression": {
                        "id": 4749,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4726,
                        "src": "8654:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8642:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 4753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8674:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 4752,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8666:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 4751,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8666:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 4754,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8666:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "8642:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4756,
                  "nodeType": "ExpressionStatement",
                  "src": "8642:34:2"
                },
                {
                  "expression": {
                    "id": 4760,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "--",
                    "prefix": false,
                    "src": "8689:19:2",
                    "subExpression": {
                      "baseExpression": {
                        "id": 4757,
                        "name": "balance721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4419,
                        "src": "8689:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4759,
                      "indexExpression": {
                        "id": 4758,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4722,
                        "src": "8700:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8689:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4761,
                  "nodeType": "ExpressionStatement",
                  "src": "8689:19:2"
                },
                {
                  "expression": {
                    "id": 4765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "8719:17:2",
                    "subExpression": {
                      "baseExpression": {
                        "id": 4762,
                        "name": "balance721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4419,
                        "src": "8719:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4764,
                      "indexExpression": {
                        "id": 4763,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4724,
                        "src": "8730:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8719:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4766,
                  "nodeType": "ExpressionStatement",
                  "src": "8719:17:2"
                },
                {
                  "expression": {
                    "id": 4771,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4767,
                        "name": "owners721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4423,
                        "src": "8749:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                          "typeString": "mapping(uint256 => address)"
                        }
                      },
                      "id": 4769,
                      "indexExpression": {
                        "id": 4768,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4726,
                        "src": "8759:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8749:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4770,
                      "name": "_to",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4724,
                      "src": "8771:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8749:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4772,
                  "nodeType": "ExpressionStatement",
                  "src": "8749:25:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 4778,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4726,
                            "src": "8854:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "arguments": [
                              {
                                "id": 4775,
                                "name": "voucherKernelAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4407,
                                "src": "8810:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 4774,
                              "name": "IVoucherKernel",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9588,
                              "src": "8795:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IVoucherKernel_$9588_$",
                                "typeString": "type(contract IVoucherKernel)"
                              }
                            },
                            "id": 4776,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8795:36:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IVoucherKernel_$9588",
                              "typeString": "contract IVoucherKernel"
                            }
                          },
                          "id": 4777,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isVoucherTransferable",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9587,
                          "src": "8795:58:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view external returns (bool)"
                          }
                        },
                        "id": 4779,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8795:68:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "46554e44535f52454c4541534544",
                        "id": 4780,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8865:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_934bfe8ea9e27d246dfc9d0083a676a42c03dee49dfbc9a3462184e5c60a4d6a",
                          "typeString": "literal_string \"FUNDS_RELEASED\""
                        },
                        "value": "FUNDS_RELEASED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_934bfe8ea9e27d246dfc9d0083a676a42c03dee49dfbc9a3462184e5c60a4d6a",
                          "typeString": "literal_string \"FUNDS_RELEASED\""
                        }
                      ],
                      "id": 4773,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8787:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8787:95:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4782,
                  "nodeType": "ExpressionStatement",
                  "src": "8787:95:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4787,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4722,
                        "src": "8960:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4788,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4724,
                        "src": "8980:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4789,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4726,
                        "src": "8998:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 4784,
                            "name": "bosonRouterAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4409,
                            "src": "8908:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4783,
                          "name": "IBosonRouter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8747,
                          "src": "8895:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBosonRouter_$8747_$",
                            "typeString": "type(contract IBosonRouter)"
                          }
                        },
                        "id": 4785,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8895:32:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBosonRouter_$8747",
                          "typeString": "contract IBosonRouter"
                        }
                      },
                      "id": 4786,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_onERC721Transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8718,
                      "src": "8895:50:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 4790,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8895:122:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4791,
                  "nodeType": "ExpressionStatement",
                  "src": "8895:122:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 4793,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4722,
                        "src": "9044:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4794,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4724,
                        "src": "9051:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4795,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4726,
                        "src": "9056:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4792,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9158,
                      "src": "9035:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 4796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9035:30:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4797,
                  "nodeType": "EmitStatement",
                  "src": "9030:35:2"
                }
              ]
            },
            "documentation": {
              "id": 4720,
              "nodeType": "StructuredDocumentation",
              "src": "7816:397:2",
              "text": " @notice Internal function to transfer ownership of a given token ID to another address.\n As opposed to transferFrom, this imposes no restrictions on msg.sender.\n @dev ERC-721\n @param _from current owner of the token\n @param _to address to receive the ownership of the given token ID\n @param _tokenId uint256 ID of the token to be transferred"
            },
            "id": 4799,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_transferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4727,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4722,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4799,
                  "src": "8252:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4721,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8252:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4724,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4799,
                  "src": "8276:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4723,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8276:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4726,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4799,
                  "src": "8298:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4725,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8298:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8241:80:2"
            },
            "returnParameters": {
              "id": 4728,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8331:0:2"
            },
            "scope": 6007,
            "src": "8219:854:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              9223
            ],
            "body": {
              "id": 4848,
              "nodeType": "Block",
              "src": "9594:658:2",
              "statements": [
                {
                  "assignments": [
                    4809
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4809,
                      "mutability": "mutable",
                      "name": "tokenOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 4848,
                      "src": "9605:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4808,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "9605:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4813,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 4811,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4804,
                        "src": "9634:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4810,
                      "name": "ownerOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5178
                      ],
                      "referencedDeclaration": 5178,
                      "src": "9626:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view returns (address)"
                      }
                    },
                    "id": 4812,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9626:17:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9605:38:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4817,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 4815,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4802,
                          "src": "9662:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 4816,
                          "name": "tokenOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4809,
                          "src": "9669:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "9662:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "524544554e44414e545f43414c4c",
                        "id": 4818,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9681:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d0d6a83cea74c93af9d0ecf0d695b181905be0ac705b9f5c24f75ac5424c53e2",
                          "typeString": "literal_string \"REDUNDANT_CALL\""
                        },
                        "value": "REDUNDANT_CALL"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d0d6a83cea74c93af9d0ecf0d695b181905be0ac705b9f5c24f75ac5424c53e2",
                          "typeString": "literal_string \"REDUNDANT_CALL\""
                        }
                      ],
                      "id": 4814,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9654:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4819,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9654:44:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4820,
                  "nodeType": "ExpressionStatement",
                  "src": "9654:44:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4832,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4825,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 4822,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "9831:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4823,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "9831:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4824,
                            "name": "tokenOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4809,
                            "src": "9845:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9831:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 4826,
                              "name": "operatorApprovals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4433,
                              "src": "9876:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                "typeString": "mapping(address => mapping(address => bool))"
                              }
                            },
                            "id": 4828,
                            "indexExpression": {
                              "id": 4827,
                              "name": "tokenOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4809,
                              "src": "9894:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9876:29:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 4831,
                          "indexExpression": {
                            "expression": {
                              "id": 4829,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "9906:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4830,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "9906:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9876:41:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "9831:86:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f41",
                        "id": 4833,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9972:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b109989dc87862f05ce512959ee04fbc39856c04777748c77fbf8d55b7a8c011",
                          "typeString": "literal_string \"UNAUTHORIZED_A\""
                        },
                        "value": "UNAUTHORIZED_A"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b109989dc87862f05ce512959ee04fbc39856c04777748c77fbf8d55b7a8c011",
                          "typeString": "literal_string \"UNAUTHORIZED_A\""
                        }
                      ],
                      "id": 4821,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9809:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4834,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9809:190:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4835,
                  "nodeType": "ExpressionStatement",
                  "src": "9809:190:2"
                },
                {
                  "expression": {
                    "id": 4840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4836,
                        "name": "operator721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4427,
                        "src": "10166:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                          "typeString": "mapping(uint256 => address)"
                        }
                      },
                      "id": 4838,
                      "indexExpression": {
                        "id": 4837,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4804,
                        "src": "10178:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "10166:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4839,
                      "name": "_to",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4802,
                      "src": "10190:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "10166:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4841,
                  "nodeType": "ExpressionStatement",
                  "src": "10166:27:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 4843,
                        "name": "tokenOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4809,
                        "src": "10218:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4844,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4802,
                        "src": "10230:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4845,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4804,
                        "src": "10235:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4842,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9167,
                      "src": "10209:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 4846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10209:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4847,
                  "nodeType": "EmitStatement",
                  "src": "10204:40:2"
                }
              ]
            },
            "documentation": {
              "id": 4800,
              "nodeType": "StructuredDocumentation",
              "src": "9081:443:2",
              "text": " @notice Approves another address to transfer the given token ID\n The zero address indicates there is no approved address.\n There can only be one approved address per token at a given time.\n Can only be called by the token owner or an approved operator.\n @dev ERC-721\n @param _to address to be approved for the given token ID\n @param _tokenId uint256 ID of the token to be approved"
            },
            "functionSelector": "095ea7b3",
            "id": 4849,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 4806,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9585:8:2"
            },
            "parameters": {
              "id": 4805,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4802,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4849,
                  "src": "9547:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4801,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9547:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4804,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4849,
                  "src": "9560:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4803,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9560:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9546:31:2"
            },
            "returnParameters": {
              "id": 4807,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9594:0:2"
            },
            "scope": 6007,
            "src": "9530:722:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9239
            ],
            "body": {
              "id": 4874,
              "nodeType": "Block",
              "src": "10689:187:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 4859,
                            "name": "owners721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4423,
                            "src": "10722:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                              "typeString": "mapping(uint256 => address)"
                            }
                          },
                          "id": 4861,
                          "indexExpression": {
                            "id": 4860,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4852,
                            "src": "10732:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10722:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 4864,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10753:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 4863,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10745:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4862,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "10745:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4865,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10745:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "10722:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                        "id": 4867,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10770:46:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
                          "typeString": "literal_string \"ERC721: approved query for nonexistent token\""
                        },
                        "value": "ERC721: approved query for nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
                          "typeString": "literal_string \"ERC721: approved query for nonexistent token\""
                        }
                      ],
                      "id": 4858,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10700:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10700:127:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4869,
                  "nodeType": "ExpressionStatement",
                  "src": "10700:127:2"
                },
                {
                  "expression": {
                    "baseExpression": {
                      "id": 4870,
                      "name": "operator721",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4427,
                      "src": "10847:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                        "typeString": "mapping(uint256 => address)"
                      }
                    },
                    "id": 4872,
                    "indexExpression": {
                      "id": 4871,
                      "name": "_tokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4852,
                      "src": "10859:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10847:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4857,
                  "id": 4873,
                  "nodeType": "Return",
                  "src": "10840:28:2"
                }
              ]
            },
            "documentation": {
              "id": 4850,
              "nodeType": "StructuredDocumentation",
              "src": "10260:304:2",
              "text": " @notice Gets the approved address for a token ID, or zero if no address set\n Reverts if the token ID does not exist.\n @dev ERC-721\n @param _tokenId uint256 ID of the token to query the approval of\n @return address currently approved for the given token ID"
            },
            "functionSelector": "081812fc",
            "id": 4875,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getApproved",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 4854,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10648:8:2"
            },
            "parameters": {
              "id": 4853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4852,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4875,
                  "src": "10591:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4851,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10591:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10590:18:2"
            },
            "returnParameters": {
              "id": 4857,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4856,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4875,
                  "src": "10675:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4855,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10675:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10674:9:2"
            },
            "scope": 6007,
            "src": "10570:306:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              8889
            ],
            "body": {
              "id": 5021,
              "nodeType": "Block",
              "src": "11565:1672:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4898,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 4893,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4880,
                          "src": "11584:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 4896,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11599:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 4895,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11591:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4894,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "11591:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4897,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11591:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "11584:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 4899,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11603:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 4892,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11576:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11576:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4901,
                  "nodeType": "ExpressionStatement",
                  "src": "11576:49:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4907,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 4903,
                            "name": "_tokenIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4883,
                            "src": "11734:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 4904,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "11734:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 4905,
                            "name": "_values",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4886,
                            "src": "11754:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 4906,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "11754:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11734:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4d49534d4154434845445f41525241595f4c454e47544853",
                        "id": 4908,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11770:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        },
                        "value": "MISMATCHED_ARRAY_LENGTHS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        }
                      ],
                      "id": 4902,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11726:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4909,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11726:71:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4910,
                  "nodeType": "ExpressionStatement",
                  "src": "11726:71:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4915,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4912,
                            "name": "_from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4878,
                            "src": "11921:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 4913,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "11930:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4914,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "11930:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "11921:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4923,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 4916,
                                "name": "operatorApprovals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4433,
                                "src": "11944:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                  "typeString": "mapping(address => mapping(address => bool))"
                                }
                              },
                              "id": 4918,
                              "indexExpression": {
                                "id": 4917,
                                "name": "_from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4878,
                                "src": "11962:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "11944:24:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 4921,
                            "indexExpression": {
                              "expression": {
                                "id": 4919,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "11969:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4920,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "11969:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11944:36:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "74727565",
                            "id": 4922,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11984:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "11944:44:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11921:67:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f5342",
                        "id": 4925,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12003:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_184887f256bf91e0eafcb177f95f3c8e3b254b2c7e9eb81c480965f351bfe007",
                          "typeString": "literal_string \"UNAUTHORIZED_SB\""
                        },
                        "value": "UNAUTHORIZED_SB"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_184887f256bf91e0eafcb177f95f3c8e3b254b2c7e9eb81c480965f351bfe007",
                          "typeString": "literal_string \"UNAUTHORIZED_SB\""
                        }
                      ],
                      "id": 4911,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11899:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11899:132:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4927,
                  "nodeType": "ExpressionStatement",
                  "src": "11899:132:2"
                },
                {
                  "body": {
                    "id": 5000,
                    "nodeType": "Block",
                    "src": "12175:689:2",
                    "statements": [
                      {
                        "assignments": [
                          4940
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4940,
                            "mutability": "mutable",
                            "name": "tokenId",
                            "nodeType": "VariableDeclaration",
                            "scope": 5000,
                            "src": "12190:15:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4939,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "12190:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4944,
                        "initialValue": {
                          "baseExpression": {
                            "id": 4941,
                            "name": "_tokenIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4883,
                            "src": "12208:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 4943,
                          "indexExpression": {
                            "id": 4942,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4929,
                            "src": "12218:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12208:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12190:30:2"
                      },
                      {
                        "assignments": [
                          4946
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4946,
                            "mutability": "mutable",
                            "name": "value",
                            "nodeType": "VariableDeclaration",
                            "scope": 5000,
                            "src": "12235:13:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4945,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "12235:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4950,
                        "initialValue": {
                          "baseExpression": {
                            "id": 4947,
                            "name": "_values",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4886,
                            "src": "12251:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 4949,
                          "indexExpression": {
                            "id": 4948,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4929,
                            "src": "12259:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12251:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12235:26:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4955,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4878,
                              "src": "12352:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4956,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4940,
                              "src": "12376:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 4957,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4946,
                              "src": "12402:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 4952,
                                  "name": "bosonRouterAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4409,
                                  "src": "12291:18:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4951,
                                "name": "IBosonRouter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8747,
                                "src": "12278:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IBosonRouter_$8747_$",
                                  "typeString": "type(contract IBosonRouter)"
                                }
                              },
                              "id": 4953,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12278:32:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBosonRouter_$8747",
                                "typeString": "contract IBosonRouter"
                              }
                            },
                            "id": 4954,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_beforeERC1155Transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8728,
                            "src": "12278:55:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256) view external"
                            }
                          },
                          "id": 4958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12278:144:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4959,
                        "nodeType": "ExpressionStatement",
                        "src": "12278:144:2"
                      },
                      {
                        "expression": {
                          "id": 4973,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 4960,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4415,
                                "src": "12538:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(address => uint256))"
                                }
                              },
                              "id": 4963,
                              "indexExpression": {
                                "id": 4961,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4940,
                                "src": "12547:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12538:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 4964,
                            "indexExpression": {
                              "id": 4962,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4878,
                              "src": "12556:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "12538:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 4971,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4946,
                                "src": "12594:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 4965,
                                    "name": "balances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4415,
                                    "src": "12565:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 4967,
                                  "indexExpression": {
                                    "id": 4966,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4940,
                                    "src": "12574:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "12565:17:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 4969,
                                "indexExpression": {
                                  "id": 4968,
                                  "name": "_from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4878,
                                  "src": "12583:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "12565:24:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4970,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10698,
                              "src": "12565:28:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4972,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12565:35:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12538:62:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4974,
                        "nodeType": "ExpressionStatement",
                        "src": "12538:62:2"
                      },
                      {
                        "expression": {
                          "id": 4988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 4975,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4415,
                                "src": "12615:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(address => uint256))"
                                }
                              },
                              "id": 4978,
                              "indexExpression": {
                                "id": 4976,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4940,
                                "src": "12624:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12615:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 4979,
                            "indexExpression": {
                              "id": 4977,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4880,
                              "src": "12633:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "12615:22:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 4982,
                                    "name": "balances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4415,
                                    "src": "12650:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 4984,
                                  "indexExpression": {
                                    "id": 4983,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4940,
                                    "src": "12659:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "12650:17:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 4986,
                                "indexExpression": {
                                  "id": 4985,
                                  "name": "_to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4880,
                                  "src": "12668:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "12650:22:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 4980,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4946,
                                "src": "12640:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10676,
                              "src": "12640:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4987,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12640:33:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12615:58:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4989,
                        "nodeType": "ExpressionStatement",
                        "src": "12615:58:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4994,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4878,
                              "src": "12760:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4995,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4880,
                              "src": "12784:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4996,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4940,
                              "src": "12806:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 4997,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4946,
                              "src": "12832:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 4991,
                                  "name": "bosonRouterAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4409,
                                  "src": "12703:18:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4990,
                                "name": "IBosonRouter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8747,
                                "src": "12690:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IBosonRouter_$8747_$",
                                  "typeString": "type(contract IBosonRouter)"
                                }
                              },
                              "id": 4992,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12690:32:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBosonRouter_$8747",
                                "typeString": "contract IBosonRouter"
                              }
                            },
                            "id": 4993,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_onERC1155Transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8740,
                            "src": "12690:51:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256) external"
                            }
                          },
                          "id": 4998,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12690:162:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4999,
                        "nodeType": "ExpressionStatement",
                        "src": "12690:162:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4932,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4929,
                      "src": "12148:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 4933,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4883,
                        "src": "12152:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 4934,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "12152:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12148:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5001,
                  "initializationExpression": {
                    "assignments": [
                      4929
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4929,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 5001,
                        "src": "12133:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4928,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12133:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 4931,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 4930,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12145:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "12133:13:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 4937,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "12170:3:2",
                      "subExpression": {
                        "id": 4936,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4929,
                        "src": "12172:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4938,
                    "nodeType": "ExpressionStatement",
                    "src": "12170:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "12128:736:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5003,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "12895:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "12895:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5005,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4878,
                        "src": "12907:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5006,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4880,
                        "src": "12914:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5007,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4883,
                        "src": "12919:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 5008,
                        "name": "_values",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4886,
                        "src": "12930:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      ],
                      "id": 5002,
                      "name": "TransferBatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8852,
                      "src": "12881:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256[] memory,uint256[] memory)"
                      }
                    },
                    "id": 5009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12881:57:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5010,
                  "nodeType": "EmitStatement",
                  "src": "12876:62:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5012,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "13104:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5013,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "13104:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5014,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4878,
                        "src": "13129:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5015,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4880,
                        "src": "13149:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5016,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4883,
                        "src": "13167:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 5017,
                        "name": "_values",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4886,
                        "src": "13191:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 5018,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4888,
                        "src": "13213:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 5011,
                      "name": "_doSafeBatchTransferAcceptanceCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5108,
                      "src": "13054:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256[] memory,uint256[] memory,bytes memory)"
                      }
                    },
                    "id": 5019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13054:175:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5020,
                  "nodeType": "ExpressionStatement",
                  "src": "13054:175:2"
                }
              ]
            },
            "documentation": {
              "id": 4876,
              "nodeType": "StructuredDocumentation",
              "src": "10884:466:2",
              "text": "@notice Transfers amount of _tokenId from-to addresses with safety call.\nIf _to is a smart contract, will call onERC1155BatchReceived\n@dev ERC-1155\n@param _from    Source address\n@param _to      Destination address\n@param _tokenIds array of token IDs\n@param _values   array of transfer amounts\n@param _data    Additional data forwarded to onERC1155BatchReceived if _to is a contract"
            },
            "functionSelector": "2eb2c2d6",
            "id": 5022,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeBatchTransferFrom",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 4890,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11556:8:2"
            },
            "parameters": {
              "id": 4889,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4878,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 5022,
                  "src": "11397:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4877,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11397:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4880,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5022,
                  "src": "11421:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4879,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11421:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4883,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 5022,
                  "src": "11443:28:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4881,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11443:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4882,
                    "nodeType": "ArrayTypeName",
                    "src": "11443:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4886,
                  "mutability": "mutable",
                  "name": "_values",
                  "nodeType": "VariableDeclaration",
                  "scope": 5022,
                  "src": "11482:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4884,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11482:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4885,
                    "nodeType": "ArrayTypeName",
                    "src": "11482:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4888,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5022,
                  "src": "11519:20:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4887,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11519:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11386:160:2"
            },
            "returnParameters": {
              "id": 4891,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11565:0:2"
            },
            "scope": 6007,
            "src": "11356:1881:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 5063,
              "nodeType": "Block",
              "src": "13831:492:2",
              "statements": [
                {
                  "condition": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 5038,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5029,
                        "src": "13846:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 5039,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isContract",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11160,
                      "src": "13846:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 5040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13846:16:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5062,
                  "nodeType": "IfStatement",
                  "src": "13842:474:2",
                  "trueBody": {
                    "id": 5061,
                    "nodeType": "Block",
                    "src": "13864:452:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 5057,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 5046,
                                    "name": "_operator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5025,
                                    "src": "13971:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 5047,
                                    "name": "_from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5027,
                                    "src": "14003:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 5048,
                                    "name": "_tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5031,
                                    "src": "14031:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 5049,
                                    "name": "_value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5033,
                                    "src": "14062:6:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 5050,
                                    "name": "_data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5035,
                                    "src": "14091:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 5043,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5029,
                                        "src": "13926:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 5042,
                                      "name": "ERC1155TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9013,
                                      "src": "13905:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC1155TokenReceiver_$9013_$",
                                        "typeString": "type(contract ERC1155TokenReceiver)"
                                      }
                                    },
                                    "id": 5044,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13905:25:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC1155TokenReceiver_$9013",
                                      "typeString": "contract ERC1155TokenReceiver"
                                    }
                                  },
                                  "id": 5045,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC1155Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8994,
                                  "src": "13905:43:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 5051,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13905:210:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 5053,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5029,
                                        "src": "14140:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 5052,
                                      "name": "ERC1155TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9013,
                                      "src": "14119:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC1155TokenReceiver_$9013_$",
                                        "typeString": "type(contract ERC1155TokenReceiver)"
                                      }
                                    },
                                    "id": 5054,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14119:25:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC1155TokenReceiver_$9013",
                                      "typeString": "contract ERC1155TokenReceiver"
                                    }
                                  },
                                  "id": 5055,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC1155Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8994,
                                  "src": "14119:43:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 5056,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "selector",
                                "nodeType": "MemberAccess",
                                "src": "14119:52:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "13905:266:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4e4f545f535550504f52544544",
                              "id": 5058,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14190:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e2a8e7139f3bc1b76f03a9ab4d7a5e5329d0cc7d7a0c99dcd453eb8f41b24b0b",
                                "typeString": "literal_string \"NOT_SUPPORTED\""
                              },
                              "value": "NOT_SUPPORTED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e2a8e7139f3bc1b76f03a9ab4d7a5e5329d0cc7d7a0c99dcd453eb8f41b24b0b",
                                "typeString": "literal_string \"NOT_SUPPORTED\""
                              }
                            ],
                            "id": 5041,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "13879:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5059,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13879:341:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5060,
                        "nodeType": "ExpressionStatement",
                        "src": "13879:341:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 5023,
              "nodeType": "StructuredDocumentation",
              "src": "13245:369:2",
              "text": " @notice Check successful transfer if recipient is a contract\n @dev ERC-1155\n @param _operator The operator of the transfer\n @param _from     Address of sender\n @param _to       Address of recipient\n @param _tokenId  ID of the token\n @param _value    Value transferred\n @param _data     Optional data"
            },
            "id": 5064,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_doSafeTransferAcceptanceCheck",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5036,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5025,
                  "mutability": "mutable",
                  "name": "_operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 5064,
                  "src": "13670:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5024,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13670:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5027,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 5064,
                  "src": "13698:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5026,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13698:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5029,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5064,
                  "src": "13722:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5028,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13722:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5031,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5064,
                  "src": "13744:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5030,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13744:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5033,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 5064,
                  "src": "13771:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5032,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13771:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5035,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5064,
                  "src": "13796:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5034,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13796:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13659:162:2"
            },
            "returnParameters": {
              "id": 5037,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13831:0:2"
            },
            "scope": 6007,
            "src": "13620:703:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5107,
              "nodeType": "Block",
              "src": "14959:504:2",
              "statements": [
                {
                  "condition": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 5082,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5071,
                        "src": "14974:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 5083,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isContract",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11160,
                      "src": "14974:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 5084,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14974:16:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5106,
                  "nodeType": "IfStatement",
                  "src": "14970:486:2",
                  "trueBody": {
                    "id": 5105,
                    "nodeType": "Block",
                    "src": "14992:464:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 5101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 5090,
                                    "name": "_operator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5067,
                                    "src": "15104:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 5091,
                                    "name": "_from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5069,
                                    "src": "15136:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 5092,
                                    "name": "_tokenIds",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5074,
                                    "src": "15164:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  {
                                    "id": 5093,
                                    "name": "_values",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5077,
                                    "src": "15196:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  {
                                    "id": 5094,
                                    "name": "_data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5079,
                                    "src": "15226:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 5087,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5071,
                                        "src": "15054:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 5086,
                                      "name": "ERC1155TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9013,
                                      "src": "15033:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC1155TokenReceiver_$9013_$",
                                        "typeString": "type(contract ERC1155TokenReceiver)"
                                      }
                                    },
                                    "id": 5088,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "15033:25:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC1155TokenReceiver_$9013",
                                      "typeString": "contract ERC1155TokenReceiver"
                                    }
                                  },
                                  "id": 5089,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC1155BatchReceived",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9012,
                                  "src": "15033:48:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256[] memory,uint256[] memory,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 5095,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15033:217:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 5097,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5071,
                                        "src": "15275:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 5096,
                                      "name": "ERC1155TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9013,
                                      "src": "15254:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC1155TokenReceiver_$9013_$",
                                        "typeString": "type(contract ERC1155TokenReceiver)"
                                      }
                                    },
                                    "id": 5098,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "15254:25:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC1155TokenReceiver_$9013",
                                      "typeString": "contract ERC1155TokenReceiver"
                                    }
                                  },
                                  "id": 5099,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC1155BatchReceived",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9012,
                                  "src": "15254:48:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256[] memory,uint256[] memory,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 5100,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "selector",
                                "nodeType": "MemberAccess",
                                "src": "15254:57:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "15033:278:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4e4f545f535550504f52544544",
                              "id": 5102,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15330:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e2a8e7139f3bc1b76f03a9ab4d7a5e5329d0cc7d7a0c99dcd453eb8f41b24b0b",
                                "typeString": "literal_string \"NOT_SUPPORTED\""
                              },
                              "value": "NOT_SUPPORTED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e2a8e7139f3bc1b76f03a9ab4d7a5e5329d0cc7d7a0c99dcd453eb8f41b24b0b",
                                "typeString": "literal_string \"NOT_SUPPORTED\""
                              }
                            ],
                            "id": 5085,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "15007:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15007:353:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5104,
                        "nodeType": "ExpressionStatement",
                        "src": "15007:353:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 5065,
              "nodeType": "StructuredDocumentation",
              "src": "14331:386:2",
              "text": " @notice Check successful transfer if recipient is a contract\n @dev ERC-1155\n @param _operator The operator of the transfer\n @param _from     Address of sender\n @param _to       Address of recipient\n @param _tokenIds Array of IDs of tokens\n @param _values   Array of values transferred\n @param _data     Optional data"
            },
            "id": 5108,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_doSafeBatchTransferAcceptanceCheck",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5080,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5067,
                  "mutability": "mutable",
                  "name": "_operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 5108,
                  "src": "14778:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5066,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14778:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5069,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 5108,
                  "src": "14806:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5068,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14806:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5071,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5108,
                  "src": "14830:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5070,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14830:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5074,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 5108,
                  "src": "14852:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5072,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "14852:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5073,
                    "nodeType": "ArrayTypeName",
                    "src": "14852:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5077,
                  "mutability": "mutable",
                  "name": "_values",
                  "nodeType": "VariableDeclaration",
                  "scope": 5108,
                  "src": "14889:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5075,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "14889:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5076,
                    "nodeType": "ArrayTypeName",
                    "src": "14889:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5079,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5108,
                  "src": "14924:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5078,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14924:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14767:182:2"
            },
            "returnParameters": {
              "id": 5081,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14959:0:2"
            },
            "scope": 6007,
            "src": "14723:740:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              8899
            ],
            "body": {
              "id": 5125,
              "nodeType": "Block",
              "src": "15837:54:2",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 5119,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4415,
                        "src": "15855:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(uint256 => mapping(address => uint256))"
                        }
                      },
                      "id": 5121,
                      "indexExpression": {
                        "id": 5120,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5113,
                        "src": "15864:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "15855:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 5123,
                    "indexExpression": {
                      "id": 5122,
                      "name": "_account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5111,
                      "src": "15874:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "15855:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5118,
                  "id": 5124,
                  "nodeType": "Return",
                  "src": "15848:35:2"
                }
              ]
            },
            "documentation": {
              "id": 5109,
              "nodeType": "StructuredDocumentation",
              "src": "15471:223:2",
              "text": "@notice Get the balance of tokens of an account\n@dev ERC-1155\n@param _account The address of the token holder\n@param _tokenId ID of the token\n@return         balance"
            },
            "functionSelector": "00fdd58e",
            "id": 5126,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5115,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15796:8:2"
            },
            "parameters": {
              "id": 5114,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5111,
                  "mutability": "mutable",
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5126,
                  "src": "15719:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5110,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15719:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5113,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5126,
                  "src": "15737:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5112,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15737:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15718:36:2"
            },
            "returnParameters": {
              "id": 5118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5117,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5126,
                  "src": "15823:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5116,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15823:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15822:9:2"
            },
            "scope": 6007,
            "src": "15700:191:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9175
            ],
            "body": {
              "id": 5149,
              "nodeType": "Block",
              "src": "16181:199:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5141,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5136,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5129,
                          "src": "16200:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5139,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16218:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5138,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16210:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5137,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "16210:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5140,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16210:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "16200:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 5142,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16222:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 5135,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "16192:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16192:52:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5144,
                  "nodeType": "ExpressionStatement",
                  "src": "16192:52:2"
                },
                {
                  "expression": {
                    "baseExpression": {
                      "id": 5145,
                      "name": "balance721",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4419,
                      "src": "16354:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 5147,
                    "indexExpression": {
                      "id": 5146,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5129,
                      "src": "16365:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16354:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5134,
                  "id": 5148,
                  "nodeType": "Return",
                  "src": "16347:25:2"
                }
              ]
            },
            "documentation": {
              "id": 5127,
              "nodeType": "StructuredDocumentation",
              "src": "15899:202:2",
              "text": "@notice Count all NFTs assigned to an owner\n @dev ERC-721\n @param _owner An address for whom to query the balance\n @return The number of NFTs owned by `_owner`, possibly zero"
            },
            "functionSelector": "70a08231",
            "id": 5150,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5131,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16154:8:2"
            },
            "parameters": {
              "id": 5130,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5129,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 5150,
                  "src": "16126:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5128,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16126:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16125:16:2"
            },
            "returnParameters": {
              "id": 5134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5133,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5150,
                  "src": "16172:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5132,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16172:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16171:9:2"
            },
            "scope": 6007,
            "src": "16107:273:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9183
            ],
            "body": {
              "id": 5177,
              "nodeType": "Block",
              "src": "16705:242:2",
              "statements": [
                {
                  "assignments": [
                    5160
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5160,
                      "mutability": "mutable",
                      "name": "tokenOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 5177,
                      "src": "16716:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5159,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "16716:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5164,
                  "initialValue": {
                    "baseExpression": {
                      "id": 5161,
                      "name": "owners721",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4423,
                      "src": "16737:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                        "typeString": "mapping(uint256 => address)"
                      }
                    },
                    "id": 5163,
                    "indexExpression": {
                      "id": 5162,
                      "name": "_tokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5153,
                      "src": "16747:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16737:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16716:40:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5166,
                          "name": "tokenOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5160,
                          "src": "16775:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5169,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16797:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5168,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16789:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5167,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "16789:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5170,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16789:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "16775:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e444546494e45445f4f574e4552",
                        "id": 5172,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16801:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_665a82e24970e95450234db0a05e4b37f2a03b4524d96a2fb7fddd76a7ed30de",
                          "typeString": "literal_string \"UNDEFINED_OWNER\""
                        },
                        "value": "UNDEFINED_OWNER"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_665a82e24970e95450234db0a05e4b37f2a03b4524d96a2fb7fddd76a7ed30de",
                          "typeString": "literal_string \"UNDEFINED_OWNER\""
                        }
                      ],
                      "id": 5165,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "16767:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16767:52:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5174,
                  "nodeType": "ExpressionStatement",
                  "src": "16767:52:2"
                },
                {
                  "expression": {
                    "id": 5175,
                    "name": "tokenOwner",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5160,
                    "src": "16929:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 5158,
                  "id": 5176,
                  "nodeType": "Return",
                  "src": "16922:17:2"
                }
              ]
            },
            "documentation": {
              "id": 5151,
              "nodeType": "StructuredDocumentation",
              "src": "16388:237:2",
              "text": " @notice Gets the owner of the specified token ID.\n @dev ERC-721\n @param _tokenId uint256 ID of the token to query the owner of\n @return address currently marked as the owner of the given token ID"
            },
            "functionSelector": "6352211e",
            "id": 5178,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerOf",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5155,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16678:8:2"
            },
            "parameters": {
              "id": 5154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5153,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5178,
                  "src": "16648:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5152,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16648:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16647:18:2"
            },
            "returnParameters": {
              "id": 5158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5157,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5178,
                  "src": "16696:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5156,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16696:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16695:9:2"
            },
            "scope": 6007,
            "src": "16631:316:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              8912
            ],
            "body": {
              "id": 5242,
              "nodeType": "Block",
              "src": "17351:469:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5197,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 5193,
                            "name": "_accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5182,
                            "src": "17384:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 5194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "17384:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 5195,
                            "name": "_tokenIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5185,
                            "src": "17404:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 5196,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "17404:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17384:36:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4d49534d4154434845445f41525241595f4c454e47544853",
                        "id": 5198,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17435:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        },
                        "value": "MISMATCHED_ARRAY_LENGTHS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        }
                      ],
                      "id": 5192,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17362:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17362:110:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5200,
                  "nodeType": "ExpressionStatement",
                  "src": "17362:110:2"
                },
                {
                  "assignments": [
                    5205
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5205,
                      "mutability": "mutable",
                      "name": "batchBalances",
                      "nodeType": "VariableDeclaration",
                      "scope": 5242,
                      "src": "17574:30:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5203,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17574:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5204,
                        "nodeType": "ArrayTypeName",
                        "src": "17574:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5212,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5209,
                          "name": "_accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5182,
                          "src": "17621:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        "id": 5210,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "17621:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5208,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "17607:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (uint256[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5206,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17611:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5207,
                        "nodeType": "ArrayTypeName",
                        "src": "17611:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      }
                    },
                    "id": 5211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17607:31:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17574:64:2"
                },
                {
                  "body": {
                    "id": 5238,
                    "nodeType": "Block",
                    "src": "17698:82:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 5236,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5224,
                              "name": "batchBalances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5205,
                              "src": "17713:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 5226,
                            "indexExpression": {
                              "id": 5225,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5214,
                              "src": "17727:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "17713:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 5227,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4415,
                                "src": "17732:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(address => uint256))"
                                }
                              },
                              "id": 5231,
                              "indexExpression": {
                                "baseExpression": {
                                  "id": 5228,
                                  "name": "_tokenIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5185,
                                  "src": "17741:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                    "typeString": "uint256[] calldata"
                                  }
                                },
                                "id": 5230,
                                "indexExpression": {
                                  "id": 5229,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5214,
                                  "src": "17751:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "17741:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "17732:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5235,
                            "indexExpression": {
                              "baseExpression": {
                                "id": 5232,
                                "name": "_accounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5182,
                                "src": "17755:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 5234,
                              "indexExpression": {
                                "id": 5233,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5214,
                                "src": "17765:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "17755:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "17732:36:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17713:55:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5237,
                        "nodeType": "ExpressionStatement",
                        "src": "17713:55:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5217,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5214,
                      "src": "17671:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 5218,
                        "name": "_accounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5182,
                        "src": "17675:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 5219,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "17675:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17671:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5239,
                  "initializationExpression": {
                    "assignments": [
                      5214
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 5214,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 5239,
                        "src": "17656:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5213,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17656:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 5216,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 5215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17668:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "17656:13:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 5222,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "17693:3:2",
                      "subExpression": {
                        "id": 5221,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5214,
                        "src": "17695:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5223,
                    "nodeType": "ExpressionStatement",
                    "src": "17693:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "17651:129:2"
                },
                {
                  "expression": {
                    "id": 5240,
                    "name": "batchBalances",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5205,
                    "src": "17799:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "functionReturnParameters": 5191,
                  "id": 5241,
                  "nodeType": "Return",
                  "src": "17792:20:2"
                }
              ]
            },
            "documentation": {
              "id": 5179,
              "nodeType": "StructuredDocumentation",
              "src": "16955:231:2",
              "text": "@notice Get the balance of account-token pairs.\n@dev ERC-1155\n@param _accounts The addresses of the token holders\n@param _tokenIds IDs of the tokens\n@return         balances"
            },
            "functionSelector": "4e1273f4",
            "id": 5243,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOfBatch",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5187,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17315:8:2"
            },
            "parameters": {
              "id": 5186,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5182,
                  "mutability": "mutable",
                  "name": "_accounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 5243,
                  "src": "17226:28:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5180,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "17226:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 5181,
                    "nodeType": "ArrayTypeName",
                    "src": "17226:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5185,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 5243,
                  "src": "17265:28:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5183,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "17265:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5184,
                    "nodeType": "ArrayTypeName",
                    "src": "17265:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17215:85:2"
            },
            "returnParameters": {
              "id": 5191,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5190,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5243,
                  "src": "17333:16:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5188,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "17333:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5189,
                    "nodeType": "ArrayTypeName",
                    "src": "17333:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17332:18:2"
            },
            "scope": 6007,
            "src": "17192:628:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              8920,
              9231
            ],
            "body": {
              "id": 5278,
              "nodeType": "Block",
              "src": "18217:292:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5258,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 5255,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "18236:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 5256,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "18236:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 5257,
                          "name": "_operator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5246,
                          "src": "18250:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "18236:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "524544554e44414e545f43414c4c",
                        "id": 5259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18261:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d0d6a83cea74c93af9d0ecf0d695b181905be0ac705b9f5c24f75ac5424c53e2",
                          "typeString": "literal_string \"REDUNDANT_CALL\""
                        },
                        "value": "REDUNDANT_CALL"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d0d6a83cea74c93af9d0ecf0d695b181905be0ac705b9f5c24f75ac5424c53e2",
                          "typeString": "literal_string \"REDUNDANT_CALL\""
                        }
                      ],
                      "id": 5254,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18228:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5260,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18228:50:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5261,
                  "nodeType": "ExpressionStatement",
                  "src": "18228:50:2"
                },
                {
                  "expression": {
                    "id": 5269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 5262,
                          "name": "operatorApprovals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4433,
                          "src": "18387:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(address => bool))"
                          }
                        },
                        "id": 5266,
                        "indexExpression": {
                          "expression": {
                            "id": 5263,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "18405:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 5264,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "18405:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18387:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 5267,
                      "indexExpression": {
                        "id": 5265,
                        "name": "_operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5246,
                        "src": "18417:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "18387:40:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5268,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5248,
                      "src": "18430:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "18387:51:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5270,
                  "nodeType": "ExpressionStatement",
                  "src": "18387:51:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5272,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "18469:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5273,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "18469:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5274,
                        "name": "_operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5246,
                        "src": "18481:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5275,
                        "name": "_approve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5248,
                        "src": "18492:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 5271,
                      "name": "ApprovalForAll",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8974,
                      "src": "18454:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,bool)"
                      }
                    },
                    "id": 5276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18454:47:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5277,
                  "nodeType": "EmitStatement",
                  "src": "18449:52:2"
                }
              ]
            },
            "documentation": {
              "id": 5244,
              "nodeType": "StructuredDocumentation",
              "src": "17828:262:2",
              "text": " @notice Approves or unapproves the operator.\n will revert if the caller attempts to approve itself as it is redundant\n @dev ERC-1155 & ERC-721\n @param _operator to (un)approve\n @param _approve flag to set or unset"
            },
            "functionSelector": "a22cb465",
            "id": 5279,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setApprovalForAll",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5252,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 5250,
                  "name": "IERC1155",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 8931,
                  "src": "18193:8:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC1155_$8931",
                    "typeString": "contract IERC1155"
                  }
                },
                {
                  "id": 5251,
                  "name": "IERC721",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 9250,
                  "src": "18203:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC721_$9250",
                    "typeString": "contract IERC721"
                  }
                }
              ],
              "src": "18184:27:2"
            },
            "parameters": {
              "id": 5249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5246,
                  "mutability": "mutable",
                  "name": "_operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 5279,
                  "src": "18123:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5245,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18123:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5248,
                  "mutability": "mutable",
                  "name": "_approve",
                  "nodeType": "VariableDeclaration",
                  "scope": 5279,
                  "src": "18142:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5247,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18142:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18122:34:2"
            },
            "returnParameters": {
              "id": 5253,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18217:0:2"
            },
            "scope": 6007,
            "src": "18096:413:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              8930,
              9249
            ],
            "body": {
              "id": 5298,
              "nodeType": "Block",
              "src": "18959:64:2",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 5292,
                        "name": "operatorApprovals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4433,
                        "src": "18977:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                          "typeString": "mapping(address => mapping(address => bool))"
                        }
                      },
                      "id": 5294,
                      "indexExpression": {
                        "id": 5293,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5282,
                        "src": "18995:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "18977:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 5296,
                    "indexExpression": {
                      "id": 5295,
                      "name": "_operator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5284,
                      "src": "19005:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18977:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5291,
                  "id": 5297,
                  "nodeType": "Return",
                  "src": "18970:45:2"
                }
              ]
            },
            "documentation": {
              "id": 5280,
              "nodeType": "StructuredDocumentation",
              "src": "18517:277:2",
              "text": "@notice Gets approval status of an operator for a given account.\n@dev ERC-1155 & ERC-721\n@param _account   token holder\n@param _operator  operator to check\n@return           True if the operator is approved, false if not"
            },
            "functionSelector": "e985e9c5",
            "id": 5299,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isApprovedForAll",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5288,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 5286,
                  "name": "IERC1155",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 8931,
                  "src": "18911:8:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC1155_$8931",
                    "typeString": "contract IERC1155"
                  }
                },
                {
                  "id": 5287,
                  "name": "IERC721",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 9250,
                  "src": "18921:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC721_$9250",
                    "typeString": "contract IERC721"
                  }
                }
              ],
              "src": "18902:27:2"
            },
            "parameters": {
              "id": 5285,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5282,
                  "mutability": "mutable",
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5299,
                  "src": "18826:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5281,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18826:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5284,
                  "mutability": "mutable",
                  "name": "_operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 5299,
                  "src": "18844:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5283,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18844:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18825:37:2"
            },
            "returnParameters": {
              "id": 5291,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5290,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5299,
                  "src": "18948:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5289,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18948:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18947:6:2"
            },
            "scope": 6007,
            "src": "18800:223:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9024
            ],
            "body": {
              "id": 5328,
              "nodeType": "Block",
              "src": "19349:385:2",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5326,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 5322,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 5318,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 5314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 5310,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5308,
                              "name": "_interfaceId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5302,
                              "src": "19438:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "30783031666663396137",
                              "id": 5309,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19454:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_33540519_by_1",
                                "typeString": "int_const 33540519"
                              },
                              "value": "0x01ffc9a7"
                            },
                            "src": "19438:26:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 5313,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5311,
                              "name": "_interfaceId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5302,
                              "src": "19491:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "30786439623637613236",
                              "id": 5312,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19507:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_3652614694_by_1",
                                "typeString": "int_const 3652614694"
                              },
                              "value": "0xd9b67a26"
                            },
                            "src": "19491:26:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "19438:79:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 5317,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5315,
                            "name": "_interfaceId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5302,
                            "src": "19545:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30783830616335386364",
                            "id": 5316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19561:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2158778573_by_1",
                              "typeString": "int_const 2158778573"
                            },
                            "value": "0x80ac58cd"
                          },
                          "src": "19545:26:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "19438:133:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 5321,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5319,
                          "name": "_interfaceId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5302,
                          "src": "19598:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30783562356531333966",
                          "id": 5320,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19614:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1532892063_by_1",
                            "typeString": "int_const 1532892063"
                          },
                          "value": "0x5b5e139f"
                        },
                        "src": "19598:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "19438:186:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 5325,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 5323,
                        "name": "_interfaceId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5302,
                        "src": "19670:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30783065383933343163",
                        "id": 5324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19686:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_243872796_by_1",
                          "typeString": "int_const 243872796"
                        },
                        "value": "0x0e89341c"
                      },
                      "src": "19670:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "19438:258:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5307,
                  "id": 5327,
                  "nodeType": "Return",
                  "src": "19360:336:2"
                }
              ]
            },
            "documentation": {
              "id": 5300,
              "nodeType": "StructuredDocumentation",
              "src": "19031:185:2",
              "text": " @notice Returns true if this contract implements the interface defined by _interfaceId_.\n This function call must use less than 30 000 gas. ATM not enforced."
            },
            "functionSelector": "01ffc9a7",
            "id": 5329,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5304,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "19311:8:2"
            },
            "parameters": {
              "id": 5303,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5302,
                  "mutability": "mutable",
                  "name": "_interfaceId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5329,
                  "src": "19249:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 5301,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "19249:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19248:21:2"
            },
            "returnParameters": {
              "id": 5307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5306,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5329,
                  "src": "19338:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5305,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19338:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19337:6:2"
            },
            "scope": 6007,
            "src": "19222:512:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              8945
            ],
            "body": {
              "id": 5351,
              "nodeType": "Block",
              "src": "20421:54:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5345,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5332,
                        "src": "20438:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5346,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5334,
                        "src": "20443:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5347,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5336,
                        "src": "20453:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5348,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5338,
                        "src": "20461:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5344,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5415,
                        5487
                      ],
                      "referencedDeclaration": 5415,
                      "src": "20432:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint256,bytes memory)"
                      }
                    },
                    "id": 5349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20432:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5350,
                  "nodeType": "ExpressionStatement",
                  "src": "20432:35:2"
                }
              ]
            },
            "documentation": {
              "id": 5330,
              "nodeType": "StructuredDocumentation",
              "src": "19825:428:2",
              "text": " @notice Mint an amount of a desired token\n Currently no restrictions as to who is allowed to mint - so, it is public.\n @dev ERC-1155\n @param _to       owner of the minted token\n @param _tokenId  ID of the token to be minted\n @param _value    Amount of the token to be minted\n @param _data     Additional data forwarded to onERC1155BatchReceived if _to is a contract"
            },
            "functionSelector": "731133e9",
            "id": 5352,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5342,
                "modifierName": {
                  "id": 5341,
                  "name": "onlyFromVoucherKernel",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4485,
                  "src": "20399:21:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20399:21:2"
              }
            ],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5340,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "20390:8:2"
            },
            "parameters": {
              "id": 5339,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5332,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5352,
                  "src": "20283:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5331,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20283:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5334,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5352,
                  "src": "20305:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5333,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20305:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5336,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 5352,
                  "src": "20332:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5335,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20332:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5338,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5352,
                  "src": "20357:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5337,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20357:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20272:110:2"
            },
            "returnParameters": {
              "id": 5343,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20421:0:2"
            },
            "scope": 6007,
            "src": "20259:216:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5414,
              "nodeType": "Block",
              "src": "20989:487:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5370,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5365,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5355,
                          "src": "21008:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5368,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "21023:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5367,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "21015:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5366,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "21015:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21015:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "21008:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 5371,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21027:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 5364,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "21000:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21000:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5373,
                  "nodeType": "ExpressionStatement",
                  "src": "21000:49:2"
                },
                {
                  "expression": {
                    "id": 5387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 5374,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4415,
                          "src": "21144:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(uint256 => mapping(address => uint256))"
                          }
                        },
                        "id": 5377,
                        "indexExpression": {
                          "id": 5375,
                          "name": "_tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5357,
                          "src": "21153:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "21144:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5378,
                      "indexExpression": {
                        "id": 5376,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5355,
                        "src": "21163:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "21144:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 5385,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5359,
                          "src": "21198:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 5379,
                              "name": "balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4415,
                              "src": "21170:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(address => uint256))"
                              }
                            },
                            "id": 5381,
                            "indexExpression": {
                              "id": 5380,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5357,
                              "src": "21179:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "21170:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 5383,
                          "indexExpression": {
                            "id": 5382,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5355,
                            "src": "21189:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "21170:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10676,
                        "src": "21170:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 5386,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21170:35:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21144:61:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5388,
                  "nodeType": "ExpressionStatement",
                  "src": "21144:61:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5390,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "21236:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5391,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "21236:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5394,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21256:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 5393,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21248:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5392,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "21248:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5395,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21248:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5396,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5355,
                        "src": "21260:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5397,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5357,
                        "src": "21265:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5398,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5359,
                        "src": "21275:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5389,
                      "name": "TransferSingle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8837,
                      "src": "21221:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256)"
                      }
                    },
                    "id": 5399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21221:61:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5400,
                  "nodeType": "EmitStatement",
                  "src": "21216:66:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5402,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "21340:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5403,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "21340:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5406,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21373:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 5405,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21365:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5404,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "21365:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5407,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21365:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5408,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5355,
                        "src": "21390:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5409,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5357,
                        "src": "21408:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5410,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5359,
                        "src": "21431:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5411,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5361,
                        "src": "21452:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5401,
                      "name": "_doSafeTransferAcceptanceCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5064,
                      "src": "21295:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256,bytes memory)"
                      }
                    },
                    "id": 5412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21295:173:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5413,
                  "nodeType": "ExpressionStatement",
                  "src": "21295:173:2"
                }
              ]
            },
            "documentation": {
              "id": 5353,
              "nodeType": "StructuredDocumentation",
              "src": "20483:366:2",
              "text": " @notice Internal function to mint an amount of a desired token\n @dev ERC-1155\n @param _to       owner of the minted token\n @param _tokenId  ID of the token to be minted\n @param _value    Amount of the token to be minted\n @param _data     Additional data forwarded to onERC1155BatchReceived if _to is a contract"
            },
            "id": 5415,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5362,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5355,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5415,
                  "src": "20880:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5354,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20880:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5357,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5415,
                  "src": "20902:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5356,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20902:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5359,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 5415,
                  "src": "20929:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5358,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20929:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5361,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5415,
                  "src": "20954:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5360,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20954:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20869:110:2"
            },
            "returnParameters": {
              "id": 5363,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20989:0:2"
            },
            "scope": 6007,
            "src": "20855:621:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              8965
            ],
            "body": {
              "id": 5435,
              "nodeType": "Block",
              "src": "21887:59:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5429,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5418,
                        "src": "21904:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5430,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5420,
                        "src": "21908:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5428,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5415,
                        5487
                      ],
                      "referencedDeclaration": 5487,
                      "src": "21898:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 5431,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21898:18:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5432,
                  "nodeType": "ExpressionStatement",
                  "src": "21898:18:2"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 5433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "21934:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 5427,
                  "id": 5434,
                  "nodeType": "Return",
                  "src": "21927:11:2"
                }
              ]
            },
            "documentation": {
              "id": 5416,
              "nodeType": "StructuredDocumentation",
              "src": "21484:260:2",
              "text": " @notice Function to mint tokens.\n @dev ERC-721\n @param to The address that will receive the minted tokens.\n @param tokenId The token id to mint.\n @return A boolean that indicates if the operation was successful."
            },
            "functionSelector": "40c10f19",
            "id": 5436,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5424,
                "modifierName": {
                  "id": 5423,
                  "name": "onlyFromVoucherKernel",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4485,
                  "src": "21836:21:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21836:21:2"
              }
            ],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5422,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "21818:8:2"
            },
            "parameters": {
              "id": 5421,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5418,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5436,
                  "src": "21764:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5417,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21764:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5420,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5436,
                  "src": "21776:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5419,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21776:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21763:29:2"
            },
            "returnParameters": {
              "id": 5427,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5426,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5436,
                  "src": "21876:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5425,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21876:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21875:6:2"
            },
            "scope": 6007,
            "src": "21750:196:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5486,
              "nodeType": "Block",
              "src": "22280:399:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5450,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5445,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5439,
                          "src": "22299:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5448,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22314:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5447,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "22306:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5446,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "22306:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5449,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22306:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "22299:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 5451,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22318:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 5444,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "22291:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5452,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22291:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5453,
                  "nodeType": "ExpressionStatement",
                  "src": "22291:49:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5462,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 5455,
                            "name": "owners721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4423,
                            "src": "22463:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                              "typeString": "mapping(uint256 => address)"
                            }
                          },
                          "id": 5457,
                          "indexExpression": {
                            "id": 5456,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5441,
                            "src": "22473:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "22463:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5460,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22494:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5459,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "22486:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5458,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "22486:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5461,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22486:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "22463:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a20746f6b656e20616c7265616479206d696e746564",
                        "id": 5463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22511:30:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
                          "typeString": "literal_string \"ERC721: token already minted\""
                        },
                        "value": "ERC721: token already minted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
                          "typeString": "literal_string \"ERC721: token already minted\""
                        }
                      ],
                      "id": 5454,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "22441:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5464,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22441:111:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5465,
                  "nodeType": "ExpressionStatement",
                  "src": "22441:111:2"
                },
                {
                  "expression": {
                    "id": 5470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 5466,
                        "name": "owners721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4423,
                        "src": "22565:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                          "typeString": "mapping(uint256 => address)"
                        }
                      },
                      "id": 5468,
                      "indexExpression": {
                        "id": 5467,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5441,
                        "src": "22575:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "22565:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5469,
                      "name": "_to",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5439,
                      "src": "22587:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "22565:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5471,
                  "nodeType": "ExpressionStatement",
                  "src": "22565:25:2"
                },
                {
                  "expression": {
                    "id": 5475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "22601:17:2",
                    "subExpression": {
                      "baseExpression": {
                        "id": 5472,
                        "name": "balance721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4419,
                        "src": "22601:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5474,
                      "indexExpression": {
                        "id": 5473,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5439,
                        "src": "22612:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "22601:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5476,
                  "nodeType": "ExpressionStatement",
                  "src": "22601:17:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5480,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "22653:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 5479,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "22645:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5478,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "22645:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5481,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "22645:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5482,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5439,
                        "src": "22657:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5483,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5441,
                        "src": "22662:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5477,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9158,
                      "src": "22636:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 5484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22636:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5485,
                  "nodeType": "EmitStatement",
                  "src": "22631:40:2"
                }
              ]
            },
            "documentation": {
              "id": 5437,
              "nodeType": "StructuredDocumentation",
              "src": "21954:265:2",
              "text": " @notice Internal function to mint a new token.\n Reverts if the given token ID already exists.\n @dev ERC-721\n @param _to The address that will own the minted token\n @param _tokenId uint256 ID of the token to be minted"
            },
            "id": 5487,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5442,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5439,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5487,
                  "src": "22240:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5438,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22240:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5441,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5487,
                  "src": "22253:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5440,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22253:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22239:31:2"
            },
            "returnParameters": {
              "id": 5443,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22280:0:2"
            },
            "scope": 6007,
            "src": "22225:454:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5510,
              "nodeType": "Block",
              "src": "23298:98:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5504,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5490,
                        "src": "23357:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5505,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5493,
                        "src": "23362:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 5506,
                        "name": "_values",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5496,
                        "src": "23373:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 5507,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5498,
                        "src": "23382:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5503,
                      "name": "_mintBatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5604,
                      "src": "23346:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256[] memory,uint256[] memory,bytes memory)"
                      }
                    },
                    "id": 5508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23346:42:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5509,
                  "nodeType": "ExpressionStatement",
                  "src": "23346:42:2"
                }
              ]
            },
            "documentation": {
              "id": 5488,
              "nodeType": "StructuredDocumentation",
              "src": "22687:427:2",
              "text": " @notice Batch minting of tokens\n Currently no restrictions as to who is allowed to mint - so, it is public.\n @dev ERC-1155\n @param _to The address that will own the minted token\n @param _tokenIds IDs of the tokens to be minted\n @param _values Amounts of the tokens to be minted\n @param _data Additional data forwarded to onERC1155BatchReceived if _to is a contract"
            },
            "functionSelector": "1f7fdffa",
            "id": 5511,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5501,
                "modifierName": {
                  "id": 5500,
                  "name": "onlyFromVoucherKernel",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4485,
                  "src": "23276:21:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "23276:21:2"
              }
            ],
            "name": "mintBatch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5499,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5490,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5511,
                  "src": "23149:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5489,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23149:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5493,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 5511,
                  "src": "23171:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5491,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "23171:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5492,
                    "nodeType": "ArrayTypeName",
                    "src": "23171:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5496,
                  "mutability": "mutable",
                  "name": "_values",
                  "nodeType": "VariableDeclaration",
                  "scope": 5511,
                  "src": "23208:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5494,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "23208:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5495,
                    "nodeType": "ArrayTypeName",
                    "src": "23208:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5498,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5511,
                  "src": "23243:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5497,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "23243:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23138:130:2"
            },
            "returnParameters": {
              "id": 5502,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23298:0:2"
            },
            "scope": 6007,
            "src": "23120:276:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5603,
              "nodeType": "Block",
              "src": "23936:795:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5531,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5526,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5514,
                          "src": "23955:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5529,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "23970:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5528,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "23962:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5527,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "23962:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5530,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23962:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "23955:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 5532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23974:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 5525,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "23947:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23947:49:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5534,
                  "nodeType": "ExpressionStatement",
                  "src": "23947:49:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5540,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 5536,
                            "name": "_tokenIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5517,
                            "src": "24105:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 5537,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "24105:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 5538,
                            "name": "_values",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5520,
                            "src": "24125:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 5539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "24125:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "24105:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4d49534d4154434845445f41525241595f4c454e47544853",
                        "id": 5541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24141:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        },
                        "value": "MISMATCHED_ARRAY_LENGTHS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        }
                      ],
                      "id": 5535,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "24097:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24097:71:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5543,
                  "nodeType": "ExpressionStatement",
                  "src": "24097:71:2"
                },
                {
                  "body": {
                    "id": 5576,
                    "nodeType": "Block",
                    "src": "24319:132:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 5574,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 5555,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4415,
                                "src": "24334:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(address => uint256))"
                                }
                              },
                              "id": 5560,
                              "indexExpression": {
                                "baseExpression": {
                                  "id": 5556,
                                  "name": "_tokenIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5517,
                                  "src": "24343:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 5558,
                                "indexExpression": {
                                  "id": 5557,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5545,
                                  "src": "24353:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "24343:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "24334:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5561,
                            "indexExpression": {
                              "id": 5559,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5514,
                              "src": "24357:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "24334:27:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 5566,
                                    "name": "balances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4415,
                                    "src": "24397:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 5570,
                                  "indexExpression": {
                                    "baseExpression": {
                                      "id": 5567,
                                      "name": "_tokenIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5517,
                                      "src": "24406:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 5569,
                                    "indexExpression": {
                                      "id": 5568,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5545,
                                      "src": "24416:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "24406:12:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "24397:22:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 5572,
                                "indexExpression": {
                                  "id": 5571,
                                  "name": "_to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5514,
                                  "src": "24420:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "24397:27:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 5562,
                                  "name": "_values",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5520,
                                  "src": "24364:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 5564,
                                "indexExpression": {
                                  "id": 5563,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5545,
                                  "src": "24372:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "24364:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5565,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10676,
                              "src": "24364:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5573,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24364:75:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "24334:105:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5575,
                        "nodeType": "ExpressionStatement",
                        "src": "24334:105:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5548,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5545,
                      "src": "24292:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 5549,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5517,
                        "src": "24296:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5550,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "24296:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24292:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5577,
                  "initializationExpression": {
                    "assignments": [
                      5545
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 5545,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 5577,
                        "src": "24277:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5544,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "24277:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 5547,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 5546,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24289:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "24277:13:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 5553,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "24314:3:2",
                      "subExpression": {
                        "id": 5552,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5545,
                        "src": "24314:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5554,
                    "nodeType": "ExpressionStatement",
                    "src": "24314:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "24272:179:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5579,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "24482:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "24482:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5583,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24502:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 5582,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "24494:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5581,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "24494:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5584,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24494:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5585,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5514,
                        "src": "24506:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5586,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5517,
                        "src": "24511:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 5587,
                        "name": "_values",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5520,
                        "src": "24522:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 5578,
                      "name": "TransferBatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8852,
                      "src": "24468:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256[] memory,uint256[] memory)"
                      }
                    },
                    "id": 5588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24468:62:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5589,
                  "nodeType": "EmitStatement",
                  "src": "24463:67:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5591,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "24593:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5592,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "24593:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5595,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24626:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 5594,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "24618:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5593,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "24618:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5596,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24618:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5597,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5514,
                        "src": "24643:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5598,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5517,
                        "src": "24661:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 5599,
                        "name": "_values",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5520,
                        "src": "24685:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 5600,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5522,
                        "src": "24707:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5590,
                      "name": "_doSafeBatchTransferAcceptanceCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5108,
                      "src": "24543:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256[] memory,uint256[] memory,bytes memory)"
                      }
                    },
                    "id": 5601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24543:180:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5602,
                  "nodeType": "ExpressionStatement",
                  "src": "24543:180:2"
                }
              ]
            },
            "documentation": {
              "id": 5512,
              "nodeType": "StructuredDocumentation",
              "src": "23404:367:2",
              "text": " @notice Internal function for batch minting of tokens\\\n @dev ERC-1155\n @param _to The address that will own the minted token\n @param _tokenIds IDs of the tokens to be minted\n @param _values Amounts of the tokens to be minted\n @param _data Additional data forwarded to onERC1155BatchReceived if _to is a contract"
            },
            "id": 5604,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mintBatch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5514,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5604,
                  "src": "23807:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5513,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23807:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5517,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 5604,
                  "src": "23829:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5515,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "23829:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5516,
                    "nodeType": "ArrayTypeName",
                    "src": "23829:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5520,
                  "mutability": "mutable",
                  "name": "_values",
                  "nodeType": "VariableDeclaration",
                  "scope": 5604,
                  "src": "23866:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5518,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "23866:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5519,
                    "nodeType": "ArrayTypeName",
                    "src": "23866:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5522,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5604,
                  "src": "23901:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5521,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "23901:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23796:130:2"
            },
            "returnParameters": {
              "id": 5524,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23936:0:2"
            },
            "scope": 6007,
            "src": "23777:954:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              8955
            ],
            "body": {
              "id": 5623,
              "nodeType": "Block",
              "src": "25116:52:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5618,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5607,
                        "src": "25133:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5619,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5609,
                        "src": "25143:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5620,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5611,
                        "src": "25153:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5617,
                      "name": "_burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5672,
                      "src": "25127:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 5621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25127:33:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5622,
                  "nodeType": "ExpressionStatement",
                  "src": "25127:33:2"
                }
              ]
            },
            "documentation": {
              "id": 5605,
              "nodeType": "StructuredDocumentation",
              "src": "24739:233:2",
              "text": " @notice Burn an amount of tokens with the given ID\n @dev ERC-1155\n @param _account  Account which owns the token\n @param _tokenId  ID of the token\n @param _value    Amount of the token"
            },
            "functionSelector": "f5298aca",
            "id": 5624,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5615,
                "modifierName": {
                  "id": 5614,
                  "name": "onlyFromVoucherKernel",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4485,
                  "src": "25094:21:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "25094:21:2"
              }
            ],
            "name": "burn",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5613,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "25085:8:2"
            },
            "parameters": {
              "id": 5612,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5607,
                  "mutability": "mutable",
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5624,
                  "src": "25002:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5606,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25002:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5609,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5624,
                  "src": "25029:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5608,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25029:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5611,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 5624,
                  "src": "25056:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5610,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25056:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24991:86:2"
            },
            "returnParameters": {
              "id": 5616,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25116:0:2"
            },
            "scope": 6007,
            "src": "24978:190:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5671,
              "nodeType": "Block",
              "src": "25525:343:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5640,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5635,
                          "name": "_account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5627,
                          "src": "25544:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5638,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25564:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5637,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "25556:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5636,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "25556:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25556:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "25544:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 5641,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "25568:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 5634,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "25536:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25536:54:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5643,
                  "nodeType": "ExpressionStatement",
                  "src": "25536:54:2"
                },
                {
                  "expression": {
                    "id": 5657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 5644,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4415,
                          "src": "25707:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(uint256 => mapping(address => uint256))"
                          }
                        },
                        "id": 5647,
                        "indexExpression": {
                          "id": 5645,
                          "name": "_tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5629,
                          "src": "25716:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "25707:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5648,
                      "indexExpression": {
                        "id": 5646,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5627,
                        "src": "25726:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "25707:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 5655,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5631,
                          "src": "25771:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 5649,
                              "name": "balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4415,
                              "src": "25738:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(address => uint256))"
                              }
                            },
                            "id": 5651,
                            "indexExpression": {
                              "id": 5650,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5629,
                              "src": "25747:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "25738:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 5653,
                          "indexExpression": {
                            "id": 5652,
                            "name": "_account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5627,
                            "src": "25757:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "25738:28:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5654,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10698,
                        "src": "25738:32:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 5656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25738:40:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25707:71:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5658,
                  "nodeType": "ExpressionStatement",
                  "src": "25707:71:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5660,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "25809:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5661,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "25809:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5662,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5627,
                        "src": "25821:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5665,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "25839:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 5664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "25831:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5663,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "25831:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5666,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "25831:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5667,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5629,
                        "src": "25843:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5668,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5631,
                        "src": "25853:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5659,
                      "name": "TransferSingle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8837,
                      "src": "25794:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256)"
                      }
                    },
                    "id": 5669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25794:66:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5670,
                  "nodeType": "EmitStatement",
                  "src": "25789:71:2"
                }
              ]
            },
            "documentation": {
              "id": 5625,
              "nodeType": "StructuredDocumentation",
              "src": "25176:233:2",
              "text": " @notice Burn an amount of tokens with the given ID\n @dev ERC-1155\n @param _account  Account which owns the token\n @param _tokenId  ID of the token\n @param _value    Amount of the token"
            },
            "id": 5672,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5632,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5627,
                  "mutability": "mutable",
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5672,
                  "src": "25440:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5626,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25440:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5629,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5672,
                  "src": "25467:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5628,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25467:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5631,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 5672,
                  "src": "25494:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5630,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25494:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25429:86:2"
            },
            "returnParameters": {
              "id": 5633,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25525:0:2"
            },
            "scope": 6007,
            "src": "25415:453:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5692,
              "nodeType": "Block",
              "src": "26389:59:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5687,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5675,
                        "src": "26411:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5688,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5678,
                        "src": "26421:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 5689,
                        "name": "_values",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5681,
                        "src": "26432:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 5686,
                      "name": "_burnBatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5771,
                      "src": "26400:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256[] memory,uint256[] memory)"
                      }
                    },
                    "id": 5690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26400:40:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5691,
                  "nodeType": "ExpressionStatement",
                  "src": "26400:40:2"
                }
              ]
            },
            "documentation": {
              "id": 5673,
              "nodeType": "StructuredDocumentation",
              "src": "26006:223:2",
              "text": " @notice Batch burn an amounts of tokens\n @dev ERC-1155\n @param _account Account which owns the token\n @param _tokenIds IDs of the tokens\n @param _values Amounts of the tokens"
            },
            "functionSelector": "6b20c454",
            "id": 5693,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5684,
                "modifierName": {
                  "id": 5683,
                  "name": "onlyFromVoucherKernel",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4485,
                  "src": "26367:21:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "26367:21:2"
              }
            ],
            "name": "burnBatch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5682,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5675,
                  "mutability": "mutable",
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5693,
                  "src": "26264:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5674,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26264:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5678,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 5693,
                  "src": "26291:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5676,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "26291:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5677,
                    "nodeType": "ArrayTypeName",
                    "src": "26291:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5681,
                  "mutability": "mutable",
                  "name": "_values",
                  "nodeType": "VariableDeclaration",
                  "scope": 5693,
                  "src": "26328:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5679,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "26328:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5680,
                    "nodeType": "ArrayTypeName",
                    "src": "26328:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26253:106:2"
            },
            "returnParameters": {
              "id": 5685,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26389:0:2"
            },
            "scope": 6007,
            "src": "26235:213:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5770,
              "nodeType": "Block",
              "src": "26841:684:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5711,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5706,
                          "name": "_account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5696,
                          "src": "26860:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5709,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26880:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5708,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "26872:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5707,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "26872:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26872:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "26860:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 5712,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "26884:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 5705,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "26852:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26852:54:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5714,
                  "nodeType": "ExpressionStatement",
                  "src": "26852:54:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5720,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 5716,
                            "name": "_tokenIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5699,
                            "src": "27015:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 5717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "27015:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 5718,
                            "name": "_values",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5702,
                            "src": "27035:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 5719,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "27035:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "27015:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4d49534d4154434845445f41525241595f4c454e47544853",
                        "id": 5721,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "27051:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        },
                        "value": "MISMATCHED_ARRAY_LENGTHS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3fbe6a490df3b7db0fb1a57d6e1fdff049469e1fbdbebd21965303daf0836a7c",
                          "typeString": "literal_string \"MISMATCHED_ARRAY_LENGTHS\""
                        }
                      ],
                      "id": 5715,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "27007:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27007:71:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5723,
                  "nodeType": "ExpressionStatement",
                  "src": "27007:71:2"
                },
                {
                  "body": {
                    "id": 5756,
                    "nodeType": "Block",
                    "src": "27229:128:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 5754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 5735,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4415,
                                "src": "27244:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(address => uint256))"
                                }
                              },
                              "id": 5740,
                              "indexExpression": {
                                "baseExpression": {
                                  "id": 5736,
                                  "name": "_tokenIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5699,
                                  "src": "27253:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 5738,
                                "indexExpression": {
                                  "id": 5737,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5725,
                                  "src": "27263:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "27253:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "27244:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5741,
                            "indexExpression": {
                              "id": 5739,
                              "name": "_account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5696,
                              "src": "27267:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "27244:32:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "baseExpression": {
                                  "id": 5750,
                                  "name": "_values",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5702,
                                  "src": "27334:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 5752,
                                "indexExpression": {
                                  "id": 5751,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5725,
                                  "src": "27342:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "27334:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 5742,
                                    "name": "balances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4415,
                                    "src": "27279:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 5746,
                                  "indexExpression": {
                                    "baseExpression": {
                                      "id": 5743,
                                      "name": "_tokenIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5699,
                                      "src": "27288:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 5745,
                                    "indexExpression": {
                                      "id": 5744,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5725,
                                      "src": "27298:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "27288:12:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "27279:22:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 5748,
                                "indexExpression": {
                                  "id": 5747,
                                  "name": "_account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5696,
                                  "src": "27302:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "27279:32:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5749,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10698,
                              "src": "27279:54:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27279:66:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27244:101:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5755,
                        "nodeType": "ExpressionStatement",
                        "src": "27244:101:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5731,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5728,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5725,
                      "src": "27202:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 5729,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5699,
                        "src": "27206:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5730,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "27206:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27202:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5757,
                  "initializationExpression": {
                    "assignments": [
                      5725
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 5725,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 5757,
                        "src": "27187:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5724,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27187:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 5727,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 5726,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27199:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "27187:13:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 5733,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "27224:3:2",
                      "subExpression": {
                        "id": 5732,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5725,
                        "src": "27224:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5734,
                    "nodeType": "ExpressionStatement",
                    "src": "27224:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "27182:175:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5759,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "27402:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "27402:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5761,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5696,
                        "src": "27427:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5764,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "27458:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 5763,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "27450:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5762,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "27450:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5765,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27450:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5766,
                        "name": "_tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5699,
                        "src": "27475:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 5767,
                        "name": "_values",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5702,
                        "src": "27499:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 5758,
                      "name": "TransferBatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8852,
                      "src": "27374:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256[] memory,uint256[] memory)"
                      }
                    },
                    "id": 5768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27374:143:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5769,
                  "nodeType": "EmitStatement",
                  "src": "27369:148:2"
                }
              ]
            },
            "documentation": {
              "id": 5694,
              "nodeType": "StructuredDocumentation",
              "src": "26456:244:2",
              "text": " @notice Internal function to batch burn an amounts of tokens\n @dev ERC-1155\n @param _account Account which owns the token\n @param _tokenIds IDs of the tokens\n @param _values Amounts of the tokens"
            },
            "id": 5771,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burnBatch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5703,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5696,
                  "mutability": "mutable",
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5771,
                  "src": "26736:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5695,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26736:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5699,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nodeType": "VariableDeclaration",
                  "scope": 5771,
                  "src": "26763:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5697,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "26763:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5698,
                    "nodeType": "ArrayTypeName",
                    "src": "26763:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5702,
                  "mutability": "mutable",
                  "name": "_values",
                  "nodeType": "VariableDeclaration",
                  "scope": 5771,
                  "src": "26800:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5700,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "26800:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5701,
                    "nodeType": "ArrayTypeName",
                    "src": "26800:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26725:106:2"
            },
            "returnParameters": {
              "id": 5704,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26841:0:2"
            },
            "scope": 6007,
            "src": "26706:819:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5783,
              "nodeType": "Block",
              "src": "27813:42:2",
              "statements": [
                {
                  "expression": {
                    "id": 5781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 5779,
                      "name": "metadataBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4435,
                      "src": "27824:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5780,
                      "name": "_newBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5774,
                      "src": "27839:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "27824:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 5782,
                  "nodeType": "ExpressionStatement",
                  "src": "27824:23:2"
                }
              ]
            },
            "documentation": {
              "id": 5772,
              "nodeType": "StructuredDocumentation",
              "src": "27621:119:2",
              "text": " @notice Setting the URL prefix for tokens metadata\n @param _newBase   New prefix to be used"
            },
            "functionSelector": "38b6db2e",
            "id": 5784,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5777,
                "modifierName": {
                  "id": 5776,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4463,
                  "src": "27803:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "27803:9:2"
              }
            ],
            "name": "_setMetadataBase",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5775,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5774,
                  "mutability": "mutable",
                  "name": "_newBase",
                  "nodeType": "VariableDeclaration",
                  "scope": 5784,
                  "src": "27772:22:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5773,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "27772:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27771:24:2"
            },
            "returnParameters": {
              "id": 5778,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27813:0:2"
            },
            "scope": 6007,
            "src": "27746:109:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5796,
              "nodeType": "Block",
              "src": "28060:48:2",
              "statements": [
                {
                  "expression": {
                    "id": 5794,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 5792,
                      "name": "metadata1155Route",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4437,
                      "src": "28071:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5793,
                      "name": "_newRoute",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5787,
                      "src": "28091:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "28071:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 5795,
                  "nodeType": "ExpressionStatement",
                  "src": "28071:29:2"
                }
              ]
            },
            "documentation": {
              "id": 5785,
              "nodeType": "StructuredDocumentation",
              "src": "27863:126:2",
              "text": " @notice Setting the URL route for ERC1155 tokens metadata\n @param _newRoute   New route to be used"
            },
            "functionSelector": "bb499440",
            "id": 5797,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5790,
                "modifierName": {
                  "id": 5789,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4463,
                  "src": "28050:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "28050:9:2"
              }
            ],
            "name": "_set1155Route",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5787,
                  "mutability": "mutable",
                  "name": "_newRoute",
                  "nodeType": "VariableDeclaration",
                  "scope": 5797,
                  "src": "28018:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5786,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "28018:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28017:25:2"
            },
            "returnParameters": {
              "id": 5791,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28060:0:2"
            },
            "scope": 6007,
            "src": "27995:113:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5809,
              "nodeType": "Block",
              "src": "28311:47:2",
              "statements": [
                {
                  "expression": {
                    "id": 5807,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 5805,
                      "name": "metadata721Route",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4439,
                      "src": "28322:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5806,
                      "name": "_newRoute",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5800,
                      "src": "28341:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "28322:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 5808,
                  "nodeType": "ExpressionStatement",
                  "src": "28322:28:2"
                }
              ]
            },
            "documentation": {
              "id": 5798,
              "nodeType": "StructuredDocumentation",
              "src": "28116:125:2",
              "text": " @notice Setting the URL route for ERC721 tokens metadata\n @param _newRoute   New route to be used"
            },
            "functionSelector": "7d64afde",
            "id": 5810,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5803,
                "modifierName": {
                  "id": 5802,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4463,
                  "src": "28301:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "28301:9:2"
              }
            ],
            "name": "_set721Route",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5801,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5800,
                  "mutability": "mutable",
                  "name": "_newRoute",
                  "nodeType": "VariableDeclaration",
                  "scope": 5810,
                  "src": "28269:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5799,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "28269:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28268:25:2"
            },
            "returnParameters": {
              "id": 5804,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28311:0:2"
            },
            "scope": 6007,
            "src": "28247:111:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5830,
              "nodeType": "Block",
              "src": "28800:149:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 5822,
                            "name": "metadataBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4435,
                            "src": "28873:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          {
                            "id": 5823,
                            "name": "metadata1155Route",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4437,
                            "src": "28887:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          {
                            "arguments": [
                              {
                                "id": 5825,
                                "name": "_tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5813,
                                "src": "28916:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 5824,
                              "name": "_uint2str",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6006,
                              "src": "28906:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (string memory)"
                              }
                            },
                            "id": 5826,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28906:19:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            },
                            {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            },
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "expression": {
                            "id": 5820,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "28856:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 5821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "28856:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 5827,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "28856:70:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5819,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "28831:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                        "typeString": "type(string storage pointer)"
                      },
                      "typeName": {
                        "id": 5818,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "28831:6:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 5828,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28831:110:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 5817,
                  "id": 5829,
                  "nodeType": "Return",
                  "src": "28811:130:2"
                }
              ]
            },
            "documentation": {
              "id": 5811,
              "nodeType": "StructuredDocumentation",
              "src": "28366:359:2",
              "text": " @notice A distinct Uniform Resource Identifier (URI) for a given token.\n @dev ERC-1155\n URIs are defined in RFC 3986. The URI MUST point to a JSON file that conforms to the \"ERC-1155 Metadata URI JSON Schema\".\n @param _tokenId  The ID of the token\n @return          Full URI string for metadata of the _tokenId"
            },
            "functionSelector": "0e89341c",
            "id": 5831,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "uri",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5813,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5831,
                  "src": "28744:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5812,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28744:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28743:18:2"
            },
            "returnParameters": {
              "id": 5817,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5816,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5831,
                  "src": "28785:13:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5815,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "28785:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28784:15:2"
            },
            "scope": 6007,
            "src": "28731:218:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 5839,
              "nodeType": "Block",
              "src": "29133:47:2",
              "statements": [
                {
                  "expression": {
                    "hexValue": "426f736f6e20536d61727420566f7563686572",
                    "id": 5837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "29151:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_e159fcbda7d26910aa4ad3595e63d436153de29c702fb8bd7431625d83ad332c",
                      "typeString": "literal_string \"Boson Smart Voucher\""
                    },
                    "value": "Boson Smart Voucher"
                  },
                  "functionReturnParameters": 5836,
                  "id": 5838,
                  "nodeType": "Return",
                  "src": "29144:28:2"
                }
              ]
            },
            "documentation": {
              "id": 5832,
              "nodeType": "StructuredDocumentation",
              "src": "28957:110:2",
              "text": " @notice A descriptive name for a collection of NFTs in this contract\n @dev ERC-721"
            },
            "functionSelector": "06fdde03",
            "id": 5840,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5833,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29086:2:2"
            },
            "returnParameters": {
              "id": 5836,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5835,
                  "mutability": "mutable",
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 5840,
                  "src": "29112:19:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5834,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "29112:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29111:21:2"
            },
            "scope": 6007,
            "src": "29073:107:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 5848,
              "nodeType": "Block",
              "src": "29353:31:2",
              "statements": [
                {
                  "expression": {
                    "hexValue": "425356",
                    "id": 5846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "29371:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_461172c92cee5274f34826f70861578ee76ece078643ef285832ecdd4c053844",
                      "typeString": "literal_string \"BSV\""
                    },
                    "value": "BSV"
                  },
                  "functionReturnParameters": 5845,
                  "id": 5847,
                  "nodeType": "Return",
                  "src": "29364:12:2"
                }
              ]
            },
            "documentation": {
              "id": 5841,
              "nodeType": "StructuredDocumentation",
              "src": "29188:95:2",
              "text": " @notice An abbreviated name for NFTs in this contract\n @dev ERC-721"
            },
            "functionSelector": "95d89b41",
            "id": 5849,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5842,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29304:2:2"
            },
            "returnParameters": {
              "id": 5845,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5844,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 5849,
                  "src": "29330:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5843,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "29330:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29329:23:2"
            },
            "scope": 6007,
            "src": "29289:95:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 5881,
              "nodeType": "Block",
              "src": "29790:215:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5865,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 5858,
                            "name": "owners721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4423,
                            "src": "29809:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                              "typeString": "mapping(uint256 => address)"
                            }
                          },
                          "id": 5860,
                          "indexExpression": {
                            "id": 5859,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5852,
                            "src": "29819:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "29809:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5863,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "29840:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5862,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "29832:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5861,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "29832:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29832:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "29809:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f4944",
                        "id": 5866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "29844:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b52f3514e43e374c92e7204127699761905777b31513f628693a3c35ef97334d",
                          "typeString": "literal_string \"INVALID_ID\""
                        },
                        "value": "INVALID_ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b52f3514e43e374c92e7204127699761905777b31513f628693a3c35ef97334d",
                          "typeString": "literal_string \"INVALID_ID\""
                        }
                      ],
                      "id": 5857,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "29801:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29801:56:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5868,
                  "nodeType": "ExpressionStatement",
                  "src": "29801:56:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 5873,
                            "name": "metadataBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4435,
                            "src": "29930:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          {
                            "id": 5874,
                            "name": "metadata721Route",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4439,
                            "src": "29944:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          {
                            "arguments": [
                              {
                                "id": 5876,
                                "name": "_tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5852,
                                "src": "29972:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 5875,
                              "name": "_uint2str",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6006,
                              "src": "29962:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (string memory)"
                              }
                            },
                            "id": 5877,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "29962:19:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            },
                            {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            },
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "expression": {
                            "id": 5871,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "29913:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 5872,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "29913:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 5878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "29913:69:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5870,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "29888:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                        "typeString": "type(string storage pointer)"
                      },
                      "typeName": {
                        "id": 5869,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "29888:6:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 5879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29888:109:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 5856,
                  "id": 5880,
                  "nodeType": "Return",
                  "src": "29868:129:2"
                }
              ]
            },
            "documentation": {
              "id": 5850,
              "nodeType": "StructuredDocumentation",
              "src": "29392:318:2",
              "text": " @notice A distinct Uniform Resource Identifier (URI) for a given asset.\n @dev ERC-721\n Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC 3986. The URI may point to a JSON file that conforms to the \"ERC721 Metadata JSON Schema\".\n @param _tokenId  ID of the token"
            },
            "functionSelector": "c87b56dd",
            "id": 5882,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokenURI",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5852,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5882,
                  "src": "29734:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5851,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29734:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29733:18:2"
            },
            "returnParameters": {
              "id": 5856,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5855,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5882,
                  "src": "29775:13:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5854,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "29775:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29774:15:2"
            },
            "scope": 6007,
            "src": "29716:289:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 5903,
              "nodeType": "Block",
              "src": "30402:135:2",
              "statements": [
                {
                  "expression": {
                    "id": 5895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 5893,
                      "name": "voucherKernelAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4407,
                      "src": "30413:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5894,
                      "name": "_voucherKernelAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5885,
                      "src": "30436:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "30413:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5896,
                  "nodeType": "ExpressionStatement",
                  "src": "30413:44:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 5898,
                        "name": "_voucherKernelAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5885,
                        "src": "30495:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 5899,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "30518:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5900,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "30518:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5897,
                      "name": "LogVoucherKernelSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4445,
                      "src": "30475:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 5901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30475:54:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5902,
                  "nodeType": "EmitStatement",
                  "src": "30470:59:2"
                }
              ]
            },
            "documentation": {
              "id": 5883,
              "nodeType": "StructuredDocumentation",
              "src": "30087:156:2",
              "text": " @notice Set the address of the VoucherKernel contract\n @param _voucherKernelAddress   The address of the Voucher Kernel contract"
            },
            "functionSelector": "d95be43a",
            "id": 5904,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5888,
                "modifierName": {
                  "id": 5887,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4463,
                  "src": "30340:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "30340:9:2"
              },
              {
                "arguments": [
                  {
                    "id": 5890,
                    "name": "_voucherKernelAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5885,
                    "src": "30374:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 5891,
                "modifierName": {
                  "id": 5889,
                  "name": "notZeroAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4501,
                  "src": "30359:14:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "30359:37:2"
              }
            ],
            "name": "setVoucherKernelAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5885,
                  "mutability": "mutable",
                  "name": "_voucherKernelAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 5904,
                  "src": "30282:29:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5884,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "30282:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30281:31:2"
            },
            "returnParameters": {
              "id": 5892,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30402:0:2"
            },
            "scope": 6007,
            "src": "30249:288:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 5925,
              "nodeType": "Block",
              "src": "30835:125:2",
              "statements": [
                {
                  "expression": {
                    "id": 5917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 5915,
                      "name": "bosonRouterAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4409,
                      "src": "30846:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5916,
                      "name": "_bosonRouterAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5907,
                      "src": "30867:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "30846:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5918,
                  "nodeType": "ExpressionStatement",
                  "src": "30846:40:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 5920,
                        "name": "_bosonRouterAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5907,
                        "src": "30920:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 5921,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "30941:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5922,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "30941:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5919,
                      "name": "LogBosonRouterSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4451,
                      "src": "30902:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 5923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30902:50:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5924,
                  "nodeType": "EmitStatement",
                  "src": "30897:55:2"
                }
              ]
            },
            "documentation": {
              "id": 5905,
              "nodeType": "StructuredDocumentation",
              "src": "30545:137:2",
              "text": " @notice Set the address of the Boson Router contract\n @param _bosonRouterAddress   The Boson Router  contract"
            },
            "functionSelector": "bd17de40",
            "id": 5926,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5910,
                "modifierName": {
                  "id": 5909,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4463,
                  "src": "30775:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "30775:9:2"
              },
              {
                "arguments": [
                  {
                    "id": 5912,
                    "name": "_bosonRouterAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5907,
                    "src": "30809:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 5913,
                "modifierName": {
                  "id": 5911,
                  "name": "notZeroAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4501,
                  "src": "30794:14:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "30794:35:2"
              }
            ],
            "name": "setBosonRouterAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5908,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5907,
                  "mutability": "mutable",
                  "name": "_bosonRouterAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 5926,
                  "src": "30719:27:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5906,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "30719:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30718:29:2"
            },
            "returnParameters": {
              "id": 5914,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30835:0:2"
            },
            "scope": 6007,
            "src": "30688:272:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6005,
              "nodeType": "Block",
              "src": "31314:416:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5936,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5934,
                      "name": "_i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5929,
                      "src": "31329:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 5935,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31335:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "31329:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5940,
                  "nodeType": "IfStatement",
                  "src": "31325:50:2",
                  "trueBody": {
                    "id": 5939,
                    "nodeType": "Block",
                    "src": "31338:37:2",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 5937,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "31360:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
                            "typeString": "literal_string \"0\""
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 5933,
                        "id": 5938,
                        "nodeType": "Return",
                        "src": "31353:10:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5942
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5942,
                      "mutability": "mutable",
                      "name": "j",
                      "nodeType": "VariableDeclaration",
                      "scope": 6005,
                      "src": "31385:9:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5941,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31385:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5944,
                  "initialValue": {
                    "id": 5943,
                    "name": "_i",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5929,
                    "src": "31397:2:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31385:14:2"
                },
                {
                  "assignments": [
                    5946
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5946,
                      "mutability": "mutable",
                      "name": "len",
                      "nodeType": "VariableDeclaration",
                      "scope": 6005,
                      "src": "31410:11:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5945,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31410:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5947,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31410:11:2"
                },
                {
                  "body": {
                    "id": 5958,
                    "nodeType": "Block",
                    "src": "31447:54:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 5952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "31462:5:2",
                          "subExpression": {
                            "id": 5951,
                            "name": "len",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5946,
                            "src": "31462:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5953,
                        "nodeType": "ExpressionStatement",
                        "src": "31462:5:2"
                      },
                      {
                        "expression": {
                          "id": 5956,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5954,
                            "name": "j",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5942,
                            "src": "31482:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "/=",
                          "rightHandSide": {
                            "hexValue": "3130",
                            "id": 5955,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "31487:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_10_by_1",
                              "typeString": "int_const 10"
                            },
                            "value": "10"
                          },
                          "src": "31482:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5957,
                        "nodeType": "ExpressionStatement",
                        "src": "31482:7:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5948,
                      "name": "j",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5942,
                      "src": "31439:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 5949,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31444:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "31439:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5959,
                  "nodeType": "WhileStatement",
                  "src": "31432:69:2"
                },
                {
                  "assignments": [
                    5961
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5961,
                      "mutability": "mutable",
                      "name": "bstr",
                      "nodeType": "VariableDeclaration",
                      "scope": 6005,
                      "src": "31511:17:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5960,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "31511:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5966,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 5964,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5946,
                        "src": "31541:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5963,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "31531:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 5962,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "31535:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 5965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31531:14:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31511:34:2"
                },
                {
                  "assignments": [
                    5968
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5968,
                      "mutability": "mutable",
                      "name": "k",
                      "nodeType": "VariableDeclaration",
                      "scope": 6005,
                      "src": "31556:9:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5967,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31556:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5972,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5969,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5946,
                      "src": "31568:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 5970,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31574:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "31568:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31556:19:2"
                },
                {
                  "body": {
                    "id": 5998,
                    "nodeType": "Block",
                    "src": "31602:91:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 5992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5976,
                              "name": "bstr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5961,
                              "src": "31617:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 5979,
                            "indexExpression": {
                              "id": 5978,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "--",
                              "prefix": false,
                              "src": "31622:3:2",
                              "subExpression": {
                                "id": 5977,
                                "name": "k",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5968,
                                "src": "31622:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "31617:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5989,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "3438",
                                      "id": 5984,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "31642:2:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_48_by_1",
                                        "typeString": "int_const 48"
                                      },
                                      "value": "48"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 5987,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 5985,
                                            "name": "_i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5929,
                                            "src": "31648:2:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "%",
                                          "rightExpression": {
                                            "hexValue": "3130",
                                            "id": 5986,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "31653:2:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_10_by_1",
                                              "typeString": "int_const 10"
                                            },
                                            "value": "10"
                                          },
                                          "src": "31648:7:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 5988,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "31647:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "31642:14:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 5983,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "31636:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint8_$",
                                    "typeString": "type(uint8)"
                                  },
                                  "typeName": {
                                    "id": 5982,
                                    "name": "uint8",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "31636:5:2",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5990,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "31636:21:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 5981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "31629:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes1_$",
                                "typeString": "type(bytes1)"
                              },
                              "typeName": {
                                "id": 5980,
                                "name": "bytes1",
                                "nodeType": "ElementaryTypeName",
                                "src": "31629:6:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5991,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31629:29:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "src": "31617:41:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 5993,
                        "nodeType": "ExpressionStatement",
                        "src": "31617:41:2"
                      },
                      {
                        "expression": {
                          "id": 5996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5994,
                            "name": "_i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5929,
                            "src": "31673:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "/=",
                          "rightHandSide": {
                            "hexValue": "3130",
                            "id": 5995,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "31679:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_10_by_1",
                              "typeString": "int_const 10"
                            },
                            "value": "10"
                          },
                          "src": "31673:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5997,
                        "nodeType": "ExpressionStatement",
                        "src": "31673:8:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5973,
                      "name": "_i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5929,
                      "src": "31593:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 5974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31599:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "31593:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5999,
                  "nodeType": "WhileStatement",
                  "src": "31586:107:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6002,
                        "name": "bstr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5961,
                        "src": "31717:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 6001,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "31710:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                        "typeString": "type(string storage pointer)"
                      },
                      "typeName": {
                        "id": 6000,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "31710:6:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 6003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31710:12:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 5933,
                  "id": 6004,
                  "nodeType": "Return",
                  "src": "31703:19:2"
                }
              ]
            },
            "documentation": {
              "id": 5927,
              "nodeType": "StructuredDocumentation",
              "src": "30968:225:2",
              "text": " @notice Convert UINT to string\n  Thank you, Oraclize (aka Provable)!\n      https://github.com/provable-things/ethereum-api/blob/master/provableAPI_0.5.sol\n @param _i    uint parameter"
            },
            "id": 6006,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_uint2str",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5930,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5929,
                  "mutability": "mutable",
                  "name": "_i",
                  "nodeType": "VariableDeclaration",
                  "scope": 6006,
                  "src": "31218:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5928,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31218:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "31217:12:2"
            },
            "returnParameters": {
              "id": 5933,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5932,
                  "mutability": "mutable",
                  "name": "_uintAsString",
                  "nodeType": "VariableDeclaration",
                  "scope": 6006,
                  "src": "31280:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5931,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "31280:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "31279:29:2"
            },
            "scope": 6007,
            "src": "31199:531:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 6008,
        "src": "683:31050:2"
      }
    ],
    "src": "49:31686:2"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.1+commit.f4a555be.Emscripten.clang"
  },
  "networks": {
    "4": {
      "events": {
        "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_approved",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "_tokenId",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_operator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bool",
              "name": "_approved",
              "type": "bool"
            }
          ],
          "name": "ApprovalForAll",
          "type": "event"
        },
        "0xac81fe7dd460bb5162a4a7d8fb92a13bd2baf450914fc6b1c4cc3180eba55af0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "_newBosonRouter",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogBosonRouterSet",
          "type": "event"
        },
        "0x94d4208cb05337821fef5da6205084b70818af988524d8a2609a53a1ac1033d1": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "_newVoucherKernel",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogVoucherKernelSet",
          "type": "event"
        },
        "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_to",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "_tokenId",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        },
        "0x4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_operator",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256[]",
              "name": "_ids",
              "type": "uint256[]"
            },
            {
              "indexed": false,
              "internalType": "uint256[]",
              "name": "_values",
              "type": "uint256[]"
            }
          ],
          "name": "TransferBatch",
          "type": "event"
        },
        "0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_operator",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_id",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_value",
              "type": "uint256"
            }
          ],
          "name": "TransferSingle",
          "type": "event"
        },
        "0x6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "string",
              "name": "_value",
              "type": "string"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "_id",
              "type": "uint256"
            }
          ],
          "name": "URI",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x33F29C1e2F61Bb58226d79B4D8451509a899c06e",
      "transactionHash": "0xf6070f80d8b219d206f75202b26d8e00bf83e060c7659eb47f67f70c1bf187a8"
    },
    "5777": {
      "events": {
        "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_approved",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "_tokenId",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_operator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bool",
              "name": "_approved",
              "type": "bool"
            }
          ],
          "name": "ApprovalForAll",
          "type": "event"
        },
        "0xac81fe7dd460bb5162a4a7d8fb92a13bd2baf450914fc6b1c4cc3180eba55af0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "_newBosonRouter",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogBosonRouterSet",
          "type": "event"
        },
        "0x94d4208cb05337821fef5da6205084b70818af988524d8a2609a53a1ac1033d1": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "_newVoucherKernel",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogVoucherKernelSet",
          "type": "event"
        },
        "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_to",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "_tokenId",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        },
        "0x4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_operator",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256[]",
              "name": "_ids",
              "type": "uint256[]"
            },
            {
              "indexed": false,
              "internalType": "uint256[]",
              "name": "_values",
              "type": "uint256[]"
            }
          ],
          "name": "TransferBatch",
          "type": "event"
        },
        "0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_operator",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_id",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_value",
              "type": "uint256"
            }
          ],
          "name": "TransferSingle",
          "type": "event"
        },
        "0x6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "string",
              "name": "_value",
              "type": "string"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "_id",
              "type": "uint256"
            }
          ],
          "name": "URI",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x1763E3C5c4Cbd73D505eD485ae9Df2d61B1b3234",
      "transactionHash": "0x370d15a8ed8ec357042449e729ec5ea653089282f5ebc2e38c5ebdf684eec315"
    }
  },
  "schemaVersion": "3.2.5",
  "updatedAt": "2021-03-20T16:53:09.144Z",
  "networkType": "ethereum",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "_set1155Route(string)": {
        "params": {
          "_newRoute": "New route to be used"
        }
      },
      "_set721Route(string)": {
        "params": {
          "_newRoute": "New route to be used"
        }
      },
      "_setMetadataBase(string)": {
        "params": {
          "_newBase": "New prefix to be used"
        }
      },
      "approve(address,uint256)": {
        "details": "ERC-721",
        "params": {
          "_to": "address to be approved for the given token ID",
          "_tokenId": "uint256 ID of the token to be approved"
        }
      },
      "balanceOf(address)": {
        "details": "ERC-721",
        "params": {
          "_owner": "An address for whom to query the balance"
        },
        "returns": {
          "_0": "The number of NFTs owned by `_owner`, possibly zero"
        }
      },
      "balanceOf(address,uint256)": {
        "details": "ERC-1155",
        "params": {
          "_account": "The address of the token holder",
          "_tokenId": "ID of the token"
        },
        "returns": {
          "_0": "balance"
        }
      },
      "balanceOfBatch(address[],uint256[])": {
        "details": "ERC-1155",
        "params": {
          "_accounts": "The addresses of the token holders",
          "_tokenIds": "IDs of the tokens"
        },
        "returns": {
          "_0": "balances"
        }
      },
      "burn(address,uint256,uint256)": {
        "details": "ERC-1155",
        "params": {
          "_account": "Account which owns the token",
          "_tokenId": "ID of the token",
          "_value": "Amount of the token"
        }
      },
      "burnBatch(address,uint256[],uint256[])": {
        "details": "ERC-1155",
        "params": {
          "_account": "Account which owns the token",
          "_tokenIds": "IDs of the tokens",
          "_values": "Amounts of the tokens"
        }
      },
      "getApproved(uint256)": {
        "details": "ERC-721",
        "params": {
          "_tokenId": "uint256 ID of the token to query the approval of"
        },
        "returns": {
          "_0": "address currently approved for the given token ID"
        }
      },
      "isApprovedForAll(address,address)": {
        "details": "ERC-1155 & ERC-721",
        "params": {
          "_account": "token holder",
          "_operator": "operator to check"
        },
        "returns": {
          "_0": "True if the operator is approved, false if not"
        }
      },
      "mint(address,uint256)": {
        "details": "ERC-721",
        "params": {
          "to": "The address that will receive the minted tokens.",
          "tokenId": "The token id to mint."
        },
        "returns": {
          "_0": "A boolean that indicates if the operation was successful."
        }
      },
      "mint(address,uint256,uint256,bytes)": {
        "details": "ERC-1155",
        "params": {
          "_data": "Additional data forwarded to onERC1155BatchReceived if _to is a contract",
          "_to": "owner of the minted token",
          "_tokenId": "ID of the token to be minted",
          "_value": "Amount of the token to be minted"
        }
      },
      "mintBatch(address,uint256[],uint256[],bytes)": {
        "details": "ERC-1155",
        "params": {
          "_data": "Additional data forwarded to onERC1155BatchReceived if _to is a contract",
          "_to": "The address that will own the minted token",
          "_tokenIds": "IDs of the tokens to be minted",
          "_values": "Amounts of the tokens to be minted"
        }
      },
      "name()": {
        "details": "ERC-721"
      },
      "ownerOf(uint256)": {
        "details": "ERC-721",
        "params": {
          "_tokenId": "uint256 ID of the token to query the owner of"
        },
        "returns": {
          "_0": "address currently marked as the owner of the given token ID"
        }
      },
      "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": {
        "details": "ERC-1155",
        "params": {
          "_data": "Additional data forwarded to onERC1155BatchReceived if _to is a contract",
          "_from": "Source address",
          "_to": "Destination address",
          "_tokenIds": "array of token IDs",
          "_values": "array of transfer amounts"
        }
      },
      "safeTransferFrom(address,address,uint256)": {
        "details": "ERC-721",
        "params": {
          "_from": "current owner of the token",
          "_to": "address to receive the ownership of the given token ID",
          "_tokenId": "uint256 ID of the token to be transferred"
        }
      },
      "safeTransferFrom(address,address,uint256,bytes)": {
        "details": "ERC-721",
        "params": {
          "_data": "bytes data to send along with a safe transfer check",
          "_from": "current owner of the token",
          "_to": "address to receive the ownership of the given token ID",
          "_tokenId": "uint256 ID of the token to be transferred"
        }
      },
      "safeTransferFrom(address,address,uint256,uint256,bytes)": {
        "details": "ERC-1155",
        "params": {
          "_data": "Additional data forwarded to onERC1155Received if _to is a contract",
          "_from": "Source address",
          "_to": "Destination address",
          "_tokenId": "ID of the token",
          "_value": "Transfer amount"
        }
      },
      "setApprovalForAll(address,bool)": {
        "details": "ERC-1155 & ERC-721",
        "params": {
          "_approve": "flag to set or unset",
          "_operator": "to (un)approve"
        }
      },
      "setBosonRouterAddress(address)": {
        "params": {
          "_bosonRouterAddress": "The Boson Router  contract"
        }
      },
      "setVoucherKernelAddress(address)": {
        "params": {
          "_voucherKernelAddress": "The address of the Voucher Kernel contract"
        }
      },
      "symbol()": {
        "details": "ERC-721"
      },
      "tokenURI(uint256)": {
        "details": "ERC-721 Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC 3986. The URI may point to a JSON file that conforms to the \"ERC721 Metadata JSON Schema\".",
        "params": {
          "_tokenId": "ID of the token"
        }
      },
      "transferFrom(address,address,uint256)": {
        "details": "ERC-721",
        "params": {
          "_from": "current owner of the token",
          "_to": "address to receive the ownership of the given token ID",
          "_tokenId": "uint256 ID of the token to be transferred"
        }
      },
      "uri(uint256)": {
        "details": "ERC-1155 URIs are defined in RFC 3986. The URI MUST point to a JSON file that conforms to the \"ERC-1155 Metadata URI JSON Schema\".",
        "params": {
          "_tokenId": "The ID of the token"
        },
        "returns": {
          "_0": "Full URI string for metadata of the _tokenId"
        }
      }
    },
    "title": "Multi-token contract, implementing ERC-1155 and ERC-721 hybrid  Inspired by: https://github.com/pixowl/sandbox-smart-contracts",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "_set1155Route(string)": {
        "notice": "Setting the URL route for ERC1155 tokens metadata"
      },
      "_set721Route(string)": {
        "notice": "Setting the URL route for ERC721 tokens metadata"
      },
      "_setMetadataBase(string)": {
        "notice": "Setting the URL prefix for tokens metadata"
      },
      "approve(address,uint256)": {
        "notice": "Approves another address to transfer the given token ID The zero address indicates there is no approved address. There can only be one approved address per token at a given time. Can only be called by the token owner or an approved operator."
      },
      "balanceOf(address)": {
        "notice": "Count all NFTs assigned to an owner"
      },
      "balanceOf(address,uint256)": {
        "notice": "Get the balance of tokens of an account"
      },
      "balanceOfBatch(address[],uint256[])": {
        "notice": "Get the balance of account-token pairs."
      },
      "burn(address,uint256,uint256)": {
        "notice": "Burn an amount of tokens with the given ID"
      },
      "burnBatch(address,uint256[],uint256[])": {
        "notice": "Batch burn an amounts of tokens"
      },
      "getApproved(uint256)": {
        "notice": "Gets the approved address for a token ID, or zero if no address set Reverts if the token ID does not exist."
      },
      "isApprovedForAll(address,address)": {
        "notice": "Gets approval status of an operator for a given account."
      },
      "mint(address,uint256)": {
        "notice": "Function to mint tokens."
      },
      "mint(address,uint256,uint256,bytes)": {
        "notice": "Mint an amount of a desired token Currently no restrictions as to who is allowed to mint - so, it is public."
      },
      "mintBatch(address,uint256[],uint256[],bytes)": {
        "notice": "Batch minting of tokens Currently no restrictions as to who is allowed to mint - so, it is public."
      },
      "name()": {
        "notice": "A descriptive name for a collection of NFTs in this contract"
      },
      "ownerOf(uint256)": {
        "notice": "Gets the owner of the specified token ID."
      },
      "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": {
        "notice": "Transfers amount of _tokenId from-to addresses with safety call. If _to is a smart contract, will call onERC1155BatchReceived"
      },
      "safeTransferFrom(address,address,uint256)": {
        "notice": "Safely transfers the ownership of a given token ID to another address If the target address is a contract, it must implement `onERC721Received`, which is called upon a safe transfer, and return the magic value `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`; otherwise, the transfer is reverted. Requires the msg.sender to be the owner, approved, or operator"
      },
      "safeTransferFrom(address,address,uint256,bytes)": {
        "notice": "Safely transfers the ownership of a given token ID to another address If the target address is a contract, it must implement `onERC721Received` Requires the msg.sender to be the owner, approved, or operator"
      },
      "safeTransferFrom(address,address,uint256,uint256,bytes)": {
        "notice": "Transfers amount of _tokenId from-to addresses with safety call. If _to is a smart contract, will call onERC1155Received"
      },
      "setApprovalForAll(address,bool)": {
        "notice": "Approves or unapproves the operator. will revert if the caller attempts to approve itself as it is redundant"
      },
      "setBosonRouterAddress(address)": {
        "notice": "Set the address of the Boson Router contract"
      },
      "setVoucherKernelAddress(address)": {
        "notice": "Set the address of the VoucherKernel contract"
      },
      "supportsInterface(bytes4)": {
        "notice": "Returns true if this contract implements the interface defined by _interfaceId_. This function call must use less than 30 000 gas. ATM not enforced."
      },
      "symbol()": {
        "notice": "An abbreviated name for NFTs in this contract"
      },
      "tokenURI(uint256)": {
        "notice": "A distinct Uniform Resource Identifier (URI) for a given asset."
      },
      "transferFrom(address,address,uint256)": {
        "notice": "Transfers the ownership of a given token ID to another address. Usage of this method is discouraged, use `safeTransferFrom` whenever possible. Requires the msg.sender to be the owner, approved, or operator."
      },
      "uri(uint256)": {
        "notice": "A distinct Uniform Resource Identifier (URI) for a given token."
      }
    },
    "version": 1
  }
}