Apache Directory JUnit Add-ons
Copyright 2003-2011 The Apache Software Foundation

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

This product includes/uses software, Mycila (http://code.google.com/p/mycila/),
developed by Mathieu Carbou (http://code.google.com/p/mycila/)

