Fix a bunch of typos in documentation, docstrings and comments.
(From SF patch #810751)
diff --git a/Lib/ConfigParser.py b/Lib/ConfigParser.py
index fa6b053..7503ba2 100644
--- a/Lib/ConfigParser.py
+++ b/Lib/ConfigParser.py
@@ -19,7 +19,7 @@
 
 class:
 
-ConfigParser -- responsible for for parsing a list of
+ConfigParser -- responsible for parsing a list of
                 configuration files, and managing the parsed database.
 
     methods:
diff --git a/Lib/Cookie.py b/Lib/Cookie.py
index 3b2592a..a6ca654 100644
--- a/Lib/Cookie.py
+++ b/Lib/Cookie.py
@@ -76,7 +76,7 @@
 Notice that the printable representation of a Cookie is the
 appropriate format for a Set-Cookie: header.  This is the
 default behavior.  You can change the header and printed
-attributes by using the the .output() function
+attributes by using the .output() function
 
    >>> C = Cookie.SmartCookie()
    >>> C["rocky"] = "road"
diff --git a/Lib/asyncore.py b/Lib/asyncore.py
index a38c911..7fb84b4 100644
--- a/Lib/asyncore.py
+++ b/Lib/asyncore.py
@@ -497,7 +497,7 @@
 #
 # After a little research (reading man pages on various unixen, and
 # digging through the linux kernel), I've determined that select()
-# isn't meant for doing doing asynchronous file i/o.
+# isn't meant for doing asynchronous file i/o.
 # Heartening, though - reading linux/mm/filemap.c shows that linux
 # supports asynchronous read-ahead.  So _MOST_ of the time, the data
 # will be sitting in memory for us already when we go to read it.
diff --git a/Lib/distutils/cmd.py b/Lib/distutils/cmd.py
index 7e7a4cd..6e44221 100644
--- a/Lib/distutils/cmd.py
+++ b/Lib/distutils/cmd.py
@@ -148,7 +148,7 @@
         """Set final values for all the options that this command supports.
         This is always called as late as possible, ie.  after any option
         assignments from the command-line or from other commands have been
-        done.  Thus, this is the place to to code option dependencies: if
+        done.  Thus, this is the place to code option dependencies: if
         'foo' depends on 'bar', then it is safe to set 'foo' from 'bar' as
         long as 'foo' still has the same value it was assigned in
         'initialize_options()'.
diff --git a/Lib/email/Message.py b/Lib/email/Message.py
index d4c10df..9f826d8 100644
--- a/Lib/email/Message.py
+++ b/Lib/email/Message.py
@@ -775,7 +775,7 @@
                 newparams.append((pk, pv))
         if not foundp:
             # The original Content-Type header had no boundary attribute.
-            # Tack one one the end.  BAW: should we raise an exception
+            # Tack one on the end.  BAW: should we raise an exception
             # instead???
             newparams.append(('boundary', '"%s"' % boundary))
         # Replace the existing Content-Type header with the new value
diff --git a/Lib/heapq.py b/Lib/heapq.py
index fee7a24..2c30b12 100644
--- a/Lib/heapq.py
+++ b/Lib/heapq.py
@@ -238,7 +238,7 @@
         heap[pos] = heap[childpos]
         pos = childpos
         childpos = 2*pos + 1
-    # The leaf at pos is empty now.  Put newitem there, and and bubble it up
+    # The leaf at pos is empty now.  Put newitem there, and bubble it up
     # to its final resting place (by sifting its parents down).
     heap[pos] = newitem
     _siftdown(heap, startpos, pos)
diff --git a/Lib/ihooks.py b/Lib/ihooks.py
index 4034b01..19faac9 100644
--- a/Lib/ihooks.py
+++ b/Lib/ihooks.py
@@ -18,7 +18,7 @@
 by standard modules os and os.path.  It should be used as the base
 class for other hooks classes.
 
-2) A "module loader" class provides an interface to to search for a
+2) A "module loader" class provides an interface to search for a
 module in a search path and to load it.  It defines a method which
 searches for a module in a single directory; by overriding this method
 one can redefine the details of the search.  If the directory is None,
diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py
index 5784e23..77fdcdf 100644
--- a/Lib/mimetypes.py
+++ b/Lib/mimetypes.py
@@ -65,7 +65,7 @@
             self.read(name, strict)
 
     def add_type(self, type, ext, strict=True):
-        """Add a mapping between a type and and extension.
+        """Add a mapping between a type and an extension.
 
         When the extension is already known, the new
         type will replace the old one. When the type
@@ -269,7 +269,7 @@
     return guess_extension(type, strict)
 
 def add_type(self, type, ext, strict=True):
-    """Add a mapping between a type and and extension.
+    """Add a mapping between a type and an extension.
 
     When the extension is already known, the new
     type will replace the old one. When the type
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index fcb899b..687d885 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -301,7 +301,7 @@
 # For each directory under top (including top itself, but excluding
 # '.' and '..'), func(arg, dirname, filenames) is called, where
 # dirname is the name of the directory and filenames is the list
-# files files (and subdirectories etc.) in the directory.
+# of files (and subdirectories etc.) in the directory.
 # The func may modify the filenames list, to implement a filter,
 # or to impose a different order of visiting.
 
diff --git a/Lib/os2emxpath.py b/Lib/os2emxpath.py
index 67f00df..09982aa 100644
--- a/Lib/os2emxpath.py
+++ b/Lib/os2emxpath.py
@@ -260,7 +260,7 @@
 # For each directory under top (including top itself, but excluding
 # '.' and '..'), func(arg, dirname, filenames) is called, where
 # dirname is the name of the directory and filenames is the list
-# files files (and subdirectories etc.) in the directory.
+# of files (and subdirectories etc.) in the directory.
 # The func may modify the filenames list, to implement a filter,
 # or to impose a different order of visiting.
 
diff --git a/Lib/pre.py b/Lib/pre.py
index 79fb042..b6dd09b 100644
--- a/Lib/pre.py
+++ b/Lib/pre.py
@@ -607,7 +607,7 @@
         whole match is returned). If a groupN argument is zero, the
         corresponding return value is the entire matching string; if
         it is in the inclusive range [1..99], it is the string
-        matching the the corresponding parenthesized group. If a group
+        matching the corresponding parenthesized group. If a group
         number is negative or larger than the number of groups defined
         in the pattern, an IndexError exception is raised. If a group
         is contained in a part of the pattern that did not match, the
diff --git a/Lib/profile.doc b/Lib/profile.doc
index bf5d8e3..8724484 100644
--- a/Lib/profile.doc
+++ b/Lib/profile.doc
@@ -339,7 +339,7 @@
 basis of a sort (example: "time" or "name").
 
 When more than one key is provided, then additional keys are used as
-secondary criteria when the there is equality in all keys selected
+secondary criteria when there is equality in all keys selected
 before them.  For example, sort_stats('name', 'file') will sort all
 the entries according to their function name, and resolve all ties
 (identical function names) by sorting by file name.
@@ -464,7 +464,7 @@
 There is a fundamental problem with deterministic profilers involving
 accuracy.  The most obvious restriction is that the underlying "clock"
 is only ticking at a rate (typically) of about .001 seconds.  Hence no
-measurements will be more accurate that that underlying clock.  If
+measurements will be more accurate than that underlying clock.  If
 enough measurements are taken, then the "error" will tend to average
 out. Unfortunately, removing this first error induces a second source
 of error...
diff --git a/Lib/rlcompleter.py b/Lib/rlcompleter.py
index de4c024..1d29167 100644
--- a/Lib/rlcompleter.py
+++ b/Lib/rlcompleter.py
@@ -117,7 +117,7 @@
         Assuming the text is of the form NAME.NAME....[NAME], and is
         evaluatable in self.namespace, it will be evaluated and its attributes
         (as revealed by dir()) are used as possible completions.  (For class
-        instances, class members are are also considered.)
+        instances, class members are also considered.)
 
         WARNING: this can still invoke arbitrary C code, if an object
         with a __getattr__ hook is evaluated.
diff --git a/Lib/site.py b/Lib/site.py
index 788a94a..e7b9369 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -10,7 +10,7 @@
 import, this is no longer necessary (but code that does it still
 works).
 
-This will append site-specific paths to to the module search path.  On
+This will append site-specific paths to the module search path.  On
 Unix, it starts with sys.prefix and sys.exec_prefix (if different) and
 appends lib/python<version>/site-packages as well as lib/site-python.
 On other platforms (mainly Mac and Windows), it uses just sys.prefix
diff --git a/Lib/test/test_class.py b/Lib/test/test_class.py
index 3c3ea06..a37f2a4 100644
--- a/Lib/test/test_class.py
+++ b/Lib/test/test_class.py
@@ -202,7 +202,7 @@
     oct(testme)
     hex(testme)
 else:
-    # Jython enforced that the these methods return
+    # Jython enforced that these methods return
     # a value of the expected type.
     print "__int__: ()"
     print "__long__: ()"
diff --git a/Lib/test/test_errno.py b/Lib/test/test_errno.py
index 7869328..6b02e25 100755
--- a/Lib/test/test_errno.py
+++ b/Lib/test/test_errno.py
@@ -34,7 +34,7 @@
           'EUSERS', 'EWOULDBLOCK', 'EXDEV', 'EXFULL']
 
 #
-# This is is a wee bit bogus since the module only conditionally adds
+# This is a wee bit bogus since the module only conditionally adds
 # errno constants if they have been defined by errno.h  However, this
 # test seems to work on SGI, Sparc & intel Solaris, and linux.
 #
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 028ec08..d5f4774 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -1,6 +1,6 @@
 # As a test suite for the os module, this is woefully inadequate, but this
 # does add tests for a few functions which have been determined to be more
-# more portable than they had been thought to be.
+# portable than they had been thought to be.
 
 import os
 import unittest
diff --git a/Lib/test/test_stringprep.py b/Lib/test/test_stringprep.py
index c116adc..4459689 100644
--- a/Lib/test/test_stringprep.py
+++ b/Lib/test/test_stringprep.py
@@ -71,7 +71,7 @@
 # This would generate a hash of all predicates. However, running
 # it is quite expensive, and only serves to detect changes in the
 # unicode database. Instead, stringprep.py asserts the version of
-# of the database.
+# the database.
 
 # predicates = [k for k in dir(stringprep) if k.startswith("in_table")]
 # predicates.sort()
diff --git a/Lib/urllib2.py b/Lib/urllib2.py
index 7124dfb..9f123ab 100644
--- a/Lib/urllib2.py
+++ b/Lib/urllib2.py
@@ -802,7 +802,7 @@
 class AbstractHTTPHandler(BaseHandler):
 
     # XXX Should rewrite do_open() to use the new httplib interface,
-    # would would be a little simpler.
+    # would be a little simpler.
 
     def do_open(self, http_class, req):
         host = req.get_host()
diff --git a/Lib/whichdb.py b/Lib/whichdb.py
index d60284e..deb8a02 100644
--- a/Lib/whichdb.py
+++ b/Lib/whichdb.py
@@ -51,7 +51,7 @@
         except (IOError, _dbmerror):
             pass
 
-    # Check for dumbdbm next -- this has a .dir and and a .dat file
+    # Check for dumbdbm next -- this has a .dir and a .dat file
     try:
         # First check for presence of files
         os.stat(filename + os.extsep + "dat")
diff --git a/Lib/xmlrpclib.py b/Lib/xmlrpclib.py
index e67f2f0..20d6e71 100644
--- a/Lib/xmlrpclib.py
+++ b/Lib/xmlrpclib.py
@@ -994,7 +994,7 @@
 # represents a fault condition, this function raises a Fault exception.
 #
 # @param data An XML-RPC packet, given as an 8-bit string.
-# @return A tuple containing the the unpacked data, and the method name
+# @return A tuple containing the unpacked data, and the method name
 #     (None if not present).
 # @see Fault