docs: static long awaitAll(long timeout, TimeUnit timeUnit, Collection<? extends Future<?>> futures) throws InterruptedException {
  
          long waitTime = 0;
  
          for (Future<?> future : futures) {
  
              long timeoutLeft = timeUnit.toNanos(timeout) - waitTime;
  
              if (timeoutLeft <= 0) {
                  break;
              }
  
              long startWait = System.nanoTime();
  
              try {
                  future.get(timeoutLeft, TimeUnit.NANOSECONDS);
              } catch (InterruptedException e) {
                  Thread.currentThread().interrupt();
                  throw e;
              } catch (Exception e) {
                  continue;
              } finally {
                  waitTime += System.nanoTime() - startWait;
              }
  
          }
          return waitTime;
      }