Druid - a distributed column store.
Copyright 2012-2016 Metamarkets Group Inc.
Copyright 2015-2016 Yahoo! Inc.
Copyright 2015-2016 Imply Data, Inc.

-------------------------------------------------------------------------------

This product contains a modified version of Andrew Duffy's java-alphanum library
  * LICENSE:
    * https://github.com/amjjd/java-alphanum/blob/5c036e2e492cc7f3b7bcdebd46b8f9e2a87927e5/LICENSE.txt (Apache License, Version 2.0)
  * HOMEPAGE:
    * https://github.com/amjjd/java-alphanum

This product contains conjunctive normal form conversion code and a variance aggregator algorithm adapted from Apache Hive
  * LICENSE:
    * https://github.com/apache/hive/blob/branch-2.0/LICENSE (Apache License, Version 2.0)
  * HOMEPAGE:
    * https://github.com/apache/hive

This product contains variable length long deserialization code adapted from Apache Lucene
  * LICENSE:
    * https://github.com/apache/lucene-solr/blob/master/lucene/LICENSE.txt (Apache License, Version 2.0)
  * HOMEPAGE:
    * https://github.com/apache/lucene-solr

This product contains a modified version of Metamarkets java-util library
  * LICENSE:
    * https://github.com/metamx/java-util/blob/master/LICENSE (Apache License, Version 2.0)
  * HOMEPAGE:
    * https://github.com/metamx/java-util
  * COMMIT TAG:
    * https://github.com/metamx/java-util/commit/826021f

This product contains a modified version of TestNG 6.8.7
  * LICENSE:
    * http://testng.org/license/ (Apache License, Version 2.0)
  * HOMEPAGE:
    * http://testng.org/

This product contains a modified version of Metamarkets bytebuffer-collections library
  * LICENSE:
    * https://github.com/metamx/bytebuffer-collections/blob/master/LICENSE (Apache License, Version 2.0)
  * HOMEPAGE:
    * https://github.com/metamx/bytebuffer-collections
  * COMMIT TAG:
    * https://github.com/metamx/bytebuffer-collections/commit/3d1e7c8

This product contains SQL query planning code adapted from Apache Calcite
  * LICENSE:
    * https://github.com/apache/calcite/blob/master/LICENSE (Apache License, Version 2.0)
  * HOMEPAGE:
    * https://calcite.apache.org/

This product contains a modified version of Metamarkets extendedset library
  * LICENSE:
    * https://github.com/metamx/extendedset/blob/master/LICENSE (Apache License, Version 2.0)
  * HOMEPAGE:
    * https://github.com/metamx/extendedset
  * COMMIT TAG:
    * https://github.com/metamx/extendedset/commit/c9d647d

This product contains a modified version of Alessandro Colantonio's CONCISE
(COmpressed 'N' Composable Integer SEt) library, extending the functionality of
ConciseSet to use IntBuffers.
  * (c) 2010 Alessandro Colantonio
  * <mailto:colanton@mat.uniroma3.it>
  * <http://ricerca.mat.uniroma3.it/users/colanton>
  * LICENSE:
    * Apache License, Version 2.0
  * HOMEPAGE:
    * https://sourceforge.net/projects/concise/

This product contains a modified version of The Guava Authors's Closer class from Guava library:
 * LICENSE:
   * https://github.com/google/guava/blob/c462d69329709f72a17a64cb229d15e76e72199c/COPYING (Apache License, Version 2.0)
 * HOMEPAGE:
   * https://github.com/google/guava
 * COMMIT TAG:
   * https://github.com/google/guava/blob/c462d69329709f72a17a64cb229d15e76e72199c
