Apache Apache Ki
Copyright 2008 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

This product includes a org.apache.ki.util.SoftHashMap
implementation based on initial ideas from Dr. Hienz Kabutz's
public posted version found here:
    http://www.javaspecialists.eu/archive/Issue015.html)
with continued modifications.  Per Heinz Kabutz: "you have my
express permission to publish it in Apache Apache Ki - please
leave a link in the source code pointing to my website:
    http://www.javaspecialists.eu


