Apache Streams
Copyright 2012 and onward at The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

This product includes works derived from Apache NiFi, Copyright (c) 2014-2020
Apache Software Foundation, licensed under the Apache License, Version 2.0.
The code can be found in .github/workflows/streams-ci-workflow.yml.

Apache Streams contains subcomponents with separate copyright notices and
license terms. Your use of the source code for the these subcomponents
is subject to the terms and conditions of their respective licenses.

The full license text of each license used by any subcomponent
is maintained in src/license/licenses.

The following dependencies are also licensed under The Apache Software License, 2.0

     (The Apache Software License, Version 2.0) ZkClient (com.101tec:zkclient:0.3 - https://github.com/sgroschupf/zkclient)
     (Apache License, Version 2.0) metrics reporter config base (com.addthis.metrics:reporter-config-base:3.0.3 - https://github.com/addthis/metrics-reporter-config/reporter-config-base)
     (Apache License, Version 2.0) metrics reporter config 3.x (com.addthis.metrics:reporter-config3:3.0.3 - https://github.com/addthis/metrics-reporter-config/reporter-config3)
     (Apache License, Version 2.0) AWS SDK for Java - Core (com.amazonaws:aws-java-sdk-core:1.11.184 - https://aws.amazon.com/sdkforjava)
     (Apache License, Version 2.0) AWS Java SDK for Amazon Kinesis (com.amazonaws:aws-java-sdk-kinesis:1.11.184 - https://aws.amazon.com/sdkforjava)
     (Apache License, Version 2.0) AWS Java SDK for AWS KMS (com.amazonaws:aws-java-sdk-kms:1.11.184 - https://aws.amazon.com/sdkforjava)
     (Apache License, Version 2.0) AWS Java SDK for Amazon S3 (com.amazonaws:aws-java-sdk-s3:1.11.184 - https://aws.amazon.com/sdkforjava)
     (Apache License, Version 2.0) JMES Path Query library (com.amazonaws:jmespath-java:1.11.184 - https://aws.amazon.com/sdkforjava)
     (The Apache Software License, Version 2.0) Riak Client for Java (com.basho.riak:riak-client:2.1.1 - https://github.com/basho/riak-java-client)
     (The Apache Software License, Version 2.0) JCommander (com.beust:jcommander:1.48 - http://beust.com/jcommander)
     (Apache 2.0) jcommander (com.beust:jcommander:1.64 - http://jcommander.org)
     (The Apache Software License, Version 2.0) HPPC Collections (com.carrotsearch:hppc:0.5.4 - http://labs.carrotsearch.com/hppc.html/hppc)
     (The Apache Software License, Version 2.0) HPPC Collections (com.carrotsearch:hppc:0.7.1 - http://labs.carrotsearch.com/hppc.html/hppc)
     (The Apache Software License, Version 2.0) RandomizedTesting Randomized Runner (com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.5.3 - https://github.com/randomizedtesting/randomizedtesting/randomizedtesting-runner)
     (Apache License, Version 2.0) stream-lib (com.clearspring.analytics:stream:2.5.2 - https://github.com/clearspring/stream-lib)
     (Apache License 2.0) Annotations for Metrics (com.codahale.metrics:metrics-annotation:3.0.2 - http://metrics.codahale.com/metrics-annotation/)
     (Apache License 2.0) Metrics Core (com.codahale.metrics:metrics-core:3.0.2 - http://metrics.codahale.com/metrics-core/)
     (Apache License 2.0) Metrics Health Checks (com.codahale.metrics:metrics-healthchecks:3.0.2 - http://metrics.codahale.com/metrics-healthchecks/)
     (Apache License 2.0) Metrics Integration for Jersey (com.codahale.metrics:metrics-jersey:3.0.2 - http://metrics.codahale.com/metrics-jersey/)
     (Apache License 2.0) Metrics Integration for Jetty 9 (com.codahale.metrics:metrics-jetty9:3.0.2 - http://metrics.codahale.com/metrics-jetty9/)
     (Apache License 2.0) Jackson Integration for Metrics (com.codahale.metrics:metrics-json:3.0.2 - http://metrics.codahale.com/metrics-json/)
     (Apache License 2.0) JVM Integration for Metrics (com.codahale.metrics:metrics-jvm:3.0.2 - http://metrics.codahale.com/metrics-jvm/)
     (Apache License 2.0) Metrics Integration for Logback (com.codahale.metrics:metrics-logback:3.0.2 - http://metrics.codahale.com/metrics-logback/)
     (Apache License 2.0) Metrics Utility Servlets (com.codahale.metrics:metrics-servlets:3.0.2 - http://metrics.codahale.com/metrics-servlets/)
     (Apache 2) DataStax Java Driver for Apache Cassandra - Core (com.datastax.cassandra:cassandra-driver-core:3.3.0 - https://github.com/datastax/java-driver/cassandra-driver-core)
     (Apache 2) DataStax Java Driver for Apache Cassandra - Object Mapping (com.datastax.cassandra:cassandra-driver-mapping:3.3.0 - https://github.com/datastax/java-driver/cassandra-driver-mapping)
     (The Apache Software License, Version 2.0) aalto-xml (com.fasterxml:aalto-xml:1.0.0 - http://github.com/FasterXML/aalto-xml/)
     (The Apache Software License, Version 2.0) ClassMate (com.fasterxml:classmate:1.0.0 - http://github.com/cowtowncoder/java-classmate)
     (The Apache Software License, Version 2.0) Jackson-XML-databind (com.fasterxml:jackson-xml-databind:0.6.2 - http://wiki.fasterxml.com/JacksonExtensionXmlDataBinding)
     (The Apache Software License, Version 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.2.0 - http://wiki.fasterxml.com/JacksonHome)
     (The Apache Software License, Version 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.7.0 - http://github.com/FasterXML/jackson)
     (The Apache Software License, Version 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.7.9 - http://github.com/FasterXML/jackson)
     (The Apache Software License, Version 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.8.0 - http://github.com/FasterXML/jackson)
     (The Apache Software License, Version 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.2.0 - http://wiki.fasterxml.com/JacksonHome)
     (The Apache Software License, Version 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.7.9 - https://github.com/FasterXML/jackson-core)
     (The Apache Software License, Version 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.8.7 - https://github.com/FasterXML/jackson-core)
     (The Apache Software License, Version 2.0) jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.7.9 - http://github.com/FasterXML/jackson)
     (The Apache Software License, Version 2.0) jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.8.7 - http://github.com/FasterXML/jackson)
     (Apache License, Version 2.0) Findbugs Annotations under Apache License (com.github.stephenc.findbugs:findbugs-annotations:1.3.9-1 - http://stephenc.github.com/findbugs-annotations)
     (The Apache Software License, Version 2.0) json-flattener (com.github.wnameless:json-flattener:0.5.0 - https://github.com/wnameless/json-flattener)
     (The Apache Software License, Version 2.0) Google APIs Client Library for Java (com.google.api-client:google-api-client:1.22.0 - https://github.com/google/google-api-java-client/google-api-client)
     (The Apache Software License, Version 2.0) Google APIs Client Library for Java (com.google.api-client:google-api-client:1.23.0 - https://github.com/google/google-api-java-client/google-api-client)
     (The Apache Software License, Version 2.0) Google+ API v1-rev530-1.23.0 (com.google.apis:google-api-services-plus:v1-rev530-1.23.0 - http://nexus.sonatype.org/oss-repository-hosting.html/google-api-services-plus)
     (The Apache Software License, Version 2.0) YouTube Data API v3-rev178-1.22.0 (com.google.apis:google-api-services-youtube:v3-rev178-1.22.0 - http://nexus.sonatype.org/oss-repository-hosting.html/google-api-services-youtube)
     (The Apache Software License, Version 2.0) FindBugs-jsr305 (com.google.code.findbugs:jsr305:1.3.9 - http://findbugs.sourceforge.net/)
     (The Apache Software License, Version 2.0) FindBugs-jsr305 (com.google.code.findbugs:jsr305:2.0.1 - http://findbugs.sourceforge.net/)
     (The Apache Software License, Version 2.0) FindBugs-jsr305 (com.google.code.findbugs:jsr305:2.0.3 - https://code.google.com/p/jsr-305/)
     (The Apache Software License, Version 2.0) FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.0 - http://findbugs.sourceforge.net/)
     (The Apache Software License, Version 2.0) FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.1 - http://findbugs.sourceforge.net/)
     (The Apache Software License, Version 2.0) Gson (com.google.code.gson:gson:2.2.4 - http://code.google.com/p/google-gson/)
     (Apache License, Version 2.0) javaparser (com.google.code.javaparser:javaparser:1.0.11 - http://code.google.com/p/javaparser/)
     (The Apache Software License, Version 2.0) Google Collections Library (com.google.collections:google-collections:1.0 - http://code.google.com/p/google-collections/)
     (The Apache Software License, Version 2.0) Guava: Google Core Libraries for Java (com.google.guava:guava:18.0 - http://code.google.com/p/guava-libraries/guava)
     (The Apache Software License, Version 2.0) Guava: Google Core Libraries for Java (com.google.guava:guava:20.0 - https://github.com/google/guava/guava)
     (The Apache Software License, Version 2.0) Guava: Google Core Libraries for Java (JDK5 Backport) (com.google.guava:guava-jdk5:17.0 - http://code.google.com/p/guava-libraries/guava-jdk5)
     (The Apache Software License, Version 2.0) Google HTTP Client Library for Java (com.google.http-client:google-http-client:1.22.0 - https://github.com/google/google-http-java-client/google-http-client)
     (The Apache Software License, Version 2.0) Google HTTP Client Library for Java (com.google.http-client:google-http-client:1.23.0 - https://github.com/google/google-http-java-client/google-http-client)
     (The Apache Software License, Version 2.0) Jackson 2 extensions to the Google HTTP Client Library for Java. (com.google.http-client:google-http-client-jackson2:1.22.0 - https://github.com/google/google-http-java-client/google-http-client-jackson2)
     (The Apache Software License, Version 2.0) Jackson 2 extensions to the Google HTTP Client Library for Java. (com.google.http-client:google-http-client-jackson2:1.23.0 - https://github.com/google/google-http-java-client/google-http-client-jackson2)
     (The Apache Software License, Version 2.0) Google Guice - Core Library (com.google.inject:guice:3.0 - http://code.google.com/p/google-guice/guice/)
     (The Apache Software License, Version 2.0) Google Guice - Extensions - Servlet (com.google.inject.extensions:guice-servlet:4.0-beta5 - https://github.com/google/guice/extensions-parent/guice-servlet)
     (The Apache Software License, Version 2.0) Google OAuth Client Library for Java (com.google.oauth-client:google-oauth-client:1.22.0 - https://github.com/google/google-oauth-java-client/google-oauth-client)
     (The Apache Software License, Version 2.0) Google OAuth Client Library for Java (com.google.oauth-client:google-oauth-client:1.23.0 - https://github.com/google/google-oauth-java-client/google-oauth-client)
     (The Apache Software License, Version 2.0) Java 6 (and higher) extensions to the Google OAuth Client Library for Java. (com.google.oauth-client:google-oauth-client-java6:1.22.0 - https://github.com/google/google-oauth-java-client/google-oauth-client-java6)
     (The Apache Software License, Version 2.0) Jetty extensions to the Google OAuth Client Library for Java. (com.google.oauth-client:google-oauth-client-jetty:1.22.0 - https://github.com/google/google-oauth-java-client/google-oauth-client-jetty)
     (The Apache Software License, Version 2.0) Jackson-dataformat-CBOR (com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.6.7 - http://wiki.fasterxml.com/JacksonForCbor)
     (The Apache Software License, Version 2.0) Jackson dataformat: CBOR (com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.8.1 - http://github.com/FasterXML/jackson-dataformats-binary)
     (The Apache Software License, Version 2.0) Jackson dataformat: Smile (com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.8.1 - http://github.com/FasterXML/jackson-dataformats-binary)
     (The Apache Software License, Version 2.0) Jackson-dataformat-XML (com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.7.9 - http://wiki.fasterxml.com/JacksonExtensionXmlDataBinding)
     (The Apache Software License, Version 2.0) Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.7.9 - https://github.com/FasterXML/jackson)
     (The Apache Software License, Version 2.0) Jackson datatype: Guava (com.fasterxml.jackson.datatype:jackson-datatype-guava:2.7.9 - https://github.com/FasterXML/jackson-datatypes-collections)
     (The Apache Software License, Version 2.0) Jackson-datatype-Joda (com.fasterxml.jackson.datatype:jackson-datatype-joda:2.7.9 - http://wiki.fasterxml.com/JacksonModuleJoda)
     (GNU Lesser General Public License (LGPL), Version 2.1) (The Apache Software License, Version 2.0) JAX-RS provider for JSON content type (org.codehaus.jackson:jackson-jaxrs:1.8.3 - http://jackson.codehaus.org)
     (GNU Lesser General Public License (LGPL), Version 2.1) (The Apache Software License, Version 2.0) Xml Compatibility extensions for Jackson (org.codehaus.jackson:jackson-xc:1.9.2 - http://jackson.codehaus.org)
     (GNU Lesser General Public License, Version 2.1) (The Apache Software License, Version 2.0) Jackson-JAXRS-base (com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.3.3 - http://wiki.fasterxml.com/JacksonHome/jackson-jaxrs-base)
     (GNU Lesser General Public License, Version 2.1) (The Apache Software License, Version 2.0) Jackson-JAXRS-JSON (com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.3.3 - http://wiki.fasterxml.com/JacksonHome/jackson-jaxrs-json-provider)
     (The Apache Software License, Version 2.0) Jackson module: Afterburner (com.fasterxml.jackson.module:jackson-module-afterburner:2.7.9 - https://github.com/FasterXML/jackson-modules-base)
     (The Apache Software License, Version 2.0) Jackson-module-JAXB-annotations (com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.7.9 - http://github.com/FasterXML/jackson-module-jaxb-annotations)
     (The Apache Software License, Version 2.0) Jackson module: Paranamer (com.fasterxml.jackson.module:jackson-module-paranamer:2.7.9 - https://github.com/FasterXML/jackson-modules-base)
     (The Apache Software License, Version 2.0) jackson-module-scala (com.fasterxml.jackson.module:jackson-module-scala_2.11:2.7.9 - http://wiki.fasterxml.com/JacksonModuleScala)
     (The Apache Software License, Version 2.0) Caffeine cache (com.github.ben-manes.caffeine:caffeine:2.2.6 - https://github.com/ben-manes/caffeine)
     (The Apache Software License, Version 2.0) Java Agent for Memory Measurements (com.github.jbellis:jamm:0.3.0 - https://github.com/jbellis/jamm/)
     (The Apache Software License, Version 2.0) jffi (com.github.jnr:jffi:1.2.10 - http://github.com/jnr/jffi)
     (The Apache Software License, Version 2.0) jnr-constants (com.github.jnr:jnr-constants:0.9.0 - http://github.com/jnr/jnr-constants)
     (The Apache Software License, Version 2.0) jnr-ffi (com.github.jnr:jnr-ffi:2.0.7 - http://github.com/jnr/jnr-ffi)
     (The Apache Software License, Version 2.0) Concurrent-Trees (com.googlecode.concurrent-trees:concurrent-trees:2.4.0 - http://code.google.com/p/concurrent-trees/)
     (The Apache Software License, Version 2.0) ConcurrentLinkedHashMap (com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4 - http://code.google.com/p/concurrentlinkedhashmap)
     (The Apache Software License, Version 2.0) Gmail4J (com.googlecode.gmail4j:gmail4j:0.4 - http://gmail4j.googlecode.com)
     (The Apache Software License, Version 2.0) JSON.simple (com.googlecode.json-simple:json-simple:1.1 - http://code.google.com/p/json-simple/)
     (Apache License, Version 2.0) OpenHMS Common Utilities (com.healthmarketscience.common:common-util:1.1.1 - http://openhms.sourceforge.net/common-util)
     (The Apache Software License, Version 2.0) Dropwizard Guice Support (com.hubspot.dropwizard:dropwizard-guice:0.7.1 - https://github.com/HubSpot/dropwizard-guice)
     (Apache License, Version 2.0) java-xmlbuilder (com.jamesmurty.utils:java-xmlbuilder:0.4 - http://code.google.com/p/java-xmlbuilder/)
     (The Apache Software License, Version 2.0) project ':json-path' (com.jayway.jsonpath:json-path:2.4.0 - https://github.com/jayway/JsonPath)
     (The Apache Software License, Version 2.0) project ':json-path-assert' (com.jayway.jsonpath:json-path-assert:2.4.0 - https://github.com/jayway/JsonPath)
     (The Apache Software License, Version 2.0) Disruptor Framework (com.lmax:disruptor:3.0.1 - http://lmax-exchange.github.com/disruptor)
     (Apache License Version 2.0) JsonSchemaValidator (com.networknt:json-schema-validator:0.1.10 - https://github.com/networknt/json-schema-validator)
     (Apache License 2.0) Ning-compress-LZF (com.ning:compress-lzf:0.8.4 - http://github.com/ning/compress)
     (Apache License 2.0) Compress-LZF (com.ning:compress-lzf:1.0.2 - http://github.com/ning/compress)
     (The Apache Software License, Version 2.0) rome (com.rometools:rome:1.7.4 - http://rometools.com/rome)
     (The Apache Software License, Version 2.0) rome-utils (com.rometools:rome-utils:1.7.4 - http://rometools.com/rome-utils)
     (The Apache Software License, Version 2.0) Spatial4J (com.spatial4j:spatial4j:0.5 - http://nexus.sonatype.org/oss-repository-hosting.html/spatial4j)
     (Apache License Version 2.0) Tape (com.squareup:tape:1.2.3 - http://github.com/square/tape/tape/)
     (Apache License, Version 2.0) fastinfoset (com.sun.xml.fastinfoset:FastInfoset:1.2.12 - http://fi.java.net)
     (The Apache Software License, Version 2.0) T-Digest (com.tdunning:t-digest:3.0 - https://github.com/tdunning/t-digest)
     (Apache 2) Thrift Server implementation backed by LMAX Disruptor (com.thinkaurelius.thrift:thrift-server:0.3.7 - http://github.com/xedin/disruptor_thrift_server)
     (The Apache Software License, Version 2.0) QDox (com.thoughtworks.qdox:qdox:2.0-M3 - http://qdox.codehaus.org)
     (Apache 2) chill-java (com.twitter:chill-java:0.7.4 - https://github.com/twitter/chill)
     (Apache 2) chill (com.twitter:chill_2.11:0.7.4 - https://github.com/twitter/chill)
     (The Apache Software License, Version 2.0) Hosebird Client Core (com.twitter:hbc-core:2.2.0 - http://github.com/twitter/hbc/hbc-core)
     (The Apache Software License, Version 2.0) JOAuth (com.twitter:joauth:6.0.2 - http://github.com/twitter/joauth)
     (Apache License, Version 2.0) config (com.typesafe:config:1.2.0 - https://github.com/typesafehub/config)
     (Apache License, Version 2.0) config (com.typesafe:config:1.3.2 - https://github.com/typesafehub/config)
     (Apache License, Version 2.0) ssl-config-core (com.typesafe:ssl-config-core_2.11:0.2.1 - https://github.com/typesafehub/ssl-config)
     (Apache License, Version 2.0) akka-actor (com.typesafe.akka:akka-actor_2.11:2.4.20 - http://akka.io/)
     (Apache License, Version 2.0) akka-protobuf (com.typesafe.akka:akka-protobuf_2.11:2.4.20 - http://akka.io/)
     (Apache License, Version 2.0) akka-slf4j (com.typesafe.akka:akka-slf4j_2.11:2.4.20 - http://akka.io/)
     (Apache License, Version 2.0) akka-stream (com.typesafe.akka:akka-stream_2.11:2.4.20 - http://akka.io/)
     (Apache License 2.0) Metrics Annotations (com.yammer.metrics:metrics-annotation:2.2.0 - http://metrics.codahale.com/metrics-annotation/)
     (Apache License 2.0) Metrics Core Library (com.yammer.metrics:metrics-core:2.2.0 - http://metrics.codahale.com/metrics-core/)
     (Apache License, Version 2.0) commons-beanutils (commons-beanutils:commons-beanutils:1.7.0 - no url defined)
     (The Apache Software License, Version 2.0) Apache Commons BeanUtils (commons-beanutils:commons-beanutils:1.9.2 - http://commons.apache.org/proper/commons-beanutils/)
     (The Apache Software License, Version 2.0) Commons BeanUtils Core (commons-beanutils:commons-beanutils-core:1.8.0 - http://commons.apache.org/beanutils/)
     (The Apache Software License, Version 2.0) Commons Chain (commons-chain:commons-chain:1.1 - http://jakarta.apache.org/commons/${pom.artifactId.substring(8)}/)
     (The Apache Software License, Version 2.0) CLI (commons-cli:commons-cli:1.1 - http://jakarta.apache.org/commons/cli/)
     (The Apache Software License, Version 2.0) Commons CLI (commons-cli:commons-cli:1.2 - http://commons.apache.org/cli/)
     (Apache License, Version 2.0) Apache Commons CLI (commons-cli:commons-cli:1.3.1 - http://commons.apache.org/proper/commons-cli/)
     (Apache License, Version 2.0) Apache Commons Codec (commons-codec:commons-codec:1.10 - http://commons.apache.org/proper/commons-codec/)
     (Apache License, Version 2.0) Codec (commons-codec:commons-codec:1.2 - no url defined)
     (The Apache Software License, Version 2.0) Codec (commons-codec:commons-codec:1.3 - http://jakarta.apache.org/commons/codec/)
     (The Apache Software License, Version 2.0) Commons Codec (commons-codec:commons-codec:1.4 - http://commons.apache.org/codec/)
     (The Apache Software License, Version 2.0) Apache Commons Codec (commons-codec:commons-codec:1.9 - http://commons.apache.org/proper/commons-codec/)
     (The Apache Software License, Version 2.0) Commons Collections (commons-collections:commons-collections:3.2.1 - http://commons.apache.org/collections/)
     (Apache License, Version 2.0) Apache Commons Collections (commons-collections:commons-collections:3.2.2 - http://commons.apache.org/collections/)
     (The Apache Software License, Version 2.0) Commons Configuration (commons-configuration:commons-configuration:1.6 - http://commons.apache.org/${pom.artifactId.substring(8)}/)
     (The Apache Software License, Version 2.0) Commons Daemon (commons-daemon:commons-daemon:1.0.13 - http://commons.apache.org/daemon/)
     (The Apache Software License, Version 2.0) Digester (commons-digester:commons-digester:1.8 - http://jakarta.apache.org/commons/digester/)
     (The Apache Software License, Version 2.0) Commons Digester (commons-digester:commons-digester:1.8.1 - http://commons.apache.org/digester/)
     (Apache License) HttpClient (commons-httpclient:commons-httpclient:3.1 - http://jakarta.apache.org/httpcomponents/httpclient-3.x/)
     (Apache License, Version 2.0) Apache Commons IO (commons-io:commons-io:2.5 - http://commons.apache.org/proper/commons-io/)
     (The Apache Software License, Version 2.0) Commons Lang (commons-lang:commons-lang:2.6 - http://commons.apache.org/lang/)
     (The Apache Software License, Version 2.0) Logging (commons-logging:commons-logging-api:1.1 - http://jakarta.apache.org/commons/logging/)
     (The Apache Software License, Version 2.0) Commons Net (commons-net:commons-net:3.1 - http://commons.apache.org/net/)
     (The Apache Software License, Version 2.0) Validator (commons-validator:commons-validator:1.3.1 - http://jakarta.apache.org/commons/${pom.artifactId.substring(8)}/)
     (Apache License, Version 2.0) Apache Commons Validator (commons-validator:commons-validator:1.6 - http://commons.apache.org/proper/commons-validator/)
     (Apache License 2.0) Dropwizard Configuration Support (io.dropwizard:dropwizard-configuration:0.7.1 - http://www.dropwizard.io/0.7.1/dropwizard-configuration)
     (Apache License 2.0) Dropwizard (io.dropwizard:dropwizard-core:0.7.1 - http://www.dropwizard.io/0.7.1/dropwizard-core)
     (Apache License 2.0) Dropwizard Jackson Support (io.dropwizard:dropwizard-jackson:0.7.1 - http://www.dropwizard.io/0.7.1/dropwizard-jackson)
     (Apache License 2.0) Dropwizard Jersey Support (io.dropwizard:dropwizard-jersey:0.7.1 - http://www.dropwizard.io/0.7.1/dropwizard-jersey)
     (Apache License 2.0) Dropwizard Jetty Support (io.dropwizard:dropwizard-jetty:0.7.1 - http://www.dropwizard.io/0.7.1/dropwizard-jetty)
     (Apache License 2.0) Dropwizard Lifecycle Support (io.dropwizard:dropwizard-lifecycle:0.7.1 - http://www.dropwizard.io/0.7.1/dropwizard-lifecycle)
     (Apache License 2.0) Dropwizard Logging Support (io.dropwizard:dropwizard-logging:0.7.1 - http://www.dropwizard.io/0.7.1/dropwizard-logging)
     (Apache License 2.0) Dropwizard Metrics Support (io.dropwizard:dropwizard-metrics:0.7.1 - http://www.dropwizard.io/0.7.1/dropwizard-metrics)
     (Apache License 2.0) Dropwizard Servlet Support (io.dropwizard:dropwizard-servlets:0.7.1 - http://www.dropwizard.io/0.7.1/dropwizard-servlets)
     (Apache License 2.0) Dropwizard Test Helpers (io.dropwizard:dropwizard-testing:0.7.1 - http://www.dropwizard.io/0.7.1/dropwizard-testing)
     (Apache License 2.0) Dropwizard Utility Classes (io.dropwizard:dropwizard-util:0.7.1 - http://www.dropwizard.io/0.7.1/dropwizard-util)
     (Apache License 2.0) Dropwizard Validation Support (io.dropwizard:dropwizard-validation:0.7.1 - http://www.dropwizard.io/0.7.1/dropwizard-validation)
     (Apache License 2.0) Metrics Core (io.dropwizard.metrics:metrics-core:3.1.0 - http://metrics.codahale.com/metrics-core/)
     (Apache License 2.0) JVM Integration for Metrics (io.dropwizard.metrics:metrics-jvm:3.1.0 - http://metrics.codahale.com/metrics-jvm/)
     (Apache License, Version 2.0) Netty (io.netty:netty:3.10.6.Final - http://netty.io/)
     (Apache License, Version 2.0) The Netty Project (io.netty:netty:3.7.0.Final - http://netty.io/)
     (Apache License, Version 2.0) Netty/All-in-One (io.netty:netty-all:4.0.23.Final - http://netty.io/netty-all/)
     (Apache License, Version 2.0) Netty/All-in-One (io.netty:netty-all:4.0.44.Final - http://netty.io/netty-all/)
     (Apache License, Version 2.0) Netty/All-in-One (io.netty:netty-all:4.1.5.Final - http://netty.io/netty-all/)
     (Apache License, Version 2.0) Netty/Buffer (io.netty:netty-buffer:4.0.47.Final - http://netty.io/netty-buffer/)
     (Apache License, Version 2.0) Netty/Codec (io.netty:netty-codec:4.0.47.Final - http://netty.io/netty-codec/)
     (Apache License, Version 2.0) Netty/Common (io.netty:netty-common:4.0.47.Final - http://netty.io/netty-common/)
     (Apache License, Version 2.0) Netty/Handler (io.netty:netty-handler:4.0.47.Final - http://netty.io/netty-handler/)
     (Apache License, Version 2.0) Netty/Transport (io.netty:netty-transport:4.0.47.Final - http://netty.io/netty-transport/)
     (Apache License, Version 2.0) fastutil (it.unimi.dsi:fastutil:6.5.7 - http://fasutil.di.unimi.it/)
     (Apache License, Version 2.0) CDI APIs (javax.enterprise:cdi-api:1.0 - http://www.seamframework.org/Weld/cdi-api)
     (The Apache Software License, Version 2.0) javax.inject (javax.inject:javax.inject:1 - http://code.google.com/p/atinject/)
     (Apache License, Version 2.0) Bean Validation API (javax.validation:validation-api:1.0.0.GA - no url defined)
     (The Apache Software License, Version 2.0) Bean Validation API (javax.validation:validation-api:1.1.0.Final - http://beanvalidation.org)
     (Apache 2) Joda-Time (joda-time:joda-time:2.9.5 - http://www.joda.org/joda-time/)
     (Apache 2) Joda-Time (joda-time:joda-time:2.9.9 - http://www.joda.org/joda-time/)
     (The Apache Software License, Version 2.0) Apache Log4j (log4j:log4j:1.2.17 - http://logging.apache.org/log4j/1.2/)
     (Apache License, Version 2.0) An open source Java toolkit for Amazon S3 (net.java.dev.jets3t:jets3t:0.9.0 - http://www.jets3t.org)
     (Apache License v2.0) (LGPL, version 2.1) Java Native Access (net.java.dev.jna:jna:4.4.0 - https://github.com/java-native-access/jna)
     (Apache 2) ROME, RSS and atOM utilitiEs for Java (net.java.dev.rome:rome:1.0.0 - https://rome.dev.java.net/)
     (The Apache Software License, Version 2.0) LZ4 and xxHash (net.jpountz.lz4:lz4:1.3.0 - https://github.com/jpountz/lz4-java)
     (The Apache Software License, Version 2.0) ASM based accessors helper used by json-smart (net.minidev:accessors-smart:1.2 - http://www.minidev.net/)
     (The Apache Software License, Version 2.0) JSON Small and Fast Parser (net.minidev:json-smart:2.3 - http://www.minidev.net/)
     (The Apache Software License, Version 2.0) JAXB Utilities (nz.net.ultraq.jaxb:jaxb-utilities:1.3.0 - http://www.ultraq.net.nz/programming/jaxb-utilities/)
     (Apache License, Version 2.0) org.apache.tools.ant (org.apache.ant:ant:1.7.0 - http://ant.apache.org/ant/)
     (The Apache Software License, Version 2.0) Apache Ant Core (org.apache.ant:ant:1.9.7 - http://ant.apache.org/)
     (Apache License, Version 2.0) ant-launcher (org.apache.ant:ant-launcher:1.7.0 - http://ant.apache.org/ant-launcher/)
     (The Apache Software License, Version 2.0) Apache Ant Launcher (org.apache.ant:ant-launcher:1.9.7 - http://ant.apache.org/)
     (The Apache Software License, Version 2.0) Apache Avro (org.apache.avro:avro:1.7.4 - http://avro.apache.org)
     (The Apache Software License, Version 2.0) Apache Cassandra (org.apache.cassandra:cassandra-all:3.11.0 - http://cassandra.apache.org)
     (The Apache Software License, Version 2.0) Apache Cassandra (org.apache.cassandra:cassandra-thrift:3.11.0 - http://cassandra.apache.org)
     (The Apache Software License, Version 2.0) Commons Compress (org.apache.commons:commons-compress:1.4.1 - http://commons.apache.org/compress/)
     (Apache License, Version 2.0) Apache Commons Lang (org.apache.commons:commons-lang3:3.5 - http://commons.apache.org/proper/commons-lang/)
     (Apache License, Version 2.0) Apache Commons Lang (org.apache.commons:commons-lang3:3.6 - http://commons.apache.org/proper/commons-lang/)
     (The Apache Software License, Version 2.0) Commons Math (org.apache.commons:commons-math3:3.1.1 - http://commons.apache.org/math/)
     (The Apache Software License, Version 2.0) Commons Math (org.apache.commons:commons-math3:3.2 - http://commons.apache.org/proper/commons-math/)
     (The Apache Software License, Version 2.0) Apache Commons Math (org.apache.commons:commons-math3:3.5 - http://commons.apache.org/proper/commons-math/)
     (Apache License, Version 2.0) Apache Commons Text (org.apache.commons:commons-text:1.2 - http://commons.apache.org/proper/commons-text/)
     (The Apache Software License, Version 2.0) Curator Client (org.apache.curator:curator-client:2.7.1 - http://curator.apache.org/curator-client)
     (The Apache Software License, Version 2.0) Curator Framework (org.apache.curator:curator-framework:2.7.1 - http://curator.apache.org/curator-framework)
     (The Apache Software License, Version 2.0) Curator Recipes (org.apache.curator:curator-recipes:2.7.1 - http://curator.apache.org/curator-recipes)
     (The Apache Software License, Version 2.0) Apache Directory API ASN.1 API (org.apache.directory.api:api-asn1-api:1.0.0-M20 - http://directory.apache.org/api-parent/api-asn1-parent/api-asn1-api/)
     (The Apache Software License, Version 2.0) Apache Directory LDAP API Utilities (org.apache.directory.api:api-util:1.0.0-M20 - http://directory.apache.org/api-parent/api-util/)
     (The Apache Software License, Version 2.0) ApacheDS I18n (org.apache.directory.server:apacheds-i18n:2.0.0-M15 - http://directory.apache.org/apacheds/1.5/apacheds-i18n)
     (The Apache Software License, Version 2.0) ApacheDS Protocol Kerberos Codec (org.apache.directory.server:apacheds-kerberos-codec:2.0.0-M15 - http://directory.apache.org/apacheds/1.5/apacheds-kerberos-codec)
     (The Apache Software License, Version 2.0) flink-annotations (org.apache.flink:flink-annotations:1.4.2 - http://flink.apache.org/flink-annotations)
     (The Apache Software License, Version 2.0) flink-clients (org.apache.flink:flink-clients_2.11:1.4.2 - http://flink.apache.org/flink-clients_2.11)
     (The Apache Software License, Version 2.0) flink-connector-filesystem (org.apache.flink:flink-connector-filesystem_2.11:1.4.2 - http://flink.apache.org/flink-connectors/flink-connector-filesystem_2.11)
     (The Apache Software License, Version 2.0) flink-core (org.apache.flink:flink-core:1.4.2 - http://flink.apache.org/flink-core)
     (The Apache Software License, Version 2.0) flink-hadoop-fs (org.apache.flink:flink-hadoop-fs:1.4.2 - http://flink.apache.org/flink-filesystems/flink-hadoop-fs)
     (The Apache Software License, Version 2.0) flink-java (org.apache.flink:flink-java:1.4.2 - http://flink.apache.org/flink-java)
     (The Apache Software License, Version 2.0) flink-metrics-core (org.apache.flink:flink-metrics-core:1.4.2 - http://flink.apache.org/flink-metrics/flink-metrics-core)
     (The Apache Software License, Version 2.0) flink-optimizer (org.apache.flink:flink-optimizer_2.11:1.4.2 - http://flink.apache.org/flink-optimizer_2.11)
     (The Apache Software License, Version 2.0) flink-queryable-state-client-java (org.apache.flink:flink-queryable-state-client-java_2.11:1.4.2 - http://flink.apache.org/flink-queryable-state/flink-queryable-state-client-java_2.11)
     (The Apache Software License, Version 2.0) flink-runtime (org.apache.flink:flink-runtime_2.11:1.4.2 - http://flink.apache.org/flink-runtime_2.11)
     (The Apache Software License, Version 2.0) flink-scala (org.apache.flink:flink-scala_2.11:1.4.2 - http://flink.apache.org/flink-scala_2.11)
     (The Apache Software License, Version 2.0) flink-shaded-asm-5 (org.apache.flink:flink-shaded-asm:5.0.4-2.0 - http://flink.apache.org/flink-shaded-asm)
     (The Apache Software License, Version 2.0) flink-shaded-guava-18 (org.apache.flink:flink-shaded-guava:18.0-2.0 - http://flink.apache.org/flink-shaded-guava)
     (The Apache Software License, Version 2.0) flink-shaded-jackson-2 (org.apache.flink:flink-shaded-jackson:2.7.9-2.0 - http://flink.apache.org/flink-shaded-jackson)
     (The Apache Software License, Version 2.0) flink-shaded-netty-4 (org.apache.flink:flink-shaded-netty:4.0.27.Final-2.0 - http://flink.apache.org/flink-shaded-netty)
     (The Apache Software License, Version 2.0) flink-streaming-java (org.apache.flink:flink-streaming-java_2.11:1.4.2 - http://flink.apache.org/flink-streaming-java_2.11)
     (The Apache Software License, Version 2.0) flink-streaming-scala (org.apache.flink:flink-streaming-scala_2.11:1.4.2 - http://flink.apache.org/flink-streaming-scala_2.11)
     (Apache License, Version 2.0) force-shading (org.apache.flink:force-shading:1.4.2 - https://www.apache.org/force-shading/)
     (Apache License, Version 2.0) Apache Hadoop Annotations (org.apache.hadoop:hadoop-annotations:2.7.0 - no url defined)
     (Apache License, Version 2.0) Apache Hadoop Auth (org.apache.hadoop:hadoop-auth:2.7.0 - no url defined)
     (Apache License, Version 2.0) Apache Hadoop Client (org.apache.hadoop:hadoop-client:2.7.0 - no url defined)
     (Apache License, Version 2.0) Apache Hadoop Common (org.apache.hadoop:hadoop-common:2.7.0 - no url defined)
     (Apache License, Version 2.0) Apache Hadoop HDFS (org.apache.hadoop:hadoop-hdfs:2.7.0 - no url defined)
     (Apache License, Version 2.0) Apache Hadoop HttpFS (org.apache.hadoop:hadoop-hdfs-httpfs:2.7.0 - no url defined)
     (Apache License, Version 2.0) hadoop-mapreduce-client-app (org.apache.hadoop:hadoop-mapreduce-client-app:2.7.0 - no url defined)
     (Apache License, Version 2.0) hadoop-mapreduce-client-common (org.apache.hadoop:hadoop-mapreduce-client-common:2.7.0 - no url defined)
     (The Apache Software License, Version 2.0) hadoop-mapreduce-client-core (org.apache.hadoop:hadoop-mapreduce-client-core:2.5.1 - no url defined)
     (Apache License, Version 2.0) hadoop-mapreduce-client-core (org.apache.hadoop:hadoop-mapreduce-client-core:2.7.0 - no url defined)
     (Apache License, Version 2.0) hadoop-mapreduce-client-jobclient (org.apache.hadoop:hadoop-mapreduce-client-jobclient:2.7.0 - no url defined)
     (Apache License, Version 2.0) hadoop-mapreduce-client-shuffle (org.apache.hadoop:hadoop-mapreduce-client-shuffle:2.7.0 - no url defined)
     (The Apache Software License, Version 2.0) hadoop-yarn-api (org.apache.hadoop:hadoop-yarn-api:2.5.1 - no url defined)
     (Apache License, Version 2.0) hadoop-yarn-api (org.apache.hadoop:hadoop-yarn-api:2.7.0 - no url defined)
     (Apache License, Version 2.0) hadoop-yarn-client (org.apache.hadoop:hadoop-yarn-client:2.7.0 - no url defined)
     (The Apache Software License, Version 2.0) hadoop-yarn-common (org.apache.hadoop:hadoop-yarn-common:2.5.1 - no url defined)
     (Apache License, Version 2.0) hadoop-yarn-common (org.apache.hadoop:hadoop-yarn-common:2.7.0 - no url defined)
     (Apache License, Version 2.0) hadoop-yarn-server-common (org.apache.hadoop:hadoop-yarn-server-common:2.7.0 - no url defined)
     (Apache License, Version 2.0) Apache HBase - Annotations (org.apache.hbase:hbase-annotations:1.2.3 - http://hbase.apache.org/hbase-annotations)
     (Apache License, Version 2.0) Apache HBase - Client (org.apache.hbase:hbase-client:1.2.3 - http://hbase.apache.org/hbase-client)
     (Apache License, Version 2.0) Apache HBase - Common (org.apache.hbase:hbase-common:1.2.3 - http://hbase.apache.org/hbase-common)
     (Apache License, Version 2.0) Apache HBase - Protocol (org.apache.hbase:hbase-protocol:1.2.3 - http://hbase.apache.org/hbase-protocol)
     (The Apache Software License, Version 2.0) htrace-core (org.apache.htrace:htrace-core:3.1.0-incubating - http://incubator.apache.org/projects/htrace.html)
     (Apache License) HttpClient (org.apache.httpcomponents:httpclient:4.0.1 - http://hc.apache.org/httpcomponents-client)
     (Apache License) HttpClient (org.apache.httpcomponents:httpclient:4.0.2 - http://hc.apache.org/httpcomponents-client)
     (Apache License) HttpClient (org.apache.httpcomponents:httpclient:4.1.2 - http://hc.apache.org/httpcomponents-client)
     (Apache License) HttpClient (org.apache.httpcomponents:httpclient:4.2.5 - http://hc.apache.org/httpcomponents-client)
     (Apache License, Version 2.0) Apache HttpClient (org.apache.httpcomponents:httpclient:4.5.2 - http://hc.apache.org/httpcomponents-client)
     (Apache License, Version 2.0) Apache HttpClient (org.apache.httpcomponents:httpclient:4.5.4 - http://hc.apache.org/httpcomponents-client)
     (Apache License) HttpCore (org.apache.httpcomponents:httpcore:4.0.1 - http://hc.apache.org/httpcomponents-core/)
     (Apache License) HttpCore (org.apache.httpcomponents:httpcore:4.1.2 - http://hc.apache.org/httpcomponents-core-ga)
     (Apache License) HttpCore (org.apache.httpcomponents:httpcore:4.2.4 - http://hc.apache.org/httpcomponents-core-ga)
     (Apache License, Version 2.0) Apache HttpCore (org.apache.httpcomponents:httpcore:4.4.4 - http://hc.apache.org/httpcomponents-core-ga)
     (Apache License, Version 2.0) Apache HttpCore (org.apache.httpcomponents:httpcore:4.4.7 - http://hc.apache.org/httpcomponents-core-ga)
     (Apache License, Version 2.0) Apache HttpCore (org.apache.httpcomponents:httpcore:4.4.8 - http://hc.apache.org/httpcomponents-core-ga)
     (Apache License, Version 2.0) Apache Juneau Marshall (org.apache.juneau:juneau-marshall:7.0.1 - http://juneau.apache.org/juneau-core/juneau-marshall)
     (Apache License, Version 2.0) Apache Juneau REST Client API (org.apache.juneau:juneau-rest-client:7.0.1 - http://juneau.apache.org/juneau-rest/juneau-rest-client)
     (Apache 2) kafka (org.apache.kafka:kafka_2.9.2:0.8.0 - http://www.apache.org/kafka_2.9.2/)
     (Apache 2) Lucene Common Analyzers (org.apache.lucene:lucene-analyzers-common:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-analyzers-common)
     (Apache 2) Lucene Memory (org.apache.lucene:lucene-backward-codecs:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-backward-codecs)
     (Apache 2) Lucene codecs (org.apache.lucene:lucene-codecs:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-codecs)
     (Apache 2) Lucene Core (org.apache.lucene:lucene-core:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-core)
     (Apache 2) Lucene Grouping (org.apache.lucene:lucene-grouping:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-grouping)
     (Apache 2) Lucene Highlighter (org.apache.lucene:lucene-highlighter:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-highlighter)
     (Apache 2) Lucene Join (org.apache.lucene:lucene-join:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-join)
     (Apache 2) Lucene Memory (org.apache.lucene:lucene-memory:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-memory)
     (Apache 2) Lucene Miscellaneous (org.apache.lucene:lucene-misc:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-misc)
     (Apache 2) Lucene Queries (org.apache.lucene:lucene-queries:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-queries)
     (Apache 2) Lucene QueryParsers (org.apache.lucene:lucene-queryparser:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-queryparser)
     (Apache 2) Lucene Sandbox (org.apache.lucene:lucene-sandbox:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-sandbox)
     (Apache 2) Lucene Spatial (org.apache.lucene:lucene-spatial:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-spatial)
     (Apache 2) Lucene Spatial 3D (org.apache.lucene:lucene-spatial3d:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-spatial3d)
     (Apache 2) Lucene Suggest (org.apache.lucene:lucene-suggest:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-suggest)
     (Apache 2) Lucene Test Framework (org.apache.lucene:lucene-test-framework:5.5.4 - http://lucene.apache.org/lucene-parent/lucene-test-framework)
     (Apache License, Version 2.0) Maven Aether Provider (org.apache.maven:maven-aether-provider:3.3.3 - http://maven.apache.org/ref/3.3.3/maven-aether-provider)
     (Apache License, Version 2.0) Maven Artifact (org.apache.maven:maven-artifact:3.3.3 - http://maven.apache.org/ref/3.3.3/maven-artifact)
     (The Apache Software License, Version 2.0) Maven Artifact Manager (org.apache.maven:maven-artifact-manager:2.2.1 - http://maven.apache.org/maven-artifact-manager)
     (Apache License, Version 2.0) Maven Builder Support (org.apache.maven:maven-builder-support:3.3.3 - http://maven.apache.org/ref/3.3.3/maven-builder-support)
     (Apache License, Version 2.0) Maven Compat (org.apache.maven:maven-compat:3.3.3 - http://maven.apache.org/ref/3.3.3/maven-compat)
     (Apache License, Version 2.0) Maven Core (org.apache.maven:maven-core:3.3.3 - http://maven.apache.org/ref/3.3.3/maven-core)
     (Apache License, Version 2.0) Maven Model (org.apache.maven:maven-model:3.3.3 - http://maven.apache.org/ref/3.3.3/maven-model)
     (Apache License, Version 2.0) Maven Model Builder (org.apache.maven:maven-model-builder:3.3.3 - http://maven.apache.org/ref/3.3.3/maven-model-builder)
     (The Apache Software License, Version 2.0) Maven Monitor (org.apache.maven:maven-monitor:2.2.1 - http://maven.apache.org/maven-monitor)
     (Apache License, Version 2.0) Maven Plugin API (org.apache.maven:maven-plugin-api:3.3.3 - http://maven.apache.org/ref/3.3.3/maven-plugin-api)
     (The Apache Software License, Version 2.0) Maven Plugin Descriptor Model (org.apache.maven:maven-plugin-descriptor:2.2.1 - http://maven.apache.org/maven-plugin-descriptor)
     (The Apache Software License, Version 2.0) Maven Plugin Registry Model (org.apache.maven:maven-plugin-registry:2.2.1 - http://maven.apache.org/maven-plugin-registry)
     (The Apache Software License, Version 2.0) Maven Profile Model (org.apache.maven:maven-profile:2.0 - http://maven.apache.org/maven2/maven-profile/)
     (The Apache Software License, Version 2.0) Maven Profile Model (org.apache.maven:maven-profile:2.2.1 - http://maven.apache.org/maven-profile)
     (The Apache Software License, Version 2.0) Maven Project Builder (org.apache.maven:maven-project:2.0 - http://maven.apache.org/maven2/maven-project/)
     (The Apache Software License, Version 2.0) Maven Project Builder (org.apache.maven:maven-project:2.2.1 - http://maven.apache.org/maven-project)
     (Apache License, Version 2.0) Maven Repository Metadata Model (org.apache.maven:maven-repository-metadata:3.3.3 - http://maven.apache.org/ref/3.3.3/maven-repository-metadata)
     (Apache License, Version 2.0) Maven Settings (org.apache.maven:maven-settings:3.3.3 - http://maven.apache.org/ref/3.3.3/maven-settings)
     (Apache License, Version 2.0) Maven Settings Builder (org.apache.maven:maven-settings-builder:3.3.3 - http://maven.apache.org/ref/3.3.3/maven-settings-builder)
     (The Apache Software License, Version 2.0) Doxia :: Core (org.apache.maven.doxia:doxia-core:1.4 - http://maven.apache.org/doxia/doxia/doxia-core/)
     (The Apache Software License, Version 2.0) Doxia :: Decoration Model (org.apache.maven.doxia:doxia-decoration-model:1.4 - http://maven.apache.org/doxia/doxia-sitetools/doxia-decoration-model/)
     (The Apache Software License, Version 2.0) Doxia :: Logging API (org.apache.maven.doxia:doxia-logging-api:1.4 - http://maven.apache.org/doxia/doxia/doxia-logging-api/)
     (The Apache Software License, Version 2.0) Doxia :: FML Module (org.apache.maven.doxia:doxia-module-fml:1.4 - http://maven.apache.org/doxia/doxia/doxia-modules/doxia-module-fml/)
     (The Apache Software License, Version 2.0) Doxia :: XHTML Module (org.apache.maven.doxia:doxia-module-xhtml:1.4 - http://maven.apache.org/doxia/doxia/doxia-modules/doxia-module-xhtml/)
     (The Apache Software License, Version 2.0) Doxia :: Sink API (org.apache.maven.doxia:doxia-sink-api:1.4 - http://maven.apache.org/doxia/doxia/doxia-sink-api/)
     (The Apache Software License, Version 2.0) Doxia :: Site Renderer (org.apache.maven.doxia:doxia-site-renderer:1.4 - http://maven.apache.org/doxia/doxia-sitetools/doxia-site-renderer/)
     (Apache License, Version 2.0) Maven Plugin Testing Mechanism (org.apache.maven.plugin-testing:maven-plugin-testing-harness:3.3.0 - http://maven.apache.org/plugin-testing/maven-plugin-testing-harness/)
     (Apache License, Version 2.0) Maven Plugin Tools Java 5 Annotations (org.apache.maven.plugin-tools:maven-plugin-annotations:3.3 - http://maven.apache.org/plugin-tools/maven-plugin-annotations)
     (Apache License, Version 2.0) Maven Plugin Tool for Java with Annotations (org.apache.maven.plugin-tools:maven-plugin-tools-annotations:3.4 - http://maven.apache.org/plugin-tools/maven-plugin-tools-annotations)
     (Apache License, Version 2.0) Maven Plugin Tools APIs (org.apache.maven.plugin-tools:maven-plugin-tools-api:3.3 - http://maven.apache.org/plugin-tools/maven-plugin-tools-api)
     (Apache License, Version 2.0) Maven Plugin Tools Generators (org.apache.maven.plugin-tools:maven-plugin-tools-generators:3.3 - http://maven.apache.org/plugin-tools/maven-plugin-tools-generators)
     (Apache License, Version 2.0) Maven Plugin Tool for Java with Javadoc Tags (org.apache.maven.plugin-tools:maven-plugin-tools-java:3.4 - http://maven.apache.org/plugin-tools/maven-plugin-tools-java)
     (Apache License, Version 2.0) Maven Plugin Plugin (org.apache.maven.plugins:maven-plugin-plugin:3.4 - http://maven.apache.org/plugin-tools/maven-plugin-plugin)
     (Apache License, Version 2.0) Apache Maven Resources Plugin (org.apache.maven.plugins:maven-resources-plugin:2.7 - http://maven.apache.org/plugins/maven-resources-plugin/)
     (The Apache Software License, Version 2.0) Maven Reporting API (org.apache.maven.reporting:maven-reporting-api:3.0 - http://maven.apache.org/shared/maven-reporting-api/)
     (Apache License, Version 2.0) Apache Maven Reporting Implementation (org.apache.maven.reporting:maven-reporting-impl:2.3 - http://maven.apache.org/shared/maven-reporting-impl/)
     (The Apache Software License, Version 2.0) Apache Maven Filtering (org.apache.maven.shared:maven-filtering:1.2 - http://maven.apache.org/shared/maven-filtering/)
     (The Apache Software License, Version 2.0) Apache Maven Shared Utils (org.apache.maven.shared:maven-shared-utils:0.6 - http://maven.apache.org/shared/maven-shared-utils/)
     (Apache License, Version 2.0) Apache Maven Shared Utils (org.apache.maven.shared:maven-shared-utils:0.8 - http://maven.apache.org/shared/maven-shared-utils/)
     (Apache License, Version 2.0) Apache Maven Verifier Component (org.apache.maven.shared:maven-verifier:1.6 - http://maven.apache.org/shared/maven-verifier/)
     (The Apache Software License, Version 2.0) Maven Wagon API (org.apache.maven.wagon:wagon-provider-api:1.0-beta-6 - http://maven.apache.org/wagon/wagon-provider-api)
     (The Apache Software License, Version 2.0) Apache Sling JSON Library (org.apache.sling:org.apache.sling.commons.json:2.0.6 - http://sling.apache.org/org.apache.sling.commons.json)
     (Apache License, Version 2.0) streams-config (org.apache.streams:streams-config:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-config)
     (Apache License, Version 2.0) streams-converters (org.apache.streams:streams-converters:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-components/streams-converters)
     (Apache License, Version 2.0) streams-core (org.apache.streams:streams-core:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-core)
     (Apache License, Version 2.0) streams-http (org.apache.streams:streams-http:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-components/streams-http)
     (Apache License, Version 2.0) streams-monitoring (org.apache.streams:streams-monitoring:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-monitoring)
     (Apache License, Version 2.0) streams-persist-console (org.apache.streams:streams-persist-console:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-contrib/streams-persist-console)
     (Apache License, Version 2.0) streams-persist-graph (org.apache.streams:streams-persist-graph:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-contrib/streams-persist-graph)
     (Apache License, Version 2.0) streams-persist-hdfs (org.apache.streams:streams-persist-hdfs:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-contrib/streams-persist-hdfs)
     (Apache License, Version 2.0) streams-pojo (org.apache.streams:streams-pojo:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-pojo)
     (Apache License, Version 2.0) streams-pojo-extensions (org.apache.streams:streams-pojo-extensions:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-pojo-extensions)
     (Apache License, Version 2.0) streams-runtime-local (org.apache.streams:streams-runtime-local:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-runtimes/streams-runtime-local)
     (Apache License, Version 2.0) streams-schema-activitystreams (org.apache.streams:streams-schema-activitystreams:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-schemas/streams-schema-activitystreams)
     (Apache License, Version 2.0) streams-testing (org.apache.streams:streams-testing:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-testing)
     (Apache License, Version 2.0) streams-util (org.apache.streams:streams-util:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-util)
     (Apache License, Version 2.0) streams-verbs (org.apache.streams:streams-verbs:0.5.2-SNAPSHOT - https://github.com/apache/streams/streams-verbs)
     (The Apache Software License, Version 2.0) Struts Core (org.apache.struts:struts-core:1.3.8 - http://struts.apache.org)
     (The Apache Software License, Version 2.0) Struts Taglib (org.apache.struts:struts-taglib:1.3.8 - http://struts.apache.org)
     (The Apache Software License, Version 2.0) Struts Tiles (org.apache.struts:struts-tiles:1.3.8 - http://struts.apache.org)
     (The Apache Software License, Version 2.0) Apache Thrift (org.apache.thrift:libthrift:0.9.2 - http://thrift.apache.org)
     (The Apache Software License, Version 2.0) Apache Velocity (org.apache.velocity:velocity:1.7 - http://velocity.apache.org/engine/devel/)
     (The Apache Software License, Version 2.0) VelocityTools (org.apache.velocity:velocity-tools:2.0 - http://velocity.apache.org/tools/devel/)
     (Apache License, Version 2.0) zookeeper (org.apache.zookeeper:zookeeper:3.4.5 - no url defined)
     (Apache License, Version 2.0) zookeeper (org.apache.zookeeper:zookeeper:3.4.6 - no url defined)
     (Apache 2) OHC core (org.caffinitas.ohc:ohc-core:0.4.4 - http://caffinitas.org/)
     (The Apache Software License, Version 2.0) Groovy (org.codehaus.groovy:groovy:2.4.3 - http://groovy.codehaus.org/)
     (The Apache Software License, Version 2.0) Jackson (org.codehaus.jackson:jackson-core-asl:1.9.11 - http://jackson.codehaus.org)
     (The Apache Software License, Version 2.0) Jackson (org.codehaus.jackson:jackson-core-asl:1.9.13 - http://jackson.codehaus.org)
     (The Apache Software License, Version 2.0) Jackson (org.codehaus.jackson:jackson-core-asl:1.9.2 - http://jackson.codehaus.org)
     (The Apache Software License, Version 2.0) Data Mapper for Jackson (org.codehaus.jackson:jackson-mapper-asl:1.9.11 - http://jackson.codehaus.org)
     (The Apache Software License, Version 2.0) Data Mapper for Jackson (org.codehaus.jackson:jackson-mapper-asl:1.9.13 - http://jackson.codehaus.org)
     (The Apache Software License, Version 2.0) Data Mapper for Jackson (org.codehaus.jackson:jackson-mapper-asl:1.9.2 - http://jackson.codehaus.org)
     (Apache License, Version 2.0) Jettison (org.codehaus.jettison:jettison:1.1 - no url defined)
     (The Apache Software License, Version 2.0) Plexus Archiver Component (org.codehaus.plexus:plexus-archiver:2.2 - http://plexus.codehaus.org/plexus-components/plexus-archiver)
     (The Apache Software License, Version 2.0) Plexus Classworlds (org.codehaus.plexus:plexus-classworlds:2.5.2 - http://plexus.codehaus.org/plexus-classworlds/)
     (The Apache Software License, Version 2.0) Plexus :: Component Annotations (org.codehaus.plexus:plexus-component-annotations:1.5.5 - http://plexus.codehaus.org/plexus-containers/plexus-component-annotations/)
     (Apache License, Version 2.0) Default Plexus Container (org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1 - no url defined)
     (Apache License, Version 2.0) Plexus I18N Component (org.codehaus.plexus:plexus-i18n:1.0-beta-7 - http://plexus.codehaus.org/plexus-components/plexus-i18n)
     (The Apache Software License, Version 2.0) Plexus Interpolation API (org.codehaus.plexus:plexus-interpolation:1.21 - http://plexus.codehaus.org/plexus-components/plexus-interpolation)
     (The Apache Software License, Version 2.0) Plexus IO Components (org.codehaus.plexus:plexus-io:2.0.3 - http://plexus.codehaus.org/plexus-components/plexus-io)
     (The Apache Software License, Version 2.0) Plexus Common Utilities (org.codehaus.plexus:plexus-utils:3.0.15 - http://plexus.codehaus.org/plexus-utils)
     (Apache License, Version 2.0) Plexus Common Utilities (org.codehaus.plexus:plexus-utils:3.1.0 - http://codehaus-plexus.github.io/plexus-utils/)
     (The Apache Software License, Version 2.0) Plexus Velocity Component (org.codehaus.plexus:plexus-velocity:1.1.8 - http://plexus.codehaus.org/plexus-components/plexus-velocity)
     (Apache License, Version 2.0) FEST Fluent Assertions (Core) (org.easytesting:fest-assert-core:2.0M10 - http://fest.easytesting.org/assert)
     (Apache License, Version 2.0) FEST Util (org.easytesting:fest-util:1.2.5 - http://fest.easytesting.org)
     (Apache Software License - Version 2.0) (Eclipse Public License - Version 1.0) Jetty :: Continuation (org.eclipse.jetty:jetty-continuation:9.0.7.v20131107 - http://www.eclipse.org/jetty)
     (Apache Software License - Version 2.0) (Eclipse Public License - Version 1.0) Jetty :: Http Utility (org.eclipse.jetty:jetty-http:9.0.7.v20131107 - http://www.eclipse.org/jetty)
     (Apache Software License - Version 2.0) (Eclipse Public License - Version 1.0) Jetty :: IO Utility (org.eclipse.jetty:jetty-io:9.0.7.v20131107 - http://www.eclipse.org/jetty)
     (Apache Software License - Version 2.0) (Eclipse Public License - Version 1.0) Jetty :: Security (org.eclipse.jetty:jetty-security:9.0.7.v20131107 - http://www.eclipse.org/jetty)
     (Apache Software License - Version 2.0) (Eclipse Public License - Version 1.0) Jetty :: Server Core (org.eclipse.jetty:jetty-server:9.0.7.v20131107 - http://www.eclipse.org/jetty)
     (Apache Software License - Version 2.0) (Eclipse Public License - Version 1.0) Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:9.0.7.v20131107 - http://www.eclipse.org/jetty)
     (Apache Software License - Version 2.0) (Eclipse Public License - Version 1.0) Jetty :: Utility Servlets and Filters (org.eclipse.jetty:jetty-servlets:9.0.7.v20131107 - http://www.eclipse.org/jetty)
     (Apache Software License - Version 2.0) (Eclipse Public License - Version 1.0) Jetty :: Utilities (org.eclipse.jetty:jetty-util:9.0.7.v20131107 - http://www.eclipse.org/jetty)
     (Apache Software License - Version 2.0) (Eclipse Public License - Version 1.0) Jetty Orbit :: Servlet API (org.eclipse.jetty.orbit:javax.servlet:3.0.0.v201112011016 - http://www.eclipse.org/jetty/jetty-orbit/javax.servlet)
     (Apache Software License - Version 2.0) (Eclipse Public License - Version 1.0) Jetty :: SetUID Java (org.eclipse.jetty.toolchain.setuid:jetty-setuid-java:1.0.2 - http://www.eclipse.org/jetty/jetty-toolchain/jetty-setuid-parent/jetty-setuid-java)
     (The Apache Software License, Version 2.0) Elasticsearch: Core (org.elasticsearch:elasticsearch:2.4.6 - http://nexus.sonatype.org/oss-repository-hosting.html/parent/elasticsearch)
     (The Apache Software License, Version 2.0) Elasticsearch SecureSM (org.elasticsearch:securesm:1.0 - http://nexus.sonatype.org/oss-repository-hosting.html/securesm)
     (Apache License 2.0) jinterface (org.erlang.otp:jinterface:1.6.1 - http://erlang.org/)
     (Apache License 2.0) facebook4j-core (org.facebook4j:facebook4j-core:2.4.10 - http://facebook4j.org/)
     (The Apache Software License, Version 2.0) sigar (org.fusesource:sigar:1.6.4 - http://fusesource.com/sigar/)
     (Apache License, Version 2.0) Hibernate Validator Engine (org.hibernate:hibernate-validator:4.3.0.Final - http://validator.hibernate.org/hibernate-validator)
     (Apache License, Version 2.0) Hibernate Validator Engine (org.hibernate:hibernate-validator:5.1.1.Final - http://validator.hibernate.org/hibernate-validator)
     (Apache License 2.0) (LGPL 2.1) (MPL 1.1) Javassist (org.javassist:javassist:3.21.0-GA - http://www.javassist.org/)
     (The Apache Software License, Version 2.0) javatuples (org.javatuples:javatuples:1.2 - http://www.javatuples.org)
     (Apache License, version 2.0) JBoss Logging 3 (org.jboss.logging:jboss-logging:3.1.3.GA - http://www.jboss.org)
     (Apache License, Version 2.0) The Netty Project (org.jboss.netty:netty:3.2.2.Final - http://www.jboss.org/netty/)
     (Apache License, Version 2.0) Java Concurrency Tools Core Library (org.jctools:jctools-core:1.2.1 - https://github.com/JCTools)
     (Apache 2) Joda-Convert (org.joda:joda-convert:1.8.1 - http://www.joda.org/joda-convert/)
     (The Apache Software License, Version 2.0) MongoDB Java Driver (org.mongodb:mongo-java-driver:3.5.0 - http://www.mongodb.org)
     (Apache Software License - Version 2.0) (Eclipse Public License - Version 1.0) Jetty Server (org.mortbay.jetty:jetty:6.1.26 - http://www.eclipse.org/jetty/jetty-parent/project/modules/jetty)
     (Apache Software License - Version 2.0) (Eclipse Public License - Version 1.0) Jetty Utilities (org.mortbay.jetty:jetty-util:6.1.26 - http://www.eclipse.org/jetty/jetty-parent/project/jetty-util)
     (Apache License Version 2.0) Servlet Specification API (org.mortbay.jetty:servlet-api:2.5-20081211 - http://jetty.mortbay.org/servlet-api)
     (Apache License, Version 2) Neo4j Java Driver (org.neo4j.driver:neo4j-java-driver:1.5.1 - https://github.com/neo4j/neo4j-java-driver/neo4j-java-driver)
     (Apache 2) Objenesis (org.objenesis:objenesis:2.1 - http://objenesis.org)
     (Apache License, Version 2.0) jsonschema2pojo-core (org.jsonschema2pojo:jsonschema2pojo-core:0.4.10 - https://github.com/joelittlejohn/jsonschema2pojo/jsonschema2pojo-core)
     (Apache License, Version 2.0) jsonschema2pojo-maven-plugin (org.jsonschema2pojo:jsonschema2pojo-maven-plugin:0.4.10 - https://github.com/joelittlejohn/jsonschema2pojo)
     (The Apache Software License, Version 2.0) powermock-api-mockito (org.powermock:powermock-api-mockito:1.5.5 - http://www.powermock.org/powermock-api/powermock-api-mockito)
     (The Apache Software License, Version 2.0) PowerMock (org.powermock:powermock-api-mockito:1.7.1 - http://www.powermock.org)
     (The Apache Software License, Version 2.0) PowerMock (org.powermock:powermock-api-mockito-common:1.7.1 - http://www.powermock.org)
     (The Apache Software License, Version 2.0) powermock-api-support (org.powermock:powermock-api-support:1.5.5 - http://www.powermock.org/powermock-api/powermock-api-support)
     (The Apache Software License, Version 2.0) PowerMock (org.powermock:powermock-api-support:1.7.1 - http://www.powermock.org)
     (The Apache Software License, Version 2.0) powermock-core (org.powermock:powermock-core:1.5.5 - http://www.powermock.org)
     (The Apache Software License, Version 2.0) PowerMock (org.powermock:powermock-core:1.7.1 - http://www.powermock.org)
     (The Apache Software License, Version 2.0) powermock-module-junit4 (org.powermock:powermock-module-junit4:1.5.5 - http://www.powermock.org)
     (The Apache Software License, Version 2.0) PowerMock (org.powermock:powermock-module-junit4:1.7.1 - http://www.powermock.org)
     (The Apache Software License, Version 2.0) powermock-module-junit4-common (org.powermock:powermock-module-junit4-common:1.5.5 - http://www.powermock.org/powermock-modules/powermock-module-junit4-common)
     (The Apache Software License, Version 2.0) PowerMock (org.powermock:powermock-module-junit4-common:1.7.1 - http://www.powermock.org)
     (The Apache Software License, Version 2.0) powermock-reflect (org.powermock:powermock-reflect:1.5.5 - http://www.powermock.org/powermock-reflect)
     (The Apache Software License, Version 2.0) PowerMock (org.powermock:powermock-reflect:1.7.1 - http://www.powermock.org)
     (the Apache License, ASL Version 2.0) scalactic (org.scalactic:scalactic_2.11:3.0.0 - http://www.scalatest.org)
     (the Apache License, ASL Version 2.0) scalatest (org.scalatest:scalatest_2.11:3.0.0 - http://www.scalatest.org)
     (Apache Software Licenses) Log4j Implemented Over SLF4J (org.slf4j:log4j-over-slf4j:1.7.25 - http://www.slf4j.org)
     (Apache Software Licenses) Log4j Implemented Over SLF4J (org.slf4j:log4j-over-slf4j:1.7.7 - http://www.slf4j.org)
     (Apache License, Version 2.0) plexus-build-api (org.sonatype.plexus:plexus-build-api:0.0.4 - http://forge.sonatype.com/spice-parent/plexus-build-api/)
     (Apache Public License 2.0) Plexus Cipher: encryption/decryption Component (org.sonatype.plexus:plexus-cipher:1.4 - http://spice.sonatype.org/plexus-cipher)
     (Apache Public License 2.0) Plexus Security Dispatcher Component (org.sonatype.plexus:plexus-sec-dispatcher:1.3 - http://spice.sonatype.org/plexus-sec-dispatcher)
     (The Apache Software License, Version 2.0) Sisu Guice - Core Library (org.sonatype.sisu:sisu-guice:3.2.5 - https://github.com/google/guice/sisu-guice)
     (Apache 2.0) testng (org.testng:testng:6.11 - http://testng.org)
     (Apache  Version 2.0, January 2004) testng (org.testng:testng:6.9.10 - http://github.com/cbeust/testng)
     (Apache 2.0) testng (org.testng:testng:6.9.13.6 - http://testng.org)
     (The Apache Software License, Version 2.0) Snappy for Java (org.xerial.snappy:snappy-java:1.0.4.1 - http://code.google.com/p/snappy-java/)
     (The Apache Software License, Version 2.0) snappy-java (org.xerial.snappy:snappy-java:1.1.1.7 - https://github.comm/xerial/snappy-java)
     (The Apache Software License, Version 2.0) snappy-java (org.xerial.snappy:snappy-java:1.1.4 - https://github.com/xerial/snappy-java)
     (Apache License Version 2.0) SnakeYAML (org.yaml:snakeyaml:1.11 - http://www.snakeyaml.org)
     (Apache License Version 2.0) SnakeYAML (org.yaml:snakeyaml:1.15 - http://www.snakeyaml.org)
     (Apache License, Version 2.0) SnakeYAML (org.yaml:snakeyaml:1.17 - http://www.snakeyaml.org)
     (The Apache License, Version 2.0) software.amazon.ion:ion-java (software.amazon.ion:ion-java:1.0.2 - https://github.com/amznlabs/ion-java/)
     (Apache Software License, Version 1.1) sslext (sslext:sslext:1.2-0 - no url defined)
     (The Apache Software License, Version 2.0) Xerces2 Java Parser (xerces:xercesImpl:2.9.1 - http://xerces.apache.org/xerces2-j)
     (The Apache Software License, Version 2.0) XML Commons External Components XML APIs (xml-apis:xml-apis:1.3.04 - http://xml.apache.org/commons/components/external/)

The following dependencies have common licenses deemed substantially similar to Apache 2.0.

     (BSD License) antlr (antlr:antlr:2.7.2 - no url defined)
     (Public Domain) AOP alliance (aopalliance:aopalliance:1.0 - http://aopalliance.sourceforge.net)
     (Public Domain) Backport of JSR 166 (backport-util-concurrent:backport-util-concurrent:3.1 - http://backport-jsr166.sourceforge.net/)
     (MIT License) high-scale-lib (com.boundary:high-scale-lib:1.0.6 - https://github.com/boundary/high-scale-lib)
     (MIT License) minimal-json (com.eclipsesource.minimal-json:minimal-json:0.9.5 - https://github.com/ralfstx/minimal-json)
     (New BSD License) Kryo (com.esotericsoftware.kryo:kryo:2.24.0 - https://github.com/EsotericSoftware/kryo)
     (New BSD License) MinLog (com.esotericsoftware.minlog:minlog:1.2 - http://code.google.com/p/minlog/)
     (MIT License) jnr-x86asm (com.github.jnr:jnr-x86asm:1.0.2 - http://github.com/jnr/jnr-x86asm)
     (BSD License) snowball-stemmer (com.github.rholder:snowball-stemmer:1.3.0.581.1 - http://snowball.tartarus.org/)
     (MIT License) scopt (com.github.scopt:scopt_2.11:3.5.0 - https://github.com/scopt/scopt)
     (New BSD license) Protocol Buffer Java API (com.google.protobuf:protobuf-java:2.5.0 - http://code.google.com/p/protobuf)
     (BSD) JSch (com.jcraft:jsch:0.1.42 - http://www.jcraft.com/jsch/)
     (BSD) ParaNamer Core (com.thoughtworks.paranamer:paranamer:2.3 - http://paranamer.codehaus.org/paranamer)
     (BSD) ParaNamer Core (com.thoughtworks.paranamer:paranamer:2.8 - https://github.com/paul-hammant/paranamer/paranamer)
     (CC0 1.0 Universal) JSR166e (com.twitter:jsr166e:1.1.0 - http://github.com/twitter/jsr166e)
     (BSD) JFlex (de.jflex:jflex:1.6.0 - http://jflex.de/)
     (Copyright 2001-2016 (C) MetaStuff, Ltd. and DOM4J contributors. All Rights Reserved.) dom4j (dom4j:dom4j:1.1 - no url defined)
     (Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.) jsp-api (javax.servlet.jsp:jsp-api:2.1 - no url defined)
     (BSD) JLine (jline:jline:0.9.94 - http://jline.sourceforge.net)
     (The MIT License) JOpt Simple (net.sf.jopt-simple:jopt-simple:3.2 - http://jopt-simple.sourceforge.net)
     (MIT) argparse4j (net.sourceforge.argparse4j:argparse4j:0.4.3 - http://argparse4j.sourceforge.net)
     (BSD licence) StringTemplate 4 (org.antlr:ST4:4.0.8 - http://www.stringtemplate.org)
     (BSD licence) ANTLR 3 Tool (org.antlr:antlr:3.5.2 - http://antlr.org/antlr)
     (BSD Licence) Antlr 3 Runtime (org.antlr:antlr-runtime:3.3 - http://www.antlr.org)
     (BSD licence) ANTLR 3 Runtime (org.antlr:antlr-runtime:3.5.2 - http://www.antlr.org)
     (BSD licence) ANTLR StringTemplate 4.0.2 (org.antlr:stringtemplate:4.0.2 - http://www.stringtemplate.org)
     (BSD) grizzled-slf4j (org.clapper:grizzled-slf4j_2.11:1.0.2 - https://github.com/bmc/grizzled-slf4j/#readme)
     (The BSD License) Stax2 API (org.codehaus.woodstox:stax2-api:3.1.4 - http://wiki.fasterxml.com/WoodstoxStax2)
     (The BSD License) Stax2 API (org.codehaus.woodstox:stax2-api:4.0.0 - http://github.com/FasterXML/stax2-api)
     (The BSD 3-Clause License) leveldbjni-all (org.fusesource.leveldbjni:leveldbjni-all:1.8 - http://leveldbjni.fusesource.org/leveldbjni-all)
     (New BSD License) Hamcrest All (org.hamcrest:hamcrest-all:1.3 - https://github.com/hamcrest/JavaHamcrest/hamcrest-all)
     (New BSD License) Hamcrest Core (org.hamcrest:hamcrest-core:1.3 - https://github.com/hamcrest/JavaHamcrest/hamcrest-core)
     (New BSD License) Hamcrest library (org.hamcrest:hamcrest-library:1.3 - https://github.com/hamcrest/JavaHamcrest/hamcrest-library)
     (Public Domain, per Creative Commons CC0) HdrHistogram (org.hdrhistogram:HdrHistogram:2.1.6 - http://hdrhistogram.github.io/HdrHistogram/)
     (Similar to Apache License but with the acknowledgment clause removed) JDOM (org.jdom:jdom2:2.0.6 - http://www.jdom.org)
     (MIT License) JCodings (org.jruby.jcodings:jcodings:1.0.8 - no url defined)
     (MIT License) Joni (org.jruby.joni:joni:2.1.2 - http://nexus.sonatype.org/oss-repository-hosting.html/joni)
     (ISC/BSD License) jbcrypt (org.mindrot:jbcrypt:0.3m - http://www.mindrot.org/)
     (The MIT License) Mockito (org.mockito:mockito-all:1.10.19 - http://www.mockito.org)
     (The MIT License) Mockito (org.mockito:mockito-all:1.9.5 - http://www.mockito.org)
     (The MIT License) Mockito (org.mockito:mockito-core:1.10.19 - http://www.mockito.org)
     (The MIT License) Mockito (org.mockito:mockito-core:1.9.5 - http://www.mockito.org)
     (BSD) ASM Core (org.ow2.asm:asm:5.0.2 - http://asm.objectweb.org/asm/)
     (BSD) ASM Core (org.ow2.asm:asm:5.0.3 - http://asm.objectweb.org/asm/)
     (BSD) ASM Core (org.ow2.asm:asm:5.0.4 - http://asm.objectweb.org/asm/)
     (BSD) ASM Analysis (org.ow2.asm:asm-analysis:5.0.3 - http://asm.objectweb.org/asm-analysis/)
     (BSD) ASM Commons (org.ow2.asm:asm-commons:5.0.2 - http://asm.objectweb.org/asm-commons/)
     (BSD) ASM Commons (org.ow2.asm:asm-commons:5.0.3 - http://asm.objectweb.org/asm-commons/)
     (BSD) ASM Tree (org.ow2.asm:asm-tree:5.0.2 - http://asm.objectweb.org/asm-tree/)
     (BSD) ASM Tree (org.ow2.asm:asm-tree:5.0.3 - http://asm.objectweb.org/asm-tree/)
     (BSD) ASM Util (org.ow2.asm:asm-util:5.0.3 - http://asm.objectweb.org/asm-util/)
     (CC0) reactive-streams (org.reactivestreams:reactive-streams:1.0.0 - http://www.reactive-streams.org/)
     (The New BSD License) (WTFPL) Reflections (org.reflections:reflections:0.9.11 - http://github.com/ronmamo/reflections)
     (BSD 3-Clause) Scala Compiler (org.scala-lang:scala-compiler:2.11.12 - http://www.scala-lang.org/)
     (BSD-like) Scala Compiler (org.scala-lang:scala-compiler:2.9.2 - http://www.scala-lang.org/)
     (BSD 3-Clause) Scala Library (org.scala-lang:scala-library:2.11.12 - http://www.scala-lang.org/)
     (BSD 3-Clause) Scala Library (org.scala-lang:scala-library:2.11.8 - http://www.scala-lang.org/)
     (BSD-like) Scala Library (org.scala-lang:scala-library:2.9.2 - http://www.scala-lang.org/)
     (BSD 3-Clause) Scala Compiler (org.scala-lang:scala-reflect:2.11.12 - http://www.scala-lang.org/)
     (BSD 3-Clause) Scala Compiler (org.scala-lang:scala-reflect:2.11.8 - http://www.scala-lang.org/)
     (BSD 3-clause) scala-java8-compat (org.scala-lang.modules:scala-java8-compat_2.11:0.7.0 - http://www.scala-lang.org/)
     (BSD 3-clause) scala-parser-combinators (org.scala-lang.modules:scala-parser-combinators_2.11:1.0.4 - http://www.scala-lang.org/)
     (BSD 3-clause) scala-xml (org.scala-lang.modules:scala-xml_2.11:1.0.5 - http://www.scala-lang.org/)
     (MIT License) JCL 1.2 implemented over SLF4J (org.slf4j:jcl-over-slf4j:1.7.25 - http://www.slf4j.org)
     (MIT License) JCL 1.1.1 implemented over SLF4J (org.slf4j:jcl-over-slf4j:1.7.6 - http://www.slf4j.org)
     (MIT License) JCL 1.1.1 implemented over SLF4J (org.slf4j:jcl-over-slf4j:1.7.7 - http://www.slf4j.org)
     (MIT License) JUL to SLF4J bridge (org.slf4j:jul-to-slf4j:1.7.25 - http://www.slf4j.org)
     (MIT License) JUL to SLF4J bridge (org.slf4j:jul-to-slf4j:1.7.6 - http://www.slf4j.org)
     (MIT License) SLF4J API Module (org.slf4j:slf4j-api:1.7.25 - http://www.slf4j.org)
     (MIT License) SLF4J Extensions Module (org.slf4j:slf4j-ext:1.7.25 - http://www.slf4j.org)
     (MIT License) SLF4J Simple Binding (org.slf4j:slf4j-simple:1.6.4 - http://www.slf4j.org)
     (MIT License) SLF4J Simple Binding (org.slf4j:slf4j-simple:1.7.25 - http://www.slf4j.org)
     (Public Domain) XZ for Java (org.tukaani:xz:1.0 - http://tukaani.org/xz/java.html)
     (MIT License) oro (oro:oro:2.0.8 - no url defined)
     (The BSD License) xmlenc Library (xmlenc:xmlenc:0.52 - http://xmlenc.sourceforge.net)

The following dependencies have standard licenses similar to ASL 2.0 but which requires some degree of reciprocity or other restriction on use.

     (Common Development and Distribution License (CDDL) v1.0) JavaBeans Activation Framework (JAF) (javax.activation:activation:1.1 - http://java.sun.com/products/javabeans/jaf/index.jsp)
     (COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0) JSR-250 Common Annotations for the JavaTM Platform (javax.annotation:jsr250-api:1.0 - http://jcp.org/aboutJava/communityprocess/final/jsr250/index.html)
     (CDDL + GPLv2 with classpath exception) Expression Language API 2.2 (javax.el:javax.el-api:2.2.5 - http://uel.java.net)
     (CDDL) (GPLv2+CE) JavaMail API (javax.mail:mail:1.4.2 - http://java.sun.com/projects/javamail/mail)
     (CDDL + GPLv2 with classpath exception) Java Servlet API (javax.servlet:javax.servlet-api:3.0.1 - http://servlet-spec.java.net)
     (CDDL License) jsr311-api (javax.ws.rs:jsr311-api:1.1.1 - https://jsr311.dev.java.net)
     (COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0) (GNU General Public Library) Streaming API for XML (javax.xml.stream:stax-api:1.0-2 - no url defined)
     (CDDL + GPLv2 with classpath exception) Expression Language 2.2 Implementation (org.glassfish.web:javax.el:2.2.6 - http://uel.java.net)
     (Common Development and Distribution License) servlet-api (javax.servlet:servlet-api:2.5 - no url defined)
     (CDDL v1.1 / GPL v2 dual license) Codemodel Core (com.sun.codemodel:codemodel:2.6 - http://codemodel.java.net/codemodel/)
     (CDDL 1.1) (GPL2 w/ CPE) istack common utility code runtime (com.sun.istack:istack-commons-runtime:2.16 - http://java.net/istack-commons/istack-commons-runtime/)
     (CDDL 1.1) (GPL2 w/ CPE) jersey-client (com.sun.jersey:jersey-client:1.18.1 - https://jersey.java.net/jersey-client/)
     (CDDL 1.1) (GPL2 w/ CPE) jersey-client (com.sun.jersey:jersey-client:1.9 - https://jersey.java.net/jersey-client/)
     (CDDL 1.1) (GPL2 w/ CPE) jersey-core (com.sun.jersey:jersey-core:1.18.1 - https://jersey.java.net/jersey-core/)
     (CDDL 1.1) (GPL2 w/ CPE) jersey-core (com.sun.jersey:jersey-core:1.9 - https://jersey.java.net/jersey-core/)
     (CDDL 1.1) (GPL2 w/ CPE) jersey-json (com.sun.jersey:jersey-json:1.9 - https://jersey.java.net/jersey-json/)
     (CDDL 1.1) (GPL2 w/ CPE) jersey-server (com.sun.jersey:jersey-server:1.18.1 - https://jersey.java.net/jersey-server/)
     (CDDL 1.1) (GPL2 w/ CPE) jersey-server (com.sun.jersey:jersey-server:1.9 - https://jersey.java.net/jersey-server/)
     (CDDL 1.1) (GPL2 w/ CPE) jersey-servlet (com.sun.jersey:jersey-servlet:1.18.1 - https://jersey.java.net/jersey-servlet/)
     (CDDL 1.1) (GPL2 w/ CPE) Jersey Test Framework - Core (com.sun.jersey.jersey-test-framework:jersey-test-framework-core:1.18.1 - https://jersey.java.net/jersey-test-framework/jersey-test-framework-core/)
     (CDDL 1.1) (GPL2 w/ CPE) Jersey Test Framework - InMemory Module (com.sun.jersey.jersey-test-framework:jersey-test-framework-inmemory:1.18.1 - https://jersey.java.net/jersey-test-framework/jersey-test-framework-inmemory/)
     (CDDL 1.1) (GPL2 w/ CPE) JAXB CORE (com.sun.xml.bind:jaxb-core:2.2.7 - http://jaxb.java.net/)
     (CDDL 1.1) (GPL2 w/ CPE) JAXB Reference Implementation (com.sun.xml.bind:jaxb-impl:2.2.7 - http://jaxb.java.net/)
     (CDDL 1.1) (GPL2 w/ CPE) JAXB API bundle for GlassFish V3 (javax.xml.bind:jaxb-api:2.2.2 - https://jaxb.dev.java.net/)
     (CDDL 1.1) (GPL2 w/ CPE) Java Architecture for XML Binding (javax.xml.bind:jaxb-api:2.2.7 - http://jaxb.java.net/)
     (Common Public License - v 1.0) (GNU General Public License Version 2) (GNU Lesser General Public License Version 2.1) jnr-posix (com.github.jnr:jnr-posix:3.0.27 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix)
     (Eclipse Public License - v 1.0) (GNU Lesser General Public License) Logback Classic Module (ch.qos.logback:logback-classic:1.2.3 - http://logback.qos.ch/logback-classic)
     (Eclipse Public License - v 1.0) (GNU Lesser General Public License) Logback Core Module (ch.qos.logback:logback-core:1.2.3 - http://logback.qos.ch/logback-core)
     (Eclipse Public License 1.0) JUnit (junit:junit:4.12 - http://junit.org)
     (Eclipse Public License 1.0) clojure (org.clojure:clojure:1.2.0 - http://clojure.org/)
     (Eclipse Public License 1.0) clojure-contrib (org.clojure:clojure-contrib:1.2.0 - http://clojure.org/)
     (Eclipse Public License, Version 1.0) Aether API (org.eclipse.aether:aether-api:1.0.2.v20150114 - http://www.eclipse.org/aether/aether-api/)
     (Eclipse Public License, Version 1.0) Aether Implementation (org.eclipse.aether:aether-impl:1.0.2.v20150114 - http://www.eclipse.org/aether/aether-impl/)
     (Eclipse Public License, Version 1.0) Aether SPI (org.eclipse.aether:aether-spi:1.0.2.v20150114 - http://www.eclipse.org/aether/aether-spi/)
     (Eclipse Public License, Version 1.0) Aether Utilities (org.eclipse.aether:aether-util:1.0.2.v20150114 - http://www.eclipse.org/aether/aether-util/)
     (Eclipse Public License v1.0) Eclipse ECJ (org.eclipse.jdt.core.compiler:ecj:4.4.2 - http://www.eclipse.org/jdt/)
     (Eclipse Public License, Version 1.0) org.eclipse.sisu.inject (org.eclipse.sisu:org.eclipse.sisu.inject:0.3.0 - http://www.eclipse.org/sisu/org.eclipse.sisu.inject/)
     (Eclipse Public License, Version 1.0) org.eclipse.sisu.plexus (org.eclipse.sisu:org.eclipse.sisu.plexus:0.3.0 - http://www.eclipse.org/sisu/org.eclipse.sisu.plexus/)

The following dependencies have custom licenses similar to Apache 2.0.

     (Copyright 2002 (C) The Codehaus. All Rights Reserved.) classworlds (classworlds:classworlds:1.1-alpha-2 - http://classworlds.codehaus.org/)
     (Copyright (c) 2000-2011 INRIA, France Telecom.  All rights reserved.) ASM Core (asm:asm:3.1 - http://asm.objectweb.org/asm/)
     (Java HTML Tidy License) JTidy (net.sf.jtidy:jtidy:r938 - http://jtidy.sourceforge.net)
     (Copyright (C) 2000-2012 Jason Hunter & Brett McLaughlin.  All rights reserved.) jdom (jdom:jdom:1.0 - no url defined)

