module.exports = {
  pairAbi: [
    { inputs: [], stateMutability: 'nonpayable', type: 'constructor' },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'owner',
          type: 'address',
        },
        {
          indexed: true,
          internalType: 'address',
          name: 'spender',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'value',
          type: 'uint256',
        },
      ],
      name: 'Approval',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'sender',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount0',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount1',
          type: 'uint256',
        },
        { indexed: true, internalType: 'address', name: 'to', type: 'address' },
      ],
      name: 'Burn',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'addr',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'orderId',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'address',
          name: 'sellToken',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'unsoldAmount',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'address',
          name: 'buyToken',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'purchasedAmount',
          type: 'uint256',
        },
      ],
      name: 'CancelLongTermOrder',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'addr',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'orderId',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount0In',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'numberOfTimeIntervals',
          type: 'uint256',
        },
      ],
      name: 'LongTermSwap0To1',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'addr',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'orderId',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount1In',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'numberOfTimeIntervals',
          type: 'uint256',
        },
      ],
      name: 'LongTermSwap1To0',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'sender',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount0',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount1',
          type: 'uint256',
        },
      ],
      name: 'Mint',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'sender',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount0In',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount1In',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount0Out',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount1Out',
          type: 'uint256',
        },
        { indexed: true, internalType: 'address', name: 'to', type: 'address' },
      ],
      name: 'Swap',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: false,
          internalType: 'uint112',
          name: 'reserve0',
          type: 'uint112',
        },
        {
          indexed: false,
          internalType: 'uint112',
          name: 'reserve1',
          type: 'uint112',
        },
      ],
      name: 'Sync',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'from',
          type: 'address',
        },
        { indexed: true, internalType: 'address', name: 'to', type: 'address' },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'value',
          type: 'uint256',
        },
      ],
      name: 'Transfer',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: false,
          internalType: 'uint256',
          name: 'blocktimestamp',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'newReserve0',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'newReserve1',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'newTwammReserve0',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'newTwammReserve1',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'token0Bought',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'token1Bought',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'token0Sold',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'token1Sold',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'expiries',
          type: 'uint256',
        },
      ],
      name: 'VirtualOrderExecution',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'addr',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'orderId',
          type: 'uint256',
        },
        {
          indexed: true,
          internalType: 'address',
          name: 'proceedToken',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'proceeds',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'bool',
          name: 'orderExpired',
          type: 'bool',
        },
      ],
      name: 'WithdrawProceedsFromLongTermOrder',
      type: 'event',
    },
    {
      inputs: [],
      name: 'DOMAIN_SEPARATOR',
      outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'MINIMUM_LIQUIDITY',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'PERMIT_TYPEHASH',
      outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      name: 'TWAPObservationHistory',
      outputs: [
        { internalType: 'uint256', name: 'timestamp', type: 'uint256' },
        {
          internalType: 'uint256',
          name: 'price0CumulativeLast',
          type: 'uint256',
        },
        {
          internalType: 'uint256',
          name: 'price1CumulativeLast',
          type: 'uint256',
        },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: '', type: 'address' },
        { internalType: 'address', name: '', type: 'address' },
      ],
      name: 'allowance',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'spender', type: 'address' },
        { internalType: 'uint256', name: 'value', type: 'uint256' },
      ],
      name: 'approve',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: '', type: 'address' }],
      name: 'balanceOf',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'to', type: 'address' }],
      name: 'burn',
      outputs: [
        { internalType: 'uint256', name: 'amount0', type: 'uint256' },
        { internalType: 'uint256', name: 'amount1', type: 'uint256' },
      ],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'uint256', name: 'orderId', type: 'uint256' }],
      name: 'cancelLongTermSwap',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'decimals',
      outputs: [{ internalType: 'uint8', name: '', type: 'uint8' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'uint256', name: 'blockTimestamp', type: 'uint256' },
      ],
      name: 'executeVirtualOrders',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'factory',
      outputs: [{ internalType: 'address', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'user', type: 'address' },
        { internalType: 'uint256', name: 'offset', type: 'uint256' },
        { internalType: 'uint256', name: 'limit', type: 'uint256' },
      ],
      name: 'getDetailedOrdersForUser',
      outputs: [
        {
          components: [
            { internalType: 'uint256', name: 'id', type: 'uint256' },
            {
              internalType: 'uint256',
              name: 'expirationTimestamp',
              type: 'uint256',
            },
            { internalType: 'uint256', name: 'saleRate', type: 'uint256' },
            { internalType: 'address', name: 'owner', type: 'address' },
            { internalType: 'address', name: 'sellTokenAddr', type: 'address' },
            { internalType: 'address', name: 'buyTokenAddr', type: 'address' },
            { internalType: 'bool', name: 'isComplete', type: 'bool' },
          ],
          internalType: 'struct LongTermOrdersLib.Order[]',
          name: 'detailed_orders',
          type: 'tuple[]',
        },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'getNextOrderID',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'user', type: 'address' }],
      name: 'getOrderIDsForUser',
      outputs: [{ internalType: 'uint256[]', name: '', type: 'uint256[]' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'user', type: 'address' }],
      name: 'getOrderIDsForUserLength',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'uint256', name: 'blockTimestamp', type: 'uint256' },
      ],
      name: 'getReserveAfterTwamm',
      outputs: [
        { internalType: 'uint112', name: '_reserve0', type: 'uint112' },
        { internalType: 'uint112', name: '_reserve1', type: 'uint112' },
        {
          internalType: 'uint256',
          name: 'lastVirtualOrderTimestamp',
          type: 'uint256',
        },
        { internalType: 'uint112', name: '_twammReserve0', type: 'uint112' },
        { internalType: 'uint112', name: '_twammReserve1', type: 'uint112' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'getReserves',
      outputs: [
        { internalType: 'uint112', name: '_reserve0', type: 'uint112' },
        { internalType: 'uint112', name: '_reserve1', type: 'uint112' },
        { internalType: 'uint32', name: '_blockTimestampLast', type: 'uint32' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'getTWAPHistoryLength',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'uint256', name: 'orderId', type: 'uint256' }],
      name: 'getTwammOrder',
      outputs: [
        { internalType: 'uint256', name: 'id', type: 'uint256' },
        {
          internalType: 'uint256',
          name: 'expirationTimestamp',
          type: 'uint256',
        },
        { internalType: 'uint256', name: 'saleRate', type: 'uint256' },
        { internalType: 'address', name: 'owner', type: 'address' },
        { internalType: 'address', name: 'sellTokenAddr', type: 'address' },
        { internalType: 'address', name: 'buyTokenAddr', type: 'address' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'uint256', name: 'orderId', type: 'uint256' }],
      name: 'getTwammOrderProceeds',
      outputs: [
        { internalType: 'bool', name: 'orderExpired', type: 'bool' },
        { internalType: 'uint256', name: 'totalReward', type: 'uint256' },
      ],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'uint256', name: 'orderId', type: 'uint256' },
        { internalType: 'uint256', name: 'blockTimestamp', type: 'uint256' },
      ],
      name: 'getTwammOrderProceedsView',
      outputs: [
        { internalType: 'bool', name: 'orderExpired', type: 'bool' },
        { internalType: 'uint256', name: 'totalReward', type: 'uint256' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'getTwammReserves',
      outputs: [
        { internalType: 'uint112', name: '_reserve0', type: 'uint112' },
        { internalType: 'uint112', name: '_reserve1', type: 'uint112' },
        { internalType: 'uint32', name: '_blockTimestampLast', type: 'uint32' },
        { internalType: 'uint112', name: '_twammReserve0', type: 'uint112' },
        { internalType: 'uint112', name: '_twammReserve1', type: 'uint112' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'uint256', name: '_blockTimestamp', type: 'uint256' },
      ],
      name: 'getTwammRewardFactor',
      outputs: [
        {
          internalType: 'uint256',
          name: 'rewardFactorPool0AtTimestamp',
          type: 'uint256',
        },
        {
          internalType: 'uint256',
          name: 'rewardFactorPool1AtTimestamp',
          type: 'uint256',
        },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'uint256', name: '_blockTimestamp', type: 'uint256' },
      ],
      name: 'getTwammSalesRateEnding',
      outputs: [
        {
          internalType: 'uint256',
          name: 'orderPool0SalesRateEnding',
          type: 'uint256',
        },
        {
          internalType: 'uint256',
          name: 'orderPool1SalesRateEnding',
          type: 'uint256',
        },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'getTwammState',
      outputs: [
        { internalType: 'uint256', name: 'token0Rate', type: 'uint256' },
        { internalType: 'uint256', name: 'token1Rate', type: 'uint256' },
        {
          internalType: 'uint256',
          name: 'lastVirtualOrderTimestamp',
          type: 'uint256',
        },
        {
          internalType: 'uint256',
          name: 'orderTimeInterval_rtn',
          type: 'uint256',
        },
        { internalType: 'uint256', name: 'rewardFactorPool0', type: 'uint256' },
        { internalType: 'uint256', name: 'rewardFactorPool1', type: 'uint256' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: '_token0', type: 'address' },
        { internalType: 'address', name: '_token1', type: 'address' },
      ],
      name: 'initialize',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'kLast',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'uint256', name: 'amount0In', type: 'uint256' },
        {
          internalType: 'uint256',
          name: 'numberOfTimeIntervals',
          type: 'uint256',
        },
      ],
      name: 'longTermSwapFrom0To1',
      outputs: [{ internalType: 'uint256', name: 'orderId', type: 'uint256' }],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'uint256', name: 'amount1In', type: 'uint256' },
        {
          internalType: 'uint256',
          name: 'numberOfTimeIntervals',
          type: 'uint256',
        },
      ],
      name: 'longTermSwapFrom1To0',
      outputs: [{ internalType: 'uint256', name: 'orderId', type: 'uint256' }],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'to', type: 'address' }],
      name: 'mint',
      outputs: [
        { internalType: 'uint256', name: 'liquidity', type: 'uint256' },
      ],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'name',
      outputs: [{ internalType: 'string', name: '', type: 'string' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'newSwapsPaused',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: '', type: 'address' }],
      name: 'nonces',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: '', type: 'address' },
        { internalType: 'uint256', name: '', type: 'uint256' },
      ],
      name: 'orderIDsForUser',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'orderTimeInterval',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'owner', type: 'address' },
        { internalType: 'address', name: 'spender', type: 'address' },
        { internalType: 'uint256', name: 'value', type: 'uint256' },
        { internalType: 'uint256', name: 'deadline', type: 'uint256' },
        { internalType: 'uint8', name: 'v', type: 'uint8' },
        { internalType: 'bytes32', name: 'r', type: 'bytes32' },
        { internalType: 'bytes32', name: 's', type: 'bytes32' },
      ],
      name: 'permit',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'price0CumulativeLast',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'price1CumulativeLast',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'to', type: 'address' }],
      name: 'skim',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'uint256', name: 'amount0Out', type: 'uint256' },
        { internalType: 'uint256', name: 'amount1Out', type: 'uint256' },
        { internalType: 'address', name: 'to', type: 'address' },
        { internalType: 'bytes', name: 'data', type: 'bytes' },
      ],
      name: 'swap',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'symbol',
      outputs: [{ internalType: 'string', name: '', type: 'string' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'sync',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'togglePauseNewSwaps',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'token0',
      outputs: [{ internalType: 'address', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'token1',
      outputs: [{ internalType: 'address', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'totalSupply',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'to', type: 'address' },
        { internalType: 'uint256', name: 'value', type: 'uint256' },
      ],
      name: 'transfer',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'from', type: 'address' },
        { internalType: 'address', name: 'to', type: 'address' },
        { internalType: 'uint256', name: 'value', type: 'uint256' },
      ],
      name: 'transferFrom',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'twammReserve0',
      outputs: [{ internalType: 'uint112', name: '', type: 'uint112' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'twammReserve1',
      outputs: [{ internalType: 'uint112', name: '', type: 'uint112' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'twammUpToDate',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'uint256', name: 'orderId', type: 'uint256' }],
      name: 'withdrawProceedsFromLongTermSwap',
      outputs: [
        { internalType: 'bool', name: 'is_expired', type: 'bool' },
        { internalType: 'address', name: 'rewardTkn', type: 'address' },
        { internalType: 'uint256', name: 'totalReward', type: 'uint256' },
      ],
      stateMutability: 'nonpayable',
      type: 'function',
    },
  ],
  farmAbi: [
    {
      inputs: [
        { internalType: 'address', name: '_owner', type: 'address' },
        { internalType: 'address[]', name: '_rewardTokens', type: 'address[]' },
        {
          internalType: 'address[]',
          name: '_rewardManagers',
          type: 'address[]',
        },
        { internalType: 'uint256[]', name: '_rewardRates', type: 'uint256[]' },
        {
          internalType: 'address[]',
          name: '_gaugeControllers',
          type: 'address[]',
        },
        {
          internalType: 'address[]',
          name: '_rewardDistributors',
          type: 'address[]',
        },
        { internalType: 'address', name: '_stakingToken', type: 'address' },
      ],
      stateMutability: 'nonpayable',
      type: 'constructor',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'user',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'bytes32',
          name: 'kek_id',
          type: 'bytes32',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount',
          type: 'uint256',
        },
      ],
      name: 'LockedAdditional',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'user',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'bytes32',
          name: 'kek_id',
          type: 'bytes32',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'new_secs',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'new_start_ts',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'new_end_ts',
          type: 'uint256',
        },
      ],
      name: 'LockedLonger',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: false,
          internalType: 'address',
          name: 'oldOwner',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'address',
          name: 'newOwner',
          type: 'address',
        },
      ],
      name: 'OwnerChanged',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: false,
          internalType: 'address',
          name: 'newOwner',
          type: 'address',
        },
      ],
      name: 'OwnerNominated',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'user',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'address',
          name: 'token_address',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'address',
          name: 'destination_address',
          type: 'address',
        },
      ],
      name: 'RewardPaid',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'user',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'secs',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'bytes32',
          name: 'kek_id',
          type: 'bytes32',
        },
        {
          indexed: false,
          internalType: 'address',
          name: 'source_address',
          type: 'address',
        },
      ],
      name: 'StakeLocked',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'user',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'liquidity',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'bytes32',
          name: 'kek_id',
          type: 'bytes32',
        },
        {
          indexed: false,
          internalType: 'address',
          name: 'destination_address',
          type: 'address',
        },
      ],
      name: 'WithdrawLocked',
      type: 'event',
    },
    {
      inputs: [],
      name: 'acceptOwnership',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'calcCurCombinedWeight',
      outputs: [
        {
          internalType: 'uint256',
          name: 'old_combined_weight',
          type: 'uint256',
        },
        {
          internalType: 'uint256',
          name: 'new_vefxs_multiplier',
          type: 'uint256',
        },
        {
          internalType: 'uint256',
          name: 'new_combined_weight',
          type: 'uint256',
        },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'account', type: 'address' },
        { internalType: 'uint256', name: 'stake_idx', type: 'uint256' },
      ],
      name: 'calcCurrLockMultiplier',
      outputs: [
        {
          internalType: 'uint256',
          name: 'midpoint_lock_multiplier',
          type: 'uint256',
        },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        {
          internalType: 'address',
          name: 'reward_token_address',
          type: 'address',
        },
        {
          internalType: 'address',
          name: 'new_manager_address',
          type: 'address',
        },
      ],
      name: 'changeTokenManager',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'combinedWeightOf',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'earned',
      outputs: [
        { internalType: 'uint256[]', name: 'new_earned', type: 'uint256[]' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'fraxPerLPStored',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'fraxPerLPToken',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'getAllRewardTokens',
      outputs: [{ internalType: 'address[]', name: '', type: 'address[]' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'addr', type: 'address' }],
      name: 'getProxyFor',
      outputs: [{ internalType: 'address', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        {
          internalType: 'address',
          name: 'destination_address',
          type: 'address',
        },
      ],
      name: 'getReward',
      outputs: [{ internalType: 'uint256[]', name: '', type: 'uint256[]' }],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        {
          internalType: 'address',
          name: 'destination_address',
          type: 'address',
        },
        { internalType: 'bool', name: 'claim_extra_too', type: 'bool' },
      ],
      name: 'getReward2',
      outputs: [{ internalType: 'uint256[]', name: '', type: 'uint256[]' }],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        {
          internalType: 'address',
          name: 'destination_address',
          type: 'address',
        },
      ],
      name: 'getRewardExtraLogic',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'getRewardForDuration',
      outputs: [
        {
          internalType: 'uint256[]',
          name: 'rewards_per_duration_arr',
          type: 'uint256[]',
        },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'caller_addr', type: 'address' },
        { internalType: 'address', name: 'reward_token_addr', type: 'address' },
      ],
      name: 'isTokenManagerFor',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: '', type: 'address' }],
      name: 'lastRewardClaimTime',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'lastUpdateTime',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'bytes32', name: 'kek_id', type: 'bytes32' },
        { internalType: 'uint256', name: 'addl_liq', type: 'uint256' },
      ],
      name: 'lockAdditional',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'bytes32', name: 'kek_id', type: 'bytes32' },
        { internalType: 'uint256', name: 'new_ending_ts', type: 'uint256' },
      ],
      name: 'lockLonger',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'uint256', name: 'secs', type: 'uint256' }],
      name: 'lockMultiplier',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'lock_max_multiplier',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'lock_time_for_max_multiplier',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'lock_time_min',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'lockedLiquidityOf',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: '', type: 'address' },
        { internalType: 'uint256', name: '', type: 'uint256' },
      ],
      name: 'lockedStakes',
      outputs: [
        { internalType: 'bytes32', name: 'kek_id', type: 'bytes32' },
        { internalType: 'uint256', name: 'start_timestamp', type: 'uint256' },
        { internalType: 'uint256', name: 'liquidity', type: 'uint256' },
        { internalType: 'uint256', name: 'ending_timestamp', type: 'uint256' },
        { internalType: 'uint256', name: 'lock_multiplier', type: 'uint256' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'lockedStakesOf',
      outputs: [
        {
          components: [
            { internalType: 'bytes32', name: 'kek_id', type: 'bytes32' },
            {
              internalType: 'uint256',
              name: 'start_timestamp',
              type: 'uint256',
            },
            { internalType: 'uint256', name: 'liquidity', type: 'uint256' },
            {
              internalType: 'uint256',
              name: 'ending_timestamp',
              type: 'uint256',
            },
            {
              internalType: 'uint256',
              name: 'lock_multiplier',
              type: 'uint256',
            },
          ],
          internalType: 'struct FraxUnifiedFarm_ERC20.LockedStake[]',
          name: '',
          type: 'tuple[]',
        },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'lockedStakesOfLength',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'maxLPForMaxBoost',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'minVeFXSForMaxBoost',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'proxy_address', type: 'address' },
      ],
      name: 'minVeFXSForMaxBoostProxy',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: '_owner', type: 'address' }],
      name: 'nominateNewOwner',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'nominatedOwner',
      outputs: [{ internalType: 'address', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'owner',
      outputs: [{ internalType: 'address', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'periodFinish',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'proxy_address', type: 'address' },
      ],
      name: 'proxyStakedFrax',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'staker_address', type: 'address' },
      ],
      name: 'proxyToggleStaker',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: '', type: 'address' }],
      name: 'proxy_lp_balances',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'tokenAddress', type: 'address' },
        { internalType: 'uint256', name: 'tokenAmount', type: 'uint256' },
      ],
      name: 'recoverERC20',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: '', type: 'address' }],
      name: 'rewardManagers',
      outputs: [{ internalType: 'address', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'uint256', name: 'token_idx', type: 'uint256' }],
      name: 'rewardRates',
      outputs: [{ internalType: 'uint256', name: 'rwd_rate', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: '', type: 'address' }],
      name: 'rewardTokenAddrToIdx',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'rewardsDuration',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'rewardsPerToken',
      outputs: [
        {
          internalType: 'uint256[]',
          name: 'newRewardsPerTokenStored',
          type: 'uint256[]',
        },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'uint256[6]', name: '_misc_vars', type: 'uint256[6]' },
      ],
      name: 'setMiscVariables',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'bool', name: '_stakingPaused', type: 'bool' },
        { internalType: 'bool', name: '_withdrawalsPaused', type: 'bool' },
        {
          internalType: 'bool',
          name: '_rewardsCollectionPaused',
          type: 'bool',
        },
      ],
      name: 'setPauses',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        {
          internalType: 'address',
          name: 'reward_token_address',
          type: 'address',
        },
        { internalType: 'uint256', name: '_new_rate', type: 'uint256' },
        {
          internalType: 'address',
          name: '_gauge_controller_address',
          type: 'address',
        },
        {
          internalType: 'address',
          name: '_rewards_distributor_address',
          type: 'address',
        },
      ],
      name: 'setRewardVars',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'uint256', name: 'liquidity', type: 'uint256' },
        { internalType: 'uint256', name: 'secs', type: 'uint256' },
      ],
      name: 'stakeLocked',
      outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'proxy_address', type: 'address' },
      ],
      name: 'stakerSetVeFXSProxy',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: '', type: 'address' }],
      name: 'staker_designated_proxies',
      outputs: [{ internalType: 'address', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'stakesUnlocked',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'stakingToken',
      outputs: [
        { internalType: 'contract IFraxswapPair', name: '', type: 'address' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'sync',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'bool', name: 'force_update', type: 'bool' }],
      name: 'sync_gauge_weights',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: '_proxy_addr', type: 'address' },
      ],
      name: 'toggleValidVeFXSProxy',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'totalCombinedWeight',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'totalLiquidityLocked',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'unlockStakes',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'account', type: 'address' },
        { internalType: 'bool', name: 'sync_too', type: 'bool' },
      ],
      name: 'updateRewardAndBalance',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'userStakedFrax',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'veFXSMultiplier',
      outputs: [
        { internalType: 'uint256', name: 'vefxs_multiplier', type: 'uint256' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'vefxs_boost_scale_factor',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'vefxs_max_multiplier',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'vefxs_per_frax_for_max_boost',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'bytes32', name: 'kek_id', type: 'bytes32' },
        {
          internalType: 'address',
          name: 'destination_address',
          type: 'address',
        },
      ],
      name: 'withdrawLocked',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'nonpayable',
      type: 'function',
    },
  ],
  fraxCrvFarmAbi: [
    {
      inputs: [
        { internalType: 'address', name: '_owner', type: 'address' },
        { internalType: 'address', name: '_bridge_token', type: 'address' },
        { internalType: 'address', name: '_rewardsToken0', type: 'address' },
        { internalType: 'address', name: '_rewardsToken1', type: 'address' },
        { internalType: 'address', name: '_stakingToken', type: 'address' },
        { internalType: 'address', name: '_frax_address', type: 'address' },
        { internalType: 'address', name: '_timelock_address', type: 'address' },
        { internalType: 'address', name: '_rewarder_address', type: 'address' },
      ],
      stateMutability: 'nonpayable',
      type: 'constructor',
    },
    {
      anonymous: false,
      inputs: [],
      name: 'DefaultInitialization',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: false,
          internalType: 'uint256',
          name: 'multiplier',
          type: 'uint256',
        },
      ],
      name: 'LockedStakeMaxMultiplierUpdated',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: false,
          internalType: 'uint256',
          name: 'secs',
          type: 'uint256',
        },
      ],
      name: 'LockedStakeMinTime',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: false,
          internalType: 'uint256',
          name: 'secs',
          type: 'uint256',
        },
      ],
      name: 'LockedStakeTimeForMaxMultiplier',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: false,
          internalType: 'uint256',
          name: 'multiplier',
          type: 'uint256',
        },
      ],
      name: 'MaxVeFXSMultiplier',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: false,
          internalType: 'address',
          name: 'oldOwner',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'address',
          name: 'newOwner',
          type: 'address',
        },
      ],
      name: 'OwnerChanged',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: false,
          internalType: 'address',
          name: 'newOwner',
          type: 'address',
        },
      ],
      name: 'OwnerNominated',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: false,
          internalType: 'address',
          name: 'token',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount',
          type: 'uint256',
        },
      ],
      name: 'Recovered',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'user',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'reward',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'address',
          name: 'token_address',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'address',
          name: 'destination_address',
          type: 'address',
        },
      ],
      name: 'RewardPaid',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'user',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'secs',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'bytes32',
          name: 'kek_id',
          type: 'bytes32',
        },
        {
          indexed: false,
          internalType: 'address',
          name: 'source_address',
          type: 'address',
        },
      ],
      name: 'StakeLocked',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: true,
          internalType: 'address',
          name: 'user',
          type: 'address',
        },
        {
          indexed: false,
          internalType: 'uint256',
          name: 'amount',
          type: 'uint256',
        },
        {
          indexed: false,
          internalType: 'bytes32',
          name: 'kek_id',
          type: 'bytes32',
        },
        {
          indexed: false,
          internalType: 'address',
          name: 'destination_address',
          type: 'address',
        },
      ],
      name: 'WithdrawLocked',
      type: 'event',
    },
    {
      anonymous: false,
      inputs: [
        {
          indexed: false,
          internalType: 'uint256',
          name: 'scale_factor',
          type: 'uint256',
        },
      ],
      name: 'veFXSPerFraxForMaxBoostUpdated',
      type: 'event',
    },
    {
      inputs: [],
      name: 'acceptOwnership',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'migrator_address', type: 'address' },
      ],
      name: 'addMigrator',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'bridgeFXS',
      outputs: [
        { internalType: 'contract IanyFXS', name: '', type: 'address' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'calcCurCombinedWeight',
      outputs: [
        {
          internalType: 'uint256',
          name: 'old_combined_weight',
          type: 'uint256',
        },
        {
          internalType: 'uint256',
          name: 'new_vefxs_multiplier',
          type: 'uint256',
        },
        {
          internalType: 'uint256',
          name: 'new_combined_weight',
          type: 'uint256',
        },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'combinedWeightOf',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'controller_address',
      outputs: [{ internalType: 'address', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'earned',
      outputs: [
        { internalType: 'uint256', name: '', type: 'uint256' },
        { internalType: 'uint256', name: '', type: 'uint256' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'fraxPerLPToken',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'frax_address',
      outputs: [{ internalType: 'address', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'getReward',
      outputs: [
        { internalType: 'uint256', name: '', type: 'uint256' },
        { internalType: 'uint256', name: '', type: 'uint256' },
      ],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'getRewardForDuration',
      outputs: [
        { internalType: 'uint256', name: '', type: 'uint256' },
        { internalType: 'uint256', name: '', type: 'uint256' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'initializeDefault',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'isInitialized',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'lastRewardPull',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'lastUpdateTime',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'bytes32', name: 'kek_id', type: 'bytes32' },
        { internalType: 'uint256', name: 'addl_liq', type: 'uint256' },
      ],
      name: 'lockAdditional',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'uint256', name: 'secs', type: 'uint256' }],
      name: 'lockMultiplier',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'lock_max_multiplier',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'lock_time_for_max_multiplier',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'lock_time_min',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'lockedLiquidityOf',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: '', type: 'address' },
        { internalType: 'uint256', name: '', type: 'uint256' },
      ],
      name: 'lockedStakes',
      outputs: [
        { internalType: 'bytes32', name: 'kek_id', type: 'bytes32' },
        { internalType: 'uint256', name: 'start_timestamp', type: 'uint256' },
        { internalType: 'uint256', name: 'liquidity', type: 'uint256' },
        { internalType: 'uint256', name: 'ending_timestamp', type: 'uint256' },
        { internalType: 'uint256', name: 'lock_multiplier', type: 'uint256' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'lockedStakesOf',
      outputs: [
        {
          components: [
            { internalType: 'bytes32', name: 'kek_id', type: 'bytes32' },
            {
              internalType: 'uint256',
              name: 'start_timestamp',
              type: 'uint256',
            },
            { internalType: 'uint256', name: 'liquidity', type: 'uint256' },
            {
              internalType: 'uint256',
              name: 'ending_timestamp',
              type: 'uint256',
            },
            {
              internalType: 'uint256',
              name: 'lock_multiplier',
              type: 'uint256',
            },
          ],
          internalType: 'struct FraxCrossChainFarmV2.LockedStake[]',
          name: '',
          type: 'tuple[]',
        },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'migrationsOn',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'staker_address', type: 'address' },
        { internalType: 'uint256', name: 'amount', type: 'uint256' },
        { internalType: 'uint256', name: 'secs', type: 'uint256' },
        { internalType: 'uint256', name: 'start_timestamp', type: 'uint256' },
      ],
      name: 'migrator_stakeLocked_for',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'staker_address', type: 'address' },
        { internalType: 'bytes32', name: 'kek_id', type: 'bytes32' },
      ],
      name: 'migrator_withdraw_locked',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'minVeFXSForMaxBoost',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: '_owner', type: 'address' }],
      name: 'nominateNewOwner',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'nominatedOwner',
      outputs: [{ internalType: 'address', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'owner',
      outputs: [{ internalType: 'address', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'periodFinish',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'tokenAddress', type: 'address' },
        { internalType: 'uint256', name: 'tokenAmount', type: 'uint256' },
      ],
      name: 'recoverERC20',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'migrator_address', type: 'address' },
      ],
      name: 'removeMigrator',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'rewardPerToken',
      outputs: [
        { internalType: 'uint256', name: '', type: 'uint256' },
        { internalType: 'uint256', name: '', type: 'uint256' },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'rewardRate0',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'rewardRate1',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'rewarder',
      outputs: [
        {
          internalType: 'contract FraxCrossChainRewarder',
          name: '',
          type: 'address',
        },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: '', type: 'address' }],
      name: 'rewards0',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: '', type: 'address' }],
      name: 'rewards1',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'rewardsCollectionPaused',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'rewardsDuration',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'rewardsToken0',
      outputs: [
        {
          internalType: 'contract CrossChainCanonicalFXS',
          name: '',
          type: 'address',
        },
      ],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'rewardsToken1',
      outputs: [{ internalType: 'contract ERC20', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [
        {
          internalType: 'address',
          name: '_controller_address',
          type: 'address',
        },
      ],
      name: 'setController',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        {
          internalType: 'uint256',
          name: '_lock_time_for_max_multiplier',
          type: 'uint256',
        },
        { internalType: 'uint256', name: '_lock_time_min', type: 'uint256' },
      ],
      name: 'setLockedStakeTimeForMinAndMaxMultiplier',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        {
          internalType: 'uint256',
          name: '_lock_max_multiplier',
          type: 'uint256',
        },
        {
          internalType: 'uint256',
          name: '_vefxs_max_multiplier',
          type: 'uint256',
        },
        {
          internalType: 'uint256',
          name: '_vefxs_per_frax_for_max_boost',
          type: 'uint256',
        },
      ],
      name: 'setMultipliers',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: '_new_timelock', type: 'address' },
      ],
      name: 'setTimelock',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: '_vefxs_address', type: 'address' },
      ],
      name: 'setVeFXS',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'uint256', name: 'liquidity', type: 'uint256' },
        { internalType: 'uint256', name: 'secs', type: 'uint256' },
      ],
      name: 'stakeLocked',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'migrator_address', type: 'address' },
      ],
      name: 'stakerAllowMigrator',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: 'migrator_address', type: 'address' },
      ],
      name: 'stakerDisallowMigrator',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [
        { internalType: 'address', name: '', type: 'address' },
        { internalType: 'address', name: '', type: 'address' },
      ],
      name: 'staker_allowed_migrators',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'stakesUnlocked',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'stakingPaused',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'stakingToken',
      outputs: [{ internalType: 'contract I2pool', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'sweepBridgeTokens',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'sync',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'timelock_address',
      outputs: [{ internalType: 'address', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'toggleMigrations',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'toggleRewardsCollection',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'toggleStaking',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'toggleWithdrawals',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'totalCombinedWeight',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'totalLiquidityLocked',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'ttlRew0Owed',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'ttlRew0Paid',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'ttlRew1Owed',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'ttlRew1Paid',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'unlockStakes',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: '', type: 'address' }],
      name: 'userRewardPerTokenPaid0',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: '', type: 'address' }],
      name: 'userRewardPerTokenPaid1',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'userStakedFrax',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: '', type: 'address' }],
      name: 'valid_migrators',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'veFXS',
      outputs: [{ internalType: 'contract IveFXS', name: '', type: 'address' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
      name: 'veFXSMultiplier',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'vefxs_max_multiplier',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [],
      name: 'vefxs_per_frax_for_max_boost',
      outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
      stateMutability: 'view',
      type: 'function',
    },
    {
      inputs: [{ internalType: 'bytes32', name: 'kek_id', type: 'bytes32' }],
      name: 'withdrawLocked',
      outputs: [],
      stateMutability: 'nonpayable',
      type: 'function',
    },
    {
      inputs: [],
      name: 'withdrawalsPaused',
      outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
      stateMutability: 'view',
      type: 'function',
    },
  ],
  crvPairAbi: [
    {
      name: 'Transfer',
      inputs: [
        { name: 'sender', type: 'address', indexed: true },
        { name: 'receiver', type: 'address', indexed: true },
        { name: 'value', type: 'uint256', indexed: false },
      ],
      anonymous: false,
      type: 'event',
    },
    {
      name: 'Approval',
      inputs: [
        { name: 'owner', type: 'address', indexed: true },
        { name: 'spender', type: 'address', indexed: true },
        { name: 'value', type: 'uint256', indexed: false },
      ],
      anonymous: false,
      type: 'event',
    },
    {
      name: 'TokenExchange',
      inputs: [
        { name: 'buyer', type: 'address', indexed: true },
        { name: 'sold_id', type: 'int128', indexed: false },
        { name: 'tokens_sold', type: 'uint256', indexed: false },
        { name: 'bought_id', type: 'int128', indexed: false },
        { name: 'tokens_bought', type: 'uint256', indexed: false },
      ],
      anonymous: false,
      type: 'event',
    },
    {
      name: 'AddLiquidity',
      inputs: [
        { name: 'provider', type: 'address', indexed: true },
        { name: 'token_amounts', type: 'uint256[2]', indexed: false },
        { name: 'fees', type: 'uint256[2]', indexed: false },
        { name: 'invariant', type: 'uint256', indexed: false },
        { name: 'token_supply', type: 'uint256', indexed: false },
      ],
      anonymous: false,
      type: 'event',
    },
    {
      name: 'RemoveLiquidity',
      inputs: [
        { name: 'provider', type: 'address', indexed: true },
        { name: 'token_amounts', type: 'uint256[2]', indexed: false },
        { name: 'fees', type: 'uint256[2]', indexed: false },
        { name: 'token_supply', type: 'uint256', indexed: false },
      ],
      anonymous: false,
      type: 'event',
    },
    {
      name: 'RemoveLiquidityOne',
      inputs: [
        { name: 'provider', type: 'address', indexed: true },
        { name: 'token_amount', type: 'uint256', indexed: false },
        { name: 'coin_amount', type: 'uint256', indexed: false },
        { name: 'token_supply', type: 'uint256', indexed: false },
      ],
      anonymous: false,
      type: 'event',
    },
    {
      name: 'RemoveLiquidityImbalance',
      inputs: [
        { name: 'provider', type: 'address', indexed: true },
        { name: 'token_amounts', type: 'uint256[2]', indexed: false },
        { name: 'fees', type: 'uint256[2]', indexed: false },
        { name: 'invariant', type: 'uint256', indexed: false },
        { name: 'token_supply', type: 'uint256', indexed: false },
      ],
      anonymous: false,
      type: 'event',
    },
    {
      name: 'RampA',
      inputs: [
        { name: 'old_A', type: 'uint256', indexed: false },
        { name: 'new_A', type: 'uint256', indexed: false },
        { name: 'initial_time', type: 'uint256', indexed: false },
        { name: 'future_time', type: 'uint256', indexed: false },
      ],
      anonymous: false,
      type: 'event',
    },
    {
      name: 'StopRampA',
      inputs: [
        { name: 'A', type: 'uint256', indexed: false },
        { name: 't', type: 'uint256', indexed: false },
      ],
      anonymous: false,
      type: 'event',
    },
    {
      stateMutability: 'nonpayable',
      type: 'constructor',
      inputs: [],
      outputs: [],
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'initialize',
      inputs: [
        { name: '_name', type: 'string' },
        { name: '_symbol', type: 'string' },
        { name: '_coins', type: 'address[4]' },
        { name: '_rate_multipliers', type: 'uint256[4]' },
        { name: '_A', type: 'uint256' },
        { name: '_fee', type: 'uint256' },
      ],
      outputs: [],
      gas: 401588,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'decimals',
      inputs: [],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 318,
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'transfer',
      inputs: [
        { name: '_to', type: 'address' },
        { name: '_value', type: 'uint256' },
      ],
      outputs: [{ name: '', type: 'bool' }],
      gas: 77977,
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'transferFrom',
      inputs: [
        { name: '_from', type: 'address' },
        { name: '_to', type: 'address' },
        { name: '_value', type: 'uint256' },
      ],
      outputs: [{ name: '', type: 'bool' }],
      gas: 115912,
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'approve',
      inputs: [
        { name: '_spender', type: 'address' },
        { name: '_value', type: 'uint256' },
      ],
      outputs: [{ name: '', type: 'bool' }],
      gas: 37851,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'get_balances',
      inputs: [],
      outputs: [{ name: '', type: 'uint256[2]' }],
      gas: 4707,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'admin_fee',
      inputs: [],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 468,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'A',
      inputs: [],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 10764,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'A_precise',
      inputs: [],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 10726,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'get_virtual_price',
      inputs: [],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 842281,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'calc_token_amount',
      inputs: [
        { name: '_amounts', type: 'uint256[2]' },
        { name: '_is_deposit', type: 'bool' },
      ],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 1668445,
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'add_liquidity',
      inputs: [
        { name: '_amounts', type: 'uint256[2]' },
        { name: '_min_mint_amount', type: 'uint256' },
      ],
      outputs: [{ name: '', type: 'uint256' }],
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'add_liquidity',
      inputs: [
        { name: '_amounts', type: 'uint256[2]' },
        { name: '_min_mint_amount', type: 'uint256' },
        { name: '_receiver', type: 'address' },
      ],
      outputs: [{ name: '', type: 'uint256' }],
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'get_dy',
      inputs: [
        { name: 'i', type: 'int128' },
        { name: 'j', type: 'int128' },
        { name: 'dx', type: 'uint256' },
      ],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 2110507,
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'exchange',
      inputs: [
        { name: 'i', type: 'int128' },
        { name: 'j', type: 'int128' },
        { name: '_dx', type: 'uint256' },
        { name: '_min_dy', type: 'uint256' },
      ],
      outputs: [{ name: '', type: 'uint256' }],
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'exchange',
      inputs: [
        { name: 'i', type: 'int128' },
        { name: 'j', type: 'int128' },
        { name: '_dx', type: 'uint256' },
        { name: '_min_dy', type: 'uint256' },
        { name: '_receiver', type: 'address' },
      ],
      outputs: [{ name: '', type: 'uint256' }],
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'remove_liquidity',
      inputs: [
        { name: '_burn_amount', type: 'uint256' },
        { name: '_min_amounts', type: 'uint256[2]' },
      ],
      outputs: [{ name: '', type: 'uint256[2]' }],
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'remove_liquidity',
      inputs: [
        { name: '_burn_amount', type: 'uint256' },
        { name: '_min_amounts', type: 'uint256[2]' },
        { name: '_receiver', type: 'address' },
      ],
      outputs: [{ name: '', type: 'uint256[2]' }],
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'remove_liquidity_imbalance',
      inputs: [
        { name: '_amounts', type: 'uint256[2]' },
        { name: '_max_burn_amount', type: 'uint256' },
      ],
      outputs: [{ name: '', type: 'uint256' }],
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'remove_liquidity_imbalance',
      inputs: [
        { name: '_amounts', type: 'uint256[2]' },
        { name: '_max_burn_amount', type: 'uint256' },
        { name: '_receiver', type: 'address' },
      ],
      outputs: [{ name: '', type: 'uint256' }],
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'calc_withdraw_one_coin',
      inputs: [
        { name: '_burn_amount', type: 'uint256' },
        { name: 'i', type: 'int128' },
      ],
      outputs: [{ name: '', type: 'uint256' }],
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'calc_withdraw_one_coin',
      inputs: [
        { name: '_burn_amount', type: 'uint256' },
        { name: 'i', type: 'int128' },
        { name: '_previous', type: 'bool' },
      ],
      outputs: [{ name: '', type: 'uint256' }],
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'remove_liquidity_one_coin',
      inputs: [
        { name: '_burn_amount', type: 'uint256' },
        { name: 'i', type: 'int128' },
        { name: '_min_received', type: 'uint256' },
      ],
      outputs: [{ name: '', type: 'uint256' }],
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'remove_liquidity_one_coin',
      inputs: [
        { name: '_burn_amount', type: 'uint256' },
        { name: 'i', type: 'int128' },
        { name: '_min_received', type: 'uint256' },
        { name: '_receiver', type: 'address' },
      ],
      outputs: [{ name: '', type: 'uint256' }],
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'ramp_A',
      inputs: [
        { name: '_future_A', type: 'uint256' },
        { name: '_future_time', type: 'uint256' },
      ],
      outputs: [],
      gas: 162101,
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'stop_ramp_A',
      inputs: [],
      outputs: [],
      gas: 157565,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'admin_balances',
      inputs: [{ name: 'i', type: 'uint256' }],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 7740,
    },
    {
      stateMutability: 'nonpayable',
      type: 'function',
      name: 'withdraw_admin_fees',
      inputs: [],
      outputs: [],
      gas: 24046,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'coins',
      inputs: [{ name: 'arg0', type: 'uint256' }],
      outputs: [{ name: '', type: 'address' }],
      gas: 3093,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'balances',
      inputs: [{ name: 'arg0', type: 'uint256' }],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 3123,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'fee',
      inputs: [],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 3108,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'initial_A',
      inputs: [],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 3138,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'future_A',
      inputs: [],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 3168,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'initial_A_time',
      inputs: [],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 3198,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'future_A_time',
      inputs: [],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 3228,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'name',
      inputs: [],
      outputs: [{ name: '', type: 'string' }],
      gas: 13488,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'symbol',
      inputs: [],
      outputs: [{ name: '', type: 'string' }],
      gas: 11241,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'balanceOf',
      inputs: [{ name: 'arg0', type: 'address' }],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 3533,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'allowance',
      inputs: [
        { name: 'arg0', type: 'address' },
        { name: 'arg1', type: 'address' },
      ],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 3778,
    },
    {
      stateMutability: 'view',
      type: 'function',
      name: 'totalSupply',
      inputs: [],
      outputs: [{ name: '', type: 'uint256' }],
      gas: 3378,
    },
  ],
};
