Apache Sling MIME type mapping support
Copyright 2008-2009 The Apache Software Foundation

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

This product includes JQuery TreeTable developed by
Ludo van den Boom (http://blog.cubicphuse.nl/)
Copyright (c) 2009 Ludo van den Boom
Licensed under the MIT License

Apache Sling is based on source code originally developed 
by Day Software (http://www.day.com/).
