{
  "contractName": "DVDTransferManager",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "transferID",
          "type": "bytes32"
        }
      ],
      "name": "DVDTransferCancelled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "transferID",
          "type": "bytes32"
        }
      ],
      "name": "DVDTransferExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "transferID",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "maker",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "token1Amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "taker",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token2",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "token2Amount",
          "type": "uint256"
        }
      ],
      "name": "DVDTransferInitiated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "parity",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "token2",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fee1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fee2",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeBase",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "fee1Wallet",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "fee2Wallet",
          "type": "address"
        }
      ],
      "name": "FeeModified",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "fee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "token1Fee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "token2Fee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeBase",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "fee1Wallet",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "fee2Wallet",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "token1ToDeliver",
      "outputs": [
        {
          "internalType": "address",
          "name": "counterpart",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "token2ToDeliver",
      "outputs": [
        {
          "internalType": "address",
          "name": "counterpart",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "txNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token1",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token2",
          "type": "address"
        }
      ],
      "name": "calculateParity",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "isTREX",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "isTREXAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "isTREXOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_maker",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token1",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_token1Amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_taker",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token2",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_token2Amount",
          "type": "uint256"
        }
      ],
      "name": "calculateTransferID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token1",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token2",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_fee1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_fee2",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_feeBase",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_fee1Wallet",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_fee2Wallet",
          "type": "address"
        }
      ],
      "name": "modifyFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token1",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_token1Amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_counterpart",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token2",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_token2Amount",
          "type": "uint256"
        }
      ],
      "name": "initiateDVDTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_transferID",
          "type": "bytes32"
        }
      ],
      "name": "takeDVDTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_transferID",
          "type": "bytes32"
        }
      ],
      "name": "cancelDVDTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_transferID",
          "type": "bytes32"
        }
      ],
      "name": "calculateFee",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "txFee1",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "txFee2",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "fee1Wallet",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "fee2Wallet",
              "type": "address"
            }
          ],
          "internalType": "struct DVDTransferManager.TxFees",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferID\",\"type\":\"bytes32\"}],\"name\":\"DVDTransferCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferID\",\"type\":\"bytes32\"}],\"name\":\"DVDTransferExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"token1Amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token2\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"token2Amount\",\"type\":\"uint256\"}],\"name\":\"DVDTransferInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parity\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token2\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee2\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeBase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"fee1Wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"fee2Wallet\",\"type\":\"address\"}],\"name\":\"FeeModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferID\",\"type\":\"bytes32\"}],\"name\":\"calculateFee\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"txFee1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"txFee2\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fee1Wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fee2Wallet\",\"type\":\"address\"}],\"internalType\":\"struct DVDTransferManager.TxFees\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token2\",\"type\":\"address\"}],\"name\":\"calculateParity\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_maker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token1\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_token1Amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_taker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token2\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_token2Amount\",\"type\":\"uint256\"}],\"name\":\"calculateTransferID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferID\",\"type\":\"bytes32\"}],\"name\":\"cancelDVDTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"token1Fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"token2Fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeBase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fee1Wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fee2Wallet\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token1\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_token1Amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_counterpart\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token2\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_token2Amount\",\"type\":\"uint256\"}],\"name\":\"initiateDVDTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"isTREX\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"isTREXAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"isTREXOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token2\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_fee1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fee2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeBase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_fee1Wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_fee2Wallet\",\"type\":\"address\"}],\"name\":\"modifyFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferID\",\"type\":\"bytes32\"}],\"name\":\"takeDVDTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"token1ToDeliver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"counterpart\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"token2ToDeliver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"counterpart\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"txNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DVDTransferCancelled(bytes32)\":{\"details\":\"Emitted when a DVD transfer is cancelled this event is emitted by the `cancelDVDTransfer` function\"},\"DVDTransferExecuted(bytes32)\":{\"details\":\"Emitted when a DVD transfer is validated by `taker` and executed either by `taker` either by the agent of the TREX token if the TREX token is subject to conditional transfers this event is emitted by the `takeDVDTransfer` function\"},\"DVDTransferInitiated(bytes32,address,address,uint256,address,address,uint256)\":{\"details\":\"Emitted when a DVD transfer is initiated by `maker` to swap `token1Amount` tokens `token1` (TREX or not) for `token2Amount` tokens `token2` with `taker` this event is emitted by the `initiateDVDTransfer` function\"},\"FeeModified(bytes32,address,address,uint256,uint256,uint256,address,address)\":{\"details\":\"Emitted when a DVD transfer is cancelled this event is emitted by the `cancelDVDTransfer` function\"}},\"kind\":\"dev\",\"methods\":{\"calculateFee(bytes32)\":{\"details\":\"calculates the fees to apply to a specific transfer depending on the fees applied to the parity used in the transfer\",\"params\":{\"_transferID\":\"the DVD transfer identifier as calculated through the `calculateTransferID` function for the transfer to calculate fees on  requires `_transferID` to exist (DVD transfer has to be initiated)  returns the fees to apply on each leg of the transfer in the form of a `TxFees` struct\"}},\"calculateParity(address,address)\":{\"details\":\"calculates the parity byte signature\",\"params\":{\"_token1\":\"the address of the base token\",\"_token2\":\"the address of the counterpart token  return the byte signature of the parity\"}},\"calculateTransferID(uint256,address,address,uint256,address,address,uint256)\":{\"details\":\"calculates the transferID depending on DVD transfer parameters\",\"params\":{\"_maker\":\"the address of the DVD transfer maker (initiator of the transfer)\",\"_nonce\":\"the nonce of the transfer on the smart contract\",\"_taker\":\"the address of the DVD transfer taker (executor of the transfer)\",\"_token1\":\"the address of the token that the maker is providing\",\"_token1Amount\":\"the amount of tokens `_token1` provided by the maker\",\"_token2\":\"the address of the token that the taker is providing\",\"_token2Amount\":\"the amount of tokens `_token2` provided by the taker  return the identifier of the DVD transfer as a byte signature\"}},\"cancelDVDTransfer(bytes32)\":{\"details\":\"delete a pending DVD transfer that was previously initiated through the `initiateDVDTransfer` function from the pool\",\"params\":{\"_transferID\":\"the DVD transfer identifier as calculated through the `calculateTransferID` function for the initiated DVD transfer to delete  requires `_transferID` to exist (DVD transfer has to be initiated)  requires that `msg.sender` is the taker or the maker or the `DVDTransferManager` contract owner or the TREX agent in case a TREX token is involved in the transfer  once the `cancelDVDTransfer` is executed the `_transferID` is removed from the pending `_transferID` pool  emits a `DVDTransferCancelled` event\"}},\"initiateDVDTransfer(address,uint256,address,address,uint256)\":{\"details\":\"initiates a DVD transfer between `msg.sender` & `_counterpart`\",\"params\":{\"_counterpart\":\"the address of the counterpart, which will receive `_token1Amount` of `_token1` in exchange for  `_token2Amount` of `_token2`\",\"_token1\":\"the address of the token (ERC20 or TREX) provided by `msg.sender`\",\"_token1Amount\":\"the amount of `_token1` that `msg.sender` will send to `_counterpart` at DVD execution time\",\"_token2\":\"the address of the token (ERC20 or TREX) provided by `_counterpart`\",\"_token2Amount\":\"the amount of `_token2` that `_counterpart` will send to `msg.sender` at DVD execution time  requires `msg.sender` to have enough `_token1` tokens to process the DVD transfer  requires `DVDTransferManager` contract to have the necessary allowance to process the DVD transfer on `msg.sender`  requires `_counterpart` to not be the 0 address  requires `_token1` & `_token2` to be valid token addresses  emits a `DVDTransferInitiated` event\"}},\"isTREX(address)\":{\"details\":\"check if `_token` corresponds to a functional TREX token (with identity registry initiated)\",\"params\":{\"_token\":\"the address token to check  the function will try to call `identityRegistry()` on the address, which is a getter specific to TREX tokens  if the call pass and returns an address it means that the token is a TREX, otherwise it's not a TREX  return `true` if the token is a TREX, `false` otherwise\"}},\"isTREXAgent(address,address)\":{\"details\":\"check if `_user` is a TREX agent of `_token`\",\"params\":{\"_token\":\"the address token to check\",\"_user\":\"the wallet address  if `_token` is a TREX token this function will check if `_user` is registered as an agent on it  return `true` if `_user` is agent of `_token`, return `false` otherwise\"}},\"isTREXOwner(address,address)\":{\"details\":\"check if `_user` is a TREX owner of `_token`\",\"params\":{\"_token\":\"the address token to check\",\"_user\":\"the wallet address  if `_token` is a TREX token this function will check if `_user` is registered as an owner on it  return `true` if `_user` is owner of `_token`, return `false` otherwise\"}},\"modifyFee(address,address,uint256,uint256,uint256,address,address)\":{\"details\":\"modify the fees applied to a parity of tokens (tokens can be TREX or ERC20)\",\"params\":{\"_fee1\":\"the fee to apply on `_token1` leg of the DVD transfer per 10^`_feeBase`\",\"_fee1Wallet\":\"the wallet address receiving fees applied on `_token1`\",\"_fee2\":\"the fee to apply on `_token2` leg of the DVD transfer per 10^`_feeBase`\",\"_fee2Wallet\":\"the wallet address receiving fees applied on `_token2`  `_token1` and `_token2` need to be ERC20 or TREX tokens addresses, otherwise the transaction will fail  `msg.sender` has to be owner of the DVD contract or the owner of the TREX token involved in the parity (if any)  requires fees to be lower than 100%  requires `_feeBase` to be higher or equal to 2 (precision 10^2)  requires `_feeBase` to be lower or equal to 5 (precision 10^5) to avoid overflows  requires `_fee1Wallet` & `_fee2Wallet` to be non empty addresses if `_fee1` & `_fee2` are respectively set  note that if fees are not set for a parity the default fee is basically 0%  emits a `FeeModified` event\",\"_feeBase\":\"the precision of the fee setting, e.g. if `_feeBase` == 2 then `_fee1` and `_fee2` are in % (fee/10^`_feeBase`)\",\"_token1\":\"the address of the base token for the parity `_token1`/`_token2`\",\"_token2\":\"the address of the counterpart token for the parity `_token1`/`_token2`\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"takeDVDTransfer(bytes32)\":{\"details\":\"execute a DVD transfer that was previously initiated through the `initiateDVDTransfer` function\",\"params\":{\"_transferID\":\"the DVD transfer identifier as calculated through the `calculateTransferID` function for the initiated DVD transfer to execute  requires `_transferID` to exist (DVD transfer has to be initiated)  requires that taker (counterpart sending token2) has enough tokens in balance to process the DVD transfer  requires that `DVDTransferManager` contract has enough allowance to process the `token2` leg of the DVD transfer  requires that `msg.sender` is the taker OR the TREX agent in case a TREX token is involved in the transfer (in case of conditional transfer  the agent can call the function when the transfer has been approved)  if fees apply on one side or both sides of the transfer the fees will be sent, at transaction time, to the fees wallet previously set  in case fees apply the counterparts will receive less than the amounts included in the DVD transfer as part of the transfer is redirected to the  fee wallet at transfer execution time  if one or both legs of the transfer are TREX, then all the relevant checks apply on the transaction (compliance + identity checks)  and the transaction WILL FAIL if the TREX conditions of transfer are not respected, please refer to {Token-transfer} and {Token-transferFrom} to  know more about TREX conditions for transfers  once the DVD transfer is executed the `_transferID` is removed from the pending `_transferID` pool  emits a `DVDTransferExecuted` event\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/DVD/DVDTransferManager.sol\":\"DVDTransferManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"@onchain-id/solidity/contracts/interface/IClaimIssuer.sol\":{\"keccak256\":\"0xd0493be7cb7342962b46f8e2afdca4614ea0fe34a7f493b2da9db7d361a9042c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://105232aae24e3d0fcb4c80c00793b61b6019f6127c0ec6f9e3082ae01b2e778b\",\"dweb:/ipfs/QmV5C1wbq7H5H6DiakafSX5agAAP6rQSZ5qq7Qgq6VLkXo\"]},\"@onchain-id/solidity/contracts/interface/IERC734.sol\":{\"keccak256\":\"0x3302de9e9fe7a548cb7395b6fda38f952f6a6d1c599dfeee181a1ef80741fc1d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://fc9f00e5b2f1523fecf52b1a833e9263a53edbebb7d1458f9004cfd41dd0402e\",\"dweb:/ipfs/QmWcNcVQrg66KeQz39jPgJun7jF3CbdJKHQa19q97n5Hzb\"]},\"@onchain-id/solidity/contracts/interface/IERC735.sol\":{\"keccak256\":\"0x3b77ce6012a96cf0075197cdeb1b98b66ca1722ef23241e40ba6185f03bf4584\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://766e139f0c3cc0c6489561e75df0d8eab8c277f90009e4fa19add4f22bb40d82\",\"dweb:/ipfs/QmcbAReZn9nLcnYn9AHiDmcYJ42JqAU5QSy4dKhUcJUnjy\"]},\"@onchain-id/solidity/contracts/interface/IIdentity.sol\":{\"keccak256\":\"0xdcefbe2a850f9f43e959b9f7ed93fd5b35f29ff3dfbfaac7530af737c9eba7c6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2e887c7cc67fdb2710c48bed22dbb27880f6dfb84ee93178ad4fcd659099cb96\",\"dweb:/ipfs/QmUuDEsZJC7uQQEErmuNJzePsNgHiTDdS2TuMzG1GRqrC3\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"project:/contracts/DVD/DVDTransferManager.sol\":{\"keccak256\":\"0x477202de0b3ba4ceabdc82d0f28623ce7c3c4b67008c330ed3c9e2fb4c7e8025\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://bd8c07832c7375c64317f78e2b22298ee49cc99a219efb98c8d16205178a6bbd\",\"dweb:/ipfs/QmNs1a1vWFJzsXWzZCnfoK5XRJzwsG6cQVzV6CwanmeArn\"]},\"project:/contracts/compliance/ICompliance.sol\":{\"keccak256\":\"0x4049905b34eab118c0c3f644450299a5ed8022bbbdb26036e7c2854dae8ae1ba\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://f8144953d88f543b2f537514f1136b8adf705837ba6d420b95569f6895153edb\",\"dweb:/ipfs/QmRqM7A6XrofFR67k8RtNNEkriAbKsQHDgUYaKZTMr9Nm5\"]},\"project:/contracts/registry/IClaimTopicsRegistry.sol\":{\"keccak256\":\"0x95f8fa17a716771125b203f00890eceb20ac3807f7a39a25b644427b1ff81d61\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://460dceb9e88957d5ce002b80748767c80a7e146c9b38b055a3c1ca04586b2009\",\"dweb:/ipfs/QmVdqEpGMRzSpLKBCtPzaPGatBgUyNm3NS5rQnkkYMnc1C\"]},\"project:/contracts/registry/IIdentityRegistry.sol\":{\"keccak256\":\"0x16a31f2d35143f99cc6b83d0cf6e9da9543c2b8561712079098f3a39d12ae32a\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://7669a9272b1df8e27e0fc3f5f64977b2b16615e585b673383db1eb157a62bf7c\",\"dweb:/ipfs/QmQzXmoFcFyBPehPyiUzGjaKfXJHLEPZMtFTBTgjuCavah\"]},\"project:/contracts/registry/IIdentityRegistryStorage.sol\":{\"keccak256\":\"0x8cd4de1e77c5da8ca2ff732069bc184aef86bcb94f95a5229e5bd6336abbd06d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://f88894a3d046940be03a12cc2da3b3fb6efb51e0461fbea060a9a3190cadcf16\",\"dweb:/ipfs/QmNndZUPdpc83A9LungeAsrcencq3CzTum1tkU6KVdSRNC\"]},\"project:/contracts/registry/ITrustedIssuersRegistry.sol\":{\"keccak256\":\"0x01af20f2f537db3122c60b7c6e60e5036e07c673ef9762428b42129f65fcbc60\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://28f514b876c975777fe84bdb9f96ec5c687e4e4ff5d2b14961ba61affc57d46c\",\"dweb:/ipfs/QmdbVRsg1Q71PVHYxy1r7e5MeiMN5hHHDD8vRnXBSr8JiV\"]},\"project:/contracts/roles/AgentRole.sol\":{\"keccak256\":\"0x2a264adff17bd254164e69c882dc033d8b7e9bc6eab01c5e7d2ad26324a2c953\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://585dfaafc7e37d38ff6f0c5ca4a8e0ad1e92b0babd1f54762bfaa8c67c1ec2d7\",\"dweb:/ipfs/QmXVnTvX1zVVQoxSZBgKRptSVz22T2vyXC3P89Bsv9x7Jg\"]},\"project:/contracts/roles/Roles.sol\":{\"keccak256\":\"0x9e018cafd4e2a2890d4ed32f0a4e5edf92fe95000f35b15d7932890bd0efdb95\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://6c07fd269689b662d782817bc4fdfc00d33fd7e320c20916528fff7853847954\",\"dweb:/ipfs/QmUz39kdgQM8M2W2gcBZ8Vi3mzzSmXUx9NXxTJatYYQJyw\"]},\"project:/contracts/token/IToken.sol\":{\"keccak256\":\"0x34ce3cabab2f6b66aeb4e89fe8e9952b8aa57663e7b33429963169a835fc1f25\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://cffd212e911fd0a6a402d5438e5f5da0c1637226bfcab173a7c58efba12f2655\",\"dweb:/ipfs/QmVbqFNczrUAETfAX6F9MxXKivALRvt1HBTMhrjAKWHniq\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061001a33610024565b6000600455610074565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611f3f806100836000396000f3fe608060405234801561001057600080fd5b50600436106100db5760003560e01c80630f7f6811146100e0578063158db45014610134578063233792511461014957806327cdab061461016c578063344ae659146101e95780634dc55ea31461020a5780634f8468641461021d5780636e4d26e414610270578063715018a614610283578063777220751461028b5780638da5cb5b146102c9578063afc99141146102de578063c66323e5146102f1578063e722e603146102fa578063eb08e2611461030d578063f2fde38b14610320578063ff4ca37514610333575b600080fd5b61011c6100ee366004611a06565b6003602052600090815260409020805460018201546002909201546001600160a01b03918216929091169083565b60405161012b93929190611a1f565b60405180910390f35b610147610142366004611a06565b610346565b005b61015c610157366004611a58565b6109b6565b604051901515815260200161012b565b6101b561017a366004611a06565b600160208190526000918252604090912080549181015460028201546003830154600490930154919290916001600160a01b03918216911685565b604080519586526020860194909452928401919091526001600160a01b03908116606084015216608082015260a00161012b565b6101fc6101f7366004611a58565b610a44565b60405190815260200161012b565b6101fc610218366004611a91565b610a7a565b61023061022b366004611a06565b610ad9565b604080518251815260208084015190820152828201516001600160a01b03908116928201929092526060928301519091169181019190915260800161012b565b61014761027e366004611b0c565b610d18565b6101476110ae565b61011c610299366004611a06565b60026020819052600091825260409091208054600182015491909201546001600160a01b03928316929091169083565b6102d16110c2565b60405161012b9190611b67565b61015c6102ec366004611a58565b6110d1565b6101fc60045481565b610147610308366004611b7b565b61115e565b61015c61031b366004611bf6565b6115d9565b61014761032e366004611bf6565b611659565b610147610341366004611a06565b6116d2565b600081815260026020818152604080842081516060808201845282546001600160a01b0390811683526001808501548216848801529387015483860152888852600386529684902084519182018552805488168252928301548716948101949094529301549082015281519192909116158015906103cd575080516001600160a01b031615155b6103f25760405162461bcd60e51b81526004016103e990611c1a565b60405180910390fd5b6020828101519082015182516001600160a01b031633148061041d575061041d8460200151336109b6565b8061043157506104318360200151336109b6565b61049c5760405162461bcd60e51b815260206004820152603660248201527f7472616e736665722068617320746f20626520646f6e6520627920746865206360448201527537bab73a32b93830b93a1037b910313c9037bbb732b960511b60648201526084016103e9565b604080840151845191516370a0823160e01b815290916001600160a01b038416916370a08231916104cf91600401611b67565b602060405180830381865afa1580156104ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105109190611c4e565b101561052e5760405162461bcd60e51b81526004016103e990611c67565b60408084015184519151636eb1769f60e11b815290916001600160a01b0384169163dd62ed3e91610563913090600401611c9d565b602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190611c4e565b10156105f25760405162461bcd60e51b815260206004820181905260248201527f6e6f7420656e6f75676820616c6c6f77616e636520746f207472616e7366657260448201526064016103e9565b60006105fd86610ad9565b80519091501561071057826001600160a01b03166323b872dd86600001518660000151846000015189604001516106349190611ccd565b6040518463ffffffff1660e01b815260040161065293929190611a1f565b6020604051808303816000875af1158015610671573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106959190611ce0565b508451604080830151835191516323b872dd60e01b81526001600160a01b038716936323b872dd936106cb939192600401611a1f565b6020604051808303816000875af11580156106ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070e9190611ce0565b505b8051600003610796578451845160408088015190516323b872dd60e01b81526001600160a01b038716936323b872dd93610751939192909190600401611a1f565b6020604051808303816000875af1158015610770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107949190611ce0565b505b6020810151156108af57816001600160a01b03166323b872dd85600001518760000151846020015188604001516107cd9190611ccd565b6040518463ffffffff1660e01b81526004016107eb93929190611a1f565b6020604051808303816000875af115801561080a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082e9190611ce0565b508351606082015160208301516040516323b872dd60e01b81526001600160a01b038616936323b872dd9361086a939192909190600401611a1f565b6020604051808303816000875af1158015610889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ad9190611ce0565b505b8060200151600003610938578351855160408087015190516323b872dd60e01b81526001600160a01b038616936323b872dd936108f3939192909190600401611a1f565b6020604051808303816000875af1158015610912573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109369190611ce0565b505b600086815260026020818152604080842080546001600160a01b0319908116825560018083018054831690559185018690556003909352818520805484168155908101805490931690925591018290555187917f094682e7da443a5bb6ea2c900d20d36aaff04228fe22fc6dd65a58a37695be8b91a2505050505050565b60006109c1836115d9565b15610a3a576040516307feec1960e21b81526001600160a01b03841690631ffbb064906109f2908590600401611b67565b602060405180830381865afa158015610a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a339190611ce0565b9050610a3e565b5060005b92915050565b6000808383604051602001610a5a929190611c9d565b60408051808303601f190181529190528051602090910120949350505050565b604080516020808201999099526001600160a01b03978816818301529587166060870152608086019490945291851660a085015290931660c083015260e080830193909352805180830390930183526101009091019052805191012090565b610ae161196b565b610ae961196b565b600083815260026020818152604080842081516060808201845282546001600160a01b03908116835260018085015482168488015293870154838601528a885260038652968490208451918201855280548816825292830154871694810194909452930154908201528151919290911615801590610b70575080516001600160a01b031615155b610b8c5760405162461bcd60e51b81526004016103e990611c1a565b6000610ba083602001518360200151610a44565b600081815260016020818152604092839020835160a0810185528154808252938201549281019290925260028101549382019390935260038301546001600160a01b039081166060830152600490930154909216608083015291925090151580610c0d5750602081015115155b15610cf55760008160400151600a610c259190611de6565b60028360400151610c369190611ccd565b610c4190600a611de6565b83516040880151610c529190611df2565b610c5c9190611df2565b610c669190611e09565b905060008260400151600a610c7b9190611de6565b60028460400151610c8c9190611ccd565b610c9790600a611de6565b84602001518760400151610cab9190611df2565b610cb59190611df2565b610cbf9190611e09565b9187525060208601526060808201516001600160a01b039081166040880152608090920151909116908501525091949350505050565b505060008084526020840181905260408401819052606084015250909392505050565b6040516370a0823160e01b815284906001600160a01b038716906370a0823190610d46903390600401611b67565b602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d879190611c4e565b1015610da55760405162461bcd60e51b81526004016103e990611c67565b604051636eb1769f60e11b815284906001600160a01b0387169063dd62ed3e90610dd59033903090600401611c9d565b602060405180830381865afa158015610df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e169190611c4e565b1015610e765760405162461bcd60e51b815260206004820152602960248201527f6e6f7420656e6f75676820616c6c6f77616e636520746f20696e697469617465604482015268103a3930b739b332b960b91b60648201526084016103e9565b6001600160a01b038316610ec95760405162461bcd60e51b815260206004820152601a60248201527918dbdd5b9d195c9c185c9d0818d85b9b9bdd081899481b9d5b1b60321b60448201526064016103e9565b816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b9190611c4e565b600003610f4a5760405162461bcd60e51b81526004016103e990611e2b565b610f526119a5565b3381526001600160a01b038616602082015260408101859052610f736119a5565b6001600160a01b038086168083529085166020808401829052604080850187905260045486519287015191870151600095610fb295929493928a610a7a565b6000818152600260208181526040808420885181546001600160a01b039182166001600160a01b03199182161783558a8501805160018086018054928616928516929092179091558c860180519589019590955560038752978590208b518154908516908416811782558c88015199820180549a86169a9094168a179093558b8601519701879055518b51935185519484168552958401959095528284015260608201949094529051949550929391169184917f1eff5dd2c180a5889d45725b98546e9d8c28331caac1c279a0fdc3fe18eb29e59181900360800190a46004805490600061109f83611e74565b91905055505050505050505050565b6110b66118bc565b6110c0600061191b565b565b6000546001600160a01b031690565b60006110dc836115d9565b15610a3a57816001600160a01b0316836001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114d9190611e8d565b6001600160a01b0316149050610a3e565b6111666110c2565b6001600160a01b0316336001600160a01b0316148061118a575061118a87336110d1565b8061119a575061119a86336110d1565b6111e55760405162461bcd60e51b815260206004820152601c60248201527b13dddb98589b194e881bdb9b1e481bdddb995c8818d85b8818d85b1b60221b60448201526064016103e9565b866001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112479190611c4e565b158015906112b55750856001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b29190611c4e565b15155b6112d15760405162461bcd60e51b81526004016103e990611e2b565b6112dc83600a611de6565b85111580156112e9575060015b80156112ff57506112fb83600a611de6565b8411155b8015611309575060015b8015611316575060058311155b8015611323575060028310155b6113665760405162461bcd60e51b8152602060048201526014602482015273696e76616c6964206665652073657474696e677360601b60448201526064016103e9565b84156113ce576001600160a01b0382166113ce5760405162461bcd60e51b815260206004820152602360248201527f6665652077616c6c657420312063616e6e6f74206265207a65726f206164647260448201526265737360e81b60648201526084016103e9565b8315611436576001600160a01b0381166114365760405162461bcd60e51b815260206004820152602360248201527f6665652077616c6c657420322063616e6e6f74206265207a65726f206164647260448201526265737360e81b60648201526084016103e9565b60006114428888610a44565b905061144c6119c5565b868152602080820187815260408084018881526001600160a01b0380891660608701908152888216608088019081526000898152600197889052859020885181559551968601969096559151600285015590516003840180549183166001600160a01b0319928316179055935160049093018054939091169290931691909117909155518290600080516020611eea833981519152906114f9908c908c908c908c908c908c908c90611eaa565b60405180910390a2600061150d898b610a44565b90506115176119c5565b87815260208082018a815260408084018a81526001600160a01b03808a16606087019081528b8216608088019081526000898152600197889052859020885181559551968601969096559151600285015590516003840180549183166001600160a01b0319928316179055935160049093018054939091169290931691909117909155518290600080516020611eea833981519152906115c4908d908f908d908f908e908d908f90611eaa565b60405180910390a25050505050505050505050565b6000816001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611635575060408051601f3d908101601f1916820190925261163291810190611e8d565b60015b61164157506000919050565b6001600160a01b03811615610a3a5750600192915050565b6116616118bc565b6001600160a01b0381166116c65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103e9565b6116cf8161191b565b50565b600081815260026020818152604080842081516060808201845282546001600160a01b039081168352600180850154821684880152938701548386015288885260038652968490208451918201855280548816825292830154871694810194909452930154908201528151919290911615801590611759575080516001600160a01b031615155b6117755760405162461bcd60e51b81526004016103e990611c1a565b80516001600160a01b0316331480611796575081516001600160a01b031633145b806117b957506117a46110c2565b6001600160a01b0316336001600160a01b0316145b806117cd57506117cd8260200151336109b6565b806117e157506117e18160200151336109b6565b6118415760405162461bcd60e51b815260206004820152602b60248201527f796f7520617265206e6f7420616c6c6f77656420746f2063616e63656c20746860448201526a34b9903a3930b739b332b960a91b60648201526084016103e9565b600083815260026020818152604080842080546001600160a01b0319908116825560018083018054831690559185018690556003909352818520805484168155908101805490931690925591018290555184917fb34dd23f375e48f42dfe5fbb1f8945e706c80dbfaec32c6e978fcf70091306c991a2505050565b336118c56110c2565b6001600160a01b0316146110c05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103e9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518060800160405280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b604080516060810182526000808252602082018190529181019190915290565b6040518060a0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b600060208284031215611a1857600080fd5b5035919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03811681146116cf57600080fd5b60008060408385031215611a6b57600080fd5b8235611a7681611a43565b91506020830135611a8681611a43565b809150509250929050565b600080600080600080600060e0888a031215611aac57600080fd5b873596506020880135611abe81611a43565b95506040880135611ace81611a43565b9450606088013593506080880135611ae581611a43565b925060a0880135611af581611a43565b8092505060c0880135905092959891949750929550565b600080600080600060a08688031215611b2457600080fd5b8535611b2f81611a43565b9450602086013593506040860135611b4681611a43565b92506060860135611b5681611a43565b949793965091946080013592915050565b6001600160a01b0391909116815260200190565b600080600080600080600060e0888a031215611b9657600080fd5b8735611ba181611a43565b96506020880135611bb181611a43565b955060408801359450606088013593506080880135925060a0880135611bd681611a43565b915060c0880135611be681611a43565b8091505092959891949750929550565b600060208284031215611c0857600080fd5b8135611c1381611a43565b9392505050565b6020808252601a90820152791d1c985b9cd9995c88125108191bd95cc81b9bdd08195e1a5cdd60321b604082015260600190565b600060208284031215611c6057600080fd5b5051919050565b6020808252601c908201527b4e6f7420656e6f75676820746f6b656e7320696e2062616c616e636560201b604082015260600190565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a3e57610a3e611cb7565b600060208284031215611cf257600080fd5b81518015158114611c1357600080fd5b600181815b80851115611d3d578160001904821115611d2357611d23611cb7565b80851615611d3057918102915b93841c9390800290611d07565b509250929050565b600082611d5457506001610a3e565b81611d6157506000610a3e565b8160018114611d775760028114611d8157611d9d565b6001915050610a3e565b60ff841115611d9257611d92611cb7565b50506001821b610a3e565b5060208310610133831016604e8410600b8410161715611dc0575081810a610a3e565b611dca8383611d02565b8060001904821115611dde57611dde611cb7565b029392505050565b6000611c138383611d45565b8082028115828204841417610a3e57610a3e611cb7565b600082611e2657634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f696e76616c69642061646472657373203a2061646472657373206973206e6f74604082015268020616e2045524332360bc1b606082015260800190565b600060018201611e8657611e86611cb7565b5060010190565b600060208284031215611e9f57600080fd5b8151611c1381611a43565b6001600160a01b0397881681529587166020870152604086019490945260608501929092526080840152831660a083015290911660c082015260e0019056fe2a53ccababe5ceadaebcbb25eb002de52dd1042821dee5cd6dd890c0651c535fa264697066735822122093f3ca821c58290982d59fd65efe4592b68609d2c3e65d8bc21eb3e990d0e08b64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100db5760003560e01c80630f7f6811146100e0578063158db45014610134578063233792511461014957806327cdab061461016c578063344ae659146101e95780634dc55ea31461020a5780634f8468641461021d5780636e4d26e414610270578063715018a614610283578063777220751461028b5780638da5cb5b146102c9578063afc99141146102de578063c66323e5146102f1578063e722e603146102fa578063eb08e2611461030d578063f2fde38b14610320578063ff4ca37514610333575b600080fd5b61011c6100ee366004611a06565b6003602052600090815260409020805460018201546002909201546001600160a01b03918216929091169083565b60405161012b93929190611a1f565b60405180910390f35b610147610142366004611a06565b610346565b005b61015c610157366004611a58565b6109b6565b604051901515815260200161012b565b6101b561017a366004611a06565b600160208190526000918252604090912080549181015460028201546003830154600490930154919290916001600160a01b03918216911685565b604080519586526020860194909452928401919091526001600160a01b03908116606084015216608082015260a00161012b565b6101fc6101f7366004611a58565b610a44565b60405190815260200161012b565b6101fc610218366004611a91565b610a7a565b61023061022b366004611a06565b610ad9565b604080518251815260208084015190820152828201516001600160a01b03908116928201929092526060928301519091169181019190915260800161012b565b61014761027e366004611b0c565b610d18565b6101476110ae565b61011c610299366004611a06565b60026020819052600091825260409091208054600182015491909201546001600160a01b03928316929091169083565b6102d16110c2565b60405161012b9190611b67565b61015c6102ec366004611a58565b6110d1565b6101fc60045481565b610147610308366004611b7b565b61115e565b61015c61031b366004611bf6565b6115d9565b61014761032e366004611bf6565b611659565b610147610341366004611a06565b6116d2565b600081815260026020818152604080842081516060808201845282546001600160a01b0390811683526001808501548216848801529387015483860152888852600386529684902084519182018552805488168252928301548716948101949094529301549082015281519192909116158015906103cd575080516001600160a01b031615155b6103f25760405162461bcd60e51b81526004016103e990611c1a565b60405180910390fd5b6020828101519082015182516001600160a01b031633148061041d575061041d8460200151336109b6565b8061043157506104318360200151336109b6565b61049c5760405162461bcd60e51b815260206004820152603660248201527f7472616e736665722068617320746f20626520646f6e6520627920746865206360448201527537bab73a32b93830b93a1037b910313c9037bbb732b960511b60648201526084016103e9565b604080840151845191516370a0823160e01b815290916001600160a01b038416916370a08231916104cf91600401611b67565b602060405180830381865afa1580156104ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105109190611c4e565b101561052e5760405162461bcd60e51b81526004016103e990611c67565b60408084015184519151636eb1769f60e11b815290916001600160a01b0384169163dd62ed3e91610563913090600401611c9d565b602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190611c4e565b10156105f25760405162461bcd60e51b815260206004820181905260248201527f6e6f7420656e6f75676820616c6c6f77616e636520746f207472616e7366657260448201526064016103e9565b60006105fd86610ad9565b80519091501561071057826001600160a01b03166323b872dd86600001518660000151846000015189604001516106349190611ccd565b6040518463ffffffff1660e01b815260040161065293929190611a1f565b6020604051808303816000875af1158015610671573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106959190611ce0565b508451604080830151835191516323b872dd60e01b81526001600160a01b038716936323b872dd936106cb939192600401611a1f565b6020604051808303816000875af11580156106ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070e9190611ce0565b505b8051600003610796578451845160408088015190516323b872dd60e01b81526001600160a01b038716936323b872dd93610751939192909190600401611a1f565b6020604051808303816000875af1158015610770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107949190611ce0565b505b6020810151156108af57816001600160a01b03166323b872dd85600001518760000151846020015188604001516107cd9190611ccd565b6040518463ffffffff1660e01b81526004016107eb93929190611a1f565b6020604051808303816000875af115801561080a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082e9190611ce0565b508351606082015160208301516040516323b872dd60e01b81526001600160a01b038616936323b872dd9361086a939192909190600401611a1f565b6020604051808303816000875af1158015610889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ad9190611ce0565b505b8060200151600003610938578351855160408087015190516323b872dd60e01b81526001600160a01b038616936323b872dd936108f3939192909190600401611a1f565b6020604051808303816000875af1158015610912573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109369190611ce0565b505b600086815260026020818152604080842080546001600160a01b0319908116825560018083018054831690559185018690556003909352818520805484168155908101805490931690925591018290555187917f094682e7da443a5bb6ea2c900d20d36aaff04228fe22fc6dd65a58a37695be8b91a2505050505050565b60006109c1836115d9565b15610a3a576040516307feec1960e21b81526001600160a01b03841690631ffbb064906109f2908590600401611b67565b602060405180830381865afa158015610a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a339190611ce0565b9050610a3e565b5060005b92915050565b6000808383604051602001610a5a929190611c9d565b60408051808303601f190181529190528051602090910120949350505050565b604080516020808201999099526001600160a01b03978816818301529587166060870152608086019490945291851660a085015290931660c083015260e080830193909352805180830390930183526101009091019052805191012090565b610ae161196b565b610ae961196b565b600083815260026020818152604080842081516060808201845282546001600160a01b03908116835260018085015482168488015293870154838601528a885260038652968490208451918201855280548816825292830154871694810194909452930154908201528151919290911615801590610b70575080516001600160a01b031615155b610b8c5760405162461bcd60e51b81526004016103e990611c1a565b6000610ba083602001518360200151610a44565b600081815260016020818152604092839020835160a0810185528154808252938201549281019290925260028101549382019390935260038301546001600160a01b039081166060830152600490930154909216608083015291925090151580610c0d5750602081015115155b15610cf55760008160400151600a610c259190611de6565b60028360400151610c369190611ccd565b610c4190600a611de6565b83516040880151610c529190611df2565b610c5c9190611df2565b610c669190611e09565b905060008260400151600a610c7b9190611de6565b60028460400151610c8c9190611ccd565b610c9790600a611de6565b84602001518760400151610cab9190611df2565b610cb59190611df2565b610cbf9190611e09565b9187525060208601526060808201516001600160a01b039081166040880152608090920151909116908501525091949350505050565b505060008084526020840181905260408401819052606084015250909392505050565b6040516370a0823160e01b815284906001600160a01b038716906370a0823190610d46903390600401611b67565b602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d879190611c4e565b1015610da55760405162461bcd60e51b81526004016103e990611c67565b604051636eb1769f60e11b815284906001600160a01b0387169063dd62ed3e90610dd59033903090600401611c9d565b602060405180830381865afa158015610df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e169190611c4e565b1015610e765760405162461bcd60e51b815260206004820152602960248201527f6e6f7420656e6f75676820616c6c6f77616e636520746f20696e697469617465604482015268103a3930b739b332b960b91b60648201526084016103e9565b6001600160a01b038316610ec95760405162461bcd60e51b815260206004820152601a60248201527918dbdd5b9d195c9c185c9d0818d85b9b9bdd081899481b9d5b1b60321b60448201526064016103e9565b816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b9190611c4e565b600003610f4a5760405162461bcd60e51b81526004016103e990611e2b565b610f526119a5565b3381526001600160a01b038616602082015260408101859052610f736119a5565b6001600160a01b038086168083529085166020808401829052604080850187905260045486519287015191870151600095610fb295929493928a610a7a565b6000818152600260208181526040808420885181546001600160a01b039182166001600160a01b03199182161783558a8501805160018086018054928616928516929092179091558c860180519589019590955560038752978590208b518154908516908416811782558c88015199820180549a86169a9094168a179093558b8601519701879055518b51935185519484168552958401959095528284015260608201949094529051949550929391169184917f1eff5dd2c180a5889d45725b98546e9d8c28331caac1c279a0fdc3fe18eb29e59181900360800190a46004805490600061109f83611e74565b91905055505050505050505050565b6110b66118bc565b6110c0600061191b565b565b6000546001600160a01b031690565b60006110dc836115d9565b15610a3a57816001600160a01b0316836001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114d9190611e8d565b6001600160a01b0316149050610a3e565b6111666110c2565b6001600160a01b0316336001600160a01b0316148061118a575061118a87336110d1565b8061119a575061119a86336110d1565b6111e55760405162461bcd60e51b815260206004820152601c60248201527b13dddb98589b194e881bdb9b1e481bdddb995c8818d85b8818d85b1b60221b60448201526064016103e9565b866001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112479190611c4e565b158015906112b55750856001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b29190611c4e565b15155b6112d15760405162461bcd60e51b81526004016103e990611e2b565b6112dc83600a611de6565b85111580156112e9575060015b80156112ff57506112fb83600a611de6565b8411155b8015611309575060015b8015611316575060058311155b8015611323575060028310155b6113665760405162461bcd60e51b8152602060048201526014602482015273696e76616c6964206665652073657474696e677360601b60448201526064016103e9565b84156113ce576001600160a01b0382166113ce5760405162461bcd60e51b815260206004820152602360248201527f6665652077616c6c657420312063616e6e6f74206265207a65726f206164647260448201526265737360e81b60648201526084016103e9565b8315611436576001600160a01b0381166114365760405162461bcd60e51b815260206004820152602360248201527f6665652077616c6c657420322063616e6e6f74206265207a65726f206164647260448201526265737360e81b60648201526084016103e9565b60006114428888610a44565b905061144c6119c5565b868152602080820187815260408084018881526001600160a01b0380891660608701908152888216608088019081526000898152600197889052859020885181559551968601969096559151600285015590516003840180549183166001600160a01b0319928316179055935160049093018054939091169290931691909117909155518290600080516020611eea833981519152906114f9908c908c908c908c908c908c908c90611eaa565b60405180910390a2600061150d898b610a44565b90506115176119c5565b87815260208082018a815260408084018a81526001600160a01b03808a16606087019081528b8216608088019081526000898152600197889052859020885181559551968601969096559151600285015590516003840180549183166001600160a01b0319928316179055935160049093018054939091169290931691909117909155518290600080516020611eea833981519152906115c4908d908f908d908f908e908d908f90611eaa565b60405180910390a25050505050505050505050565b6000816001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611635575060408051601f3d908101601f1916820190925261163291810190611e8d565b60015b61164157506000919050565b6001600160a01b03811615610a3a5750600192915050565b6116616118bc565b6001600160a01b0381166116c65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103e9565b6116cf8161191b565b50565b600081815260026020818152604080842081516060808201845282546001600160a01b039081168352600180850154821684880152938701548386015288885260038652968490208451918201855280548816825292830154871694810194909452930154908201528151919290911615801590611759575080516001600160a01b031615155b6117755760405162461bcd60e51b81526004016103e990611c1a565b80516001600160a01b0316331480611796575081516001600160a01b031633145b806117b957506117a46110c2565b6001600160a01b0316336001600160a01b0316145b806117cd57506117cd8260200151336109b6565b806117e157506117e18160200151336109b6565b6118415760405162461bcd60e51b815260206004820152602b60248201527f796f7520617265206e6f7420616c6c6f77656420746f2063616e63656c20746860448201526a34b9903a3930b739b332b960a91b60648201526084016103e9565b600083815260026020818152604080842080546001600160a01b0319908116825560018083018054831690559185018690556003909352818520805484168155908101805490931690925591018290555184917fb34dd23f375e48f42dfe5fbb1f8945e706c80dbfaec32c6e978fcf70091306c991a2505050565b336118c56110c2565b6001600160a01b0316146110c05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103e9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518060800160405280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b604080516060810182526000808252602082018190529181019190915290565b6040518060a0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b600060208284031215611a1857600080fd5b5035919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03811681146116cf57600080fd5b60008060408385031215611a6b57600080fd5b8235611a7681611a43565b91506020830135611a8681611a43565b809150509250929050565b600080600080600080600060e0888a031215611aac57600080fd5b873596506020880135611abe81611a43565b95506040880135611ace81611a43565b9450606088013593506080880135611ae581611a43565b925060a0880135611af581611a43565b8092505060c0880135905092959891949750929550565b600080600080600060a08688031215611b2457600080fd5b8535611b2f81611a43565b9450602086013593506040860135611b4681611a43565b92506060860135611b5681611a43565b949793965091946080013592915050565b6001600160a01b0391909116815260200190565b600080600080600080600060e0888a031215611b9657600080fd5b8735611ba181611a43565b96506020880135611bb181611a43565b955060408801359450606088013593506080880135925060a0880135611bd681611a43565b915060c0880135611be681611a43565b8091505092959891949750929550565b600060208284031215611c0857600080fd5b8135611c1381611a43565b9392505050565b6020808252601a90820152791d1c985b9cd9995c88125108191bd95cc81b9bdd08195e1a5cdd60321b604082015260600190565b600060208284031215611c6057600080fd5b5051919050565b6020808252601c908201527b4e6f7420656e6f75676820746f6b656e7320696e2062616c616e636560201b604082015260600190565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a3e57610a3e611cb7565b600060208284031215611cf257600080fd5b81518015158114611c1357600080fd5b600181815b80851115611d3d578160001904821115611d2357611d23611cb7565b80851615611d3057918102915b93841c9390800290611d07565b509250929050565b600082611d5457506001610a3e565b81611d6157506000610a3e565b8160018114611d775760028114611d8157611d9d565b6001915050610a3e565b60ff841115611d9257611d92611cb7565b50506001821b610a3e565b5060208310610133831016604e8410600b8410161715611dc0575081810a610a3e565b611dca8383611d02565b8060001904821115611dde57611dde611cb7565b029392505050565b6000611c138383611d45565b8082028115828204841417610a3e57610a3e611cb7565b600082611e2657634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f696e76616c69642061646472657373203a2061646472657373206973206e6f74604082015268020616e2045524332360bc1b606082015260800190565b600060018201611e8657611e86611cb7565b5060010190565b600060208284031215611e9f57600080fd5b8151611c1381611a43565b6001600160a01b0397881681529587166020870152604086019490945260608501929092526080840152831660a083015290911660c082015260e0019056fe2a53ccababe5ceadaebcbb25eb002de52dd1042821dee5cd6dd890c0651c535fa264697066735822122093f3ca821c58290982d59fd65efe4592b68609d2c3e65d8bc21eb3e990d0e08b64736f6c63430008110033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:16288:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "84:110:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "130:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "139:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "142:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "132:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "132:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "132:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "105:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "114:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "101:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "101:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "126:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "97:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "97:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "94:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "155:33:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "178:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "165:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "165:23:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "155:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "50:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "61:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "73:6:54",
                "type": ""
              }
            ],
            "src": "14:180:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "356:218:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "366:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "378:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "389:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "374:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "374:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "366:4:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "401:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "419:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "424:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "415:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "415:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "428:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "411:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "411:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "405:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "446:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "461:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "469:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "457:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "457:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "439:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "439:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "439:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "493:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "504:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "489:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "489:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "513:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "521:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "509:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "509:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "482:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "482:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "482:43:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "545:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "556:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "541:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "541:18:54"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "561:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "534:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "534:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "534:34:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "309:9:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "320:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "328:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "336:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "347:4:54",
                "type": ""
              }
            ],
            "src": "199:375:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "624:86:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "688:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "697:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "700:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "690:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "690:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "690:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "647:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "658:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "673:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "678:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "669:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "669:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "682:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "665:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "665:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "654:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "654:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "644:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "644:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "637:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "637:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "634:70:54"
                }
              ]
            },
            "name": "validator_revert_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "613:5:54",
                "type": ""
              }
            ],
            "src": "579:131:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "802:301:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "848:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "857:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "860:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "850:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "850:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "850:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "823:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "832:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "819:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "819:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "844:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "815:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "815:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "812:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "873:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "899:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "886:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "886:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "877:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "943:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "918:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "918:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "918:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "958:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "968:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "958:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "982:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1014:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1025:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1010:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1010:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "997:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "997:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "986:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "1063:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "1038:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1038:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1038:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1080:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "1090:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1080:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "760:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "771:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "783:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "791:6:54",
                "type": ""
              }
            ],
            "src": "715:388:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1203:92:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1213:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1225:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1236:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1221:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1221:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1213:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1255:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "1280:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "1273:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1273:14:54"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "1266:6:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1266:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1248:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1248:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1248:41:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1172:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1183:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1194:4:54",
                "type": ""
              }
            ],
            "src": "1108:187:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1513:306:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1523:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1535:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1546:3:54",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1531:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1531:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1523:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1566:9:54"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "1577:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1559:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1559:25:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1559:25:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1604:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1615:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1600:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1600:18:54"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "1620:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1593:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1593:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1593:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1647:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1658:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1643:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1643:18:54"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "1663:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1636:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1636:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1636:34:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1679:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1697:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1702:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "1693:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1693:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1706:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "1689:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1689:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "1683:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1728:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1739:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1724:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1724:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value3",
                            "nodeType": "YulIdentifier",
                            "src": "1748:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1756:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1744:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1744:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1717:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1717:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1717:43:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1780:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1791:3:54",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1776:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1776:19:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value4",
                            "nodeType": "YulIdentifier",
                            "src": "1801:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1809:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1797:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1797:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1769:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1769:44:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1769:44:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_address_t_address__to_t_uint256_t_uint256_t_uint256_t_address_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1450:9:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "1461:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "1469:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "1477:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1485:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1493:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1504:4:54",
                "type": ""
              }
            ],
            "src": "1300:519:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1925:76:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1935:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1947:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1958:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1943:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1943:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1935:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1977:9:54"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "1988:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1970:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1970:25:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1970:25:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1894:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1905:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1916:4:54",
                "type": ""
              }
            ],
            "src": "1824:177:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2178:706:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2225:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2234:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2237:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2227:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2227:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2227:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2199:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2208:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2195:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2195:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2220:3:54",
                        "type": "",
                        "value": "224"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2191:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2191:33:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2188:53:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2250:33:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2273:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2260:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2260:23:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "2250:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2292:45:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2322:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2333:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2318:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2318:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2305:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2305:32:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "2296:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "2371:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "2346:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2346:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2346:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2386:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "2396:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "2386:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2410:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2442:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2453:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2438:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2438:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2425:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2425:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "2414:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "2491:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "2466:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2466:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2466:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2508:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "2518:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "2508:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2534:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2561:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2572:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2557:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2557:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2544:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2544:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "2534:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2585:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2617:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2628:3:54",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2613:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2613:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2600:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2600:33:54"
                  },
                  "variables": [
                    {
                      "name": "value_2",
                      "nodeType": "YulTypedName",
                      "src": "2589:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_2",
                        "nodeType": "YulIdentifier",
                        "src": "2667:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "2642:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2642:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2642:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2684:17:54",
                  "value": {
                    "name": "value_2",
                    "nodeType": "YulIdentifier",
                    "src": "2694:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "2684:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2710:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2742:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2753:3:54",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2738:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2738:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2725:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2725:33:54"
                  },
                  "variables": [
                    {
                      "name": "value_3",
                      "nodeType": "YulTypedName",
                      "src": "2714:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_3",
                        "nodeType": "YulIdentifier",
                        "src": "2792:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "2767:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2767:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2767:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2809:17:54",
                  "value": {
                    "name": "value_3",
                    "nodeType": "YulIdentifier",
                    "src": "2819:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nodeType": "YulIdentifier",
                      "src": "2809:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2835:43:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2862:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2873:3:54",
                            "type": "",
                            "value": "192"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2858:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2858:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2845:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2845:33:54"
                  },
                  "variableNames": [
                    {
                      "name": "value6",
                      "nodeType": "YulIdentifier",
                      "src": "2835:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256t_addresst_addresst_uint256t_addresst_addresst_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2096:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2107:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2119:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2127:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "2135:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "2143:6:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "2151:6:54",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "2159:6:54",
                "type": ""
              },
              {
                "name": "value6",
                "nodeType": "YulTypedName",
                "src": "2167:6:54",
                "type": ""
              }
            ],
            "src": "2006:878:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3038:370:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3048:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3060:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3071:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3056:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3056:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3048:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3091:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "3108:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "mload",
                          "nodeType": "YulIdentifier",
                          "src": "3102:5:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3102:13:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3084:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3084:32:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3084:32:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3136:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3147:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3132:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3132:20:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "3164:6:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3172:4:54",
                                "type": "",
                                "value": "0x20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3160:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3160:17:54"
                          }
                        ],
                        "functionName": {
                          "name": "mload",
                          "nodeType": "YulIdentifier",
                          "src": "3154:5:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3154:24:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3125:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3125:54:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3125:54:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3188:44:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "3218:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3226:4:54",
                            "type": "",
                            "value": "0x40"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3214:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3214:17:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "3208:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3208:24:54"
                  },
                  "variables": [
                    {
                      "name": "memberValue0",
                      "nodeType": "YulTypedName",
                      "src": "3192:12:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3241:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3259:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3264:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "3255:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3255:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3268:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "3251:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3251:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "3245:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3290:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3301:4:54",
                            "type": "",
                            "value": "0x40"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3286:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3286:20:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "memberValue0",
                            "nodeType": "YulIdentifier",
                            "src": "3312:12:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "3326:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "3308:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3308:21:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3279:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3279:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3279:51:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3350:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3361:4:54",
                            "type": "",
                            "value": "0x60"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3346:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3346:20:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "3382:6:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3390:4:54",
                                    "type": "",
                                    "value": "0x60"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3378:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3378:17:54"
                              }
                            ],
                            "functionName": {
                              "name": "mload",
                              "nodeType": "YulIdentifier",
                              "src": "3372:5:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3372:24:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "3398:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "3368:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3368:33:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3339:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3339:63:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3339:63:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_struct$_TxFees_$3480_memory_ptr__to_t_struct$_TxFees_$3480_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3007:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3018:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3029:4:54",
                "type": ""
              }
            ],
            "src": "2889:519:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3551:529:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3598:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3607:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3610:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3600:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3600:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3600:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3572:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3581:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3568:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3568:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3593:3:54",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3564:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3564:33:54"
                  },
                  "nodeType": "YulIf",
                  "src": "3561:53:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3623:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3649:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3636:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3636:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "3627:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3693:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3668:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3668:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3668:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3708:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3718:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3708:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3732:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3759:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3770:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3755:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3755:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3742:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3742:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "3732:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3783:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3815:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3826:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3811:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3811:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3798:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3798:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "3787:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "3864:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3839:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3839:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3839:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3881:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "3891:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "3881:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3907:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3939:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3950:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3935:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3935:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3922:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3922:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_2",
                      "nodeType": "YulTypedName",
                      "src": "3911:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_2",
                        "nodeType": "YulIdentifier",
                        "src": "3988:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3963:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3963:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3963:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4005:17:54",
                  "value": {
                    "name": "value_2",
                    "nodeType": "YulIdentifier",
                    "src": "4015:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "4005:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4031:43:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4058:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4069:3:54",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4054:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4054:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4041:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4041:33:54"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "4031:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256t_addresst_addresst_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3485:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3496:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3508:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3516:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "3524:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "3532:6:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "3540:6:54",
                "type": ""
              }
            ],
            "src": "3413:667:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4186:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4196:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4208:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4219:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4204:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4204:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4196:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4238:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "4253:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4269:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4274:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "4265:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4265:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4278:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "4261:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4261:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4249:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4249:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4231:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4231:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4231:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4155:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4166:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4177:4:54",
                "type": ""
              }
            ],
            "src": "4085:203:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4394:76:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4404:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4416:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4427:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4412:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4412:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4404:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4446:9:54"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "4457:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4439:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4439:25:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4439:25:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4363:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4374:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4385:4:54",
                "type": ""
              }
            ],
            "src": "4293:177:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4647:706:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4694:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4703:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4706:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4696:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4696:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4696:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4668:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4677:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4664:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4664:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4689:3:54",
                        "type": "",
                        "value": "224"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4660:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4660:33:54"
                  },
                  "nodeType": "YulIf",
                  "src": "4657:53:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4719:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4745:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4732:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4732:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "4723:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "4789:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "4764:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4764:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4764:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4804:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "4814:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "4804:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4828:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4860:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4871:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4856:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4856:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4843:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4843:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "4832:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "4909:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "4884:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4884:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4884:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4926:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "4936:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4926:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4952:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4979:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4990:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4975:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4975:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4962:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4962:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "4952:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5003:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5030:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5041:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5026:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5026:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5013:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5013:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "5003:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5054:43:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5081:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5092:3:54",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5077:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5077:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5064:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5064:33:54"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "5054:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5106:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5138:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5149:3:54",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5134:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5134:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5121:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5121:33:54"
                  },
                  "variables": [
                    {
                      "name": "value_2",
                      "nodeType": "YulTypedName",
                      "src": "5110:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_2",
                        "nodeType": "YulIdentifier",
                        "src": "5188:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "5163:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5163:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5163:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5205:17:54",
                  "value": {
                    "name": "value_2",
                    "nodeType": "YulIdentifier",
                    "src": "5215:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nodeType": "YulIdentifier",
                      "src": "5205:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5231:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5263:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5274:3:54",
                            "type": "",
                            "value": "192"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5259:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5259:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5246:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5246:33:54"
                  },
                  "variables": [
                    {
                      "name": "value_3",
                      "nodeType": "YulTypedName",
                      "src": "5235:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_3",
                        "nodeType": "YulIdentifier",
                        "src": "5313:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "5288:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5288:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5288:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5330:17:54",
                  "value": {
                    "name": "value_3",
                    "nodeType": "YulIdentifier",
                    "src": "5340:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value6",
                      "nodeType": "YulIdentifier",
                      "src": "5330:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256t_addresst_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4565:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4576:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4588:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4596:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "4604:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "4612:6:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "4620:6:54",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "4628:6:54",
                "type": ""
              },
              {
                "name": "value6",
                "nodeType": "YulTypedName",
                "src": "4636:6:54",
                "type": ""
              }
            ],
            "src": "4475:878:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5428:177:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5474:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5483:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5486:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5476:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5476:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5476:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5449:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5458:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5445:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5445:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5470:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5441:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5441:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "5438:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5499:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5525:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5512:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5512:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "5503:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "5569:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "5544:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5544:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5544:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5584:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "5594:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5584:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5394:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5405:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5417:6:54",
                "type": ""
              }
            ],
            "src": "5358:247:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5784:176:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5801:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5812:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5794:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5794:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5794:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5835:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5846:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5831:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5831:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5851:2:54",
                        "type": "",
                        "value": "26"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5824:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5824:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5824:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5874:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5885:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5870:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5870:18:54"
                      },
                      {
                        "hexValue": "7472616e7366657220494420646f6573206e6f74206578697374",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "5890:28:54",
                        "type": "",
                        "value": "transfer ID does not exist"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5863:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5863:56:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5863:56:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5928:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5940:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5951:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5936:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5936:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5928:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_05fb44f1dba602083992ac4b2973ff7e9e67bf0cad2d6b845025c7aad22d1df5__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5761:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5775:4:54",
                "type": ""
              }
            ],
            "src": "5610:350:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6139:244:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6156:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6167:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6149:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6149:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6149:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6190:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6201:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6186:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6186:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6206:2:54",
                        "type": "",
                        "value": "54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6179:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6179:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6179:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6229:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6240:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6225:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6225:18:54"
                      },
                      {
                        "hexValue": "7472616e736665722068617320746f20626520646f6e65206279207468652063",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "6245:34:54",
                        "type": "",
                        "value": "transfer has to be done by the c"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6218:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6218:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6218:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6300:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6311:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6296:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6296:18:54"
                      },
                      {
                        "hexValue": "6f756e74657270617274206f72206279206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "6316:24:54",
                        "type": "",
                        "value": "ounterpart or by owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6289:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6289:52:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6289:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6350:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6362:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6373:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6358:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6358:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6350:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_8510d836f9beddc4eff9d4fc19bc4d1e4a234f3e4f868b42900f0d821aba4a1b__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6116:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6130:4:54",
                "type": ""
              }
            ],
            "src": "5965:418:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6469:103:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6515:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6524:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6527:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6517:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6517:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6517:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6490:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6499:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6486:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6486:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6511:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "6482:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6482:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "6479:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6540:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6556:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "6550:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6550:16:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6540:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6435:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "6446:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6458:6:54",
                "type": ""
              }
            ],
            "src": "6388:184:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6751:178:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6768:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6779:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6761:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6761:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6761:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6802:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6813:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6798:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6798:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6818:2:54",
                        "type": "",
                        "value": "28"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6791:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6791:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6791:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6841:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6852:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6837:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6837:18:54"
                      },
                      {
                        "hexValue": "4e6f7420656e6f75676820746f6b656e7320696e2062616c616e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "6857:30:54",
                        "type": "",
                        "value": "Not enough tokens in balance"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6830:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6830:58:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6830:58:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6897:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6909:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6920:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6905:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6905:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6897:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_17bcb2fc24178a4e6966e21e43b451392b2fa265bfdbc099cf563d3a8e64b7aa__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6728:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6742:4:54",
                "type": ""
              }
            ],
            "src": "6577:352:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7063:175:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7073:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7085:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7096:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7081:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7081:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7073:4:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7108:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7126:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7131:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "7122:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7122:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7135:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "7118:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7118:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "7112:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7153:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "7168:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "7176:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "7164:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7164:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7146:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7146:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7146:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7200:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7211:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7196:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7196:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "7220:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "7228:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "7216:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7216:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7189:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7189:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7189:43:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7024:9:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7035:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7043:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7054:4:54",
                "type": ""
              }
            ],
            "src": "6934:304:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7417:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7434:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7445:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7427:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7427:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7427:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7468:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7479:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7464:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7464:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7484:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7457:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7457:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7457:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7507:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7518:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7503:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7503:18:54"
                      },
                      {
                        "hexValue": "6e6f7420656e6f75676820616c6c6f77616e636520746f207472616e73666572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7523:34:54",
                        "type": "",
                        "value": "not enough allowance to transfer"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7496:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7496:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7496:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7567:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7579:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7590:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7575:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7575:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7567:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_30953575ef832ccdd521d36ea41714b4800f0a09fb33e906515b02f2b6142283__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7394:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7408:4:54",
                "type": ""
              }
            ],
            "src": "7243:356:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7636:95:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7653:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7660:3:54",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7665:10:54",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "7656:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7656:20:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7646:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7646:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7646:31:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7693:1:54",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7696:4:54",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7686:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7686:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7686:15:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7717:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7720:4:54",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "7710:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7710:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7710:15:54"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "7604:127:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7785:79:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7795:17:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "7807:1:54"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "7810:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "7803:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7803:9:54"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "7795:4:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7836:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "7838:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7838:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7838:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "diff",
                        "nodeType": "YulIdentifier",
                        "src": "7827:4:54"
                      },
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "7833:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "7824:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7824:11:54"
                  },
                  "nodeType": "YulIf",
                  "src": "7821:37:54"
                }
              ]
            },
            "name": "checked_sub_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "7767:1:54",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "7770:1:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "7776:4:54",
                "type": ""
              }
            ],
            "src": "7736:128:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7947:199:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7993:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8002:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8005:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7995:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7995:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7995:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7968:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7977:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "7964:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7964:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7989:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "7960:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7960:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "7957:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8018:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8037:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "8031:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8031:16:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "8022:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8100:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8109:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8112:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8102:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8102:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8102:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "8069:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "8090:5:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "8083:6:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8083:13:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "8076:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8076:21:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "8066:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8066:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "8059:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8059:40:54"
                  },
                  "nodeType": "YulIf",
                  "src": "8056:60:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8125:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "8135:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "8125:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7913:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "7924:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7936:6:54",
                "type": ""
              }
            ],
            "src": "7869:277:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8420:412:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "8430:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8442:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8453:3:54",
                        "type": "",
                        "value": "224"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8438:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8438:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8430:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8473:9:54"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "8484:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8466:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8466:25:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8466:25:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8500:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8518:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8523:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "8514:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8514:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8527:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "8510:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8510:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "8504:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8549:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8560:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8545:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8545:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "8569:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "8577:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "8565:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8565:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8538:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8538:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8538:43:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8601:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8612:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8597:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8597:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "8621:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "8629:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "8617:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8617:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8590:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8590:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8590:43:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8653:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8664:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8649:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8649:18:54"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "8669:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8642:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8642:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8642:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8696:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8707:3:54",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8692:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8692:19:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value4",
                            "nodeType": "YulIdentifier",
                            "src": "8717:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "8725:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "8713:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8713:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8685:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8685:44:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8685:44:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8749:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8760:3:54",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8745:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8745:19:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value5",
                            "nodeType": "YulIdentifier",
                            "src": "8770:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "8778:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "8766:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8766:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8738:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8738:44:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8738:44:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8802:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8813:3:54",
                            "type": "",
                            "value": "192"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8798:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8798:19:54"
                      },
                      {
                        "name": "value6",
                        "nodeType": "YulIdentifier",
                        "src": "8819:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8791:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8791:35:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8791:35:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256_t_address_t_address_t_uint256_t_address_t_address_t_uint256__to_t_uint256_t_address_t_address_t_uint256_t_address_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8341:9:54",
                "type": ""
              },
              {
                "name": "value6",
                "nodeType": "YulTypedName",
                "src": "8352:6:54",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "8360:6:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "8368:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "8376:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "8384:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "8392:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8400:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8411:4:54",
                "type": ""
              }
            ],
            "src": "8151:681:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8901:358:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8911:16:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "8926:1:54",
                    "type": "",
                    "value": "1"
                  },
                  "variables": [
                    {
                      "name": "power_1",
                      "nodeType": "YulTypedName",
                      "src": "8915:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8936:16:54",
                  "value": {
                    "name": "power_1",
                    "nodeType": "YulIdentifier",
                    "src": "8945:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "power",
                      "nodeType": "YulIdentifier",
                      "src": "8936:5:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8961:13:54",
                  "value": {
                    "name": "_base",
                    "nodeType": "YulIdentifier",
                    "src": "8969:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "base",
                      "nodeType": "YulIdentifier",
                      "src": "8961:4:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9025:228:54",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9070:22:54",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [],
                                "functionName": {
                                  "name": "panic_error_0x11",
                                  "nodeType": "YulIdentifier",
                                  "src": "9072:16:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9072:18:54"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9072:18:54"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "9045:4:54"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "9059:1:54",
                                      "type": "",
                                      "value": "0"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nodeType": "YulIdentifier",
                                    "src": "9055:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "9055:6:54"
                                },
                                {
                                  "name": "base",
                                  "nodeType": "YulIdentifier",
                                  "src": "9063:4:54"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "9051:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9051:17:54"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "9042:2:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9042:27:54"
                        },
                        "nodeType": "YulIf",
                        "src": "9039:53:54"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9131:29:54",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9133:25:54",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "power",
                                    "nodeType": "YulIdentifier",
                                    "src": "9146:5:54"
                                  },
                                  {
                                    "name": "base",
                                    "nodeType": "YulIdentifier",
                                    "src": "9153:4:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "9142:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9142:16:54"
                              },
                              "variableNames": [
                                {
                                  "name": "power",
                                  "nodeType": "YulIdentifier",
                                  "src": "9133:5:54"
                                }
                              ]
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "exponent",
                              "nodeType": "YulIdentifier",
                              "src": "9112:8:54"
                            },
                            {
                              "name": "power_1",
                              "nodeType": "YulIdentifier",
                              "src": "9122:7:54"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "9108:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9108:22:54"
                        },
                        "nodeType": "YulIf",
                        "src": "9105:55:54"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "9173:23:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "9185:4:54"
                            },
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "9191:4:54"
                            }
                          ],
                          "functionName": {
                            "name": "mul",
                            "nodeType": "YulIdentifier",
                            "src": "9181:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9181:15:54"
                        },
                        "variableNames": [
                          {
                            "name": "base",
                            "nodeType": "YulIdentifier",
                            "src": "9173:4:54"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "9209:34:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "power_1",
                              "nodeType": "YulIdentifier",
                              "src": "9225:7:54"
                            },
                            {
                              "name": "exponent",
                              "nodeType": "YulIdentifier",
                              "src": "9234:8:54"
                            }
                          ],
                          "functionName": {
                            "name": "shr",
                            "nodeType": "YulIdentifier",
                            "src": "9221:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9221:22:54"
                        },
                        "variableNames": [
                          {
                            "name": "exponent",
                            "nodeType": "YulIdentifier",
                            "src": "9209:8:54"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "8994:8:54"
                      },
                      {
                        "name": "power_1",
                        "nodeType": "YulIdentifier",
                        "src": "9004:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8991:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8991:21:54"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "9013:3:54",
                    "statements": []
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "8987:3:54",
                    "statements": []
                  },
                  "src": "8983:270:54"
                }
              ]
            },
            "name": "checked_exp_helper",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "_base",
                "nodeType": "YulTypedName",
                "src": "8865:5:54",
                "type": ""
              },
              {
                "name": "exponent",
                "nodeType": "YulTypedName",
                "src": "8872:8:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "power",
                "nodeType": "YulTypedName",
                "src": "8885:5:54",
                "type": ""
              },
              {
                "name": "base",
                "nodeType": "YulTypedName",
                "src": "8892:4:54",
                "type": ""
              }
            ],
            "src": "8837:422:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9323:747:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9361:52:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "9375:10:54",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "9384:1:54",
                          "type": "",
                          "value": "1"
                        },
                        "variableNames": [
                          {
                            "name": "power",
                            "nodeType": "YulIdentifier",
                            "src": "9375:5:54"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulLeave",
                        "src": "9398:5:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "9343:8:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "9336:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9336:16:54"
                  },
                  "nodeType": "YulIf",
                  "src": "9333:80:54"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9446:52:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "9460:10:54",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "9469:1:54",
                          "type": "",
                          "value": "0"
                        },
                        "variableNames": [
                          {
                            "name": "power",
                            "nodeType": "YulIdentifier",
                            "src": "9460:5:54"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulLeave",
                        "src": "9483:5:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "base",
                        "nodeType": "YulIdentifier",
                        "src": "9432:4:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "9425:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9425:12:54"
                  },
                  "nodeType": "YulIf",
                  "src": "9422:76:54"
                },
                {
                  "cases": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "9534:52:54",
                        "statements": [
                          {
                            "nodeType": "YulAssignment",
                            "src": "9548:10:54",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9557:1:54",
                              "type": "",
                              "value": "1"
                            },
                            "variableNames": [
                              {
                                "name": "power",
                                "nodeType": "YulIdentifier",
                                "src": "9548:5:54"
                              }
                            ]
                          },
                          {
                            "nodeType": "YulLeave",
                            "src": "9571:5:54"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "9527:59:54",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9532:1:54",
                        "type": "",
                        "value": "1"
                      }
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "9602:123:54",
                        "statements": [
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "9637:22:54",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "panic_error_0x11",
                                      "nodeType": "YulIdentifier",
                                      "src": "9639:16:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9639:18:54"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "9639:18:54"
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "exponent",
                                  "nodeType": "YulIdentifier",
                                  "src": "9622:8:54"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "9632:3:54",
                                  "type": "",
                                  "value": "255"
                                }
                              ],
                              "functionName": {
                                "name": "gt",
                                "nodeType": "YulIdentifier",
                                "src": "9619:2:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9619:17:54"
                            },
                            "nodeType": "YulIf",
                            "src": "9616:43:54"
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "9672:25:54",
                            "value": {
                              "arguments": [
                                {
                                  "name": "exponent",
                                  "nodeType": "YulIdentifier",
                                  "src": "9685:8:54"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "9695:1:54",
                                  "type": "",
                                  "value": "1"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "9681:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9681:16:54"
                            },
                            "variableNames": [
                              {
                                "name": "power",
                                "nodeType": "YulIdentifier",
                                "src": "9672:5:54"
                              }
                            ]
                          },
                          {
                            "nodeType": "YulLeave",
                            "src": "9710:5:54"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "9595:130:54",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9600:1:54",
                        "type": "",
                        "value": "2"
                      }
                    }
                  ],
                  "expression": {
                    "name": "base",
                    "nodeType": "YulIdentifier",
                    "src": "9514:4:54"
                  },
                  "nodeType": "YulSwitch",
                  "src": "9507:218:54"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9823:70:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "9837:28:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "9850:4:54"
                            },
                            {
                              "name": "exponent",
                              "nodeType": "YulIdentifier",
                              "src": "9856:8:54"
                            }
                          ],
                          "functionName": {
                            "name": "exp",
                            "nodeType": "YulIdentifier",
                            "src": "9846:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9846:19:54"
                        },
                        "variableNames": [
                          {
                            "name": "power",
                            "nodeType": "YulIdentifier",
                            "src": "9837:5:54"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulLeave",
                        "src": "9878:5:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "base",
                                "nodeType": "YulIdentifier",
                                "src": "9747:4:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9753:2:54",
                                "type": "",
                                "value": "11"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "9744:2:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9744:12:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "exponent",
                                "nodeType": "YulIdentifier",
                                "src": "9761:8:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9771:2:54",
                                "type": "",
                                "value": "78"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "9758:2:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9758:16:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9740:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9740:35:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "base",
                                "nodeType": "YulIdentifier",
                                "src": "9784:4:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9790:3:54",
                                "type": "",
                                "value": "307"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "9781:2:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9781:13:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "exponent",
                                "nodeType": "YulIdentifier",
                                "src": "9799:8:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9809:2:54",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "9796:2:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9796:16:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9777:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9777:36:54"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "9737:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9737:77:54"
                  },
                  "nodeType": "YulIf",
                  "src": "9734:159:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9902:57:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "base",
                        "nodeType": "YulIdentifier",
                        "src": "9944:4:54"
                      },
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "9950:8:54"
                      }
                    ],
                    "functionName": {
                      "name": "checked_exp_helper",
                      "nodeType": "YulIdentifier",
                      "src": "9925:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9925:34:54"
                  },
                  "variables": [
                    {
                      "name": "power_1",
                      "nodeType": "YulTypedName",
                      "src": "9906:7:54",
                      "type": ""
                    },
                    {
                      "name": "base_1",
                      "nodeType": "YulTypedName",
                      "src": "9915:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10004:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "10006:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10006:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10006:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "power_1",
                        "nodeType": "YulIdentifier",
                        "src": "9974:7:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9991:1:54",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "9987:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9987:6:54"
                          },
                          {
                            "name": "base_1",
                            "nodeType": "YulIdentifier",
                            "src": "9995:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "div",
                          "nodeType": "YulIdentifier",
                          "src": "9983:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9983:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "9971:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9971:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "9968:58:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10035:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "power_1",
                        "nodeType": "YulIdentifier",
                        "src": "10048:7:54"
                      },
                      {
                        "name": "base_1",
                        "nodeType": "YulIdentifier",
                        "src": "10057:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "10044:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10044:20:54"
                  },
                  "variableNames": [
                    {
                      "name": "power",
                      "nodeType": "YulIdentifier",
                      "src": "10035:5:54"
                    }
                  ]
                }
              ]
            },
            "name": "checked_exp_unsigned",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "base",
                "nodeType": "YulTypedName",
                "src": "9294:4:54",
                "type": ""
              },
              {
                "name": "exponent",
                "nodeType": "YulTypedName",
                "src": "9300:8:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "power",
                "nodeType": "YulTypedName",
                "src": "9313:5:54",
                "type": ""
              }
            ],
            "src": "9264:806:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10145:61:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "10155:45:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "base",
                        "nodeType": "YulIdentifier",
                        "src": "10185:4:54"
                      },
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "10191:8:54"
                      }
                    ],
                    "functionName": {
                      "name": "checked_exp_unsigned",
                      "nodeType": "YulIdentifier",
                      "src": "10164:20:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10164:36:54"
                  },
                  "variableNames": [
                    {
                      "name": "power",
                      "nodeType": "YulIdentifier",
                      "src": "10155:5:54"
                    }
                  ]
                }
              ]
            },
            "name": "checked_exp_t_uint256_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "base",
                "nodeType": "YulTypedName",
                "src": "10116:4:54",
                "type": ""
              },
              {
                "name": "exponent",
                "nodeType": "YulTypedName",
                "src": "10122:8:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "power",
                "nodeType": "YulTypedName",
                "src": "10135:5:54",
                "type": ""
              }
            ],
            "src": "10075:131:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10263:116:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "10273:20:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "10288:1:54"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "10291:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "10284:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10284:9:54"
                  },
                  "variableNames": [
                    {
                      "name": "product",
                      "nodeType": "YulIdentifier",
                      "src": "10273:7:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10351:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "10353:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10353:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10353:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "10322:1:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "10315:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10315:9:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "y",
                                "nodeType": "YulIdentifier",
                                "src": "10329:1:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "name": "product",
                                    "nodeType": "YulIdentifier",
                                    "src": "10336:7:54"
                                  },
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10345:1:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "10332:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10332:15:54"
                              }
                            ],
                            "functionName": {
                              "name": "eq",
                              "nodeType": "YulIdentifier",
                              "src": "10326:2:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10326:22:54"
                          }
                        ],
                        "functionName": {
                          "name": "or",
                          "nodeType": "YulIdentifier",
                          "src": "10312:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10312:37:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "10305:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10305:45:54"
                  },
                  "nodeType": "YulIf",
                  "src": "10302:71:54"
                }
              ]
            },
            "name": "checked_mul_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "10242:1:54",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "10245:1:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "product",
                "nodeType": "YulTypedName",
                "src": "10251:7:54",
                "type": ""
              }
            ],
            "src": "10211:168:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10430:171:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10461:111:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10482:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "10489:3:54",
                                  "type": "",
                                  "value": "224"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "10494:10:54",
                                  "type": "",
                                  "value": "0x4e487b71"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "10485:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "10485:20:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "10475:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10475:31:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10475:31:54"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10526:1:54",
                              "type": "",
                              "value": "4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10529:4:54",
                              "type": "",
                              "value": "0x12"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "10519:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10519:15:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10519:15:54"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10554:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10557:4:54",
                              "type": "",
                              "value": "0x24"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "10547:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10547:15:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10547:15:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "10450:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "10443:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10443:9:54"
                  },
                  "nodeType": "YulIf",
                  "src": "10440:132:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10581:14:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "10590:1:54"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "10593:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "div",
                      "nodeType": "YulIdentifier",
                      "src": "10586:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10586:9:54"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "10581:1:54"
                    }
                  ]
                }
              ]
            },
            "name": "checked_div_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "10415:1:54",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "10418:1:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "10424:1:54",
                "type": ""
              }
            ],
            "src": "10384:217:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10780:231:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10797:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10808:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10790:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10790:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10790:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10831:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10842:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10827:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10827:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10847:2:54",
                        "type": "",
                        "value": "41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10820:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10820:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10820:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10870:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10881:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10866:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10866:18:54"
                      },
                      {
                        "hexValue": "6e6f7420656e6f75676820616c6c6f77616e636520746f20696e697469617465",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10886:34:54",
                        "type": "",
                        "value": "not enough allowance to initiate"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10859:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10859:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10859:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10941:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10952:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10937:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10937:18:54"
                      },
                      {
                        "hexValue": "207472616e73666572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10957:11:54",
                        "type": "",
                        "value": " transfer"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10930:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10930:39:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10930:39:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10978:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10990:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11001:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10986:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10986:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10978:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_ad4c587f936990664e83aeaad85ea6b997b024dea1d9933851ff370bef2dacce__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10757:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10771:4:54",
                "type": ""
              }
            ],
            "src": "10606:405:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11190:176:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11207:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11218:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11200:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11200:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11200:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11241:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11252:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11237:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11237:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11257:2:54",
                        "type": "",
                        "value": "26"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11230:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11230:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11230:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11280:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11291:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11276:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11276:18:54"
                      },
                      {
                        "hexValue": "636f756e746572706172742063616e6e6f74206265206e756c6c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "11296:28:54",
                        "type": "",
                        "value": "counterpart cannot be null"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11269:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11269:56:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11269:56:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11334:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11346:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11357:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11342:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11342:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11334:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_048d905b72852d1ae7b94b1b8f6cf3f112436d634ae85e61de0e79663c326aaf__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11167:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11181:4:54",
                "type": ""
              }
            ],
            "src": "11016:350:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11545:231:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11562:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11573:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11555:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11555:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11555:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11596:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11607:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11592:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11592:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11612:2:54",
                        "type": "",
                        "value": "41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11585:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11585:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11585:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11635:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11646:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11631:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11631:18:54"
                      },
                      {
                        "hexValue": "696e76616c69642061646472657373203a2061646472657373206973206e6f74",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "11651:34:54",
                        "type": "",
                        "value": "invalid address : address is not"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11624:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11624:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11624:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11706:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11717:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11702:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11702:18:54"
                      },
                      {
                        "hexValue": "20616e204552433230",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "11722:11:54",
                        "type": "",
                        "value": " an ERC20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11695:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11695:39:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11695:39:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11743:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11755:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11766:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11751:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11751:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11743:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_ca5de360fb9881825787bda4343576656720ec98cf6ccf4d822e67e57bab6bd0__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11522:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11536:4:54",
                "type": ""
              }
            ],
            "src": "11371:405:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11966:262:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "11976:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11988:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11999:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11984:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11984:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11976:4:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12012:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12030:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12035:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "12026:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12026:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12039:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "12022:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12022:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "12016:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12057:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "12072:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "12080:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "12068:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12068:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12050:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12050:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12050:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12104:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12115:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12100:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12100:18:54"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "12120:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12093:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12093:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12093:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12147:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12158:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12143:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12143:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "12167:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "12175:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "12163:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12163:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12136:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12136:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12136:43:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12199:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12210:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12195:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12195:18:54"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "12215:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12188:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12188:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12188:34:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256_t_address_t_uint256__to_t_address_t_uint256_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11911:9:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "11922:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "11930:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "11938:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "11946:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11957:4:54",
                "type": ""
              }
            ],
            "src": "11781:447:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12280:88:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "12311:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "12313:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12313:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "12313:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "12296:5:54"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12307:1:54",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "12303:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12303:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "12293:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12293:17:54"
                  },
                  "nodeType": "YulIf",
                  "src": "12290:43:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12342:20:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "12353:5:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12360:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12349:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12349:13:54"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "12342:3:54"
                    }
                  ]
                }
              ]
            },
            "name": "increment_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "12262:5:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "12272:3:54",
                "type": ""
              }
            ],
            "src": "12233:135:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12454:170:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "12500:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12509:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12512:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "12502:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12502:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "12502:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "12475:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12484:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "12471:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12471:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12496:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "12467:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12467:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "12464:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12525:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12544:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "12538:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12538:16:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "12529:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "12588:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "12563:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12563:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12563:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12603:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "12613:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "12603:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12420:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "12431:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12443:6:54",
                "type": ""
              }
            ],
            "src": "12373:251:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12803:178:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12820:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12831:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12813:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12813:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12813:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12854:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12865:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12850:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12850:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12870:2:54",
                        "type": "",
                        "value": "28"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12843:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12843:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12843:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12893:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12904:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12889:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12889:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a206f6e6c79206f776e65722063616e2063616c6c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12909:30:54",
                        "type": "",
                        "value": "Ownable: only owner can call"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12882:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12882:58:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12882:58:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12949:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12961:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12972:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12957:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12957:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12949:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_587366e5609736c4d0389b2b1546c480d1845c26fb4acbd2d541a51da205032b__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12780:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12794:4:54",
                "type": ""
              }
            ],
            "src": "12629:352:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13160:170:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13177:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13188:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13170:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13170:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13170:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13211:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13222:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13207:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13207:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13227:2:54",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13200:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13200:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13200:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13250:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13261:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13246:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13246:18:54"
                      },
                      {
                        "hexValue": "696e76616c6964206665652073657474696e6773",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13266:22:54",
                        "type": "",
                        "value": "invalid fee settings"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13239:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13239:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13239:50:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13298:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13310:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13321:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13306:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13306:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13298:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_1e76e8a5c8c4e84df0c2d9573e217397959e091b7b1020e2a7da9e7c01bd63ec__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13137:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13151:4:54",
                "type": ""
              }
            ],
            "src": "12986:344:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13509:225:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13526:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13537:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13519:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13519:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13519:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13560:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13571:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13556:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13556:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13576:2:54",
                        "type": "",
                        "value": "35"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13549:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13549:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13549:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13599:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13610:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13595:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13595:18:54"
                      },
                      {
                        "hexValue": "6665652077616c6c657420312063616e6e6f74206265207a65726f2061646472",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13615:34:54",
                        "type": "",
                        "value": "fee wallet 1 cannot be zero addr"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13588:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13588:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13588:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13670:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13681:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13666:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13666:18:54"
                      },
                      {
                        "hexValue": "657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13686:5:54",
                        "type": "",
                        "value": "ess"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13659:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13659:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13659:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13701:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13713:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13724:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13709:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13709:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13701:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_3aa374a110a2b6ab64fed97872087a781d84cacd0d8aea371ef8fc6a2ca47912__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13486:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13500:4:54",
                "type": ""
              }
            ],
            "src": "13335:399:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13913:225:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13930:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13941:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13923:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13923:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13923:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13964:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13975:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13960:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13960:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13980:2:54",
                        "type": "",
                        "value": "35"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13953:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13953:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13953:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14003:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14014:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13999:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13999:18:54"
                      },
                      {
                        "hexValue": "6665652077616c6c657420322063616e6e6f74206265207a65726f2061646472",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14019:34:54",
                        "type": "",
                        "value": "fee wallet 2 cannot be zero addr"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13992:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13992:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13992:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14074:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14085:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14070:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14070:18:54"
                      },
                      {
                        "hexValue": "657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14090:5:54",
                        "type": "",
                        "value": "ess"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14063:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14063:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14063:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14105:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14117:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14128:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14113:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14113:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14105:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_809b46d8d5dad5840c87a4063fc4786e9d03f67a62ff6cbff5c0e693f301d569__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13890:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13904:4:54",
                "type": ""
              }
            ],
            "src": "13739:399:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14412:412:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "14422:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14434:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14445:3:54",
                        "type": "",
                        "value": "224"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14430:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14430:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14422:4:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14458:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14476:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14481:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "14472:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14472:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14485:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "14468:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14468:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "14462:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14503:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "14518:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "14526:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "14514:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14514:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14496:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14496:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14496:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14550:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14561:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14546:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14546:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "14570:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "14578:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "14566:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14566:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14539:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14539:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14539:43:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14602:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14613:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14598:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14598:18:54"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "14618:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14591:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14591:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14591:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14645:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14656:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14641:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14641:18:54"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "14661:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14634:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14634:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14634:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14688:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14699:3:54",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14684:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14684:19:54"
                      },
                      {
                        "name": "value4",
                        "nodeType": "YulIdentifier",
                        "src": "14705:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14677:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14677:35:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14677:35:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14732:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14743:3:54",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14728:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14728:19:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value5",
                            "nodeType": "YulIdentifier",
                            "src": "14753:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "14761:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "14749:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14749:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14721:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14721:44:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14721:44:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14785:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14796:3:54",
                            "type": "",
                            "value": "192"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14781:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14781:19:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value6",
                            "nodeType": "YulIdentifier",
                            "src": "14806:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "14814:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "14802:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14802:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14774:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14774:44:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14774:44:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint256_t_address_t_address__to_t_address_t_address_t_uint256_t_uint256_t_uint256_t_address_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14333:9:54",
                "type": ""
              },
              {
                "name": "value6",
                "nodeType": "YulTypedName",
                "src": "14344:6:54",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "14352:6:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "14360:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "14368:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "14376:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "14384:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14392:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14403:4:54",
                "type": ""
              }
            ],
            "src": "14143:681:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14936:170:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "14982:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "14991:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "14994:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "14984:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14984:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "14984:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "14957:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14966:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "14953:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14953:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14978:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "14949:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14949:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "14946:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "15007:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15026:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "15020:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15020:16:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "15011:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "15070:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "15045:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15045:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15045:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15085:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "15095:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "15085:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_contract$_IIdentityRegistry_$6637_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14902:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "14913:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14925:6:54",
                "type": ""
              }
            ],
            "src": "14829:277:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15285:228:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15302:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15313:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15295:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15295:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15295:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15336:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15347:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15332:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15332:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15352:2:54",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15325:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15325:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15325:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15375:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15386:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15371:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15371:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15391:34:54",
                        "type": "",
                        "value": "Ownable: new owner is the zero a"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15364:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15364:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15364:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15446:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15457:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15442:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15442:18:54"
                      },
                      {
                        "hexValue": "646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15462:8:54",
                        "type": "",
                        "value": "ddress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15435:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15435:36:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15435:36:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15480:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15492:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15503:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15488:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15488:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15480:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15262:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15276:4:54",
                "type": ""
              }
            ],
            "src": "15111:402:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15692:233:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15709:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15720:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15702:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15702:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15702:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15743:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15754:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15739:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15739:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15759:2:54",
                        "type": "",
                        "value": "43"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15732:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15732:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15732:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15782:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15793:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15778:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15778:18:54"
                      },
                      {
                        "hexValue": "796f7520617265206e6f7420616c6c6f77656420746f2063616e63656c207468",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15798:34:54",
                        "type": "",
                        "value": "you are not allowed to cancel th"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15771:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15771:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15771:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15853:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15864:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15849:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15849:18:54"
                      },
                      {
                        "hexValue": "6973207472616e73666572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15869:13:54",
                        "type": "",
                        "value": "is transfer"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15842:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15842:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15842:41:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15892:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15904:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15915:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15900:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15900:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15892:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_e4f8789e37348a27ccb80365ff2be0bee9cc248e9086ab80257f54fe74a2c25f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15669:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15683:4:54",
                "type": ""
              }
            ],
            "src": "15518:407:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16104:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16121:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16132:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16114:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16114:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16114:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16155:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16166:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16151:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16151:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16171:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16144:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16144:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16144:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16194:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16205:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16190:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16190:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "16210:34:54",
                        "type": "",
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16183:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16183:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16183:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16254:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16266:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16277:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16262:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16262:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16254:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16081:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16095:4:54",
                "type": ""
              }
            ],
            "src": "15930:356:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_address_t_address__to_t_uint256_t_uint256_t_uint256_t_address_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), and(value4, _1))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256t_addresst_addresst_uint256t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := calldataload(add(headStart, 96))\n        let value_2 := calldataload(add(headStart, 128))\n        validator_revert_address(value_2)\n        value4 := value_2\n        let value_3 := calldataload(add(headStart, 160))\n        validator_revert_address(value_3)\n        value5 := value_3\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_struct$_TxFees_$3480_memory_ptr__to_t_struct$_TxFees_$3480_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, mload(value0))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n        let memberValue0 := mload(add(value0, 0x40))\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 0x40), and(memberValue0, _1))\n        mstore(add(headStart, 0x60), and(mload(add(value0, 0x60)), _1))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        let value_2 := calldataload(add(headStart, 96))\n        validator_revert_address(value_2)\n        value3 := value_2\n        value4 := calldataload(add(headStart, 128))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256t_addresst_address(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        let value_2 := calldataload(add(headStart, 160))\n        validator_revert_address(value_2)\n        value5 := value_2\n        let value_3 := calldataload(add(headStart, 192))\n        validator_revert_address(value_3)\n        value6 := value_3\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_05fb44f1dba602083992ac4b2973ff7e9e67bf0cad2d6b845025c7aad22d1df5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 26)\n        mstore(add(headStart, 64), \"transfer ID does not exist\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_8510d836f9beddc4eff9d4fc19bc4d1e4a234f3e4f868b42900f0d821aba4a1b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"transfer has to be done by the c\")\n        mstore(add(headStart, 96), \"ounterpart or by owner\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_17bcb2fc24178a4e6966e21e43b451392b2fa265bfdbc099cf563d3a8e64b7aa__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"Not enough tokens in balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_30953575ef832ccdd521d36ea41714b4800f0a09fb33e906515b02f2b6142283__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"not enough allowance to transfer\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_address_t_address_t_uint256_t_address_t_address_t_uint256__to_t_uint256_t_address_t_address_t_uint256_t_address_t_address_t_uint256__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        mstore(headStart, value0)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, _1))\n        mstore(add(headStart, 160), and(value5, _1))\n        mstore(add(headStart, 192), value6)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(not(0), base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        product := mul(x, y)\n        if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_ad4c587f936990664e83aeaad85ea6b997b024dea1d9933851ff370bef2dacce__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 41)\n        mstore(add(headStart, 64), \"not enough allowance to initiate\")\n        mstore(add(headStart, 96), \" transfer\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_048d905b72852d1ae7b94b1b8f6cf3f112436d634ae85e61de0e79663c326aaf__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 26)\n        mstore(add(headStart, 64), \"counterpart cannot be null\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ca5de360fb9881825787bda4343576656720ec98cf6ccf4d822e67e57bab6bd0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 41)\n        mstore(add(headStart, 64), \"invalid address : address is not\")\n        mstore(add(headStart, 96), \" an ERC20\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address_t_uint256__to_t_address_t_uint256_t_address_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_587366e5609736c4d0389b2b1546c480d1845c26fb4acbd2d541a51da205032b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"Ownable: only owner can call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1e76e8a5c8c4e84df0c2d9573e217397959e091b7b1020e2a7da9e7c01bd63ec__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"invalid fee settings\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_3aa374a110a2b6ab64fed97872087a781d84cacd0d8aea371ef8fc6a2ca47912__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"fee wallet 1 cannot be zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_809b46d8d5dad5840c87a4063fc4786e9d03f67a62ff6cbff5c0e693f301d569__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"fee wallet 2 cannot be zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint256_t_address_t_address__to_t_address_t_address_t_uint256_t_uint256_t_uint256_t_address_t_address__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), and(value5, _1))\n        mstore(add(headStart, 192), and(value6, _1))\n    }\n    function abi_decode_tuple_t_contract$_IIdentityRegistry_$6637_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_e4f8789e37348a27ccb80365ff2be0bee9cc248e9086ab80257f54fe74a2c25f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 43)\n        mstore(add(headStart, 64), \"you are not allowed to cancel th\")\n        mstore(add(headStart, 96), \"is transfer\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "1182:17641:21:-:0;;;3299:41;;;;;;;;;-1:-1:-1;936:32:13;719:10:20;936:18:13;:32::i;:::-;3332:1:21;3322:7;:11;1182:17641;;2433:187:13;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:13;;;-1:-1:-1;;;;;;2541:17:13;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1182:17641:21:-;;;;;;;",
  "deployedSourceMap": "1182:17641:21:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3105:51;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3105:51:21;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;13958:1799;;;;;;:::i;:::-;;:::i;:::-;;4898:188;;;;;;:::i;:::-;;:::i;:::-;;;1273:14:54;;1266:22;1248:41;;1236:2;1221:18;4898:188:21;1108:187:54;2912:34:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2912:34:21;;;;;;;;;;;1559:25:54;;;1615:2;1600:18;;1593:34;;;;1643:18;;;1636:34;;;;-1:-1:-1;;;;;1744:15:54;;;1739:2;1724:18;;1717:43;1797:15;1791:3;1776:19;;1769:44;1546:3;1531:19;2912:34:21;1300:519:54;3574:186:21;;;;;;:::i;:::-;;:::i;:::-;;;1970:25:54;;;1958:2;1943:18;3574:186:21;1824:177:54;6368:407:21;;;;;;:::i;:::-;;:::i;17626:1194::-;;;;;;:::i;:::-;;:::i;:::-;;;;3102:13:54;;3084:32;;3172:4;3160:17;;;3154:24;3132:20;;;3125:54;3214:17;;;3208:24;-1:-1:-1;;;;;3308:21:54;;;3286:20;;;3279:51;;;;3390:4;3378:17;;;3372:24;3368:33;;;3346:20;;;3339:63;;;;3071:3;3056:19;17626:1194:21;2889:519:54;11039:1261:21;;;;;;:::i;:::-;;:::i;1831:101:13:-;;;:::i;3000:51:21:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3000:51:21;;;;;;;;;;1201:85:13;;;:::i;:::-;;;;;;;:::i;5439:200:21:-;;;;;;:::i;:::-;;:::i;3238:22::-;;;;;;8226:1751;;;;;;:::i;:::-;;:::i;4226:319::-;;;;;;:::i;:::-;;:::i;2081:198:13:-;;;;;;:::i;:::-;;:::i;16467:687:21:-;;;;;;:::i;:::-;;:::i;13958:1799::-;14023:22;14048:28;;;:15;:28;;;;;;;;14023:53;;;;;;;;;;-1:-1:-1;;;;;14023:53:21;;;;;;;;;;;;;;;;;;;;;;;;14111:28;;;:15;:28;;;;;;14086:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14157:18;;14023:53;;14086;;14157:32;;;;;:68;;-1:-1:-1;14193:18:21;;-1:-1:-1;;;;;14193:32:21;;;14157:68;14149:107;;;;-1:-1:-1;;;14149:107:21;;;;;;;:::i;:::-;;;;;;;;;14297:12;;;;;14351;;;;14397:18;;-1:-1:-1;;;;;14383:32:21;:10;:32;;:73;;;14419:37;14431:6;:12;;;14445:10;14419:11;:37::i;:::-;14383:114;;;;14460:37;14472:6;:12;;;14486:10;14460:11;:37::i;:::-;14374:182;;;;-1:-1:-1;;;14374:182:21;;6167:2:54;14374:182:21;;;6149:21:54;6206:2;6186:18;;;6179:30;6245:34;6225:18;;;6218:62;-1:-1:-1;;;6296:18:54;;;6289:52;6358:19;;14374:182:21;5965:418:54;14374:182:21;14622:13;;;;;14599:18;;14574:44;;-1:-1:-1;;;14574:44:21;;14622:13;;-1:-1:-1;;;;;14574:24:21;;;;;:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;14566:102;;;;-1:-1:-1;;;14566:102:21;;;;;;;:::i;:::-;14749:13;;;;;14711:18;;14686:59;;-1:-1:-1;;;14686:59:21;;14749:13;;-1:-1:-1;;;;;14686:24:21;;;;;:59;;14739:4;;14686:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:76;;14678:121;;;;-1:-1:-1;;;14678:121:21;;7445:2:54;14678:121:21;;;7427:21:54;;;7464:18;;;7457:30;7523:34;7503:18;;;7496:62;7575:18;;14678:121:21;7243:356:54;14678:121:21;14809:18;14830:25;14843:11;14830:12;:25::i;:::-;14869:11;;14809:46;;-1:-1:-1;14869:16:21;14865:228;;14897:14;-1:-1:-1;;;;;14897:27:21;;14925:6;:18;;;14945:6;:18;;;14982:4;:11;;;14966:6;:13;;;:27;;;;:::i;:::-;14897:98;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;15033:18:21;;15053:15;;;;;15070:11;;15005:77;;-1:-1:-1;;;15005:77:21;;-1:-1:-1;;;;;15005:27:21;;;;;:77;;15033:18;;15005:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14865:228;15106:11;;;:16;15102:129;;15166:18;;15186;;15206:13;;;;;15138:82;;-1:-1:-1;;;15138:82:21;;-1:-1:-1;;;;;15138:27:21;;;;;:82;;15166:18;;15186;;15206:13;15138:82;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15102:129;15244:11;;;;:16;15240:236;;15276:14;-1:-1:-1;;;;;15276:27:21;;15304:6;:18;;;15324:6;:18;;;15361:4;:11;;;15345:6;:13;;;:27;;;;:::i;:::-;15276:98;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;15416:18:21;;15436:15;;;;15453:11;;;;15388:77;;-1:-1:-1;;;15388:77:21;;-1:-1:-1;;;;;15388:27:21;;;;;:77;;15416:18;;15436:15;;15453:11;15388:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15240:236;15489:4;:11;;;15504:1;15489:16;15485:129;;15549:18;;15569;;15589:13;;;;;15521:82;;-1:-1:-1;;;15521:82:21;;-1:-1:-1;;;;;15521:27:21;;;;;:82;;15549:18;;15569;;15589:13;15521:82;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15485:129;15630:28;;;;:15;:28;;;;;;;;15623:35;;-1:-1:-1;;;;;;15623:35:21;;;;;;;;;;;;;;;;;;;;;15675:15;:28;;;;;;15668:35;;;;;;;;;;;;;;;;;;;;;;15718:32;15646:11;;15718:32;;;14013:1744;;;;;13958:1799;:::o;4898:188::-;4971:4;4987:14;4994:6;4987;:14::i;:::-;4983:75;;;5019:32;;-1:-1:-1;;;5019:32:21;;-1:-1:-1;;;;;5019:25:21;;;;;:32;;5045:5;;5019:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5012:39;;;;4983:75;-1:-1:-1;5074:5:21;4898:188;;;;;:::o;3574:186::-;3655:7;3674:14;3712:7;3721;3701:28;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;3701:28:21;;;;;;3691:39;;3701:28;3691:39;;;;;3574:186;-1:-1:-1;;;;3574:186:21:o;6368:407::-;6658:82;;;;;;;8466:25:54;;;;-1:-1:-1;;;;;8565:15:54;;;8545:18;;;8538:43;8617:15;;;8597:18;;;8590:43;8649:18;;;8642:34;;;;8713:15;;;8692:19;;;8685:44;8766:15;;;8745:19;;;8738:44;8798:19;;;;8791:35;;;;6658:82:21;;;;;;;;;;8438:19:54;;;;6658:82:21;;6648:93;;;;;;6368:407::o;17626:1194::-;17689:13;;:::i;:::-;17714:18;;:::i;:::-;17742:22;17767:28;;;:15;:28;;;;;;;;17742:53;;;;;;;;;;-1:-1:-1;;;;;17742:53:21;;;;;;;;;;;;;;;;;;;;;;;;17830:28;;;:15;:28;;;;;;17805:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17876:18;;17742:53;;17805;;17876:32;;;;;:68;;-1:-1:-1;17912:18:21;;-1:-1:-1;;;;;17912:32:21;;;17876:68;17868:107;;;;-1:-1:-1;;;17868:107:21;;;;;;;:::i;:::-;17985:14;18002:43;18018:6;:12;;;18032:6;:12;;;18002:15;:43::i;:::-;18055:21;18079:11;;;:3;:11;;;;;;;;;18055:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18055:35:21;;;;;;;;;;;;;;;;;;;17985:60;;-1:-1:-1;18055:35:21;18104:25;;;:54;;-1:-1:-1;18133:20:21;;;;:25;;18104:54;18100:714;;;18174:12;18266:10;:18;;;18262:2;:22;;;;:::i;:::-;18255:1;18234:10;:18;;;:22;;;;:::i;:::-;18229:28;;:2;:28;:::i;:::-;18206:20;;18190:13;;;;:36;;18206:20;18190:36;:::i;:::-;:67;;;;:::i;:::-;18189:96;;;;:::i;:::-;18174:111;;18299:12;18391:10;:18;;;18387:2;:22;;;;:::i;:::-;18380:1;18359:10;:18;;;:22;;;;:::i;:::-;18354:28;;:2;:28;:::i;:::-;18331:10;:20;;;18315:6;:13;;;:36;;;;:::i;:::-;:67;;;;:::i;:::-;18314:96;;;;:::i;:::-;18424:21;;;-1:-1:-1;18459:11:21;;;:21;18512;;;;;-1:-1:-1;;;;;18494:39:21;;;:15;;;:39;18565:21;;;;;18547:39;;;:15;;;:39;-1:-1:-1;18424:4:21;;17626:1194;-1:-1:-1;;;;17626:1194:21:o;18100:714::-;-1:-1:-1;;18664:1:21;18650:15;;;18679:11;;;:15;;;18708;;;:28;;;18750:15;;;:28;-1:-1:-1;18650:4:21;;17626:1194;-1:-1:-1;;;17626:1194:21:o;11039:1261::-;11197:37;;-1:-1:-1;;;11197:37:21;;11238:13;;-1:-1:-1;;;;;11197:25:21;;;;;:37;;11223:10;;11197:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;11189:95;;;;-1:-1:-1;;;11189:95:21;;;;;;;:::i;:::-;11302:52;;-1:-1:-1;;;11302:52:21;;11358:13;;-1:-1:-1;;;;;11302:25:21;;;;;:52;;11328:10;;11348:4;;11302:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:69;;11294:123;;;;-1:-1:-1;;;11294:123:21;;10808:2:54;11294:123:21;;;10790:21:54;10847:2;10827:18;;;10820:30;10886:34;10866:18;;;10859:62;-1:-1:-1;;;10937:18:54;;;10930:39;10986:19;;11294:123:21;10606:405:54;11294:123:21;-1:-1:-1;;;;;11436:26:21;;11427:66;;;;-1:-1:-1;;;11427:66:21;;11218:2:54;11427:66:21;;;11200:21:54;11257:2;11237:18;;;11230:30;-1:-1:-1;;;11276:18:54;;;11269:56;11342:18;;11427:66:21;11016:350:54;11427:66:21;11518:7;-1:-1:-1;;;;;11511:27:21;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11544:1;11511:34;11503:88;;;;-1:-1:-1;;;11503:88:21;;;;;;;:::i;:::-;11601:22;;:::i;:::-;11654:10;11633:31;;-1:-1:-1;;;;;11674:22:21;;:12;;;:22;11706:13;;;:29;;;11745:22;;:::i;:::-;-1:-1:-1;;;;;11777:33:21;;;;;;11820:22;;;:12;;;;:22;;;11852:13;;;;:29;;;11932:7;;11941:18;;11961:12;;;;11975:13;;;;11777:18;;11912:126;;11932:7;;11941:18;11961:12;11868:13;11912:19;:126::i;:::-;12048:27;;;;:15;:27;;;;;;;;:36;;;;-1:-1:-1;;;;;12048:36:21;;;-1:-1:-1;;;;;;12048:36:21;;;;;;;;;;;-1:-1:-1;12048:36:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12094:15;:27;;;;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12197:12;12177:18;;12211:13;;12145:129;;12068:15:54;;;12050:34;;12100:18;;;12093:34;;;;12143:18;;;12136:43;12210:2;12195:18;;12188:34;;;;12145:129:21;;12048:27;;-1:-1:-1;12094:36:21;;12145:129;;;12048:27;;12145:129;;;;;11999:3:54;12145:129:21;;;12284:7;:9;;;:7;:9;;;:::i;:::-;;;;;;11179:1121;;;11039:1261;;;;;:::o;1831:101:13:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;1201:85::-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:13;;1201:85::o;5439:200:21:-;5512:4;5532:14;5539:6;5532;:14::i;:::-;5528:83;;;5595:5;-1:-1:-1;;;;;5568:32:21;5576:6;-1:-1:-1;;;;;5568:21:21;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5568:32:21;;5561:39;;;;8226:1751;8401:7;:5;:7::i;:::-;-1:-1:-1;;;;;8387:21:21;:10;-1:-1:-1;;;;;8387:21:21;;:57;;;;8412:32;8424:7;8433:10;8412:11;:32::i;:::-;8387:93;;;;8448:32;8460:7;8469:10;8448:11;:32::i;:::-;8379:134;;;;-1:-1:-1;;;8379:134:21;;12831:2:54;8379:134:21;;;12813:21:54;12870:2;12850:18;;;12843:30;-1:-1:-1;;;12889:18:54;;;12882:58;12957:18;;8379:134:21;12629:352:54;8379:134:21;8538:7;-1:-1:-1;;;;;8531:27:21;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;;;:72;;;8576:7;-1:-1:-1;;;;;8569:27:21;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;8531:72;8523:126;;;;-1:-1:-1;;;8523:126:21;;;;;;;:::i;:::-;8676:12;8680:8;8676:2;:12;:::i;:::-;8667:5;:21;;:35;;;;-1:-1:-1;8692:10:21;8667:35;:60;;;;-1:-1:-1;8715:12:21;8719:8;8715:2;:12;:::i;:::-;8706:5;:21;;8667:60;:74;;;;-1:-1:-1;8731:10:21;8667:74;:91;;;;;8757:1;8745:8;:13;;8667:91;:108;;;;;8774:1;8762:8;:13;;8667:108;8659:141;;;;-1:-1:-1;;;8659:141:21;;13188:2:54;8659:141:21;;;13170:21:54;13227:2;13207:18;;;13200:30;-1:-1:-1;;;13246:18:54;;;13239:50;13306:18;;8659:141:21;12986:344:54;8659:141:21;8814:9;;8810:113;;-1:-1:-1;;;;;8847:25:21;;8839:73;;;;-1:-1:-1;;;8839:73:21;;13537:2:54;8839:73:21;;;13519:21:54;13576:2;13556:18;;;13549:30;13615:34;13595:18;;;13588:62;-1:-1:-1;;;13666:18:54;;;13659:33;13709:19;;8839:73:21;13335:399:54;8839:73:21;8936:9;;8932:113;;-1:-1:-1;;;;;8969:25:21;;8961:73;;;;-1:-1:-1;;;8961:73:21;;13941:2:54;8961:73:21;;;13923:21:54;13980:2;13960:18;;;13953:30;14019:34;13999:18;;;13992:62;-1:-1:-1;;;14070:18:54;;;14063:33;14113:19;;8961:73:21;13739:399:54;8961:73:21;9054:15;9072:33;9088:7;9097;9072:15;:33::i;:::-;9054:51;;9115:20;;:::i;:::-;9145:27;;;9182:19;;;;:27;;;9219:17;;;;:28;;;-1:-1:-1;;;;;9257:34:21;;;:20;;;:34;;;9301;;;:20;;;:34;;;9145:19;9345:12;;;:3;:12;;;;;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9345:24:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9384:88;9349:7;;-1:-1:-1;;;;;;;;;;;9384:88:21;;;9405:7;;9414;;9167:5;;9204;;9239:8;;9280:11;;9324;;9384:88;:::i;:::-;;;;;;;;9482:22;9507:33;9523:7;9532;9507:15;:33::i;:::-;9482:58;;9550:27;;:::i;:::-;9587:34;;;9631:26;;;;:34;;;9675:24;;;;:35;;;-1:-1:-1;;;;;9720:41:21;;;:27;;;:41;;;9771;;;:27;;;:41;;;9587:26;9822:19;;;:3;:19;;;;;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9822:38:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9875:95;9826:14;;-1:-1:-1;;;;;;;;;;;9875:95:21;;;9903:7;;9912;;9616:5;;9660;;9702:8;;9750:11;;9801;;9875:95;:::i;:::-;;;;;;;;8369:1608;;;;8226:1751;;;;;;;:::o;4226:319::-;4279:4;4306:6;-1:-1:-1;;;;;4299:31:21;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4299:33:21;;;;;;;;-1:-1:-1;;4299:33:21;;;;;;;;;;;;:::i;:::-;;;4295:244;;-1:-1:-1;4523:5:21;;4226:319;-1:-1:-1;4226:319:21:o;4295:244::-;-1:-1:-1;;;;;4383:26:21;;;4379:76;;-1:-1:-1;4436:4:21;;4226:319;-1:-1:-1;;4226:319:21:o;2081:198:13:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:13;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:13;;15313:2:54;2161:73:13::1;::::0;::::1;15295:21:54::0;15352:2;15332:18;;;15325:30;15391:34;15371:18;;;15364:62;-1:-1:-1;;;15442:18:54;;;15435:36;15488:19;;2161:73:13::1;15111:402:54::0;2161:73:13::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;16467:687:21:-;16534:22;16559:28;;;:15;:28;;;;;;;;16534:53;;;;;;;;;;-1:-1:-1;;;;;16534:53:21;;;;;;;;;;;;;;;;;;;;;;;;16622:28;;;:15;:28;;;;;;16597:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16668:18;;16534:53;;16597;;16668:32;;;;;:68;;-1:-1:-1;16704:18:21;;-1:-1:-1;;;;;16704:32:21;;;16668:68;16660:107;;;;-1:-1:-1;;;16660:107:21;;;;;;;:::i;:::-;16800:18;;-1:-1:-1;;;;;16786:32:21;:10;:32;;:68;;-1:-1:-1;16836:18:21;;-1:-1:-1;;;;;16822:32:21;:10;:32;16786:68;:93;;;;16872:7;:5;:7::i;:::-;-1:-1:-1;;;;;16858:21:21;:10;-1:-1:-1;;;;;16858:21:21;;16786:93;:134;;;;16883:37;16895:6;:12;;;16909:10;16883:11;:37::i;:::-;16786:175;;;;16924:37;16936:6;:12;;;16950:10;16924:11;:37::i;:::-;16777:232;;;;-1:-1:-1;;;16777:232:21;;15720:2:54;16777:232:21;;;15702:21:54;15759:2;15739:18;;;15732:30;15798:34;15778:18;;;15771:62;-1:-1:-1;;;15849:18:54;;;15842:41;15900:19;;16777:232:21;15518:407:54;16777:232:21;17026:28;;;;:15;:28;;;;;;;;17019:35;;-1:-1:-1;;;;;;17019:35:21;;;;;;;;;;;;;;;;;;;;;17071:15;:28;;;;;;17064:35;;;;;;;;;;;;;;;;;;;;;;17114:33;17042:11;;17114:33;;;16524:630;;16467:687;:::o;1359:130:13:-;719:10:20;1422:7:13;:5;:7::i;:::-;-1:-1:-1;;;;;1422:23:13;;1414:68;;;;-1:-1:-1;;;1414:68:13;;16132:2:54;1414:68:13;;;16114:21:54;;;16151:18;;;16144:30;16210:34;16190:18;;;16183:62;16262:18;;1414:68:13;15930:356:54;2433:187:13;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:13;;;-1:-1:-1;;;;;;2541:17:13;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:180:54:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:54;;14:180;-1:-1:-1;14:180:54:o;199:375::-;-1:-1:-1;;;;;457:15:54;;;439:34;;509:15;;;;504:2;489:18;;482:43;556:2;541:18;;534:34;;;;389:2;374:18;;199:375::o;579:131::-;-1:-1:-1;;;;;654:31:54;;644:42;;634:70;;700:1;697;690:12;715:388;783:6;791;844:2;832:9;823:7;819:23;815:32;812:52;;;860:1;857;850:12;812:52;899:9;886:23;918:31;943:5;918:31;:::i;:::-;968:5;-1:-1:-1;1025:2:54;1010:18;;997:32;1038:33;997:32;1038:33;:::i;:::-;1090:7;1080:17;;;715:388;;;;;:::o;2006:878::-;2119:6;2127;2135;2143;2151;2159;2167;2220:3;2208:9;2199:7;2195:23;2191:33;2188:53;;;2237:1;2234;2227:12;2188:53;2273:9;2260:23;2250:33;;2333:2;2322:9;2318:18;2305:32;2346:31;2371:5;2346:31;:::i;:::-;2396:5;-1:-1:-1;2453:2:54;2438:18;;2425:32;2466:33;2425:32;2466:33;:::i;:::-;2518:7;-1:-1:-1;2572:2:54;2557:18;;2544:32;;-1:-1:-1;2628:3:54;2613:19;;2600:33;2642;2600;2642;:::i;:::-;2694:7;-1:-1:-1;2753:3:54;2738:19;;2725:33;2767;2725;2767;:::i;:::-;2819:7;2809:17;;;2873:3;2862:9;2858:19;2845:33;2835:43;;2006:878;;;;;;;;;;:::o;3413:667::-;3508:6;3516;3524;3532;3540;3593:3;3581:9;3572:7;3568:23;3564:33;3561:53;;;3610:1;3607;3600:12;3561:53;3649:9;3636:23;3668:31;3693:5;3668:31;:::i;:::-;3718:5;-1:-1:-1;3770:2:54;3755:18;;3742:32;;-1:-1:-1;3826:2:54;3811:18;;3798:32;3839:33;3798:32;3839:33;:::i;:::-;3891:7;-1:-1:-1;3950:2:54;3935:18;;3922:32;3963:33;3922:32;3963:33;:::i;:::-;3413:667;;;;-1:-1:-1;3413:667:54;;4069:3;4054:19;4041:33;;3413:667;-1:-1:-1;;3413:667:54:o;4085:203::-;-1:-1:-1;;;;;4249:32:54;;;;4231:51;;4219:2;4204:18;;4085:203::o;4475:878::-;4588:6;4596;4604;4612;4620;4628;4636;4689:3;4677:9;4668:7;4664:23;4660:33;4657:53;;;4706:1;4703;4696:12;4657:53;4745:9;4732:23;4764:31;4789:5;4764:31;:::i;:::-;4814:5;-1:-1:-1;4871:2:54;4856:18;;4843:32;4884:33;4843:32;4884:33;:::i;:::-;4936:7;-1:-1:-1;4990:2:54;4975:18;;4962:32;;-1:-1:-1;5041:2:54;5026:18;;5013:32;;-1:-1:-1;5092:3:54;5077:19;;5064:33;;-1:-1:-1;5149:3:54;5134:19;;5121:33;5163;5121;5163;:::i;:::-;5215:7;-1:-1:-1;5274:3:54;5259:19;;5246:33;5288;5246;5288;:::i;:::-;5340:7;5330:17;;;4475:878;;;;;;;;;;:::o;5358:247::-;5417:6;5470:2;5458:9;5449:7;5445:23;5441:32;5438:52;;;5486:1;5483;5476:12;5438:52;5525:9;5512:23;5544:31;5569:5;5544:31;:::i;:::-;5594:5;5358:247;-1:-1:-1;;;5358:247:54:o;5610:350::-;5812:2;5794:21;;;5851:2;5831:18;;;5824:30;-1:-1:-1;;;5885:2:54;5870:18;;5863:56;5951:2;5936:18;;5610:350::o;6388:184::-;6458:6;6511:2;6499:9;6490:7;6486:23;6482:32;6479:52;;;6527:1;6524;6517:12;6479:52;-1:-1:-1;6550:16:54;;6388:184;-1:-1:-1;6388:184:54:o;6577:352::-;6779:2;6761:21;;;6818:2;6798:18;;;6791:30;-1:-1:-1;;;6852:2:54;6837:18;;6830:58;6920:2;6905:18;;6577:352::o;6934:304::-;-1:-1:-1;;;;;7164:15:54;;;7146:34;;7216:15;;7211:2;7196:18;;7189:43;7096:2;7081:18;;6934:304::o;7604:127::-;7665:10;7660:3;7656:20;7653:1;7646:31;7696:4;7693:1;7686:15;7720:4;7717:1;7710:15;7736:128;7803:9;;;7824:11;;;7821:37;;;7838:18;;:::i;7869:277::-;7936:6;7989:2;7977:9;7968:7;7964:23;7960:32;7957:52;;;8005:1;8002;7995:12;7957:52;8037:9;8031:16;8090:5;8083:13;8076:21;8069:5;8066:32;8056:60;;8112:1;8109;8102:12;8837:422;8926:1;8969:5;8926:1;8983:270;9004:7;8994:8;8991:21;8983:270;;;9063:4;9059:1;9055:6;9051:17;9045:4;9042:27;9039:53;;;9072:18;;:::i;:::-;9122:7;9112:8;9108:22;9105:55;;;9142:16;;;;9105:55;9221:22;;;;9181:15;;;;8983:270;;;8987:3;8837:422;;;;;:::o;9264:806::-;9313:5;9343:8;9333:80;;-1:-1:-1;9384:1:54;9398:5;;9333:80;9432:4;9422:76;;-1:-1:-1;9469:1:54;9483:5;;9422:76;9514:4;9532:1;9527:59;;;;9600:1;9595:130;;;;9507:218;;9527:59;9557:1;9548:10;;9571:5;;;9595:130;9632:3;9622:8;9619:17;9616:43;;;9639:18;;:::i;:::-;-1:-1:-1;;9695:1:54;9681:16;;9710:5;;9507:218;;9809:2;9799:8;9796:16;9790:3;9784:4;9781:13;9777:36;9771:2;9761:8;9758:16;9753:2;9747:4;9744:12;9740:35;9737:77;9734:159;;;-1:-1:-1;9846:19:54;;;9878:5;;9734:159;9925:34;9950:8;9944:4;9925:34;:::i;:::-;9995:6;9991:1;9987:6;9983:19;9974:7;9971:32;9968:58;;;10006:18;;:::i;:::-;10044:20;;9264:806;-1:-1:-1;;;9264:806:54:o;10075:131::-;10135:5;10164:36;10191:8;10185:4;10164:36;:::i;10211:168::-;10284:9;;;10315;;10332:15;;;10326:22;;10312:37;10302:71;;10353:18;;:::i;10384:217::-;10424:1;10450;10440:132;;10494:10;10489:3;10485:20;10482:1;10475:31;10529:4;10526:1;10519:15;10557:4;10554:1;10547:15;10440:132;-1:-1:-1;10586:9:54;;10384:217::o;11371:405::-;11573:2;11555:21;;;11612:2;11592:18;;;11585:30;11651:34;11646:2;11631:18;;11624:62;-1:-1:-1;;;11717:2:54;11702:18;;11695:39;11766:3;11751:19;;11371:405::o;12233:135::-;12272:3;12293:17;;;12290:43;;12313:18;;:::i;:::-;-1:-1:-1;12360:1:54;12349:13;;12233:135::o;12373:251::-;12443:6;12496:2;12484:9;12475:7;12471:23;12467:32;12464:52;;;12512:1;12509;12502:12;12464:52;12544:9;12538:16;12563:31;12588:5;12563:31;:::i;14143:681::-;-1:-1:-1;;;;;14514:15:54;;;14496:34;;14566:15;;;14561:2;14546:18;;14539:43;14613:2;14598:18;;14591:34;;;;14656:2;14641:18;;14634:34;;;;14699:3;14684:19;;14677:35;14749:15;;14476:3;14728:19;;14721:44;14802:15;;;14796:3;14781:19;;14774:44;14445:3;14430:19;;14143:681::o",
  "source": "// SPDX-License-Identifier: GPL-3.0\n/**\n *     NOTICE\n *\n *     The T-REX software is licensed under a proprietary license or the GPL v.3.\n *     If you choose to receive it under the GPL v.3 license, the following applies:\n *     T-REX is a suite of smart contracts developed by Tokeny to manage and transfer financial assets on the ethereum blockchain\n *\n *     Copyright (C) 2021, Tokeny sàrl.\n *\n *     This program is free software: you can redistribute it and/or modify\n *     it under the terms of the GNU General Public License as published by\n *     the Free Software Foundation, either version 3 of the License, or\n *     (at your option) any later version.\n *\n *     This program is distributed in the hope that it will be useful,\n *     but WITHOUT ANY WARRANTY; without even the implied warranty of\n *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *     GNU General Public License for more details.\n *\n *     You should have received a copy of the GNU General Public License\n *     along with this program.  If not, see <https://www.gnu.org/licenses/>.\n */\n\npragma solidity ^0.8.0;\nimport '../roles/AgentRole.sol';\nimport '../token/IToken.sol';\n\n\ncontract DVDTransferManager is Ownable {\n\n    /**\n     * @dev Emitted when a DVD transfer is initiated by `maker` to swap `token1Amount` tokens `token1` (TREX or not)\n     * for `token2Amount` tokens `token2` with `taker`\n     * this event is emitted by the `initiateDVDTransfer` function\n     */\n    event DVDTransferInitiated(bytes32 indexed transferID, address maker, address indexed token1, uint256 token1Amount, address taker, address indexed token2, uint256 token2Amount);\n\n    /**\n     * @dev Emitted when a DVD transfer is validated by `taker` and executed either by `taker` either by the agent of the TREX token\n     * if the TREX token is subject to conditional transfers\n     * this event is emitted by the `takeDVDTransfer` function\n     */\n    event DVDTransferExecuted(bytes32 indexed transferID);\n\n    /**\n     * @dev Emitted when a DVD transfer is cancelled\n     * this event is emitted by the `cancelDVDTransfer` function\n     */\n    event DVDTransferCancelled(bytes32 indexed transferID);\n\n    /**\n     * @dev Emitted when a DVD transfer is cancelled\n     * this event is emitted by the `cancelDVDTransfer` function\n     */\n    event FeeModified(bytes32 indexed parity, address token1, address token2, uint fee1, uint fee2, uint feeBase, address fee1Wallet, address fee2Wallet);\n\n    struct Delivery {\n        address counterpart;\n        address token;\n        uint256 amount;\n    }\n\n    struct Fee {\n        uint token1Fee;\n        uint token2Fee;\n        uint feeBase;\n        address fee1Wallet;\n        address fee2Wallet;\n    }\n\n    struct TxFees {\n        uint txFee1;\n        uint txFee2;\n        address fee1Wallet;\n        address fee2Wallet;\n    }\n\n    // fee details linked to a parity of tokens\n    mapping(bytes32 => Fee) public fee;\n\n    // tokens to deliver by DVD transfer maker\n    mapping(bytes32 => Delivery) public token1ToDeliver;\n\n    // tokens to deliver by DVD transfer taker\n    mapping(bytes32 => Delivery) public token2ToDeliver;\n\n    // nonce of the transaction allowing the creation of unique transferID\n    uint256 public txNonce;\n\n    // initiates the nonce at 0\n    constructor(){\n        txNonce = 0;\n    }\n\n\n    /**\n     *  @dev calculates the parity byte signature\n     *  @param _token1 the address of the base token\n     *  @param _token2 the address of the counterpart token\n     *  return the byte signature of the parity\n     */\n    function calculateParity (address _token1, address _token2) public pure returns (bytes32) {\n        bytes32 parity = keccak256(abi.encode(_token1, _token2));\n        return parity;\n    }\n\n    /**\n     *  @dev check if `_token` corresponds to a functional TREX token (with identity registry initiated)\n     *  @param _token the address token to check\n     *  the function will try to call `identityRegistry()` on the address, which is a getter specific to TREX tokens\n     *  if the call pass and returns an address it means that the token is a TREX, otherwise it's not a TREX\n     *  return `true` if the token is a TREX, `false` otherwise\n     */\n    function isTREX(address _token) public view returns (bool) {\n        try IToken(_token).identityRegistry() returns (IIdentityRegistry _ir) {\n            if (address(_ir) != address(0)) {\n                return true;\n            }\n        return false;\n        }\n        catch {\n            return false;\n        }\n    }\n\n    /**\n     *  @dev check if `_user` is a TREX agent of `_token`\n     *  @param _token the address token to check\n     *  @param _user the wallet address\n     *  if `_token` is a TREX token this function will check if `_user` is registered as an agent on it\n     *  return `true` if `_user` is agent of `_token`, return `false` otherwise\n     */\n    function isTREXAgent(address _token, address _user) public view returns (bool) {\n    if (isTREX(_token)){\n        return AgentRole(_token).isAgent(_user);\n    }\n        return false;\n    }\n\n    /**\n     *  @dev check if `_user` is a TREX owner of `_token`\n     *  @param _token the address token to check\n     *  @param _user the wallet address\n     *  if `_token` is a TREX token this function will check if `_user` is registered as an owner on it\n     *  return `true` if `_user` is owner of `_token`, return `false` otherwise\n     */\n    function isTREXOwner(address _token, address _user) public view returns (bool) {\n        if (isTREX(_token)){\n            return Ownable(_token).owner() == _user;\n        }\n        return false;\n    }\n\n    /**\n     *  @dev calculates the transferID depending on DVD transfer parameters\n     *  @param _nonce the nonce of the transfer on the smart contract\n     *  @param _maker the address of the DVD transfer maker (initiator of the transfer)\n     *  @param _token1 the address of the token that the maker is providing\n     *  @param _token1Amount the amount of tokens `_token1` provided by the maker\n     *  @param _taker the address of the DVD transfer taker (executor of the transfer)\n     *  @param _token2 the address of the token that the taker is providing\n     *  @param _token2Amount the amount of tokens `_token2` provided by the taker\n     *  return the identifier of the DVD transfer as a byte signature\n     */\n    function calculateTransferID (\n        uint256 _nonce,\n        address _maker,\n        address _token1,\n        uint256 _token1Amount,\n        address _taker,\n        address _token2,\n        uint256 _token2Amount\n    ) public pure returns (bytes32){\n        bytes32 transferID = keccak256(abi.encode(_nonce, _maker, _token1, _token1Amount, _taker, _token2, _token2Amount));\n        return transferID;\n    }\n\n    /**\n     *  @dev modify the fees applied to a parity of tokens (tokens can be TREX or ERC20)\n     *  @param _token1 the address of the base token for the parity `_token1`/`_token2`\n     *  @param _token2 the address of the counterpart token for the parity `_token1`/`_token2`\n     *  @param _fee1 the fee to apply on `_token1` leg of the DVD transfer per 10^`_feeBase`\n     *  @param _fee2 the fee to apply on `_token2` leg of the DVD transfer per 10^`_feeBase`\n     *  @param _feeBase the precision of the fee setting, e.g. if `_feeBase` == 2 then `_fee1` and `_fee2` are in % (fee/10^`_feeBase`)\n     *  @param _fee1Wallet the wallet address receiving fees applied on `_token1`\n     *  @param _fee2Wallet the wallet address receiving fees applied on `_token2`\n     *  `_token1` and `_token2` need to be ERC20 or TREX tokens addresses, otherwise the transaction will fail\n     *  `msg.sender` has to be owner of the DVD contract or the owner of the TREX token involved in the parity (if any)\n     *  requires fees to be lower than 100%\n     *  requires `_feeBase` to be higher or equal to 2 (precision 10^2)\n     *  requires `_feeBase` to be lower or equal to 5 (precision 10^5) to avoid overflows\n     *  requires `_fee1Wallet` & `_fee2Wallet` to be non empty addresses if `_fee1` & `_fee2` are respectively set\n     *  note that if fees are not set for a parity the default fee is basically 0%\n     *  emits a `FeeModified` event\n     */\n    function modifyFee(address _token1, address _token2, uint _fee1, uint _fee2, uint _feeBase, address _fee1Wallet, address _fee2Wallet) external {\n        require(msg.sender == owner() || isTREXOwner(_token1, msg.sender) || isTREXOwner(_token2, msg.sender), 'Ownable: only owner can call');\n        require(IERC20(_token1).totalSupply() != 0 && IERC20(_token2).totalSupply() != 0, 'invalid address : address is not an ERC20');\n        require(_fee1 <= 10**_feeBase && _fee1 >= 0 && _fee2 <= 10**_feeBase && _fee2 >= 0 && _feeBase <= 5 && _feeBase >= 2, 'invalid fee settings');\n        if (_fee1 > 0) {\n            require(_fee1Wallet != address(0), 'fee wallet 1 cannot be zero address');\n        }\n        if (_fee2 > 0) {\n            require(_fee2Wallet != address(0), 'fee wallet 2 cannot be zero address');\n        }\n        bytes32 _parity = calculateParity(_token1, _token2);\n        Fee memory parityFee;\n        parityFee.token1Fee = _fee1;\n        parityFee.token2Fee = _fee2;\n        parityFee.feeBase = _feeBase;\n        parityFee.fee1Wallet = _fee1Wallet;\n        parityFee.fee2Wallet = _fee2Wallet;\n        fee[_parity] = parityFee;\n        emit FeeModified(_parity, _token1, _token2, _fee1, _fee2, _feeBase, _fee1Wallet, _fee2Wallet);\n        bytes32 _reflectParity = calculateParity(_token2, _token1);\n        Fee memory reflectParityFee;\n        reflectParityFee.token1Fee = _fee2;\n        reflectParityFee.token2Fee = _fee1;\n        reflectParityFee.feeBase = _feeBase;\n        reflectParityFee.fee1Wallet = _fee2Wallet;\n        reflectParityFee.fee2Wallet = _fee1Wallet;\n        fee[_reflectParity] = reflectParityFee;\n        emit FeeModified(_reflectParity, _token2, _token1, _fee2, _fee1, _feeBase, _fee2Wallet, _fee1Wallet);\n    }\n\n    /**\n     *  @dev initiates a DVD transfer between `msg.sender` & `_counterpart`\n     *  @param _token1 the address of the token (ERC20 or TREX) provided by `msg.sender`\n     *  @param _token1Amount the amount of `_token1` that `msg.sender` will send to `_counterpart` at DVD execution time\n     *  @param _counterpart the address of the counterpart, which will receive `_token1Amount` of `_token1` in exchange for\n     *  `_token2Amount` of `_token2`\n     *  @param _token2 the address of the token (ERC20 or TREX) provided by `_counterpart`\n     *  @param _token2Amount the amount of `_token2` that `_counterpart` will send to `msg.sender` at DVD execution time\n     *  requires `msg.sender` to have enough `_token1` tokens to process the DVD transfer\n     *  requires `DVDTransferManager` contract to have the necessary allowance to process the DVD transfer on `msg.sender`\n     *  requires `_counterpart` to not be the 0 address\n     *  requires `_token1` & `_token2` to be valid token addresses\n     *  emits a `DVDTransferInitiated` event\n     */\n    function initiateDVDTransfer(address _token1, uint256 _token1Amount, address _counterpart, address _token2, uint256 _token2Amount) external {\n        require(IERC20(_token1).balanceOf(msg.sender) >= _token1Amount, 'Not enough tokens in balance');\n        require(IERC20(_token1).allowance(msg.sender, address(this)) >= _token1Amount, 'not enough allowance to initiate transfer');\n        require (_counterpart != address(0), 'counterpart cannot be null');\n        require(IERC20(_token2).totalSupply() != 0, 'invalid address : address is not an ERC20');\n        Delivery memory token1;\n        token1.counterpart = msg.sender;\n        token1.token = _token1;\n        token1.amount = _token1Amount;\n        Delivery memory token2;\n        token2.counterpart = _counterpart;\n        token2.token = _token2;\n        token2.amount = _token2Amount;\n        bytes32 transferID = calculateTransferID(txNonce, token1.counterpart, token1.token, token1.amount, token2.counterpart, token2.token, token2.amount);\n        token1ToDeliver[transferID] = token1;\n        token2ToDeliver[transferID] = token2;\n        emit DVDTransferInitiated(transferID,token1.counterpart, token1.token, token1.amount, token2.counterpart, token2.token, token2.amount);\n        txNonce++;\n    }\n\n    /**\n     *  @dev execute a DVD transfer that was previously initiated through the `initiateDVDTransfer` function\n     *  @param _transferID the DVD transfer identifier as calculated through the `calculateTransferID` function for the initiated DVD transfer to execute\n     *  requires `_transferID` to exist (DVD transfer has to be initiated)\n     *  requires that taker (counterpart sending token2) has enough tokens in balance to process the DVD transfer\n     *  requires that `DVDTransferManager` contract has enough allowance to process the `token2` leg of the DVD transfer\n     *  requires that `msg.sender` is the taker OR the TREX agent in case a TREX token is involved in the transfer (in case of conditional transfer\n     *  the agent can call the function when the transfer has been approved)\n     *  if fees apply on one side or both sides of the transfer the fees will be sent, at transaction time, to the fees wallet previously set\n     *  in case fees apply the counterparts will receive less than the amounts included in the DVD transfer as part of the transfer is redirected to the\n     *  fee wallet at transfer execution time\n     *  if one or both legs of the transfer are TREX, then all the relevant checks apply on the transaction (compliance + identity checks)\n     *  and the transaction WILL FAIL if the TREX conditions of transfer are not respected, please refer to {Token-transfer} and {Token-transferFrom} to\n     *  know more about TREX conditions for transfers\n     *  once the DVD transfer is executed the `_transferID` is removed from the pending `_transferID` pool\n     *  emits a `DVDTransferExecuted` event\n     */\n    function takeDVDTransfer(bytes32 _transferID) external {\n        Delivery memory token1 = token1ToDeliver[_transferID];\n        Delivery memory token2 = token2ToDeliver[_transferID];\n        require(token1.counterpart != address(0) && token2.counterpart != address(0), 'transfer ID does not exist');\n        IERC20 token1Contract = IERC20(token1.token);\n        IERC20 token2Contract = IERC20(token2.token);\n        require (msg.sender == token2.counterpart || isTREXAgent(token1.token, msg.sender) || isTREXAgent(token2.token, msg.sender), 'transfer has to be done by the counterpart or by owner');\n        require(token2Contract.balanceOf(token2.counterpart) >= token2.amount, 'Not enough tokens in balance');\n        require(token2Contract.allowance(token2.counterpart, address(this)) >= token2.amount, 'not enough allowance to transfer');\n        TxFees memory fees = calculateFee(_transferID);\n        if (fees.txFee1 != 0) {\n        token1Contract.transferFrom(token1.counterpart, token2.counterpart, (token1.amount - fees.txFee1));\n        token1Contract.transferFrom(token1.counterpart, fees.fee1Wallet, fees.txFee1);\n        }\n        if (fees.txFee1 == 0) {\n            token1Contract.transferFrom(token1.counterpart, token2.counterpart, token1.amount);\n        }\n        if (fees.txFee2 != 0) {\n            token2Contract.transferFrom(token2.counterpart, token1.counterpart, (token2.amount - fees.txFee2));\n            token2Contract.transferFrom(token2.counterpart, fees.fee2Wallet, fees.txFee2);\n        }\n        if (fees.txFee2 == 0) {\n            token2Contract.transferFrom(token2.counterpart, token1.counterpart, token2.amount);\n        }\n        delete token1ToDeliver[_transferID];\n        delete token2ToDeliver[_transferID];\n        emit DVDTransferExecuted(_transferID);\n    }\n\n    /**\n     *  @dev delete a pending DVD transfer that was previously initiated through the `initiateDVDTransfer` function from the pool\n     *  @param _transferID the DVD transfer identifier as calculated through the `calculateTransferID` function for the initiated DVD transfer to delete\n     *  requires `_transferID` to exist (DVD transfer has to be initiated)\n     *  requires that `msg.sender` is the taker or the maker or the `DVDTransferManager` contract owner or the TREX agent in case a TREX token is involved in the transfer\n     *  once the `cancelDVDTransfer` is executed the `_transferID` is removed from the pending `_transferID` pool\n     *  emits a `DVDTransferCancelled` event\n     */\n    function cancelDVDTransfer(bytes32 _transferID) external {\n        Delivery memory token1 = token1ToDeliver[_transferID];\n        Delivery memory token2 = token2ToDeliver[_transferID];\n        require(token1.counterpart != address(0) && token2.counterpart != address(0), 'transfer ID does not exist');\n        require (msg.sender == token2.counterpart || msg.sender == token1.counterpart || msg.sender == owner() || isTREXAgent(token1.token, msg.sender) || isTREXAgent(token2.token, msg.sender), 'you are not allowed to cancel this transfer');\n        delete token1ToDeliver[_transferID];\n        delete token2ToDeliver[_transferID];\n        emit DVDTransferCancelled(_transferID);\n    }\n\n    /**\n     *  @dev calculates the fees to apply to a specific transfer depending on the fees applied to the parity used in the transfer\n     *  @param _transferID the DVD transfer identifier as calculated through the `calculateTransferID` function for the transfer to calculate fees on\n     *  requires `_transferID` to exist (DVD transfer has to be initiated)\n     *  returns the fees to apply on each leg of the transfer in the form of a `TxFees` struct\n     */\n    function calculateFee(bytes32 _transferID) public view returns(TxFees memory) {\n        TxFees memory fees;\n        Delivery memory token1 = token1ToDeliver[_transferID];\n        Delivery memory token2 = token2ToDeliver[_transferID];\n        require(token1.counterpart != address(0) && token2.counterpart != address(0), 'transfer ID does not exist');\n        bytes32 parity = calculateParity(token1.token, token2.token);\n        Fee memory feeDetails = fee[parity];\n        if (feeDetails.token1Fee != 0 || feeDetails.token2Fee != 0 ){\n            uint _txFee1 = (token1.amount * feeDetails.token1Fee * 10**(feeDetails.feeBase - 2)) / (10**feeDetails.feeBase);\n            uint _txFee2 = (token2.amount * feeDetails.token2Fee * 10**(feeDetails.feeBase - 2)) / (10**feeDetails.feeBase);\n            fees.txFee1 = _txFee1;\n            fees.txFee2 = _txFee2;\n            fees.fee1Wallet = feeDetails.fee1Wallet;\n            fees.fee2Wallet = feeDetails.fee2Wallet;\n            return fees;\n        }\n        else {\n            fees.txFee1 = 0;\n            fees.txFee2 = 0;\n            fees.fee1Wallet = address(0);\n            fees.fee2Wallet = address(0);\n            return fees;\n        }\n    }\n\n}\n",
  "sourcePath": "/home/webxpert/workspace/shipfinex/latest-repos/tokenx_smartcontract/contracts/DVD/DVDTransferManager.sol",
  "ast": {
    "absolutePath": "project:/contracts/DVD/DVDTransferManager.sol",
    "exportedSymbols": {
      "AgentRole": [
        9120
      ],
      "Context": [
        3401
      ],
      "DVDTransferManager": [
        4550
      ],
      "IClaimIssuer": [
        1456
      ],
      "IClaimTopicsRegistry": [
        6444
      ],
      "ICompliance": [
        5596
      ],
      "IERC20": [
        3317
      ],
      "IERC734": [
        1609
      ],
      "IERC735": [
        1734
      ],
      "IIdentity": [
        1743
      ],
      "IIdentityRegistry": [
        6637
      ],
      "IIdentityRegistryStorage": [
        6759
      ],
      "IToken": [
        12234
      ],
      "ITrustedIssuersRegistry": [
        6856
      ],
      "Ownable": [
        2505
      ],
      "Roles": [
        11901
      ]
    },
    "id": 4551,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3403,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1093:23:21"
      },
      {
        "absolutePath": "project:/contracts/roles/AgentRole.sol",
        "file": "../roles/AgentRole.sol",
        "id": 3404,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4551,
        "sourceUnit": 9121,
        "src": "1117:32:21",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/token/IToken.sol",
        "file": "../token/IToken.sol",
        "id": 3405,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4551,
        "sourceUnit": 12235,
        "src": "1150:29:21",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 3406,
              "name": "Ownable",
              "nameLocations": [
                "1213:7:21"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2505,
              "src": "1213:7:21"
            },
            "id": 3407,
            "nodeType": "InheritanceSpecifier",
            "src": "1213:7:21"
          }
        ],
        "canonicalName": "DVDTransferManager",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 4550,
        "linearizedBaseContracts": [
          4550,
          2505,
          3401
        ],
        "name": "DVDTransferManager",
        "nameLocation": "1191:18:21",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": {
              "id": 3408,
              "nodeType": "StructuredDocumentation",
              "src": "1228:250:21",
              "text": " @dev Emitted when a DVD transfer is initiated by `maker` to swap `token1Amount` tokens `token1` (TREX or not)\n for `token2Amount` tokens `token2` with `taker`\n this event is emitted by the `initiateDVDTransfer` function"
            },
            "eventSelector": "1eff5dd2c180a5889d45725b98546e9d8c28331caac1c279a0fdc3fe18eb29e5",
            "id": 3424,
            "name": "DVDTransferInitiated",
            "nameLocation": "1489:20:21",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3423,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3410,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "transferID",
                  "nameLocation": "1526:10:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3424,
                  "src": "1510:26:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3409,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1510:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3412,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "maker",
                  "nameLocation": "1546:5:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3424,
                  "src": "1538:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3411,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1538:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3414,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "token1",
                  "nameLocation": "1569:6:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3424,
                  "src": "1553:22:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3413,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1553:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3416,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "token1Amount",
                  "nameLocation": "1585:12:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3424,
                  "src": "1577:20:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3415,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1577:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3418,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "taker",
                  "nameLocation": "1607:5:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3424,
                  "src": "1599:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3417,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1599:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3420,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "token2",
                  "nameLocation": "1630:6:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3424,
                  "src": "1614:22:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3419,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1614:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3422,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "token2Amount",
                  "nameLocation": "1646:12:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3424,
                  "src": "1638:20:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3421,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1638:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1509:150:21"
            },
            "src": "1483:177:21"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 3425,
              "nodeType": "StructuredDocumentation",
              "src": "1666:268:21",
              "text": " @dev Emitted when a DVD transfer is validated by `taker` and executed either by `taker` either by the agent of the TREX token\n if the TREX token is subject to conditional transfers\n this event is emitted by the `takeDVDTransfer` function"
            },
            "eventSelector": "094682e7da443a5bb6ea2c900d20d36aaff04228fe22fc6dd65a58a37695be8b",
            "id": 3429,
            "name": "DVDTransferExecuted",
            "nameLocation": "1945:19:21",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3428,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3427,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "transferID",
                  "nameLocation": "1981:10:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3429,
                  "src": "1965:26:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3426,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1965:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1964:28:21"
            },
            "src": "1939:54:21"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 3430,
              "nodeType": "StructuredDocumentation",
              "src": "1999:129:21",
              "text": " @dev Emitted when a DVD transfer is cancelled\n this event is emitted by the `cancelDVDTransfer` function"
            },
            "eventSelector": "b34dd23f375e48f42dfe5fbb1f8945e706c80dbfaec32c6e978fcf70091306c9",
            "id": 3434,
            "name": "DVDTransferCancelled",
            "nameLocation": "2139:20:21",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3433,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3432,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "transferID",
                  "nameLocation": "2176:10:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3434,
                  "src": "2160:26:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3431,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2160:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2159:28:21"
            },
            "src": "2133:55:21"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 3435,
              "nodeType": "StructuredDocumentation",
              "src": "2194:129:21",
              "text": " @dev Emitted when a DVD transfer is cancelled\n this event is emitted by the `cancelDVDTransfer` function"
            },
            "eventSelector": "2a53ccababe5ceadaebcbb25eb002de52dd1042821dee5cd6dd890c0651c535f",
            "id": 3453,
            "name": "FeeModified",
            "nameLocation": "2334:11:21",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3452,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3437,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "parity",
                  "nameLocation": "2362:6:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3453,
                  "src": "2346:22:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3436,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2346:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3439,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "token1",
                  "nameLocation": "2378:6:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3453,
                  "src": "2370:14:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3438,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2370:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3441,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "token2",
                  "nameLocation": "2394:6:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3453,
                  "src": "2386:14:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3440,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2386:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3443,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "fee1",
                  "nameLocation": "2407:4:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3453,
                  "src": "2402:9:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3442,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2402:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3445,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "fee2",
                  "nameLocation": "2418:4:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3453,
                  "src": "2413:9:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3444,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2413:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3447,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "feeBase",
                  "nameLocation": "2429:7:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3453,
                  "src": "2424:12:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3446,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2424:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3449,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "fee1Wallet",
                  "nameLocation": "2446:10:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3453,
                  "src": "2438:18:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3448,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2438:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3451,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "fee2Wallet",
                  "nameLocation": "2466:10:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3453,
                  "src": "2458:18:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3450,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2458:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2345:132:21"
            },
            "src": "2328:150:21"
          },
          {
            "canonicalName": "DVDTransferManager.Delivery",
            "id": 3460,
            "members": [
              {
                "constant": false,
                "id": 3455,
                "mutability": "mutable",
                "name": "counterpart",
                "nameLocation": "2518:11:21",
                "nodeType": "VariableDeclaration",
                "scope": 3460,
                "src": "2510:19:21",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3454,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2510:7:21",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3457,
                "mutability": "mutable",
                "name": "token",
                "nameLocation": "2547:5:21",
                "nodeType": "VariableDeclaration",
                "scope": 3460,
                "src": "2539:13:21",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3456,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2539:7:21",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3459,
                "mutability": "mutable",
                "name": "amount",
                "nameLocation": "2570:6:21",
                "nodeType": "VariableDeclaration",
                "scope": 3460,
                "src": "2562:14:21",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3458,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2562:7:21",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Delivery",
            "nameLocation": "2491:8:21",
            "nodeType": "StructDefinition",
            "scope": 4550,
            "src": "2484:99:21",
            "visibility": "public"
          },
          {
            "canonicalName": "DVDTransferManager.Fee",
            "id": 3471,
            "members": [
              {
                "constant": false,
                "id": 3462,
                "mutability": "mutable",
                "name": "token1Fee",
                "nameLocation": "2615:9:21",
                "nodeType": "VariableDeclaration",
                "scope": 3471,
                "src": "2610:14:21",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3461,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2610:4:21",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3464,
                "mutability": "mutable",
                "name": "token2Fee",
                "nameLocation": "2639:9:21",
                "nodeType": "VariableDeclaration",
                "scope": 3471,
                "src": "2634:14:21",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3463,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2634:4:21",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3466,
                "mutability": "mutable",
                "name": "feeBase",
                "nameLocation": "2663:7:21",
                "nodeType": "VariableDeclaration",
                "scope": 3471,
                "src": "2658:12:21",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3465,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2658:4:21",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3468,
                "mutability": "mutable",
                "name": "fee1Wallet",
                "nameLocation": "2688:10:21",
                "nodeType": "VariableDeclaration",
                "scope": 3471,
                "src": "2680:18:21",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3467,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2680:7:21",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3470,
                "mutability": "mutable",
                "name": "fee2Wallet",
                "nameLocation": "2716:10:21",
                "nodeType": "VariableDeclaration",
                "scope": 3471,
                "src": "2708:18:21",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3469,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2708:7:21",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Fee",
            "nameLocation": "2596:3:21",
            "nodeType": "StructDefinition",
            "scope": 4550,
            "src": "2589:144:21",
            "visibility": "public"
          },
          {
            "canonicalName": "DVDTransferManager.TxFees",
            "id": 3480,
            "members": [
              {
                "constant": false,
                "id": 3473,
                "mutability": "mutable",
                "name": "txFee1",
                "nameLocation": "2768:6:21",
                "nodeType": "VariableDeclaration",
                "scope": 3480,
                "src": "2763:11:21",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3472,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2763:4:21",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3475,
                "mutability": "mutable",
                "name": "txFee2",
                "nameLocation": "2789:6:21",
                "nodeType": "VariableDeclaration",
                "scope": 3480,
                "src": "2784:11:21",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3474,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2784:4:21",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3477,
                "mutability": "mutable",
                "name": "fee1Wallet",
                "nameLocation": "2813:10:21",
                "nodeType": "VariableDeclaration",
                "scope": 3480,
                "src": "2805:18:21",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3476,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2805:7:21",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3479,
                "mutability": "mutable",
                "name": "fee2Wallet",
                "nameLocation": "2841:10:21",
                "nodeType": "VariableDeclaration",
                "scope": 3480,
                "src": "2833:18:21",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3478,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2833:7:21",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "TxFees",
            "nameLocation": "2746:6:21",
            "nodeType": "StructDefinition",
            "scope": 4550,
            "src": "2739:119:21",
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "27cdab06",
            "id": 3485,
            "mutability": "mutable",
            "name": "fee",
            "nameLocation": "2943:3:21",
            "nodeType": "VariableDeclaration",
            "scope": 4550,
            "src": "2912:34:21",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Fee_$3471_storage_$",
              "typeString": "mapping(bytes32 => struct DVDTransferManager.Fee)"
            },
            "typeName": {
              "id": 3484,
              "keyType": {
                "id": 3481,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2920:7:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2912:23:21",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Fee_$3471_storage_$",
                "typeString": "mapping(bytes32 => struct DVDTransferManager.Fee)"
              },
              "valueType": {
                "id": 3483,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 3482,
                  "name": "Fee",
                  "nameLocations": [
                    "2931:3:21"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3471,
                  "src": "2931:3:21"
                },
                "referencedDeclaration": 3471,
                "src": "2931:3:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Fee_$3471_storage_ptr",
                  "typeString": "struct DVDTransferManager.Fee"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "77722075",
            "id": 3490,
            "mutability": "mutable",
            "name": "token1ToDeliver",
            "nameLocation": "3036:15:21",
            "nodeType": "VariableDeclaration",
            "scope": 4550,
            "src": "3000:51:21",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
              "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery)"
            },
            "typeName": {
              "id": 3489,
              "keyType": {
                "id": 3486,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "3008:7:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "3000:28:21",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
                "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery)"
              },
              "valueType": {
                "id": 3488,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 3487,
                  "name": "Delivery",
                  "nameLocations": [
                    "3019:8:21"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3460,
                  "src": "3019:8:21"
                },
                "referencedDeclaration": 3460,
                "src": "3019:8:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Delivery_$3460_storage_ptr",
                  "typeString": "struct DVDTransferManager.Delivery"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "0f7f6811",
            "id": 3495,
            "mutability": "mutable",
            "name": "token2ToDeliver",
            "nameLocation": "3141:15:21",
            "nodeType": "VariableDeclaration",
            "scope": 4550,
            "src": "3105:51:21",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
              "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery)"
            },
            "typeName": {
              "id": 3494,
              "keyType": {
                "id": 3491,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "3113:7:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "3105:28:21",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
                "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery)"
              },
              "valueType": {
                "id": 3493,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 3492,
                  "name": "Delivery",
                  "nameLocations": [
                    "3124:8:21"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3460,
                  "src": "3124:8:21"
                },
                "referencedDeclaration": 3460,
                "src": "3124:8:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Delivery_$3460_storage_ptr",
                  "typeString": "struct DVDTransferManager.Delivery"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "c66323e5",
            "id": 3497,
            "mutability": "mutable",
            "name": "txNonce",
            "nameLocation": "3253:7:21",
            "nodeType": "VariableDeclaration",
            "scope": 4550,
            "src": "3238:22:21",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3496,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "3238:7:21",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 3504,
              "nodeType": "Block",
              "src": "3312:28:21",
              "statements": [
                {
                  "expression": {
                    "id": 3502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3500,
                      "name": "txNonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3497,
                      "src": "3322:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 3501,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3332:1:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3322:11:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3503,
                  "nodeType": "ExpressionStatement",
                  "src": "3322:11:21"
                }
              ]
            },
            "id": 3505,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3498,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3310:2:21"
            },
            "returnParameters": {
              "id": 3499,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3312:0:21"
            },
            "scope": 4550,
            "src": "3299:41:21",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3527,
              "nodeType": "Block",
              "src": "3664:96:21",
              "statements": [
                {
                  "assignments": [
                    3516
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3516,
                      "mutability": "mutable",
                      "name": "parity",
                      "nameLocation": "3682:6:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 3527,
                      "src": "3674:14:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3515,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3674:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3524,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 3520,
                            "name": "_token1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3508,
                            "src": "3712:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 3521,
                            "name": "_token2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3510,
                            "src": "3721:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 3518,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "3701:3:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3519,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "3705:6:21",
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "src": "3701:10:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3522,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3701:28:21",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3517,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4294967288,
                      "src": "3691:9:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3691:39:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3674:56:21"
                },
                {
                  "expression": {
                    "id": 3525,
                    "name": "parity",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3516,
                    "src": "3747:6:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3514,
                  "id": 3526,
                  "nodeType": "Return",
                  "src": "3740:13:21"
                }
              ]
            },
            "documentation": {
              "id": 3506,
              "nodeType": "StructuredDocumentation",
              "src": "3347:222:21",
              "text": "  @dev calculates the parity byte signature\n  @param _token1 the address of the base token\n  @param _token2 the address of the counterpart token\n  return the byte signature of the parity"
            },
            "functionSelector": "344ae659",
            "id": 3528,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateParity",
            "nameLocation": "3583:15:21",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3511,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3508,
                  "mutability": "mutable",
                  "name": "_token1",
                  "nameLocation": "3608:7:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3528,
                  "src": "3600:15:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3507,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3600:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3510,
                  "mutability": "mutable",
                  "name": "_token2",
                  "nameLocation": "3625:7:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3528,
                  "src": "3617:15:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3509,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3617:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3599:34:21"
            },
            "returnParameters": {
              "id": 3514,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3513,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3528,
                  "src": "3655:7:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3512,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3655:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3654:9:21"
            },
            "scope": 4550,
            "src": "3574:186:21",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3567,
              "nodeType": "Block",
              "src": "4285:260:21",
              "statements": [
                {
                  "clauses": [
                    {
                      "block": {
                        "id": 3560,
                        "nodeType": "Block",
                        "src": "4365:122:21",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 3553,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 3547,
                                    "name": "_ir",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3543,
                                    "src": "4391:3:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                                      "typeString": "contract IIdentityRegistry"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                                      "typeString": "contract IIdentityRegistry"
                                    }
                                  ],
                                  "id": 3546,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4383:7:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 3545,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4383:7:21",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3548,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4383:12:21",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 3551,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4407:1:21",
                                    "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": 3550,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4399:7:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 3549,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4399:7:21",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3552,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4399:10:21",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "4383:26:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 3557,
                            "nodeType": "IfStatement",
                            "src": "4379:76:21",
                            "trueBody": {
                              "id": 3556,
                              "nodeType": "Block",
                              "src": "4411:44:21",
                              "statements": [
                                {
                                  "expression": {
                                    "hexValue": "74727565",
                                    "id": 3554,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4436:4:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  },
                                  "functionReturnParameters": 3535,
                                  "id": 3555,
                                  "nodeType": "Return",
                                  "src": "4429:11:21"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "hexValue": "66616c7365",
                              "id": 3558,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4471:5:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            "functionReturnParameters": 3535,
                            "id": 3559,
                            "nodeType": "Return",
                            "src": "4464:12:21"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 3561,
                      "nodeType": "TryCatchClause",
                      "parameters": {
                        "id": 3544,
                        "nodeType": "ParameterList",
                        "parameters": [
                          {
                            "constant": false,
                            "id": 3543,
                            "mutability": "mutable",
                            "name": "_ir",
                            "nameLocation": "4360:3:21",
                            "nodeType": "VariableDeclaration",
                            "scope": 3561,
                            "src": "4342:21:21",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                              "typeString": "contract IIdentityRegistry"
                            },
                            "typeName": {
                              "id": 3542,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 3541,
                                "name": "IIdentityRegistry",
                                "nameLocations": [
                                  "4342:17:21"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 6637,
                                "src": "4342:17:21"
                              },
                              "referencedDeclaration": 6637,
                              "src": "4342:17:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                                "typeString": "contract IIdentityRegistry"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "src": "4341:23:21"
                      },
                      "src": "4333:154:21"
                    },
                    {
                      "block": {
                        "id": 3564,
                        "nodeType": "Block",
                        "src": "4502:37:21",
                        "statements": [
                          {
                            "expression": {
                              "hexValue": "66616c7365",
                              "id": 3562,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4523:5:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            "functionReturnParameters": 3535,
                            "id": 3563,
                            "nodeType": "Return",
                            "src": "4516:12:21"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 3565,
                      "nodeType": "TryCatchClause",
                      "src": "4496:43:21"
                    }
                  ],
                  "externalCall": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "id": 3537,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3531,
                            "src": "4306:6:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3536,
                          "name": "IToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12234,
                          "src": "4299:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IToken_$12234_$",
                            "typeString": "type(contract IToken)"
                          }
                        },
                        "id": 3538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4299:14:21",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 3539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4314:16:21",
                      "memberName": "identityRegistry",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12011,
                      "src": "4299:31:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IIdentityRegistry_$6637_$",
                        "typeString": "function () view external returns (contract IIdentityRegistry)"
                      }
                    },
                    "id": 3540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4299:33:21",
                    "tryCall": true,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                      "typeString": "contract IIdentityRegistry"
                    }
                  },
                  "id": 3566,
                  "nodeType": "TryStatement",
                  "src": "4295:244:21"
                }
              ]
            },
            "documentation": {
              "id": 3529,
              "nodeType": "StructuredDocumentation",
              "src": "3766:455:21",
              "text": "  @dev check if `_token` corresponds to a functional TREX token (with identity registry initiated)\n  @param _token the address token to check\n  the function will try to call `identityRegistry()` on the address, which is a getter specific to TREX tokens\n  if the call pass and returns an address it means that the token is a TREX, otherwise it's not a TREX\n  return `true` if the token is a TREX, `false` otherwise"
            },
            "functionSelector": "eb08e261",
            "id": 3568,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isTREX",
            "nameLocation": "4235:6:21",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3531,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "4250:6:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3568,
                  "src": "4242:14:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3530,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4242:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4241:16:21"
            },
            "returnParameters": {
              "id": 3535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3534,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3568,
                  "src": "4279:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3533,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4279:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4278:6:21"
            },
            "scope": 4550,
            "src": "4226:319:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3592,
              "nodeType": "Block",
              "src": "4977:109:21",
              "statements": [
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 3579,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3571,
                        "src": "4994:6:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3578,
                      "name": "isTREX",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3568,
                      "src": "4987:6:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 3580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4987:14:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3589,
                  "nodeType": "IfStatement",
                  "src": "4983:75:21",
                  "trueBody": {
                    "id": 3588,
                    "nodeType": "Block",
                    "src": "5002:56:21",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3585,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3573,
                              "src": "5045:5:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3582,
                                  "name": "_token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3571,
                                  "src": "5029:6:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3581,
                                "name": "AgentRole",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9120,
                                "src": "5019:9:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_AgentRole_$9120_$",
                                  "typeString": "type(contract AgentRole)"
                                }
                              },
                              "id": 3583,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5019:17:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_AgentRole_$9120",
                                "typeString": "contract AgentRole"
                              }
                            },
                            "id": 3584,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5037:7:21",
                            "memberName": "isAgent",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9083,
                            "src": "5019:25:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view external returns (bool)"
                            }
                          },
                          "id": 3586,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5019:32:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 3577,
                        "id": 3587,
                        "nodeType": "Return",
                        "src": "5012:39:21"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 3590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5074:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 3577,
                  "id": 3591,
                  "nodeType": "Return",
                  "src": "5067:12:21"
                }
              ]
            },
            "documentation": {
              "id": 3569,
              "nodeType": "StructuredDocumentation",
              "src": "4551:342:21",
              "text": "  @dev check if `_user` is a TREX agent of `_token`\n  @param _token the address token to check\n  @param _user the wallet address\n  if `_token` is a TREX token this function will check if `_user` is registered as an agent on it\n  return `true` if `_user` is agent of `_token`, return `false` otherwise"
            },
            "functionSelector": "23379251",
            "id": 3593,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isTREXAgent",
            "nameLocation": "4907:11:21",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3574,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3571,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "4927:6:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3593,
                  "src": "4919:14:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3570,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4919:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3573,
                  "mutability": "mutable",
                  "name": "_user",
                  "nameLocation": "4943:5:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3593,
                  "src": "4935:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3572,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4935:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4918:31:21"
            },
            "returnParameters": {
              "id": 3577,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3576,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3593,
                  "src": "4971:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3575,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4971:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4970:6:21"
            },
            "scope": 4550,
            "src": "4898:188:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3618,
              "nodeType": "Block",
              "src": "5518:121:21",
              "statements": [
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 3604,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3596,
                        "src": "5539:6:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3603,
                      "name": "isTREX",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3568,
                      "src": "5532:6:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 3605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5532:14:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3615,
                  "nodeType": "IfStatement",
                  "src": "5528:83:21",
                  "trueBody": {
                    "id": 3614,
                    "nodeType": "Block",
                    "src": "5547:64:21",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3612,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3607,
                                    "name": "_token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3596,
                                    "src": "5576:6:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3606,
                                  "name": "Ownable",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2505,
                                  "src": "5568:7:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_Ownable_$2505_$",
                                    "typeString": "type(contract Ownable)"
                                  }
                                },
                                "id": 3608,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5568:15:21",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Ownable_$2505",
                                  "typeString": "contract Ownable"
                                }
                              },
                              "id": 3609,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "5584:5:21",
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2433,
                              "src": "5568:21:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 3610,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5568:23:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 3611,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3598,
                            "src": "5595:5:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5568:32:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 3602,
                        "id": 3613,
                        "nodeType": "Return",
                        "src": "5561:39:21"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 3616,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5627:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 3602,
                  "id": 3617,
                  "nodeType": "Return",
                  "src": "5620:12:21"
                }
              ]
            },
            "documentation": {
              "id": 3594,
              "nodeType": "StructuredDocumentation",
              "src": "5092:342:21",
              "text": "  @dev check if `_user` is a TREX owner of `_token`\n  @param _token the address token to check\n  @param _user the wallet address\n  if `_token` is a TREX token this function will check if `_user` is registered as an owner on it\n  return `true` if `_user` is owner of `_token`, return `false` otherwise"
            },
            "functionSelector": "afc99141",
            "id": 3619,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isTREXOwner",
            "nameLocation": "5448:11:21",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3599,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3596,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "5468:6:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3619,
                  "src": "5460:14:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3595,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5460:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3598,
                  "mutability": "mutable",
                  "name": "_user",
                  "nameLocation": "5484:5:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3619,
                  "src": "5476:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3597,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5476:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5459:31:21"
            },
            "returnParameters": {
              "id": 3602,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3601,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3619,
                  "src": "5512:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3600,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5512:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5511:6:21"
            },
            "scope": 4550,
            "src": "5439:200:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3656,
              "nodeType": "Block",
              "src": "6617:158:21",
              "statements": [
                {
                  "assignments": [
                    3640
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3640,
                      "mutability": "mutable",
                      "name": "transferID",
                      "nameLocation": "6635:10:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 3656,
                      "src": "6627:18:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3639,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6627:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3653,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 3644,
                            "name": "_nonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3622,
                            "src": "6669:6:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 3645,
                            "name": "_maker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3624,
                            "src": "6677:6:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 3646,
                            "name": "_token1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3626,
                            "src": "6685:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 3647,
                            "name": "_token1Amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3628,
                            "src": "6694:13:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 3648,
                            "name": "_taker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3630,
                            "src": "6709:6:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 3649,
                            "name": "_token2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3632,
                            "src": "6717:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 3650,
                            "name": "_token2Amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3634,
                            "src": "6726:13:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 3642,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "6658:3:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "6662:6:21",
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "src": "6658:10:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3651,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6658:82:21",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3641,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4294967288,
                      "src": "6648:9:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3652,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6648:93:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6627:114:21"
                },
                {
                  "expression": {
                    "id": 3654,
                    "name": "transferID",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3640,
                    "src": "6758:10:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3638,
                  "id": 3655,
                  "nodeType": "Return",
                  "src": "6751:17:21"
                }
              ]
            },
            "documentation": {
              "id": 3620,
              "nodeType": "StructuredDocumentation",
              "src": "5645:718:21",
              "text": "  @dev calculates the transferID depending on DVD transfer parameters\n  @param _nonce the nonce of the transfer on the smart contract\n  @param _maker the address of the DVD transfer maker (initiator of the transfer)\n  @param _token1 the address of the token that the maker is providing\n  @param _token1Amount the amount of tokens `_token1` provided by the maker\n  @param _taker the address of the DVD transfer taker (executor of the transfer)\n  @param _token2 the address of the token that the taker is providing\n  @param _token2Amount the amount of tokens `_token2` provided by the taker\n  return the identifier of the DVD transfer as a byte signature"
            },
            "functionSelector": "4dc55ea3",
            "id": 3657,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateTransferID",
            "nameLocation": "6377:19:21",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3635,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3622,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nameLocation": "6415:6:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3657,
                  "src": "6407:14:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3621,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6407:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3624,
                  "mutability": "mutable",
                  "name": "_maker",
                  "nameLocation": "6439:6:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3657,
                  "src": "6431:14:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3623,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6431:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3626,
                  "mutability": "mutable",
                  "name": "_token1",
                  "nameLocation": "6463:7:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3657,
                  "src": "6455:15:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3625,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6455:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3628,
                  "mutability": "mutable",
                  "name": "_token1Amount",
                  "nameLocation": "6488:13:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3657,
                  "src": "6480:21:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3627,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6480:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3630,
                  "mutability": "mutable",
                  "name": "_taker",
                  "nameLocation": "6519:6:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3657,
                  "src": "6511:14:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3629,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6511:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3632,
                  "mutability": "mutable",
                  "name": "_token2",
                  "nameLocation": "6543:7:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3657,
                  "src": "6535:15:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3631,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6535:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3634,
                  "mutability": "mutable",
                  "name": "_token2Amount",
                  "nameLocation": "6568:13:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3657,
                  "src": "6560:21:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3633,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6560:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6397:190:21"
            },
            "returnParameters": {
              "id": 3638,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3637,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3657,
                  "src": "6609:7:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3636,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6609:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6608:9:21"
            },
            "scope": 4550,
            "src": "6368:407:21",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3892,
              "nodeType": "Block",
              "src": "8369:1608:21",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 3692,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3686,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 3680,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 3676,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "8387:3:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3677,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8391:6:21",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "8387:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 3678,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2433,
                                "src": "8401:5:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 3679,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8401:7:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "8387:21:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 3682,
                                "name": "_token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3660,
                                "src": "8424:7:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "expression": {
                                  "id": 3683,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967281,
                                  "src": "8433:3:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3684,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "8437:6:21",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "8433:10:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3681,
                              "name": "isTREXOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3619,
                              "src": "8412:11:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                                "typeString": "function (address,address) view returns (bool)"
                              }
                            },
                            "id": 3685,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8412:32:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "8387:57:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 3688,
                              "name": "_token2",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3662,
                              "src": "8460:7:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 3689,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "8469:3:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3690,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8473:6:21",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "8469:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3687,
                            "name": "isTREXOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3619,
                            "src": "8448:11:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address,address) view returns (bool)"
                            }
                          },
                          "id": 3691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8448:32:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "8387:93:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f776e61626c653a206f6e6c79206f776e65722063616e2063616c6c",
                        "id": 3693,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8482:30:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_587366e5609736c4d0389b2b1546c480d1845c26fb4acbd2d541a51da205032b",
                          "typeString": "literal_string \"Ownable: only owner can call\""
                        },
                        "value": "Ownable: only owner can call"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_587366e5609736c4d0389b2b1546c480d1845c26fb4acbd2d541a51da205032b",
                          "typeString": "literal_string \"Ownable: only owner can call\""
                        }
                      ],
                      "id": 3675,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "8379:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3694,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8379:134:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3695,
                  "nodeType": "ExpressionStatement",
                  "src": "8379:134:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 3711,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3703,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3698,
                                    "name": "_token1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3660,
                                    "src": "8538:7:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3697,
                                  "name": "IERC20",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3317,
                                  "src": "8531:6:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC20_$3317_$",
                                    "typeString": "type(contract IERC20)"
                                  }
                                },
                                "id": 3699,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8531:15:21",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$3317",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 3700,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8547:11:21",
                              "memberName": "totalSupply",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3266,
                              "src": "8531:27:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 3701,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8531:29:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3702,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8564:1:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8531:34:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3705,
                                    "name": "_token2",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3662,
                                    "src": "8576:7:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3704,
                                  "name": "IERC20",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3317,
                                  "src": "8569:6:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC20_$3317_$",
                                    "typeString": "type(contract IERC20)"
                                  }
                                },
                                "id": 3706,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8569:15:21",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$3317",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 3707,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8585:11:21",
                              "memberName": "totalSupply",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3266,
                              "src": "8569:27:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 3708,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8569:29:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3709,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8602:1:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8569:34:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "8531:72:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "696e76616c69642061646472657373203a2061646472657373206973206e6f7420616e204552433230",
                        "id": 3712,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8605:43:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ca5de360fb9881825787bda4343576656720ec98cf6ccf4d822e67e57bab6bd0",
                          "typeString": "literal_string \"invalid address : address is not an ERC20\""
                        },
                        "value": "invalid address : address is not an ERC20"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ca5de360fb9881825787bda4343576656720ec98cf6ccf4d822e67e57bab6bd0",
                          "typeString": "literal_string \"invalid address : address is not an ERC20\""
                        }
                      ],
                      "id": 3696,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "8523:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8523:126:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3714,
                  "nodeType": "ExpressionStatement",
                  "src": "8523:126:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 3742,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 3734,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 3730,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 3724,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3720,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 3716,
                                    "name": "_fee1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3664,
                                    "src": "8667:5:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<=",
                                  "rightExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3719,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "3130",
                                      "id": 3717,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8676:2:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10_by_1",
                                        "typeString": "int_const 10"
                                      },
                                      "value": "10"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "**",
                                    "rightExpression": {
                                      "id": 3718,
                                      "name": "_feeBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3668,
                                      "src": "8680:8:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "8676:12:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "8667:21:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3723,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 3721,
                                    "name": "_fee1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3664,
                                    "src": "8692:5:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">=",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 3722,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8701:1:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "8692:10:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "8667:35:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3729,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3725,
                                  "name": "_fee2",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3666,
                                  "src": "8706:5:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3728,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "hexValue": "3130",
                                    "id": 3726,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8715:2:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_10_by_1",
                                      "typeString": "int_const 10"
                                    },
                                    "value": "10"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "**",
                                  "rightExpression": {
                                    "id": 3727,
                                    "name": "_feeBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3668,
                                    "src": "8719:8:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "8715:12:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "8706:21:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "8667:60:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3733,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3731,
                                "name": "_fee2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3666,
                                "src": "8731:5:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 3732,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8740:1:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "8731:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "8667:74:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3737,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3735,
                              "name": "_feeBase",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3668,
                              "src": "8745:8:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<=",
                            "rightExpression": {
                              "hexValue": "35",
                              "id": 3736,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8757:1:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_5_by_1",
                                "typeString": "int_const 5"
                              },
                              "value": "5"
                            },
                            "src": "8745:13:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "8667:91:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3739,
                            "name": "_feeBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3668,
                            "src": "8762:8:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "hexValue": "32",
                            "id": 3740,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8774:1:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "8762:13:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "8667:108:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "696e76616c6964206665652073657474696e6773",
                        "id": 3743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8777:22:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1e76e8a5c8c4e84df0c2d9573e217397959e091b7b1020e2a7da9e7c01bd63ec",
                          "typeString": "literal_string \"invalid fee settings\""
                        },
                        "value": "invalid fee settings"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1e76e8a5c8c4e84df0c2d9573e217397959e091b7b1020e2a7da9e7c01bd63ec",
                          "typeString": "literal_string \"invalid fee settings\""
                        }
                      ],
                      "id": 3715,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "8659:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8659:141:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3745,
                  "nodeType": "ExpressionStatement",
                  "src": "8659:141:21"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3746,
                      "name": "_fee1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3664,
                      "src": "8814:5:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 3747,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8822:1:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8814:9:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3760,
                  "nodeType": "IfStatement",
                  "src": "8810:113:21",
                  "trueBody": {
                    "id": 3759,
                    "nodeType": "Block",
                    "src": "8825:98:21",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 3755,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3750,
                                "name": "_fee1Wallet",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3670,
                                "src": "8847:11:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 3753,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8870:1:21",
                                    "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": 3752,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8862:7:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 3751,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8862:7:21",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3754,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8862:10:21",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "8847:25:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "6665652077616c6c657420312063616e6e6f74206265207a65726f2061646472657373",
                              "id": 3756,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8874:37:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3aa374a110a2b6ab64fed97872087a781d84cacd0d8aea371ef8fc6a2ca47912",
                                "typeString": "literal_string \"fee wallet 1 cannot be zero address\""
                              },
                              "value": "fee wallet 1 cannot be zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3aa374a110a2b6ab64fed97872087a781d84cacd0d8aea371ef8fc6a2ca47912",
                                "typeString": "literal_string \"fee wallet 1 cannot be zero address\""
                              }
                            ],
                            "id": 3749,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "8839:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3757,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8839:73:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3758,
                        "nodeType": "ExpressionStatement",
                        "src": "8839:73:21"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3763,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3761,
                      "name": "_fee2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3666,
                      "src": "8936:5:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 3762,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8944:1:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8936:9:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3775,
                  "nodeType": "IfStatement",
                  "src": "8932:113:21",
                  "trueBody": {
                    "id": 3774,
                    "nodeType": "Block",
                    "src": "8947:98:21",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 3770,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3765,
                                "name": "_fee2Wallet",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3672,
                                "src": "8969:11:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 3768,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8992:1:21",
                                    "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": 3767,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8984:7:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 3766,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8984:7:21",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3769,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8984:10:21",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "8969:25:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "6665652077616c6c657420322063616e6e6f74206265207a65726f2061646472657373",
                              "id": 3771,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8996:37:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_809b46d8d5dad5840c87a4063fc4786e9d03f67a62ff6cbff5c0e693f301d569",
                                "typeString": "literal_string \"fee wallet 2 cannot be zero address\""
                              },
                              "value": "fee wallet 2 cannot be zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_809b46d8d5dad5840c87a4063fc4786e9d03f67a62ff6cbff5c0e693f301d569",
                                "typeString": "literal_string \"fee wallet 2 cannot be zero address\""
                              }
                            ],
                            "id": 3764,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "8961:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3772,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8961:73:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3773,
                        "nodeType": "ExpressionStatement",
                        "src": "8961:73:21"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3777
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3777,
                      "mutability": "mutable",
                      "name": "_parity",
                      "nameLocation": "9062:7:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 3892,
                      "src": "9054:15:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3776,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9054:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3782,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 3779,
                        "name": "_token1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3660,
                        "src": "9088:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3780,
                        "name": "_token2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3662,
                        "src": "9097:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3778,
                      "name": "calculateParity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3528,
                      "src": "9072:15:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) pure returns (bytes32)"
                      }
                    },
                    "id": 3781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9072:33:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9054:51:21"
                },
                {
                  "assignments": [
                    3785
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3785,
                      "mutability": "mutable",
                      "name": "parityFee",
                      "nameLocation": "9126:9:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 3892,
                      "src": "9115:20:21",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                        "typeString": "struct DVDTransferManager.Fee"
                      },
                      "typeName": {
                        "id": 3784,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 3783,
                          "name": "Fee",
                          "nameLocations": [
                            "9115:3:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3471,
                          "src": "9115:3:21"
                        },
                        "referencedDeclaration": 3471,
                        "src": "9115:3:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fee_$3471_storage_ptr",
                          "typeString": "struct DVDTransferManager.Fee"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3786,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9115:20:21"
                },
                {
                  "expression": {
                    "id": 3791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3787,
                        "name": "parityFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3785,
                        "src": "9145:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                          "typeString": "struct DVDTransferManager.Fee memory"
                        }
                      },
                      "id": 3789,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "9155:9:21",
                      "memberName": "token1Fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3462,
                      "src": "9145:19:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3790,
                      "name": "_fee1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3664,
                      "src": "9167:5:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9145:27:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3792,
                  "nodeType": "ExpressionStatement",
                  "src": "9145:27:21"
                },
                {
                  "expression": {
                    "id": 3797,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3793,
                        "name": "parityFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3785,
                        "src": "9182:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                          "typeString": "struct DVDTransferManager.Fee memory"
                        }
                      },
                      "id": 3795,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "9192:9:21",
                      "memberName": "token2Fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3464,
                      "src": "9182:19:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3796,
                      "name": "_fee2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3666,
                      "src": "9204:5:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9182:27:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3798,
                  "nodeType": "ExpressionStatement",
                  "src": "9182:27:21"
                },
                {
                  "expression": {
                    "id": 3803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3799,
                        "name": "parityFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3785,
                        "src": "9219:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                          "typeString": "struct DVDTransferManager.Fee memory"
                        }
                      },
                      "id": 3801,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "9229:7:21",
                      "memberName": "feeBase",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3466,
                      "src": "9219:17:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3802,
                      "name": "_feeBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3668,
                      "src": "9239:8:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9219:28:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3804,
                  "nodeType": "ExpressionStatement",
                  "src": "9219:28:21"
                },
                {
                  "expression": {
                    "id": 3809,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3805,
                        "name": "parityFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3785,
                        "src": "9257:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                          "typeString": "struct DVDTransferManager.Fee memory"
                        }
                      },
                      "id": 3807,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "9267:10:21",
                      "memberName": "fee1Wallet",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3468,
                      "src": "9257:20:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3808,
                      "name": "_fee1Wallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3670,
                      "src": "9280:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9257:34:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3810,
                  "nodeType": "ExpressionStatement",
                  "src": "9257:34:21"
                },
                {
                  "expression": {
                    "id": 3815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3811,
                        "name": "parityFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3785,
                        "src": "9301:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                          "typeString": "struct DVDTransferManager.Fee memory"
                        }
                      },
                      "id": 3813,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "9311:10:21",
                      "memberName": "fee2Wallet",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3470,
                      "src": "9301:20:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3814,
                      "name": "_fee2Wallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3672,
                      "src": "9324:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9301:34:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3816,
                  "nodeType": "ExpressionStatement",
                  "src": "9301:34:21"
                },
                {
                  "expression": {
                    "id": 3821,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 3817,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3485,
                        "src": "9345:3:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Fee_$3471_storage_$",
                          "typeString": "mapping(bytes32 => struct DVDTransferManager.Fee storage ref)"
                        }
                      },
                      "id": 3819,
                      "indexExpression": {
                        "id": 3818,
                        "name": "_parity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3777,
                        "src": "9349:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9345:12:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fee_$3471_storage",
                        "typeString": "struct DVDTransferManager.Fee storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3820,
                      "name": "parityFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3785,
                      "src": "9360:9:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                        "typeString": "struct DVDTransferManager.Fee memory"
                      }
                    },
                    "src": "9345:24:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fee_$3471_storage",
                      "typeString": "struct DVDTransferManager.Fee storage ref"
                    }
                  },
                  "id": 3822,
                  "nodeType": "ExpressionStatement",
                  "src": "9345:24:21"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 3824,
                        "name": "_parity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3777,
                        "src": "9396:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3825,
                        "name": "_token1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3660,
                        "src": "9405:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3826,
                        "name": "_token2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3662,
                        "src": "9414:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3827,
                        "name": "_fee1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3664,
                        "src": "9423:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 3828,
                        "name": "_fee2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3666,
                        "src": "9430:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 3829,
                        "name": "_feeBase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3668,
                        "src": "9437:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 3830,
                        "name": "_fee1Wallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3670,
                        "src": "9447:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3831,
                        "name": "_fee2Wallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3672,
                        "src": "9460:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3823,
                      "name": "FeeModified",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3453,
                      "src": "9384:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address,address,uint256,uint256,uint256,address,address)"
                      }
                    },
                    "id": 3832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9384:88:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3833,
                  "nodeType": "EmitStatement",
                  "src": "9379:93:21"
                },
                {
                  "assignments": [
                    3835
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3835,
                      "mutability": "mutable",
                      "name": "_reflectParity",
                      "nameLocation": "9490:14:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 3892,
                      "src": "9482:22:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3834,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9482:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3840,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 3837,
                        "name": "_token2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3662,
                        "src": "9523:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3838,
                        "name": "_token1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3660,
                        "src": "9532:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3836,
                      "name": "calculateParity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3528,
                      "src": "9507:15:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) pure returns (bytes32)"
                      }
                    },
                    "id": 3839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9507:33:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9482:58:21"
                },
                {
                  "assignments": [
                    3843
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3843,
                      "mutability": "mutable",
                      "name": "reflectParityFee",
                      "nameLocation": "9561:16:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 3892,
                      "src": "9550:27:21",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                        "typeString": "struct DVDTransferManager.Fee"
                      },
                      "typeName": {
                        "id": 3842,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 3841,
                          "name": "Fee",
                          "nameLocations": [
                            "9550:3:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3471,
                          "src": "9550:3:21"
                        },
                        "referencedDeclaration": 3471,
                        "src": "9550:3:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fee_$3471_storage_ptr",
                          "typeString": "struct DVDTransferManager.Fee"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3844,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9550:27:21"
                },
                {
                  "expression": {
                    "id": 3849,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3845,
                        "name": "reflectParityFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3843,
                        "src": "9587:16:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                          "typeString": "struct DVDTransferManager.Fee memory"
                        }
                      },
                      "id": 3847,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "9604:9:21",
                      "memberName": "token1Fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3462,
                      "src": "9587:26:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3848,
                      "name": "_fee2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3666,
                      "src": "9616:5:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9587:34:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3850,
                  "nodeType": "ExpressionStatement",
                  "src": "9587:34:21"
                },
                {
                  "expression": {
                    "id": 3855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3851,
                        "name": "reflectParityFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3843,
                        "src": "9631:16:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                          "typeString": "struct DVDTransferManager.Fee memory"
                        }
                      },
                      "id": 3853,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "9648:9:21",
                      "memberName": "token2Fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3464,
                      "src": "9631:26:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3854,
                      "name": "_fee1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3664,
                      "src": "9660:5:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9631:34:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3856,
                  "nodeType": "ExpressionStatement",
                  "src": "9631:34:21"
                },
                {
                  "expression": {
                    "id": 3861,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3857,
                        "name": "reflectParityFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3843,
                        "src": "9675:16:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                          "typeString": "struct DVDTransferManager.Fee memory"
                        }
                      },
                      "id": 3859,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "9692:7:21",
                      "memberName": "feeBase",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3466,
                      "src": "9675:24:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3860,
                      "name": "_feeBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3668,
                      "src": "9702:8:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9675:35:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3862,
                  "nodeType": "ExpressionStatement",
                  "src": "9675:35:21"
                },
                {
                  "expression": {
                    "id": 3867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3863,
                        "name": "reflectParityFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3843,
                        "src": "9720:16:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                          "typeString": "struct DVDTransferManager.Fee memory"
                        }
                      },
                      "id": 3865,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "9737:10:21",
                      "memberName": "fee1Wallet",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3468,
                      "src": "9720:27:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3866,
                      "name": "_fee2Wallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3672,
                      "src": "9750:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9720:41:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3868,
                  "nodeType": "ExpressionStatement",
                  "src": "9720:41:21"
                },
                {
                  "expression": {
                    "id": 3873,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3869,
                        "name": "reflectParityFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3843,
                        "src": "9771:16:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                          "typeString": "struct DVDTransferManager.Fee memory"
                        }
                      },
                      "id": 3871,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "9788:10:21",
                      "memberName": "fee2Wallet",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3470,
                      "src": "9771:27:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3872,
                      "name": "_fee1Wallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3670,
                      "src": "9801:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9771:41:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3874,
                  "nodeType": "ExpressionStatement",
                  "src": "9771:41:21"
                },
                {
                  "expression": {
                    "id": 3879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 3875,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3485,
                        "src": "9822:3:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Fee_$3471_storage_$",
                          "typeString": "mapping(bytes32 => struct DVDTransferManager.Fee storage ref)"
                        }
                      },
                      "id": 3877,
                      "indexExpression": {
                        "id": 3876,
                        "name": "_reflectParity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3835,
                        "src": "9826:14:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9822:19:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fee_$3471_storage",
                        "typeString": "struct DVDTransferManager.Fee storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3878,
                      "name": "reflectParityFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3843,
                      "src": "9844:16:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                        "typeString": "struct DVDTransferManager.Fee memory"
                      }
                    },
                    "src": "9822:38:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fee_$3471_storage",
                      "typeString": "struct DVDTransferManager.Fee storage ref"
                    }
                  },
                  "id": 3880,
                  "nodeType": "ExpressionStatement",
                  "src": "9822:38:21"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 3882,
                        "name": "_reflectParity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3835,
                        "src": "9887:14:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3883,
                        "name": "_token2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3662,
                        "src": "9903:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3884,
                        "name": "_token1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3660,
                        "src": "9912:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3885,
                        "name": "_fee2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3666,
                        "src": "9921:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 3886,
                        "name": "_fee1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3664,
                        "src": "9928:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 3887,
                        "name": "_feeBase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3668,
                        "src": "9935:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 3888,
                        "name": "_fee2Wallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3672,
                        "src": "9945:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3889,
                        "name": "_fee1Wallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3670,
                        "src": "9958:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3881,
                      "name": "FeeModified",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3453,
                      "src": "9875:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address,address,uint256,uint256,uint256,address,address)"
                      }
                    },
                    "id": 3890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9875:95:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3891,
                  "nodeType": "EmitStatement",
                  "src": "9870:100:21"
                }
              ]
            },
            "documentation": {
              "id": 3658,
              "nodeType": "StructuredDocumentation",
              "src": "6781:1440:21",
              "text": "  @dev modify the fees applied to a parity of tokens (tokens can be TREX or ERC20)\n  @param _token1 the address of the base token for the parity `_token1`/`_token2`\n  @param _token2 the address of the counterpart token for the parity `_token1`/`_token2`\n  @param _fee1 the fee to apply on `_token1` leg of the DVD transfer per 10^`_feeBase`\n  @param _fee2 the fee to apply on `_token2` leg of the DVD transfer per 10^`_feeBase`\n  @param _feeBase the precision of the fee setting, e.g. if `_feeBase` == 2 then `_fee1` and `_fee2` are in % (fee/10^`_feeBase`)\n  @param _fee1Wallet the wallet address receiving fees applied on `_token1`\n  @param _fee2Wallet the wallet address receiving fees applied on `_token2`\n  `_token1` and `_token2` need to be ERC20 or TREX tokens addresses, otherwise the transaction will fail\n  `msg.sender` has to be owner of the DVD contract or the owner of the TREX token involved in the parity (if any)\n  requires fees to be lower than 100%\n  requires `_feeBase` to be higher or equal to 2 (precision 10^2)\n  requires `_feeBase` to be lower or equal to 5 (precision 10^5) to avoid overflows\n  requires `_fee1Wallet` & `_fee2Wallet` to be non empty addresses if `_fee1` & `_fee2` are respectively set\n  note that if fees are not set for a parity the default fee is basically 0%\n  emits a `FeeModified` event"
            },
            "functionSelector": "e722e603",
            "id": 3893,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "modifyFee",
            "nameLocation": "8235:9:21",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3673,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3660,
                  "mutability": "mutable",
                  "name": "_token1",
                  "nameLocation": "8253:7:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3893,
                  "src": "8245:15:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3659,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8245:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3662,
                  "mutability": "mutable",
                  "name": "_token2",
                  "nameLocation": "8270:7:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3893,
                  "src": "8262:15:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3661,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8262:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3664,
                  "mutability": "mutable",
                  "name": "_fee1",
                  "nameLocation": "8284:5:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3893,
                  "src": "8279:10:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3663,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "8279:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3666,
                  "mutability": "mutable",
                  "name": "_fee2",
                  "nameLocation": "8296:5:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3893,
                  "src": "8291:10:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3665,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "8291:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3668,
                  "mutability": "mutable",
                  "name": "_feeBase",
                  "nameLocation": "8308:8:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3893,
                  "src": "8303:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3667,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "8303:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3670,
                  "mutability": "mutable",
                  "name": "_fee1Wallet",
                  "nameLocation": "8326:11:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3893,
                  "src": "8318:19:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3669,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8318:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3672,
                  "mutability": "mutable",
                  "name": "_fee2Wallet",
                  "nameLocation": "8347:11:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 3893,
                  "src": "8339:19:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3671,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8339:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8244:115:21"
            },
            "returnParameters": {
              "id": 3674,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8369:0:21"
            },
            "scope": 4550,
            "src": "8226:1751:21",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4052,
              "nodeType": "Block",
              "src": "11179:1121:21",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3916,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 3912,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "11223:3:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3913,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "11227:6:21",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "11223:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3909,
                                  "name": "_token1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3896,
                                  "src": "11204:7:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3908,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3317,
                                "src": "11197:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$3317_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 3910,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11197:15:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3317",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 3911,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "11213:9:21",
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3274,
                            "src": "11197:25:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 3914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11197:37:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 3915,
                          "name": "_token1Amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3898,
                          "src": "11238:13:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11197:54:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4e6f7420656e6f75676820746f6b656e7320696e2062616c616e6365",
                        "id": 3917,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11253:30:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_17bcb2fc24178a4e6966e21e43b451392b2fa265bfdbc099cf563d3a8e64b7aa",
                          "typeString": "literal_string \"Not enough tokens in balance\""
                        },
                        "value": "Not enough tokens in balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_17bcb2fc24178a4e6966e21e43b451392b2fa265bfdbc099cf563d3a8e64b7aa",
                          "typeString": "literal_string \"Not enough tokens in balance\""
                        }
                      ],
                      "id": 3907,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "11189:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11189:95:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3919,
                  "nodeType": "ExpressionStatement",
                  "src": "11189:95:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 3925,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "11328:3:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3926,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "11332:6:21",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "11328:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 3929,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967268,
                                  "src": "11348:4:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_DVDTransferManager_$4550",
                                    "typeString": "contract DVDTransferManager"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_DVDTransferManager_$4550",
                                    "typeString": "contract DVDTransferManager"
                                  }
                                ],
                                "id": 3928,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11340:7:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 3927,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11340:7:21",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3930,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11340:13:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3922,
                                  "name": "_token1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3896,
                                  "src": "11309:7:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3921,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3317,
                                "src": "11302:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$3317_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 3923,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11302:15:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3317",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 3924,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "11318:9:21",
                            "memberName": "allowance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3294,
                            "src": "11302:25:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 3931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11302:52:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 3932,
                          "name": "_token1Amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3898,
                          "src": "11358:13:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11302:69:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6e6f7420656e6f75676820616c6c6f77616e636520746f20696e697469617465207472616e73666572",
                        "id": 3934,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11373:43:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ad4c587f936990664e83aeaad85ea6b997b024dea1d9933851ff370bef2dacce",
                          "typeString": "literal_string \"not enough allowance to initiate transfer\""
                        },
                        "value": "not enough allowance to initiate transfer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ad4c587f936990664e83aeaad85ea6b997b024dea1d9933851ff370bef2dacce",
                          "typeString": "literal_string \"not enough allowance to initiate transfer\""
                        }
                      ],
                      "id": 3920,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "11294:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11294:123:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3936,
                  "nodeType": "ExpressionStatement",
                  "src": "11294:123:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3943,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 3938,
                          "name": "_counterpart",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3900,
                          "src": "11436:12:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 3941,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11460:1:21",
                              "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": 3940,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11452:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 3939,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "11452:7:21",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3942,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11452:10:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "11436:26:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "636f756e746572706172742063616e6e6f74206265206e756c6c",
                        "id": 3944,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11464:28:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_048d905b72852d1ae7b94b1b8f6cf3f112436d634ae85e61de0e79663c326aaf",
                          "typeString": "literal_string \"counterpart cannot be null\""
                        },
                        "value": "counterpart cannot be null"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_048d905b72852d1ae7b94b1b8f6cf3f112436d634ae85e61de0e79663c326aaf",
                          "typeString": "literal_string \"counterpart cannot be null\""
                        }
                      ],
                      "id": 3937,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "11427:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3945,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11427:66:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3946,
                  "nodeType": "ExpressionStatement",
                  "src": "11427:66:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3954,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3949,
                                  "name": "_token2",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3902,
                                  "src": "11518:7:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3948,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3317,
                                "src": "11511:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$3317_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 3950,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11511:15:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3317",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 3951,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "11527:11:21",
                            "memberName": "totalSupply",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3266,
                            "src": "11511:27:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 3952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11511:29:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 3953,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11544:1:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11511:34:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "696e76616c69642061646472657373203a2061646472657373206973206e6f7420616e204552433230",
                        "id": 3955,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11547:43:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ca5de360fb9881825787bda4343576656720ec98cf6ccf4d822e67e57bab6bd0",
                          "typeString": "literal_string \"invalid address : address is not an ERC20\""
                        },
                        "value": "invalid address : address is not an ERC20"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ca5de360fb9881825787bda4343576656720ec98cf6ccf4d822e67e57bab6bd0",
                          "typeString": "literal_string \"invalid address : address is not an ERC20\""
                        }
                      ],
                      "id": 3947,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "11503:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11503:88:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3957,
                  "nodeType": "ExpressionStatement",
                  "src": "11503:88:21"
                },
                {
                  "assignments": [
                    3960
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3960,
                      "mutability": "mutable",
                      "name": "token1",
                      "nameLocation": "11617:6:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4052,
                      "src": "11601:22:21",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                        "typeString": "struct DVDTransferManager.Delivery"
                      },
                      "typeName": {
                        "id": 3959,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 3958,
                          "name": "Delivery",
                          "nameLocations": [
                            "11601:8:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3460,
                          "src": "11601:8:21"
                        },
                        "referencedDeclaration": 3460,
                        "src": "11601:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Delivery_$3460_storage_ptr",
                          "typeString": "struct DVDTransferManager.Delivery"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3961,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11601:22:21"
                },
                {
                  "expression": {
                    "id": 3967,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3962,
                        "name": "token1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3960,
                        "src": "11633:6:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                          "typeString": "struct DVDTransferManager.Delivery memory"
                        }
                      },
                      "id": 3964,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "11640:11:21",
                      "memberName": "counterpart",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3455,
                      "src": "11633:18:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 3965,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "11654:3:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 3966,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11658:6:21",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "11654:10:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11633:31:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3968,
                  "nodeType": "ExpressionStatement",
                  "src": "11633:31:21"
                },
                {
                  "expression": {
                    "id": 3973,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3969,
                        "name": "token1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3960,
                        "src": "11674:6:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                          "typeString": "struct DVDTransferManager.Delivery memory"
                        }
                      },
                      "id": 3971,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "11681:5:21",
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3457,
                      "src": "11674:12:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3972,
                      "name": "_token1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3896,
                      "src": "11689:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11674:22:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3974,
                  "nodeType": "ExpressionStatement",
                  "src": "11674:22:21"
                },
                {
                  "expression": {
                    "id": 3979,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3975,
                        "name": "token1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3960,
                        "src": "11706:6:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                          "typeString": "struct DVDTransferManager.Delivery memory"
                        }
                      },
                      "id": 3977,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "11713:6:21",
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3459,
                      "src": "11706:13:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3978,
                      "name": "_token1Amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3898,
                      "src": "11722:13:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11706:29:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3980,
                  "nodeType": "ExpressionStatement",
                  "src": "11706:29:21"
                },
                {
                  "assignments": [
                    3983
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3983,
                      "mutability": "mutable",
                      "name": "token2",
                      "nameLocation": "11761:6:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4052,
                      "src": "11745:22:21",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                        "typeString": "struct DVDTransferManager.Delivery"
                      },
                      "typeName": {
                        "id": 3982,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 3981,
                          "name": "Delivery",
                          "nameLocations": [
                            "11745:8:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3460,
                          "src": "11745:8:21"
                        },
                        "referencedDeclaration": 3460,
                        "src": "11745:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Delivery_$3460_storage_ptr",
                          "typeString": "struct DVDTransferManager.Delivery"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3984,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11745:22:21"
                },
                {
                  "expression": {
                    "id": 3989,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3985,
                        "name": "token2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3983,
                        "src": "11777:6:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                          "typeString": "struct DVDTransferManager.Delivery memory"
                        }
                      },
                      "id": 3987,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "11784:11:21",
                      "memberName": "counterpart",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3455,
                      "src": "11777:18:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3988,
                      "name": "_counterpart",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3900,
                      "src": "11798:12:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11777:33:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3990,
                  "nodeType": "ExpressionStatement",
                  "src": "11777:33:21"
                },
                {
                  "expression": {
                    "id": 3995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3991,
                        "name": "token2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3983,
                        "src": "11820:6:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                          "typeString": "struct DVDTransferManager.Delivery memory"
                        }
                      },
                      "id": 3993,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "11827:5:21",
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3457,
                      "src": "11820:12:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3994,
                      "name": "_token2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3902,
                      "src": "11835:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11820:22:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3996,
                  "nodeType": "ExpressionStatement",
                  "src": "11820:22:21"
                },
                {
                  "expression": {
                    "id": 4001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3997,
                        "name": "token2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3983,
                        "src": "11852:6:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                          "typeString": "struct DVDTransferManager.Delivery memory"
                        }
                      },
                      "id": 3999,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "11859:6:21",
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3459,
                      "src": "11852:13:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4000,
                      "name": "_token2Amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3904,
                      "src": "11868:13:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11852:29:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4002,
                  "nodeType": "ExpressionStatement",
                  "src": "11852:29:21"
                },
                {
                  "assignments": [
                    4004
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4004,
                      "mutability": "mutable",
                      "name": "transferID",
                      "nameLocation": "11899:10:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4052,
                      "src": "11891:18:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4003,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11891:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4020,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 4006,
                        "name": "txNonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3497,
                        "src": "11932:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 4007,
                          "name": "token1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3960,
                          "src": "11941:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4008,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "11948:11:21",
                        "memberName": "counterpart",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3455,
                        "src": "11941:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 4009,
                          "name": "token1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3960,
                          "src": "11961:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4010,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "11968:5:21",
                        "memberName": "token",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3457,
                        "src": "11961:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 4011,
                          "name": "token1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3960,
                          "src": "11975:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4012,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "11982:6:21",
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3459,
                        "src": "11975:13:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 4013,
                          "name": "token2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3983,
                          "src": "11990:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4014,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "11997:11:21",
                        "memberName": "counterpart",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3455,
                        "src": "11990:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 4015,
                          "name": "token2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3983,
                          "src": "12010:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4016,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "12017:5:21",
                        "memberName": "token",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3457,
                        "src": "12010:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 4017,
                          "name": "token2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3983,
                          "src": "12024:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4018,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "12031:6:21",
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3459,
                        "src": "12024:13:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4005,
                      "name": "calculateTransferID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3657,
                      "src": "11912:19:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$_t_bytes32_$",
                        "typeString": "function (uint256,address,address,uint256,address,address,uint256) pure returns (bytes32)"
                      }
                    },
                    "id": 4019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11912:126:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11891:147:21"
                },
                {
                  "expression": {
                    "id": 4025,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4021,
                        "name": "token1ToDeliver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3490,
                        "src": "12048:15:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
                          "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery storage ref)"
                        }
                      },
                      "id": 4023,
                      "indexExpression": {
                        "id": 4022,
                        "name": "transferID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4004,
                        "src": "12064:10:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "12048:27:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_storage",
                        "typeString": "struct DVDTransferManager.Delivery storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4024,
                      "name": "token1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3960,
                      "src": "12078:6:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                        "typeString": "struct DVDTransferManager.Delivery memory"
                      }
                    },
                    "src": "12048:36:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Delivery_$3460_storage",
                      "typeString": "struct DVDTransferManager.Delivery storage ref"
                    }
                  },
                  "id": 4026,
                  "nodeType": "ExpressionStatement",
                  "src": "12048:36:21"
                },
                {
                  "expression": {
                    "id": 4031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4027,
                        "name": "token2ToDeliver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3495,
                        "src": "12094:15:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
                          "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery storage ref)"
                        }
                      },
                      "id": 4029,
                      "indexExpression": {
                        "id": 4028,
                        "name": "transferID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4004,
                        "src": "12110:10:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "12094:27:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_storage",
                        "typeString": "struct DVDTransferManager.Delivery storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4030,
                      "name": "token2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3983,
                      "src": "12124:6:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                        "typeString": "struct DVDTransferManager.Delivery memory"
                      }
                    },
                    "src": "12094:36:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Delivery_$3460_storage",
                      "typeString": "struct DVDTransferManager.Delivery storage ref"
                    }
                  },
                  "id": 4032,
                  "nodeType": "ExpressionStatement",
                  "src": "12094:36:21"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 4034,
                        "name": "transferID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4004,
                        "src": "12166:10:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 4035,
                          "name": "token1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3960,
                          "src": "12177:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4036,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "12184:11:21",
                        "memberName": "counterpart",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3455,
                        "src": "12177:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 4037,
                          "name": "token1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3960,
                          "src": "12197:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4038,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "12204:5:21",
                        "memberName": "token",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3457,
                        "src": "12197:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 4039,
                          "name": "token1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3960,
                          "src": "12211:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4040,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "12218:6:21",
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3459,
                        "src": "12211:13:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 4041,
                          "name": "token2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3983,
                          "src": "12226:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4042,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "12233:11:21",
                        "memberName": "counterpart",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3455,
                        "src": "12226:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 4043,
                          "name": "token2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3983,
                          "src": "12246:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4044,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "12253:5:21",
                        "memberName": "token",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3457,
                        "src": "12246:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 4045,
                          "name": "token2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3983,
                          "src": "12260:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4046,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "12267:6:21",
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3459,
                        "src": "12260:13:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4033,
                      "name": "DVDTransferInitiated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3424,
                      "src": "12145:20:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,address,address,uint256,address,address,uint256)"
                      }
                    },
                    "id": 4047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12145:129:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4048,
                  "nodeType": "EmitStatement",
                  "src": "12140:134:21"
                },
                {
                  "expression": {
                    "id": 4050,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "12284:9:21",
                    "subExpression": {
                      "id": 4049,
                      "name": "txNonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3497,
                      "src": "12284:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4051,
                  "nodeType": "ExpressionStatement",
                  "src": "12284:9:21"
                }
              ]
            },
            "documentation": {
              "id": 3894,
              "nodeType": "StructuredDocumentation",
              "src": "9983:1051:21",
              "text": "  @dev initiates a DVD transfer between `msg.sender` & `_counterpart`\n  @param _token1 the address of the token (ERC20 or TREX) provided by `msg.sender`\n  @param _token1Amount the amount of `_token1` that `msg.sender` will send to `_counterpart` at DVD execution time\n  @param _counterpart the address of the counterpart, which will receive `_token1Amount` of `_token1` in exchange for\n  `_token2Amount` of `_token2`\n  @param _token2 the address of the token (ERC20 or TREX) provided by `_counterpart`\n  @param _token2Amount the amount of `_token2` that `_counterpart` will send to `msg.sender` at DVD execution time\n  requires `msg.sender` to have enough `_token1` tokens to process the DVD transfer\n  requires `DVDTransferManager` contract to have the necessary allowance to process the DVD transfer on `msg.sender`\n  requires `_counterpart` to not be the 0 address\n  requires `_token1` & `_token2` to be valid token addresses\n  emits a `DVDTransferInitiated` event"
            },
            "functionSelector": "6e4d26e4",
            "id": 4053,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initiateDVDTransfer",
            "nameLocation": "11048:19:21",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3905,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3896,
                  "mutability": "mutable",
                  "name": "_token1",
                  "nameLocation": "11076:7:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 4053,
                  "src": "11068:15:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3895,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11068:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3898,
                  "mutability": "mutable",
                  "name": "_token1Amount",
                  "nameLocation": "11093:13:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 4053,
                  "src": "11085:21:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3897,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11085:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3900,
                  "mutability": "mutable",
                  "name": "_counterpart",
                  "nameLocation": "11116:12:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 4053,
                  "src": "11108:20:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3899,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11108:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3902,
                  "mutability": "mutable",
                  "name": "_token2",
                  "nameLocation": "11138:7:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 4053,
                  "src": "11130:15:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3901,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11130:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3904,
                  "mutability": "mutable",
                  "name": "_token2Amount",
                  "nameLocation": "11155:13:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 4053,
                  "src": "11147:21:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3903,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11147:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11067:102:21"
            },
            "returnParameters": {
              "id": 3906,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11179:0:21"
            },
            "scope": 4550,
            "src": "11039:1261:21",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4278,
              "nodeType": "Block",
              "src": "14013:1744:21",
              "statements": [
                {
                  "assignments": [
                    4061
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4061,
                      "mutability": "mutable",
                      "name": "token1",
                      "nameLocation": "14039:6:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4278,
                      "src": "14023:22:21",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                        "typeString": "struct DVDTransferManager.Delivery"
                      },
                      "typeName": {
                        "id": 4060,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 4059,
                          "name": "Delivery",
                          "nameLocations": [
                            "14023:8:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3460,
                          "src": "14023:8:21"
                        },
                        "referencedDeclaration": 3460,
                        "src": "14023:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Delivery_$3460_storage_ptr",
                          "typeString": "struct DVDTransferManager.Delivery"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4065,
                  "initialValue": {
                    "baseExpression": {
                      "id": 4062,
                      "name": "token1ToDeliver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3490,
                      "src": "14048:15:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
                        "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery storage ref)"
                      }
                    },
                    "id": 4064,
                    "indexExpression": {
                      "id": 4063,
                      "name": "_transferID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4056,
                      "src": "14064:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14048:28:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Delivery_$3460_storage",
                      "typeString": "struct DVDTransferManager.Delivery storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14023:53:21"
                },
                {
                  "assignments": [
                    4068
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4068,
                      "mutability": "mutable",
                      "name": "token2",
                      "nameLocation": "14102:6:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4278,
                      "src": "14086:22:21",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                        "typeString": "struct DVDTransferManager.Delivery"
                      },
                      "typeName": {
                        "id": 4067,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 4066,
                          "name": "Delivery",
                          "nameLocations": [
                            "14086:8:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3460,
                          "src": "14086:8:21"
                        },
                        "referencedDeclaration": 3460,
                        "src": "14086:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Delivery_$3460_storage_ptr",
                          "typeString": "struct DVDTransferManager.Delivery"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4072,
                  "initialValue": {
                    "baseExpression": {
                      "id": 4069,
                      "name": "token2ToDeliver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3495,
                      "src": "14111:15:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
                        "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery storage ref)"
                      }
                    },
                    "id": 4071,
                    "indexExpression": {
                      "id": 4070,
                      "name": "_transferID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4056,
                      "src": "14127:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14111:28:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Delivery_$3460_storage",
                      "typeString": "struct DVDTransferManager.Delivery storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14086:53:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4088,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4080,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 4074,
                              "name": "token1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4061,
                              "src": "14157:6:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                "typeString": "struct DVDTransferManager.Delivery memory"
                              }
                            },
                            "id": 4075,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14164:11:21",
                            "memberName": "counterpart",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3455,
                            "src": "14157:18:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 4078,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14187:1:21",
                                "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": 4077,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14179:7:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4076,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "14179:7:21",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4079,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14179:10:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "14157:32:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 4081,
                              "name": "token2",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4068,
                              "src": "14193:6:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                "typeString": "struct DVDTransferManager.Delivery memory"
                              }
                            },
                            "id": 4082,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14200:11:21",
                            "memberName": "counterpart",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3455,
                            "src": "14193:18:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 4085,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14223:1:21",
                                "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": 4084,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14215:7:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4083,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "14215:7:21",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4086,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14215:10:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "14193:32:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "14157:68:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "7472616e7366657220494420646f6573206e6f74206578697374",
                        "id": 4089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14227:28:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_05fb44f1dba602083992ac4b2973ff7e9e67bf0cad2d6b845025c7aad22d1df5",
                          "typeString": "literal_string \"transfer ID does not exist\""
                        },
                        "value": "transfer ID does not exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_05fb44f1dba602083992ac4b2973ff7e9e67bf0cad2d6b845025c7aad22d1df5",
                          "typeString": "literal_string \"transfer ID does not exist\""
                        }
                      ],
                      "id": 4073,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "14149:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4090,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14149:107:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4091,
                  "nodeType": "ExpressionStatement",
                  "src": "14149:107:21"
                },
                {
                  "assignments": [
                    4094
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4094,
                      "mutability": "mutable",
                      "name": "token1Contract",
                      "nameLocation": "14273:14:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4278,
                      "src": "14266:21:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$3317",
                        "typeString": "contract IERC20"
                      },
                      "typeName": {
                        "id": 4093,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 4092,
                          "name": "IERC20",
                          "nameLocations": [
                            "14266:6:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3317,
                          "src": "14266:6:21"
                        },
                        "referencedDeclaration": 3317,
                        "src": "14266:6:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3317",
                          "typeString": "contract IERC20"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4099,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4096,
                          "name": "token1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4061,
                          "src": "14297:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4097,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14304:5:21",
                        "memberName": "token",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3457,
                        "src": "14297:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4095,
                      "name": "IERC20",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3317,
                      "src": "14290:6:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERC20_$3317_$",
                        "typeString": "type(contract IERC20)"
                      }
                    },
                    "id": 4098,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14290:20:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$3317",
                      "typeString": "contract IERC20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14266:44:21"
                },
                {
                  "assignments": [
                    4102
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4102,
                      "mutability": "mutable",
                      "name": "token2Contract",
                      "nameLocation": "14327:14:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4278,
                      "src": "14320:21:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$3317",
                        "typeString": "contract IERC20"
                      },
                      "typeName": {
                        "id": 4101,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 4100,
                          "name": "IERC20",
                          "nameLocations": [
                            "14320:6:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3317,
                          "src": "14320:6:21"
                        },
                        "referencedDeclaration": 3317,
                        "src": "14320:6:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3317",
                          "typeString": "contract IERC20"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4107,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4104,
                          "name": "token2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4068,
                          "src": "14351:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4105,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14358:5:21",
                        "memberName": "token",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3457,
                        "src": "14351:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4103,
                      "name": "IERC20",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3317,
                      "src": "14344:6:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERC20_$3317_$",
                        "typeString": "type(contract IERC20)"
                      }
                    },
                    "id": 4106,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14344:20:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$3317",
                      "typeString": "contract IERC20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14320:44:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4127,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 4113,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 4109,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "14383:3:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4110,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14387:6:21",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "14383:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "expression": {
                                "id": 4111,
                                "name": "token2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4068,
                                "src": "14397:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4112,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14404:11:21",
                              "memberName": "counterpart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3455,
                              "src": "14397:18:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "14383:32:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 4115,
                                  "name": "token1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4061,
                                  "src": "14431:6:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                    "typeString": "struct DVDTransferManager.Delivery memory"
                                  }
                                },
                                "id": 4116,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "14438:5:21",
                                "memberName": "token",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3457,
                                "src": "14431:12:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "expression": {
                                  "id": 4117,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967281,
                                  "src": "14445:3:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4118,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "14449:6:21",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "14445:10:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 4114,
                              "name": "isTREXAgent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3593,
                              "src": "14419:11:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                                "typeString": "function (address,address) view returns (bool)"
                              }
                            },
                            "id": 4119,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14419:37:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "14383:73:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4122,
                                "name": "token2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4068,
                                "src": "14472:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4123,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14479:5:21",
                              "memberName": "token",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3457,
                              "src": "14472:12:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 4124,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "14486:3:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4125,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14490:6:21",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "14486:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 4121,
                            "name": "isTREXAgent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3593,
                            "src": "14460:11:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address,address) view returns (bool)"
                            }
                          },
                          "id": 4126,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14460:37:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "14383:114:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "7472616e736665722068617320746f20626520646f6e652062792074686520636f756e74657270617274206f72206279206f776e6572",
                        "id": 4128,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14499:56:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8510d836f9beddc4eff9d4fc19bc4d1e4a234f3e4f868b42900f0d821aba4a1b",
                          "typeString": "literal_string \"transfer has to be done by the counterpart or by owner\""
                        },
                        "value": "transfer has to be done by the counterpart or by owner"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8510d836f9beddc4eff9d4fc19bc4d1e4a234f3e4f868b42900f0d821aba4a1b",
                          "typeString": "literal_string \"transfer has to be done by the counterpart or by owner\""
                        }
                      ],
                      "id": 4108,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "14374:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14374:182:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4130,
                  "nodeType": "ExpressionStatement",
                  "src": "14374:182:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4139,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4134,
                                "name": "token2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4068,
                                "src": "14599:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4135,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14606:11:21",
                              "memberName": "counterpart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3455,
                              "src": "14599:18:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 4132,
                              "name": "token2Contract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4102,
                              "src": "14574:14:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3317",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 4133,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14589:9:21",
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3274,
                            "src": "14574:24:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 4136,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14574:44:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "expression": {
                            "id": 4137,
                            "name": "token2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4068,
                            "src": "14622:6:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                              "typeString": "struct DVDTransferManager.Delivery memory"
                            }
                          },
                          "id": 4138,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14629:6:21",
                          "memberName": "amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3459,
                          "src": "14622:13:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14574:61:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4e6f7420656e6f75676820746f6b656e7320696e2062616c616e6365",
                        "id": 4140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14637:30:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_17bcb2fc24178a4e6966e21e43b451392b2fa265bfdbc099cf563d3a8e64b7aa",
                          "typeString": "literal_string \"Not enough tokens in balance\""
                        },
                        "value": "Not enough tokens in balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_17bcb2fc24178a4e6966e21e43b451392b2fa265bfdbc099cf563d3a8e64b7aa",
                          "typeString": "literal_string \"Not enough tokens in balance\""
                        }
                      ],
                      "id": 4131,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "14566:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4141,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14566:102:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4142,
                  "nodeType": "ExpressionStatement",
                  "src": "14566:102:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4155,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4146,
                                "name": "token2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4068,
                                "src": "14711:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4147,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14718:11:21",
                              "memberName": "counterpart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3455,
                              "src": "14711:18:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 4150,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967268,
                                  "src": "14739:4:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_DVDTransferManager_$4550",
                                    "typeString": "contract DVDTransferManager"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_DVDTransferManager_$4550",
                                    "typeString": "contract DVDTransferManager"
                                  }
                                ],
                                "id": 4149,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14731:7:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4148,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "14731:7:21",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4151,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14731:13:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 4144,
                              "name": "token2Contract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4102,
                              "src": "14686:14:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3317",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 4145,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14701:9:21",
                            "memberName": "allowance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3294,
                            "src": "14686:24:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 4152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14686:59:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "expression": {
                            "id": 4153,
                            "name": "token2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4068,
                            "src": "14749:6:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                              "typeString": "struct DVDTransferManager.Delivery memory"
                            }
                          },
                          "id": 4154,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14756:6:21",
                          "memberName": "amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3459,
                          "src": "14749:13:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14686:76:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6e6f7420656e6f75676820616c6c6f77616e636520746f207472616e73666572",
                        "id": 4156,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14764:34:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_30953575ef832ccdd521d36ea41714b4800f0a09fb33e906515b02f2b6142283",
                          "typeString": "literal_string \"not enough allowance to transfer\""
                        },
                        "value": "not enough allowance to transfer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_30953575ef832ccdd521d36ea41714b4800f0a09fb33e906515b02f2b6142283",
                          "typeString": "literal_string \"not enough allowance to transfer\""
                        }
                      ],
                      "id": 4143,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "14678:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14678:121:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4158,
                  "nodeType": "ExpressionStatement",
                  "src": "14678:121:21"
                },
                {
                  "assignments": [
                    4161
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4161,
                      "mutability": "mutable",
                      "name": "fees",
                      "nameLocation": "14823:4:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4278,
                      "src": "14809:18:21",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                        "typeString": "struct DVDTransferManager.TxFees"
                      },
                      "typeName": {
                        "id": 4160,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 4159,
                          "name": "TxFees",
                          "nameLocations": [
                            "14809:6:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3480,
                          "src": "14809:6:21"
                        },
                        "referencedDeclaration": 3480,
                        "src": "14809:6:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TxFees_$3480_storage_ptr",
                          "typeString": "struct DVDTransferManager.TxFees"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4165,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 4163,
                        "name": "_transferID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4056,
                        "src": "14843:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 4162,
                      "name": "calculateFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4549,
                      "src": "14830:12:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_struct$_TxFees_$3480_memory_ptr_$",
                        "typeString": "function (bytes32) view returns (struct DVDTransferManager.TxFees memory)"
                      }
                    },
                    "id": 4164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14830:25:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                      "typeString": "struct DVDTransferManager.TxFees memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14809:46:21"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 4166,
                        "name": "fees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4161,
                        "src": "14869:4:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                          "typeString": "struct DVDTransferManager.TxFees memory"
                        }
                      },
                      "id": 4167,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14874:6:21",
                      "memberName": "txFee1",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3473,
                      "src": "14869:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4168,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14884:1:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14869:16:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4197,
                  "nodeType": "IfStatement",
                  "src": "14865:228:21",
                  "trueBody": {
                    "id": 4196,
                    "nodeType": "Block",
                    "src": "14887:206:21",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4173,
                                "name": "token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4061,
                                "src": "14925:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4174,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14932:11:21",
                              "memberName": "counterpart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3455,
                              "src": "14925:18:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 4175,
                                "name": "token2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4068,
                                "src": "14945:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4176,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14952:11:21",
                              "memberName": "counterpart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3455,
                              "src": "14945:18:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4181,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 4177,
                                      "name": "token1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4061,
                                      "src": "14966:6:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                        "typeString": "struct DVDTransferManager.Delivery memory"
                                      }
                                    },
                                    "id": 4178,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "14973:6:21",
                                    "memberName": "amount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3459,
                                    "src": "14966:13:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "expression": {
                                      "id": 4179,
                                      "name": "fees",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4161,
                                      "src": "14982:4:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                                        "typeString": "struct DVDTransferManager.TxFees memory"
                                      }
                                    },
                                    "id": 4180,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "14987:6:21",
                                    "memberName": "txFee1",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3473,
                                    "src": "14982:11:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "14966:27:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 4182,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "14965:29:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 4170,
                              "name": "token1Contract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4094,
                              "src": "14897:14:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3317",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 4172,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14912:12:21",
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3316,
                            "src": "14897:27:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 4183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14897:98:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4184,
                        "nodeType": "ExpressionStatement",
                        "src": "14897:98:21"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4188,
                                "name": "token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4061,
                                "src": "15033:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4189,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15040:11:21",
                              "memberName": "counterpart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3455,
                              "src": "15033:18:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 4190,
                                "name": "fees",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4161,
                                "src": "15053:4:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                                  "typeString": "struct DVDTransferManager.TxFees memory"
                                }
                              },
                              "id": 4191,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15058:10:21",
                              "memberName": "fee1Wallet",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3477,
                              "src": "15053:15:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 4192,
                                "name": "fees",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4161,
                                "src": "15070:4:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                                  "typeString": "struct DVDTransferManager.TxFees memory"
                                }
                              },
                              "id": 4193,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15075:6:21",
                              "memberName": "txFee1",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3473,
                              "src": "15070:11:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 4185,
                              "name": "token1Contract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4094,
                              "src": "15005:14:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3317",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 4187,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15020:12:21",
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3316,
                            "src": "15005:27:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 4194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15005:77:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4195,
                        "nodeType": "ExpressionStatement",
                        "src": "15005:77:21"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4201,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 4198,
                        "name": "fees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4161,
                        "src": "15106:4:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                          "typeString": "struct DVDTransferManager.TxFees memory"
                        }
                      },
                      "id": 4199,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15111:6:21",
                      "memberName": "txFee1",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3473,
                      "src": "15106:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4200,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15121:1:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "15106:16:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4214,
                  "nodeType": "IfStatement",
                  "src": "15102:129:21",
                  "trueBody": {
                    "id": 4213,
                    "nodeType": "Block",
                    "src": "15124:107:21",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4205,
                                "name": "token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4061,
                                "src": "15166:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4206,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15173:11:21",
                              "memberName": "counterpart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3455,
                              "src": "15166:18:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 4207,
                                "name": "token2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4068,
                                "src": "15186:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4208,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15193:11:21",
                              "memberName": "counterpart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3455,
                              "src": "15186:18:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 4209,
                                "name": "token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4061,
                                "src": "15206:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4210,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15213:6:21",
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3459,
                              "src": "15206:13:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 4202,
                              "name": "token1Contract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4094,
                              "src": "15138:14:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3317",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 4204,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15153:12:21",
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3316,
                            "src": "15138:27:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 4211,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15138:82:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4212,
                        "nodeType": "ExpressionStatement",
                        "src": "15138:82:21"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 4215,
                        "name": "fees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4161,
                        "src": "15244:4:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                          "typeString": "struct DVDTransferManager.TxFees memory"
                        }
                      },
                      "id": 4216,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15249:6:21",
                      "memberName": "txFee2",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3475,
                      "src": "15244:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4217,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15259:1:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "15244:16:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4246,
                  "nodeType": "IfStatement",
                  "src": "15240:236:21",
                  "trueBody": {
                    "id": 4245,
                    "nodeType": "Block",
                    "src": "15262:214:21",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4222,
                                "name": "token2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4068,
                                "src": "15304:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4223,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15311:11:21",
                              "memberName": "counterpart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3455,
                              "src": "15304:18:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 4224,
                                "name": "token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4061,
                                "src": "15324:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4225,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15331:11:21",
                              "memberName": "counterpart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3455,
                              "src": "15324:18:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4230,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 4226,
                                      "name": "token2",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4068,
                                      "src": "15345:6:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                        "typeString": "struct DVDTransferManager.Delivery memory"
                                      }
                                    },
                                    "id": 4227,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "15352:6:21",
                                    "memberName": "amount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3459,
                                    "src": "15345:13:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "expression": {
                                      "id": 4228,
                                      "name": "fees",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4161,
                                      "src": "15361:4:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                                        "typeString": "struct DVDTransferManager.TxFees memory"
                                      }
                                    },
                                    "id": 4229,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "15366:6:21",
                                    "memberName": "txFee2",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3475,
                                    "src": "15361:11:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "15345:27:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 4231,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "15344:29:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 4219,
                              "name": "token2Contract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4102,
                              "src": "15276:14:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3317",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 4221,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15291:12:21",
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3316,
                            "src": "15276:27:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 4232,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15276:98:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4233,
                        "nodeType": "ExpressionStatement",
                        "src": "15276:98:21"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4237,
                                "name": "token2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4068,
                                "src": "15416:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4238,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15423:11:21",
                              "memberName": "counterpart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3455,
                              "src": "15416:18:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 4239,
                                "name": "fees",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4161,
                                "src": "15436:4:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                                  "typeString": "struct DVDTransferManager.TxFees memory"
                                }
                              },
                              "id": 4240,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15441:10:21",
                              "memberName": "fee2Wallet",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3479,
                              "src": "15436:15:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 4241,
                                "name": "fees",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4161,
                                "src": "15453:4:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                                  "typeString": "struct DVDTransferManager.TxFees memory"
                                }
                              },
                              "id": 4242,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15458:6:21",
                              "memberName": "txFee2",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3475,
                              "src": "15453:11:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 4234,
                              "name": "token2Contract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4102,
                              "src": "15388:14:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3317",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 4236,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15403:12:21",
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3316,
                            "src": "15388:27:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 4243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15388:77:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4244,
                        "nodeType": "ExpressionStatement",
                        "src": "15388:77:21"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 4247,
                        "name": "fees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4161,
                        "src": "15489:4:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                          "typeString": "struct DVDTransferManager.TxFees memory"
                        }
                      },
                      "id": 4248,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15494:6:21",
                      "memberName": "txFee2",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3475,
                      "src": "15489:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4249,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15504:1:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "15489:16:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4263,
                  "nodeType": "IfStatement",
                  "src": "15485:129:21",
                  "trueBody": {
                    "id": 4262,
                    "nodeType": "Block",
                    "src": "15507:107:21",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4254,
                                "name": "token2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4068,
                                "src": "15549:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4255,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15556:11:21",
                              "memberName": "counterpart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3455,
                              "src": "15549:18:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 4256,
                                "name": "token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4061,
                                "src": "15569:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4257,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15576:11:21",
                              "memberName": "counterpart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3455,
                              "src": "15569:18:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 4258,
                                "name": "token2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4068,
                                "src": "15589:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4259,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15596:6:21",
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3459,
                              "src": "15589:13:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 4251,
                              "name": "token2Contract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4102,
                              "src": "15521:14:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3317",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 4253,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15536:12:21",
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3316,
                            "src": "15521:27:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 4260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15521:82:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4261,
                        "nodeType": "ExpressionStatement",
                        "src": "15521:82:21"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 4267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "15623:35:21",
                    "subExpression": {
                      "baseExpression": {
                        "id": 4264,
                        "name": "token1ToDeliver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3490,
                        "src": "15630:15:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
                          "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery storage ref)"
                        }
                      },
                      "id": 4266,
                      "indexExpression": {
                        "id": 4265,
                        "name": "_transferID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4056,
                        "src": "15646:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "15630:28:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_storage",
                        "typeString": "struct DVDTransferManager.Delivery storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4268,
                  "nodeType": "ExpressionStatement",
                  "src": "15623:35:21"
                },
                {
                  "expression": {
                    "id": 4272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "15668:35:21",
                    "subExpression": {
                      "baseExpression": {
                        "id": 4269,
                        "name": "token2ToDeliver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3495,
                        "src": "15675:15:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
                          "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery storage ref)"
                        }
                      },
                      "id": 4271,
                      "indexExpression": {
                        "id": 4270,
                        "name": "_transferID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4056,
                        "src": "15691:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "15675:28:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_storage",
                        "typeString": "struct DVDTransferManager.Delivery storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4273,
                  "nodeType": "ExpressionStatement",
                  "src": "15668:35:21"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 4275,
                        "name": "_transferID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4056,
                        "src": "15738:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 4274,
                      "name": "DVDTransferExecuted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3429,
                      "src": "15718:19:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 4276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15718:32:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4277,
                  "nodeType": "EmitStatement",
                  "src": "15713:37:21"
                }
              ]
            },
            "documentation": {
              "id": 4054,
              "nodeType": "StructuredDocumentation",
              "src": "12306:1647:21",
              "text": "  @dev execute a DVD transfer that was previously initiated through the `initiateDVDTransfer` function\n  @param _transferID the DVD transfer identifier as calculated through the `calculateTransferID` function for the initiated DVD transfer to execute\n  requires `_transferID` to exist (DVD transfer has to be initiated)\n  requires that taker (counterpart sending token2) has enough tokens in balance to process the DVD transfer\n  requires that `DVDTransferManager` contract has enough allowance to process the `token2` leg of the DVD transfer\n  requires that `msg.sender` is the taker OR the TREX agent in case a TREX token is involved in the transfer (in case of conditional transfer\n  the agent can call the function when the transfer has been approved)\n  if fees apply on one side or both sides of the transfer the fees will be sent, at transaction time, to the fees wallet previously set\n  in case fees apply the counterparts will receive less than the amounts included in the DVD transfer as part of the transfer is redirected to the\n  fee wallet at transfer execution time\n  if one or both legs of the transfer are TREX, then all the relevant checks apply on the transaction (compliance + identity checks)\n  and the transaction WILL FAIL if the TREX conditions of transfer are not respected, please refer to {Token-transfer} and {Token-transferFrom} to\n  know more about TREX conditions for transfers\n  once the DVD transfer is executed the `_transferID` is removed from the pending `_transferID` pool\n  emits a `DVDTransferExecuted` event"
            },
            "functionSelector": "158db450",
            "id": 4279,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "takeDVDTransfer",
            "nameLocation": "13967:15:21",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4056,
                  "mutability": "mutable",
                  "name": "_transferID",
                  "nameLocation": "13991:11:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 4279,
                  "src": "13983:19:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4055,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13983:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13982:21:21"
            },
            "returnParameters": {
              "id": 4058,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14013:0:21"
            },
            "scope": 4550,
            "src": "13958:1799:21",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4367,
              "nodeType": "Block",
              "src": "16524:630:21",
              "statements": [
                {
                  "assignments": [
                    4287
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4287,
                      "mutability": "mutable",
                      "name": "token1",
                      "nameLocation": "16550:6:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4367,
                      "src": "16534:22:21",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                        "typeString": "struct DVDTransferManager.Delivery"
                      },
                      "typeName": {
                        "id": 4286,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 4285,
                          "name": "Delivery",
                          "nameLocations": [
                            "16534:8:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3460,
                          "src": "16534:8:21"
                        },
                        "referencedDeclaration": 3460,
                        "src": "16534:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Delivery_$3460_storage_ptr",
                          "typeString": "struct DVDTransferManager.Delivery"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4291,
                  "initialValue": {
                    "baseExpression": {
                      "id": 4288,
                      "name": "token1ToDeliver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3490,
                      "src": "16559:15:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
                        "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery storage ref)"
                      }
                    },
                    "id": 4290,
                    "indexExpression": {
                      "id": 4289,
                      "name": "_transferID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4282,
                      "src": "16575:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16559:28:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Delivery_$3460_storage",
                      "typeString": "struct DVDTransferManager.Delivery storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16534:53:21"
                },
                {
                  "assignments": [
                    4294
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4294,
                      "mutability": "mutable",
                      "name": "token2",
                      "nameLocation": "16613:6:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4367,
                      "src": "16597:22:21",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                        "typeString": "struct DVDTransferManager.Delivery"
                      },
                      "typeName": {
                        "id": 4293,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 4292,
                          "name": "Delivery",
                          "nameLocations": [
                            "16597:8:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3460,
                          "src": "16597:8:21"
                        },
                        "referencedDeclaration": 3460,
                        "src": "16597:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Delivery_$3460_storage_ptr",
                          "typeString": "struct DVDTransferManager.Delivery"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4298,
                  "initialValue": {
                    "baseExpression": {
                      "id": 4295,
                      "name": "token2ToDeliver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3495,
                      "src": "16622:15:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
                        "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery storage ref)"
                      }
                    },
                    "id": 4297,
                    "indexExpression": {
                      "id": 4296,
                      "name": "_transferID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4282,
                      "src": "16638:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16622:28:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Delivery_$3460_storage",
                      "typeString": "struct DVDTransferManager.Delivery storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16597:53:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4314,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4306,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 4300,
                              "name": "token1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4287,
                              "src": "16668:6:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                "typeString": "struct DVDTransferManager.Delivery memory"
                              }
                            },
                            "id": 4301,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "16675:11:21",
                            "memberName": "counterpart",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3455,
                            "src": "16668:18:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 4304,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16698:1:21",
                                "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": 4303,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "16690:7:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4302,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "16690:7:21",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4305,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16690:10:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "16668:32:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4313,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 4307,
                              "name": "token2",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294,
                              "src": "16704:6:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                "typeString": "struct DVDTransferManager.Delivery memory"
                              }
                            },
                            "id": 4308,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "16711:11:21",
                            "memberName": "counterpart",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3455,
                            "src": "16704:18:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 4311,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16734:1:21",
                                "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": 4310,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "16726:7:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4309,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "16726:7:21",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4312,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16726:10:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "16704:32:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "16668:68:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "7472616e7366657220494420646f6573206e6f74206578697374",
                        "id": 4315,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16738:28:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_05fb44f1dba602083992ac4b2973ff7e9e67bf0cad2d6b845025c7aad22d1df5",
                          "typeString": "literal_string \"transfer ID does not exist\""
                        },
                        "value": "transfer ID does not exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_05fb44f1dba602083992ac4b2973ff7e9e67bf0cad2d6b845025c7aad22d1df5",
                          "typeString": "literal_string \"transfer ID does not exist\""
                        }
                      ],
                      "id": 4299,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "16660:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16660:107:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4317,
                  "nodeType": "ExpressionStatement",
                  "src": "16660:107:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4349,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4342,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 4335,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 4329,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 4323,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 4319,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967281,
                                    "src": "16786:3:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 4320,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "16790:6:21",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "16786:10:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "expression": {
                                    "id": 4321,
                                    "name": "token2",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294,
                                    "src": "16800:6:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                      "typeString": "struct DVDTransferManager.Delivery memory"
                                    }
                                  },
                                  "id": 4322,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "16807:11:21",
                                  "memberName": "counterpart",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3455,
                                  "src": "16800:18:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "16786:32:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 4328,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 4324,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967281,
                                    "src": "16822:3:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 4325,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "16826:6:21",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "16822:10:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "expression": {
                                    "id": 4326,
                                    "name": "token1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4287,
                                    "src": "16836:6:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                      "typeString": "struct DVDTransferManager.Delivery memory"
                                    }
                                  },
                                  "id": 4327,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "16843:11:21",
                                  "memberName": "counterpart",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3455,
                                  "src": "16836:18:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "16822:32:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "16786:68:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 4334,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 4330,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967281,
                                  "src": "16858:3:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4331,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "16862:6:21",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "16858:10:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 4332,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2433,
                                  "src": "16872:5:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                    "typeString": "function () view returns (address)"
                                  }
                                },
                                "id": 4333,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16872:7:21",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "16858:21:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "16786:93:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 4337,
                                  "name": "token1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4287,
                                  "src": "16895:6:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                    "typeString": "struct DVDTransferManager.Delivery memory"
                                  }
                                },
                                "id": 4338,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "16902:5:21",
                                "memberName": "token",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3457,
                                "src": "16895:12:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "expression": {
                                  "id": 4339,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967281,
                                  "src": "16909:3:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4340,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "16913:6:21",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "16909:10:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 4336,
                              "name": "isTREXAgent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3593,
                              "src": "16883:11:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                                "typeString": "function (address,address) view returns (bool)"
                              }
                            },
                            "id": 4341,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16883:37:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "16786:134:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4344,
                                "name": "token2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294,
                                "src": "16936:6:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                  "typeString": "struct DVDTransferManager.Delivery memory"
                                }
                              },
                              "id": 4345,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "16943:5:21",
                              "memberName": "token",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3457,
                              "src": "16936:12:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 4346,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "16950:3:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4347,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "16954:6:21",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "16950:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 4343,
                            "name": "isTREXAgent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3593,
                            "src": "16924:11:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address,address) view returns (bool)"
                            }
                          },
                          "id": 4348,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16924:37:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "16786:175:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "796f7520617265206e6f7420616c6c6f77656420746f2063616e63656c2074686973207472616e73666572",
                        "id": 4350,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16963:45:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e4f8789e37348a27ccb80365ff2be0bee9cc248e9086ab80257f54fe74a2c25f",
                          "typeString": "literal_string \"you are not allowed to cancel this transfer\""
                        },
                        "value": "you are not allowed to cancel this transfer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e4f8789e37348a27ccb80365ff2be0bee9cc248e9086ab80257f54fe74a2c25f",
                          "typeString": "literal_string \"you are not allowed to cancel this transfer\""
                        }
                      ],
                      "id": 4318,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "16777:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16777:232:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4352,
                  "nodeType": "ExpressionStatement",
                  "src": "16777:232:21"
                },
                {
                  "expression": {
                    "id": 4356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "17019:35:21",
                    "subExpression": {
                      "baseExpression": {
                        "id": 4353,
                        "name": "token1ToDeliver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3490,
                        "src": "17026:15:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
                          "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery storage ref)"
                        }
                      },
                      "id": 4355,
                      "indexExpression": {
                        "id": 4354,
                        "name": "_transferID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4282,
                        "src": "17042:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17026:28:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_storage",
                        "typeString": "struct DVDTransferManager.Delivery storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4357,
                  "nodeType": "ExpressionStatement",
                  "src": "17019:35:21"
                },
                {
                  "expression": {
                    "id": 4361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "17064:35:21",
                    "subExpression": {
                      "baseExpression": {
                        "id": 4358,
                        "name": "token2ToDeliver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3495,
                        "src": "17071:15:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
                          "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery storage ref)"
                        }
                      },
                      "id": 4360,
                      "indexExpression": {
                        "id": 4359,
                        "name": "_transferID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4282,
                        "src": "17087:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17071:28:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_storage",
                        "typeString": "struct DVDTransferManager.Delivery storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4362,
                  "nodeType": "ExpressionStatement",
                  "src": "17064:35:21"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 4364,
                        "name": "_transferID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4282,
                        "src": "17135:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 4363,
                      "name": "DVDTransferCancelled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3434,
                      "src": "17114:20:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 4365,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17114:33:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4366,
                  "nodeType": "EmitStatement",
                  "src": "17109:38:21"
                }
              ]
            },
            "documentation": {
              "id": 4280,
              "nodeType": "StructuredDocumentation",
              "src": "15763:699:21",
              "text": "  @dev delete a pending DVD transfer that was previously initiated through the `initiateDVDTransfer` function from the pool\n  @param _transferID the DVD transfer identifier as calculated through the `calculateTransferID` function for the initiated DVD transfer to delete\n  requires `_transferID` to exist (DVD transfer has to be initiated)\n  requires that `msg.sender` is the taker or the maker or the `DVDTransferManager` contract owner or the TREX agent in case a TREX token is involved in the transfer\n  once the `cancelDVDTransfer` is executed the `_transferID` is removed from the pending `_transferID` pool\n  emits a `DVDTransferCancelled` event"
            },
            "functionSelector": "ff4ca375",
            "id": 4368,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "cancelDVDTransfer",
            "nameLocation": "16476:17:21",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4283,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4282,
                  "mutability": "mutable",
                  "name": "_transferID",
                  "nameLocation": "16502:11:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 4368,
                  "src": "16494:19:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4281,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "16494:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16493:21:21"
            },
            "returnParameters": {
              "id": 4284,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16524:0:21"
            },
            "scope": 4550,
            "src": "16467:687:21",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4548,
              "nodeType": "Block",
              "src": "17704:1116:21",
              "statements": [
                {
                  "assignments": [
                    4379
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4379,
                      "mutability": "mutable",
                      "name": "fees",
                      "nameLocation": "17728:4:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4548,
                      "src": "17714:18:21",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                        "typeString": "struct DVDTransferManager.TxFees"
                      },
                      "typeName": {
                        "id": 4378,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 4377,
                          "name": "TxFees",
                          "nameLocations": [
                            "17714:6:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3480,
                          "src": "17714:6:21"
                        },
                        "referencedDeclaration": 3480,
                        "src": "17714:6:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TxFees_$3480_storage_ptr",
                          "typeString": "struct DVDTransferManager.TxFees"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4380,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17714:18:21"
                },
                {
                  "assignments": [
                    4383
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4383,
                      "mutability": "mutable",
                      "name": "token1",
                      "nameLocation": "17758:6:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4548,
                      "src": "17742:22:21",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                        "typeString": "struct DVDTransferManager.Delivery"
                      },
                      "typeName": {
                        "id": 4382,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 4381,
                          "name": "Delivery",
                          "nameLocations": [
                            "17742:8:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3460,
                          "src": "17742:8:21"
                        },
                        "referencedDeclaration": 3460,
                        "src": "17742:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Delivery_$3460_storage_ptr",
                          "typeString": "struct DVDTransferManager.Delivery"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4387,
                  "initialValue": {
                    "baseExpression": {
                      "id": 4384,
                      "name": "token1ToDeliver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3490,
                      "src": "17767:15:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
                        "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery storage ref)"
                      }
                    },
                    "id": 4386,
                    "indexExpression": {
                      "id": 4385,
                      "name": "_transferID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4371,
                      "src": "17783:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17767:28:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Delivery_$3460_storage",
                      "typeString": "struct DVDTransferManager.Delivery storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17742:53:21"
                },
                {
                  "assignments": [
                    4390
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4390,
                      "mutability": "mutable",
                      "name": "token2",
                      "nameLocation": "17821:6:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4548,
                      "src": "17805:22:21",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                        "typeString": "struct DVDTransferManager.Delivery"
                      },
                      "typeName": {
                        "id": 4389,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 4388,
                          "name": "Delivery",
                          "nameLocations": [
                            "17805:8:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3460,
                          "src": "17805:8:21"
                        },
                        "referencedDeclaration": 3460,
                        "src": "17805:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Delivery_$3460_storage_ptr",
                          "typeString": "struct DVDTransferManager.Delivery"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4394,
                  "initialValue": {
                    "baseExpression": {
                      "id": 4391,
                      "name": "token2ToDeliver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3495,
                      "src": "17830:15:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Delivery_$3460_storage_$",
                        "typeString": "mapping(bytes32 => struct DVDTransferManager.Delivery storage ref)"
                      }
                    },
                    "id": 4393,
                    "indexExpression": {
                      "id": 4392,
                      "name": "_transferID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4371,
                      "src": "17846:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17830:28:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Delivery_$3460_storage",
                      "typeString": "struct DVDTransferManager.Delivery storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17805:53:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4410,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 4396,
                              "name": "token1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4383,
                              "src": "17876:6:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                "typeString": "struct DVDTransferManager.Delivery memory"
                              }
                            },
                            "id": 4397,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "17883:11:21",
                            "memberName": "counterpart",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3455,
                            "src": "17876:18:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 4400,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17906:1:21",
                                "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": 4399,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "17898:7:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4398,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "17898:7:21",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4401,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17898:10:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "17876:32:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4409,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 4403,
                              "name": "token2",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4390,
                              "src": "17912:6:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                "typeString": "struct DVDTransferManager.Delivery memory"
                              }
                            },
                            "id": 4404,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "17919:11:21",
                            "memberName": "counterpart",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3455,
                            "src": "17912:18:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 4407,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17942:1:21",
                                "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": 4406,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "17934:7:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4405,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "17934:7:21",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4408,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17934:10:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "17912:32:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "17876:68:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "7472616e7366657220494420646f6573206e6f74206578697374",
                        "id": 4411,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17946:28:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_05fb44f1dba602083992ac4b2973ff7e9e67bf0cad2d6b845025c7aad22d1df5",
                          "typeString": "literal_string \"transfer ID does not exist\""
                        },
                        "value": "transfer ID does not exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_05fb44f1dba602083992ac4b2973ff7e9e67bf0cad2d6b845025c7aad22d1df5",
                          "typeString": "literal_string \"transfer ID does not exist\""
                        }
                      ],
                      "id": 4395,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "17868:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17868:107:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4413,
                  "nodeType": "ExpressionStatement",
                  "src": "17868:107:21"
                },
                {
                  "assignments": [
                    4415
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4415,
                      "mutability": "mutable",
                      "name": "parity",
                      "nameLocation": "17993:6:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4548,
                      "src": "17985:14:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4414,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "17985:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4422,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4417,
                          "name": "token1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4383,
                          "src": "18018:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4418,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18025:5:21",
                        "memberName": "token",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3457,
                        "src": "18018:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 4419,
                          "name": "token2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4390,
                          "src": "18032:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                            "typeString": "struct DVDTransferManager.Delivery memory"
                          }
                        },
                        "id": 4420,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18039:5:21",
                        "memberName": "token",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3457,
                        "src": "18032:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4416,
                      "name": "calculateParity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3528,
                      "src": "18002:15:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) pure returns (bytes32)"
                      }
                    },
                    "id": 4421,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18002:43:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17985:60:21"
                },
                {
                  "assignments": [
                    4425
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4425,
                      "mutability": "mutable",
                      "name": "feeDetails",
                      "nameLocation": "18066:10:21",
                      "nodeType": "VariableDeclaration",
                      "scope": 4548,
                      "src": "18055:21:21",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                        "typeString": "struct DVDTransferManager.Fee"
                      },
                      "typeName": {
                        "id": 4424,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 4423,
                          "name": "Fee",
                          "nameLocations": [
                            "18055:3:21"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 3471,
                          "src": "18055:3:21"
                        },
                        "referencedDeclaration": 3471,
                        "src": "18055:3:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fee_$3471_storage_ptr",
                          "typeString": "struct DVDTransferManager.Fee"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4429,
                  "initialValue": {
                    "baseExpression": {
                      "id": 4426,
                      "name": "fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3485,
                      "src": "18079:3:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Fee_$3471_storage_$",
                        "typeString": "mapping(bytes32 => struct DVDTransferManager.Fee storage ref)"
                      }
                    },
                    "id": 4428,
                    "indexExpression": {
                      "id": 4427,
                      "name": "parity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4415,
                      "src": "18083:6:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18079:11:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fee_$3471_storage",
                      "typeString": "struct DVDTransferManager.Fee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18055:35:21"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4433,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 4430,
                          "name": "feeDetails",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4425,
                          "src": "18104:10:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                            "typeString": "struct DVDTransferManager.Fee memory"
                          }
                        },
                        "id": 4431,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18115:9:21",
                        "memberName": "token1Fee",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3462,
                        "src": "18104:20:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 4432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18128:1:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "18104:25:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4437,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 4434,
                          "name": "feeDetails",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4425,
                          "src": "18133:10:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                            "typeString": "struct DVDTransferManager.Fee memory"
                          }
                        },
                        "id": 4435,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18144:9:21",
                        "memberName": "token2Fee",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3464,
                        "src": "18133:20:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 4436,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18157:1:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "18133:25:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "18104:54:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 4546,
                    "nodeType": "Block",
                    "src": "18636:178:21",
                    "statements": [
                      {
                        "expression": {
                          "id": 4518,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 4514,
                              "name": "fees",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4379,
                              "src": "18650:4:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                                "typeString": "struct DVDTransferManager.TxFees memory"
                              }
                            },
                            "id": 4516,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "18655:6:21",
                            "memberName": "txFee1",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3473,
                            "src": "18650:11:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 4517,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "18664:1:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "18650:15:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4519,
                        "nodeType": "ExpressionStatement",
                        "src": "18650:15:21"
                      },
                      {
                        "expression": {
                          "id": 4524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 4520,
                              "name": "fees",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4379,
                              "src": "18679:4:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                                "typeString": "struct DVDTransferManager.TxFees memory"
                              }
                            },
                            "id": 4522,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "18684:6:21",
                            "memberName": "txFee2",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3475,
                            "src": "18679:11:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 4523,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "18693:1:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "18679:15:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4525,
                        "nodeType": "ExpressionStatement",
                        "src": "18679:15:21"
                      },
                      {
                        "expression": {
                          "id": 4533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 4526,
                              "name": "fees",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4379,
                              "src": "18708:4:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                                "typeString": "struct DVDTransferManager.TxFees memory"
                              }
                            },
                            "id": 4528,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "18713:10:21",
                            "memberName": "fee1Wallet",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3477,
                            "src": "18708:15:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 4531,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "18734:1:21",
                                "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": 4530,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18726:7:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4529,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "18726:7:21",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4532,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18726:10:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "18708:28:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4534,
                        "nodeType": "ExpressionStatement",
                        "src": "18708:28:21"
                      },
                      {
                        "expression": {
                          "id": 4542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 4535,
                              "name": "fees",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4379,
                              "src": "18750:4:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                                "typeString": "struct DVDTransferManager.TxFees memory"
                              }
                            },
                            "id": 4537,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "18755:10:21",
                            "memberName": "fee2Wallet",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3479,
                            "src": "18750:15:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 4540,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "18776:1:21",
                                "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": 4539,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18768:7:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4538,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "18768:7:21",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4541,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18768:10:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "18750:28:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4543,
                        "nodeType": "ExpressionStatement",
                        "src": "18750:28:21"
                      },
                      {
                        "expression": {
                          "id": 4544,
                          "name": "fees",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4379,
                          "src": "18799:4:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                            "typeString": "struct DVDTransferManager.TxFees memory"
                          }
                        },
                        "functionReturnParameters": 4376,
                        "id": 4545,
                        "nodeType": "Return",
                        "src": "18792:11:21"
                      }
                    ]
                  },
                  "id": 4547,
                  "nodeType": "IfStatement",
                  "src": "18100:714:21",
                  "trueBody": {
                    "id": 4513,
                    "nodeType": "Block",
                    "src": "18160:462:21",
                    "statements": [
                      {
                        "assignments": [
                          4440
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4440,
                            "mutability": "mutable",
                            "name": "_txFee1",
                            "nameLocation": "18179:7:21",
                            "nodeType": "VariableDeclaration",
                            "scope": 4513,
                            "src": "18174:12:21",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4439,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "18174:4:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4461,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4460,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4453,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4445,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 4441,
                                      "name": "token1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4383,
                                      "src": "18190:6:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                        "typeString": "struct DVDTransferManager.Delivery memory"
                                      }
                                    },
                                    "id": 4442,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "18197:6:21",
                                    "memberName": "amount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3459,
                                    "src": "18190:13:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "expression": {
                                      "id": 4443,
                                      "name": "feeDetails",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4425,
                                      "src": "18206:10:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                                        "typeString": "struct DVDTransferManager.Fee memory"
                                      }
                                    },
                                    "id": 4444,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "18217:9:21",
                                    "memberName": "token1Fee",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3462,
                                    "src": "18206:20:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "18190:36:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4452,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "hexValue": "3130",
                                    "id": 4446,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "18229:2:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_10_by_1",
                                      "typeString": "int_const 10"
                                    },
                                    "value": "10"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "**",
                                  "rightExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 4450,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "id": 4447,
                                            "name": "feeDetails",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4425,
                                            "src": "18234:10:21",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                                              "typeString": "struct DVDTransferManager.Fee memory"
                                            }
                                          },
                                          "id": 4448,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "18245:7:21",
                                          "memberName": "feeBase",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3466,
                                          "src": "18234:18:21",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "hexValue": "32",
                                          "id": 4449,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "18255:1:21",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_2_by_1",
                                            "typeString": "int_const 2"
                                          },
                                          "value": "2"
                                        },
                                        "src": "18234:22:21",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 4451,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "18233:24:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "18229:28:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "18190:67:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 4454,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "18189:69:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4458,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 4455,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "18262:2:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "expression": {
                                    "id": 4456,
                                    "name": "feeDetails",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4425,
                                    "src": "18266:10:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                                      "typeString": "struct DVDTransferManager.Fee memory"
                                    }
                                  },
                                  "id": 4457,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "18277:7:21",
                                  "memberName": "feeBase",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3466,
                                  "src": "18266:18:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "18262:22:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 4459,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "18261:24:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18189:96:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18174:111:21"
                      },
                      {
                        "assignments": [
                          4463
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4463,
                            "mutability": "mutable",
                            "name": "_txFee2",
                            "nameLocation": "18304:7:21",
                            "nodeType": "VariableDeclaration",
                            "scope": 4513,
                            "src": "18299:12:21",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4462,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "18299:4:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4484,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4476,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4468,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 4464,
                                      "name": "token2",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4390,
                                      "src": "18315:6:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Delivery_$3460_memory_ptr",
                                        "typeString": "struct DVDTransferManager.Delivery memory"
                                      }
                                    },
                                    "id": 4465,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "18322:6:21",
                                    "memberName": "amount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3459,
                                    "src": "18315:13:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "expression": {
                                      "id": 4466,
                                      "name": "feeDetails",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4425,
                                      "src": "18331:10:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                                        "typeString": "struct DVDTransferManager.Fee memory"
                                      }
                                    },
                                    "id": 4467,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "18342:9:21",
                                    "memberName": "token2Fee",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3464,
                                    "src": "18331:20:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "18315:36:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4475,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "hexValue": "3130",
                                    "id": 4469,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "18354:2:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_10_by_1",
                                      "typeString": "int_const 10"
                                    },
                                    "value": "10"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "**",
                                  "rightExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 4473,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "id": 4470,
                                            "name": "feeDetails",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4425,
                                            "src": "18359:10:21",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                                              "typeString": "struct DVDTransferManager.Fee memory"
                                            }
                                          },
                                          "id": 4471,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "18370:7:21",
                                          "memberName": "feeBase",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3466,
                                          "src": "18359:18:21",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "hexValue": "32",
                                          "id": 4472,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "18380:1:21",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_2_by_1",
                                            "typeString": "int_const 2"
                                          },
                                          "value": "2"
                                        },
                                        "src": "18359:22:21",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 4474,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "18358:24:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "18354:28:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "18315:67:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 4477,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "18314:69:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4481,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 4478,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "18387:2:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "expression": {
                                    "id": 4479,
                                    "name": "feeDetails",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4425,
                                    "src": "18391:10:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                                      "typeString": "struct DVDTransferManager.Fee memory"
                                    }
                                  },
                                  "id": 4480,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "18402:7:21",
                                  "memberName": "feeBase",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3466,
                                  "src": "18391:18:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "18387:22:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 4482,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "18386:24:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18314:96:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18299:111:21"
                      },
                      {
                        "expression": {
                          "id": 4489,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 4485,
                              "name": "fees",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4379,
                              "src": "18424:4:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                                "typeString": "struct DVDTransferManager.TxFees memory"
                              }
                            },
                            "id": 4487,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "18429:6:21",
                            "memberName": "txFee1",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3473,
                            "src": "18424:11:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4488,
                            "name": "_txFee1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4440,
                            "src": "18438:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18424:21:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4490,
                        "nodeType": "ExpressionStatement",
                        "src": "18424:21:21"
                      },
                      {
                        "expression": {
                          "id": 4495,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 4491,
                              "name": "fees",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4379,
                              "src": "18459:4:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                                "typeString": "struct DVDTransferManager.TxFees memory"
                              }
                            },
                            "id": 4493,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "18464:6:21",
                            "memberName": "txFee2",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3475,
                            "src": "18459:11:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4494,
                            "name": "_txFee2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4463,
                            "src": "18473:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18459:21:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4496,
                        "nodeType": "ExpressionStatement",
                        "src": "18459:21:21"
                      },
                      {
                        "expression": {
                          "id": 4502,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 4497,
                              "name": "fees",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4379,
                              "src": "18494:4:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                                "typeString": "struct DVDTransferManager.TxFees memory"
                              }
                            },
                            "id": 4499,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "18499:10:21",
                            "memberName": "fee1Wallet",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3477,
                            "src": "18494:15:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 4500,
                              "name": "feeDetails",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4425,
                              "src": "18512:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                                "typeString": "struct DVDTransferManager.Fee memory"
                              }
                            },
                            "id": 4501,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "18523:10:21",
                            "memberName": "fee1Wallet",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3468,
                            "src": "18512:21:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "18494:39:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4503,
                        "nodeType": "ExpressionStatement",
                        "src": "18494:39:21"
                      },
                      {
                        "expression": {
                          "id": 4509,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 4504,
                              "name": "fees",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4379,
                              "src": "18547:4:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                                "typeString": "struct DVDTransferManager.TxFees memory"
                              }
                            },
                            "id": 4506,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "18552:10:21",
                            "memberName": "fee2Wallet",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3479,
                            "src": "18547:15:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 4507,
                              "name": "feeDetails",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4425,
                              "src": "18565:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Fee_$3471_memory_ptr",
                                "typeString": "struct DVDTransferManager.Fee memory"
                              }
                            },
                            "id": 4508,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "18576:10:21",
                            "memberName": "fee2Wallet",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3470,
                            "src": "18565:21:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "18547:39:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4510,
                        "nodeType": "ExpressionStatement",
                        "src": "18547:39:21"
                      },
                      {
                        "expression": {
                          "id": 4511,
                          "name": "fees",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4379,
                          "src": "18607:4:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                            "typeString": "struct DVDTransferManager.TxFees memory"
                          }
                        },
                        "functionReturnParameters": 4376,
                        "id": 4512,
                        "nodeType": "Return",
                        "src": "18600:11:21"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 4369,
              "nodeType": "StructuredDocumentation",
              "src": "17160:461:21",
              "text": "  @dev calculates the fees to apply to a specific transfer depending on the fees applied to the parity used in the transfer\n  @param _transferID the DVD transfer identifier as calculated through the `calculateTransferID` function for the transfer to calculate fees on\n  requires `_transferID` to exist (DVD transfer has to be initiated)\n  returns the fees to apply on each leg of the transfer in the form of a `TxFees` struct"
            },
            "functionSelector": "4f846864",
            "id": 4549,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateFee",
            "nameLocation": "17635:12:21",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4371,
                  "mutability": "mutable",
                  "name": "_transferID",
                  "nameLocation": "17656:11:21",
                  "nodeType": "VariableDeclaration",
                  "scope": 4549,
                  "src": "17648:19:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4370,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "17648:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17647:21:21"
            },
            "returnParameters": {
              "id": 4376,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4375,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4549,
                  "src": "17689:13:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_TxFees_$3480_memory_ptr",
                    "typeString": "struct DVDTransferManager.TxFees"
                  },
                  "typeName": {
                    "id": 4374,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4373,
                      "name": "TxFees",
                      "nameLocations": [
                        "17689:6:21"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3480,
                      "src": "17689:6:21"
                    },
                    "referencedDeclaration": 3480,
                    "src": "17689:6:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TxFees_$3480_storage_ptr",
                      "typeString": "struct DVDTransferManager.TxFees"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17688:15:21"
            },
            "scope": 4550,
            "src": "17626:1194:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 4551,
        "src": "1182:17641:21",
        "usedErrors": []
      }
    ],
    "src": "1093:17731:21"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.318Z",
  "devdoc": {
    "events": {
      "DVDTransferCancelled(bytes32)": {
        "details": "Emitted when a DVD transfer is cancelled this event is emitted by the `cancelDVDTransfer` function"
      },
      "DVDTransferExecuted(bytes32)": {
        "details": "Emitted when a DVD transfer is validated by `taker` and executed either by `taker` either by the agent of the TREX token if the TREX token is subject to conditional transfers this event is emitted by the `takeDVDTransfer` function"
      },
      "DVDTransferInitiated(bytes32,address,address,uint256,address,address,uint256)": {
        "details": "Emitted when a DVD transfer is initiated by `maker` to swap `token1Amount` tokens `token1` (TREX or not) for `token2Amount` tokens `token2` with `taker` this event is emitted by the `initiateDVDTransfer` function"
      },
      "FeeModified(bytes32,address,address,uint256,uint256,uint256,address,address)": {
        "details": "Emitted when a DVD transfer is cancelled this event is emitted by the `cancelDVDTransfer` function"
      }
    },
    "kind": "dev",
    "methods": {
      "calculateFee(bytes32)": {
        "details": "calculates the fees to apply to a specific transfer depending on the fees applied to the parity used in the transfer",
        "params": {
          "_transferID": "the DVD transfer identifier as calculated through the `calculateTransferID` function for the transfer to calculate fees on  requires `_transferID` to exist (DVD transfer has to be initiated)  returns the fees to apply on each leg of the transfer in the form of a `TxFees` struct"
        }
      },
      "calculateParity(address,address)": {
        "details": "calculates the parity byte signature",
        "params": {
          "_token1": "the address of the base token",
          "_token2": "the address of the counterpart token  return the byte signature of the parity"
        }
      },
      "calculateTransferID(uint256,address,address,uint256,address,address,uint256)": {
        "details": "calculates the transferID depending on DVD transfer parameters",
        "params": {
          "_maker": "the address of the DVD transfer maker (initiator of the transfer)",
          "_nonce": "the nonce of the transfer on the smart contract",
          "_taker": "the address of the DVD transfer taker (executor of the transfer)",
          "_token1": "the address of the token that the maker is providing",
          "_token1Amount": "the amount of tokens `_token1` provided by the maker",
          "_token2": "the address of the token that the taker is providing",
          "_token2Amount": "the amount of tokens `_token2` provided by the taker  return the identifier of the DVD transfer as a byte signature"
        }
      },
      "cancelDVDTransfer(bytes32)": {
        "details": "delete a pending DVD transfer that was previously initiated through the `initiateDVDTransfer` function from the pool",
        "params": {
          "_transferID": "the DVD transfer identifier as calculated through the `calculateTransferID` function for the initiated DVD transfer to delete  requires `_transferID` to exist (DVD transfer has to be initiated)  requires that `msg.sender` is the taker or the maker or the `DVDTransferManager` contract owner or the TREX agent in case a TREX token is involved in the transfer  once the `cancelDVDTransfer` is executed the `_transferID` is removed from the pending `_transferID` pool  emits a `DVDTransferCancelled` event"
        }
      },
      "initiateDVDTransfer(address,uint256,address,address,uint256)": {
        "details": "initiates a DVD transfer between `msg.sender` & `_counterpart`",
        "params": {
          "_counterpart": "the address of the counterpart, which will receive `_token1Amount` of `_token1` in exchange for  `_token2Amount` of `_token2`",
          "_token1": "the address of the token (ERC20 or TREX) provided by `msg.sender`",
          "_token1Amount": "the amount of `_token1` that `msg.sender` will send to `_counterpart` at DVD execution time",
          "_token2": "the address of the token (ERC20 or TREX) provided by `_counterpart`",
          "_token2Amount": "the amount of `_token2` that `_counterpart` will send to `msg.sender` at DVD execution time  requires `msg.sender` to have enough `_token1` tokens to process the DVD transfer  requires `DVDTransferManager` contract to have the necessary allowance to process the DVD transfer on `msg.sender`  requires `_counterpart` to not be the 0 address  requires `_token1` & `_token2` to be valid token addresses  emits a `DVDTransferInitiated` event"
        }
      },
      "isTREX(address)": {
        "details": "check if `_token` corresponds to a functional TREX token (with identity registry initiated)",
        "params": {
          "_token": "the address token to check  the function will try to call `identityRegistry()` on the address, which is a getter specific to TREX tokens  if the call pass and returns an address it means that the token is a TREX, otherwise it's not a TREX  return `true` if the token is a TREX, `false` otherwise"
        }
      },
      "isTREXAgent(address,address)": {
        "details": "check if `_user` is a TREX agent of `_token`",
        "params": {
          "_token": "the address token to check",
          "_user": "the wallet address  if `_token` is a TREX token this function will check if `_user` is registered as an agent on it  return `true` if `_user` is agent of `_token`, return `false` otherwise"
        }
      },
      "isTREXOwner(address,address)": {
        "details": "check if `_user` is a TREX owner of `_token`",
        "params": {
          "_token": "the address token to check",
          "_user": "the wallet address  if `_token` is a TREX token this function will check if `_user` is registered as an owner on it  return `true` if `_user` is owner of `_token`, return `false` otherwise"
        }
      },
      "modifyFee(address,address,uint256,uint256,uint256,address,address)": {
        "details": "modify the fees applied to a parity of tokens (tokens can be TREX or ERC20)",
        "params": {
          "_fee1": "the fee to apply on `_token1` leg of the DVD transfer per 10^`_feeBase`",
          "_fee1Wallet": "the wallet address receiving fees applied on `_token1`",
          "_fee2": "the fee to apply on `_token2` leg of the DVD transfer per 10^`_feeBase`",
          "_fee2Wallet": "the wallet address receiving fees applied on `_token2`  `_token1` and `_token2` need to be ERC20 or TREX tokens addresses, otherwise the transaction will fail  `msg.sender` has to be owner of the DVD contract or the owner of the TREX token involved in the parity (if any)  requires fees to be lower than 100%  requires `_feeBase` to be higher or equal to 2 (precision 10^2)  requires `_feeBase` to be lower or equal to 5 (precision 10^5) to avoid overflows  requires `_fee1Wallet` & `_fee2Wallet` to be non empty addresses if `_fee1` & `_fee2` are respectively set  note that if fees are not set for a parity the default fee is basically 0%  emits a `FeeModified` event",
          "_feeBase": "the precision of the fee setting, e.g. if `_feeBase` == 2 then `_fee1` and `_fee2` are in % (fee/10^`_feeBase`)",
          "_token1": "the address of the base token for the parity `_token1`/`_token2`",
          "_token2": "the address of the counterpart token for the parity `_token1`/`_token2`"
        }
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "takeDVDTransfer(bytes32)": {
        "details": "execute a DVD transfer that was previously initiated through the `initiateDVDTransfer` function",
        "params": {
          "_transferID": "the DVD transfer identifier as calculated through the `calculateTransferID` function for the initiated DVD transfer to execute  requires `_transferID` to exist (DVD transfer has to be initiated)  requires that taker (counterpart sending token2) has enough tokens in balance to process the DVD transfer  requires that `DVDTransferManager` contract has enough allowance to process the `token2` leg of the DVD transfer  requires that `msg.sender` is the taker OR the TREX agent in case a TREX token is involved in the transfer (in case of conditional transfer  the agent can call the function when the transfer has been approved)  if fees apply on one side or both sides of the transfer the fees will be sent, at transaction time, to the fees wallet previously set  in case fees apply the counterparts will receive less than the amounts included in the DVD transfer as part of the transfer is redirected to the  fee wallet at transfer execution time  if one or both legs of the transfer are TREX, then all the relevant checks apply on the transaction (compliance + identity checks)  and the transaction WILL FAIL if the TREX conditions of transfer are not respected, please refer to {Token-transfer} and {Token-transferFrom} to  know more about TREX conditions for transfers  once the DVD transfer is executed the `_transferID` is removed from the pending `_transferID` pool  emits a `DVDTransferExecuted` event"
        }
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}