Apache Drill
Copyright 2013-2024 The Apache Software Foundation

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

This product depends on third party software that falls under a variety of licenses.
All dependencies with licenses other than Apache are specified in the LICENSE file.
For easy reference, all of the dependencies that fall under Class B licenses Reciprocal
Licenses are included in the binary release under a separate directory located at jar/classb.
More information on Class B licenses is available here:
http://www.apache.org/legal/3party.html

Please see LICENSE for additional copyright and licensing information.
