/*  _______         ____    __         ___    ___
 * \    _  \       \    /  \  /       \   \  /   /       '   '  '
 *  |  | \  \       |  |    ||         |   \/   |         .      .
 *  |  |  |  |      |  |    ||         ||\  /|  |
 *  |  |  |  |      |  |    ||         || \/ |  |         '  '  '
 *  |  |  |  |      |  |    ||         ||    |  |         .      .
 *  |  |_/  /        \  \__//          ||    |  |
 * /_______/ynamic    \____/niversal  /__\  /____\usic   /|  .  . ibliotheque
 *                                                      /  \
 *                                                     / .  \
 * licence.txt - Conditions for use of DUMB.          / / \  \
 *                                                   | <  /   \_
 * If you do not agree to these terms, please        |  \/ /\   /
 * do not use DUMB.                                   \_  /  > /
 *                                                      | \ / /
 * Information in [brackets] is provided to aid         |  ' /
 * interpretation of the licence.                        \__/
 */


Dynamic Universal Music Bibliotheque

Copyright (C) 2001-2003 Ben Davis, Robert J Ohannessian and Julien Cugniere

This software is provided 'as-is', without any express or implied warranty.
In no event shall the authors be held liable for any damages arising from the
use of this software.

Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented; you must not claim
   that you wrote the original software. If you use this software in a
   product, you are requested to acknowledge its use in the product
   documentation, along with details on where to get an unmodified version of
   this software, but this is not a strict requirement.

   [Note that the above point asks for a link to DUMB, not just a mention.
   Googling for DUMB doesn't help much! The URL is "http://dumb.sf.net/".]

   [The only reason why the link is not strictly required is that such a
   requirement prevents DUMB from being used in projects with certain other
   licences, notably the GPL. See http://www.gnu.org/philosophy/bsd.html .]

2. Altered source versions must be plainly marked as such, and must not be
   misrepresented as being the original software.

3. This notice may not be removed from or altered in any source distribution.

4. If you are using the Program in someone else's bedroom at any Monday
   3:05 PM, you are not allowed to modify the Program for ten minutes. [This
   clause provided by Inphernic; every licence should contain at least one
   clause, the reasoning behind which is far from obvious.]


Note: point 4 has been renounced. See the Licences section on
http://dumb.sf.net/ for confirmation that this is true.
