// Path: extensions/net/src/main/java/com/google/android/agera/net/HttpRequestCompilerStates.java
// interface HTBodyHeaderFieldRedirectsCachesConnectionTimeoutReadTimeoutCompile
//     extends HTBody, HTHeaderFieldRedirectsCachesConnectionTimeoutReadTimeoutCompile {}
// 
// Path: extensions/net/src/main/java/com/google/android/agera/net/HttpRequestCompilerStates.java
// interface HTCachesConnectionTimeoutReadTimeoutCompile
//     extends HTConnectionTimeoutReadTimeoutCompile {
// 
//   /**
//    * Turns off http caches.
//    */
//   @NonNull
//   HTConnectionTimeoutReadTimeoutCompile noCaches();
// }
// 
// Path: extensions/net/src/main/java/com/google/android/agera/net/HttpRequestCompilerStates.java
// interface HTCompile {
// 
//   /**
//    * Compiles a {@link HttpRequest} that containing the previously specified data.
//    */
//   @NonNull
//   HttpRequest compile();
// }
// 
// Path: extensions/net/src/main/java/com/google/android/agera/net/HttpRequestCompilerStates.java
// interface HTConnectionTimeoutReadTimeoutCompile extends HTReadTimeoutCompile {
// 
//   /**
//    * Sets a connection timeout in milliseconds.
//    */
//   @NonNull
//   HTReadTimeoutCompile connectTimeoutMs(int connectionTimeoutMs);
// }
// 
// Path: extensions/net/src/main/java/com/google/android/agera/net/HttpRequestCompilerStates.java
// interface HTHeaderFieldRedirectsCachesConnectionTimeoutReadTimeoutCompile
//     extends HTCachesConnectionTimeoutReadTimeoutCompile {
// 
//   /**
//    * Adds a header field to the {@link HttpRequest}.
//    */
//   @NonNull
//   HTHeaderFieldRedirectsCachesConnectionTimeoutReadTimeoutCompile headerField(
//       @NonNull String name, @NonNull String value);
// 
// 
//   /**
//    * Turns off follow redirects.
//    */
//   @NonNull
//   HTCachesConnectionTimeoutReadTimeoutCompile noRedirects();
// }
// 
// Path: extensions/net/src/main/java/com/google/android/agera/net/HttpRequestCompilerStates.java
// interface HTReadTimeoutCompile extends HTCompile {
// 
//   /**
//    * Sets a read timeout in milliseconds.
//    */
//   @NonNull
//   HTCompile readTimeoutMs(int readTimeoutMs);
// }


import static com.google.android.agera.Preconditions.checkNotNull;
import static com.google.android.agera.Preconditions.checkState;
import android.support.annotation.NonNull;
import com.google.android.agera.net.HttpRequestCompilerStates.HTBodyHeaderFieldRedirectsCachesConnectionTimeoutReadTimeoutCompile;
import com.google.android.agera.net.HttpRequestCompilerStates.HTCachesConnectionTimeoutReadTimeoutCompile;
import com.google.android.agera.net.HttpRequestCompilerStates.HTCompile;
import com.google.android.agera.net.HttpRequestCompilerStates.HTConnectionTimeoutReadTimeoutCompile;
import com.google.android.agera.net.HttpRequestCompilerStates.HTHeaderFieldRedirectsCachesConnectionTimeoutReadTimeoutCompile;
import com.google.android.agera.net.HttpRequestCompilerStates.HTReadTimeoutCompile;
import java.util.HashMap;
import java.util.Map;
    return this;
  }

  @NonNull
  @Override
  public HTHeaderFieldRedirectsCachesConnectionTimeoutReadTimeoutCompile headerField(
      @NonNull final String name, @NonNull final String value) {
    checkState(!compiled, ERROR_MESSAGE);
    header.put(name, value);
    return this;
  }

  @NonNull
  @Override
  public HTConnectionTimeoutReadTimeoutCompile noCaches() {
    checkState(!compiled, ERROR_MESSAGE);
    useCaches = false;
    return this;
  }

  @NonNull
  @Override
  public HTReadTimeoutCompile connectTimeoutMs(final int connectTimeoutMs) {
    checkState(!compiled, ERROR_MESSAGE);
    this.connectTimeoutMs = connectTimeoutMs;
    return this;
  }

  @NonNull
  @Override
// Path: extensions/net/src/main/java/com/google/android/agera/net/HttpRequestCompilerStates.java
// interface HTBodyHeaderFieldRedirectsCachesConnectionTimeoutReadTimeoutCompile
//     extends HTBody, HTHeaderFieldRedirectsCachesConnectionTimeoutReadTimeoutCompile {}
// 
// Path: extensions/net/src/main/java/com/google/android/agera/net/HttpRequestCompilerStates.java
// interface HTCachesConnectionTimeoutReadTimeoutCompile
//     extends HTConnectionTimeoutReadTimeoutCompile {
// 
//   /**
//    * Turns off http caches.
//    */
//   @NonNull
//   HTConnectionTimeoutReadTimeoutCompile noCaches();
// }
// 
// Path: extensions/net/src/main/java/com/google/android/agera/net/HttpRequestCompilerStates.java
// interface HTCompile {
// 
//   /**
//    * Compiles a {@link HttpRequest} that containing the previously specified data.
//    */
//   @NonNull
//   HttpRequest compile();
// }
// 
// Path: extensions/net/src/main/java/com/google/android/agera/net/HttpRequestCompilerStates.java
// interface HTConnectionTimeoutReadTimeoutCompile extends HTReadTimeoutCompile {
// 
//   /**
//    * Sets a connection timeout in milliseconds.
//    */
//   @NonNull
//   HTReadTimeoutCompile connectTimeoutMs(int connectionTimeoutMs);
// }
// 
// Path: extensions/net/src/main/java/com/google/android/agera/net/HttpRequestCompilerStates.java
// interface HTHeaderFieldRedirectsCachesConnectionTimeoutReadTimeoutCompile
//     extends HTCachesConnectionTimeoutReadTimeoutCompile {
// 
//   /**
//    * Adds a header field to the {@link HttpRequest}.
//    */
//   @NonNull
//   HTHeaderFieldRedirectsCachesConnectionTimeoutReadTimeoutCompile headerField(
//       @NonNull String name, @NonNull String value);
// 
// 
//   /**
//    * Turns off follow redirects.
//    */
//   @NonNull
//   HTCachesConnectionTimeoutReadTimeoutCompile noRedirects();
// }
// 
// Path: extensions/net/src/main/java/com/google/android/agera/net/HttpRequestCompilerStates.java
// interface HTReadTimeoutCompile extends HTCompile {
// 
//   /**
//    * Sets a read timeout in milliseconds.
//    */
//   @NonNull
//   HTCompile readTimeoutMs(int readTimeoutMs);
// }


// Path: extensions/net/src/main/java/com/google/android/agera/net/HttpRequestCompiler.java
import static com.google.android.agera.Preconditions.checkNotNull;
import static com.google.android.agera.Preconditions.checkState;
import android.support.annotation.NonNull;
import com.google.android.agera.net.HttpRequestCompilerStates.HTBodyHeaderFieldRedirectsCachesConnectionTimeoutReadTimeoutCompile;
import com.google.android.agera.net.HttpRequestCompilerStates.HTCachesConnectionTimeoutReadTimeoutCompile;
import com.google.android.agera.net.HttpRequestCompilerStates.HTCompile;
import com.google.android.agera.net.HttpRequestCompilerStates.HTConnectionTimeoutReadTimeoutCompile;
import com.google.android.agera.net.HttpRequestCompilerStates.HTHeaderFieldRedirectsCachesConnectionTimeoutReadTimeoutCompile;
import com.google.android.agera.net.HttpRequestCompilerStates.HTReadTimeoutCompile;
import java.util.HashMap;
import java.util.Map;

    return this;
  }

  @NonNull
  @Override
  public HTHeaderFieldRedirectsCachesConnectionTimeoutReadTimeoutCompile headerField(
      @NonNull final String name, @NonNull final String value) {
    checkState(!compiled, ERROR_MESSAGE);
    header.put(name, value);
    return this;
  }

  @NonNull
  @Override
  public HTConnectionTimeoutReadTimeoutCompile noCaches() {
    checkState(!compiled, ERROR_MESSAGE);
    useCaches = false;
    return this;
  }

  @NonNull
  @Override
  public HTReadTimeoutCompile connectTimeoutMs(final int connectTimeoutMs) {
    checkState(!compiled, ERROR_MESSAGE);
    this.connectTimeoutMs = connectTimeoutMs;
    return this;
  }

  @NonNull
  @Override
  public HTCompile readTimeoutMs(final int readTimeoutMs) {