Apache UIMA C++
Copyright 2006 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

Portions of UIMACPP were originally developed by
International Business Machines Corporation and are
licensed to the Apache Software Foundation under the
"Software Grant License Agreement", informally known as the
"IBM UIMA License Agreement".
Copyright (c) 2003, 2007 IBM Corporation.

---------------------
This product includes the software, International Components for
Unicode, ICU (http://www.icu-project.org). Copyright (c) 1995-2006
International Business Machines Corporation and others.

---------------------
This product includes the software, Apache Portable Runtime 1.6.5
Copyright (c) 2000-2018 The Apache Software Foundation.

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

Portions of this software were developed at the National Center
for Supercomputing Applications (NCSA) at the University of
Illinois at Urbana-Champaign.

This software contains code derived from the RSA Data Security
Inc. MD5 Message-Digest Algorithm.

This software contains code derived from UNIX V7, Copyright(C)
Caldera International Inc.

---------------------
This product includes the software, Apache Xerces 
Portions of this software were originally based on the following:
     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com. 

---------------------
This product includes the software Apache ActiveMQ CPP 3.9.3
=========================================================================
==  ZLib Compression / Decompression Library Notice                    ==
=========================================================================
This product includes software developed by the Jean-loup Gailly and Mark Adler
http://www.zlib.net/

---------------------
This product includes the software Apache Portable Runtime Utility Library 1.6.1
Copyright (c) 2000-2016 The Apache Software Foundation.

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

Portions of this software were developed at the National Center
for Supercomputing Applications (NCSA) at the University of
Illinois at Urbana-Champaign.

This software contains code derived from the RSA Data Security
Inc. MD5 Message-Digest Algorithm, including various
modifications by Spyglass Inc., Carnegie Mellon University, and
Bell Communications Research, Inc (Bellcore).
