Contributors to the Python Documentation
----------------------------------------

This section lists people who have contributed in some way to the Python
documentation.  It is probably not complete -- if you feel that you or
anyone else should be on this list, please let us know (send email to
docs@python.org), and we'll be glad to correct the problem.

.. acks::

   * Aahz
   * Michael Abbott
   * Steve Alexander
   * Jim Ahlstrom
   * Fred Allen
   * A. Amoroso
   * Pehr Anderson
   * Oliver Andrich
   * Heidi Annexstad
   * Jesús Cea Avión
   * Daniel Barclay
   * Chris Barker
   * Don Bashford
   * Anthony Baxter
   * Alexander Belopolsky
   * Bennett Benson
   * Jonathan Black
   * Robin Boerdijk
   * Michal Bozon
   * Aaron Brancotti
   * Georg Brandl
   * Keith Briggs
   * Ian Bruntlett
   * Lee Busby
   * Lorenzo M. Catucci
   * Carl Cerecke
   * Mauro Cicognini
   * Gilles Civario
   * Mike Clarkson
   * Steve Clift
   * Dave Cole
   * Matthew Cowles
   * Jeremy Craven
   * Andrew Dalke
   * Ben Darnell
   * L. Peter Deutsch
   * Robert Donohue
   * Fred L. Drake, Jr.
   * Josip Dzolonga
   * Jeff Epler
   * Michael Ernst
   * Blame Andy Eskilsson
   * Carey Evans
   * Martijn Faassen
   * Carl Feynman
   * Dan Finnie
   * Hernán Martínez Foffani
   * Stefan Franke
   * Jim Fulton
   * Peter Funk
   * Lele Gaifax
   * Matthew Gallagher
   * Gabriel Genellina
   * Ben Gertzfield
   * Nadim Ghaznavi
   * Jonathan Giddy
   * Shelley Gooch
   * Nathaniel Gray
   * Grant Griffin
   * Thomas Guettler
   * Anders Hammarquist
   * Mark Hammond
   * Harald Hanche-Olsen
   * Manus Hand
   * Gerhard Häring
   * Travis B. Hartwell
   * Tim Hatch
   * Janko Hauser
   * Thomas Heller
   * Bernhard Herzog
   * Magnus L. Hetland
   * Konrad Hinsen
   * Stefan Hoffmeister
   * Albert Hofkamp
   * Gregor Hoffleit
   * Steve Holden
   * Thomas Holenstein
   * Gerrit Holl
   * Rob Hooft
   * Brian Hooper
   * Randall Hopper
   * Michael Hudson
   * Eric Huss
   * Jeremy Hylton
   * Roger Irwin
   * Jack Jansen
   * Philip H. Jensen
   * Pedro Diaz Jimenez
   * Kent Johnson
   * Lucas de Jonge
   * Andreas Jung
   * Robert Kern
   * Jim Kerr
   * Jan Kim
   * Greg Kochanski
   * Guido Kollerie
   * Peter A. Koren
   * Daniel Kozan
   * Andrew M. Kuchling
   * Dave Kuhlman
   * Erno Kuusela
   * Thomas Lamb
   * Detlef Lannert
   * Piers Lauder
   * Glyph Lefkowitz
   * Robert Lehmann
   * Marc-André Lemburg
   * Ross Light
   * Ulf A. Lindgren
   * Everett Lipman
   * Mirko Liss
   * Martin von Löwis
   * Fredrik Lundh
   * Jeff MacDonald
   * John Machin
   * Andrew MacIntyre
   * Vladimir Marangozov
   * Vincent Marchetti
   * Laura Matson
   * Daniel May
   * Rebecca McCreary
   * Doug Mennella
   * Paolo Milani
   * Skip Montanaro
   * Paul Moore
   * Ross Moore
   * Sjoerd Mullender
   * Dale Nagata
   * Ng Pheng Siong
   * Koray Oner
   * Tomas Oppelstrup
   * Denis S. Otkidach
   * Zooko O'Whielacronx
   * Shriphani Palakodety
   * William Park
   * Joonas Paalasmaa
   * Harri Pasanen
   * Bo Peng
   * Tim Peters
   * Benjamin Peterson
   * Christopher Petrilli
   * Justin D. Pettit
   * Chris Phoenix
   * François Pinard
   * Paul Prescod
   * Eric S. Raymond
   * Edward K. Ream
   * Sean Reifschneider
   * Bernhard Reiter
   * Armin Rigo
   * Wes Rishel
   * Armin Ronacher
   * Jim Roskind
   * Guido van Rossum
   * Donald Wallace Rouse II
   * Mark Russell
   * Nick Russo
   * Chris Ryland
   * Constantina S.
   * Hugh Sasse
   * Bob Savage
   * Scott Schram
   * Neil Schemenauer
   * Barry Scott
   * Joakim Sernbrant
   * Justin Sheehy
   * Charlie Shepherd
   * Michael Simcich
   * Ionel Simionescu
   * Michael Sloan
   * Gregory P. Smith
   * Roy Smith
   * Clay Spence
   * Nicholas Spies
   * Tage Stabell-Kulo
   * Frank Stajano
   * Anthony Starks
   * Greg Stein
   * Peter Stoehr
   * Mark Summerfield
   * Reuben Sumner
   * Kalle Svensson
   * Jim Tittsler
   * David Turner
   * Ville Vainio
   * Martijn Vries
   * Charles G. Waldman
   * Greg Ward
   * Barry Warsaw
   * Corran Webster
   * Glyn Webster
   * Bob Weiner
   * Eddy Welbourne
   * Jeff Wheeler
   * Mats Wichmann
   * Gerry Wiener
   * Timothy Wild
   * Collin Winter
   * Blake Winton
   * Dan Wolfe
   * Steven Work
   * Thomas Wouters
   * Ka-Ping Yee
   * Rory Yorke
   * Moshe Zadka
   * Milan Zamazal
   * Cheng Zhang
