private ResourceMetadata httpHeadFollowRedirects(String url, int redirects) throws IOException, InterruptedException {
    if (redirects > MAX_REDIRECTS) {
      throw new IllegalStateException("Exceeded " + redirects + " redirects for " + url);
    }
    var response = httpHead(url);
    return response.redirect.isPresent() ? httpHeadFollowRedirects(response.redirect.get(), redirects + 1) : response;
  }
Starts downloading all resources in parallel, logging progress until complete.

@throws IllegalStateException if an error occurs downloading any resource, will be thrown after all resources
                              finish
planetiler-core/src/main/java/com/onthegomap/planetiler/util/Downloader.java