// Path: dagger-servlet/src/main/java/com/leacox/dagger/servlet/scope/Scope.java
// public interface Scope {
//     public <T> T scope(Class<T> type, ObjectGraph baseGraph, Object[] scopedModules);
// 
//     public <T> T scopeInstance(T value, ObjectGraph baseGraph, Object[] scopedModules);
// 
//     String toString();
// }


import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
import com.leacox.dagger.servlet.scope.Scope;
import dagger.ObjectGraph;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Map;
import java.util.concurrent.Callable;
            this.type = type;
        }

        public static DaggerKey get(Class<?> type) {
            return new DaggerKey(type);
        }

        @Override
        public final boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            DaggerKey that = (DaggerKey) o;
            return Objects.equal(this.type, that.type);
        }

        @Override
        public final int hashCode() {
            return Objects.hashCode(type);
        }

        @Override
        public final String toString() {
            return "DaggerKey[type=" + type + "]";
        }
    }

    /**
     * HTTP servlet request scope.
     */
// Path: dagger-servlet/src/main/java/com/leacox/dagger/servlet/scope/Scope.java
// public interface Scope {
//     public <T> T scope(Class<T> type, ObjectGraph baseGraph, Object[] scopedModules);
// 
//     public <T> T scopeInstance(T value, ObjectGraph baseGraph, Object[] scopedModules);
// 
//     String toString();
// }


// Path: dagger-servlet/src/main/java/com/leacox/dagger/servlet/ServletScopes.java
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
import com.leacox.dagger.servlet.scope.Scope;
import dagger.ObjectGraph;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Map;
import java.util.concurrent.Callable;

            this.type = type;
        }

        public static DaggerKey get(Class<?> type) {
            return new DaggerKey(type);
        }

        @Override
        public final boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            DaggerKey that = (DaggerKey) o;
            return Objects.equal(this.type, that.type);
        }

        @Override
        public final int hashCode() {
            return Objects.hashCode(type);
        }

        @Override
        public final String toString() {
            return "DaggerKey[type=" + type + "]";
        }
    }

    /**
     * HTTP servlet request scope.
     */
    public static final Scope REQUEST = new Scope() {