This is the Debian GNU/Linux prepackaged version of the EXT2 file
system utilities (e2fsck, mke2fs, etc.).  The EXT2 utilities were
written by Theodore Ts'o <tytso@mit.edu> and Remy Card <card@masi.ibp.fr>.

Sources were obtained from http://sourceforge.net/projects/e2fsprogs

Packaging is Copyright (c) 2003-2007 Theodore Ts'o <tytso@mit.edu>
             Copyright (c) 1997-2003 Yann Dirson <dirson@debian.org>
	     Copyright (c) 2001 Alcove <http://www.alcove.com/>
	     Copyright (c) 1997 Klee Dienes
	     Copyright (c) 1995-1996 Michael Nonweiler <mrn20@cam.ac.uk>

Upstream Author: Theodore Ts'o <tytso@mit.edu>

Copyright notice:

This package, the EXT2 filesystem utilities, are made available under
the GNU Public License version 2, with the exception of the lib/ext2fs
and lib/e2p libraries, which are made available under the GNU Library
General Public License Version 2, the lib/uuid library which is made
available under a BSD-style license and the lib/et and lib/ss
libraries which are made available under an MIT-style license.

	Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 
	2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Theodore Ts'o

On Debian GNU systems, the complete text of the GNU General Public
License can be found in `/usr/share/common-licenses/GPL-2'.  The
complete text of the GNU Library General Public License can be found
in '/usr/share/common-licenses/LGPL-2'.


The license used for lib/et and lib/ss libraries is:

   Copyright 1987 by the Student Information Processing Board
   of the Massachusetts Institute of Technology

   Permission to use, copy, modify, and distribute this software and
   its documentation for any purpose is hereby granted, provided that
   the names of M.I.T. and the M.I.T. S.I.P.B. not be used in
   advertising or publicity pertaining to distribution of the software
   without specific, written prior permission.  M.I.T. and the
   M.I.T. S.I.P.B. make no representations about the suitability of
   this software for any purpose.  It is provided "as is" without
   express or implied warranty.

The license used for lib/uuid is:

   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions
   are met:
   1. Redistributions of source code must retain the above copyright
      notice, and the entire permission notice in its entirety,
      including the disclaimer of warranties.
   2. Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
   3. The name of the author may not be used to endorse or promote
      products derived from this software without specific prior
      written permission.

   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
   WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
   OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
   BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
   USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
   DAMAGE.
