[
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "dripRatePerSecond",
        "type": "uint256"
      }
    ],
    "name": "BalanceDripActivated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      }
    ],
    "name": "BalanceDripDeactivated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "user",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "BalanceDripDripped",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "dripRatePerSecond",
        "type": "uint256"
      }
    ],
    "name": "BalanceDripRateSet",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "user",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "DripTokenClaimed",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "user",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "DripTokenDripped",
    "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"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "TransferredOut",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "isReferral",
        "type": "bool"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "periodSeconds",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "dripAmount",
        "type": "uint256"
      }
    ],
    "name": "VolumeDripActivated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "isReferral",
        "type": "bool"
      }
    ],
    "name": "VolumeDripDeactivated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "isReferral",
        "type": "bool"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "user",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "VolumeDripDripped",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "isReferral",
        "type": "bool"
      },
      {
        "indexed": false,
        "internalType": "uint32",
        "name": "period",
        "type": "uint32"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "totalSupply",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "drippedTokens",
        "type": "uint256"
      }
    ],
    "name": "VolumeDripPeriodEnded",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "isReferral",
        "type": "bool"
      },
      {
        "indexed": false,
        "internalType": "uint32",
        "name": "period",
        "type": "uint32"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "dripAmount",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "endTime",
        "type": "uint256"
      }
    ],
    "name": "VolumeDripPeriodStarted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "isReferral",
        "type": "bool"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "periodSeconds",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "dripAmount",
        "type": "uint256"
      }
    ],
    "name": "VolumeDripSet",
    "type": "event"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "dripRatePerSecond",
        "type": "uint256"
      }
    ],
    "name": "activateBalanceDrip",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "isReferral",
        "type": "bool"
      },
      {
        "internalType": "uint32",
        "name": "periodSeconds",
        "type": "uint32"
      },
      {
        "internalType": "uint112",
        "name": "dripAmount",
        "type": "uint112"
      },
      {
        "internalType": "uint32",
        "name": "endTime",
        "type": "uint32"
      }
    ],
    "name": "activateVolumeDrip",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "user",
        "type": "address"
      },
      {
        "internalType": "address[]",
        "name": "dripTokens",
        "type": "address[]"
      }
    ],
    "name": "balanceOfClaims",
    "outputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "dripToken",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "balance",
            "type": "uint256"
          }
        ],
        "internalType": "struct Comptroller.DripTokenBalance[]",
        "name": "",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "user",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      }
    ],
    "name": "balanceOfDrip",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "referrer",
        "type": "address"
      }
    ],
    "name": "beforeTokenMint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "measure",
        "type": "address"
      }
    ],
    "name": "beforeTokenTransfer",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "source",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "measure",
            "type": "address"
          }
        ],
        "internalType": "struct Comptroller.UpdatePair[]",
        "name": "pairs",
        "type": "tuple[]"
      },
      {
        "internalType": "address",
        "name": "user",
        "type": "address"
      },
      {
        "internalType": "address[]",
        "name": "dripTokens",
        "type": "address[]"
      }
    ],
    "name": "captureClaimsForBalanceDripsForPairs",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "user",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "claimDrip",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "user",
        "type": "address"
      },
      {
        "internalType": "address[]",
        "name": "dripTokens",
        "type": "address[]"
      }
    ],
    "name": "claimDrips",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "prevDripToken",
        "type": "address"
      }
    ],
    "name": "deactivateBalanceDrip",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "isReferral",
        "type": "bool"
      },
      {
        "internalType": "address",
        "name": "prevDripToken",
        "type": "address"
      }
    ],
    "name": "deactivateVolumeDrip",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "measure",
        "type": "address"
      }
    ],
    "name": "getActiveBalanceDripTokens",
    "outputs": [
      {
        "internalType": "address[]",
        "name": "",
        "type": "address[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "isReferral",
        "type": "bool"
      }
    ],
    "name": "getActiveVolumeDripTokens",
    "outputs": [
      {
        "internalType": "address[]",
        "name": "",
        "type": "address[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      }
    ],
    "name": "getBalanceDrip",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "dripRatePerSecond",
        "type": "uint256"
      },
      {
        "internalType": "uint128",
        "name": "exchangeRateMantissa",
        "type": "uint128"
      },
      {
        "internalType": "uint32",
        "name": "timestamp",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "isReferral",
        "type": "bool"
      }
    ],
    "name": "getVolumeDrip",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "periodSeconds",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "dripAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "periodCount",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "isReferral",
        "type": "bool"
      },
      {
        "internalType": "uint16",
        "name": "period",
        "type": "uint16"
      }
    ],
    "name": "getVolumeDripPeriod",
    "outputs": [
      {
        "internalType": "uint112",
        "name": "totalSupply",
        "type": "uint112"
      },
      {
        "internalType": "uint112",
        "name": "dripAmount",
        "type": "uint112"
      },
      {
        "internalType": "uint32",
        "name": "endTime",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "isReferral",
        "type": "bool"
      }
    ],
    "name": "isVolumeDripActive",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "source",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "measure",
            "type": "address"
          }
        ],
        "internalType": "struct Comptroller.UpdatePair[]",
        "name": "pairs",
        "type": "tuple[]"
      },
      {
        "internalType": "address",
        "name": "user",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "address[]",
        "name": "dripTokens",
        "type": "address[]"
      }
    ],
    "name": "mintAndCaptureVolumeDripsForPairs",
    "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": "address",
        "name": "source",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "dripRatePerSecond",
        "type": "uint256"
      }
    ],
    "name": "setBalanceDripRate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_time",
        "type": "uint256"
      }
    ],
    "name": "setCurrentTime",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "source",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "measure",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "dripToken",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "isReferral",
        "type": "bool"
      },
      {
        "internalType": "uint32",
        "name": "periodSeconds",
        "type": "uint32"
      },
      {
        "internalType": "uint112",
        "name": "dripAmount",
        "type": "uint112"
      }
    ],
    "name": "setVolumeDrip",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes4",
        "name": "interfaceId",
        "type": "bytes4"
      }
    ],
    "name": "supportsInterface",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transferOut",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "source",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "measure",
            "type": "address"
          }
        ],
        "internalType": "struct Comptroller.UpdatePair[]",
        "name": "pairs",
        "type": "tuple[]"
      }
    ],
    "name": "updateActiveBalanceDripsForPairs",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "source",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "measure",
            "type": "address"
          }
        ],
        "internalType": "struct Comptroller.UpdatePair[]",
        "name": "pairs",
        "type": "tuple[]"
      }
    ],
    "name": "updateActiveVolumeDripsForPairs",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "source",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "measure",
            "type": "address"
          }
        ],
        "internalType": "struct Comptroller.UpdatePair[]",
        "name": "pairs",
        "type": "tuple[]"
      },
      {
        "internalType": "address",
        "name": "user",
        "type": "address"
      },
      {
        "internalType": "address[]",
        "name": "dripTokens",
        "type": "address[]"
      }
    ],
    "name": "updateAndClaimDrips",
    "outputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "dripToken",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "balance",
            "type": "uint256"
          }
        ],
        "internalType": "struct Comptroller.DripTokenBalance[]",
        "name": "",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "source",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "measure",
            "type": "address"
          }
        ],
        "internalType": "struct Comptroller.UpdatePair[]",
        "name": "pairs",
        "type": "tuple[]"
      },
      {
        "internalType": "address",
        "name": "user",
        "type": "address"
      },
      {
        "internalType": "address[]",
        "name": "dripTokens",
        "type": "address[]"
      }
    ],
    "name": "updateDrips",
    "outputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "dripToken",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "balance",
            "type": "uint256"
          }
        ],
        "internalType": "struct Comptroller.DripTokenBalance[]",
        "name": "",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]
