Apache NiFi
Copyright 2014-2018 The Apache Software Foundation

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

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

The following binary components are provided under the Apache Software License v2

    (ASLv2) Apache Commons Pool
      The following NOTICE information applies:
        Apache Commons Pool
        Copyright 1999-2009 The Apache Software Foundation.

    (ASLv2) Spring Framework
        The following NOTICE information applies:
          Spring Framework 5.1.0.RELEASE
          Copyright (c) 2002-2018 Pivotal, Inc.


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

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

  (MIT License) Jedis (redis.clients:jedis:2.9.0 - https://github.com/xetorthio/jedis)

