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

   Apache Xerces Java
   Copyright 1999-2010 The Apache Software Foundation

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

   Portions of this software were originally based on the following:
     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
     - voluntary contributions made by Paul Eng on behalf of the 
       Apache Software Foundation that were originally developed at iClick, Inc.,
       software copyright (c) 1999.
       
   This product includes/uses the PsychoPath XPath 2.0 Processor 
   (org.eclipse.wst.xml.xpath2.processor_1.0.0.jar) developed at
   The Eclipse Foundation (http://www.eclipse.org) and made available under
   the Eclipse Public License v1.0.
       
   This product includes/uses the CUP Parser Generator (cupv10k-runtime.jar)
   maintained at (http://www2.cs.tum.edu/projects/cup/)
   Copyright 1996-1999 by Scott Hudson, Frank Flannery, C. Scott Ananian
   