sdk-monorepo/abis/TornadoRouter.json
AlienTornadosaurusHex 19c687c9d2 0.0.13-alpha
Signed-off-by: AlienTornadosaurusHex <>
2023-06-10 20:27:32 +00:00

6528 lines
308 KiB
JSON

{
"contractName": "TornadoRouter",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_governanceProxyAddress",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes",
"name": "encryptedNote",
"type": "bytes"
}
],
"name": "EncryptedNote",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "newInstanceRegistryProxyAddress",
"type": "address"
}
],
"name": "InstanceRegistryUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "newRelayerRegistryProxyAddress",
"type": "address"
}
],
"name": "RelayerRegistryUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "TokenApproved",
"type": "event"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "_token",
"type": "address"
},
{
"internalType": "address",
"name": "_spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "approveTokenForInstance",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes[]",
"name": "_encryptedNotes",
"type": "bytes[]"
}
],
"name": "backupNotes",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract ITornadoInstance",
"name": "_tornado",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_commitment",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "_encryptedNote",
"type": "bytes"
}
],
"name": "deposit",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "governanceProxyAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_instanceRegistryAddress",
"type": "address"
},
{
"internalType": "address",
"name": "_relayerRegistryAddress",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "instanceRegistry",
"outputs": [
{
"internalType": "contract InstanceRegistry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "relayerRegistry",
"outputs": [
{
"internalType": "contract RelayerRegistry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "_token",
"type": "address"
},
{
"internalType": "address payable",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "rescueTokens",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newInstanceRegistryProxyAddress",
"type": "address"
}
],
"name": "setInstanceRegistry",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newRelayerRegistryProxyAddress",
"type": "address"
}
],
"name": "setRelayerRegistry",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "version",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract ITornadoInstance",
"name": "_tornado",
"type": "address"
},
{
"internalType": "bytes",
"name": "_proof",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "_root",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_nullifierHash",
"type": "bytes32"
},
{
"internalType": "address payable",
"name": "_recipient",
"type": "address"
},
{
"internalType": "address payable",
"name": "_relayer",
"type": "address"
},
{
"internalType": "uint256",
"name": "_fee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_refund",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "payable",
"type": "function"
}
],
"bytecode": {
"object": "0x60a060405234801561001057600080fd5b506040516115b03803806115b083398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c61150d6100a3600039806103f1528061042d5280610647528061086d5280610907525061150d6000f3fe6080604052600436106100975760003560e01c806313d98d131461009c57806336a3874b146100b15780634655478f146100dc57806347ff589d146100f1578063485cc955146101065780634b704c971461012657806354fd4d50146101465780636485ba2a1461016857806364cb281114610188578063b438689f146101a8578063baaa2169146101bb578063cea9d26f146101db575b600080fd5b6100af6100aa366004610f3f565b6101fb565b005b3480156100bd57600080fd5b506100c66103da565b6040516100d39190611096565b60405180910390f35b3480156100e857600080fd5b506100c66103ef565b3480156100fd57600080fd5b506100c6610413565b34801561011257600080fd5b506100af610121366004610dc0565b610422565b34801561013257600080fd5b506100af610141366004610ec2565b610530565b34801561015257600080fd5b5061015b6105ba565b6040516100d39190611193565b34801561017457600080fd5b506100af610183366004610df8565b6105e5565b34801561019457600080fd5b506100af6101a3366004610da4565b61063c565b6100af6101b6366004610f98565b6106da565b3480156101c757600080fd5b506100af6101d6366004610da4565b610862565b3480156101e757600080fd5b506100af6101f6366004610e82565b6108fc565b60008054604051636695ad4960e11b815282918291620100009091046001600160a01b03169063cd2b5a9290610235908a90600401611096565b60806040518083038186803b15801561024d57600080fd5b505afa158015610261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102859190610ed6565b93509350509250806102b25760405162461bcd60e51b81526004016102a9906111fd565b60405180910390fd5b8115610340576103403330896001600160a01b0316638bca6d166040518163ffffffff1660e01b815260040160206040518083038186803b1580156102f657600080fd5b505afa15801561030a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032e9190611038565b6001600160a01b038716929190610a90565b60405163b214faa560e01b81526001600160a01b0388169063b214faa590349061036e908a90600401611124565b6000604051808303818588803b15801561038757600080fd5b505af115801561039b573d6000803e3d6000fd5b5050505050336001600160a01b03166000805160206114b883398151915286866040516103c992919061112d565b60405180910390a250505050505050565b6000546201000090046001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031681565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461046a5760405162461bcd60e51b81526004016102a9906111c6565b600054610100900460ff16806104835750610483610aee565b80610491575060005460ff16155b6104ad5760405162461bcd60e51b81526004016102a990611240565b600054610100900460ff161580156104d8576000805460ff1961ff0019909116610100171660011790555b6000805462010000600160b01b031916620100006001600160a01b038681169190910291909117909155600180546001600160a01b031916918416919091179055801561052b576000805461ff00191690555b505050565b6000546201000090046001600160a01b031633146105605760405162461bcd60e51b81526004016102a9906113de565b6105746001600160a01b0384168383610af4565b816001600160a01b03167fab1e93ce08cc196e636fe318c052f82163b40e499a90a0fdb38912ecd5beae11826040516105ad9190611124565b60405180910390a2505050565b6040805180820190915260118152703b1916b7b930b1b63296b6b0b730b3b2b960791b602082015290565b60005b8181101561052b57336000805160206114b883398151915284848481811061060c57fe5b905060200281019061061e9190611421565b60405161062c92919061112d565b60405180910390a26001016105e8565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106845760405162461bcd60e51b81526004016102a9906111c6565b600180546001600160a01b0319166001600160a01b0383161790556040517fd3c0577a88b56268da0350a01cb491fb15be69982729d9cb066a0603d1fc54b8906106cf908390611096565b60405180910390a150565b60008054604051636695ad4960e11b8152620100009091046001600160a01b03169063cd2b5a9290610710908d90600401611096565b60806040518083038186803b15801561072857600080fd5b505afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190610ed6565b9350505050806107825760405162461bcd60e51b81526004016102a9906111fd565b600154604051631168473b60e21b81526001600160a01b03909116906345a11cec906107b690339088908f906004016110aa565b600060405180830381600087803b1580156107d057600080fd5b505af11580156107e4573d6000803e3d6000fd5b50506040516310d056db60e11b81526001600160a01b038d1692506321a0adb691503490610824908d908d908d908d908d908d908d908d90600401611141565b6000604051808303818588803b15801561083d57600080fd5b505af1158015610851573d6000803e3d6000fd5b505050505050505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108aa5760405162461bcd60e51b81526004016102a9906111c6565b6000805462010000600160b01b031916620100006001600160a01b038416021790556040517fcea779b12676b53bc3062b0064b8a14145a271c42db27627a1895a67324f64cb906106cf908390611096565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109445760405162461bcd60e51b81526004016102a9906111c6565b6001600160a01b03821661096a5760405162461bcd60e51b81526004016102a9906112c5565b6001600160a01b0383166109c6574760006109858284610bb7565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f193505050501580156109be573d6000803e3d6000fd5b50505061052b565b6040516370a0823160e01b81526000906001600160a01b038516906370a08231906109f5903090600401611096565b60206040518083038186803b158015610a0d57600080fd5b505afa158015610a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a459190611038565b90506000610a538284610bb7565b905060008111610a755760405162461bcd60e51b81526004016102a990611351565b610a896001600160a01b0386168583610bcf565b5050505050565b610ae8846323b872dd60e01b858585604051602401610ab1939291906110e7565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610bee565b50505050565b303b1590565b801580610b7c5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90610b2a90309086906004016110cd565b60206040518083038186803b158015610b4257600080fd5b505afa158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a9190611038565b155b610b985760405162461bcd60e51b81526004016102a990611388565b61052b8363095ea7b360e01b8484604051602401610ab192919061110b565b6000818310610bc65781610bc8565b825b9392505050565b61052b8363a9059cbb60e01b8484604051602401610ab192919061110b565b6060610c43826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c7d9092919063ffffffff16565b80519091501561052b5780806020019051810190610c619190610e66565b61052b5760405162461bcd60e51b81526004016102a990611307565b6060610c8c8484600085610c94565b949350505050565b6060610c9f85610d58565b610cbb5760405162461bcd60e51b81526004016102a99061128e565b60006060866001600160a01b03168587604051610cd8919061107a565b60006040518083038185875af1925050503d8060008114610d15576040519150601f19603f3d011682016040523d82523d6000602084013e610d1a565b606091505b50915091508115610d2e579150610c8c9050565b805115610d3e5780518082602001fd5b8360405162461bcd60e51b81526004016102a99190611193565b3b151590565b60008083601f840112610d6f578182fd5b5081356001600160401b03811115610d85578182fd5b602083019150836020828501011115610d9d57600080fd5b9250929050565b600060208284031215610db5578081fd5b8135610bc881611491565b60008060408385031215610dd2578081fd5b8235610ddd81611491565b91506020830135610ded81611491565b809150509250929050565b60008060208385031215610e0a578182fd5b82356001600160401b0380821115610e20578384fd5b818501915085601f830112610e33578384fd5b813581811115610e41578485fd5b8660208083028501011115610e54578485fd5b60209290920196919550909350505050565b600060208284031215610e77578081fd5b8151610bc8816114a9565b600080600060608486031215610e96578081fd5b8335610ea181611491565b92506020840135610eb181611491565b929592945050506040919091013590565b600080600060608486031215610e96578283fd5b60008060008060808587031215610eeb578081fd5b8451610ef681611491565b60208601519094506001600160501b0381168114610f12578182fd5b6040860151909350610f23816114a9565b6060860151909250610f34816114a9565b939692955090935050565b60008060008060608587031215610f54578384fd5b8435610f5f81611491565b93506020850135925060408501356001600160401b03811115610f80578283fd5b610f8c87828801610d5e565b95989497509550505050565b60008060008060008060008060006101008a8c031215610fb6578485fd5b8935610fc181611491565b985060208a01356001600160401b03811115610fdb578586fd5b610fe78c828d01610d5e565b90995097505060408a0135955060608a0135945060808a013561100981611491565b935060a08a013561101981611491565b8093505060c08a0135915060e08a013590509295985092959850929598565b600060208284031215611049578081fd5b5051919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6000825161108c818460208701611465565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b90815260200190565b600060208252610c8c602083018486611050565b600060e0825261115560e083018a8c611050565b60208301989098525060408101959095526001600160a01b03938416606086015291909216608084015260a083019190915260c09091015292915050565b60006020825282518060208401526111b2816040850160208701611465565b601f01601f19169190910160400192915050565b6020808252601d908201527f546f726e61646f526f757465723a206f6e6c79476f7665726e616e6365000000604082015260600190565b60208082526023908201527f546f726e61646f526f757465723a20696e7374616e6365206e6f7420656e61626040820152621b195960ea1b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526022908201527f544f524e3a2063616e206e6f742073656e6420746f207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601e908201527f544f524e3a20747279696e6720746f2073656e6420302062616c616e63650000604082015260600190565b60208082526036908201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606082015260800190565b60208082526023908201527f546f726e61646f526f757465723a206f6e6c79496e7374616e6365526567697360408201526274727960e81b606082015260800190565b6000808335601e19843603018112611437578283fd5b8301803591506001600160401b03821115611450578283fd5b602001915036819003821315610d9d57600080fd5b60005b83811015611480578181015183820152602001611468565b83811115610ae85750506000910152565b6001600160a01b03811681146114a657600080fd5b50565b80151581146114a657600080fdfefa28df43db3553771f7209dcef046f3bdfea15870ab625dcda30ac58b82b4008a2646970667358221220526b6f98f0226b043a554c9a0c6eb190a453d379dbf6d0b0804bec30140c148764736f6c634300060c0033",
"sourceMap": "938:4825:67:-:0;;;1841:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1903:48;;-1:-1:-1;;;;;;1903:48:67;;;938:4825;;146:263:-1;;261:2;249:9;240:7;236:23;232:32;229:2;;;-1:-1;;267:12;229:2;83:13;;-1:-1;;;;;576:54;;701:35;;691:2;;-1:-1;;740:12;691:2;319:74;223:186;-1:-1;;;223:186::o;:::-;938:4825:67;;;;;;;;;;;",
"linkReferences": {}
},
"deployedBytecode": {
"object": "0x6080604052600436106100975760003560e01c806313d98d131461009c57806336a3874b146100b15780634655478f146100dc57806347ff589d146100f1578063485cc955146101065780634b704c971461012657806354fd4d50146101465780636485ba2a1461016857806364cb281114610188578063b438689f146101a8578063baaa2169146101bb578063cea9d26f146101db575b600080fd5b6100af6100aa366004610f3f565b6101fb565b005b3480156100bd57600080fd5b506100c66103da565b6040516100d39190611096565b60405180910390f35b3480156100e857600080fd5b506100c66103ef565b3480156100fd57600080fd5b506100c6610413565b34801561011257600080fd5b506100af610121366004610dc0565b610422565b34801561013257600080fd5b506100af610141366004610ec2565b610530565b34801561015257600080fd5b5061015b6105ba565b6040516100d39190611193565b34801561017457600080fd5b506100af610183366004610df8565b6105e5565b34801561019457600080fd5b506100af6101a3366004610da4565b61063c565b6100af6101b6366004610f98565b6106da565b3480156101c757600080fd5b506100af6101d6366004610da4565b610862565b3480156101e757600080fd5b506100af6101f6366004610e82565b6108fc565b60008054604051636695ad4960e11b815282918291620100009091046001600160a01b03169063cd2b5a9290610235908a90600401611096565b60806040518083038186803b15801561024d57600080fd5b505afa158015610261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102859190610ed6565b93509350509250806102b25760405162461bcd60e51b81526004016102a9906111fd565b60405180910390fd5b8115610340576103403330896001600160a01b0316638bca6d166040518163ffffffff1660e01b815260040160206040518083038186803b1580156102f657600080fd5b505afa15801561030a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032e9190611038565b6001600160a01b038716929190610a90565b60405163b214faa560e01b81526001600160a01b0388169063b214faa590349061036e908a90600401611124565b6000604051808303818588803b15801561038757600080fd5b505af115801561039b573d6000803e3d6000fd5b5050505050336001600160a01b03166000805160206114b883398151915286866040516103c992919061112d565b60405180910390a250505050505050565b6000546201000090046001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031681565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461046a5760405162461bcd60e51b81526004016102a9906111c6565b600054610100900460ff16806104835750610483610aee565b80610491575060005460ff16155b6104ad5760405162461bcd60e51b81526004016102a990611240565b600054610100900460ff161580156104d8576000805460ff1961ff0019909116610100171660011790555b6000805462010000600160b01b031916620100006001600160a01b038681169190910291909117909155600180546001600160a01b031916918416919091179055801561052b576000805461ff00191690555b505050565b6000546201000090046001600160a01b031633146105605760405162461bcd60e51b81526004016102a9906113de565b6105746001600160a01b0384168383610af4565b816001600160a01b03167fab1e93ce08cc196e636fe318c052f82163b40e499a90a0fdb38912ecd5beae11826040516105ad9190611124565b60405180910390a2505050565b6040805180820190915260118152703b1916b7b930b1b63296b6b0b730b3b2b960791b602082015290565b60005b8181101561052b57336000805160206114b883398151915284848481811061060c57fe5b905060200281019061061e9190611421565b60405161062c92919061112d565b60405180910390a26001016105e8565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106845760405162461bcd60e51b81526004016102a9906111c6565b600180546001600160a01b0319166001600160a01b0383161790556040517fd3c0577a88b56268da0350a01cb491fb15be69982729d9cb066a0603d1fc54b8906106cf908390611096565b60405180910390a150565b60008054604051636695ad4960e11b8152620100009091046001600160a01b03169063cd2b5a9290610710908d90600401611096565b60806040518083038186803b15801561072857600080fd5b505afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190610ed6565b9350505050806107825760405162461bcd60e51b81526004016102a9906111fd565b600154604051631168473b60e21b81526001600160a01b03909116906345a11cec906107b690339088908f906004016110aa565b600060405180830381600087803b1580156107d057600080fd5b505af11580156107e4573d6000803e3d6000fd5b50506040516310d056db60e11b81526001600160a01b038d1692506321a0adb691503490610824908d908d908d908d908d908d908d908d90600401611141565b6000604051808303818588803b15801561083d57600080fd5b505af1158015610851573d6000803e3d6000fd5b505050505050505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108aa5760405162461bcd60e51b81526004016102a9906111c6565b6000805462010000600160b01b031916620100006001600160a01b038416021790556040517fcea779b12676b53bc3062b0064b8a14145a271c42db27627a1895a67324f64cb906106cf908390611096565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109445760405162461bcd60e51b81526004016102a9906111c6565b6001600160a01b03821661096a5760405162461bcd60e51b81526004016102a9906112c5565b6001600160a01b0383166109c6574760006109858284610bb7565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f193505050501580156109be573d6000803e3d6000fd5b50505061052b565b6040516370a0823160e01b81526000906001600160a01b038516906370a08231906109f5903090600401611096565b60206040518083038186803b158015610a0d57600080fd5b505afa158015610a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a459190611038565b90506000610a538284610bb7565b905060008111610a755760405162461bcd60e51b81526004016102a990611351565b610a896001600160a01b0386168583610bcf565b5050505050565b610ae8846323b872dd60e01b858585604051602401610ab1939291906110e7565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610bee565b50505050565b303b1590565b801580610b7c5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90610b2a90309086906004016110cd565b60206040518083038186803b158015610b4257600080fd5b505afa158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a9190611038565b155b610b985760405162461bcd60e51b81526004016102a990611388565b61052b8363095ea7b360e01b8484604051602401610ab192919061110b565b6000818310610bc65781610bc8565b825b9392505050565b61052b8363a9059cbb60e01b8484604051602401610ab192919061110b565b6060610c43826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c7d9092919063ffffffff16565b80519091501561052b5780806020019051810190610c619190610e66565b61052b5760405162461bcd60e51b81526004016102a990611307565b6060610c8c8484600085610c94565b949350505050565b6060610c9f85610d58565b610cbb5760405162461bcd60e51b81526004016102a99061128e565b60006060866001600160a01b03168587604051610cd8919061107a565b60006040518083038185875af1925050503d8060008114610d15576040519150601f19603f3d011682016040523d82523d6000602084013e610d1a565b606091505b50915091508115610d2e579150610c8c9050565b805115610d3e5780518082602001fd5b8360405162461bcd60e51b81526004016102a99190611193565b3b151590565b60008083601f840112610d6f578182fd5b5081356001600160401b03811115610d85578182fd5b602083019150836020828501011115610d9d57600080fd5b9250929050565b600060208284031215610db5578081fd5b8135610bc881611491565b60008060408385031215610dd2578081fd5b8235610ddd81611491565b91506020830135610ded81611491565b809150509250929050565b60008060208385031215610e0a578182fd5b82356001600160401b0380821115610e20578384fd5b818501915085601f830112610e33578384fd5b813581811115610e41578485fd5b8660208083028501011115610e54578485fd5b60209290920196919550909350505050565b600060208284031215610e77578081fd5b8151610bc8816114a9565b600080600060608486031215610e96578081fd5b8335610ea181611491565b92506020840135610eb181611491565b929592945050506040919091013590565b600080600060608486031215610e96578283fd5b60008060008060808587031215610eeb578081fd5b8451610ef681611491565b60208601519094506001600160501b0381168114610f12578182fd5b6040860151909350610f23816114a9565b6060860151909250610f34816114a9565b939692955090935050565b60008060008060608587031215610f54578384fd5b8435610f5f81611491565b93506020850135925060408501356001600160401b03811115610f80578283fd5b610f8c87828801610d5e565b95989497509550505050565b60008060008060008060008060006101008a8c031215610fb6578485fd5b8935610fc181611491565b985060208a01356001600160401b03811115610fdb578586fd5b610fe78c828d01610d5e565b90995097505060408a0135955060608a0135945060808a013561100981611491565b935060a08a013561101981611491565b8093505060c08a0135915060e08a013590509295985092959850929598565b600060208284031215611049578081fd5b5051919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6000825161108c818460208701611465565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b90815260200190565b600060208252610c8c602083018486611050565b600060e0825261115560e083018a8c611050565b60208301989098525060408101959095526001600160a01b03938416606086015291909216608084015260a083019190915260c09091015292915050565b60006020825282518060208401526111b2816040850160208701611465565b601f01601f19169190910160400192915050565b6020808252601d908201527f546f726e61646f526f757465723a206f6e6c79476f7665726e616e6365000000604082015260600190565b60208082526023908201527f546f726e61646f526f757465723a20696e7374616e6365206e6f7420656e61626040820152621b195960ea1b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526022908201527f544f524e3a2063616e206e6f742073656e6420746f207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601e908201527f544f524e3a20747279696e6720746f2073656e6420302062616c616e63650000604082015260600190565b60208082526036908201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606082015260800190565b60208082526023908201527f546f726e61646f526f757465723a206f6e6c79496e7374616e6365526567697360408201526274727960e81b606082015260800190565b6000808335601e19843603018112611437578283fd5b8301803591506001600160401b03821115611450578283fd5b602001915036819003821315610d9d57600080fd5b60005b83811015611480578181015183820152602001611468565b83811115610ae85750506000910152565b6001600160a01b03811681146114a657600080fd5b50565b80151581146114a657600080fdfefa28df43db3553771f7209dcef046f3bdfea15870ab625dcda30ac58b82b4008a2646970667358221220526b6f98f0226b043a554c9a0c6eb190a453d379dbf6d0b0804bec30140c148764736f6c634300060c0033",
"sourceMap": "938:4825:67:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2558:558;;;;;;:::i;:::-;;:::i;:::-;;1250:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1159:47;;;;;;;;;;;;;:::i;1333:38::-;;;;;;;;;;;;;:::i;2255:297::-;;;;;;;;;;-1:-1:-1;2255:297:67;;;;;:::i;:::-;;:::i;4815:234::-;;;;;;;;;;-1:-1:-1;4815:234:67;;;;;:::i;:::-;;:::i;5655:106::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3761:214::-;;;;;;;;;;-1:-1:-1;3761:214:67;;;;;:::i;:::-;;:::i;5314:246::-;;;;;;;;;;-1:-1:-1;5314:246:67;;;;;:::i;:::-;;:::i;3122:633::-;;;;;;:::i;:::-;;:::i;5055:253::-;;;;;;;;;;-1:-1:-1;5055:253:67;;;;;:::i;:::-;;:::i;3981:739::-;;;;;;;;;;-1:-1:-1;3981:739:67;;;;;:::i;:::-;;:::i;2558:558::-;2716:12;2763:16;;:39;;-1:-1:-1;;;2763:39:67;;2716:12;;;;2763:16;;;;-1:-1:-1;;;;;2763:16:67;;:29;;:39;;2793:8;;2763:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2715:87;;;;;;;2821:9;2813:57;;;;-1:-1:-1;;;2813:57:67;;;;;;;:::i;:::-;;;;;;;;;2885:7;2881:112;;;2908:74;2931:10;2951:4;2958:8;-1:-1:-1;;;;;2958:21:67;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2908:22:67;;;;:74;:22;:74::i;:::-;3003:49;;-1:-1:-1;;;3003:49:67;;-1:-1:-1;;;;;3003:16:67;;;-1:-1:-1;;3028:9:67;;3003:49;;3040:11;;3003:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3082:10:67;;-1:-1:-1;;;;;;;;;;;;;;3094:14:67;;3068:41;;;;;;;:::i;:::-;;;;;;;;2558:558;;;;;;;:::o;1250:40::-;;;;;;-1:-1:-1;;;;;1250:40:67;;:::o;1159:47::-;;;:::o;1333:38::-;;;-1:-1:-1;;;;;1333:38:67;;:::o;2255:297::-;2175:22;-1:-1:-1;;;;;2161:36:67;:10;:36;2153:78;;;;-1:-1:-1;;;2153:78:67;;;;;;;:::i;:::-;1426:13:21::1;::::0;::::1;::::0;::::1;;;::::0;:33:::1;;;1443:16;:14;:16::i;:::-;1426:50;;;-1:-1:-1::0;1464:12:21::1;::::0;::::1;;1463:13;1426:50;1418:109;;;::::0;-1:-1:-1;;;1418:109:21;;::::1;::::0;::::1;;;:::i;:::-;1538:19;1561:13:::0;::::1;::::0;::::1;;;1560:14;1584:98:::0;::::1;;;1618:13;:20:::0;;-1:-1:-1;;;;1618:20:21;;::::1;;;1652:19;1634:4;1652:19;::::0;;1584:98:::1;2416:16:67::2;:61:::0;;-1:-1:-1;;;;;;2416:61:67::2;-1:-1:-1::0;;;;;;2416:61:67;;::::2;::::0;;;::::2;::::0;;;::::2;::::0;;;-1:-1:-1;2487:58:67;;-1:-1:-1;;;;;;2487:58:67::2;::::0;;::::2;::::0;;;::::2;::::0;;1704:66:21;::::1;;;1754:5;1738:21:::0;;-1:-1:-1;;1738:21:21::1;::::0;;1704:66:::1;2241:1:67;2255:297:::0;;:::o;4815:234::-;2036:16;;;;;-1:-1:-1;;;;;2036:16:67;2014:10;:39;2006:87;;;;-1:-1:-1;;;2006:87:67;;;;;;;:::i;:::-;4958:37:::1;-1:-1:-1::0;;;;;4958:18:67;::::1;4977:8:::0;4987:7;4958:18:::1;:37::i;:::-;5010:32;::::0;-1:-1:-1;;;;;5010:32:67;::::1;::::0;::::1;::::0;::::1;::::0;5034:7;;5010:32:::1;:::i;:::-;;;;;;;;4815:234:::0;;;:::o;5655:106::-;5728:26;;;;;;;;;;;;-1:-1:-1;;;5728:26:67;;;;;5655:106::o;3761:214::-;3846:9;3841:128;3861:26;;;3841:128;;;3927:10;-1:-1:-1;;;;;;;;;;;3939:15:67;;3955:1;3939:18;;;;;;;;;;;;;;;;;;:::i;:::-;3913:45;;;;;;;:::i;:::-;;;;;;;;3889:3;;3841:128;;5314:246;2175:22;-1:-1:-1;;;;;2161:36:67;:10;:36;2153:78;;;;-1:-1:-1;;;2153:78:67;;;;;;;:::i;:::-;5417:15:::1;:66:::0;;-1:-1:-1;;;;;;5417:66:67::1;-1:-1:-1::0;;;;;5417:66:67;::::1;;::::0;;5498:55:::1;::::0;::::1;::::0;::::1;::::0;5417:66;;5498:55:::1;:::i;:::-;;;;;;;;5314:246:::0;:::o;3122:633::-;3422:14;3440:16;;:39;;-1:-1:-1;;;3440:39:67;;:16;;;;-1:-1:-1;;;;;3440:16:67;;:29;;:39;;3470:8;;3440:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3417:62;;;;;3498:9;3490:57;;;;-1:-1:-1;;;3490:57:67;;;;;;;:::i;:::-;3558:15;;:52;;-1:-1:-1;;;3558:52:67;;-1:-1:-1;;;;;3558:15:67;;;;:20;;:52;;3579:10;;3591:8;;3601;;3558:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3621:127:67;;-1:-1:-1;;;3621:127:67;;-1:-1:-1;;;;;3621:17:67;;;-1:-1:-1;3621:17:67;;-1:-1:-1;3647:9:67;;3621:127;;3672:6;;;;3680:5;;3687:14;;3703:10;;3715:8;;3725:4;;3731:7;;3621:127;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3122:633;;;;;;;;;;:::o;5055:253::-;2175:22;-1:-1:-1;;;;;2161:36:67;:10;:36;2153:78;;;;-1:-1:-1;;;2153:78:67;;;;;;;:::i;:::-;5160:16:::1;:69:::0;;-1:-1:-1;;;;;;5160:69:67::1;-1:-1:-1::0;;;;;;5160:69:67;::::1;;;::::0;;5244:57:::1;::::0;::::1;::::0;::::1;::::0;5160:69;;5244:57:::1;:::i;3981:739::-:0;2175:22;-1:-1:-1;;;;;2161:36:67;:10;:36;2153:78;;;;-1:-1:-1;;;2153:78:67;;;;;;;:::i;:::-;-1:-1:-1;;;;;4132:17:67;::::1;4124:64;;;::::0;-1:-1:-1;;;4124:64:67;;::::1;::::0;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;4203:19:67;::::1;4199:515;;4286:21;4263:20;4339:31;4286:21:::0;4362:7;4339:8:::1;:31::i;:::-;4384:21;::::0;4321:49;;-1:-1:-1;;;;;;4384:12:67;::::1;::::0;:21:::1;::::0;::::1;;::::0;4321:49;;4384:21:::1;::::0;;;4321:49;4384:12;:21;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;4199:515;;;;;4494:31;::::0;-1:-1:-1;;;4494:31:67;;4471:20:::1;::::0;-1:-1:-1;;;;;4494:16:67;::::1;::::0;-1:-1:-1;;4494:31:67::1;::::0;4519:4:::1;::::0;4494:31:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4471:54;;4539:15;4557:31;4566:12;4580:7;4557:8;:31::i;:::-;4539:49;;4620:1;4610:7;:11;4602:54;;;::::0;-1:-1:-1;;;4602:54:67;;::::1;::::0;::::1;;;:::i;:::-;4670:33;-1:-1:-1::0;;;;;4670:19:67;::::1;4690:3:::0;4695:7;4670:19:::1;:33::i;:::-;4199:515;;3981:739:::0;;;:::o;877:203:28:-;977:96;997:5;1027:27;;;1056:4;1062:2;1066:5;1004:68;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1004:68:28;;;;;;;;;;;;;;-1:-1:-1;;;;;1004:68:28;-1:-1:-1;;;;;;1004:68:28;;;;;;;;;;;977:19;:96::i;:::-;877:203;;;;:::o;1866:593:21:-;2302:4;2410:17;2445:7;1866:593;:::o;1340:613:28:-;1705:10;;;1704:62;;-1:-1:-1;1721:39:28;;-1:-1:-1;;;1721:39:28;;-1:-1:-1;;;;;1721:15:28;;;;;:39;;1745:4;;1752:7;;1721:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;1704:62;1696:150;;;;-1:-1:-1;;;1696:150:28;;;;;;;:::i;:::-;1856:90;1876:5;1906:22;;;1930:7;1939:5;1883:62;;;;;;;;;:::i;391:104:19:-;449:7;479:1;475;:5;:13;;487:1;475:13;;;483:1;475:13;468:20;391:104;-1:-1:-1;;;391:104:19:o;696:175:28:-;778:86;798:5;828:23;;;853:2;857:5;805:58;;;;;;;;;:::i;2959:751::-;3404:69;;;;;;;;;;;;;;;;;;3378:23;;3404:69;;-1:-1:-1;;;;;3404:27:28;;;3432:4;;3404:27;:69::i;:::-;3487:17;;3378:95;;-1:-1:-1;3487:21:28;3483:221;;3627:10;3616:30;;;;;;;;;;;;:::i;:::-;3608:85;;;;-1:-1:-1;;;3608:85:28;;;;;;;:::i;3573:194:29:-;3676:12;3707:53;3730:6;3738:4;3744:1;3747:12;3707:22;:53::i;:::-;3700:60;3573:194;-1:-1:-1;;;;3573:194:29:o;4920:958::-;5050:12;5082:18;5093:6;5082:10;:18::i;:::-;5074:60;;;;-1:-1:-1;;;5074:60:29;;;;;;;:::i;:::-;5205:12;5219:23;5246:6;-1:-1:-1;;;;;5246:11:29;5266:8;5277:4;5246:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5204:78;;;;5296:7;5292:580;;;5326:10;-1:-1:-1;5319:17:29;;-1:-1:-1;5319:17:29;5292:580;5437:17;;:21;5433:429;;5695:10;5689:17;5755:15;5742:10;5738:2;5734:19;5727:44;5644:145;5827:20;;-1:-1:-1;;;5827:20:29;;;;5834:12;;5827:20;;;:::i;718:413::-;1078:20;1116:8;;;718:413::o;968:336:-1:-;;;1082:3;1075:4;1067:6;1063:17;1059:27;1049:2;;-1:-1;;1090:12;1049:2;-1:-1;1120:20;;-1:-1;;;;;1149:30;;1146:2;;;-1:-1;;1182:12;1146:2;1226:4;1218:6;1214:17;1202:29;;1277:3;1226:4;1257:17;1218:6;1243:32;;1240:41;1237:2;;;1294:1;;1284:12;1237:2;1042:262;;;;;:::o;2260:241::-;;2364:2;2352:9;2343:7;2339:23;2335:32;2332:2;;;-1:-1;;2370:12;2332:2;85:6;72:20;97:33;124:5;97:33;:::i;2508:366::-;;;2629:2;2617:9;2608:7;2604:23;2600:32;2597:2;;;-1:-1;;2635:12;2597:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2687:63;-1:-1;2787:2;2826:22;;72:20;97:33;72:20;97:33;:::i;:::-;2795:63;;;;2591:283;;;;;:::o;2881:419::-;;;3031:2;3019:9;3010:7;3006:23;3002:32;2999:2;;;-1:-1;;3037:12;2999:2;3082:31;;-1:-1;;;;;3122:30;;;3119:2;;;-1:-1;;3155:12;3119:2;3267:6;3256:9;3252:22;;;452:3;445:4;437:6;433:17;429:27;419:2;;-1:-1;;460:12;419:2;503:6;490:20;3133:18;522:6;519:30;516:2;;;-1:-1;;552:12;516:2;647:3;3031:2;;631:6;627:17;588:6;613:32;;610:41;607:2;;;-1:-1;;654:12;607:2;3031;584:17;;;;;3175:109;;-1:-1;2993:307;;-1:-1;;;;2993:307::o;3307:257::-;;3419:2;3407:9;3398:7;3394:23;3390:32;3387:2;;;-1:-1;;3425:12;3387:2;763:6;757:13;775:30;799:5;775:30;:::i;3571:539::-;;;;3733:2;3721:9;3712:7;3708:23;3704:32;3701:2;;;-1:-1;;3739:12;3701:2;1408:6;1395:20;1420:49;1463:5;1420:49;:::i;:::-;3791:79;-1:-1;3907:2;3954:22;;217:20;242:41;217:20;242:41;:::i;:::-;3695:415;;3915:71;;-1:-1;;;4023:2;4062:22;;;;1910:20;;3695:415::o;4117:523::-;;;;4271:2;4259:9;4250:7;4246:23;4242:32;4239:2;;;-1:-1;;4277:12;4647:690;;;;;4822:3;4810:9;4801:7;4797:23;4793:33;4790:2;;;-1:-1;;4829:12;4790:2;1581:6;1575:13;1593:49;1636:5;1593:49;:::i;:::-;5008:2;5057:22;;2198:13;4881:90;;-1:-1;;;;;;24355:34;;27296;;27286:2;;-1:-1;;27334:12;27286:2;5126;5173:22;;757:13;5016:73;;-1:-1;775:30;757:13;775:30;:::i;:::-;5242:2;5289:22;;757:13;5134:71;;-1:-1;775:30;757:13;775:30;:::i;:::-;4784:553;;;;-1:-1;4784:553;;-1:-1;;4784:553::o;5344:667::-;;;;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;-1:-1;;5533:12;5495:2;1760:6;1747:20;1772:59;1825:5;1772:59;:::i;:::-;5585:89;-1:-1;5711:2;5750:22;;884:20;;-1:-1;5847:2;5832:18;;5819:32;-1:-1;;;;;5860:30;;5857:2;;;-1:-1;;5893:12;5857:2;5931:64;5987:7;5978:6;5967:9;5963:22;5931:64;:::i;:::-;5489:522;;;;-1:-1;5913:82;-1:-1;;;;5489:522::o;6018:1329::-;;;;;;;;;;6302:3;6290:9;6281:7;6277:23;6273:33;6270:2;;;-1:-1;;6309:12;6270:2;1760:6;1747:20;1772:59;1825:5;1772:59;:::i;:::-;6361:89;-1:-1;6515:2;6500:18;;6487:32;-1:-1;;;;;6528:30;;6525:2;;;-1:-1;;6561:12;6525:2;6599:64;6655:7;6646:6;6635:9;6631:22;6599:64;:::i;:::-;6581:82;;-1:-1;6581:82;-1:-1;;6700:2;6739:22;;884:20;;-1:-1;6808:2;6847:22;;884:20;;-1:-1;6916:3;6964:22;;217:20;242:41;217:20;242:41;:::i;:::-;6925:71;-1:-1;7033:3;7081:22;;217:20;242:41;217:20;242:41;:::i;:::-;7042:71;;;;7150:3;7194:9;7190:22;1910:20;7159:63;;7259:3;7303:9;7299:22;1910:20;7268:63;;6264:1083;;;;;;;;;;;:::o;7354:263::-;;7469:2;7457:9;7448:7;7444:23;7440:32;7437:2;;;-1:-1;;7475:12;7437:2;-1:-1;2058:13;;7431:186;-1:-1;7431:186::o;8180:297::-;;23093:6;23088:3;23081:19;25822:6;25817:3;23130:4;23125:3;23121:14;25799:30;-1:-1;23130:4;25869:6;23125:3;25860:16;;25853:27;23130:4;26255:7;;26259:2;8463:6;26239:14;26235:28;23125:3;8432:39;;8425:46;;8280:197;;;;;:::o;13212:271::-;;8645:5;22808:12;8756:52;8801:6;8796:3;8789:4;8782:5;8778:16;8756:52;:::i;:::-;8820:16;;;;;13346:137;-1:-1;;13346:137::o;13490:222::-;-1:-1;;;;;24149:54;;;;7860:45;;13617:2;13602:18;;13588:124::o;13719:528::-;-1:-1;;;;;24149:54;;;7703:58;;24149:54;;;14124:2;14109:18;;7703:58;24149:54;;;14233:2;14218:18;;8945:76;13944:2;13929:18;;13915:332::o;14254:333::-;-1:-1;;;;;24149:54;;;7860:45;;24149:54;;14573:2;14558:18;;7860:45;14409:2;14394:18;;14380:207::o;14594:444::-;-1:-1;;;;;24149:54;;;7860:45;;24149:54;;;;14941:2;14926:18;;7860:45;15024:2;15009:18;;8108:37;;;;14777:2;14762:18;;14748:290::o;15045:333::-;-1:-1;;;;;24149:54;;;;7860:45;;15364:2;15349:18;;8108:37;15200:2;15185:18;;15171:207::o;15385:222::-;8108:37;;;15512:2;15497:18;;15483:124::o;15614:326::-;;15769:2;15790:17;15783:47;15844:86;15769:2;15758:9;15754:18;15916:6;15908;15844:86;:::i;15947:1060::-;;16302:3;16324:17;16317:47;16378:86;16302:3;16291:9;16287:19;16450:6;16442;16378:86;:::i;:::-;16543:2;16528:18;;8108:37;;;;-1:-1;16626:2;16611:18;;8108:37;;;;-1:-1;;;;;24149:54;;;16725:2;16710:18;;7860:45;24149:54;;;;16824:3;16809:19;;7860:45;-1:-1;16893:19;;8108:37;;;;16992:3;16977:19;;;8108:37;;16370:94;-1:-1;;16273:734::o;17855:310::-;;18002:2;18023:17;18016:47;9546:5;22808:12;23093:6;18002:2;17991:9;17987:18;23081:19;9640:52;9685:6;23121:14;17991:9;23121:14;18002:2;9666:5;9662:16;9640:52;:::i;:::-;26255:7;26239:14;-1:-1;;26235:28;9704:39;;;;23121:14;9704:39;;17973:192;-1:-1;;17973:192::o;18172:416::-;18372:2;18386:47;;;9980:2;18357:18;;;23081:19;10016:31;23121:14;;;9996:52;10067:12;;;18343:245::o;18595:416::-;18795:2;18809:47;;;10318:2;18780:18;;;23081:19;10354:34;23121:14;;;10334:55;-1:-1;;;10409:12;;;10402:27;10448:12;;;18766:245::o;19018:416::-;19218:2;19232:47;;;10699:2;19203:18;;;23081:19;10735:34;23121:14;;;10715:55;-1:-1;;;10790:12;;;10783:38;10840:12;;;19189:245::o;19441:416::-;19641:2;19655:47;;;11091:2;19626:18;;;23081:19;11127:31;23121:14;;;11107:52;11178:12;;;19612:245::o;19864:416::-;20064:2;20078:47;;;11429:2;20049:18;;;23081:19;11465:34;23121:14;;;11445:55;-1:-1;;;11520:12;;;11513:26;11558:12;;;20035:245::o;20287:416::-;20487:2;20501:47;;;11809:2;20472:18;;;23081:19;11845:34;23121:14;;;11825:55;-1:-1;;;11900:12;;;11893:34;11946:12;;;20458:245::o;20710:416::-;20910:2;20924:47;;;12197:2;20895:18;;;23081:19;12233:32;23121:14;;;12213:53;12285:12;;;20881:245::o;21133:416::-;21333:2;21347:47;;;12536:2;21318:18;;;23081:19;12572:34;23121:14;;;12552:55;-1:-1;;;12627:12;;;12620:46;12685:12;;;21304:245::o;21556:416::-;21756:2;21770:47;;;12936:2;21741:18;;;23081:19;12972:34;23121:14;;;12952:55;-1:-1;;;13027:12;;;13020:27;13066:12;;;21727:245::o;22208:506::-;;;22343:11;22330:25;22394:48;;22418:8;22402:14;22398:29;22394:48;22374:18;22370:73;22360:2;;-1:-1;;22447:12;22360:2;22474:33;;22528:18;;;-1:-1;;;;;;22555:30;;22552:2;;;-1:-1;;22588:12;22552:2;22433:4;22616:13;;-1:-1;22402:14;22648:38;;;22638:49;;22635:2;;;22700:1;;22690:12;25895:268;25960:1;25967:101;25981:6;25978:1;25975:13;25967:101;;;26048:11;;;26042:18;26029:11;;;26022:39;26003:2;25996:10;25967:101;;;26083:6;26080:1;26077:13;26074:2;;;-1:-1;;25960:1;26130:16;;26123:27;25944:219::o;26276:117::-;-1:-1;;;;;24149:54;;26335:35;;26325:2;;26384:1;;26374:12;26325:2;26319:74;:::o;26540:111::-;26621:5;23744:13;23737:21;26599:5;26596:32;26586:2;;26642:1;;26632:12",
"linkReferences": {},
"immutableReferences": {
"39241": [
{
"start": 1009,
"length": 32
},
{
"start": 1069,
"length": 32
},
{
"start": 1607,
"length": 32
},
{
"start": 2157,
"length": 32
},
{
"start": 2311,
"length": 32
}
]
}
},
"methodIdentifiers": {
"approveTokenForInstance(address,address,uint256)": "4b704c97",
"backupNotes(bytes[])": "6485ba2a",
"deposit(address,bytes32,bytes)": "13d98d13",
"governanceProxyAddress()": "4655478f",
"initialize(address,address)": "485cc955",
"instanceRegistry()": "36a3874b",
"relayerRegistry()": "47ff589d",
"rescueTokens(address,address,uint256)": "cea9d26f",
"setInstanceRegistry(address)": "baaa2169",
"setRelayerRegistry(address)": "64cb2811",
"version()": "54fd4d50",
"withdraw(address,bytes,bytes32,bytes32,address,address,uint256,uint256)": "b438689f"
},
"rawMetadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governanceProxyAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encryptedNote\",\"type\":\"bytes\"}],\"name\":\"EncryptedNote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newInstanceRegistryProxyAddress\",\"type\":\"address\"}],\"name\":\"InstanceRegistryUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRelayerRegistryProxyAddress\",\"type\":\"address\"}],\"name\":\"RelayerRegistryUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenApproved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approveTokenForInstance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_encryptedNotes\",\"type\":\"bytes[]\"}],\"name\":\"backupNotes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ITornadoInstance\",\"name\":\"_tornado\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_encryptedNote\",\"type\":\"bytes\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governanceProxyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_instanceRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_relayerRegistryAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"instanceRegistry\",\"outputs\":[{\"internalType\":\"contract InstanceRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"relayerRegistry\",\"outputs\":[{\"internalType\":\"contract RelayerRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newInstanceRegistryProxyAddress\",\"type\":\"address\"}],\"name\":\"setInstanceRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newRelayerRegistryProxyAddress\",\"type\":\"address\"}],\"name\":\"setRelayerRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ITornadoInstance\",\"name\":\"_tornado\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_nullifierHash\",\"type\":\"bytes32\"},{\"internalType\":\"address payable\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_relayer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_refund\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"AlienTornadosaurusHex\",\"details\":\"This is an improved version of the TornadoRouter with a modified design from the original contract.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"TornadoRouter\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This contracts is a router for all Tornado Cash deposits and withdrawals\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/v2/TornadoRouter.sol\":\"TornadoRouter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@uniswap/v3-core/=lib/v3-core/\",\":@uniswap/v3-periphery/=lib/v3-periphery/\",\":base/=src/base/\",\":common/=src/common/\",\":ds-test/=lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/\",\":solmate/=lib/solmate/src/\",\":src/=src/\",\":torn-token/=lib/torn-token/\",\":tornado-anonymity-mining/=lib/tornado-anonymity-mining/\",\":tornado-governance/=lib/tornado-governance/\",\":v3-core/=lib/v3-core/\",\":v3-periphery/=lib/v3-periphery/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/GSN/Context.sol\":{\"keccak256\":\"0xdb26cbf4d028490f49831a7865c2fe1b28db44b535ca8d343785a3b768aae183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://840b14ce0315c47d49ba328f1f9fa7654ded1c9e1559e6c5e777a7b2dc28bf0a\",\"dweb:/ipfs/QmTLLabn4wcfGro9LEmUXUN2nwKqZSotXMvjDCLXEnLtZP\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0x4bd6402ca6b3419008c2b482aff54e66836e8cb4eba2680e42ac5884ae6424fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8f9f711fb8d0d92aeea1c327e3845d13ca1fa8f142e47f8723cd5b3106fb29a3\",\"dweb:/ipfs/QmVQUReDW9f4zGqhizwHnyU8EntMs95tbASdqkGncnikba\"]},\"lib/openzeppelin-contracts/contracts/math/Math.sol\":{\"keccak256\":\"0x6c234834003dfb86e2c23d12dfdde7cc01e78013d71b52162cb308b4873562cb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f0e3f39b2ec26694a42c89a5d9e489d5228f1880fcf5e375c5c975ba816e5ffe\",\"dweb:/ipfs/QmUErheHopnbBUSLDQAtWsmw6HsEvqTNp1QiBEuSJhmhHn\"]},\"lib/openzeppelin-contracts/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2df142592d1dc267d9549049ee3317fa190d2f87eaa565f86ab05ec83f7ab8f5\",\"dweb:/ipfs/QmSkJtcfWo7c42KnL5hho6GFxK6HRNV91XABx1P7xDtfLV\"]},\"lib/openzeppelin-contracts/contracts/proxy/Initializable.sol\":{\"keccak256\":\"0x8eee8bd8c216a3e437bf7a4c9844348f47a2d990e5b06cd96d250e33ab04c25a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6bb2af880b12be26b148ee99ac3a984168e7fc74721bab9cd44598a0669b038\",\"dweb:/ipfs/QmPfFDaXZbThJgaVim7nvxrw1RuD2xKWCG89K6pznmC8pJ\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x91e0bd6a6762d2a1700dab0849de8422611355100576c4beef1e80d82a4104a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://73bbd77af0a8b07255d2ffa20728bcf13b116007c9ddac5d37046cfabb0e1e02\",\"dweb:/ipfs/QmRgZgWCWCSMTTaok6o4QvWA6MgB4goS8qpb3sN7bAvaZ9\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0x657b0d90be17331364211d74359df2a734fac864f6e88c80de7626fa33090ffb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://09cca25fefa2354a424d55a97930c76b11dc50697ba62c85d7affc27a37e830c\",\"dweb:/ipfs/QmPTQBYXxQDSNmMKqwe4WnM8E7NwnpLnkFLSRH8hZRvrVK\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5c26b39d26f7ed489e555d955dcd3e01872972e71fdd1528e93ec164e4f23385\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://efdc632af6960cf865dbc113665ea1f5b90eab75cc40ec062b2f6ae6da582017\",\"dweb:/ipfs/QmfAZFDuG62vxmAN9DnXApv7e7PMzPqi4RkqqZHLMSQiY5\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0xf3b30f8a49631420635a8c35daacfcaa338012755f18a76fdd118730256f9a27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0d7de652204c2ee291a61aa984103dfc7ae4392d651fbbc44a0079caee7c69a3\",\"dweb:/ipfs/Qmcw1cQnq9eWDnrCBwU3TNyqLfTMUFg5YKpYUkELoMPuUE\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xf5fa8cbdffa5ef8be49b246b5628facc30b71707e78a45d80d93b64eff3fe390\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://774e78a9ff32792cc95db4d2ceaf3a7965bb7f0bea5e6cb7cff182b450d44b37\",\"dweb:/ipfs/QmRRMC4uj7eAcLW7chynA3sNEYULMFazdLwQHKHQPyzAbA\"]},\"lib/openzeppelin-contracts/contracts/utils/Pausable.sol\":{\"keccak256\":\"0x5d1b1dcbc0396f44c1c8d554857f71e3187503bf1e54062bf9ec6782e21f3a08\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9aa7fa580393aab7ca3d9f606f5ab7434d51e1c0f3632a593fca82c80ef8cc4c\",\"dweb:/ipfs/QmRy84N7QfkwBM2AeR7UB5G1PPHdRLi6s1iyzAwCzevcHe\"]},\"lib/torn-token/contracts/ECDSA.sol\":{\"keccak256\":\"0x79bc426cde97fc18147ad737052762a49c2bc93699f5cd9e81e5a4b1e8a96b17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b25864983a11bd200d2fb25f83e5ac91a8f377296b6672893c3f13a0320af572\",\"dweb:/ipfs/QmWbf22DMWcNQ2ULDzniro1tPte8TaEZFU9TzXZtLfkiba\"]},\"lib/torn-token/contracts/ENS.sol\":{\"keccak256\":\"0x1a74cb3f0207ddf9ce92b9725f55059a14729368a2cd63f6cd7684aa02fcc68d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddda0ae37080cc88928a95370ea17eb62f14a3d7a2d46447493ed44c0a951337\",\"dweb:/ipfs/QmXG2wVG16h868yBNiJ2E6q2hbHtun5qYecqTp6Zbs2cn9\"]},\"lib/torn-token/contracts/ERC20Permit.sol\":{\"keccak256\":\"0x530676f79a4182eb975f031a5c49bd8908fd561eba7daaeec564439e35c49836\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c45e95d4c466a23502d42830c774a51acf8566bff3cd4f8b1043fb0c988bff0\",\"dweb:/ipfs/QmPLvuAJQ43dcvvFiryjrJTs3GhARx2GMBUGn3bttePQvZ\"]},\"lib/torn-token/contracts/TORN.sol\":{\"keccak256\":\"0x42d542e7d9b8185bc3d01bec0c7273d31a142b2a5d0a0bfcb6f84976a0fb509c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a1b429a6fb7c9571acbd11e307c707a342a84f8e1f2bc15c215b68d45382893\",\"dweb:/ipfs/QmWoGXkYgzikypE4z7pPyZdEGQt1TRK3RHhLvp6W3n6skC\"]},\"lib/tornado-anonymity-mining/contracts/interfaces/ITornadoInstance.sol\":{\"keccak256\":\"0x4191422cb515705b52466027deaedb8549e472537df2fa8a53eb8dab4c719c1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1decd6abd16969b24a25374bb9c568427a94d074befa8b14a8388dfd357adcf4\",\"dweb:/ipfs/Qmb6e2VR9Fxnzy9gjUFTJecdaBABbbRzEVttK8KQCi53Zz\"]},\"lib/tornado-governance/contracts/v2-vault-and-gas/interfaces/ITornadoVault.sol\":{\"keccak256\":\"0xe21637c2f70be34aff3f07e32a043cedf82e5572f17829c6eaa16b348a21ca35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://675c164cc2956b972c24439393aba8a7103f2ed5a17d11233232cef02fc1a9fa\",\"dweb:/ipfs/QmQ7isKW7bxuHvFn213rdoEBuTjTku3gEDNbWtB4tC5JU3\"]},\"lib/v3-core/contracts/interfaces/IUniswapV3Factory.sol\":{\"keccak256\":\"0xcc3d0c93fc9ac0febbe09f941b465b57f750bcf3b48432da0b97dc289cfdc489\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b9379ad954680c44a0bc523b314ae4c4da735f9fe1d02aa56ea5bdba6f1136f2\",\"dweb:/ipfs/QmZXdgQNXKAckrXWz9R3mc47F1fvDvr28a2ewJrwNAw71B\"]},\"lib/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":{\"keccak256\":\"0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1c42b9e6f5902ac38dd43e25750939baa7e0c1425dc75afd717c4412731065d5\",\"dweb:/ipfs/QmWaoacnzsucTvBME2o7YgZBZMhaHv7fkj83htHMVWJKWh\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5\",\"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7\",\"dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03\",\"dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047\",\"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735\",\"dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ed63907c38ff36b0e22bc9ffc53e791ea74f0d4f0e7c257fdfb5aaf8825b1f0f\",\"dweb:/ipfs/QmSQrckghEjs6HVsA5GVgpNpZWvTXMY5eQLF7cN6deFeEg\"]},\"lib/v3-core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0x50e87f7a3197525d1c6f7e04290060e848677c8a4e86c554bc6ace4a4d0d476d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3874093a6b37d8e68f9475a91f8eb0a1c808cb6153c84cfe6c37909505a4d24e\",\"dweb:/ipfs/QmUqGpQqvSHX4SwUvcBCs9g4ZhR9JPhgD3615oUigAhtjj\"]},\"lib/v3-core/contracts/libraries/LowGasSafeMath.sol\":{\"keccak256\":\"0xe8bfdbbb772332bff49d5e40f2533ed6285f6b53f553779b12ca4f2d23adba80\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://173e8eb626b4f31fcfae86846075c07045de237072e0544bf71a7168d8bbbb4c\",\"dweb:/ipfs/QmSTGJ9B2qsHwupg3qfjnd5wfRfKiXj786KoPzPcqzpcyA\"]},\"lib/v3-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0xda8c2c0b12d2976acfd364453ba5f5bf0117ba3c91175ee9e1067d3fb26944d9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://3f3d2d7c2723c91830c74d96292f28fc1cfe28d388cdb9c1a5ebadb4c2b96f81\",\"dweb:/ipfs/QmYU4wk8MEm33wVWR38LoncvR7b8PP1mLuGBKX3dUpYJVE\"]},\"lib/v3-periphery/contracts/libraries/OracleLibrary.sol\":{\"keccak256\":\"0x19517bf2478c3ec56253f37b48adde7f34a6acdb467e329f74d79f9e72e2a63f\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c2a6c20fb775e7a55ff9d6eb6f13982ca019e9fec3caecda5b21b6671335a5c1\",\"dweb:/ipfs/QmannSYDmR9Novyks8KRHe4u4PajfvkGU39owUBzfwy4rn\"]},\"lib/v3-periphery/contracts/libraries/PoolAddress.sol\":{\"keccak256\":\"0x5edd84eb8ba7c12fd8cb6cffe52e1e9f3f6464514ee5f539c2283826209035a2\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f375d0e6d5ea3674e1aa6f112b021e9a86721a6a2f3cb22d673378b30cf0e840\",\"dweb:/ipfs/QmWJir2qnJyp963mU6U3jEEx9i3H3V5BgKawAfSnG1pC8w\"]},\"src/v1/RelayerRegistry.sol\":{\"keccak256\":\"0x1d6891499ac2f695e793f4a2b7baed0e7a18ff5914b5253821ebc50a77c782cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dbb0db5573900ba9e95b26586563c7a9110a340a718d4859267eadae97649af8\",\"dweb:/ipfs/QmeWhAuijGSmRNXA6Ak4VkxttjiQVWZ4zEhbWhMkZKnvNc\"]},\"src/v1/interfaces/IENS.sol\":{\"keccak256\":\"0x87c80e0171500b48d27bb0a755b4d39456e06dcbd933b58e8f5b87c1c3801ffa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://861361a14de14752f92d9b6970db045a5723a217169a9f31bf23f09f45a2a62c\",\"dweb:/ipfs/QmcroHgR19W1Q13Gnyuy8Jz6JNQRBg29gTYfE9vvLSizmz\"]},\"src/v1/interfaces/ITornadoGovernance.sol\":{\"keccak256\":\"0x2d0dcef36ce6f0253842ef0018b77d6d78f37277512704485e4bd46815361755\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e38471c53781cdfa9b4e1fcbb269b8b53538f15b47ac98a94627e954469eedc\",\"dweb:/ipfs/QmaziThzmm3GWTMm4mHK7g8dfxnigsNAea4CXTyqDhEsm8\"]},\"src/v1/libraries/UniswapV3OracleHelper.sol\":{\"keccak256\":\"0x195f3dd9a0c5d1eb94d16bb37c81c7cc385cae3d4312cf6c726c1590bed09825\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb50afd519913e6a1bc2e7fb9d1d164cfccb2c73d8999a117c443ca1e4ccb359\",\"dweb:/ipfs/QmaaETZMRGsqwaKTyBd3rYt28FX7vipWSPdk8TMhjkXaEd\"]},\"src/v1/staking/TornadoStakingRewards.sol\":{\"keccak256\":\"0x6a28ab49ed99ed5425f693d66ea642be89276df00b7acbfe01d7ce5b91d4961f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c85e501bf562edb7b0bcd295f3368b024cee0744f828dd479dee777d6388462e\",\"dweb:/ipfs/QmUZW5pYamQZ4jGmvxkRYaP5zde3jKWVZVrHhWaNPViL5t\"]},\"src/v1/tornado-proxy/FeeManager.sol\":{\"keccak256\":\"0x8673b18b341b88e14b22d69eb53807f5c2b22013ee9141d147581e778c5a8a79\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bfff3be5479ee3790aa05e14abc5973253c834986719f98de2e11b9a0a22144b\",\"dweb:/ipfs/QmNZMvjTWNffdVg4TuvTu9BKLuSDq4JCmDgtbBfQSkKCRv\"]},\"src/v1/tornado-proxy/InstanceRegistry.sol\":{\"keccak256\":\"0x05e71dd64c375c792b3de49d056cbcc4320ef11ef6eb53893d5da0b34ff81eb9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c0a4821c6af8f036ebd04774ab06a152518578c5181c82aa992c3372d7c0a67\",\"dweb:/ipfs/QmVCStgcq9XVU6D2MUK29Yu3CPWcgkSWfVcUaB8PYQgdP7\"]},\"src/v1/tornado-proxy/TornadoRouter.sol\":{\"keccak256\":\"0x542deec857cd3890853be01279c070d5c9b57cd91c37bd5a47f043d8a10c5894\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://754884b828960f0be4d3a39b317db83c00b5011a9129efad6f38a9b768478834\",\"dweb:/ipfs/QmfMpBmmPhFDoLpijBhScpK8GpvxzDkbK4Np9cbqLou7mJ\"]},\"src/v1/utils/ENSNamehash.sol\":{\"keccak256\":\"0x23cfca6c28ed4e68d959700f2fd3fc497ea6b1d381298ef7749e97c1af849b88\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3ff128bd602cc7851baeab3b7d60e42fc0943f43193c4f94aceb8e26a39710b7\",\"dweb:/ipfs/QmRaDvU2HW4tirEuSjEDBP4z7UTSBx8FWGCLxUJdmZW5SP\"]},\"src/v2/InstanceRegistry.sol\":{\"keccak256\":\"0xe64ee02ad33c182e9b78f5d5ebc868f753208d5d10a31785bccb81644778dbe7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a920f392c498cffdd07b5617108c85e544b4ee2d8431b64dcfb1d105cbc09e31\",\"dweb:/ipfs/QmTQ3U8i6AF338jUVCedvVFjk4h9jNyAmY8WZQw9zT2Htz\"]},\"src/v2/TornadoRouter.sol\":{\"keccak256\":\"0x40913fa941327535ccb0ff148f5c818ea64bedf5eed90309109d9bbeebbdc31f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a68dff41ca8f1619471cc07a9bcb3a09c30eeee7281297942b8c7d50ac78206e\",\"dweb:/ipfs/QmdDNjreLjLn3B2wsw5YZ87h9VpX2bYEa18eJfv5pHE2uq\"]},\"src/v2/libraries/BytesUtils.sol\":{\"keccak256\":\"0xf4f38d28724e3ef15b8bf80a00031406ebff8834b56380ed0db8c21f9d2980bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://904db267bad76d521e7aef6f7633db84fc6982a5e32bb1fa9ec849a6a540dd06\",\"dweb:/ipfs/QmTuchPeqjcYuarfn2aQrSV36ady5c65TjTMkQg1KYGxVz\"]},\"src/v2/libraries/NameEncoder.sol\":{\"keccak256\":\"0x86e5359d1c930794d87687de0eab0f76703493b2594fbc3a267d10e95a75d176\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://21fe140c0874b0df477cfd94abcf3894499488eaa5af6de88ab3efd4d2ee4ea4\",\"dweb:/ipfs/Qmf646tAaiLeqTSWLTuLXXzW9mYt6VKdopgdtXn5KGHuGy\"]}},\"version\":1}",
"metadata": {
"compiler": {
"version": "0.6.12+commit.27d51765"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_governanceProxyAddress",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address",
"indexed": true
},
{
"internalType": "bytes",
"name": "encryptedNote",
"type": "bytes",
"indexed": false
}
],
"type": "event",
"name": "EncryptedNote",
"anonymous": false
},
{
"inputs": [
{
"internalType": "address",
"name": "newInstanceRegistryProxyAddress",
"type": "address",
"indexed": false
}
],
"type": "event",
"name": "InstanceRegistryUpdated",
"anonymous": false
},
{
"inputs": [
{
"internalType": "address",
"name": "newRelayerRegistryProxyAddress",
"type": "address",
"indexed": false
}
],
"type": "event",
"name": "RelayerRegistryUpdated",
"anonymous": false
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address",
"indexed": true
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256",
"indexed": false
}
],
"type": "event",
"name": "TokenApproved",
"anonymous": false
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "_token",
"type": "address"
},
{
"internalType": "address",
"name": "_spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "approveTokenForInstance"
},
{
"inputs": [
{
"internalType": "bytes[]",
"name": "_encryptedNotes",
"type": "bytes[]"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "backupNotes"
},
{
"inputs": [
{
"internalType": "contract ITornadoInstance",
"name": "_tornado",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_commitment",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "_encryptedNote",
"type": "bytes"
}
],
"stateMutability": "payable",
"type": "function",
"name": "deposit"
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "governanceProxyAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
]
},
{
"inputs": [
{
"internalType": "address",
"name": "_instanceRegistryAddress",
"type": "address"
},
{
"internalType": "address",
"name": "_relayerRegistryAddress",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "initialize"
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "instanceRegistry",
"outputs": [
{
"internalType": "contract InstanceRegistry",
"name": "",
"type": "address"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "relayerRegistry",
"outputs": [
{
"internalType": "contract RelayerRegistry",
"name": "",
"type": "address"
}
]
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "_token",
"type": "address"
},
{
"internalType": "address payable",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "rescueTokens"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newInstanceRegistryProxyAddress",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "setInstanceRegistry"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newRelayerRegistryProxyAddress",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "setRelayerRegistry"
},
{
"inputs": [],
"stateMutability": "pure",
"type": "function",
"name": "version",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
]
},
{
"inputs": [
{
"internalType": "contract ITornadoInstance",
"name": "_tornado",
"type": "address"
},
{
"internalType": "bytes",
"name": "_proof",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "_root",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_nullifierHash",
"type": "bytes32"
},
{
"internalType": "address payable",
"name": "_recipient",
"type": "address"
},
{
"internalType": "address payable",
"name": "_relayer",
"type": "address"
},
{
"internalType": "uint256",
"name": "_fee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_refund",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function",
"name": "withdraw"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"remappings": [
":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
":@uniswap/v3-core/=lib/v3-core/",
":@uniswap/v3-periphery/=lib/v3-periphery/",
":base/=src/base/",
":common/=src/common/",
":ds-test/=lib/ds-test/src/",
":forge-std/=lib/forge-std/src/",
":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
":solmate/=lib/solmate/src/",
":src/=src/",
":torn-token/=lib/torn-token/",
":tornado-anonymity-mining/=lib/tornado-anonymity-mining/",
":tornado-governance/=lib/tornado-governance/",
":v3-core/=lib/v3-core/",
":v3-periphery/=lib/v3-periphery/contracts/"
],
"optimizer": {
"enabled": true,
"runs": 1
},
"metadata": {
"bytecodeHash": "ipfs"
},
"compilationTarget": {
"src/v2/TornadoRouter.sol": "TornadoRouter"
},
"libraries": {}
},
"sources": {
"lib/openzeppelin-contracts/contracts/GSN/Context.sol": {
"keccak256": "0xdb26cbf4d028490f49831a7865c2fe1b28db44b535ca8d343785a3b768aae183",
"urls": [
"bzz-raw://840b14ce0315c47d49ba328f1f9fa7654ded1c9e1559e6c5e777a7b2dc28bf0a",
"dweb:/ipfs/QmTLLabn4wcfGro9LEmUXUN2nwKqZSotXMvjDCLXEnLtZP"
],
"license": "MIT"
},
"lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
"keccak256": "0x4bd6402ca6b3419008c2b482aff54e66836e8cb4eba2680e42ac5884ae6424fc",
"urls": [
"bzz-raw://8f9f711fb8d0d92aeea1c327e3845d13ca1fa8f142e47f8723cd5b3106fb29a3",
"dweb:/ipfs/QmVQUReDW9f4zGqhizwHnyU8EntMs95tbASdqkGncnikba"
],
"license": "MIT"
},
"lib/openzeppelin-contracts/contracts/math/Math.sol": {
"keccak256": "0x6c234834003dfb86e2c23d12dfdde7cc01e78013d71b52162cb308b4873562cb",
"urls": [
"bzz-raw://f0e3f39b2ec26694a42c89a5d9e489d5228f1880fcf5e375c5c975ba816e5ffe",
"dweb:/ipfs/QmUErheHopnbBUSLDQAtWsmw6HsEvqTNp1QiBEuSJhmhHn"
],
"license": "MIT"
},
"lib/openzeppelin-contracts/contracts/math/SafeMath.sol": {
"keccak256": "0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806",
"urls": [
"bzz-raw://2df142592d1dc267d9549049ee3317fa190d2f87eaa565f86ab05ec83f7ab8f5",
"dweb:/ipfs/QmSkJtcfWo7c42KnL5hho6GFxK6HRNV91XABx1P7xDtfLV"
],
"license": "MIT"
},
"lib/openzeppelin-contracts/contracts/proxy/Initializable.sol": {
"keccak256": "0x8eee8bd8c216a3e437bf7a4c9844348f47a2d990e5b06cd96d250e33ab04c25a",
"urls": [
"bzz-raw://c6bb2af880b12be26b148ee99ac3a984168e7fc74721bab9cd44598a0669b038",
"dweb:/ipfs/QmPfFDaXZbThJgaVim7nvxrw1RuD2xKWCG89K6pznmC8pJ"
],
"license": "MIT"
},
"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol": {
"keccak256": "0x91e0bd6a6762d2a1700dab0849de8422611355100576c4beef1e80d82a4104a0",
"urls": [
"bzz-raw://73bbd77af0a8b07255d2ffa20728bcf13b116007c9ddac5d37046cfabb0e1e02",
"dweb:/ipfs/QmRgZgWCWCSMTTaok6o4QvWA6MgB4goS8qpb3sN7bAvaZ9"
],
"license": "MIT"
},
"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20Burnable.sol": {
"keccak256": "0x657b0d90be17331364211d74359df2a734fac864f6e88c80de7626fa33090ffb",
"urls": [
"bzz-raw://09cca25fefa2354a424d55a97930c76b11dc50697ba62c85d7affc27a37e830c",
"dweb:/ipfs/QmPTQBYXxQDSNmMKqwe4WnM8E7NwnpLnkFLSRH8hZRvrVK"
],
"license": "MIT"
},
"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
"keccak256": "0x5c26b39d26f7ed489e555d955dcd3e01872972e71fdd1528e93ec164e4f23385",
"urls": [
"bzz-raw://efdc632af6960cf865dbc113665ea1f5b90eab75cc40ec062b2f6ae6da582017",
"dweb:/ipfs/QmfAZFDuG62vxmAN9DnXApv7e7PMzPqi4RkqqZHLMSQiY5"
],
"license": "MIT"
},
"lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol": {
"keccak256": "0xf3b30f8a49631420635a8c35daacfcaa338012755f18a76fdd118730256f9a27",
"urls": [
"bzz-raw://0d7de652204c2ee291a61aa984103dfc7ae4392d651fbbc44a0079caee7c69a3",
"dweb:/ipfs/Qmcw1cQnq9eWDnrCBwU3TNyqLfTMUFg5YKpYUkELoMPuUE"
],
"license": "MIT"
},
"lib/openzeppelin-contracts/contracts/utils/Address.sol": {
"keccak256": "0xf5fa8cbdffa5ef8be49b246b5628facc30b71707e78a45d80d93b64eff3fe390",
"urls": [
"bzz-raw://774e78a9ff32792cc95db4d2ceaf3a7965bb7f0bea5e6cb7cff182b450d44b37",
"dweb:/ipfs/QmRRMC4uj7eAcLW7chynA3sNEYULMFazdLwQHKHQPyzAbA"
],
"license": "MIT"
},
"lib/openzeppelin-contracts/contracts/utils/Pausable.sol": {
"keccak256": "0x5d1b1dcbc0396f44c1c8d554857f71e3187503bf1e54062bf9ec6782e21f3a08",
"urls": [
"bzz-raw://9aa7fa580393aab7ca3d9f606f5ab7434d51e1c0f3632a593fca82c80ef8cc4c",
"dweb:/ipfs/QmRy84N7QfkwBM2AeR7UB5G1PPHdRLi6s1iyzAwCzevcHe"
],
"license": "MIT"
},
"lib/torn-token/contracts/ECDSA.sol": {
"keccak256": "0x79bc426cde97fc18147ad737052762a49c2bc93699f5cd9e81e5a4b1e8a96b17",
"urls": [
"bzz-raw://b25864983a11bd200d2fb25f83e5ac91a8f377296b6672893c3f13a0320af572",
"dweb:/ipfs/QmWbf22DMWcNQ2ULDzniro1tPte8TaEZFU9TzXZtLfkiba"
],
"license": "MIT"
},
"lib/torn-token/contracts/ENS.sol": {
"keccak256": "0x1a74cb3f0207ddf9ce92b9725f55059a14729368a2cd63f6cd7684aa02fcc68d",
"urls": [
"bzz-raw://ddda0ae37080cc88928a95370ea17eb62f14a3d7a2d46447493ed44c0a951337",
"dweb:/ipfs/QmXG2wVG16h868yBNiJ2E6q2hbHtun5qYecqTp6Zbs2cn9"
],
"license": "MIT"
},
"lib/torn-token/contracts/ERC20Permit.sol": {
"keccak256": "0x530676f79a4182eb975f031a5c49bd8908fd561eba7daaeec564439e35c49836",
"urls": [
"bzz-raw://5c45e95d4c466a23502d42830c774a51acf8566bff3cd4f8b1043fb0c988bff0",
"dweb:/ipfs/QmPLvuAJQ43dcvvFiryjrJTs3GhARx2GMBUGn3bttePQvZ"
],
"license": "MIT"
},
"lib/torn-token/contracts/TORN.sol": {
"keccak256": "0x42d542e7d9b8185bc3d01bec0c7273d31a142b2a5d0a0bfcb6f84976a0fb509c",
"urls": [
"bzz-raw://5a1b429a6fb7c9571acbd11e307c707a342a84f8e1f2bc15c215b68d45382893",
"dweb:/ipfs/QmWoGXkYgzikypE4z7pPyZdEGQt1TRK3RHhLvp6W3n6skC"
],
"license": "MIT"
},
"lib/tornado-anonymity-mining/contracts/interfaces/ITornadoInstance.sol": {
"keccak256": "0x4191422cb515705b52466027deaedb8549e472537df2fa8a53eb8dab4c719c1c",
"urls": [
"bzz-raw://1decd6abd16969b24a25374bb9c568427a94d074befa8b14a8388dfd357adcf4",
"dweb:/ipfs/Qmb6e2VR9Fxnzy9gjUFTJecdaBABbbRzEVttK8KQCi53Zz"
],
"license": "MIT"
},
"lib/tornado-governance/contracts/v2-vault-and-gas/interfaces/ITornadoVault.sol": {
"keccak256": "0xe21637c2f70be34aff3f07e32a043cedf82e5572f17829c6eaa16b348a21ca35",
"urls": [
"bzz-raw://675c164cc2956b972c24439393aba8a7103f2ed5a17d11233232cef02fc1a9fa",
"dweb:/ipfs/QmQ7isKW7bxuHvFn213rdoEBuTjTku3gEDNbWtB4tC5JU3"
],
"license": "MIT"
},
"lib/v3-core/contracts/interfaces/IUniswapV3Factory.sol": {
"keccak256": "0xcc3d0c93fc9ac0febbe09f941b465b57f750bcf3b48432da0b97dc289cfdc489",
"urls": [
"bzz-raw://b9379ad954680c44a0bc523b314ae4c4da735f9fe1d02aa56ea5bdba6f1136f2",
"dweb:/ipfs/QmZXdgQNXKAckrXWz9R3mc47F1fvDvr28a2ewJrwNAw71B"
],
"license": "GPL-2.0-or-later"
},
"lib/v3-core/contracts/interfaces/IUniswapV3Pool.sol": {
"keccak256": "0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1",
"urls": [
"bzz-raw://1c42b9e6f5902ac38dd43e25750939baa7e0c1425dc75afd717c4412731065d5",
"dweb:/ipfs/QmWaoacnzsucTvBME2o7YgZBZMhaHv7fkj83htHMVWJKWh"
],
"license": "GPL-2.0-or-later"
},
"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol": {
"keccak256": "0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634",
"urls": [
"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5",
"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ"
],
"license": "GPL-2.0-or-later"
},
"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol": {
"keccak256": "0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5",
"urls": [
"bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7",
"dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c"
],
"license": "GPL-2.0-or-later"
},
"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol": {
"keccak256": "0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd",
"urls": [
"bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03",
"dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39"
],
"license": "GPL-2.0-or-later"
},
"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol": {
"keccak256": "0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7",
"urls": [
"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047",
"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3"
],
"license": "GPL-2.0-or-later"
},
"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol": {
"keccak256": "0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235",
"urls": [
"bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735",
"dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u"
],
"license": "GPL-2.0-or-later"
},
"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol": {
"keccak256": "0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f",
"urls": [
"bzz-raw://ed63907c38ff36b0e22bc9ffc53e791ea74f0d4f0e7c257fdfb5aaf8825b1f0f",
"dweb:/ipfs/QmSQrckghEjs6HVsA5GVgpNpZWvTXMY5eQLF7cN6deFeEg"
],
"license": "GPL-2.0-or-later"
},
"lib/v3-core/contracts/libraries/FullMath.sol": {
"keccak256": "0x50e87f7a3197525d1c6f7e04290060e848677c8a4e86c554bc6ace4a4d0d476d",
"urls": [
"bzz-raw://3874093a6b37d8e68f9475a91f8eb0a1c808cb6153c84cfe6c37909505a4d24e",
"dweb:/ipfs/QmUqGpQqvSHX4SwUvcBCs9g4ZhR9JPhgD3615oUigAhtjj"
],
"license": "MIT"
},
"lib/v3-core/contracts/libraries/LowGasSafeMath.sol": {
"keccak256": "0xe8bfdbbb772332bff49d5e40f2533ed6285f6b53f553779b12ca4f2d23adba80",
"urls": [
"bzz-raw://173e8eb626b4f31fcfae86846075c07045de237072e0544bf71a7168d8bbbb4c",
"dweb:/ipfs/QmSTGJ9B2qsHwupg3qfjnd5wfRfKiXj786KoPzPcqzpcyA"
],
"license": "GPL-2.0-or-later"
},
"lib/v3-core/contracts/libraries/TickMath.sol": {
"keccak256": "0xda8c2c0b12d2976acfd364453ba5f5bf0117ba3c91175ee9e1067d3fb26944d9",
"urls": [
"bzz-raw://3f3d2d7c2723c91830c74d96292f28fc1cfe28d388cdb9c1a5ebadb4c2b96f81",
"dweb:/ipfs/QmYU4wk8MEm33wVWR38LoncvR7b8PP1mLuGBKX3dUpYJVE"
],
"license": "GPL-2.0-or-later"
},
"lib/v3-periphery/contracts/libraries/OracleLibrary.sol": {
"keccak256": "0x19517bf2478c3ec56253f37b48adde7f34a6acdb467e329f74d79f9e72e2a63f",
"urls": [
"bzz-raw://c2a6c20fb775e7a55ff9d6eb6f13982ca019e9fec3caecda5b21b6671335a5c1",
"dweb:/ipfs/QmannSYDmR9Novyks8KRHe4u4PajfvkGU39owUBzfwy4rn"
],
"license": "GPL-2.0-or-later"
},
"lib/v3-periphery/contracts/libraries/PoolAddress.sol": {
"keccak256": "0x5edd84eb8ba7c12fd8cb6cffe52e1e9f3f6464514ee5f539c2283826209035a2",
"urls": [
"bzz-raw://f375d0e6d5ea3674e1aa6f112b021e9a86721a6a2f3cb22d673378b30cf0e840",
"dweb:/ipfs/QmWJir2qnJyp963mU6U3jEEx9i3H3V5BgKawAfSnG1pC8w"
],
"license": "GPL-2.0-or-later"
},
"src/v1/RelayerRegistry.sol": {
"keccak256": "0x1d6891499ac2f695e793f4a2b7baed0e7a18ff5914b5253821ebc50a77c782cc",
"urls": [
"bzz-raw://dbb0db5573900ba9e95b26586563c7a9110a340a718d4859267eadae97649af8",
"dweb:/ipfs/QmeWhAuijGSmRNXA6Ak4VkxttjiQVWZ4zEhbWhMkZKnvNc"
],
"license": "MIT"
},
"src/v1/interfaces/IENS.sol": {
"keccak256": "0x87c80e0171500b48d27bb0a755b4d39456e06dcbd933b58e8f5b87c1c3801ffa",
"urls": [
"bzz-raw://861361a14de14752f92d9b6970db045a5723a217169a9f31bf23f09f45a2a62c",
"dweb:/ipfs/QmcroHgR19W1Q13Gnyuy8Jz6JNQRBg29gTYfE9vvLSizmz"
],
"license": "MIT"
},
"src/v1/interfaces/ITornadoGovernance.sol": {
"keccak256": "0x2d0dcef36ce6f0253842ef0018b77d6d78f37277512704485e4bd46815361755",
"urls": [
"bzz-raw://2e38471c53781cdfa9b4e1fcbb269b8b53538f15b47ac98a94627e954469eedc",
"dweb:/ipfs/QmaziThzmm3GWTMm4mHK7g8dfxnigsNAea4CXTyqDhEsm8"
],
"license": "MIT"
},
"src/v1/libraries/UniswapV3OracleHelper.sol": {
"keccak256": "0x195f3dd9a0c5d1eb94d16bb37c81c7cc385cae3d4312cf6c726c1590bed09825",
"urls": [
"bzz-raw://fb50afd519913e6a1bc2e7fb9d1d164cfccb2c73d8999a117c443ca1e4ccb359",
"dweb:/ipfs/QmaaETZMRGsqwaKTyBd3rYt28FX7vipWSPdk8TMhjkXaEd"
],
"license": "MIT"
},
"src/v1/staking/TornadoStakingRewards.sol": {
"keccak256": "0x6a28ab49ed99ed5425f693d66ea642be89276df00b7acbfe01d7ce5b91d4961f",
"urls": [
"bzz-raw://c85e501bf562edb7b0bcd295f3368b024cee0744f828dd479dee777d6388462e",
"dweb:/ipfs/QmUZW5pYamQZ4jGmvxkRYaP5zde3jKWVZVrHhWaNPViL5t"
],
"license": "MIT"
},
"src/v1/tornado-proxy/FeeManager.sol": {
"keccak256": "0x8673b18b341b88e14b22d69eb53807f5c2b22013ee9141d147581e778c5a8a79",
"urls": [
"bzz-raw://bfff3be5479ee3790aa05e14abc5973253c834986719f98de2e11b9a0a22144b",
"dweb:/ipfs/QmNZMvjTWNffdVg4TuvTu9BKLuSDq4JCmDgtbBfQSkKCRv"
],
"license": "MIT"
},
"src/v1/tornado-proxy/InstanceRegistry.sol": {
"keccak256": "0x05e71dd64c375c792b3de49d056cbcc4320ef11ef6eb53893d5da0b34ff81eb9",
"urls": [
"bzz-raw://2c0a4821c6af8f036ebd04774ab06a152518578c5181c82aa992c3372d7c0a67",
"dweb:/ipfs/QmVCStgcq9XVU6D2MUK29Yu3CPWcgkSWfVcUaB8PYQgdP7"
],
"license": "MIT"
},
"src/v1/tornado-proxy/TornadoRouter.sol": {
"keccak256": "0x542deec857cd3890853be01279c070d5c9b57cd91c37bd5a47f043d8a10c5894",
"urls": [
"bzz-raw://754884b828960f0be4d3a39b317db83c00b5011a9129efad6f38a9b768478834",
"dweb:/ipfs/QmfMpBmmPhFDoLpijBhScpK8GpvxzDkbK4Np9cbqLou7mJ"
],
"license": "MIT"
},
"src/v1/utils/ENSNamehash.sol": {
"keccak256": "0x23cfca6c28ed4e68d959700f2fd3fc497ea6b1d381298ef7749e97c1af849b88",
"urls": [
"bzz-raw://3ff128bd602cc7851baeab3b7d60e42fc0943f43193c4f94aceb8e26a39710b7",
"dweb:/ipfs/QmRaDvU2HW4tirEuSjEDBP4z7UTSBx8FWGCLxUJdmZW5SP"
],
"license": "MIT"
},
"src/v2/InstanceRegistry.sol": {
"keccak256": "0xe64ee02ad33c182e9b78f5d5ebc868f753208d5d10a31785bccb81644778dbe7",
"urls": [
"bzz-raw://a920f392c498cffdd07b5617108c85e544b4ee2d8431b64dcfb1d105cbc09e31",
"dweb:/ipfs/QmTQ3U8i6AF338jUVCedvVFjk4h9jNyAmY8WZQw9zT2Htz"
],
"license": "MIT"
},
"src/v2/TornadoRouter.sol": {
"keccak256": "0x40913fa941327535ccb0ff148f5c818ea64bedf5eed90309109d9bbeebbdc31f",
"urls": [
"bzz-raw://a68dff41ca8f1619471cc07a9bcb3a09c30eeee7281297942b8c7d50ac78206e",
"dweb:/ipfs/QmdDNjreLjLn3B2wsw5YZ87h9VpX2bYEa18eJfv5pHE2uq"
],
"license": "MIT"
},
"src/v2/libraries/BytesUtils.sol": {
"keccak256": "0xf4f38d28724e3ef15b8bf80a00031406ebff8834b56380ed0db8c21f9d2980bc",
"urls": [
"bzz-raw://904db267bad76d521e7aef6f7633db84fc6982a5e32bb1fa9ec849a6a540dd06",
"dweb:/ipfs/QmTuchPeqjcYuarfn2aQrSV36ady5c65TjTMkQg1KYGxVz"
],
"license": "MIT"
},
"src/v2/libraries/NameEncoder.sol": {
"keccak256": "0x86e5359d1c930794d87687de0eab0f76703493b2594fbc3a267d10e95a75d176",
"urls": [
"bzz-raw://21fe140c0874b0df477cfd94abcf3894499488eaa5af6de88ab3efd4d2ee4ea4",
"dweb:/ipfs/Qmf646tAaiLeqTSWLTuLXXzW9mYt6VKdopgdtXn5KGHuGy"
],
"license": "MIT"
}
},
"version": 1
},
"ast": {
"absolutePath": "src/v2/TornadoRouter.sol",
"id": 39622,
"exportedSymbols": {
"TornadoRouter": [
39621
]
},
"nodeType": "SourceUnit",
"src": "33:5731:67",
"nodes": [
{
"id": 39217,
"nodeType": "PragmaDirective",
"src": "33:24:67",
"nodes": [],
"literals": [
"solidity",
"^",
"0.6",
".12"
]
},
{
"id": 39218,
"nodeType": "PragmaDirective",
"src": "58:33:67",
"nodes": [],
"literals": [
"experimental",
"ABIEncoderV2"
]
},
{
"id": 39220,
"nodeType": "ImportDirective",
"src": "108:72:67",
"nodes": [],
"absolutePath": "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol",
"file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
"scope": 39622,
"sourceUnit": 30240,
"symbolAliases": [
{
"foreign": {
"argumentTypes": null,
"id": 39219,
"name": "IERC20",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": null,
"src": "117:6:67",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
},
"local": null
}
],
"unitAlias": ""
},
{
"id": 39222,
"nodeType": "ImportDirective",
"src": "181:80:67",
"nodes": [],
"absolutePath": "lib/openzeppelin-contracts/contracts/proxy/Initializable.sol",
"file": "@openzeppelin/contracts/proxy/Initializable.sol",
"scope": 39622,
"sourceUnit": 29231,
"symbolAliases": [
{
"foreign": {
"argumentTypes": null,
"id": 39221,
"name": "Initializable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": null,
"src": "190:13:67",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
},
"local": null
}
],
"unitAlias": ""
},
{
"id": 39224,
"nodeType": "ImportDirective",
"src": "262:78:67",
"nodes": [],
"absolutePath": "lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol",
"file": "@openzeppelin/contracts/token/ERC20/SafeERC20.sol",
"scope": 39622,
"sourceUnit": 30453,
"symbolAliases": [
{
"foreign": {
"argumentTypes": null,
"id": 39223,
"name": "SafeERC20",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": null,
"src": "271:9:67",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
},
"local": null
}
],
"unitAlias": ""
},
{
"id": 39226,
"nodeType": "ImportDirective",
"src": "341:61:67",
"nodes": [],
"absolutePath": "lib/openzeppelin-contracts/contracts/math/Math.sol",
"file": "@openzeppelin/contracts/math/Math.sol",
"scope": 39622,
"sourceUnit": 28964,
"symbolAliases": [
{
"foreign": {
"argumentTypes": null,
"id": 39225,
"name": "Math",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": null,
"src": "350:4:67",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
},
"local": null
}
],
"unitAlias": ""
},
{
"id": 39228,
"nodeType": "ImportDirective",
"src": "424:102:67",
"nodes": [],
"absolutePath": "lib/tornado-anonymity-mining/contracts/interfaces/ITornadoInstance.sol",
"file": "tornado-anonymity-mining/contracts/interfaces/ITornadoInstance.sol",
"scope": 39622,
"sourceUnit": 31585,
"symbolAliases": [
{
"foreign": {
"argumentTypes": null,
"id": 39227,
"name": "ITornadoInstance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": null,
"src": "433:16:67",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
},
"local": null
}
],
"unitAlias": ""
},
{
"id": 39230,
"nodeType": "ImportDirective",
"src": "546:60:67",
"nodes": [],
"absolutePath": "src/v1/RelayerRegistry.sol",
"file": "../v1/RelayerRegistry.sol",
"scope": 39622,
"sourceUnit": 35364,
"symbolAliases": [
{
"foreign": {
"argumentTypes": null,
"id": 39229,
"name": "RelayerRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": null,
"src": "555:15:67",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
},
"local": null
}
],
"unitAlias": ""
},
{
"id": 39233,
"nodeType": "ImportDirective",
"src": "607:72:67",
"nodes": [],
"absolutePath": "src/v2/InstanceRegistry.sol",
"file": "./InstanceRegistry.sol",
"scope": 39622,
"sourceUnit": 39216,
"symbolAliases": [
{
"foreign": {
"argumentTypes": null,
"id": 39231,
"name": "InstanceRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": null,
"src": "616:16:67",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
},
"local": null
},
{
"foreign": {
"argumentTypes": null,
"id": 39232,
"name": "InstanceData",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": null,
"src": "634:12:67",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
},
"local": null
}
],
"unitAlias": ""
},
{
"id": 39621,
"nodeType": "ContractDefinition",
"src": "938:4825:67",
"nodes": [
{
"id": 39239,
"nodeType": "UsingForDirective",
"src": "984:27:67",
"nodes": [],
"libraryName": {
"contractScope": null,
"id": 39237,
"name": "SafeERC20",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 30452,
"src": "990:9:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_SafeERC20_$30452",
"typeString": "library SafeERC20"
}
},
"typeName": {
"contractScope": null,
"id": 39238,
"name": "IERC20",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 30239,
"src": "1004:6:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$30239",
"typeString": "contract IERC20"
}
}
},
{
"id": 39241,
"nodeType": "VariableDeclaration",
"src": "1159:47:67",
"nodes": [],
"constant": false,
"functionSelector": "4655478f",
"mutability": "immutable",
"name": "governanceProxyAddress",
"overrides": null,
"scope": 39621,
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 39240,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1159:7:67",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "public"
},
{
"id": 39243,
"nodeType": "VariableDeclaration",
"src": "1250:40:67",
"nodes": [],
"constant": false,
"functionSelector": "36a3874b",
"mutability": "mutable",
"name": "instanceRegistry",
"overrides": null,
"scope": 39621,
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_InstanceRegistry_$39215",
"typeString": "contract InstanceRegistry"
},
"typeName": {
"contractScope": null,
"id": 39242,
"name": "InstanceRegistry",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 39215,
"src": "1250:16:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_InstanceRegistry_$39215",
"typeString": "contract InstanceRegistry"
}
},
"value": null,
"visibility": "public"
},
{
"id": 39245,
"nodeType": "VariableDeclaration",
"src": "1333:38:67",
"nodes": [],
"constant": false,
"functionSelector": "47ff589d",
"mutability": "mutable",
"name": "relayerRegistry",
"overrides": null,
"scope": 39621,
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_RelayerRegistry_$35363",
"typeString": "contract RelayerRegistry"
},
"typeName": {
"contractScope": null,
"id": 39244,
"name": "RelayerRegistry",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 35363,
"src": "1333:15:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_RelayerRegistry_$35363",
"typeString": "contract RelayerRegistry"
}
},
"value": null,
"visibility": "public"
},
{
"id": 39251,
"nodeType": "EventDefinition",
"src": "1466:65:67",
"nodes": [],
"anonymous": false,
"documentation": null,
"name": "EncryptedNote",
"parameters": {
"id": 39250,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39247,
"indexed": true,
"mutability": "mutable",
"name": "sender",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39251,
"src": "1486:22:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 39246,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1486:7:67",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39249,
"indexed": false,
"mutability": "mutable",
"name": "encryptedNote",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39251,
"src": "1510:19:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 39248,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "1510:5:67",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1485:45:67"
}
},
{
"id": 39257,
"nodeType": "EventDefinition",
"src": "1536:61:67",
"nodes": [],
"anonymous": false,
"documentation": null,
"name": "TokenApproved",
"parameters": {
"id": 39256,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39253,
"indexed": true,
"mutability": "mutable",
"name": "spender",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39257,
"src": "1556:23:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 39252,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1556:7:67",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39255,
"indexed": false,
"mutability": "mutable",
"name": "amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39257,
"src": "1581:14:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 39254,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1581:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1555:41:67"
}
},
{
"id": 39261,
"nodeType": "EventDefinition",
"src": "1603:71:67",
"nodes": [],
"anonymous": false,
"documentation": null,
"name": "InstanceRegistryUpdated",
"parameters": {
"id": 39260,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39259,
"indexed": false,
"mutability": "mutable",
"name": "newInstanceRegistryProxyAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39261,
"src": "1633:39:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 39258,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1633:7:67",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1632:41:67"
}
},
{
"id": 39265,
"nodeType": "EventDefinition",
"src": "1679:69:67",
"nodes": [],
"anonymous": false,
"documentation": null,
"name": "RelayerRegistryUpdated",
"parameters": {
"id": 39264,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39263,
"indexed": false,
"mutability": "mutable",
"name": "newRelayerRegistryProxyAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39265,
"src": "1708:38:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 39262,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1708:7:67",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1707:40:67"
}
},
{
"id": 39275,
"nodeType": "FunctionDefinition",
"src": "1841:117:67",
"nodes": [],
"body": {
"id": 39274,
"nodeType": "Block",
"src": "1893:65:67",
"nodes": [],
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 39272,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 39270,
"name": "governanceProxyAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39241,
"src": "1903:22:67",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 39271,
"name": "_governanceProxyAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39267,
"src": "1928:23:67",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "1903:48:67",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 39273,
"nodeType": "ExpressionStatement",
"src": "1903:48:67"
}
]
},
"documentation": null,
"implemented": true,
"kind": "constructor",
"modifiers": [],
"name": "",
"overrides": null,
"parameters": {
"id": 39268,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39267,
"mutability": "mutable",
"name": "_governanceProxyAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39275,
"src": "1853:31:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 39266,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1853:7:67",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1852:33:67"
},
"returnParameters": {
"id": 39269,
"nodeType": "ParameterList",
"parameters": [],
"src": "1893:0:67"
},
"scope": 39621,
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"id": 39290,
"nodeType": "ModifierDefinition",
"src": "1964:147:67",
"nodes": [],
"body": {
"id": 39289,
"nodeType": "Block",
"src": "1996:115:67",
"nodes": [],
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 39284,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 39278,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -15,
"src": "2014:3:67",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 39279,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "2014:10:67",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39282,
"name": "instanceRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39243,
"src": "2036:16:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_InstanceRegistry_$39215",
"typeString": "contract InstanceRegistry"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_InstanceRegistry_$39215",
"typeString": "contract InstanceRegistry"
}
],
"id": 39281,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "2028:7:67",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 39280,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2028:7:67",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 39283,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2028:25:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "2014:39:67",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "546f726e61646f526f757465723a206f6e6c79496e7374616e63655265676973747279",
"id": 39285,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2055:37:67",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_fc744bc511b178eb6daf4baca1c3ed4deb9012277ccf044dc7d964a8eca3d5c1",
"typeString": "literal_string \"TornadoRouter: onlyInstanceRegistry\""
},
"value": "TornadoRouter: onlyInstanceRegistry"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_fc744bc511b178eb6daf4baca1c3ed4deb9012277ccf044dc7d964a8eca3d5c1",
"typeString": "literal_string \"TornadoRouter: onlyInstanceRegistry\""
}
],
"id": 39277,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "2006:7:67",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 39286,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2006:87:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39287,
"nodeType": "ExpressionStatement",
"src": "2006:87:67"
},
{
"id": 39288,
"nodeType": "PlaceholderStatement",
"src": "2103:1:67"
}
]
},
"documentation": null,
"name": "onlyInstanceRegistry",
"overrides": null,
"parameters": {
"id": 39276,
"nodeType": "ParameterList",
"parameters": [],
"src": "1993:2:67"
},
"virtual": false,
"visibility": "internal"
},
{
"id": 39302,
"nodeType": "ModifierDefinition",
"src": "2117:132:67",
"nodes": [],
"body": {
"id": 39301,
"nodeType": "Block",
"src": "2143:106:67",
"nodes": [],
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 39296,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 39293,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -15,
"src": "2161:3:67",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 39294,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "2161:10:67",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 39295,
"name": "governanceProxyAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39241,
"src": "2175:22:67",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "2161:36:67",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "546f726e61646f526f757465723a206f6e6c79476f7665726e616e6365",
"id": 39297,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2199:31:67",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_01e26a90b7a663b3718d6ec87d56b8bbfcf84529983e8a6bf324666efe618e21",
"typeString": "literal_string \"TornadoRouter: onlyGovernance\""
},
"value": "TornadoRouter: onlyGovernance"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_01e26a90b7a663b3718d6ec87d56b8bbfcf84529983e8a6bf324666efe618e21",
"typeString": "literal_string \"TornadoRouter: onlyGovernance\""
}
],
"id": 39292,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "2153:7:67",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 39298,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2153:78:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39299,
"nodeType": "ExpressionStatement",
"src": "2153:78:67"
},
{
"id": 39300,
"nodeType": "PlaceholderStatement",
"src": "2241:1:67"
}
]
},
"documentation": null,
"name": "onlyGovernance",
"overrides": null,
"parameters": {
"id": 39291,
"nodeType": "ParameterList",
"parameters": [],
"src": "2140:2:67"
},
"virtual": false,
"visibility": "internal"
},
{
"id": 39326,
"nodeType": "FunctionDefinition",
"src": "2255:297:67",
"nodes": [],
"body": {
"id": 39325,
"nodeType": "Block",
"src": "2406:146:67",
"nodes": [],
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 39317,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 39313,
"name": "instanceRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39243,
"src": "2416:16:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_InstanceRegistry_$39215",
"typeString": "contract InstanceRegistry"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39315,
"name": "_instanceRegistryAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39304,
"src": "2452:24:67",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 39314,
"name": "InstanceRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39215,
"src": "2435:16:67",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_InstanceRegistry_$39215_$",
"typeString": "type(contract InstanceRegistry)"
}
},
"id": 39316,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2435:42:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_InstanceRegistry_$39215",
"typeString": "contract InstanceRegistry"
}
},
"src": "2416:61:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_InstanceRegistry_$39215",
"typeString": "contract InstanceRegistry"
}
},
"id": 39318,
"nodeType": "ExpressionStatement",
"src": "2416:61:67"
},
{
"expression": {
"argumentTypes": null,
"id": 39323,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 39319,
"name": "relayerRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39245,
"src": "2487:15:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_RelayerRegistry_$35363",
"typeString": "contract RelayerRegistry"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39321,
"name": "_relayerRegistryAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39306,
"src": "2521:23:67",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 39320,
"name": "RelayerRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 35363,
"src": "2505:15:67",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_RelayerRegistry_$35363_$",
"typeString": "type(contract RelayerRegistry)"
}
},
"id": 39322,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2505:40:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_RelayerRegistry_$35363",
"typeString": "contract RelayerRegistry"
}
},
"src": "2487:58:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_RelayerRegistry_$35363",
"typeString": "contract RelayerRegistry"
}
},
"id": 39324,
"nodeType": "ExpressionStatement",
"src": "2487:58:67"
}
]
},
"documentation": null,
"functionSelector": "485cc955",
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 39309,
"modifierName": {
"argumentTypes": null,
"id": 39308,
"name": "onlyGovernance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39302,
"src": "2367:14:67",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "2367:14:67"
},
{
"arguments": null,
"id": 39311,
"modifierName": {
"argumentTypes": null,
"id": 39310,
"name": "initializer",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 29207,
"src": "2390:11:67",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "2390:11:67"
}
],
"name": "initialize",
"overrides": null,
"parameters": {
"id": 39307,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39304,
"mutability": "mutable",
"name": "_instanceRegistryAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39326,
"src": "2275:32:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 39303,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2275:7:67",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39306,
"mutability": "mutable",
"name": "_relayerRegistryAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39326,
"src": "2309:31:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 39305,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2309:7:67",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2274:67:67"
},
"returnParameters": {
"id": 39312,
"nodeType": "ParameterList",
"parameters": [],
"src": "2406:0:67"
},
"scope": 39621,
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"id": 39384,
"nodeType": "FunctionDefinition",
"src": "2558:558:67",
"nodes": [],
"body": {
"id": 39383,
"nodeType": "Block",
"src": "2705:411:67",
"nodes": [],
"statements": [
{
"assignments": [
39336,
null,
39338,
39340
],
"declarations": [
{
"constant": false,
"id": 39336,
"mutability": "mutable",
"name": "token",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39383,
"src": "2716:12:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$30239",
"typeString": "contract IERC20"
},
"typeName": {
"contractScope": null,
"id": 39335,
"name": "IERC20",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 30239,
"src": "2716:6:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$30239",
"typeString": "contract IERC20"
}
},
"value": null,
"visibility": "internal"
},
null,
{
"constant": false,
"id": 39338,
"mutability": "mutable",
"name": "isERC20",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39383,
"src": "2731:12:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 39337,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2731:4:67",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39340,
"mutability": "mutable",
"name": "isEnabled",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39383,
"src": "2745:14:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 39339,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2745:4:67",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 39345,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39343,
"name": "_tornado",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39328,
"src": "2793:8:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ITornadoInstance_$31584",
"typeString": "contract ITornadoInstance"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_ITornadoInstance_$31584",
"typeString": "contract ITornadoInstance"
}
],
"expression": {
"argumentTypes": null,
"id": 39341,
"name": "instanceRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39243,
"src": "2763:16:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_InstanceRegistry_$39215",
"typeString": "contract InstanceRegistry"
}
},
"id": 39342,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "instanceData",
"nodeType": "MemberAccess",
"referencedDeclaration": 38601,
"src": "2763:29:67",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_contract$_ITornadoInstance_$31584_$returns$_t_contract$_IERC20_$30239_$_t_uint80_$_t_bool_$_t_bool_$",
"typeString": "function (contract ITornadoInstance) view external returns (contract IERC20,uint80,bool,bool)"
}
},
"id": 39344,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2763:39:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_contract$_IERC20_$30239_$_t_uint80_$_t_bool_$_t_bool_$",
"typeString": "tuple(contract IERC20,uint80,bool,bool)"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "2715:87:67"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39347,
"name": "isEnabled",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39340,
"src": "2821:9:67",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "546f726e61646f526f757465723a20696e7374616e6365206e6f7420656e61626c6564",
"id": 39348,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2832:37:67",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_5ea0a4a02b5291891cf0e13a2784b132079e53a05498a65d22a7faa4ba6e1fcc",
"typeString": "literal_string \"TornadoRouter: instance not enabled\""
},
"value": "TornadoRouter: instance not enabled"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_5ea0a4a02b5291891cf0e13a2784b132079e53a05498a65d22a7faa4ba6e1fcc",
"typeString": "literal_string \"TornadoRouter: instance not enabled\""
}
],
"id": 39346,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "2813:7:67",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 39349,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2813:57:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39350,
"nodeType": "ExpressionStatement",
"src": "2813:57:67"
},
{
"condition": {
"argumentTypes": null,
"id": 39351,
"name": "isERC20",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39338,
"src": "2885:7:67",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 39367,
"nodeType": "IfStatement",
"src": "2881:112:67",
"trueBody": {
"id": 39366,
"nodeType": "Block",
"src": "2894:99:67",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 39355,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -15,
"src": "2931:3:67",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 39356,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "2931:10:67",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39359,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -28,
"src": "2951:4:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_TornadoRouter_$39621",
"typeString": "contract TornadoRouter"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_TornadoRouter_$39621",
"typeString": "contract TornadoRouter"
}
],
"id": 39358,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "2943:7:67",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 39357,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2943:7:67",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 39360,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2943:13:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"id": 39361,
"name": "_tornado",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39328,
"src": "2958:8:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ITornadoInstance_$31584",
"typeString": "contract ITornadoInstance"
}
},
"id": 39362,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "denomination",
"nodeType": "MemberAccess",
"referencedDeclaration": 31561,
"src": "2958:21:67",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
"typeString": "function () view external returns (uint256)"
}
},
"id": 39363,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2958:23:67",
"tryCall": false,
"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"
}
],
"expression": {
"argumentTypes": null,
"id": 39352,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39336,
"src": "2908:5:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$30239",
"typeString": "contract IERC20"
}
},
"id": 39354,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "safeTransferFrom",
"nodeType": "MemberAccess",
"referencedDeclaration": 30298,
"src": "2908:22:67",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$30239_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$30239_$",
"typeString": "function (contract IERC20,address,address,uint256)"
}
},
"id": 39364,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2908:74:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39365,
"nodeType": "ExpressionStatement",
"src": "2908:74:67"
}
]
}
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39374,
"name": "_commitment",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39330,
"src": "3040:11:67",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
],
"expression": {
"argumentTypes": null,
"id": 39368,
"name": "_tornado",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39328,
"src": "3003:8:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ITornadoInstance_$31584",
"typeString": "contract ITornadoInstance"
}
},
"id": 39370,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "deposit",
"nodeType": "MemberAccess",
"referencedDeclaration": 31566,
"src": "3003:16:67",
"typeDescriptions": {
"typeIdentifier": "t_function_external_payable$_t_bytes32_$returns$__$",
"typeString": "function (bytes32) payable external"
}
},
"id": 39373,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"names": [
"value"
],
"nodeType": "FunctionCallOptions",
"options": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 39371,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -15,
"src": "3028:3:67",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 39372,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "value",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3028:9:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"src": "3003:36:67",
"typeDescriptions": {
"typeIdentifier": "t_function_external_payable$_t_bytes32_$returns$__$value",
"typeString": "function (bytes32) payable external"
}
},
"id": 39375,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3003:49:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39376,
"nodeType": "ExpressionStatement",
"src": "3003:49:67"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 39378,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -15,
"src": "3082:3:67",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 39379,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3082:10:67",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 39380,
"name": "_encryptedNote",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39332,
"src": "3094:14:67",
"typeDescriptions": {
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes calldata"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes calldata"
}
],
"id": 39377,
"name": "EncryptedNote",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39251,
"src": "3068:13:67",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$",
"typeString": "function (address,bytes memory)"
}
},
"id": 39381,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3068:41:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39382,
"nodeType": "EmitStatement",
"src": "3063:46:67"
}
]
},
"documentation": null,
"functionSelector": "13d98d13",
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "deposit",
"overrides": null,
"parameters": {
"id": 39333,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39328,
"mutability": "mutable",
"name": "_tornado",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39384,
"src": "2575:25:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ITornadoInstance_$31584",
"typeString": "contract ITornadoInstance"
},
"typeName": {
"contractScope": null,
"id": 39327,
"name": "ITornadoInstance",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 31584,
"src": "2575:16:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ITornadoInstance_$31584",
"typeString": "contract ITornadoInstance"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39330,
"mutability": "mutable",
"name": "_commitment",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39384,
"src": "2602:19:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 39329,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "2602:7:67",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39332,
"mutability": "mutable",
"name": "_encryptedNote",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39384,
"src": "2623:29:67",
"stateVariable": false,
"storageLocation": "calldata",
"typeDescriptions": {
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 39331,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "2623:5:67",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2574:79:67"
},
"returnParameters": {
"id": 39334,
"nodeType": "ParameterList",
"parameters": [],
"src": "2705:0:67"
},
"scope": 39621,
"stateMutability": "payable",
"virtual": true,
"visibility": "public"
},
{
"id": 39440,
"nodeType": "FunctionDefinition",
"src": "3122:633:67",
"nodes": [],
"body": {
"id": 39439,
"nodeType": "Block",
"src": "3407:348:67",
"nodes": [],
"statements": [
{
"assignments": [
null,
null,
null,
39404
],
"declarations": [
null,
null,
null,
{
"constant": false,
"id": 39404,
"mutability": "mutable",
"name": "isEnabled",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39439,
"src": "3422:14:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 39403,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "3422:4:67",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 39409,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39407,
"name": "_tornado",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39386,
"src": "3470:8:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ITornadoInstance_$31584",
"typeString": "contract ITornadoInstance"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_ITornadoInstance_$31584",
"typeString": "contract ITornadoInstance"
}
],
"expression": {
"argumentTypes": null,
"id": 39405,
"name": "instanceRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39243,
"src": "3440:16:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_InstanceRegistry_$39215",
"typeString": "contract InstanceRegistry"
}
},
"id": 39406,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "instanceData",
"nodeType": "MemberAccess",
"referencedDeclaration": 38601,
"src": "3440:29:67",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_contract$_ITornadoInstance_$31584_$returns$_t_contract$_IERC20_$30239_$_t_uint80_$_t_bool_$_t_bool_$",
"typeString": "function (contract ITornadoInstance) view external returns (contract IERC20,uint80,bool,bool)"
}
},
"id": 39408,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3440:39:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_contract$_IERC20_$30239_$_t_uint80_$_t_bool_$_t_bool_$",
"typeString": "tuple(contract IERC20,uint80,bool,bool)"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "3417:62:67"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39411,
"name": "isEnabled",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39404,
"src": "3498:9:67",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "546f726e61646f526f757465723a20696e7374616e6365206e6f7420656e61626c6564",
"id": 39412,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3509:37:67",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_5ea0a4a02b5291891cf0e13a2784b132079e53a05498a65d22a7faa4ba6e1fcc",
"typeString": "literal_string \"TornadoRouter: instance not enabled\""
},
"value": "TornadoRouter: instance not enabled"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_5ea0a4a02b5291891cf0e13a2784b132079e53a05498a65d22a7faa4ba6e1fcc",
"typeString": "literal_string \"TornadoRouter: instance not enabled\""
}
],
"id": 39410,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "3490:7:67",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 39413,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3490:57:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39414,
"nodeType": "ExpressionStatement",
"src": "3490:57:67"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 39418,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -15,
"src": "3579:3:67",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 39419,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3579:10:67",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 39420,
"name": "_relayer",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39396,
"src": "3591:8:67",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 39421,
"name": "_tornado",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39386,
"src": "3601:8:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ITornadoInstance_$31584",
"typeString": "contract ITornadoInstance"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_contract$_ITornadoInstance_$31584",
"typeString": "contract ITornadoInstance"
}
],
"expression": {
"argumentTypes": null,
"id": 39415,
"name": "relayerRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39245,
"src": "3558:15:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_RelayerRegistry_$35363",
"typeString": "contract RelayerRegistry"
}
},
"id": 39417,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "burn",
"nodeType": "MemberAccess",
"referencedDeclaration": 35228,
"src": "3558:20:67",
"typeDescriptions": {
"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_contract$_ITornadoInstance_$31584_$returns$__$",
"typeString": "function (address,address,contract ITornadoInstance) external"
}
},
"id": 39422,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3558:52:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39423,
"nodeType": "ExpressionStatement",
"src": "3558:52:67"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39430,
"name": "_proof",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39388,
"src": "3672:6:67",
"typeDescriptions": {
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes calldata"
}
},
{
"argumentTypes": null,
"id": 39431,
"name": "_root",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39390,
"src": "3680:5:67",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"argumentTypes": null,
"id": 39432,
"name": "_nullifierHash",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39392,
"src": "3687:14:67",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"argumentTypes": null,
"id": 39433,
"name": "_recipient",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39394,
"src": "3703:10:67",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 39434,
"name": "_relayer",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39396,
"src": "3715:8:67",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 39435,
"name": "_fee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39398,
"src": "3725:4:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 39436,
"name": "_refund",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39400,
"src": "3731:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes calldata"
},
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes calldata"
},
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 39424,
"name": "_tornado",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39386,
"src": "3621:8:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ITornadoInstance_$31584",
"typeString": "contract ITornadoInstance"
}
},
"id": 39426,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "withdraw",
"nodeType": "MemberAccess",
"referencedDeclaration": 31583,
"src": "3621:17:67",
"typeDescriptions": {
"typeIdentifier": "t_function_external_payable$_t_bytes_memory_ptr_$_t_bytes32_$_t_bytes32_$_t_address_payable_$_t_address_payable_$_t_uint256_$_t_uint256_$returns$__$",
"typeString": "function (bytes memory,bytes32,bytes32,address payable,address payable,uint256,uint256) payable external"
}
},
"id": 39429,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"names": [
"value"
],
"nodeType": "FunctionCallOptions",
"options": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 39427,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -15,
"src": "3647:3:67",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 39428,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "value",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3647:9:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"src": "3621:37:67",
"typeDescriptions": {
"typeIdentifier": "t_function_external_payable$_t_bytes_memory_ptr_$_t_bytes32_$_t_bytes32_$_t_address_payable_$_t_address_payable_$_t_uint256_$_t_uint256_$returns$__$value",
"typeString": "function (bytes memory,bytes32,bytes32,address payable,address payable,uint256,uint256) payable external"
}
},
"id": 39437,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3621:127:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39438,
"nodeType": "ExpressionStatement",
"src": "3621:127:67"
}
]
},
"documentation": null,
"functionSelector": "b438689f",
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "withdraw",
"overrides": null,
"parameters": {
"id": 39401,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39386,
"mutability": "mutable",
"name": "_tornado",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39440,
"src": "3149:25:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ITornadoInstance_$31584",
"typeString": "contract ITornadoInstance"
},
"typeName": {
"contractScope": null,
"id": 39385,
"name": "ITornadoInstance",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 31584,
"src": "3149:16:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ITornadoInstance_$31584",
"typeString": "contract ITornadoInstance"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39388,
"mutability": "mutable",
"name": "_proof",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39440,
"src": "3184:21:67",
"stateVariable": false,
"storageLocation": "calldata",
"typeDescriptions": {
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 39387,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "3184:5:67",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39390,
"mutability": "mutable",
"name": "_root",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39440,
"src": "3215:13:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 39389,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "3215:7:67",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39392,
"mutability": "mutable",
"name": "_nullifierHash",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39440,
"src": "3238:22:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 39391,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "3238:7:67",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39394,
"mutability": "mutable",
"name": "_recipient",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39440,
"src": "3270:26:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 39393,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3270:15:67",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39396,
"mutability": "mutable",
"name": "_relayer",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39440,
"src": "3306:24:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 39395,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3306:15:67",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39398,
"mutability": "mutable",
"name": "_fee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39440,
"src": "3340:12:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 39397,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3340:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39400,
"mutability": "mutable",
"name": "_refund",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39440,
"src": "3362:15:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 39399,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3362:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3139:244:67"
},
"returnParameters": {
"id": 39402,
"nodeType": "ParameterList",
"parameters": [],
"src": "3407:0:67"
},
"scope": 39621,
"stateMutability": "payable",
"virtual": true,
"visibility": "public"
},
{
"id": 39468,
"nodeType": "FunctionDefinition",
"src": "3761:214:67",
"nodes": [],
"body": {
"id": 39467,
"nodeType": "Block",
"src": "3831:144:67",
"nodes": [],
"statements": [
{
"body": {
"id": 39465,
"nodeType": "Block",
"src": "3894:75:67",
"statements": [
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 39458,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -15,
"src": "3927:3:67",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 39459,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3927:10:67",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 39460,
"name": "_encryptedNotes",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39443,
"src": "3939:15:67",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
"typeString": "bytes calldata[] calldata"
}
},
"id": 39462,
"indexExpression": {
"argumentTypes": null,
"id": 39461,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39447,
"src": "3955:1:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3939:18:67",
"typeDescriptions": {
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes calldata"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes calldata"
}
],
"id": 39457,
"name": "EncryptedNote",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39251,
"src": "3913:13:67",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$",
"typeString": "function (address,bytes memory)"
}
},
"id": 39463,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3913:45:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39464,
"nodeType": "EmitStatement",
"src": "3908:50:67"
}
]
},
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 39453,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 39450,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39447,
"src": "3861:1:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 39451,
"name": "_encryptedNotes",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39443,
"src": "3865:15:67",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
"typeString": "bytes calldata[] calldata"
}
},
"id": 39452,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3865:22:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3861:26:67",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 39466,
"initializationExpression": {
"assignments": [
39447
],
"declarations": [
{
"constant": false,
"id": 39447,
"mutability": "mutable",
"name": "i",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39466,
"src": "3846:9:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 39446,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3846:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 39449,
"initialValue": {
"argumentTypes": null,
"hexValue": "30",
"id": 39448,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3858:1:67",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "3846:13:67"
},
"loopExpression": {
"expression": {
"argumentTypes": null,
"id": 39455,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": false,
"src": "3889:3:67",
"subExpression": {
"argumentTypes": null,
"id": 39454,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39447,
"src": "3889:1:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 39456,
"nodeType": "ExpressionStatement",
"src": "3889:3:67"
},
"nodeType": "ForStatement",
"src": "3841:128:67"
}
]
},
"documentation": null,
"functionSelector": "6485ba2a",
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "backupNotes",
"overrides": null,
"parameters": {
"id": 39444,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39443,
"mutability": "mutable",
"name": "_encryptedNotes",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39468,
"src": "3782:32:67",
"stateVariable": false,
"storageLocation": "calldata",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
"typeString": "bytes[]"
},
"typeName": {
"baseType": {
"id": 39441,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "3782:5:67",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"id": 39442,
"length": null,
"nodeType": "ArrayTypeName",
"src": "3782:7:67",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
"typeString": "bytes[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3781:34:67"
},
"returnParameters": {
"id": 39445,
"nodeType": "ParameterList",
"parameters": [],
"src": "3831:0:67"
},
"scope": 39621,
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "public"
},
{
"id": 39552,
"nodeType": "FunctionDefinition",
"src": "3981:739:67",
"nodes": [],
"body": {
"id": 39551,
"nodeType": "Block",
"src": "4114:606:67",
"nodes": [],
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"id": 39485,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 39480,
"name": "_to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39472,
"src": "4132:3:67",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "30",
"id": 39483,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4147:1:67",
"subdenomination": null,
"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": 39482,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "4139:7:67",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 39481,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "4139:7:67",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 39484,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4139:10:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "4132:17:67",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "544f524e3a2063616e206e6f742073656e6420746f207a65726f2061646472657373",
"id": 39486,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4151:36:67",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_da8d57b0dd733df825cfc05da618ee5096781f684eb785662a70edd786ac4e4f",
"typeString": "literal_string \"TORN: can not send to zero address\""
},
"value": "TORN: can not send to zero address"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_da8d57b0dd733df825cfc05da618ee5096781f684eb785662a70edd786ac4e4f",
"typeString": "literal_string \"TORN: can not send to zero address\""
}
],
"id": 39479,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "4124:7:67",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 39487,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4124:64:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39488,
"nodeType": "ExpressionStatement",
"src": "4124:64:67"
},
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_contract$_IERC20_$30239",
"typeString": "contract IERC20"
},
"id": 39493,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 39489,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39470,
"src": "4203:6:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$30239",
"typeString": "contract IERC20"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "30",
"id": 39491,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4220:1:67",
"subdenomination": null,
"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": 39490,
"name": "IERC20",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 30239,
"src": "4213:6:67",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_IERC20_$30239_$",
"typeString": "type(contract IERC20)"
}
},
"id": 39492,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4213:9:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$30239",
"typeString": "contract IERC20"
}
},
"src": "4203:19:67",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": {
"id": 39549,
"nodeType": "Block",
"src": "4422:292:67",
"statements": [
{
"assignments": [
39518
],
"declarations": [
{
"constant": false,
"id": 39518,
"mutability": "mutable",
"name": "totalBalance",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39549,
"src": "4471:20:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 39517,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4471:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 39526,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39523,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -28,
"src": "4519:4:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_TornadoRouter_$39621",
"typeString": "contract TornadoRouter"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_TornadoRouter_$39621",
"typeString": "contract TornadoRouter"
}
],
"id": 39522,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "4511:7:67",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 39521,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "4511:7:67",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 39524,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4511:13:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"expression": {
"argumentTypes": null,
"id": 39519,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39470,
"src": "4494:6:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$30239",
"typeString": "contract IERC20"
}
},
"id": 39520,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "balanceOf",
"nodeType": "MemberAccess",
"referencedDeclaration": 30178,
"src": "4494:16:67",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
"typeString": "function (address) view external returns (uint256)"
}
},
"id": 39525,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4494:31:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4471:54:67"
},
{
"assignments": [
39528
],
"declarations": [
{
"constant": false,
"id": 39528,
"mutability": "mutable",
"name": "balance",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39549,
"src": "4539:15:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 39527,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4539:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 39534,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39531,
"name": "totalBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39518,
"src": "4566:12:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 39532,
"name": "_amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39474,
"src": "4580:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 39529,
"name": "Math",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 28963,
"src": "4557:4:67",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_Math_$28963_$",
"typeString": "type(library Math)"
}
},
"id": 39530,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "min",
"nodeType": "MemberAccess",
"referencedDeclaration": 28929,
"src": "4557:8:67",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 39533,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4557:31:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4539:49:67"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 39538,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 39536,
"name": "balance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39528,
"src": "4610:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 39537,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4620:1:67",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "4610:11:67",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "544f524e3a20747279696e6720746f2073656e6420302062616c616e6365",
"id": 39539,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4623:32:67",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_ef5568bcff8e2227b9a781f79a9b9557ab6926fbd248d437e304f821cea896f2",
"typeString": "literal_string \"TORN: trying to send 0 balance\""
},
"value": "TORN: trying to send 0 balance"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_ef5568bcff8e2227b9a781f79a9b9557ab6926fbd248d437e304f821cea896f2",
"typeString": "literal_string \"TORN: trying to send 0 balance\""
}
],
"id": 39535,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "4602:7:67",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 39540,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4602:54:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39541,
"nodeType": "ExpressionStatement",
"src": "4602:54:67"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39545,
"name": "_to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39472,
"src": "4690:3:67",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 39546,
"name": "balance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39528,
"src": "4695:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 39542,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39470,
"src": "4670:6:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$30239",
"typeString": "contract IERC20"
}
},
"id": 39544,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "safeTransfer",
"nodeType": "MemberAccess",
"referencedDeclaration": 30273,
"src": "4670:19:67",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$30239_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$30239_$",
"typeString": "function (contract IERC20,address,uint256)"
}
},
"id": 39547,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4670:33:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39548,
"nodeType": "ExpressionStatement",
"src": "4670:33:67"
}
]
},
"id": 39550,
"nodeType": "IfStatement",
"src": "4199:515:67",
"trueBody": {
"id": 39516,
"nodeType": "Block",
"src": "4224:192:67",
"statements": [
{
"assignments": [
39495
],
"declarations": [
{
"constant": false,
"id": 39495,
"mutability": "mutable",
"name": "totalBalance",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39516,
"src": "4263:20:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 39494,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4263:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 39501,
"initialValue": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39498,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -28,
"src": "4294:4:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_TornadoRouter_$39621",
"typeString": "contract TornadoRouter"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_TornadoRouter_$39621",
"typeString": "contract TornadoRouter"
}
],
"id": 39497,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "4286:7:67",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 39496,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "4286:7:67",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 39499,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4286:13:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 39500,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "4286:21:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4263:44:67"
},
{
"assignments": [
39503
],
"declarations": [
{
"constant": false,
"id": 39503,
"mutability": "mutable",
"name": "balance",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39516,
"src": "4321:15:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 39502,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4321:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 39509,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39506,
"name": "totalBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39495,
"src": "4348:12:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 39507,
"name": "_amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39474,
"src": "4362:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 39504,
"name": "Math",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 28963,
"src": "4339:4:67",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_Math_$28963_$",
"typeString": "type(library Math)"
}
},
"id": 39505,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "min",
"nodeType": "MemberAccess",
"referencedDeclaration": 28929,
"src": "4339:8:67",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 39508,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4339:31:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4321:49:67"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39513,
"name": "balance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39503,
"src": "4397:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 39510,
"name": "_to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39472,
"src": "4384:3:67",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"id": 39512,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "transfer",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "4384:12:67",
"typeDescriptions": {
"typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
"typeString": "function (uint256)"
}
},
"id": 39514,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4384:21:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39515,
"nodeType": "ExpressionStatement",
"src": "4384:21:67"
}
]
}
}
]
},
"documentation": null,
"functionSelector": "cea9d26f",
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 39477,
"modifierName": {
"argumentTypes": null,
"id": 39476,
"name": "onlyGovernance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39302,
"src": "4095:14:67",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "4095:14:67"
}
],
"name": "rescueTokens",
"overrides": null,
"parameters": {
"id": 39475,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39470,
"mutability": "mutable",
"name": "_token",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39552,
"src": "4003:13:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$30239",
"typeString": "contract IERC20"
},
"typeName": {
"contractScope": null,
"id": 39469,
"name": "IERC20",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 30239,
"src": "4003:6:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$30239",
"typeString": "contract IERC20"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39472,
"mutability": "mutable",
"name": "_to",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39552,
"src": "4018:19:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 39471,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "4018:15:67",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39474,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39552,
"src": "4039:15:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 39473,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4039:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "4002:53:67"
},
"returnParameters": {
"id": 39478,
"nodeType": "ParameterList",
"parameters": [],
"src": "4114:0:67"
},
"scope": 39621,
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "public"
},
{
"id": 39576,
"nodeType": "FunctionDefinition",
"src": "4815:234:67",
"nodes": [],
"body": {
"id": 39575,
"nodeType": "Block",
"src": "4948:101:67",
"nodes": [],
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39566,
"name": "_spender",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39556,
"src": "4977:8:67",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 39567,
"name": "_amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39558,
"src": "4987:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 39563,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39554,
"src": "4958:6:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$30239",
"typeString": "contract IERC20"
}
},
"id": 39565,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "safeApprove",
"nodeType": "MemberAccess",
"referencedDeclaration": 30341,
"src": "4958:18:67",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$30239_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$30239_$",
"typeString": "function (contract IERC20,address,uint256)"
}
},
"id": 39568,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4958:37:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39569,
"nodeType": "ExpressionStatement",
"src": "4958:37:67"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39571,
"name": "_spender",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39556,
"src": "5024:8:67",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 39572,
"name": "_amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39558,
"src": "5034:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 39570,
"name": "TokenApproved",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39257,
"src": "5010:13:67",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,uint256)"
}
},
"id": 39573,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5010:32:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39574,
"nodeType": "EmitStatement",
"src": "5005:37:67"
}
]
},
"documentation": null,
"functionSelector": "4b704c97",
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 39561,
"modifierName": {
"argumentTypes": null,
"id": 39560,
"name": "onlyInstanceRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39290,
"src": "4923:20:67",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "4923:20:67"
}
],
"name": "approveTokenForInstance",
"overrides": null,
"parameters": {
"id": 39559,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39554,
"mutability": "mutable",
"name": "_token",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39576,
"src": "4848:13:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$30239",
"typeString": "contract IERC20"
},
"typeName": {
"contractScope": null,
"id": 39553,
"name": "IERC20",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 30239,
"src": "4848:6:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$30239",
"typeString": "contract IERC20"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39556,
"mutability": "mutable",
"name": "_spender",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39576,
"src": "4863:16:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 39555,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "4863:7:67",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 39558,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39576,
"src": "4881:15:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 39557,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4881:7:67",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "4847:50:67"
},
"returnParameters": {
"id": 39562,
"nodeType": "ParameterList",
"parameters": [],
"src": "4948:0:67"
},
"scope": 39621,
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"id": 39594,
"nodeType": "FunctionDefinition",
"src": "5055:253:67",
"nodes": [],
"body": {
"id": 39593,
"nodeType": "Block",
"src": "5150:158:67",
"nodes": [],
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 39587,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 39583,
"name": "instanceRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39243,
"src": "5160:16:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_InstanceRegistry_$39215",
"typeString": "contract InstanceRegistry"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39585,
"name": "_newInstanceRegistryProxyAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39578,
"src": "5196:32:67",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 39584,
"name": "InstanceRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39215,
"src": "5179:16:67",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_InstanceRegistry_$39215_$",
"typeString": "type(contract InstanceRegistry)"
}
},
"id": 39586,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5179:50:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_InstanceRegistry_$39215",
"typeString": "contract InstanceRegistry"
}
},
"src": "5160:69:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_InstanceRegistry_$39215",
"typeString": "contract InstanceRegistry"
}
},
"id": 39588,
"nodeType": "ExpressionStatement",
"src": "5160:69:67"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39590,
"name": "_newInstanceRegistryProxyAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39578,
"src": "5268:32:67",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 39589,
"name": "InstanceRegistryUpdated",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39261,
"src": "5244:23:67",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
"typeString": "function (address)"
}
},
"id": 39591,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5244:57:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39592,
"nodeType": "EmitStatement",
"src": "5239:62:67"
}
]
},
"documentation": null,
"functionSelector": "baaa2169",
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 39581,
"modifierName": {
"argumentTypes": null,
"id": 39580,
"name": "onlyGovernance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39302,
"src": "5135:14:67",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "5135:14:67"
}
],
"name": "setInstanceRegistry",
"overrides": null,
"parameters": {
"id": 39579,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39578,
"mutability": "mutable",
"name": "_newInstanceRegistryProxyAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39594,
"src": "5084:40:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 39577,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "5084:7:67",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5083:42:67"
},
"returnParameters": {
"id": 39582,
"nodeType": "ParameterList",
"parameters": [],
"src": "5150:0:67"
},
"scope": 39621,
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"id": 39612,
"nodeType": "FunctionDefinition",
"src": "5314:246:67",
"nodes": [],
"body": {
"id": 39611,
"nodeType": "Block",
"src": "5407:153:67",
"nodes": [],
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 39605,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 39601,
"name": "relayerRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39245,
"src": "5417:15:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_RelayerRegistry_$35363",
"typeString": "contract RelayerRegistry"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39603,
"name": "_newRelayerRegistryProxyAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39596,
"src": "5451:31:67",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 39602,
"name": "RelayerRegistry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 35363,
"src": "5435:15:67",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_RelayerRegistry_$35363_$",
"typeString": "type(contract RelayerRegistry)"
}
},
"id": 39604,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5435:48:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_RelayerRegistry_$35363",
"typeString": "contract RelayerRegistry"
}
},
"src": "5417:66:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_RelayerRegistry_$35363",
"typeString": "contract RelayerRegistry"
}
},
"id": 39606,
"nodeType": "ExpressionStatement",
"src": "5417:66:67"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 39608,
"name": "_newRelayerRegistryProxyAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39596,
"src": "5521:31:67",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 39607,
"name": "RelayerRegistryUpdated",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39265,
"src": "5498:22:67",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
"typeString": "function (address)"
}
},
"id": 39609,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5498:55:67",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 39610,
"nodeType": "EmitStatement",
"src": "5493:60:67"
}
]
},
"documentation": null,
"functionSelector": "64cb2811",
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 39599,
"modifierName": {
"argumentTypes": null,
"id": 39598,
"name": "onlyGovernance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 39302,
"src": "5392:14:67",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "5392:14:67"
}
],
"name": "setRelayerRegistry",
"overrides": null,
"parameters": {
"id": 39597,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39596,
"mutability": "mutable",
"name": "_newRelayerRegistryProxyAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39612,
"src": "5342:39:67",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 39595,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "5342:7:67",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5341:41:67"
},
"returnParameters": {
"id": 39600,
"nodeType": "ParameterList",
"parameters": [],
"src": "5407:0:67"
},
"scope": 39621,
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"id": 39620,
"nodeType": "FunctionDefinition",
"src": "5655:106:67",
"nodes": [],
"body": {
"id": 39619,
"nodeType": "Block",
"src": "5718:43:67",
"nodes": [],
"statements": [
{
"expression": {
"argumentTypes": null,
"hexValue": "76322d6f7261636c652d6d616e61676572",
"id": 39617,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5735:19:67",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_34b45b9e37b59487530441f54f769d2f25a407cbe71ef48108dd8bf559dfae4c",
"typeString": "literal_string \"v2-oracle-manager\""
},
"value": "v2-oracle-manager"
},
"functionReturnParameters": 39616,
"id": 39618,
"nodeType": "Return",
"src": "5728:26:67"
}
]
},
"documentation": null,
"functionSelector": "54fd4d50",
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "version",
"overrides": null,
"parameters": {
"id": 39613,
"nodeType": "ParameterList",
"parameters": [],
"src": "5671:2:67"
},
"returnParameters": {
"id": 39616,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39615,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 39620,
"src": "5703:13:67",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 39614,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "5703:6:67",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5702:15:67"
},
"scope": 39621,
"stateMutability": "pure",
"virtual": true,
"visibility": "public"
}
],
"abstract": false,
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 39235,
"name": "Initializable",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 29230,
"src": "964:13:67",
"typeDescriptions": {
"typeIdentifier": "t_contract$_Initializable_$29230",
"typeString": "contract Initializable"
}
},
"id": 39236,
"nodeType": "InheritanceSpecifier",
"src": "964:13:67"
}
],
"contractDependencies": [
29230
],
"contractKind": "contract",
"documentation": {
"id": 39234,
"nodeType": "StructuredDocumentation",
"src": "681:256:67",
"text": " @title TornadoRouter\n @author AlienTornadosaurusHex\n @notice This contracts is a router for all Tornado Cash deposits and withdrawals\n @dev This is an improved version of the TornadoRouter with a modified design from the original contract."
},
"fullyImplemented": true,
"linearizedBaseContracts": [
39621,
29230
],
"name": "TornadoRouter",
"scope": 39622
}
],
"license": "MIT"
},
"id": 67
}