Apache Druid
Copyright 2018-2021 The Apache Software Foundation

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


############ SOURCE/JAVA-CORE ############

================= Apache Calcite 1.10.0 =================
Apache Calcite
Copyright 2012-2016 The Apache Software Foundation

This product is based on source code originally developed
by DynamoBI Corporation, LucidEra Inc., SQLstream Inc. and others
under the auspices of the Eigenbase Foundation
and released as the LucidDB project.




================= Apache Flink 1.8.1 =================
Apache Flink
Copyright 2014-2019 The Apache Software Foundation




================= Apache Hadoop 2.8.5 =================
Apache Hadoop
Copyright 2009-2017 The Apache Software Foundation




================= Apache Hive 2.0.0 =================
Apache Hive
Copyright 2008-2015 The Apache Software Foundation




================= Apache Hive 2.0.1 =================
Apache Hive
Copyright 2008-2016 The Apache Software Foundation




================= Apache Hive 2.7.0 =================
Apache Hive
Copyright 2008-2018 The Apache Software Foundation




================= Apache Kafka 2.7.0 =================
Apache Kafka
Copyright 2020 The Apache Software Foundation.




================= Apache Lucene 6.2.0 =================
Apache Lucene
Copyright 2014 The Apache Software Foundation




================= Metamarkets bytebuffer-collections 0.2.5 =================
bytebuffer-collections
Copyright 2011-2015 Metamarkets Group Inc.




================= Metamarkets java-util 1.3.3 =================
java-util
Copyright 2011-2017 Metamarkets Group Inc.




================= Metamarkets extendedset 1.3.10 =================
extendedset
Copyright 2012 Metamarkets Group Inc.

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

This library contains a modified version of Alessandro Colantonio's CONCISE
(COmpressed 'N' Composable Integer SEt) library, extending the functionality of
ConciseSet to use IntBuffers.



