[
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "address_",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "limitIndex",
        "type": "uint256"
      }
    ],
    "name": "AccountLimitChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "FeeWithdrawn",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "mantissa",
        "type": "uint256"
      }
    ],
    "name": "ImmediatelyUnlockingPartUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint8",
        "name": "version",
        "type": "uint8"
      }
    ],
    "name": "Initialized",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "startsAt",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "unlockingPart",
        "type": "uint256"
      }
    ],
    "name": "IntervalCreated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "IntervalPoolUnlocking",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "IssuanceIncreased",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "LinearPoolUnlocking",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "timestamp",
        "type": "uint256"
      }
    ],
    "name": "LinearUnlockingEndingTimestampUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "Paused",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "limitIndex",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newLimit",
        "type": "uint256"
      }
    ],
    "name": "PaymentLimitChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "limitIndex",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "limit",
        "type": "uint256"
      }
    ],
    "name": "PaymentLimitCreated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "unlockedAmount",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "collectedFee",
        "type": "uint256"
      }
    ],
    "name": "PaymentUnlocked",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "PaymentsWithdrawn",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "enum SomaStarter.Type",
        "name": "type_",
        "type": "uint8"
      },
      {
        "indexed": true,
        "internalType": "contract IERC20",
        "name": "paymentToken",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "contract IERC20",
        "name": "issuanceToken",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "issuanceLimit",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "startsAt",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "endsAt",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "fee",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "rate",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "paymentLimit",
        "type": "uint256"
      }
    ],
    "name": "PoolCreated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "PoolOwnerChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "nominatedOwner",
        "type": "address"
      }
    ],
    "name": "PoolOwnerNominated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "newRequiredPrivileges",
        "type": "bytes32"
      }
    ],
    "name": "PoolPrivilegesChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "requestedPaymentAmount",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "paymentAmount",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "issuanceAmount",
        "type": "uint256"
      }
    ],
    "name": "Swap",
    "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"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "TokensRecovered",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "Unpaused",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "UnsoldWithdrawn",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "GLOBAL_ADMIN_ROLE",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "GLOBAL_WHITELIST_ROLE",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "LOCAL_ADMIN_ROLE",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "LOCAL_WHITELIST_ROLE",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "SOMA",
    "outputs": [
      {
        "internalType": "contract ISOMA",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "TOKEN_RECOVERY_ROLE",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      }
    ],
    "name": "acceptPoolOwnership",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "limitIndex",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "newLimit",
        "type": "uint256"
      }
    ],
    "name": "changeLimit",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      }
    ],
    "name": "collectFee",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IERC20",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "collectedFees",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "issuanceLimit",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "startsAt",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "endsAt",
            "type": "uint256"
          },
          {
            "internalType": "contract IERC20",
            "name": "paymentToken",
            "type": "address"
          },
          {
            "internalType": "contract IERC20",
            "name": "issuanceToken",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "mantissa",
                "type": "uint256"
              }
            ],
            "internalType": "struct AttoDecimal.Instance",
            "name": "fee",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "mantissa",
                "type": "uint256"
              }
            ],
            "internalType": "struct AttoDecimal.Instance",
            "name": "rate",
            "type": "tuple"
          }
        ],
        "internalType": "struct SomaStarter.Props",
        "name": "props",
        "type": "tuple"
      },
      {
        "internalType": "uint256",
        "name": "paymentLimit",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "requiredPrivileges",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "owner_",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "mantissa",
            "type": "uint256"
          }
        ],
        "internalType": "struct AttoDecimal.Instance",
        "name": "immediatelyUnlockingPart",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "startsAt",
            "type": "uint256"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "mantissa",
                "type": "uint256"
              }
            ],
            "internalType": "struct AttoDecimal.Instance",
            "name": "unlockingPart",
            "type": "tuple"
          }
        ],
        "internalType": "struct SomaStarter.Interval[]",
        "name": "intervals",
        "type": "tuple[]"
      }
    ],
    "name": "createIntervalPool",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      },
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "issuanceLimit",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "startsAt",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "endsAt",
            "type": "uint256"
          },
          {
            "internalType": "contract IERC20",
            "name": "paymentToken",
            "type": "address"
          },
          {
            "internalType": "contract IERC20",
            "name": "issuanceToken",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "mantissa",
                "type": "uint256"
              }
            ],
            "internalType": "struct AttoDecimal.Instance",
            "name": "fee",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "mantissa",
                "type": "uint256"
              }
            ],
            "internalType": "struct AttoDecimal.Instance",
            "name": "rate",
            "type": "tuple"
          }
        ],
        "internalType": "struct SomaStarter.Props",
        "name": "props",
        "type": "tuple"
      },
      {
        "internalType": "uint256",
        "name": "paymentLimit",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "requiredPrivileges",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "owner_",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "mantissa",
            "type": "uint256"
          }
        ],
        "internalType": "struct AttoDecimal.Instance",
        "name": "immediatelyUnlockingPart",
        "type": "tuple"
      },
      {
        "internalType": "uint256",
        "name": "linearUnlockingEndsAt",
        "type": "uint256"
      }
    ],
    "name": "createLinearPool",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      },
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "limit",
        "type": "uint256"
      }
    ],
    "name": "createPaymentLimit",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "limitIndex",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "issuanceLimit",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "startsAt",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "endsAt",
            "type": "uint256"
          },
          {
            "internalType": "contract IERC20",
            "name": "paymentToken",
            "type": "address"
          },
          {
            "internalType": "contract IERC20",
            "name": "issuanceToken",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "mantissa",
                "type": "uint256"
              }
            ],
            "internalType": "struct AttoDecimal.Instance",
            "name": "fee",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "mantissa",
                "type": "uint256"
              }
            ],
            "internalType": "struct AttoDecimal.Instance",
            "name": "rate",
            "type": "tuple"
          }
        ],
        "internalType": "struct SomaStarter.Props",
        "name": "props",
        "type": "tuple"
      },
      {
        "internalType": "uint256",
        "name": "paymentLimit",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "requiredPrivileges",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "owner_",
        "type": "address"
      }
    ],
    "name": "createSimplePool",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      },
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      }
    ],
    "name": "getRoleAdmin",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "hasRole",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "increaseIssuance",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "initialize",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "address_",
        "type": "address"
      }
    ],
    "name": "intervalPoolAccount",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "limitIndex",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "paymentSum",
            "type": "uint256"
          }
        ],
        "internalType": "struct SomaStarter.AccountState",
        "name": "state",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "issuanceAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "withdrawnIssuanceAmount",
            "type": "uint256"
          }
        ],
        "internalType": "struct SomaStarter.ComplexAccountState",
        "name": "complex",
        "type": "tuple"
      },
      {
        "internalType": "uint256",
        "name": "unlockedIntervalsCount",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      }
    ],
    "name": "intervalPoolProps",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "issuanceLimit",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "startsAt",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "endsAt",
            "type": "uint256"
          },
          {
            "internalType": "contract IERC20",
            "name": "paymentToken",
            "type": "address"
          },
          {
            "internalType": "contract IERC20",
            "name": "issuanceToken",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "mantissa",
                "type": "uint256"
              }
            ],
            "internalType": "struct AttoDecimal.Instance",
            "name": "fee",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "mantissa",
                "type": "uint256"
              }
            ],
            "internalType": "struct AttoDecimal.Instance",
            "name": "rate",
            "type": "tuple"
          }
        ],
        "internalType": "struct SomaStarter.Props",
        "name": "props",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "mantissa",
            "type": "uint256"
          }
        ],
        "internalType": "struct AttoDecimal.Instance",
        "name": "immediatelyUnlockingPart",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "startsAt",
            "type": "uint256"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "mantissa",
                "type": "uint256"
              }
            ],
            "internalType": "struct AttoDecimal.Instance",
            "name": "unlockingPart",
            "type": "tuple"
          }
        ],
        "internalType": "struct SomaStarter.Interval[]",
        "name": "intervals",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "address_",
        "type": "address"
      }
    ],
    "name": "linearPoolAccount",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "limitIndex",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "paymentSum",
            "type": "uint256"
          }
        ],
        "internalType": "struct SomaStarter.AccountState",
        "name": "state",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "issuanceAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "withdrawnIssuanceAmount",
            "type": "uint256"
          }
        ],
        "internalType": "struct SomaStarter.ComplexAccountState",
        "name": "complex",
        "type": "tuple"
      },
      {
        "internalType": "uint256",
        "name": "immediatelyUnlockedAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      }
    ],
    "name": "linearPoolProps",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "issuanceLimit",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "startsAt",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "endsAt",
            "type": "uint256"
          },
          {
            "internalType": "contract IERC20",
            "name": "paymentToken",
            "type": "address"
          },
          {
            "internalType": "contract IERC20",
            "name": "issuanceToken",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "mantissa",
                "type": "uint256"
              }
            ],
            "internalType": "struct AttoDecimal.Instance",
            "name": "fee",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "mantissa",
                "type": "uint256"
              }
            ],
            "internalType": "struct AttoDecimal.Instance",
            "name": "rate",
            "type": "tuple"
          }
        ],
        "internalType": "struct SomaStarter.Props",
        "name": "props",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "mantissa",
            "type": "uint256"
          }
        ],
        "internalType": "struct AttoDecimal.Instance",
        "name": "immediatelyUnlockingPart",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "endsAt",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "duration",
            "type": "uint256"
          }
        ],
        "internalType": "struct SomaStarter.LinearProps",
        "name": "linear",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes[]",
        "name": "data",
        "type": "bytes[]"
      }
    ],
    "name": "multicall",
    "outputs": [
      {
        "internalType": "bytes[]",
        "name": "results",
        "type": "bytes[]"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "nominatedOwner_",
        "type": "address"
      }
    ],
    "name": "nominateNewPoolOwner",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "pause",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "paused",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "address_",
        "type": "address"
      }
    ],
    "name": "poolAccount",
    "outputs": [
      {
        "internalType": "enum SomaStarter.Type",
        "name": "type_",
        "type": "uint8"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "limitIndex",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "paymentSum",
            "type": "uint256"
          }
        ],
        "internalType": "struct SomaStarter.AccountState",
        "name": "state",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      }
    ],
    "name": "poolProps",
    "outputs": [
      {
        "internalType": "enum SomaStarter.Type",
        "name": "type_",
        "type": "uint8"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "issuanceLimit",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "startsAt",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "endsAt",
            "type": "uint256"
          },
          {
            "internalType": "contract IERC20",
            "name": "paymentToken",
            "type": "address"
          },
          {
            "internalType": "contract IERC20",
            "name": "issuanceToken",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "mantissa",
                "type": "uint256"
              }
            ],
            "internalType": "struct AttoDecimal.Instance",
            "name": "fee",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "mantissa",
                "type": "uint256"
              }
            ],
            "internalType": "struct AttoDecimal.Instance",
            "name": "rate",
            "type": "tuple"
          }
        ],
        "internalType": "struct SomaStarter.Props",
        "name": "props",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      }
    ],
    "name": "poolState",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "available",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "issuance",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "lockedPayments",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "unlockedPayments",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "nominatedOwner",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "owner",
            "type": "address"
          },
          {
            "internalType": "uint256[]",
            "name": "paymentLimits",
            "type": "uint256[]"
          },
          {
            "internalType": "bytes32",
            "name": "requiredPrivileges",
            "type": "bytes32"
          }
        ],
        "internalType": "struct SomaStarter.State",
        "name": "state",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "poolsCount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "recoverTokens",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "limitIndex",
        "type": "uint256"
      },
      {
        "internalType": "address[]",
        "name": "accounts",
        "type": "address[]"
      }
    ],
    "name": "setAccountsLimit",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "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": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "requestedPaymentAmount",
        "type": "uint256"
      }
    ],
    "name": "swap",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "paymentAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "issuanceAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "intervalIndex",
        "type": "uint256"
      }
    ],
    "name": "unlockInterval",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "withdrawnIssuanceAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      }
    ],
    "name": "unlockLinear",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "withdrawalAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "unpause",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "newRequiredPrivileges",
        "type": "bytes32"
      }
    ],
    "name": "updateRequiredPrivileges",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IERC20",
        "name": "token",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "withdrawFee",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      }
    ],
    "name": "withdrawPayments",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolIndex",
        "type": "uint256"
      }
    ],
    "name": "withdrawUnsold",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]