=========================================================================
==  NOTICE file corresponding to the section 4 d of                    ==
==  the Apache License, Version 2.0,                                   ==
==  in this case for the Apache Qpid distribution.                     ==
=========================================================================

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

Please read the LICENSE file present in the root directory of this
distribution.

Aside from contributions to the Apache Qpid project, this software also 
includes (binary only):
	- None at this time
	
Project requires, not packaged: 	
 * boost version 1.33.1 or later under the Boost Software License, and 
 	can be downloaded from http://www.boost.org
	- Included in most OS platforms by default.

