Apache Any23
Copyright 2011-2018 The Apache Software Foundation
Copyright 2008-2011 Digital Enterprise Research Institute (DERI)

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

Jetty Web Container
Copyright 1995-2012 Mort Bay Consulting Pty Ltd.

The Jetty Web Container includes:
UnixCrypt.java
Copyright 1996 Aki Yoshida,
modified April 2001  by Iris Van den Broeke, Daniel Deville.

This product includes software developed by
Aduna Software (http://www.aduna-software.org/)

This product includes software developed by
MetaStuff, Ltd. (http://dom4j.org)

ASM - Copyright (c) 2000-2011 INRIA, France Telecom
All rights reserved. (http://asm.ow2.org/)

This product includes software developed by
jQuery Foundation (http://jquery.org/)

This product includes software developed by
Twitter, Inc (http://twitter.github.com/bootstrap/)
