Apache IoTDB
Copyright 2018-2022 The Apache Software Foundation.

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

============================================================================

IoTDB project uses 4 Chinese Patents:
* 201711384490X
* 201810111712.9
* 201711322631.5
* 201711319331.1

According to the Apache 2.0 License. The owner of the patents, Tsinghua University,
grant the users the right to the use of patent under the requirement of Apache 2.0 License.

============================================================================

Apache Commons Collections
Copyright 2001-2019 The Apache Software Foundation

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