
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

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

For jQuery 3.5.1 (storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/jquery-3.5.1.min.js)

MIT license selected:

Copyright OpenJS Foundation and other contributors, https://openjsf.org/

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

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

For jQuery Cookies 2.2.0 (storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/jquery.cookies.2.2.0.min.js)

Copyright (c) 2005 - 2010, James Auldridge

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

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

For typeahead jquery 0.10.5 (storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/typeahead.jquery.min.js)

Copyright (c) 2013-2014 Twitter, Inc

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

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

For js-yaml.min.js (storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/js-yaml.min.js)

(The MIT License)

Copyright (C) 2011-2015 by Vitaly Puzrin

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

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

For dagre.min.js (storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/dagre.min.js)

Copyright (c) 2012-2014 Chris Pettitt

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

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

For cytoscape.min.js and cytoscape-dagre.js (storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/cytoscape.min.js and storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/cytoscape-dagre.js)

Copyright (c) 2016 The Cytoscape Consortium

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the “Software”), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

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

For esprima.js (storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/esprima.min.js)

Copyright JS Foundation and other contributors, https://js.foundation/

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

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

For mustache.js (storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/jquery.mustache.js)

The MIT License

Copyright (c) 2009 Chris Wanstrath (Ruby)
Copyright (c) 2010-2014 Jan Lehnardt (JavaScript)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

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

For moment.js (storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/moment.min.js)

Copyright (c) 2011-2014 Tim Wood, Iskren Chernev, Moment.js contributors

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.


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

For Jquery url plugin (storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/url.min.js)

Jquery Url (A Jquery plugin for URL parser) v1.8.6
Source repository: https://github.com/websanova/js-url
Licensed under an MIT-style license. Seehttps://github.com/websanova/js-url#license for details.

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


For jquery.blockUI.min.js (storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/jquery.blockUI.min.js)

jQuery BlockUI; v20131009
http://jquery.malsup.com/block/
Copyright (c) 2013 M. Alsup; Dual licensed: MIT/GPL

Copyright © 2007-2013 M. Alsup.

MIT license selected:

The BlockUI plugin is dual licensed under the MIT and GPL licenses.

You may use either license. The MIT license is recommended for most projects
because it is simple and easy to understand and it places almost no
restrictions on what you can do with the plugin.

If the GPL suits your project better you are also free to use the plugin
under that license.

You do not have to do anything special to choose one license or the other and
you don't have to notify anyone which license you are using. You are free to
use the BlockUI plugin in commercial projects as long as the copyright header is left intact.

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

For jquery dataTables v1.10.4

(storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/jquery.dataTables.1.10.4.min.js
storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/css/jquery.dataTables.1.10.4.min.css
storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/images/{{back, forward}_{disabled, enabled, enabled_hover}}.png
storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/images/{sort_{asc, asc_disabled, both, desc, desc_disabled}}.png)

Copyright (c) 2008-2013 SpryMedia Limited
http://datatables.net

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

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

For jquery dataTables bootstrap integration

(storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/jquery.dataTables.1.10.4.min.js
storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/dataTables.bootstrap.min.js
storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/css/dataTables.bootstrap.css)

Copyright (c) 2013-2014 SpryMedia Limited
http://datatables.net/license
https://github.com/DataTables/Plugins/tree/master/integration/bootstrap/3

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


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

For bootstrap v3.3.1
(storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/bootstrap-3.3.1.min.js
storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/css/bootstrap-3.3.1.min.css)

Bootstrap v3.3.1 (http://getbootstrap.com)
Copyright 2011-2014 Twitter, Inc.
Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)

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

For jQuery JSONFormatter 1.0.1 2015-02-28
(storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/jsonFormatter.min.js
storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/css/jsonFormatter.min.css)
http://www.jqueryscript.net/other/jQuery-Plugin-For-Pretty-JSON-Formatting-jsonFormatter.htmlA

The MIT License (MIT)

Copyright (c) 2015 Matthew Heironimus

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

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

For statistic image

storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/images/statistic.png

Copyright (c) 2015 Github, Inc.


Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:


The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.


THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

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

For PMML sample files

examples/storm-pmml-examples/src/main/resources/KNIME_PMML_4.1_Examples_single_audit_logreg.xml
examples/storm-pmml-examples/src/main/resources/Audit.50.csv

This product bundles PMML Sample Files, which are available under a
"3-clause BSD" license.  For details, see http://dmg.org/documents/dmg-pmml-license-2016.pdf

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

For vis.js 4.16.1 2016-04-18
(storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/vis.min.js
storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/css/vis.min.css)

vis.js
https://github.com/almende/vis
A dynamic, browser-based visualization library.

The MIT License (MIT)

Copyright (C) 2011-2016 Almende B.V, http://almende.com

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

----------------------------END OF SOURCE NOTICES -------------------------------------------


The following dependencies are included in the binary Storm distributions, in addition to the source dependencies listed above.
The license texts of these dependencies can be found in the licenses directory.

    3-Clause BSD License

        * Kryo (com.esotericsoftware:kryo:5.4.0 - https://github.com/EsotericSoftware/kryo/kryo)
        * MinLog (com.esotericsoftware:minlog:1.3.1 - https://github.com/EsotericSoftware/minlog)
        * Protocol Buffers [Core] (com.google.protobuf:protobuf-java:3.3.0 - https://developers.google.com/protocol-buffers/protobuf-java/)
        * ReflectASM (com.esotericsoftware:reflectasm:1.11.9 - https://github.com/EsotericSoftware/reflectasm)

    Apache-2.0

        * Apache Avro (org.apache.avro:avro:1.11.3 - https://avro.apache.org)
        * Apache Commons FileUpload (commons-fileupload:commons-fileupload:1.5 - https://commons.apache.org/proper/commons-fileupload/)
        * Apache Commons Lang (org.apache.commons:commons-lang3:3.13.0 - https://commons.apache.org/proper/commons-lang/)
        * Apache Commons Text (org.apache.commons:commons-text:1.11.0 - https://commons.apache.org/proper/commons-text)
        * snappy-java (org.xerial.snappy:snappy-java:1.1.10.4 - https://github.com/xerial/snappy-java)

    Apache License

        * carbonite (org.clojars.bipinprasad:carbonite:1.6.0 - https://github.com/bipinprasad/carbonite)
        * Log4j Implemented Over SLF4J (org.slf4j:log4j-over-slf4j:1.7.36 - http://www.slf4j.org)

    Apache License, Version 2.0

        * Aggregate Designer Algorithm (net.hydromatic:aggdesigner-algorithm:6.0 - http://github.com/julianhyde/aggdesigner/aggdesigner-algorithm)
        * agrona (org.agrona:agrona:1.12.0 - https://github.com/real-logic/agrona)
        * aircompressor (io.airlift:aircompressor:0.10 - http://github.com/airlift/aircompressor)
        * Annotations for Metrics (io.dropwizard.metrics:metrics-annotation:4.1.16 - https://metrics.dropwizard.io/metrics-annotation)
        * Apache Ant Core (org.apache.ant:ant:1.9.1 - http://ant.apache.org/)
        * Apache Ant Launcher (org.apache.ant:ant-launcher:1.9.1 - http://ant.apache.org/)
        * Apache Calcite Avatica (org.apache.calcite.avatica:avatica-core:1.11.0 - https://calcite.apache.org/avatica/avatica-core)
        * Apache Calcite Avatica (Shaded) (org.apache.calcite.avatica:avatica:1.11.0 - https://calcite.apache.org/avatica/avatica)
        * Apache Commons CLI (commons-cli:commons-cli:1.4 - http://commons.apache.org/proper/commons-cli/)
        * Apache Commons Codec (commons-codec:commons-codec:1.11 - http://commons.apache.org/proper/commons-codec/)
        * Apache Commons Collections (commons-collections:commons-collections:3.2.2 - http://commons.apache.org/collections/)
        * Apache Commons Compress (org.apache.commons:commons-compress:1.21 - https://commons.apache.org/proper/commons-compress/)
        * Apache Commons Configuration (org.apache.commons:commons-configuration2:2.8.0 - https://commons.apache.org/proper/commons-configuration/)
        * Apache Commons Crypto (org.apache.commons:commons-crypto:1.1.0 - https://commons.apache.org/proper/commons-crypto/)
        * Apache Commons CSV (org.apache.commons:commons-csv:1.4 - http://commons.apache.org/proper/commons-csv/)
        * Apache Commons Exec (org.apache.commons:commons-exec:1.3 - http://commons.apache.org/proper/commons-exec/)
        * Apache Commons IO (commons-io:commons-io:2.11.0 - https://commons.apache.org/proper/commons-io/)
        * Apache Commons Logging (commons-logging:commons-logging:1.2 - http://commons.apache.org/proper/commons-logging/)
        * Apache Commons Math (org.apache.commons:commons-math3:3.6.1 - http://commons.apache.org/proper/commons-math/)
        * Apache Commons Net (commons-net:commons-net:3.9.0 - https://commons.apache.org/proper/commons-net/)
        * Apache Curator (org.apache.curator:apache-curator:2.12.0 - http://curator.apache.org)
        * Apache Derby Database Engine and Embedded JDBC Driver (org.apache.derby:derby:10.14.1.0 - http://db.apache.org/derby/)
        * Apache Geronimo JCache Spec 1.0 (org.apache.geronimo.specs:geronimo-jcache_1.0_spec:1.0-alpha-1 - http://geronimo.apache.org/maven/specs/geronimo-jcache_1.0_spec/1.0-alpha-1)
        * Apache Groovy (org.codehaus.groovy:groovy-all:2.4.11 - http://groovy-lang.org)
        * Apache Hadoop Annotations (org.apache.hadoop:hadoop-annotations:3.3.6 - no url defined)
        * Apache Hadoop Archives (org.apache.hadoop:hadoop-archives:3.3.6 - no url defined)
        * Apache Hadoop Auth (org.apache.hadoop:hadoop-auth:3.3.6 - no url defined)
        * Apache Hadoop Client Aggregator (org.apache.hadoop:hadoop-client:3.3.6 - no url defined)
        * Apache Hadoop Common (org.apache.hadoop:hadoop-common:3.3.6 - no url defined)
        * Apache Hadoop Distributed Copy (org.apache.hadoop:hadoop-distcp:3.2.4 - no url defined)
        * Apache Hadoop HDFS (org.apache.hadoop:hadoop-hdfs:3.3.6 - no url defined)
        * Apache Hadoop HDFS Client (org.apache.hadoop:hadoop-hdfs-client:3.3.6 - no url defined)
        * Apache Hadoop MapReduce Common (org.apache.hadoop:hadoop-mapreduce-client-common:3.3.6 - no url defined)
        * Apache Hadoop MapReduce Core (org.apache.hadoop:hadoop-mapreduce-client-core:3.3.6 - no url defined)
        * Apache Hadoop MapReduce JobClient (org.apache.hadoop:hadoop-mapreduce-client-jobclient:3.3.6 - no url defined)
        * Apache Hadoop Registry (org.apache.hadoop:hadoop-registry:3.3.6 - no url defined)
        * Apache Hadoop shaded Guava (org.apache.hadoop.thirdparty:hadoop-shaded-guava:1.1.1 - https://www.apache.org/hadoop-thirdparty/hadoop-shaded-guava/)
        * Apache Hadoop shaded Protobuf 3.7 (org.apache.hadoop.thirdparty:hadoop-shaded-protobuf_3_7:1.1.1 - https://www.apache.org/hadoop-thirdparty/hadoop-shaded-protobuf_3_7/)
        * Apache Hadoop YARN API (org.apache.hadoop:hadoop-yarn-api:3.3.6 - no url defined)
        * Apache Hadoop YARN ApplicationHistoryService (org.apache.hadoop:hadoop-yarn-server-applicationhistoryservice:3.3.6 - no url defined)
        * Apache Hadoop YARN Client (org.apache.hadoop:hadoop-yarn-client:3.3.6 - no url defined)
        * Apache Hadoop YARN Common (org.apache.hadoop:hadoop-yarn-common:3.3.6 - no url defined)
        * Apache Hadoop YARN Registry (org.apache.hadoop:hadoop-yarn-registry:3.3.6 - no url defined)
        * Apache Hadoop YARN ResourceManager (org.apache.hadoop:hadoop-yarn-server-resourcemanager:3.3.6 - no url defined)
        * Apache Hadoop YARN Server Common (org.apache.hadoop:hadoop-yarn-server-common:3.3.6 - no url defined)
        * Apache Hadoop YARN Web Proxy (org.apache.hadoop:hadoop-yarn-server-web-proxy:3.3.6 - no url defined)
        * Apache HBase - Annotations (org.apache.hbase:hbase-annotations:2.5.6-hadoop3 - https://hbase.apache.org/hbase-annotations)
        * Apache HBase - Asynchronous FileSystem (org.apache.hbase:hbase-asyncfs:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-asyncfs)
        * Apache HBase - Client (org.apache.hbase:hbase-client:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-client)
        * Apache HBase - Common (org.apache.hbase:hbase-common:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-common)
        * Apache HBase - Hadoop Compatibility (org.apache.hbase:hbase-hadoop-compat:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-hadoop-compat)
        * Apache HBase - Hadoop Two Compatibility (org.apache.hbase:hbase-hadoop2-compat:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-hadoop2-compat)
        * Apache HBase - HTTP (org.apache.hbase:hbase-http:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-http)
        * Apache HBase - Logging (org.apache.hbase:hbase-logging:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-logging)
        * Apache HBase - Metrics API (org.apache.hbase:hbase-metrics-api:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-metrics-api)
        * Apache HBase - Metrics Implementation (org.apache.hbase:hbase-metrics:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-metrics)
        * Apache HBase Patched and Relocated (Shaded) Protobuf (org.apache.hbase.thirdparty:hbase-shaded-protobuf:4.1.5 - https://hbase.apache.org/hbase-shaded-protobuf)
        * Apache HBase - Procedure (org.apache.hbase:hbase-procedure:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-procedure)
        * Apache HBase - Protocol (org.apache.hbase:hbase-protocol:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-protocol)
        * Apache HBase Relocated (Shaded) GSON Libs (org.apache.hbase.thirdparty:hbase-shaded-gson:4.1.5 - https://hbase.apache.org/hbase-shaded-gson)
        * Apache HBase Relocated (Shaded) Jersey Libs (org.apache.hbase.thirdparty:hbase-shaded-jersey:4.1.5 - https://hbase.apache.org/hbase-shaded-jersey)
        * Apache HBase Relocated (Shaded) Jetty Libs (org.apache.hbase.thirdparty:hbase-shaded-jetty:4.1.5 - https://hbase.apache.org/hbase-shaded-jetty)
        * Apache HBase Relocated (Shaded) Netty Libs (org.apache.hbase.thirdparty:hbase-shaded-netty:4.1.5 - https://hbase.apache.org/hbase-shaded-netty)
        * Apache HBase Relocated (Shaded) Third-party Miscellaneous Libs (org.apache.hbase.thirdparty:hbase-shaded-miscellaneous:4.1.5 - https://hbase.apache.org/hbase-shaded-miscellaneous)
        * Apache HBase - Replication (org.apache.hbase:hbase-replication:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-replication)
        * Apache HBase - Server (org.apache.hbase:hbase-server:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-server)
        * Apache HBase - Shaded Protocol (org.apache.hbase:hbase-protocol-shaded:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-protocol-shaded)
        * Apache HBase Unsafe Wrapper (org.apache.hbase.thirdparty:hbase-unsafe:4.1.5 - https://hbase.apache.org/hbase-unsafe)
        * Apache HBase - Zookeeper (org.apache.hbase:hbase-zookeeper:2.5.6-hadoop3 - https://hbase.apache.org/hbase-build-configuration/hbase-zookeeper)
        * Apache HttpClient (org.apache.httpcomponents:httpclient:4.5.14 - http://hc.apache.org/httpcomponents-client-ga)
        * Apache HttpCore (org.apache.httpcomponents:httpcore:4.4.16 - http://hc.apache.org/httpcomponents-core-ga)
        * Apache Ivy (org.apache.ivy:ivy:2.4.0 - http://ant.apache.org/ivy/)
        * Apache Kafka (org.apache.kafka:kafka-clients:3.6.0 - https://kafka.apache.org)
        * Apache Log4j 1.x Compatibility API (org.apache.logging.log4j:log4j-1.2-api:2.21.1 - https://logging.apache.org/log4j/2.x/log4j-1.2-api/)
        * Apache Log4j API (org.apache.logging.log4j:log4j-api:2.21.1 - https://logging.apache.org/log4j/2.x/log4j-api/)
        * Apache Log4j Core (org.apache.logging.log4j:log4j-core:2.21.1 - https://logging.apache.org/log4j/2.x/log4j-core/)
        * Apache Log4j SLF4J Binding (org.apache.logging.log4j:log4j-slf4j-impl:2.21.1 - https://logging.apache.org/log4j/2.x/log4j-slf4j-impl/)
        * Apache Log4j Web (org.apache.logging.log4j:log4j-web:2.21.1 - https://logging.apache.org/log4j/2.x/log4j-web/)
        * Apache Parquet Hadoop Bundle (org.apache.parquet:parquet-hadoop-bundle:1.10.0 - https://parquet.apache.org)
        * Apache Thrift (org.apache.thrift:libfb303:0.9.3 - http://thrift.apache.org)
        * Apache Thrift (org.apache.thrift:libthrift:0.18.1 - http://thrift.apache.org)
        * Apache Twill API (org.apache.twill:twill-api:0.6.0-incubating - http://twill.incubator.apache.org/twill-api)
        * Apache Twill common library (org.apache.twill:twill-common:0.6.0-incubating - http://twill.incubator.apache.org/twill-common)
        * Apache Twill core library (org.apache.twill:twill-core:0.6.0-incubating - http://twill.incubator.apache.org/twill-core)
        * Apache Twill discovery service API (org.apache.twill:twill-discovery-api:0.6.0-incubating - http://twill.incubator.apache.org/twill-discovery-api)
        * Apache Twill discovery service implementations (org.apache.twill:twill-discovery-core:0.6.0-incubating - http://twill.incubator.apache.org/twill-discovery-core)
        * Apache Twill ZooKeeper client library (org.apache.twill:twill-zookeeper:0.6.0-incubating - http://twill.incubator.apache.org/twill-zookeeper)
        * Apache Yetus - Audience Annotations (org.apache.yetus:audience-annotations:0.12.0 - https://yetus.apache.org/audience-annotations)
        * Apache Yetus - Audience Annotations (org.apache.yetus:audience-annotations:0.13.0 - https://yetus.apache.org/audience-annotations)
        * Apache ZooKeeper - Jute (org.apache.zookeeper:zookeeper-jute:3.9.1 - http://zookeeper.apache.org/zookeeper-jute)
        * Apache ZooKeeper - Server (org.apache.zookeeper:zookeeper:3.9.1 - http://zookeeper.apache.org/zookeeper)
        * Arrow Format (org.apache.arrow:arrow-format:0.8.0 - http://arrow.apache.org/arrow-format/)
        * Arrow Memory (org.apache.arrow:arrow-memory:0.8.0 - http://arrow.apache.org/arrow-memory/)
        * Arrow Vectors (org.apache.arrow:arrow-vector:0.8.0 - http://arrow.apache.org/arrow-vector/)
        * ASM based accessors helper used by json-smart (net.minidev:accessors-smart:2.5.0 - https://urielch.github.io/)
        * Bean Validation API (javax.validation:validation-api:1.1.0.Final - http://beanvalidation.org)
        * BoneCP :: Core Library (com.jolbox:bonecp:0.8.0.RELEASE - http://jolbox.com/bonecp)
        * Caffeine cache (com.github.ben-manes.caffeine:caffeine:2.3.5 - https://github.com/ben-manes/caffeine)
        * Calcite Core (org.apache.calcite:calcite-core:1.16.0 - https://calcite.apache.org/calcite-core)
        * Calcite Druid (org.apache.calcite:calcite-druid:1.16.0 - https://calcite.apache.org/calcite-druid)
        * Calcite Linq4j (org.apache.calcite:calcite-linq4j:1.16.0 - https://calcite.apache.org/calcite-linq4j)
        * chill-java (com.twitter:chill-java:0.9.5 - https://github.com/twitter/chill)
        * ClassMate (com.fasterxml:classmate:1.3.1 - http://github.com/cowtowncoder/java-classmate)
        * com.helger:profiler (com.helger:profiler:1.1.1 - https://github.com/phax/profiler)
        * com.yahoo.datasketches:memory (com.yahoo.datasketches:memory:0.9.0 - https://datasketches.github.io/memory/)
        * com.yahoo.datasketches:sketches-core (com.yahoo.datasketches:sketches-core:0.9.0 - https://datasketches.github.io/sketches-core/)
        * Commons Daemon (commons-daemon:commons-daemon:1.0.13 - http://commons.apache.org/daemon/)
        * Commons DBCP (commons-dbcp:commons-dbcp:1.4 - http://commons.apache.org/dbcp/)
        * Commons Lang (commons-lang:commons-lang:2.6 - http://commons.apache.org/lang/)
        * Commons Logging (commons-logging:commons-logging:1.1.3 - http://commons.apache.org/proper/commons-logging/)
        * Commons Pool (commons-pool:commons-pool:1.5.4 - http://commons.apache.org/pool/)
        * Curator Client (org.apache.curator:curator-client:5.5.0 - https://curator.apache.org/curator-client)
        * Curator Framework (org.apache.curator:curator-framework:5.5.0 - https://curator.apache.org/curator-framework)
        * Curator Recipes (org.apache.curator:curator-recipes:5.5.0 - https://curator.apache.org/curator-recipes)
        * DataNucleus Core (org.datanucleus:datanucleus-core:4.1.17 - http://www.datanucleus.org/#/datanucleus-core)
        * DataNucleus JDO API plugin (org.datanucleus:datanucleus-api-jdo:4.2.4 - http://www.datanucleus.org/#/datanucleus-api-jdo)
        * DataNucleus RDBMS plugin (org.datanucleus:datanucleus-rdbms:4.1.19 - http://www.datanucleus.org/#/datanucleus-rdbms)
        * Disruptor Framework (com.lmax:disruptor:3.4.2 - http://lmax-exchange.github.com/disruptor)
        * Dropwizard (io.dropwizard:dropwizard-core:1.3.29 - http://www.dropwizard.io/1.3.29/dropwizard-core)
        * Dropwizard Asset Bundle (io.dropwizard:dropwizard-assets:1.3.29 - http://www.dropwizard.io/1.3.29/dropwizard-assets)
        * Dropwizard Configuration Support (io.dropwizard:dropwizard-configuration:1.3.29 - http://www.dropwizard.io/1.3.29/dropwizard-configuration)
        * Dropwizard Jackson Support (io.dropwizard:dropwizard-jackson:1.3.29 - http://www.dropwizard.io/1.3.29/dropwizard-jackson)
        * Dropwizard Jersey Support (io.dropwizard:dropwizard-jersey:1.3.29 - http://www.dropwizard.io/1.3.29/dropwizard-jersey)
        * Dropwizard Jetty Support (io.dropwizard:dropwizard-jetty:1.3.29 - http://www.dropwizard.io/1.3.29/dropwizard-jetty)
        * Dropwizard Lifecycle Support (io.dropwizard:dropwizard-lifecycle:1.3.29 - http://www.dropwizard.io/1.3.29/dropwizard-lifecycle)
        * Dropwizard Logging Support (io.dropwizard:dropwizard-logging:1.3.29 - http://www.dropwizard.io/1.3.29/dropwizard-logging)
        * Dropwizard Metrics Support (io.dropwizard:dropwizard-metrics:1.3.29 - http://www.dropwizard.io/1.3.29/dropwizard-metrics)
        * Dropwizard Request Logging Support (io.dropwizard:dropwizard-request-logging:1.3.29 - http://www.dropwizard.io/1.3.29/dropwizard-request-logging)
        * Dropwizard Servlet Support (io.dropwizard:dropwizard-servlets:1.3.29 - http://www.dropwizard.io/1.3.29/dropwizard-servlets)
        * Dropwizard Utility Classes (io.dropwizard:dropwizard-util:1.3.29 - http://www.dropwizard.io/1.3.29/dropwizard-util)
        * Dropwizard Validation Support (io.dropwizard:dropwizard-validation:1.3.29 - http://www.dropwizard.io/1.3.29/dropwizard-validation)
        * Ehcache (org.ehcache:ehcache:3.3.1 - http://ehcache.org)
        * error-prone annotations (com.google.errorprone:error_prone_annotations:2.21.1 - https://errorprone.info/error_prone_annotations)
        * Esri Geometry API for Java (com.esri.geometry:esri-geometry-api:2.0.0 - https://github.com/Esri/geometry-api-java)
        * fastutil (it.unimi.dsi:fastutil:6.5.6 - http://fasutil.dsi.unimi.it/)
        * FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.1 - http://findbugs.sourceforge.net/)
        * FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.2 - http://findbugs.sourceforge.net/)
        * fst (de.ruedigermoeller:fst:2.50 - http://ruedigermoeller.github.io/fast-serialization/)
        * Google Guice - Core Library (com.google.inject:guice:3.0 - http://code.google.com/p/google-guice/guice/)
        * Google Guice - Extensions - AssistedInject (com.google.inject.extensions:guice-assistedinject:3.0 - http://code.google.com/p/google-guice/extensions-parent/guice-assistedinject/)
        * Google Guice - Extensions - Servlet (com.google.inject.extensions:guice-servlet:4.0 - https://github.com/google/guice/extensions-parent/guice-servlet)
        * Graphite Integration for Metrics (io.dropwizard.metrics:metrics-graphite:3.2.6 - http://metrics.dropwizard.io/metrics-graphite/)
        * Gson (com.google.code.gson:gson:2.10.1 - https://github.com/google/gson/gson)
        * Guava: Google Core Libraries for Java (com.google.guava:guava:16.0.1 - http://code.google.com/p/guava-libraries/guava)
        * Guava: Google Core Libraries for Java (com.google.guava:guava:32.1.3-jre - https://github.com/google/guava)
        * Guava InternalFutureFailureAccess and InternalFutures (com.google.guava:failureaccess:1.0.1 - https://github.com/google/guava/failureaccess)
        * Guava ListenableFuture only (com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava - https://github.com/google/guava/listenablefuture)
        * Hadoop Metrics2 Reporter for Dropwizard Metrics (com.github.joshelser:dropwizard-metrics-hadoop-metrics2-reporter:0.1.2 - https://github.com/joshelser/dropwizard-hadoop-metrics2)
        * Hibernate Validator Engine (org.hibernate:hibernate-validator:5.4.3.Final - http://hibernate.org/validator/hibernate-validator)
        * Hibernate Validator Engine (org.hibernate.validator:hibernate-validator:6.2.5.Final - http://hibernate.org/validator/hibernate-validator)
        * HikariCP (com.zaxxer:HikariCP:2.6.1 - https://github.com/brettwooldridge/HikariCP)
        * HikariCP (com.zaxxer:HikariCP-java7:2.4.12 - https://github.com/brettwooldridge/HikariCP)
        * Hive Classifications (org.apache.hive:hive-classification:3.1.3 - https://hive.apache.org/hive-classification)
        * Hive Common (org.apache.hive:hive-common:3.1.3 - https://hive.apache.org/hive-common)
        * Hive HCatalog Core (org.apache.hive.hcatalog:hive-hcatalog-core:3.1.3 - https://hive.apache.org/hive-hcatalog/hive-hcatalog-core)
        * Hive HCatalog Server Extensions (org.apache.hive.hcatalog:hive-hcatalog-server-extensions:3.1.3 - https://hive.apache.org/hive-hcatalog/hive-hcatalog-server-extensions)
        * Hive HCatalog Streaming (org.apache.hive.hcatalog:hive-hcatalog-streaming:3.1.3 - https://hive.apache.org/hive-hcatalog/hive-hcatalog-streaming)
        * Hive HCatalog Webhcat Java Client (org.apache.hive.hcatalog:hive-webhcat-java-client:3.1.3 - https://hive.apache.org/hive-hcatalog/hive-webhcat-java-client)
        * Hive Llap Client (org.apache.hive:hive-llap-client:3.1.3 - https://hive.apache.org/hive-llap-client)
        * Hive Llap Common (org.apache.hive:hive-llap-common:3.1.3 - https://hive.apache.org/hive-llap-common)
        * Hive Llap Tez (org.apache.hive:hive-llap-tez:3.1.3 - https://hive.apache.org/hive-llap-tez)
        * Hive Metastore (org.apache.hive:hive-metastore:3.1.3 - https://hive.apache.org/hive-metastore)
        * Hive Query Language (org.apache.hive:hive-exec:3.1.3 - https://hive.apache.org/hive-exec)
        * Hive Serde (org.apache.hive:hive-serde:3.1.3 - https://hive.apache.org/hive-serde)
        * Hive Service RPC (org.apache.hive:hive-service-rpc:3.1.3 - https://hive.apache.org/hive-service-rpc)
        * Hive Shims (org.apache.hive:hive-shims:3.1.3 - https://hive.apache.org/hive-shims)
        * Hive Shims 0.23 (org.apache.hive.shims:hive-shims-0.23:3.1.3 - https://hive.apache.org/hive-shims-0.23)
        * Hive Shims Common (org.apache.hive.shims:hive-shims-common:3.1.3 - https://hive.apache.org/hive-shims-common)
        * Hive Shims Scheduler (org.apache.hive.shims:hive-shims-scheduler:3.1.3 - https://hive.apache.org/hive-shims-scheduler)
        * Hive Standalone Metastore (org.apache.hive:hive-standalone-metastore:3.1.3 - https://www.apache.org/hive-standalone-metastore/)
        * Hive Storage API (org.apache.hive:hive-storage-api:2.7.0 - https://www.apache.org/hive-storage-api/)
        * Hive Upgrade Acid (org.apache.hive:hive-upgrade-acid:3.1.3 - https://www.apache.org/hive-upgrade-acid/)
        * Hive Vector-Code-Gen Utilities (org.apache.hive:hive-vector-code-gen:3.1.3 - https://hive.apache.org/hive-vector-code-gen)
        * HPPC Collections (com.carrotsearch:hppc:0.7.2 - http://labs.carrotsearch.com/hppc.html/hppc)
        * j2html (com.j2html:j2html:1.6.0 - http://j2html.com)
        * J2ObjC Annotations (com.google.j2objc:j2objc-annotations:2.8 - https://github.com/google/j2objc/)
        * Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.15.2 - https://github.com/FasterXML/jackson)
        * Jackson-core (com.fasterxml.jackson.core:jackson-core:2.15.2 - https://github.com/FasterXML/jackson-core)
        * jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.15.2 - https://github.com/FasterXML/jackson)
        * Jackson dataformat: Smile (com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.15.2 - https://github.com/FasterXML/jackson-dataformats-binary)
        * Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.2 - https://github.com/FasterXML/jackson-dataformats-text)
        * Jackson datatype: Guava (com.fasterxml.jackson.datatype:jackson-datatype-guava:2.15.2 - https://github.com/FasterXML/jackson-datatypes-collections)
        * Jackson datatype: jdk8 (com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8)
        * Jackson datatype: Joda (com.fasterxml.jackson.datatype:jackson-datatype-joda:2.15.2 - https://github.com/FasterXML/jackson-datatype-joda)
        * Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
        * Jackson Integration for Metrics (io.dropwizard.metrics:metrics-json:3.1.0 - http://metrics.codahale.com/metrics-json/)
        * Jackson Integration for Metrics (io.dropwizard.metrics:metrics-json:4.1.16 - https://metrics.dropwizard.io/metrics-json)
        * Jackson-JAXRS: base (com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.15.2 - https://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-base)
        * Jackson-JAXRS: JSON (com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.15.2 - https://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-json-provider)
        * Jackson module: Afterburner (com.fasterxml.jackson.module:jackson-module-afterburner:2.15.2 - https://github.com/FasterXML/jackson-modules-base)
        * Jackson module: Old JAXB Annotations (javax.xml.bind) (com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.15.2 - https://github.com/FasterXML/jackson-modules-base)
        * Jackson-module-parameter-names (com.fasterxml.jackson.module:jackson-module-parameter-names:2.15.2 - https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names)
        * Jakarta Bean Validation API (jakarta.validation:jakarta.validation-api:2.0.2 - https://beanvalidation.org)
        * Java Concurrency Tools Core Library (org.jctools:jctools-core:2.0.1 - https://github.com/JCTools)
        * java-util (com.cedarsoftware:java-util:1.9.0 - https://github.com/jdereg/java-util)
        * javax.inject (javax.inject:javax.inject:1 - http://code.google.com/p/atinject/)
        * JBoss Logging 3 (org.jboss.logging:jboss-logging:3.3.0.Final - http://www.jboss.org)
        * JCIP Annotations under Apache License (com.github.stephenc.jcip:jcip-annotations:1.0-1 - http://stephenc.github.com/jcip-annotations)
        * JCL 1.2 implemented over SLF4J (org.slf4j:jcl-over-slf4j:1.7.36 - http://www.slf4j.org)
        * JDO API (javax.jdo:jdo-api:3.0.1 - http://db.apache.org/jdo)
        * JDO API (org.datanucleus:javax.jdo:3.2.0-m3 - http://www.datanucleus.org/#/javax.jdo)
        * Jettison (org.codehaus.jettison:jettison:1.5.4 - https://github.com/jettison-json/jettison)
        * Joda-Time (joda-time:joda-time:2.12.5 - https://www.joda.org/joda-time/)
        * JPam (net.sf.jpam:jpam:1.1 - http://jpam.sf.net)
        * json-io (com.cedarsoftware:json-io:2.5.1 - https://github.com/jdereg/json-io)
        * JSON Small and Fast Parser (net.minidev:json-smart:2.5.0 - https://urielch.github.io/)
        * JVM Integration for Metrics (io.dropwizard.metrics:metrics-jvm:3.2.6 - http://metrics.dropwizard.io/metrics-jvm/)
        * Kerb Simple Kdc (org.apache.kerby:kerb-simplekdc:1.0.1 - http://directory.apache.org/kerby/kerby-kerb/kerb-simplekdc)
        * Kerby ASN1 Project (org.apache.kerby:kerby-asn1:1.0.1 - http://directory.apache.org/kerby/kerby-common/kerby-asn1)
        * Kerby Config (org.apache.kerby:kerby-config:1.0.1 - http://directory.apache.org/kerby/kerby-common/kerby-config)
        * Kerby-kerb Admin (org.apache.kerby:kerb-admin:1.0.1 - http://directory.apache.org/kerby/kerby-kerb/kerb-admin)
        * Kerby-kerb Client (org.apache.kerby:kerb-client:1.0.1 - http://directory.apache.org/kerby/kerby-kerb/kerb-client)
        * Kerby-kerb Common (org.apache.kerby:kerb-common:1.0.1 - http://directory.apache.org/kerby/kerby-kerb/kerb-common)
        * Kerby-kerb core (org.apache.kerby:kerb-core:1.0.1 - http://directory.apache.org/kerby/kerby-kerb/kerb-core)
        * Kerby-kerb Crypto (org.apache.kerby:kerb-crypto:1.0.1 - http://directory.apache.org/kerby/kerby-kerb/kerb-crypto)
        * Kerby-kerb Identity (org.apache.kerby:kerb-identity:1.0.1 - http://directory.apache.org/kerby/kerby-kerb/kerb-identity)
        * Kerby-kerb Server (org.apache.kerby:kerb-server:1.0.1 - http://directory.apache.org/kerby/kerby-kerb/kerb-server)
        * Kerby-kerb Util (org.apache.kerby:kerb-util:1.0.1 - http://directory.apache.org/kerby/kerby-kerb/kerb-util)
        * Kerby PKIX Project (org.apache.kerby:kerby-pkix:1.0.1 - http://directory.apache.org/kerby/kerby-pkix)
        * Kerby Util (org.apache.kerby:kerby-util:1.0.1 - http://directory.apache.org/kerby/kerby-common/kerby-util)
        * Kerby XDR Project (org.apache.kerby:kerby-xdr:1.0.1 - http://directory.apache.org/kerby/kerby-common/kerby-xdr)
        * LZ4 and xxHash (org.lz4:lz4-java:1.8.0 - https://github.com/lz4/lz4-java)
        * Maven Artifact (org.apache.maven:maven-artifact:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-artifact/)
        * Maven Artifact Resolver API (org.apache.maven.resolver:maven-resolver-api:1.3.3 - https://maven.apache.org/resolver/maven-resolver-api/)
        * Maven Artifact Resolver Connector Basic (org.apache.maven.resolver:maven-resolver-connector-basic:1.3.3 - https://maven.apache.org/resolver/maven-resolver-connector-basic/)
        * Maven Artifact Resolver Implementation (org.apache.maven.resolver:maven-resolver-impl:1.3.3 - https://maven.apache.org/resolver/maven-resolver-impl/)
        * Maven Artifact Resolver Provider (org.apache.maven:maven-resolver-provider:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-resolver-provider/)
        * Maven Artifact Resolver SPI (org.apache.maven.resolver:maven-resolver-spi:1.3.3 - https://maven.apache.org/resolver/maven-resolver-spi/)
        * Maven Artifact Resolver Transport File (org.apache.maven.resolver:maven-resolver-transport-file:1.3.3 - https://maven.apache.org/resolver/maven-resolver-transport-file/)
        * Maven Artifact Resolver Transport HTTP (org.apache.maven.resolver:maven-resolver-transport-http:1.3.3 - https://maven.apache.org/resolver/maven-resolver-transport-http/)
        * Maven Artifact Resolver Utilities (org.apache.maven.resolver:maven-resolver-util:1.3.3 - https://maven.apache.org/resolver/maven-resolver-util/)
        * Maven Builder Support (org.apache.maven:maven-builder-support:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-builder-support/)
        * Maven Model (org.apache.maven:maven-model:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-model/)
        * Maven Model Builder (org.apache.maven:maven-model-builder:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-model-builder/)
        * Maven Repository Metadata Model (org.apache.maven:maven-repository-metadata:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-repository-metadata/)
        * Metrics Core (io.dropwizard.metrics:metrics-core:3.2.6 - http://metrics.dropwizard.io/metrics-core/)
        * Metrics Health Checks (io.dropwizard.metrics:metrics-healthchecks:4.1.16 - https://metrics.dropwizard.io/metrics-healthchecks)
        * Metrics Integration for Jersey 2.x (io.dropwizard.metrics:metrics-jersey2:4.1.16 - https://metrics.dropwizard.io/metrics-jersey2)
        * Metrics Integration for Jetty 9.3 and higher (io.dropwizard.metrics:metrics-jetty9:4.1.16 - https://metrics.dropwizard.io/metrics-jetty9)
        * Metrics Integration for Logback (io.dropwizard.metrics:metrics-logback:4.1.16 - https://metrics.dropwizard.io/metrics-logback)
        * Metrics Integration with JMX (io.dropwizard.metrics:metrics-jmx:4.1.16 - https://metrics.dropwizard.io/metrics-jmx)
        * Metrics Utility Servlets (io.dropwizard.metrics:metrics-servlets:4.1.16 - https://metrics.dropwizard.io/metrics-servlets)
        * Netty/All-in-One (io.netty:netty-all:4.1.100.Final - https://netty.io/netty-all/)
        * Netty/Buffer (io.netty:netty-buffer:4.1.100.Final - https://netty.io/netty-buffer/)
        * Netty/Codec/DNS (io.netty:netty-codec-dns:4.1.100.Final - https://netty.io/netty-codec-dns/)
        * Netty/Codec/HAProxy (io.netty:netty-codec-haproxy:4.1.100.Final - https://netty.io/netty-codec-haproxy/)
        * Netty/Codec/HTTP (io.netty:netty-codec-http:4.1.100.Final - https://netty.io/netty-codec-http/)
        * Netty/Codec/HTTP2 (io.netty:netty-codec-http2:4.1.100.Final - https://netty.io/netty-codec-http2/)
        * Netty/Codec/Memcache (io.netty:netty-codec-memcache:4.1.100.Final - https://netty.io/netty-codec-memcache/)
        * Netty/Codec/MQTT (io.netty:netty-codec-mqtt:4.1.100.Final - https://netty.io/netty-codec-mqtt/)
        * Netty/Codec/Redis (io.netty:netty-codec-redis:4.1.100.Final - https://netty.io/netty-codec-redis/)
        * Netty/Codec/SMTP (io.netty:netty-codec-smtp:4.1.100.Final - https://netty.io/netty-codec-smtp/)
        * Netty/Codec/Socks (io.netty:netty-codec-socks:4.1.100.Final - https://netty.io/netty-codec-socks/)
        * Netty/Codec/Stomp (io.netty:netty-codec-stomp:4.1.100.Final - https://netty.io/netty-codec-stomp/)
        * Netty/Codec/XML (io.netty:netty-codec-xml:4.1.100.Final - https://netty.io/netty-codec-xml/)
        * Netty/Codec (io.netty:netty-codec:4.1.100.Final - https://netty.io/netty-codec/)
        * Netty/Common (io.netty:netty-common:4.1.100.Final - https://netty.io/netty-common/)
        * Netty/Handler/Proxy (io.netty:netty-handler-proxy:4.1.100.Final - https://netty.io/netty-handler-proxy/)
        * Netty/Handler/Ssl/Ocsp (io.netty:netty-handler-ssl-ocsp:4.1.100.Final - https://netty.io/netty-handler-ssl-ocsp/)
        * Netty/Handler (io.netty:netty-handler:4.1.100.Final - https://netty.io/netty-handler/)
        * Netty/Resolver/DNS/Classes/MacOS (io.netty:netty-resolver-dns-classes-macos:4.1.100.Final - https://netty.io/netty-resolver-dns-classes-macos/)
        * Netty/Resolver/DNS (io.netty:netty-resolver-dns:4.1.100.Final - https://netty.io/netty-resolver-dns/)
        * Netty/Resolver (io.netty:netty-resolver:4.1.100.Final - https://netty.io/netty-resolver/)
        * Netty/TomcatNative [BoringSSL - Static] (io.netty:netty-tcnative-boringssl-static:jar:2.0.61.Final - https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/)
        * Netty/TomcatNative [BoringSSL - Static] (io.netty:netty-tcnative-boringssl-static:2.0.61.Final - https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/)
        * Netty/Transport/Classes/Epoll (io.netty:netty-transport-classes-epoll:4.1.100.Final - https://netty.io/netty-transport-classes-epoll/)
        * Netty/Transport/Classes/KQueue (io.netty:netty-transport-classes-kqueue:4.1.100.Final - https://netty.io/netty-transport-classes-kqueue/)
        * Netty/Transport/Native/Epoll (io.netty:netty-transport-native-epoll:4.1.100.Final - https://netty.io/netty-transport-native-epoll/)
        * Netty/Transport/Native/Epoll (io.netty:netty-transport-native-epoll:jar:4.1.100.Final - https://netty.io/netty-transport-native-epoll/)
        * Netty/Transport/Native/Unix/Common (io.netty:netty-transport-native-unix-common:4.1.100.Final - https://netty.io/netty-transport-native-unix-common/)
        * Netty/Transport/RXTX (io.netty:netty-transport-rxtx:4.1.100.Final - https://netty.io/netty-transport-rxtx/)
        * Netty/Transport/SCTP (io.netty:netty-transport-sctp:4.1.100.Final - https://netty.io/netty-transport-sctp/)
        * Netty/Transport/UDT (io.netty:netty-transport-udt:4.1.100.Final - https://netty.io/netty-transport-udt/)
        * Netty/Transport (io.netty:netty-transport:4.1.100.Final - https://netty.io/netty-transport/)
        * Netty/Buffer (io.netty:netty-buffer:4.1.100.Final - https://netty.io/netty-buffer/)
        * Netty/Codec (io.netty:netty-codec:4.1.100.Final - https://netty.io/netty-codec/)
        * Netty/Common (io.netty:netty-common:4.1.100.Final - https://netty.io/netty-common/)
        * Netty/Handler (io.netty:netty-handler:4.1.100.Final - https://netty.io/netty-handler/)
        * Netty/Resolver (io.netty:netty-resolver:4.1.100.Final - https://netty.io/netty-resolver/)
        * Netty/TomcatNative [BoringSSL - Static] (io.netty:netty-tcnative-boringssl-static:2.0.61.Final - https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/)
        * Netty/TomcatNative [OpenSSL - Classes] (io.netty:netty-tcnative-classes:2.0.61.Final - https://github.com/netty/netty-tcnative/netty-tcnative-classes/)
        * Netty/Transport/Classes/Epoll (io.netty:netty-transport-classes-epoll:4.1.100.Final - https://netty.io/netty-transport-classes-epoll/)
        * Netty/Transport/Native/Epoll (io.netty:netty-transport-native-epoll:4.1.100.Final - https://netty.io/netty-transport-native-epoll/)
        * Netty/Transport/Native/Unix/Common (io.netty:netty-transport-native-unix-common:4.1.100.Final - https://netty.io/netty-transport-native-unix-common/)
        * Netty/Transport (io.netty:netty-transport:4.1.100.Final - https://netty.io/netty-transport/)
        * Nimbus JOSE+JWT (com.nimbusds:nimbus-jose-jwt:9.8.1 - https://bitbucket.org/connect2id/nimbus-jose-jwt)
        * Objenesis (org.objenesis:objenesis:2.5.1 - http://objenesis.org)
        * Objenesis (org.objenesis:objenesis:3.3 - http://objenesis.org/objenesis)
        * opencsv (net.sf.opencsv:opencsv:2.3 - http://opencsv.sf.net)
        * Open JSON (com.tdunning:json:1.8 - https://github.com/tdunning/open-json)
        * OpenTelemetry Java (io.opentelemetry:opentelemetry-api:1.15.0 - https://github.com/open-telemetry/opentelemetry-java)
        * OpenTelemetry Java (io.opentelemetry:opentelemetry-context:1.15.0 - https://github.com/open-telemetry/opentelemetry-java)
        * OpenTelemetry Java (io.opentelemetry:opentelemetry-semconv:1.15.0-alpha - https://github.com/open-telemetry/opentelemetry-java)
        * ORC Core (org.apache.orc:orc-core:1.5.8 - http://orc.apache.org/orc-core)
        * ORC Shims (org.apache.orc:orc-shims:1.5.8 - http://orc.apache.org/orc-shims)
        * Plexus :: Component Annotations (org.codehaus.plexus:plexus-component-annotations:1.7.1 - http://codehaus-plexus.github.io/plexus-containers/plexus-component-annotations/)
        * Plexus Common Utilities (org.codehaus.plexus:plexus-utils:3.1.0 - http://codehaus-plexus.github.io/plexus-utils/)
        * Plexus Interpolation API (org.codehaus.plexus:plexus-interpolation:1.25 - http://codehaus-plexus.github.io/plexus-interpolation/)
        * SnakeYAML (org.yaml:snakeyaml:2.0 - https://bitbucket.org/snakeyaml/snakeyaml)
        * StAX API (stax:stax-api:1.0.1 - http://stax.codehaus.org/)
        * Tephra API (co.cask.tephra:tephra-api:0.6.0 - https://github.com/caskdata/tephra/tephra-api)
        * Tephra Core (co.cask.tephra:tephra-core:0.6.0 - https://github.com/caskdata/tephra/tephra-core)
        * Tephra HBase 1.0 Compatibility (co.cask.tephra:tephra-hbase-compat-1.0:0.6.0 - https://github.com/caskdata/tephra/tephra-hbase-compat-1.0)
        * Token provider (org.apache.kerby:token-provider:1.0.1 - http://directory.apache.org/kerby/kerby-provider/token-provider)
        * Woodstox (com.fasterxml.woodstox:woodstox-core:5.4.0 - https://github.com/FasterXML/woodstox)

    Apache License, Version 2.0, BSD 2-Clause, Eclipse Distribution License, Version 1.0, Eclipse Public License, Version 2.0, jQuery license, MIT License, Modified BSD, Public Domain, The GNU General Public License (GPL), Version 2, With Classpath Exception, W3C license

        * jersey-container-grizzly2-http (org.glassfish.jersey.containers:jersey-container-grizzly2-http:2.40 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-container-grizzly2-http)
        * jersey-container-grizzly2-servlet (org.glassfish.jersey.containers:jersey-container-grizzly2-servlet:2.40 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-container-grizzly2-servlet)
        * jersey-container-servlet (org.glassfish.jersey.containers:jersey-container-servlet:2.40 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-container-servlet)
        * jersey-container-servlet-core (org.glassfish.jersey.containers:jersey-container-servlet-core:2.40 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-container-servlet-core)
        * jersey-core-client (org.glassfish.jersey.core:jersey-client:2.40 - https://projects.eclipse.org/projects/ee4j.jersey/jersey-client)
        * jersey-ext-bean-validation (org.glassfish.jersey.ext:jersey-bean-validation:2.40 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-bean-validation)
        * jersey-ext-metainf-services (org.glassfish.jersey.ext:jersey-metainf-services:2.40 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-metainf-services)
        * jersey-inject-hk2 (org.glassfish.jersey.inject:jersey-hk2:2.40 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-hk2)

    Apache License, Version 2.0, Eclipse Public License, Version 2.0, Modified BSD, The GNU General Public License (GPL), Version 2, With Classpath Exception

        * jersey-core-server (org.glassfish.jersey.core:jersey-server:2.40 - https://projects.eclipse.org/projects/ee4j.jersey/jersey-server)

    Apache License, Version 2.0, Eclipse Public License, Version 2.0, Public Domain, The GNU General Public License (GPL), Version 2, With Classpath Exception

        * jersey-core-common (org.glassfish.jersey.core:jersey-common:2.40 - https://projects.eclipse.org/projects/ee4j.jersey/jersey-common)

    Apache License, Version 2.0, Eclipse Public License - Version 1.0

        * Jetty :: Asynchronous HTTP Client (org.eclipse.jetty:jetty-client:9.4.53.v20231009 - https://eclipse.org/jetty/jetty-client)
        * Jetty :: Continuation (org.eclipse.jetty:jetty-continuation:9.4.53.v20231009 - https://eclipse.org/jetty/jetty-continuation)
        * Jetty :: Http Utility (org.eclipse.jetty:jetty-http:9.4.53.v20231009 - https://eclipse.org/jetty/jetty-http)
        * Jetty :: IO Utility (org.eclipse.jetty:jetty-io:9.4.53.v20231009 - https://eclipse.org/jetty/jetty-io)
        * Jetty :: Rewrite Handler (org.eclipse.jetty:jetty-rewrite:9.4.53.v20231009 - https://eclipse.org/jetty/jetty-rewrite)
        * Jetty :: Security (org.eclipse.jetty:jetty-security:9.4.53.v20231009 - https://eclipse.org/jetty/jetty-security)
        * Jetty :: Server Core (org.eclipse.jetty:jetty-server:9.4.53.v20231009 - https://eclipse.org/jetty/jetty-server)
        * Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:9.4.53.v20231009 - https://eclipse.org/jetty/jetty-servlet)
        * Jetty :: SetUID Java (org.eclipse.jetty.toolchain.setuid:jetty-setuid-java:1.0.4 - https://eclipse.org/jetty/jetty-setuid-parent/jetty-setuid-java)
        * Jetty :: Utilities :: Ajax(JSON) (org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009 - https://eclipse.org/jetty/jetty-util-ajax)
        * Jetty :: Utilities (org.eclipse.jetty:jetty-util:9.4.53.v20231009 - https://eclipse.org/jetty/jetty-util)
        * Jetty :: Utility Servlets and Filters (org.eclipse.jetty:jetty-servlets:9.4.53.v20231009 - https://eclipse.org/jetty/jetty-servlets)
        * Jetty :: Webapp Application Support (org.eclipse.jetty:jetty-webapp:9.4.53.v20231009 - https://eclipse.org/jetty/jetty-webapp)
        * Jetty :: Websocket :: API (org.eclipse.jetty.websocket:websocket-api:9.4.53.v20231009 - https://eclipse.org/jetty/websocket-parent/websocket-api)
        * Jetty :: Websocket :: Client (org.eclipse.jetty.websocket:websocket-client:9.4.53.v20231009 - https://eclipse.org/jetty/websocket-parent/websocket-client)
        * Jetty :: Websocket :: Common (org.eclipse.jetty.websocket:websocket-common:9.4.53.v20231009 - https://eclipse.org/jetty/websocket-parent/websocket-common)
        * Jetty :: XML utilities (org.eclipse.jetty:jetty-xml:9.4.53.v20231009 - https://eclipse.org/jetty/jetty-xml)

    Apache License, Version 2.0, GNU General Public License, version 2

        * RocksDB JNI (org.rocksdb:rocksdbjni:8.5.4 - https://rocksdb.org)

    Apache License, Version 2.0, LGPL 2.1, MPL 1.1

        * Javassist (org.javassist:javassist:3.29.2-GA - http://www.javassist.org/)

    Apache License (v2.0)

        * FlatBuffers Java API (com.vlkan:flatbuffers:1.2.0-3f79e055 - https://github.com/vy/flatbuffers)

    Bouncy Castle Licence

        * Bouncy Castle PKIX, CMS, EAC, TSP, PKCS, OCSP, CMP, and CRMF APIs (org.bouncycastle:bcpkix-jdk15on:1.68 - http://www.bouncycastle.org/java.html)
        * Bouncy Castle Provider (org.bouncycastle:bcprov-jdk15on:1.68 - http://www.bouncycastle.org/java.html)

    BSD 2-Clause license

        * dnsjava (dnsjava:dnsjava:2.1.7 - http://www.dnsjava.org)
        * zstd-jni (com.github.luben:zstd-jni:1.5.5-1 - https://github.com/luben/zstd-jni)

    BSD-3-Clause

        * asm (org.ow2.asm:asm:9.3 - http://asm.ow2.io/)

    BSD 3-Clause License

        * Commons Compiler (org.codehaus.janino:commons-compiler:2.7.6 - http://docs.codehaus.org/display/JANINO/Home/commons-compiler)
        * Janino (org.codehaus.janino:janino:2.7.6 - http://docs.codehaus.org/display/JANINO/Home/janino)
        * leveldbjni-all (org.fusesource.leveldbjni:leveldbjni-all:1.8 - http://leveldbjni.fusesource.org/leveldbjni-all)
        * Protocol Buffer Java API (com.google.protobuf:protobuf-java:2.5.0 - http://code.google.com/p/protobuf)

    BSD licence

        * ANTLR 3 Runtime (org.antlr:antlr-runtime:3.5.2 - http://www.antlr.org)
        * ANTLR ST4 4.0.4 (org.antlr:ST4:4.0.4 - http://www.stringtemplate.org)

    BSD License

        * Javolution (javolution:javolution:5.5.1 - http://javolution.org)
        * JLine (jline:jline:0.9.94 - http://jline.sourceforge.net)
        * JLine Bundle (org.jline:jline:3.9.0 - http://nexus.sonatype.org/oss-repository-hosting.html/jline-parent/jline)
        * Stax2 API (org.codehaus.woodstox:stax2-api:4.2.1 - http://github.com/FasterXML/stax2-api)

    CDDL/GPLv2+CE

        * JavaBeans Activation Framework API jar (javax.activation:javax.activation-api:1.2.0 - http://java.net/all/javax.activation-api/)

    CDDL License

        * jsr311-api (javax.ws.rs:jsr311-api:1.1.1 - https://jsr311.dev.java.net)

    Common Development and Distribution License

        * Expression Language 3.0 (org.glassfish:javax.el:3.0.1-b12 - http://uel.java.net)
        * JavaServer Pages(TM) API (javax.servlet.jsp:javax.servlet.jsp-api:2.3.1 - http://jsp.java.net)
        * Java Servlet API (javax.servlet:javax.servlet-api:3.1.0 - http://servlet-spec.java.net)
        * javax.annotation API (javax.annotation:javax.annotation-api:1.3.2 - http://jcp.org/en/jsr/detail?id=250)
        * JSP implementation (org.glassfish.web:javax.servlet.jsp:2.3.2 - http://jsp.java.net)

    Common Development and Distribution License (CDDL) v1.1

        * Java Transaction API (javax.transaction:jta:1.1 - http://java.sun.com/products/jta)
        * jsp-api (javax.servlet.jsp:jsp-api:2.1 - no url defined)
        * transaction-api (javax.transaction:transaction-api:1.1 - no url defined)

    Common Development and Distribution License (CDDL) v1.1, The GNU General Public License (GPL), Version 2, With Classpath Exception

        * jaxb-api (javax.xml.bind:jaxb-api:2.3.0 - https://github.com/javaee/jaxb-spec/jaxb-api)
        * JAXB RI (com.sun.xml.bind:jaxb-impl:2.2.3-1 - http://jaxb.java.net/)
        * jersey-client (com.sun.jersey:jersey-client:1.19.4 - https://jersey.java.net/jersey-client/)
        * jersey-core (com.sun.jersey:jersey-core:1.19.4 - https://jersey.java.net/jersey-core/)
        * jersey-guice (com.sun.jersey.contribs:jersey-guice:1.19.4 - https://jersey.java.net/jersey-contribs/jersey-guice/)
        * jersey-json (com.github.pjfanning:jersey-json:1.20 - https://github.com/pjfanning/jersey-1.x)
        * jersey-servlet (com.sun.jersey:jersey-servlet:1.19.4 - https://jersey.java.net/jersey-servlet/)

    Eclipse Distribution License, Version 1.0

        * jakarta.xml.bind-api (jakarta.xml.bind:jakarta.xml.bind-api:2.3.2 - https://github.com/eclipse-ee4j/jaxb-api/jakarta.xml.bind-api)
        * JavaBeans Activation Framework (com.sun.activation:jakarta.activation:1.2.1 - https://github.com/eclipse-ee4j/jaf/jakarta.activation)
        * JavaBeans Activation Framework API jar (jakarta.activation:jakarta.activation-api:1.2.1 - https://github.com/eclipse-ee4j/jaf/jakarta.activation-api)

    Eclipse Public License, Version 1.0

        * clojure (org.clojure:clojure:1.10.0 - http://clojure.org/)
        * core.specs.alpha (org.clojure:core.specs.alpha:0.2.44 - https://github.com/clojure/build.poms/core.specs.alpha)
        * spec.alpha (org.clojure:spec.alpha:0.2.176 - https://github.com/clojure/build.poms/spec.alpha)
        * tools.logging (org.clojure:tools.logging:0.2.3 - http://nexus.sonatype.org/oss-repository-hosting.html/pom.contrib/tools.logging)

    Eclipse Public License, Version 2.0

        * grizzly-framework (org.glassfish.grizzly:grizzly-framework:2.4.4 - https://projects.eclipse.org/projects/ee4j.grizzly/grizzly-framework)
        * grizzly-http (org.glassfish.grizzly:grizzly-http:2.4.4 - https://projects.eclipse.org/projects/ee4j.grizzly/grizzly-http)
        * grizzly-http-server (org.glassfish.grizzly:grizzly-http-server:2.4.4 - https://projects.eclipse.org/projects/ee4j.grizzly/grizzly-http-server)
        * grizzly-http-servlet (org.glassfish.grizzly:grizzly-http-servlet:2.4.4 - https://projects.eclipse.org/projects/ee4j.grizzly/grizzly-http-servlet)

    Eclipse Public License (EPL) 1.0, GNU Lesser General Public License Version 2.1, February 1999

        * JGraphT - Core (org.jgrapht:jgrapht-core:0.9.0 - http://www.jgrapht.org/jgrapht-core)

    Eclipse Public License, Version 2.0, The GNU General Public License (GPL), Version 2, With Classpath Exception

        * aopalliance version 1.0 repackaged as a module (org.glassfish.hk2.external:aopalliance-repackaged:2.6.1 - https://github.com/eclipse-ee4j/glassfish-hk2/external/aopalliance-repackaged)
        * HK2 API module (org.glassfish.hk2:hk2-api:2.6.1 - https://github.com/eclipse-ee4j/glassfish-hk2/hk2-api)
        * HK2 Implementation Utilities (org.glassfish.hk2:hk2-utils:2.6.1 - https://github.com/eclipse-ee4j/glassfish-hk2/hk2-utils)
        * jakarta.ws.rs-api (jakarta.ws.rs:jakarta.ws.rs-api:2.1.6 - https://github.com/eclipse-ee4j/jaxrs-api)
        * Jakarta Annotations API (jakarta.annotation:jakarta.annotation-api:1.3.5 - https://projects.eclipse.org/projects/ee4j.ca)
        * Jakarta Expression Language 3.0 (org.glassfish:jakarta.el:3.0.4 - https://projects.eclipse.org/projects/ee4j.el)
        * Jakarta Expression Language 3.0 API (jakarta.el:jakarta.el-api:3.0.3 - https://projects.eclipse.org/projects/ee4j.el)
        * Jakarta Servlet (jakarta.servlet:jakarta.servlet-api:4.0.4 - https://projects.eclipse.org/projects/ee4j.servlet)
        * javax.inject:1 as OSGi bundle (org.glassfish.hk2.external:jakarta.inject:2.6.1 - https://github.com/eclipse-ee4j/glassfish-hk2/external/jakarta.inject)
        * OSGi resource locator (org.glassfish.hk2:osgi-resource-locator:1.0.3 - https://projects.eclipse.org/projects/ee4j/osgi-resource-locator)
        * ServiceLocator Default Implementation (org.glassfish.hk2:hk2-locator:2.6.1 - https://github.com/eclipse-ee4j/glassfish-hk2/hk2-locator)

    Eclipse Public License v. 2.0, GNU General Public License, version 2 with the GNU Classpath Exception

        * jms (jakarta.jms:jakarta.jms-api:2.0.2 - https://projects.eclipse.org/projects/ee4j.jms)

    MIT License

        * argparse4j (net.sourceforge.argparse4j:argparse4j:0.8.1 - http://argparse4j.github.io)
        * Checker Qual (org.checkerframework:checker-qual:3.37.0 - https://checkerframework.org/)
        * JCodings (org.jruby.jcodings:jcodings:1.0.55 - http://nexus.sonatype.org/oss-repository-hosting.html/jcodings)
        * Joni (org.jruby.joni:joni:2.1.31 - http://nexus.sonatype.org/oss-repository-hosting.html/joni)
        * JUL to SLF4J bridge (org.slf4j:jul-to-slf4j:1.7.36 - http://www.slf4j.org)
        * Microsoft JDBC Driver for SQL Server (com.microsoft.sqlserver:mssql-jdbc:6.2.1.jre7 - https://github.com/Microsoft/mssql-jdbc)
        * SLF4J API Module (org.slf4j:slf4j-api:1.7.36 - http://www.slf4j.org)
        * System Out and Err redirected to SLF4J (uk.org.lidalia:sysout-over-slf4j:1.0.2 - http://projects.lidalia.org.uk/sysout-over-slf4j/)

    Modified BSD License

        * sqlline (sqlline:sqlline:1.3.0 - http://github.com/julianhyde/sqlline)

    Mozilla Public License Version 2.0

        * jamon-runtime (org.jamon:jamon-runtime:2.4.1 - http://www.jamon.org/jamon-java-parent/jamon-runtime/)

    Public Domain

        * AOP alliance (aopalliance:aopalliance:1.0 - http://aopalliance.sourceforge.net)

    The Go license

        * re2j (com.google.re2j:re2j:1.1 - http://github.com/google/re2j)
