nifi-registry-ranger-extension
Copyright 2019 The Apache Software Foundation

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

******************
Apache Software License v2
******************

  (ASLv2) Apache Avro
    The following NOTICE information applies:
      Apache Avro
      Copyright 2009-2017 The Apache Software Foundation

  (ASLv2) Apache Commons Collections
    The following NOTICE information applies:
      Apache Commons Collections
      Copyright 2001-2013 The Apache Software Foundation

  (ASLv2) Apache Commons Compress
    The following NOTICE information applies:
      Apache Commons Compress
      Copyright 2002-2017 The Apache Software Foundation

      The files in the package org.apache.commons.compress.archivers.sevenz
      were derived from the LZMA SDK, version 9.20 (C/ and CPP/7zip/),
      which has been placed in the public domain:

      "LZMA SDK is placed in the public domain." (https://www.7-zip.org/sdk.html)

  (ASLv2) Apache Commons Codec
    The following NOTICE information applies:
      Apache Commons Codec
      Copyright 2002-2014 The Apache Software Foundation

      src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java
      contains test data from http://aspell.net/test/orig/batch0.tab.
      Copyright (C) 2002 Kevin Atkinson (kevina@gnu.org)

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

      The content of package org.apache.commons.codec.language.bm has been translated
      from the original php source code available at https://stevemorse.org/phoneticinfo.htm
      with permission from the original authors.
      Original source copyright:
      Copyright (c) 2008 Alexander Beider & Stephen P. Morse.

  (ASLv2) Apache Commons CLI
    The following NOTICE information applies:
      Apache Commons CLI
      Copyright 2001-2009 The Apache Software Foundation

  (ASLv2) Apache Commons Configuration
    The following NOTICE information applies:
      Apache Commons Configuration
      Copyright 2001-2008 The Apache Software Foundation

  (ASLv2) Apache Jakarta HttpClient
    The following NOTICE information applies:
      Apache Jakarta HttpClient
      Copyright 1999-2007 The Apache Software Foundation

  (ASLv2) Apache Commons IO
    The following NOTICE information applies:
      Apache Commons IO
      Copyright 2002-2016 The Apache Software Foundation

  (ASLv2) Apache Commons Lang
    The following NOTICE information applies:
      Apache Commons Lang
      Copyright 2001-2015 The Apache Software Foundation

      This product includes software from the Spring Framework,
      under the Apache License 2.0 (see: StringUtils.containsWhitespace())

  (ASLv2) Apache Commons Logging
    The following NOTICE information applies:
      Apache Commons Logging
      Copyright 2003-2014 The Apache Software Foundation

  (ASLv2) Apache Commons Math
    The following NOTICE information applies:
      Apache Commons Math
      Copyright 2001-2012 The Apache Software Foundation

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

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

      The BracketFinder (package org.apache.commons.math3.optimization.univariate)
      and PowellOptimizer (package org.apache.commons.math3.optimization.general)
      classes are based on the Python code in module "optimize.py" (version 0.5)
      developed by Travis E. Oliphant for the SciPy library (https://www.scipy.org/)
      Copyright © 2003-2009 SciPy Developers.
      ===============================================================================

      The LinearConstraint, LinearObjectiveFunction, LinearOptimizer,
      RelationShip, SimplexSolver and SimplexTableau classes in package
      org.apache.commons.math3.optimization.linear include software developed by
      Benjamin McCann (https://www.benmccann.com) and distributed with
      the following copyright: Copyright 2009 Google Inc.
      ===============================================================================

      This product includes software developed by the
      University of Chicago, as Operator of Argonne National
      Laboratory.
      The LevenbergMarquardtOptimizer class in package
      org.apache.commons.math3.optimization.general includes software
      translated from the lmder, lmpar and qrsolv Fortran routines
      from the Minpack package
      Minpack Copyright Notice (1999) University of Chicago.  All rights reserved
      ===============================================================================

      The GraggBulirschStoerIntegrator class in package
      org.apache.commons.math3.ode.nonstiff includes software translated
      from the odex Fortran routine developed by E. Hairer and G. Wanner.
      Original source copyright:
      Copyright (c) 2004, Ernst Hairer
      ===============================================================================

      The EigenDecompositionImpl class in package
      org.apache.commons.math3.linear includes software translated
      from some LAPACK Fortran routines.  Original source copyright:
      Copyright (c) 1992-2008 The University of Tennessee.  All rights reserved.
      ===============================================================================

      The MersenneTwister class in package org.apache.commons.math3.random
      includes software translated from the 2002-01-26 version of
      the Mersenne-Twister generator written in C by Makoto Matsumoto and Takuji
      Nishimura. Original source copyright:
      Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
      All rights reserved
      ===============================================================================

      The LocalizedFormatsTest class in the unit tests is an adapted version of
      the OrekitMessagesTest class from the orekit library distributed under the
      terms of the Apache 2 licence. Original source copyright:
      Copyright 2010 CS Systèmes d'Information
      ===============================================================================

      The HermiteInterpolator class and its corresponding test have been imported from
      the orekit library distributed under the terms of the Apache 2 licence. Original
      source copyright:
      Copyright 2010-2012 CS Systèmes d'Information
      ===============================================================================

      The creation of the package "o.a.c.m.analysis.integration.gauss" was inspired
      by an original code donated by Sébastien Brisard.
      ===============================================================================

  (ASLv2) Apache Commons Net
    The following NOTICE information applies:
      Apache Commons Net
      Copyright 2001-2013 The Apache Software Foundation

  (ASLv2) Apache Curator
    The following NOTICE information applies:
      Curator Framework
      Copyright 2011-2014 The Apache Software Foundation

      Curator Client
      Copyright 2011-2014 The Apache Software Foundation

      Curator Recipes
      Copyright 2011-2014 The Apache Software Foundation

  (ASLv2) Apache HttpComponents
    The following NOTICE information applies:
      Apache HttpClient
      Copyright 1999-2015 The Apache Software Foundation

      Apache HttpCore
      Copyright 2005-2015 The Apache Software Foundation

      Apache HttpMime
      Copyright 1999-2013 The Apache Software Foundation

      This project contains annotations derived from JCIP-ANNOTATIONS
      Copyright (c) 2005 Brian Goetz and Tim Peierls. See https://www.jcip.net

  (ASLv2) Apache Ranger
    The following NOTICE information applies:
      Apache Ranger Credential Builder
      Copyright 2014-2016 The Apache Software Foundation

      Apache Ranger Plugins Audit
      Copyright 2014-2016 The Apache Software Foundation

      Apache Ranger Plugins Common
      Copyright 2014-2016 The Apache Software Foundation

      Apache Ranger Plugins Cred
      Copyright 2014-2016 The Apache Software Foundation

  (ASLv2) Google GSON
    The following NOTICE information applies:
      Copyright 2008 Google Inc.

  (ASLv2) Guava
    The following NOTICE information applies:
      Guava
      Copyright 2015 The Guava Authors

  (ASLv2) Apache Hadoop
    The following NOTICE information applies:
       Apache Hadoop
       Copyright 2014 The Apache Software Foundation.

  (ASLv2) HTrace Core
    The following NOTICE information applies:
      In addition, this product includes software dependencies. See
      the accompanying LICENSE.txt for a listing of dependencies
      that are NOT Apache licensed (with pointers to their licensing)

      Apache HTrace includes an Apache Thrift connector to Zipkin. Zipkin
      is a distributed tracing system that is Apache 2.0 Licensed.
      Copyright 2012 Twitter, Inc.

  (ASLv2) Jackson JSON processor
    The following NOTICE information applies:
      # Jackson JSON processor

      Jackson is a high-performance, Free/Open Source JSON processing library.
      It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has
      been in development since 2007.
      It is currently developed by a community of developers, as well as supported
      commercially by FasterXML.com.

      ## Licensing

      Jackson core and extension components may licensed under different licenses.
      To find the details that apply to this artifact see the accompanying LICENSE file.
      For more information, including possible other licensing options, contact
      FasterXML.com (https://fasterxml.com).

      ## Credits

      A list of contributors may be found from CREDITS file, which is included
      in some artifacts (usually source distributions); but is always available
      from the source code management (SCM) system project uses.

  (ASLv2) Jettison
    The following NOTICE information applies:
      Copyright 2006 Envoi Solutions LLC

  (ASLv2) Jetty
    The following NOTICE information applies:
       Jetty Web Container
       Copyright 1995-2017 Mort Bay Consulting Pty Ltd.

  (ASLv2) Apache Kafka
    The following NOTICE information applies:
       Apache Kafka
       Copyright 2012 The Apache Software Foundation.

       scala-library is BSD-like licensed software (https://www.scala-lang.org/license.html)

  (ASLv2) Apache log4j
    The following NOTICE information applies:
      Apache log4j
      Copyright 2007 The Apache Software Foundation

  (ASLv2) Apache Solr
    The following NOTICE information applies:
      Apache Solrj
      Copyright 2006-2014 The Apache Software Foundation

  (ASLv2) Apache ZooKeeper
    The following NOTICE information applies:
      Apache ZooKeeper
      Copyright 2009-2012 The Apache Software Foundation

  (ASLv2) The Netty Project
    The following NOTICE information applies:
      The Netty Project
      Copyright 2011 The Netty Project

  (ASLv2) Snappy Java
    The following NOTICE information applies:
      This product includes software developed by Google
       Snappy: https://code.google.com/p/snappy/ (New BSD License)

      This product includes software developed by Apache
       PureJavaCrc32C from apache-hadoop-common https://hadoop.apache.org/
       (Apache 2.0 license)

      This library containd statically linked libstdc++. This inclusion is allowed by
      "GCC RUntime Library Exception"
      https://gcc.gnu.org/onlinedocs/libstdc++/manual/license.html

  (ASLv2) Woodstox Core ASL
    The following NOTICE information applies:
      This product currently only contains code developed by authors
      of specific components, as identified by the source code files.

      Since product implements StAX API, it has dependencies to StAX API
      classes.

  (ASLv2) Yammer Metrics
    The following NOTICE information applies:
      Metrics
      Copyright 2010-2012 Coda Hale and Yammer, Inc.

      This product includes software developed by Coda Hale and Yammer, Inc.

      This product includes code derived from the JSR-166 project (ThreadLocalRandom), which was released
      with the following comments:

          Written by Doug Lea with assistance from members of JCP JSR-166
          Expert Group and released to the public domain, as explained at
          https://creativecommons.org/publicdomain/zero/1.0/

  (ASLv2) ZkClient
    The following NOTICE information applies:
      ZkClient
      Copyright 2009 Stefan Groschupf

  (ASLv2) Rome
    The following NOTICE information applies:
      Rome Copyright Notices
      Copyright 2004 Sun Microsystems, Inc.
      Copyright 2011 The ROME Team

  (ASLv2) Swagger Core library
    The following NOTICE information applies:
      Copyright 2016 SmartBear Software

  (ASLv2) json-smart
    The following NOTICE information applies:
      Copyright 2011 JSON-SMART authors

  (ASLv2) Apache Commons BeanUtils
    The following NOTICE information applies:
      Apache Commons BeanUtils
      Copyright 2000-2008 The Apache Software Foundation

  (ASLv2) Apache Kerby
    The following NOTICE information applies:
      Apache Kerby
      Copyright 2003-2018 The Apache Software Foundation

  (ASLv2) Nimbus JOSE + JWT
    The following NOTICE information applies:
      Nimbus JOSE + JWT
      Copyright 2012 - 2018, Connect2id Ltd.

  (ASLv2) OkHttp
    The following NOTICE information applies:
      OkHttp
      Copyright (C) 2014 Square, Inc.

  (ASLv2) Okio
    The following NOTICE information applies:
      Okio
      Copyright (C) 2014 Square, Inc.

  (ASLv2) JCIP Annotations Under Apache License
    The following NOTICE information applies:
      JCIP Annotations Under Apache License
      Copyright 2013 Stephen Connolly.

************************
Common Development and Distribution License 1.0
************************

The following binary components are provided under the Common Development and Distribution License 1.0.  See project link for details.

    (CDDL 1.0) JavaBeans Activation Framework (JAF) (javax.activation:activation:jar:1.1 - https://java.sun.com/products/javabeans/jaf/index.jsp)
    (CDDL 1.0) (GPL3) Streaming API For XML (javax.xml.stream:stax-api:jar:1.0-2 - no url provided)

************************
Common Development and Distribution License 1.1
************************

The following binary components are provided under the Common Development and Distribution License 1.1. See project link for details.

    (CDDL 1.1) (GPL2 w/ CPE) jersey-bundle (com.sun.jersey:jersey-bundle:jar:1.19.3 - https://jersey.java.net/jersey-bundle/)
    (CDDL 1.1) (GPL2 w/ CPE) jersey-server (com.sun.jersey:jersey-server:jar:1.19 - https://jersey.java.net/jersey-server/)
    (CDDL 1.1) (GPL2 w/ CPE) JavaServer Pages(TM) API (javax.servlet.jsp:javax.servlet.jsp-api:jar:2.1 - https://jsp.java.net)
    (CDDL 1.1) (GPL2 w/ CPE) Java Servlet API  (javax.servlet:javax.servlet-api:jar:2.5 - https://servlet-spec.java.net)
    (CDDL 1.1) (GPL2 w/ CPE) javax.ws.rs-api (javax.ws.rs:javax.ws.rs-api:jar:2.1 - https://jax-rs-spec.java.net)
    (CDDL 1.1) (GPL2 w/ CPE) JavaMail API (compat) (javax.mail:mail:jar:1.4.7 - https://java.net/projects/javamail/pages/Home)
    (CDDL 1.1) (GPL2 w/ CPE) Java Architecture For XML Binding (javax.xml.bind:jaxb-api:jar:2.2.2 - https://jaxb.dev.java.net/)
    (CDDL 1.1) (GPL2 w/ CPE) Old JAXB Runtime (com.sun.xml.bind:jaxb-impl:jar:2.2.3-1 - https://jaxb.java.net/)

************************
Eclipse Public License 1.0
************************

The following binary components are provided under the Eclipse Public License 1.0.  See project link for details.

  (EPL 1.0) Eclipse Link (org.eclipse.persistence:eclipselink:2.5.2 - https://www.eclipse.org/eclipselink/)
  (EPL 1.0) Common Service Data Objects (org.eclipse.persistence:commonj.sdo:2.1.1 - https://www.eclipse.org/eclipselink/)
  (EPL 1.0) Java Persistence API (org.eclipse.persistence:javax.persistence:2.1.0 - https://www.eclipse.org/eclipselink/)

************************
The MIT License
************************

The following binary components are provided under the MIT License.  See project link for details.

  (MIT License) Simple Logging Facade for Java (SLF4J)
    The following NOTICE information applies:
      Copyright (c) 2004-2017 QOS.ch
      All rights reserved.
      https://www.slf4j.org/

  (MIT License) JOpt Simple
      Copyright (c) 2004-2016 Paul R. Holser, Jr.
      https://jopt-simple.github.io/jopt-simple/

************************
BSD License
************************

The following binary components are provided under the BSD License.  See project link for details.

  (BSD) Paranamer
    The following NOTICE information applies:
      Portions copyright (c) 2006-2018 Paul Hammant & ThoughtWorks Inc
      Portions copyright (c) 2000-2007 INRIA, France Telecom
      All rights reserved.
      https://github.com/paul-hammant/paranamer

  (BSD) JSch
    The following NOTICE information applies:
      Copyright (c) 2002-2015 Atsuhiko Yamanaka, JCraft,Inc.
      All rights reserved.
      https://www.jcraft.com/jsch/

  (BSD 3-Clause) JLine Bundle
    The following NOTICE information applies:
      Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved.
      https://github.com/jline/jline1

  (BSD 3-Clause) Protocol Buffers
    The following NOTICE information applies:
      Copyright 2008 Google Inc.  All rights reserved.
      https://github.com/google/protobuf/tree/master/java

  (BSD 3-Clause) Scala
    The following NOTICE information applies:
      Copyright (c) 2002-  EPFL
      Copyright (c) 2011-  Lightbend, Inc.

      All rights reserved.
      https://www.scala-lang.org/

************************
Go License
************************

The following binary components are provided under the Go License.  See project link for details.

  (Go) RE2/J
    The following NOTICE information applies:
      Copyright (c) 2009 The Go Authors. All rights reserved.
      https://github.com/google/re2j
