code: public static Function<Flux<Throwable>, Publisher<?>> exponentialBackOffError(Duration minimum, Duration maximum, Duration timeout) {
          Instant finish = Instant.now().plus(timeout);
          return errors -> getDelay(minimum, maximum, finish, errors.zipWith(Flux.range(0, Integer.MAX_VALUE), (error, iteration) -> iteration.longValue()));
      }
docs: Implements an exponential backoff delay for use with {@link Mono#retryWhen(Function)}
  
  @param minimum the minimum duration
  @param maximum the maximum duration
  @param timeout the maximum amount of time to delay for
  @return a delayed {@link Publisher}