  Apache UIMA-DUCC
Copyright 2012 The Apache Software Foundation

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

Portions of Apache UIMA 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, 2006 IBM Corporation.

Portions of UIMA-DUCC 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-DUCC License Agreement".
Copyright (c) 2012 IBM Corporation

Portions of UIMA-AS 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-EE License Agreement".
Copyright (c) 2007, 2008 IBM Corporation

------------------ Saxon Notice

This product includes software known as 
"The Saxon XSLT and XQuery Processor from Saxonica Limited", whose
home page URL is http://www.saxonica.com/ 

Saxon includes the org.apache.xerces.util.XMLChar module from the Apache 
Xerces product, renamed as net.sf.saxon.om.XMLChar but otherwise unchanged. 
See the copyright statements included in the source code of that module for
conditions of use.

Saxon includes code for performing Unicode normalization that is derived 
from the sample code published for this purpose by the Unicode consortium. 
For the terms of use of this code, see http://www.unicode.org/terms_of_use.html, 
which should be regarded as forming part of these conditions of use, and part 
of the Saxon documentation. 

------------------ SVG Notice

This product contains icons developed by the SVG Icons project 
(http://sourceforge.net/projects/svgicons), licensed under the 
BSD license (see LICENSE file).

------------------

=========================== DUCC IMAGES ================================ 

1. image......... 120px-Anas_platyrhynchos_-United_Kingdom_-adult_female_and_ducklings-8.jpg
   source........ http://commons.wikimedia.org/wiki/File:Anas_platyrhynchos_-United_Kingdom_-adult_female_and_ducklings-8.jpg#metadata
   license....... http://creativecommons.org/licenses/by/2.0/deed.en
   attribution... © jans canon / Wikimedia Commons / CC-BY-2.0
   
2. image......... 120px-Ducks_eating.jpg
   source........ http://commons.wikimedia.org/wiki/File:Ducks_eating.jpg
   license....... http://creativecommons.org/licenses/by/2.0/deed.en
   attribution... © Neil Phillips / Wikimedia Commons / CC-BY-2.0
   
3. image......... 120px-Head_of_a_white_domesticated_duck.jpg
   source........ http://commons.wikimedia.org/wiki/File:Head_of_a_white_domesticated_duck.jpg
   license....... http://creativecommons.org/licenses/by-sa/2.0/deed.en
   attribution... © Ernst Vikne / Wikimedia Commons / CC-BY-SA-2.0   
      
4. image......... 120px-Rubber_duckies_So_many_ducks.jpg
   source........ http://commons.wikimedia.org/wiki/File:Rubber_duckies_So_many_ducks.jpg
   license....... http://creativecommons.org/licenses/by/2.0/deed.en
   attribution... © Gaetan Lee / Wikimedia Commons / CC-BY-2.0   
         
5. image......... 120px-Thermal_image_of_four_ducks_swimming.jpg
   source........ http://commons.wikimedia.org/wiki/File:Thermal_image_of_four_ducks_swimming.jpg
   license....... http://creativecommons.org/publicdomain/zero/1.0/deed.en
   attribution... N/A
          
6. image......... 120px-Tracks_duck.gif
   source........ http://commons.wikimedia.org/wiki/File:Tracks_duck.gif
   license....... This work is in the public domain in the United States because it is a work prepared by an officer or employee of the United States Government
                  as part of that person's official duties under the terms of Title 17, Chapter 1, Section 105 of the US Code. See Copyright.
   attribution... N/A

7. image......... refresh.png
   source........ http://commons.wikimedia.org/wiki/File:Human-gnome-session-reboot.svg
   license....... http://creativecommons.org/licenses/by-sa/2.5/deed.en
   attribution... User:Pander / Wikimedia Commons / CC BY-SA 2.5  
          
8. image......... 144x144Stick_figure_-_choosing.jpg
   source........ http://commons.wikimedia.org/wiki/File:Stick_figure_-_choosing.jpg
   license....... http://creativecommons.org/licenses/by-sa/3.0/deed.en
   attribution... © User:Obsidian Soul / Wikimedia Commons / CC-BY-SA-3.0  
               
9. image......... 2x1.33in-Bariken_kid.JPG
   source........ http://commons.wikimedia.org/wiki/File:Bariken_kid.JPG
   license....... http://creativecommons.org/licenses/by-sa/3.0/deed.en
   attribution... © User:Materialscientist / Wikimedia Commons / CC-BY-SA-3.0  
           
10. image........ 800px-Duck_crossing_Louisiana.2x1.4.jpg
   source........ http://commons.wikimedia.org/wiki/File:Duck_crossing_Louisiana_2010-10-15.JPG
   license....... I, the copyright holder of this work, release this work into the public domain. This applies worldwide.
                  In some countries this may not be legally possible; if so:
                  I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.
   attribution... User:Richard David Ramsey    
      
11. image........ 800px-Leg_Of_White_Duck.2x1.6.jpg
   source........ http://commons.wikimedia.org/wiki/File:Leg_Of_White_Duck.jpg
   license....... http://creativecommons.org/licenses/by-sa/3.0/deed.en
   attribution... © User:Ezhuttukari / Wikimedia Commons / CC-BY-SA-3.0         
            
12. image........ 90px-Swimming_white_domesticated_ducks.jpg
   source........ http://commons.wikimedia.org/wiki/File:Swimming_white_domesticated_ducks.jpg
   license....... http://creativecommons.org/licenses/by-sa/2.0/deed.en
   attribution... © Ernst Vikne / Wikimedia Commons / CC-BY-SA-2.0
         
13. image........ Ducklings_in_Shaw_Creek.jpg
   source........ http://commons.wikimedia.org/wiki/File:Ducklings_in_Shaw_Creek.jpg
   license....... http://creativecommons.org/licenses/by/2.0/deed.en
   attribution... © Author:Peggy2012CREATIVELENZ / Wikimedia Commons / CC-BY-2.0   
         
14. image........ Flying_mallard_duck_-_female_2.0x1.4.jpg
   source........ http://commons.wikimedia.org/wiki/File:Flying_mallard_duck_-_female.jpg
   license....... http://creativecommons.org/licenses/by-sa/3.0/deed.en
   attribution... © Author:Martin Correns / Wikimedia Commons / CC-BY-SA-3.0   

15. image........ indicator.gif
   source........ http://commons.wikimedia.org/wiki/File:Birdleft.gif
   license....... I, the copyright holder of this work, release this work into the public domain. This applies worldwide.
                  In some countries this may not be legally possible; if so:
                  I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.
   attribution... User:Pigpen
    
16. image........ propeller_hat_large.svg.png, propeller_hat_small.svg.png
   source........ http://commons.wikimedia.org/wiki/File:Propeller.svg
   license....... http://creativecommons.org/publicdomain/zero/1.0/deed.en
   attribution... N/A 

17. image........ RCA_Indian_Head_test_pattern.JPG
   source........ http://commons.wikimedia.org/wiki/File:RCA_Indian_Head_test_pattern.JPG
   license....... This work is in the public domain in that it was published in the United States between 1923 and 1977 and without a copyright notice. 
                  Unless its author has been dead for several years, it is copyrighted in jurisdictions that do not apply the rule of the shorter term 
                  for US works, such as Canada (50 p.m.a.), Mainland China (50 p.m.a., not Hong Kong or Macao), Germany (70 p.m.a.), Mexico (100 p.m.a.), 
                  Switzerland (70 p.m.a.), and other countries with individual treaties.
   attribution... N/A
   
18. image........ ts-2.0x1.3.jpeg
   source........ http://commons.wikimedia.org/wiki/File:Mallard_close-up.jpg
   license....... This work has been released into the public domain by its author, Frankyboy5 at the wikipedia project. This applies worldwide.
                  In case this is not legally possible: Frankyboy5 grants anyone the right to use this work for any purpose, without any conditions, unless
                  such conditions are required by law.
   attribution... N/A
      
19. image........ Delena-cancerides-huntsman-spider.jpg
   source........ http://commons.wikimedia.org/wiki/File:Delena-cancerides-huntsman-spider.jpg
   license....... http://creativecommons.org/licenses/by-sa/2.0/deed.en
   attribution... © Bryce McQuillan / Wikimedia Commons / CC-BY-SA-2.0
      
20. image........ 120px-BURROUGH_AUDUBON_SOCIETY_MEMBERS_USE_BINOCULARS_TO_IDENTIFY_MIGRATORY_SHORE_BIRDS_DURING_A_SCHEDULED_OUTING_AT_THE..._-_NARA_-_557179.jpg
   source........ http://commons.wikimedia.org/wiki/File:BURROUGH_AUDUBON_SOCIETY_MEMBERS_USE_BINOCULARS_TO_IDENTIFY_MIGRATORY_SHORE_BIRDS_DURING_A_SCHEDULED_OUTING_AT_THE..._-_NARA_-_557179.jpg
   license....... This work is in the public domain in the United States because it is a work prepared by an officer or employee of the United States Government as part of that person's official 
                  duties under the terms of Title 17, Chapter 1, Section 105 of the US Code. See Copyright.
   attribution... Duncan, Patricia D.
      
21. image........ Cygnet_in_Hyde_Park.jpg
   source........ http://commons.wikimedia.org/wiki/File:Cygnet_in_Hyde_Park.jpg
   license....... http://creativecommons.org/licenses/by-sa/2.0/deed.en
   attribution... Files from Keven Law Flickr stream


