   =========================================================================
   ==      NOTICE file for use with the Apache License, Version 2.0,      ==
   =========================================================================

   Apache Vysper, an Apache MINA Project
   Copyright 2006-2010 The Apache Software Foundation

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

   This product also includes software developed by
     Spring Framework (http://www.springframework.org/).
   under the Apache License, Version 2.0

   This product also includes software developed by
     Erich Gamma, Kent Beck and the JUnit Team (http://junit.sourceforge.org)
   under The Common Public License 1.0.

   This product also includes software developed at
     slf4j.org (http://slf4j.org).
   under the MIT License

   This product also includes software developed by
     Jive Software (http://www.jivesoftware.com/)
   under the Apache License, Version 2.0

   This product also includes software developed by
     Mort Bay Consulting Pty Ltd (http://www.eclipse.org/jetty/)
   under the Apache License, Version 2.0

   This product also includes software developed by
     Collecta, Inc (http://code.stanziq.com/strophe/)
   under the MIT License

   This product also includes software developed by
     Kyle Simpson (http://www.flensed.com/)
   under the MIT License

   This product also includes software developed by
     Geoff Stearns, Michael Williams, and Bobby van der Sluis
   under the MIT License

   This product also includes software developed by
     John Resig (http://jquery.com/)
   under the MIT License

   This product also includes software developed by
    JQuery UI authors (http://jqueryui.com/about)
   under the MIT License

   This product also includes software developed by
    OFFIS, Tammo Freese, Henri Tremblay
   under the Apache License, Version 2.0

   

   Please read the LICENSE.txt and ABOUT.txt files in the root directory of 
   this distribution.