diff --git a/Lib/encodings/__init__.py b/Lib/encodings/__init__.py
new file mode 100644
index 0000000..c33b822
--- /dev/null
+++ b/Lib/encodings/__init__.py
@@ -0,0 +1,78 @@
+""" Standard "encodings" Package
+
+    Standard Python encoding modules are stored in this package
+    directory.
+
+    Codec modules must have names corresponding to standard lower-case
+    encoding names. Hyphens are automatically converted to
+    underscores, e.g. 'utf-8' is looked up as module utf_8.
+
+    Each codec module must export the following interface:
+
+    * getregentry() -> (encoder, decoder, stream_reader, stream_writer)
+    The getregentry() API must return callable objects which adhere to
+    the Python Codec Interface Standard.
+
+    In addition, a module may optionally also define the following
+    APIs which are then used by the package's codec search function:
+
+    * getaliases() -> sequence of encoding name strings to use as aliases
+
+    Alias names returned by getaliases() must be lower-case.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import string,codecs,aliases
+
+_cache = {}
+_unkown = '--unkown--'
+
+def search_function(encoding):
+    
+    # Cache lookup
+    entry = _cache.get(encoding,_unkown)
+    if entry is not _unkown:
+        return entry
+
+    # Import the module
+    modname = string.replace(encoding,'-','_')
+    modname = aliases.aliases.get(modname,modname)
+    try:
+        mod = __import__(modname,globals(),locals(),'*')
+    except ImportError,why:
+        _cache[encoding] = None
+        return None
+    
+    # Now ask the module for the registry entry
+    try:
+        entry = tuple(mod.getregentry())
+    except AttributeError:
+        entry = ()
+    if len(entry) != 4:
+        raise SystemError,\
+              'module "%s.%s" failed to register' % \
+              (__name__,modname)
+    for obj in entry:
+        if not callable(obj):
+            raise SystemError,\
+                  'incompatible codecs in module "%s.%s"' % \
+                  (__name__,modname)
+
+    # Cache the encoding and its aliases
+    _cache[encoding] = entry
+    try:
+        codecaliases = mod.getaliases()
+    except AttributeError:
+        pass
+    else:
+        for alias in codecaliases:
+            _cache[alias] = entry
+    return entry
+
+# Register the search_function in the Python codec registry
+codecs.register(search_function)
diff --git a/Lib/encodings/aliases.py b/Lib/encodings/aliases.py
new file mode 100644
index 0000000..386352f
--- /dev/null
+++ b/Lib/encodings/aliases.py
@@ -0,0 +1,57 @@
+""" Encoding Aliases Support
+
+    This module is used by the encodings package search function to
+    map encodings names to module names.
+
+    Note that the search function converts the encoding names to lower
+    case and replaces hyphens with underscores *before* performing the
+    lookup.
+
+"""
+aliases = {
+
+    # Latin-1
+    'latin': 'latin_1',
+    'latin1': 'latin_1',
+    
+    # UTF-8
+    'utf': 'utf_8',
+    'utf8': 'utf_8',
+    'u8': 'utf_8',
+    
+    # UTF-16
+    'utf16': 'utf_16',
+    'u16': 'utf_16',
+    'utf_16be': 'utf_16_be',
+    'utf_16le': 'utf_16_le',
+    'UnicodeBigUnmarked': 'utf_16_be',
+    'UnicodeLittleUnmarked': 'utf_16_le',
+
+    # ASCII
+    'us_ascii': 'ascii',
+
+    # ISO
+    'iso8859_1': 'latin_1',
+    'iso_8859_1': 'latin_1',
+    'iso_8859_10': 'iso8859_10',
+    'iso_8859_13': 'iso8859_13',
+    'iso_8859_14': 'iso8859_14',
+    'iso_8859_15': 'iso8859_15',
+    'iso_8859_2': 'iso8859_2',
+    'iso_8859_3': 'iso8859_3',
+    'iso_8859_4': 'iso8859_4',
+    'iso_8859_5': 'iso8859_5',
+    'iso_8859_6': 'iso8859_6',
+    'iso_8859_7': 'iso8859_7',
+    'iso_8859_8': 'iso8859_8',
+    'iso_8859_9': 'iso8859_9',
+
+    # Mac
+    'MacCentralEurope': 'mac_latin2',
+    'MacCyrillic': 'mac_cyrillic',
+    'MacGreek': 'mac_greek',
+    'MacIceland': 'mac_iceland',
+    'MacRoman': 'mac_roman',
+    'MacTurkish': 'mac_turkish',
+
+}
diff --git a/Lib/encodings/ascii.py b/Lib/encodings/ascii.py
new file mode 100644
index 0000000..b92ff5e
--- /dev/null
+++ b/Lib/encodings/ascii.py
@@ -0,0 +1,35 @@
+""" Python 'ascii' Codec
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    # Note: Binding these as C functions will result in the class not
+    # converting them to methods. This is intended.
+    encode = codecs.ascii_encode
+    decode = codecs.ascii_decode
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+class StreamConverter(StreamWriter,StreamReader):
+
+    encode = codecs.ascii_decode
+    decode = codecs.ascii_encode
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec.encode,Codec.decode,StreamReader,StreamWriter)
diff --git a/Lib/encodings/charmap.py b/Lib/encodings/charmap.py
new file mode 100644
index 0000000..f0bb4b9
--- /dev/null
+++ b/Lib/encodings/charmap.py
@@ -0,0 +1,51 @@
+""" Generic Python Character Mapping Codec.
+
+    Use this codec directly rather than through the automatic
+    conversion mechanisms supplied by unicode() and .encode().
+    
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    # Note: Binding these as C functions will result in the class not
+    # converting them to methods. This is intended.
+    encode = codecs.charmap_encode
+    decode = codecs.charmap_decode
+
+class StreamWriter(Codec,codecs.StreamWriter):
+
+    def __init__(self,stream,errors='strict',mapping=None):
+
+        codecs.StreamWriter.__init__(self,strict,errors)
+        self.mapping = mapping
+
+    def encode(self,input,errors='strict'):
+
+        return Codec.encode(input,errors,self.mapping)
+        
+class StreamReader(Codec,codecs.StreamReader):
+
+    def __init__(self,stream,errors='strict',mapping=None):
+
+        codecs.StreamReader.__init__(self,strict,errors)
+        self.mapping = mapping
+
+    def decode(self,input,errors='strict'):
+
+        return Codec.decode(input,errors,self.mapping)
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec.encode,Codec.decode,StreamReader,StreamWriter)
+
diff --git a/Lib/encodings/cp037.py b/Lib/encodings/cp037.py
new file mode 100644
index 0000000..d60504c
--- /dev/null
+++ b/Lib/encodings/cp037.py
@@ -0,0 +1,282 @@
+""" Python Character Mapping Codec generated from 'CP037.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0004: 0x009c,	# CONTROL
+	0x0005: 0x0009,	# HORIZONTAL TABULATION
+	0x0006: 0x0086,	# CONTROL
+	0x0007: 0x007f,	# DELETE
+	0x0008: 0x0097,	# CONTROL
+	0x0009: 0x008d,	# CONTROL
+	0x000a: 0x008e,	# CONTROL
+	0x0014: 0x009d,	# CONTROL
+	0x0015: 0x0085,	# CONTROL
+	0x0016: 0x0008,	# BACKSPACE
+	0x0017: 0x0087,	# CONTROL
+	0x001a: 0x0092,	# CONTROL
+	0x001b: 0x008f,	# CONTROL
+	0x0020: 0x0080,	# CONTROL
+	0x0021: 0x0081,	# CONTROL
+	0x0022: 0x0082,	# CONTROL
+	0x0023: 0x0083,	# CONTROL
+	0x0024: 0x0084,	# CONTROL
+	0x0025: 0x000a,	# LINE FEED
+	0x0026: 0x0017,	# END OF TRANSMISSION BLOCK
+	0x0027: 0x001b,	# ESCAPE
+	0x0028: 0x0088,	# CONTROL
+	0x0029: 0x0089,	# CONTROL
+	0x002a: 0x008a,	# CONTROL
+	0x002b: 0x008b,	# CONTROL
+	0x002c: 0x008c,	# CONTROL
+	0x002d: 0x0005,	# ENQUIRY
+	0x002e: 0x0006,	# ACKNOWLEDGE
+	0x002f: 0x0007,	# BELL
+	0x0030: 0x0090,	# CONTROL
+	0x0031: 0x0091,	# CONTROL
+	0x0032: 0x0016,	# SYNCHRONOUS IDLE
+	0x0033: 0x0093,	# CONTROL
+	0x0034: 0x0094,	# CONTROL
+	0x0035: 0x0095,	# CONTROL
+	0x0036: 0x0096,	# CONTROL
+	0x0037: 0x0004,	# END OF TRANSMISSION
+	0x0038: 0x0098,	# CONTROL
+	0x0039: 0x0099,	# CONTROL
+	0x003a: 0x009a,	# CONTROL
+	0x003b: 0x009b,	# CONTROL
+	0x003c: 0x0014,	# DEVICE CONTROL FOUR
+	0x003d: 0x0015,	# NEGATIVE ACKNOWLEDGE
+	0x003e: 0x009e,	# CONTROL
+	0x003f: 0x001a,	# SUBSTITUTE
+	0x0040: 0x0020,	# SPACE
+	0x0041: 0x00a0,	# NO-BREAK SPACE
+	0x0042: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x0043: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x0044: 0x00e0,	# LATIN SMALL LETTER A WITH GRAVE
+	0x0045: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x0046: 0x00e3,	# LATIN SMALL LETTER A WITH TILDE
+	0x0047: 0x00e5,	# LATIN SMALL LETTER A WITH RING ABOVE
+	0x0048: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x0049: 0x00f1,	# LATIN SMALL LETTER N WITH TILDE
+	0x004a: 0x00a2,	# CENT SIGN
+	0x004b: 0x002e,	# FULL STOP
+	0x004c: 0x003c,	# LESS-THAN SIGN
+	0x004d: 0x0028,	# LEFT PARENTHESIS
+	0x004e: 0x002b,	# PLUS SIGN
+	0x004f: 0x007c,	# VERTICAL LINE
+	0x0050: 0x0026,	# AMPERSAND
+	0x0051: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x0052: 0x00ea,	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+	0x0053: 0x00eb,	# LATIN SMALL LETTER E WITH DIAERESIS
+	0x0054: 0x00e8,	# LATIN SMALL LETTER E WITH GRAVE
+	0x0055: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x0056: 0x00ee,	# LATIN SMALL LETTER I WITH CIRCUMFLEX
+	0x0057: 0x00ef,	# LATIN SMALL LETTER I WITH DIAERESIS
+	0x0058: 0x00ec,	# LATIN SMALL LETTER I WITH GRAVE
+	0x0059: 0x00df,	# LATIN SMALL LETTER SHARP S (GERMAN)
+	0x005a: 0x0021,	# EXCLAMATION MARK
+	0x005b: 0x0024,	# DOLLAR SIGN
+	0x005c: 0x002a,	# ASTERISK
+	0x005d: 0x0029,	# RIGHT PARENTHESIS
+	0x005e: 0x003b,	# SEMICOLON
+	0x005f: 0x00ac,	# NOT SIGN
+	0x0060: 0x002d,	# HYPHEN-MINUS
+	0x0061: 0x002f,	# SOLIDUS
+	0x0062: 0x00c2,	# LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+	0x0063: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x0064: 0x00c0,	# LATIN CAPITAL LETTER A WITH GRAVE
+	0x0065: 0x00c1,	# LATIN CAPITAL LETTER A WITH ACUTE
+	0x0066: 0x00c3,	# LATIN CAPITAL LETTER A WITH TILDE
+	0x0067: 0x00c5,	# LATIN CAPITAL LETTER A WITH RING ABOVE
+	0x0068: 0x00c7,	# LATIN CAPITAL LETTER C WITH CEDILLA
+	0x0069: 0x00d1,	# LATIN CAPITAL LETTER N WITH TILDE
+	0x006a: 0x00a6,	# BROKEN BAR
+	0x006b: 0x002c,	# COMMA
+	0x006c: 0x0025,	# PERCENT SIGN
+	0x006d: 0x005f,	# LOW LINE
+	0x006e: 0x003e,	# GREATER-THAN SIGN
+	0x006f: 0x003f,	# QUESTION MARK
+	0x0070: 0x00f8,	# LATIN SMALL LETTER O WITH STROKE
+	0x0071: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0072: 0x00ca,	# LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+	0x0073: 0x00cb,	# LATIN CAPITAL LETTER E WITH DIAERESIS
+	0x0074: 0x00c8,	# LATIN CAPITAL LETTER E WITH GRAVE
+	0x0075: 0x00cd,	# LATIN CAPITAL LETTER I WITH ACUTE
+	0x0076: 0x00ce,	# LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+	0x0077: 0x00cf,	# LATIN CAPITAL LETTER I WITH DIAERESIS
+	0x0078: 0x00cc,	# LATIN CAPITAL LETTER I WITH GRAVE
+	0x0079: 0x0060,	# GRAVE ACCENT
+	0x007a: 0x003a,	# COLON
+	0x007b: 0x0023,	# NUMBER SIGN
+	0x007c: 0x0040,	# COMMERCIAL AT
+	0x007d: 0x0027,	# APOSTROPHE
+	0x007e: 0x003d,	# EQUALS SIGN
+	0x007f: 0x0022,	# QUOTATION MARK
+	0x0080: 0x00d8,	# LATIN CAPITAL LETTER O WITH STROKE
+	0x0081: 0x0061,	# LATIN SMALL LETTER A
+	0x0082: 0x0062,	# LATIN SMALL LETTER B
+	0x0083: 0x0063,	# LATIN SMALL LETTER C
+	0x0084: 0x0064,	# LATIN SMALL LETTER D
+	0x0085: 0x0065,	# LATIN SMALL LETTER E
+	0x0086: 0x0066,	# LATIN SMALL LETTER F
+	0x0087: 0x0067,	# LATIN SMALL LETTER G
+	0x0088: 0x0068,	# LATIN SMALL LETTER H
+	0x0089: 0x0069,	# LATIN SMALL LETTER I
+	0x008a: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x008b: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x008c: 0x00f0,	# LATIN SMALL LETTER ETH (ICELANDIC)
+	0x008d: 0x00fd,	# LATIN SMALL LETTER Y WITH ACUTE
+	0x008e: 0x00fe,	# LATIN SMALL LETTER THORN (ICELANDIC)
+	0x008f: 0x00b1,	# PLUS-MINUS SIGN
+	0x0090: 0x00b0,	# DEGREE SIGN
+	0x0091: 0x006a,	# LATIN SMALL LETTER J
+	0x0092: 0x006b,	# LATIN SMALL LETTER K
+	0x0093: 0x006c,	# LATIN SMALL LETTER L
+	0x0094: 0x006d,	# LATIN SMALL LETTER M
+	0x0095: 0x006e,	# LATIN SMALL LETTER N
+	0x0096: 0x006f,	# LATIN SMALL LETTER O
+	0x0097: 0x0070,	# LATIN SMALL LETTER P
+	0x0098: 0x0071,	# LATIN SMALL LETTER Q
+	0x0099: 0x0072,	# LATIN SMALL LETTER R
+	0x009a: 0x00aa,	# FEMININE ORDINAL INDICATOR
+	0x009b: 0x00ba,	# MASCULINE ORDINAL INDICATOR
+	0x009c: 0x00e6,	# LATIN SMALL LIGATURE AE
+	0x009d: 0x00b8,	# CEDILLA
+	0x009e: 0x00c6,	# LATIN CAPITAL LIGATURE AE
+	0x009f: 0x00a4,	# CURRENCY SIGN
+	0x00a0: 0x00b5,	# MICRO SIGN
+	0x00a1: 0x007e,	# TILDE
+	0x00a2: 0x0073,	# LATIN SMALL LETTER S
+	0x00a3: 0x0074,	# LATIN SMALL LETTER T
+	0x00a4: 0x0075,	# LATIN SMALL LETTER U
+	0x00a5: 0x0076,	# LATIN SMALL LETTER V
+	0x00a6: 0x0077,	# LATIN SMALL LETTER W
+	0x00a7: 0x0078,	# LATIN SMALL LETTER X
+	0x00a8: 0x0079,	# LATIN SMALL LETTER Y
+	0x00a9: 0x007a,	# LATIN SMALL LETTER Z
+	0x00aa: 0x00a1,	# INVERTED EXCLAMATION MARK
+	0x00ab: 0x00bf,	# INVERTED QUESTION MARK
+	0x00ac: 0x00d0,	# LATIN CAPITAL LETTER ETH (ICELANDIC)
+	0x00ad: 0x00dd,	# LATIN CAPITAL LETTER Y WITH ACUTE
+	0x00ae: 0x00de,	# LATIN CAPITAL LETTER THORN (ICELANDIC)
+	0x00af: 0x00ae,	# REGISTERED SIGN
+	0x00b0: 0x005e,	# CIRCUMFLEX ACCENT
+	0x00b1: 0x00a3,	# POUND SIGN
+	0x00b2: 0x00a5,	# YEN SIGN
+	0x00b3: 0x00b7,	# MIDDLE DOT
+	0x00b4: 0x00a9,	# COPYRIGHT SIGN
+	0x00b5: 0x00a7,	# SECTION SIGN
+	0x00b7: 0x00bc,	# VULGAR FRACTION ONE QUARTER
+	0x00b8: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00b9: 0x00be,	# VULGAR FRACTION THREE QUARTERS
+	0x00ba: 0x005b,	# LEFT SQUARE BRACKET
+	0x00bb: 0x005d,	# RIGHT SQUARE BRACKET
+	0x00bc: 0x00af,	# MACRON
+	0x00bd: 0x00a8,	# DIAERESIS
+	0x00be: 0x00b4,	# ACUTE ACCENT
+	0x00bf: 0x00d7,	# MULTIPLICATION SIGN
+	0x00c0: 0x007b,	# LEFT CURLY BRACKET
+	0x00c1: 0x0041,	# LATIN CAPITAL LETTER A
+	0x00c2: 0x0042,	# LATIN CAPITAL LETTER B
+	0x00c3: 0x0043,	# LATIN CAPITAL LETTER C
+	0x00c4: 0x0044,	# LATIN CAPITAL LETTER D
+	0x00c5: 0x0045,	# LATIN CAPITAL LETTER E
+	0x00c6: 0x0046,	# LATIN CAPITAL LETTER F
+	0x00c7: 0x0047,	# LATIN CAPITAL LETTER G
+	0x00c8: 0x0048,	# LATIN CAPITAL LETTER H
+	0x00c9: 0x0049,	# LATIN CAPITAL LETTER I
+	0x00ca: 0x00ad,	# SOFT HYPHEN
+	0x00cb: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x00cc: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x00cd: 0x00f2,	# LATIN SMALL LETTER O WITH GRAVE
+	0x00ce: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x00cf: 0x00f5,	# LATIN SMALL LETTER O WITH TILDE
+	0x00d0: 0x007d,	# RIGHT CURLY BRACKET
+	0x00d1: 0x004a,	# LATIN CAPITAL LETTER J
+	0x00d2: 0x004b,	# LATIN CAPITAL LETTER K
+	0x00d3: 0x004c,	# LATIN CAPITAL LETTER L
+	0x00d4: 0x004d,	# LATIN CAPITAL LETTER M
+	0x00d5: 0x004e,	# LATIN CAPITAL LETTER N
+	0x00d6: 0x004f,	# LATIN CAPITAL LETTER O
+	0x00d7: 0x0050,	# LATIN CAPITAL LETTER P
+	0x00d8: 0x0051,	# LATIN CAPITAL LETTER Q
+	0x00d9: 0x0052,	# LATIN CAPITAL LETTER R
+	0x00da: 0x00b9,	# SUPERSCRIPT ONE
+	0x00db: 0x00fb,	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+	0x00dc: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x00dd: 0x00f9,	# LATIN SMALL LETTER U WITH GRAVE
+	0x00de: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x00df: 0x00ff,	# LATIN SMALL LETTER Y WITH DIAERESIS
+	0x00e0: 0x005c,	# REVERSE SOLIDUS
+	0x00e1: 0x00f7,	# DIVISION SIGN
+	0x00e2: 0x0053,	# LATIN CAPITAL LETTER S
+	0x00e3: 0x0054,	# LATIN CAPITAL LETTER T
+	0x00e4: 0x0055,	# LATIN CAPITAL LETTER U
+	0x00e5: 0x0056,	# LATIN CAPITAL LETTER V
+	0x00e6: 0x0057,	# LATIN CAPITAL LETTER W
+	0x00e7: 0x0058,	# LATIN CAPITAL LETTER X
+	0x00e8: 0x0059,	# LATIN CAPITAL LETTER Y
+	0x00e9: 0x005a,	# LATIN CAPITAL LETTER Z
+	0x00ea: 0x00b2,	# SUPERSCRIPT TWO
+	0x00eb: 0x00d4,	# LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+	0x00ec: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x00ed: 0x00d2,	# LATIN CAPITAL LETTER O WITH GRAVE
+	0x00ee: 0x00d3,	# LATIN CAPITAL LETTER O WITH ACUTE
+	0x00ef: 0x00d5,	# LATIN CAPITAL LETTER O WITH TILDE
+	0x00f0: 0x0030,	# DIGIT ZERO
+	0x00f1: 0x0031,	# DIGIT ONE
+	0x00f2: 0x0032,	# DIGIT TWO
+	0x00f3: 0x0033,	# DIGIT THREE
+	0x00f4: 0x0034,	# DIGIT FOUR
+	0x00f5: 0x0035,	# DIGIT FIVE
+	0x00f6: 0x0036,	# DIGIT SIX
+	0x00f7: 0x0037,	# DIGIT SEVEN
+	0x00f8: 0x0038,	# DIGIT EIGHT
+	0x00f9: 0x0039,	# DIGIT NINE
+	0x00fa: 0x00b3,	# SUPERSCRIPT THREE
+	0x00fb: 0x00db,	# LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+	0x00fc: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x00fd: 0x00d9,	# LATIN CAPITAL LETTER U WITH GRAVE
+	0x00fe: 0x00da,	# LATIN CAPITAL LETTER U WITH ACUTE
+	0x00ff: 0x009f,	# CONTROL
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp1006.py b/Lib/encodings/cp1006.py
new file mode 100644
index 0000000..991feed
--- /dev/null
+++ b/Lib/encodings/cp1006.py
@@ -0,0 +1,140 @@
+""" Python Character Mapping Codec generated from 'CP1006.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x00a1: 0x06f0,	# 	EXTENDED ARABIC-INDIC DIGIT ZERO
+	0x00a2: 0x06f1,	# 	EXTENDED ARABIC-INDIC DIGIT ONE
+	0x00a3: 0x06f2,	# 	EXTENDED ARABIC-INDIC DIGIT TWO
+	0x00a4: 0x06f3,	# 	EXTENDED ARABIC-INDIC DIGIT THREE
+	0x00a5: 0x06f4,	# 	EXTENDED ARABIC-INDIC DIGIT FOUR
+	0x00a6: 0x06f5,	# 	EXTENDED ARABIC-INDIC DIGIT FIVE
+	0x00a7: 0x06f6,	# 	EXTENDED ARABIC-INDIC DIGIT SIX
+	0x00a8: 0x06f7,	# 	EXTENDED ARABIC-INDIC DIGIT SEVEN
+	0x00a9: 0x06f8,	# 	EXTENDED ARABIC-INDIC DIGIT EIGHT
+	0x00aa: 0x06f9,	# 	EXTENDED ARABIC-INDIC DIGIT NINE
+	0x00ab: 0x060c,	# 	ARABIC COMMA
+	0x00ac: 0x061b,	# 	ARABIC SEMICOLON
+	0x00ae: 0x061f,	# 	ARABIC QUESTION MARK
+	0x00af: 0xfe81,	# 	ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+	0x00b0: 0xfe8d,	# 	ARABIC LETTER ALEF ISOLATED FORM
+	0x00b1: 0xfe8e,	# 	ARABIC LETTER ALEF FINAL FORM
+	0x00b2: 0xfe8e,	# 	ARABIC LETTER ALEF FINAL FORM
+	0x00b3: 0xfe8f,	# 	ARABIC LETTER BEH ISOLATED FORM
+	0x00b4: 0xfe91,	# 	ARABIC LETTER BEH INITIAL FORM
+	0x00b5: 0xfb56,	# 	ARABIC LETTER PEH ISOLATED FORM
+	0x00b6: 0xfb58,	# 	ARABIC LETTER PEH INITIAL FORM
+	0x00b7: 0xfe93,	# 	ARABIC LETTER TEH MARBUTA ISOLATED FORM
+	0x00b8: 0xfe95,	# 	ARABIC LETTER TEH ISOLATED FORM
+	0x00b9: 0xfe97,	# 	ARABIC LETTER TEH INITIAL FORM
+	0x00ba: 0xfb66,	# 	ARABIC LETTER TTEH ISOLATED FORM
+	0x00bb: 0xfb68,	# 	ARABIC LETTER TTEH INITIAL FORM
+	0x00bc: 0xfe99,	# 	ARABIC LETTER THEH ISOLATED FORM
+	0x00bd: 0xfe9b,	# 	ARABIC LETTER THEH INITIAL FORM
+	0x00be: 0xfe9d,	# 	ARABIC LETTER JEEM ISOLATED FORM
+	0x00bf: 0xfe9f,	# 	ARABIC LETTER JEEM INITIAL FORM
+	0x00c0: 0xfb7a,	# 	ARABIC LETTER TCHEH ISOLATED FORM
+	0x00c1: 0xfb7c,	# 	ARABIC LETTER TCHEH INITIAL FORM
+	0x00c2: 0xfea1,	# 	ARABIC LETTER HAH ISOLATED FORM
+	0x00c3: 0xfea3,	# 	ARABIC LETTER HAH INITIAL FORM
+	0x00c4: 0xfea5,	# 	ARABIC LETTER KHAH ISOLATED FORM
+	0x00c5: 0xfea7,	# 	ARABIC LETTER KHAH INITIAL FORM
+	0x00c6: 0xfea9,	# 	ARABIC LETTER DAL ISOLATED FORM
+	0x00c7: 0xfb84,	# 	ARABIC LETTER DAHAL ISOLATED FORMN
+	0x00c8: 0xfeab,	# 	ARABIC LETTER THAL ISOLATED FORM
+	0x00c9: 0xfead,	# 	ARABIC LETTER REH ISOLATED FORM
+	0x00ca: 0xfb8c,	# 	ARABIC LETTER RREH ISOLATED FORM
+	0x00cb: 0xfeaf,	# 	ARABIC LETTER ZAIN ISOLATED FORM
+	0x00cc: 0xfb8a,	# 	ARABIC LETTER JEH ISOLATED FORM
+	0x00cd: 0xfeb1,	# 	ARABIC LETTER SEEN ISOLATED FORM
+	0x00ce: 0xfeb3,	# 	ARABIC LETTER SEEN INITIAL FORM
+	0x00cf: 0xfeb5,	# 	ARABIC LETTER SHEEN ISOLATED FORM
+	0x00d0: 0xfeb7,	# 	ARABIC LETTER SHEEN INITIAL FORM
+	0x00d1: 0xfeb9,	# 	ARABIC LETTER SAD ISOLATED FORM
+	0x00d2: 0xfebb,	# 	ARABIC LETTER SAD INITIAL FORM
+	0x00d3: 0xfebd,	# 	ARABIC LETTER DAD ISOLATED FORM
+	0x00d4: 0xfebf,	# 	ARABIC LETTER DAD INITIAL FORM
+	0x00d5: 0xfec1,	# 	ARABIC LETTER TAH ISOLATED FORM
+	0x00d6: 0xfec5,	# 	ARABIC LETTER ZAH ISOLATED FORM
+	0x00d7: 0xfec9,	# 	ARABIC LETTER AIN ISOLATED FORM
+	0x00d8: 0xfeca,	# 	ARABIC LETTER AIN FINAL FORM
+	0x00d9: 0xfecb,	# 	ARABIC LETTER AIN INITIAL FORM
+	0x00da: 0xfecc,	# 	ARABIC LETTER AIN MEDIAL FORM
+	0x00db: 0xfecd,	# 	ARABIC LETTER GHAIN ISOLATED FORM
+	0x00dc: 0xfece,	# 	ARABIC LETTER GHAIN FINAL FORM
+	0x00dd: 0xfecf,	# 	ARABIC LETTER GHAIN INITIAL FORM
+	0x00de: 0xfed0,	# 	ARABIC LETTER GHAIN MEDIAL FORM
+	0x00df: 0xfed1,	# 	ARABIC LETTER FEH ISOLATED FORM
+	0x00e0: 0xfed3,	# 	ARABIC LETTER FEH INITIAL FORM
+	0x00e1: 0xfed5,	# 	ARABIC LETTER QAF ISOLATED FORM
+	0x00e2: 0xfed7,	# 	ARABIC LETTER QAF INITIAL FORM
+	0x00e3: 0xfed9,	# 	ARABIC LETTER KAF ISOLATED FORM
+	0x00e4: 0xfedb,	# 	ARABIC LETTER KAF INITIAL FORM
+	0x00e5: 0xfb92,	# 	ARABIC LETTER GAF ISOLATED FORM
+	0x00e6: 0xfb94,	# 	ARABIC LETTER GAF INITIAL FORM
+	0x00e7: 0xfedd,	# 	ARABIC LETTER LAM ISOLATED FORM
+	0x00e8: 0xfedf,	# 	ARABIC LETTER LAM INITIAL FORM
+	0x00e9: 0xfee0,	# 	ARABIC LETTER LAM MEDIAL FORM
+	0x00ea: 0xfee1,	# 	ARABIC LETTER MEEM ISOLATED FORM
+	0x00eb: 0xfee3,	# 	ARABIC LETTER MEEM INITIAL FORM
+	0x00ec: 0xfb9e,	# 	ARABIC LETTER NOON GHUNNA ISOLATED FORM
+	0x00ed: 0xfee5,	# 	ARABIC LETTER NOON ISOLATED FORM
+	0x00ee: 0xfee7,	# 	ARABIC LETTER NOON INITIAL FORM
+	0x00ef: 0xfe85,	# 	ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+	0x00f0: 0xfeed,	# 	ARABIC LETTER WAW ISOLATED FORM
+	0x00f1: 0xfba6,	# 	ARABIC LETTER HEH GOAL ISOLATED FORM
+	0x00f2: 0xfba8,	# 	ARABIC LETTER HEH GOAL INITIAL FORM
+	0x00f3: 0xfba9,	# 	ARABIC LETTER HEH GOAL MEDIAL FORM
+	0x00f4: 0xfbaa,	# 	ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
+	0x00f5: 0xfe80,	# 	ARABIC LETTER HAMZA ISOLATED FORM
+	0x00f6: 0xfe89,	# 	ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
+	0x00f7: 0xfe8a,	# 	ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
+	0x00f8: 0xfe8b,	# 	ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+	0x00f9: 0xfef1,	# 	ARABIC LETTER YEH ISOLATED FORM
+	0x00fa: 0xfef2,	# 	ARABIC LETTER YEH FINAL FORM
+	0x00fb: 0xfef3,	# 	ARABIC LETTER YEH INITIAL FORM
+	0x00fc: 0xfbb0,	# 	ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+	0x00fd: 0xfbae,	# 	ARABIC LETTER YEH BARREE ISOLATED FORM
+	0x00fe: 0xfe7c,	# 	ARABIC SHADDA ISOLATED FORM
+	0x00ff: 0xfe7d,	# 	ARABIC SHADDA MEDIAL FORM
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp1026.py b/Lib/encodings/cp1026.py
new file mode 100644
index 0000000..ae8086f
--- /dev/null
+++ b/Lib/encodings/cp1026.py
@@ -0,0 +1,282 @@
+""" Python Character Mapping Codec generated from 'CP1026.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0004: 0x009c,	# CONTROL
+	0x0005: 0x0009,	# HORIZONTAL TABULATION
+	0x0006: 0x0086,	# CONTROL
+	0x0007: 0x007f,	# DELETE
+	0x0008: 0x0097,	# CONTROL
+	0x0009: 0x008d,	# CONTROL
+	0x000a: 0x008e,	# CONTROL
+	0x0014: 0x009d,	# CONTROL
+	0x0015: 0x0085,	# CONTROL
+	0x0016: 0x0008,	# BACKSPACE
+	0x0017: 0x0087,	# CONTROL
+	0x001a: 0x0092,	# CONTROL
+	0x001b: 0x008f,	# CONTROL
+	0x0020: 0x0080,	# CONTROL
+	0x0021: 0x0081,	# CONTROL
+	0x0022: 0x0082,	# CONTROL
+	0x0023: 0x0083,	# CONTROL
+	0x0024: 0x0084,	# CONTROL
+	0x0025: 0x000a,	# LINE FEED
+	0x0026: 0x0017,	# END OF TRANSMISSION BLOCK
+	0x0027: 0x001b,	# ESCAPE
+	0x0028: 0x0088,	# CONTROL
+	0x0029: 0x0089,	# CONTROL
+	0x002a: 0x008a,	# CONTROL
+	0x002b: 0x008b,	# CONTROL
+	0x002c: 0x008c,	# CONTROL
+	0x002d: 0x0005,	# ENQUIRY
+	0x002e: 0x0006,	# ACKNOWLEDGE
+	0x002f: 0x0007,	# BELL
+	0x0030: 0x0090,	# CONTROL
+	0x0031: 0x0091,	# CONTROL
+	0x0032: 0x0016,	# SYNCHRONOUS IDLE
+	0x0033: 0x0093,	# CONTROL
+	0x0034: 0x0094,	# CONTROL
+	0x0035: 0x0095,	# CONTROL
+	0x0036: 0x0096,	# CONTROL
+	0x0037: 0x0004,	# END OF TRANSMISSION
+	0x0038: 0x0098,	# CONTROL
+	0x0039: 0x0099,	# CONTROL
+	0x003a: 0x009a,	# CONTROL
+	0x003b: 0x009b,	# CONTROL
+	0x003c: 0x0014,	# DEVICE CONTROL FOUR
+	0x003d: 0x0015,	# NEGATIVE ACKNOWLEDGE
+	0x003e: 0x009e,	# CONTROL
+	0x003f: 0x001a,	# SUBSTITUTE
+	0x0040: 0x0020,	# SPACE
+	0x0041: 0x00a0,	# NO-BREAK SPACE
+	0x0042: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x0043: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x0044: 0x00e0,	# LATIN SMALL LETTER A WITH GRAVE
+	0x0045: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x0046: 0x00e3,	# LATIN SMALL LETTER A WITH TILDE
+	0x0047: 0x00e5,	# LATIN SMALL LETTER A WITH RING ABOVE
+	0x0048: 0x007b,	# LEFT CURLY BRACKET
+	0x0049: 0x00f1,	# LATIN SMALL LETTER N WITH TILDE
+	0x004a: 0x00c7,	# LATIN CAPITAL LETTER C WITH CEDILLA
+	0x004b: 0x002e,	# FULL STOP
+	0x004c: 0x003c,	# LESS-THAN SIGN
+	0x004d: 0x0028,	# LEFT PARENTHESIS
+	0x004e: 0x002b,	# PLUS SIGN
+	0x004f: 0x0021,	# EXCLAMATION MARK
+	0x0050: 0x0026,	# AMPERSAND
+	0x0051: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x0052: 0x00ea,	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+	0x0053: 0x00eb,	# LATIN SMALL LETTER E WITH DIAERESIS
+	0x0054: 0x00e8,	# LATIN SMALL LETTER E WITH GRAVE
+	0x0055: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x0056: 0x00ee,	# LATIN SMALL LETTER I WITH CIRCUMFLEX
+	0x0057: 0x00ef,	# LATIN SMALL LETTER I WITH DIAERESIS
+	0x0058: 0x00ec,	# LATIN SMALL LETTER I WITH GRAVE
+	0x0059: 0x00df,	# LATIN SMALL LETTER SHARP S (GERMAN)
+	0x005a: 0x011e,	# LATIN CAPITAL LETTER G WITH BREVE
+	0x005b: 0x0130,	# LATIN CAPITAL LETTER I WITH DOT ABOVE
+	0x005c: 0x002a,	# ASTERISK
+	0x005d: 0x0029,	# RIGHT PARENTHESIS
+	0x005e: 0x003b,	# SEMICOLON
+	0x005f: 0x005e,	# CIRCUMFLEX ACCENT
+	0x0060: 0x002d,	# HYPHEN-MINUS
+	0x0061: 0x002f,	# SOLIDUS
+	0x0062: 0x00c2,	# LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+	0x0063: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x0064: 0x00c0,	# LATIN CAPITAL LETTER A WITH GRAVE
+	0x0065: 0x00c1,	# LATIN CAPITAL LETTER A WITH ACUTE
+	0x0066: 0x00c3,	# LATIN CAPITAL LETTER A WITH TILDE
+	0x0067: 0x00c5,	# LATIN CAPITAL LETTER A WITH RING ABOVE
+	0x0068: 0x005b,	# LEFT SQUARE BRACKET
+	0x0069: 0x00d1,	# LATIN CAPITAL LETTER N WITH TILDE
+	0x006a: 0x015f,	# LATIN SMALL LETTER S WITH CEDILLA
+	0x006b: 0x002c,	# COMMA
+	0x006c: 0x0025,	# PERCENT SIGN
+	0x006d: 0x005f,	# LOW LINE
+	0x006e: 0x003e,	# GREATER-THAN SIGN
+	0x006f: 0x003f,	# QUESTION MARK
+	0x0070: 0x00f8,	# LATIN SMALL LETTER O WITH STROKE
+	0x0071: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0072: 0x00ca,	# LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+	0x0073: 0x00cb,	# LATIN CAPITAL LETTER E WITH DIAERESIS
+	0x0074: 0x00c8,	# LATIN CAPITAL LETTER E WITH GRAVE
+	0x0075: 0x00cd,	# LATIN CAPITAL LETTER I WITH ACUTE
+	0x0076: 0x00ce,	# LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+	0x0077: 0x00cf,	# LATIN CAPITAL LETTER I WITH DIAERESIS
+	0x0078: 0x00cc,	# LATIN CAPITAL LETTER I WITH GRAVE
+	0x0079: 0x0131,	# LATIN SMALL LETTER DOTLESS I
+	0x007a: 0x003a,	# COLON
+	0x007b: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x007c: 0x015e,	# LATIN CAPITAL LETTER S WITH CEDILLA
+	0x007d: 0x0027,	# APOSTROPHE
+	0x007e: 0x003d,	# EQUALS SIGN
+	0x007f: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x0080: 0x00d8,	# LATIN CAPITAL LETTER O WITH STROKE
+	0x0081: 0x0061,	# LATIN SMALL LETTER A
+	0x0082: 0x0062,	# LATIN SMALL LETTER B
+	0x0083: 0x0063,	# LATIN SMALL LETTER C
+	0x0084: 0x0064,	# LATIN SMALL LETTER D
+	0x0085: 0x0065,	# LATIN SMALL LETTER E
+	0x0086: 0x0066,	# LATIN SMALL LETTER F
+	0x0087: 0x0067,	# LATIN SMALL LETTER G
+	0x0088: 0x0068,	# LATIN SMALL LETTER H
+	0x0089: 0x0069,	# LATIN SMALL LETTER I
+	0x008a: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x008b: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x008c: 0x007d,	# RIGHT CURLY BRACKET
+	0x008d: 0x0060,	# GRAVE ACCENT
+	0x008e: 0x00a6,	# BROKEN BAR
+	0x008f: 0x00b1,	# PLUS-MINUS SIGN
+	0x0090: 0x00b0,	# DEGREE SIGN
+	0x0091: 0x006a,	# LATIN SMALL LETTER J
+	0x0092: 0x006b,	# LATIN SMALL LETTER K
+	0x0093: 0x006c,	# LATIN SMALL LETTER L
+	0x0094: 0x006d,	# LATIN SMALL LETTER M
+	0x0095: 0x006e,	# LATIN SMALL LETTER N
+	0x0096: 0x006f,	# LATIN SMALL LETTER O
+	0x0097: 0x0070,	# LATIN SMALL LETTER P
+	0x0098: 0x0071,	# LATIN SMALL LETTER Q
+	0x0099: 0x0072,	# LATIN SMALL LETTER R
+	0x009a: 0x00aa,	# FEMININE ORDINAL INDICATOR
+	0x009b: 0x00ba,	# MASCULINE ORDINAL INDICATOR
+	0x009c: 0x00e6,	# LATIN SMALL LIGATURE AE
+	0x009d: 0x00b8,	# CEDILLA
+	0x009e: 0x00c6,	# LATIN CAPITAL LIGATURE AE
+	0x009f: 0x00a4,	# CURRENCY SIGN
+	0x00a0: 0x00b5,	# MICRO SIGN
+	0x00a1: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x00a2: 0x0073,	# LATIN SMALL LETTER S
+	0x00a3: 0x0074,	# LATIN SMALL LETTER T
+	0x00a4: 0x0075,	# LATIN SMALL LETTER U
+	0x00a5: 0x0076,	# LATIN SMALL LETTER V
+	0x00a6: 0x0077,	# LATIN SMALL LETTER W
+	0x00a7: 0x0078,	# LATIN SMALL LETTER X
+	0x00a8: 0x0079,	# LATIN SMALL LETTER Y
+	0x00a9: 0x007a,	# LATIN SMALL LETTER Z
+	0x00aa: 0x00a1,	# INVERTED EXCLAMATION MARK
+	0x00ab: 0x00bf,	# INVERTED QUESTION MARK
+	0x00ac: 0x005d,	# RIGHT SQUARE BRACKET
+	0x00ad: 0x0024,	# DOLLAR SIGN
+	0x00ae: 0x0040,	# COMMERCIAL AT
+	0x00af: 0x00ae,	# REGISTERED SIGN
+	0x00b0: 0x00a2,	# CENT SIGN
+	0x00b1: 0x00a3,	# POUND SIGN
+	0x00b2: 0x00a5,	# YEN SIGN
+	0x00b3: 0x00b7,	# MIDDLE DOT
+	0x00b4: 0x00a9,	# COPYRIGHT SIGN
+	0x00b5: 0x00a7,	# SECTION SIGN
+	0x00b7: 0x00bc,	# VULGAR FRACTION ONE QUARTER
+	0x00b8: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00b9: 0x00be,	# VULGAR FRACTION THREE QUARTERS
+	0x00ba: 0x00ac,	# NOT SIGN
+	0x00bb: 0x007c,	# VERTICAL LINE
+	0x00bc: 0x00af,	# MACRON
+	0x00bd: 0x00a8,	# DIAERESIS
+	0x00be: 0x00b4,	# ACUTE ACCENT
+	0x00bf: 0x00d7,	# MULTIPLICATION SIGN
+	0x00c0: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x00c1: 0x0041,	# LATIN CAPITAL LETTER A
+	0x00c2: 0x0042,	# LATIN CAPITAL LETTER B
+	0x00c3: 0x0043,	# LATIN CAPITAL LETTER C
+	0x00c4: 0x0044,	# LATIN CAPITAL LETTER D
+	0x00c5: 0x0045,	# LATIN CAPITAL LETTER E
+	0x00c6: 0x0046,	# LATIN CAPITAL LETTER F
+	0x00c7: 0x0047,	# LATIN CAPITAL LETTER G
+	0x00c8: 0x0048,	# LATIN CAPITAL LETTER H
+	0x00c9: 0x0049,	# LATIN CAPITAL LETTER I
+	0x00ca: 0x00ad,	# SOFT HYPHEN
+	0x00cb: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x00cc: 0x007e,	# TILDE
+	0x00cd: 0x00f2,	# LATIN SMALL LETTER O WITH GRAVE
+	0x00ce: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x00cf: 0x00f5,	# LATIN SMALL LETTER O WITH TILDE
+	0x00d0: 0x011f,	# LATIN SMALL LETTER G WITH BREVE
+	0x00d1: 0x004a,	# LATIN CAPITAL LETTER J
+	0x00d2: 0x004b,	# LATIN CAPITAL LETTER K
+	0x00d3: 0x004c,	# LATIN CAPITAL LETTER L
+	0x00d4: 0x004d,	# LATIN CAPITAL LETTER M
+	0x00d5: 0x004e,	# LATIN CAPITAL LETTER N
+	0x00d6: 0x004f,	# LATIN CAPITAL LETTER O
+	0x00d7: 0x0050,	# LATIN CAPITAL LETTER P
+	0x00d8: 0x0051,	# LATIN CAPITAL LETTER Q
+	0x00d9: 0x0052,	# LATIN CAPITAL LETTER R
+	0x00da: 0x00b9,	# SUPERSCRIPT ONE
+	0x00db: 0x00fb,	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+	0x00dc: 0x005c,	# REVERSE SOLIDUS
+	0x00dd: 0x00f9,	# LATIN SMALL LETTER U WITH GRAVE
+	0x00de: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x00df: 0x00ff,	# LATIN SMALL LETTER Y WITH DIAERESIS
+	0x00e0: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x00e1: 0x00f7,	# DIVISION SIGN
+	0x00e2: 0x0053,	# LATIN CAPITAL LETTER S
+	0x00e3: 0x0054,	# LATIN CAPITAL LETTER T
+	0x00e4: 0x0055,	# LATIN CAPITAL LETTER U
+	0x00e5: 0x0056,	# LATIN CAPITAL LETTER V
+	0x00e6: 0x0057,	# LATIN CAPITAL LETTER W
+	0x00e7: 0x0058,	# LATIN CAPITAL LETTER X
+	0x00e8: 0x0059,	# LATIN CAPITAL LETTER Y
+	0x00e9: 0x005a,	# LATIN CAPITAL LETTER Z
+	0x00ea: 0x00b2,	# SUPERSCRIPT TWO
+	0x00eb: 0x00d4,	# LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+	0x00ec: 0x0023,	# NUMBER SIGN
+	0x00ed: 0x00d2,	# LATIN CAPITAL LETTER O WITH GRAVE
+	0x00ee: 0x00d3,	# LATIN CAPITAL LETTER O WITH ACUTE
+	0x00ef: 0x00d5,	# LATIN CAPITAL LETTER O WITH TILDE
+	0x00f0: 0x0030,	# DIGIT ZERO
+	0x00f1: 0x0031,	# DIGIT ONE
+	0x00f2: 0x0032,	# DIGIT TWO
+	0x00f3: 0x0033,	# DIGIT THREE
+	0x00f4: 0x0034,	# DIGIT FOUR
+	0x00f5: 0x0035,	# DIGIT FIVE
+	0x00f6: 0x0036,	# DIGIT SIX
+	0x00f7: 0x0037,	# DIGIT SEVEN
+	0x00f8: 0x0038,	# DIGIT EIGHT
+	0x00f9: 0x0039,	# DIGIT NINE
+	0x00fa: 0x00b3,	# SUPERSCRIPT THREE
+	0x00fb: 0x00db,	# LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+	0x00fc: 0x0022,	# QUOTATION MARK
+	0x00fd: 0x00d9,	# LATIN CAPITAL LETTER U WITH GRAVE
+	0x00fe: 0x00da,	# LATIN CAPITAL LETTER U WITH ACUTE
+	0x00ff: 0x009f,	# CONTROL
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp1250.py b/Lib/encodings/cp1250.py
new file mode 100644
index 0000000..d1276c4
--- /dev/null
+++ b/Lib/encodings/cp1250.py
@@ -0,0 +1,125 @@
+""" Python Character Mapping Codec generated from 'CP1250.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x20ac,	# EURO SIGN
+	0x0081: None,	# UNDEFINED
+	0x0082: 0x201a,	# SINGLE LOW-9 QUOTATION MARK
+	0x0083: None,	# UNDEFINED
+	0x0084: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x0085: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x0086: 0x2020,	# DAGGER
+	0x0087: 0x2021,	# DOUBLE DAGGER
+	0x0088: None,	# UNDEFINED
+	0x0089: 0x2030,	# PER MILLE SIGN
+	0x008a: 0x0160,	# LATIN CAPITAL LETTER S WITH CARON
+	0x008b: 0x2039,	# SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+	0x008c: 0x015a,	# LATIN CAPITAL LETTER S WITH ACUTE
+	0x008d: 0x0164,	# LATIN CAPITAL LETTER T WITH CARON
+	0x008e: 0x017d,	# LATIN CAPITAL LETTER Z WITH CARON
+	0x008f: 0x0179,	# LATIN CAPITAL LETTER Z WITH ACUTE
+	0x0090: None,	# UNDEFINED
+	0x0091: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x0092: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x0093: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x0094: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x0095: 0x2022,	# BULLET
+	0x0096: 0x2013,	# EN DASH
+	0x0097: 0x2014,	# EM DASH
+	0x0098: None,	# UNDEFINED
+	0x0099: 0x2122,	# TRADE MARK SIGN
+	0x009a: 0x0161,	# LATIN SMALL LETTER S WITH CARON
+	0x009b: 0x203a,	# SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+	0x009c: 0x015b,	# LATIN SMALL LETTER S WITH ACUTE
+	0x009d: 0x0165,	# LATIN SMALL LETTER T WITH CARON
+	0x009e: 0x017e,	# LATIN SMALL LETTER Z WITH CARON
+	0x009f: 0x017a,	# LATIN SMALL LETTER Z WITH ACUTE
+	0x00a1: 0x02c7,	# CARON
+	0x00a2: 0x02d8,	# BREVE
+	0x00a3: 0x0141,	# LATIN CAPITAL LETTER L WITH STROKE
+	0x00a5: 0x0104,	# LATIN CAPITAL LETTER A WITH OGONEK
+	0x00aa: 0x015e,	# LATIN CAPITAL LETTER S WITH CEDILLA
+	0x00af: 0x017b,	# LATIN CAPITAL LETTER Z WITH DOT ABOVE
+	0x00b2: 0x02db,	# OGONEK
+	0x00b3: 0x0142,	# LATIN SMALL LETTER L WITH STROKE
+	0x00b9: 0x0105,	# LATIN SMALL LETTER A WITH OGONEK
+	0x00ba: 0x015f,	# LATIN SMALL LETTER S WITH CEDILLA
+	0x00bc: 0x013d,	# LATIN CAPITAL LETTER L WITH CARON
+	0x00bd: 0x02dd,	# DOUBLE ACUTE ACCENT
+	0x00be: 0x013e,	# LATIN SMALL LETTER L WITH CARON
+	0x00bf: 0x017c,	# LATIN SMALL LETTER Z WITH DOT ABOVE
+	0x00c0: 0x0154,	# LATIN CAPITAL LETTER R WITH ACUTE
+	0x00c3: 0x0102,	# LATIN CAPITAL LETTER A WITH BREVE
+	0x00c5: 0x0139,	# LATIN CAPITAL LETTER L WITH ACUTE
+	0x00c6: 0x0106,	# LATIN CAPITAL LETTER C WITH ACUTE
+	0x00c8: 0x010c,	# LATIN CAPITAL LETTER C WITH CARON
+	0x00ca: 0x0118,	# LATIN CAPITAL LETTER E WITH OGONEK
+	0x00cc: 0x011a,	# LATIN CAPITAL LETTER E WITH CARON
+	0x00cf: 0x010e,	# LATIN CAPITAL LETTER D WITH CARON
+	0x00d0: 0x0110,	# LATIN CAPITAL LETTER D WITH STROKE
+	0x00d1: 0x0143,	# LATIN CAPITAL LETTER N WITH ACUTE
+	0x00d2: 0x0147,	# LATIN CAPITAL LETTER N WITH CARON
+	0x00d5: 0x0150,	# LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+	0x00d8: 0x0158,	# LATIN CAPITAL LETTER R WITH CARON
+	0x00d9: 0x016e,	# LATIN CAPITAL LETTER U WITH RING ABOVE
+	0x00db: 0x0170,	# LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+	0x00de: 0x0162,	# LATIN CAPITAL LETTER T WITH CEDILLA
+	0x00e0: 0x0155,	# LATIN SMALL LETTER R WITH ACUTE
+	0x00e3: 0x0103,	# LATIN SMALL LETTER A WITH BREVE
+	0x00e5: 0x013a,	# LATIN SMALL LETTER L WITH ACUTE
+	0x00e6: 0x0107,	# LATIN SMALL LETTER C WITH ACUTE
+	0x00e8: 0x010d,	# LATIN SMALL LETTER C WITH CARON
+	0x00ea: 0x0119,	# LATIN SMALL LETTER E WITH OGONEK
+	0x00ec: 0x011b,	# LATIN SMALL LETTER E WITH CARON
+	0x00ef: 0x010f,	# LATIN SMALL LETTER D WITH CARON
+	0x00f0: 0x0111,	# LATIN SMALL LETTER D WITH STROKE
+	0x00f1: 0x0144,	# LATIN SMALL LETTER N WITH ACUTE
+	0x00f2: 0x0148,	# LATIN SMALL LETTER N WITH CARON
+	0x00f5: 0x0151,	# LATIN SMALL LETTER O WITH DOUBLE ACUTE
+	0x00f8: 0x0159,	# LATIN SMALL LETTER R WITH CARON
+	0x00f9: 0x016f,	# LATIN SMALL LETTER U WITH RING ABOVE
+	0x00fb: 0x0171,	# LATIN SMALL LETTER U WITH DOUBLE ACUTE
+	0x00fe: 0x0163,	# LATIN SMALL LETTER T WITH CEDILLA
+	0x00ff: 0x02d9,	# DOT ABOVE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp1251.py b/Lib/encodings/cp1251.py
new file mode 100644
index 0000000..42921e4
--- /dev/null
+++ b/Lib/encodings/cp1251.py
@@ -0,0 +1,159 @@
+""" Python Character Mapping Codec generated from 'CP1251.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x0402,	# CYRILLIC CAPITAL LETTER DJE
+	0x0081: 0x0403,	# CYRILLIC CAPITAL LETTER GJE
+	0x0082: 0x201a,	# SINGLE LOW-9 QUOTATION MARK
+	0x0083: 0x0453,	# CYRILLIC SMALL LETTER GJE
+	0x0084: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x0085: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x0086: 0x2020,	# DAGGER
+	0x0087: 0x2021,	# DOUBLE DAGGER
+	0x0088: 0x20ac,	# EURO SIGN
+	0x0089: 0x2030,	# PER MILLE SIGN
+	0x008a: 0x0409,	# CYRILLIC CAPITAL LETTER LJE
+	0x008b: 0x2039,	# SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+	0x008c: 0x040a,	# CYRILLIC CAPITAL LETTER NJE
+	0x008d: 0x040c,	# CYRILLIC CAPITAL LETTER KJE
+	0x008e: 0x040b,	# CYRILLIC CAPITAL LETTER TSHE
+	0x008f: 0x040f,	# CYRILLIC CAPITAL LETTER DZHE
+	0x0090: 0x0452,	# CYRILLIC SMALL LETTER DJE
+	0x0091: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x0092: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x0093: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x0094: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x0095: 0x2022,	# BULLET
+	0x0096: 0x2013,	# EN DASH
+	0x0097: 0x2014,	# EM DASH
+	0x0098: None,	# UNDEFINED
+	0x0099: 0x2122,	# TRADE MARK SIGN
+	0x009a: 0x0459,	# CYRILLIC SMALL LETTER LJE
+	0x009b: 0x203a,	# SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+	0x009c: 0x045a,	# CYRILLIC SMALL LETTER NJE
+	0x009d: 0x045c,	# CYRILLIC SMALL LETTER KJE
+	0x009e: 0x045b,	# CYRILLIC SMALL LETTER TSHE
+	0x009f: 0x045f,	# CYRILLIC SMALL LETTER DZHE
+	0x00a1: 0x040e,	# CYRILLIC CAPITAL LETTER SHORT U
+	0x00a2: 0x045e,	# CYRILLIC SMALL LETTER SHORT U
+	0x00a3: 0x0408,	# CYRILLIC CAPITAL LETTER JE
+	0x00a5: 0x0490,	# CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+	0x00a8: 0x0401,	# CYRILLIC CAPITAL LETTER IO
+	0x00aa: 0x0404,	# CYRILLIC CAPITAL LETTER UKRAINIAN IE
+	0x00af: 0x0407,	# CYRILLIC CAPITAL LETTER YI
+	0x00b2: 0x0406,	# CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+	0x00b3: 0x0456,	# CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+	0x00b4: 0x0491,	# CYRILLIC SMALL LETTER GHE WITH UPTURN
+	0x00b8: 0x0451,	# CYRILLIC SMALL LETTER IO
+	0x00b9: 0x2116,	# NUMERO SIGN
+	0x00ba: 0x0454,	# CYRILLIC SMALL LETTER UKRAINIAN IE
+	0x00bc: 0x0458,	# CYRILLIC SMALL LETTER JE
+	0x00bd: 0x0405,	# CYRILLIC CAPITAL LETTER DZE
+	0x00be: 0x0455,	# CYRILLIC SMALL LETTER DZE
+	0x00bf: 0x0457,	# CYRILLIC SMALL LETTER YI
+	0x00c0: 0x0410,	# CYRILLIC CAPITAL LETTER A
+	0x00c1: 0x0411,	# CYRILLIC CAPITAL LETTER BE
+	0x00c2: 0x0412,	# CYRILLIC CAPITAL LETTER VE
+	0x00c3: 0x0413,	# CYRILLIC CAPITAL LETTER GHE
+	0x00c4: 0x0414,	# CYRILLIC CAPITAL LETTER DE
+	0x00c5: 0x0415,	# CYRILLIC CAPITAL LETTER IE
+	0x00c6: 0x0416,	# CYRILLIC CAPITAL LETTER ZHE
+	0x00c7: 0x0417,	# CYRILLIC CAPITAL LETTER ZE
+	0x00c8: 0x0418,	# CYRILLIC CAPITAL LETTER I
+	0x00c9: 0x0419,	# CYRILLIC CAPITAL LETTER SHORT I
+	0x00ca: 0x041a,	# CYRILLIC CAPITAL LETTER KA
+	0x00cb: 0x041b,	# CYRILLIC CAPITAL LETTER EL
+	0x00cc: 0x041c,	# CYRILLIC CAPITAL LETTER EM
+	0x00cd: 0x041d,	# CYRILLIC CAPITAL LETTER EN
+	0x00ce: 0x041e,	# CYRILLIC CAPITAL LETTER O
+	0x00cf: 0x041f,	# CYRILLIC CAPITAL LETTER PE
+	0x00d0: 0x0420,	# CYRILLIC CAPITAL LETTER ER
+	0x00d1: 0x0421,	# CYRILLIC CAPITAL LETTER ES
+	0x00d2: 0x0422,	# CYRILLIC CAPITAL LETTER TE
+	0x00d3: 0x0423,	# CYRILLIC CAPITAL LETTER U
+	0x00d4: 0x0424,	# CYRILLIC CAPITAL LETTER EF
+	0x00d5: 0x0425,	# CYRILLIC CAPITAL LETTER HA
+	0x00d6: 0x0426,	# CYRILLIC CAPITAL LETTER TSE
+	0x00d7: 0x0427,	# CYRILLIC CAPITAL LETTER CHE
+	0x00d8: 0x0428,	# CYRILLIC CAPITAL LETTER SHA
+	0x00d9: 0x0429,	# CYRILLIC CAPITAL LETTER SHCHA
+	0x00da: 0x042a,	# CYRILLIC CAPITAL LETTER HARD SIGN
+	0x00db: 0x042b,	# CYRILLIC CAPITAL LETTER YERU
+	0x00dc: 0x042c,	# CYRILLIC CAPITAL LETTER SOFT SIGN
+	0x00dd: 0x042d,	# CYRILLIC CAPITAL LETTER E
+	0x00de: 0x042e,	# CYRILLIC CAPITAL LETTER YU
+	0x00df: 0x042f,	# CYRILLIC CAPITAL LETTER YA
+	0x00e0: 0x0430,	# CYRILLIC SMALL LETTER A
+	0x00e1: 0x0431,	# CYRILLIC SMALL LETTER BE
+	0x00e2: 0x0432,	# CYRILLIC SMALL LETTER VE
+	0x00e3: 0x0433,	# CYRILLIC SMALL LETTER GHE
+	0x00e4: 0x0434,	# CYRILLIC SMALL LETTER DE
+	0x00e5: 0x0435,	# CYRILLIC SMALL LETTER IE
+	0x00e6: 0x0436,	# CYRILLIC SMALL LETTER ZHE
+	0x00e7: 0x0437,	# CYRILLIC SMALL LETTER ZE
+	0x00e8: 0x0438,	# CYRILLIC SMALL LETTER I
+	0x00e9: 0x0439,	# CYRILLIC SMALL LETTER SHORT I
+	0x00ea: 0x043a,	# CYRILLIC SMALL LETTER KA
+	0x00eb: 0x043b,	# CYRILLIC SMALL LETTER EL
+	0x00ec: 0x043c,	# CYRILLIC SMALL LETTER EM
+	0x00ed: 0x043d,	# CYRILLIC SMALL LETTER EN
+	0x00ee: 0x043e,	# CYRILLIC SMALL LETTER O
+	0x00ef: 0x043f,	# CYRILLIC SMALL LETTER PE
+	0x00f0: 0x0440,	# CYRILLIC SMALL LETTER ER
+	0x00f1: 0x0441,	# CYRILLIC SMALL LETTER ES
+	0x00f2: 0x0442,	# CYRILLIC SMALL LETTER TE
+	0x00f3: 0x0443,	# CYRILLIC SMALL LETTER U
+	0x00f4: 0x0444,	# CYRILLIC SMALL LETTER EF
+	0x00f5: 0x0445,	# CYRILLIC SMALL LETTER HA
+	0x00f6: 0x0446,	# CYRILLIC SMALL LETTER TSE
+	0x00f7: 0x0447,	# CYRILLIC SMALL LETTER CHE
+	0x00f8: 0x0448,	# CYRILLIC SMALL LETTER SHA
+	0x00f9: 0x0449,	# CYRILLIC SMALL LETTER SHCHA
+	0x00fa: 0x044a,	# CYRILLIC SMALL LETTER HARD SIGN
+	0x00fb: 0x044b,	# CYRILLIC SMALL LETTER YERU
+	0x00fc: 0x044c,	# CYRILLIC SMALL LETTER SOFT SIGN
+	0x00fd: 0x044d,	# CYRILLIC SMALL LETTER E
+	0x00fe: 0x044e,	# CYRILLIC SMALL LETTER YU
+	0x00ff: 0x044f,	# CYRILLIC SMALL LETTER YA
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp1252.py b/Lib/encodings/cp1252.py
new file mode 100644
index 0000000..07a5358
--- /dev/null
+++ b/Lib/encodings/cp1252.py
@@ -0,0 +1,78 @@
+""" Python Character Mapping Codec generated from 'CP1252.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x20ac,	# EURO SIGN
+	0x0081: None,	# UNDEFINED
+	0x0082: 0x201a,	# SINGLE LOW-9 QUOTATION MARK
+	0x0083: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x0084: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x0085: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x0086: 0x2020,	# DAGGER
+	0x0087: 0x2021,	# DOUBLE DAGGER
+	0x0088: 0x02c6,	# MODIFIER LETTER CIRCUMFLEX ACCENT
+	0x0089: 0x2030,	# PER MILLE SIGN
+	0x008a: 0x0160,	# LATIN CAPITAL LETTER S WITH CARON
+	0x008b: 0x2039,	# SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+	0x008c: 0x0152,	# LATIN CAPITAL LIGATURE OE
+	0x008d: None,	# UNDEFINED
+	0x008e: 0x017d,	# LATIN CAPITAL LETTER Z WITH CARON
+	0x008f: None,	# UNDEFINED
+	0x0090: None,	# UNDEFINED
+	0x0091: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x0092: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x0093: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x0094: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x0095: 0x2022,	# BULLET
+	0x0096: 0x2013,	# EN DASH
+	0x0097: 0x2014,	# EM DASH
+	0x0098: 0x02dc,	# SMALL TILDE
+	0x0099: 0x2122,	# TRADE MARK SIGN
+	0x009a: 0x0161,	# LATIN SMALL LETTER S WITH CARON
+	0x009b: 0x203a,	# SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+	0x009c: 0x0153,	# LATIN SMALL LIGATURE OE
+	0x009d: None,	# UNDEFINED
+	0x009e: 0x017e,	# LATIN SMALL LETTER Z WITH CARON
+	0x009f: 0x0178,	# LATIN CAPITAL LETTER Y WITH DIAERESIS
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp1253.py b/Lib/encodings/cp1253.py
new file mode 100644
index 0000000..c84808a
--- /dev/null
+++ b/Lib/encodings/cp1253.py
@@ -0,0 +1,153 @@
+""" Python Character Mapping Codec generated from 'CP1253.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x20ac,	# EURO SIGN
+	0x0081: None,	# UNDEFINED
+	0x0082: 0x201a,	# SINGLE LOW-9 QUOTATION MARK
+	0x0083: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x0084: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x0085: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x0086: 0x2020,	# DAGGER
+	0x0087: 0x2021,	# DOUBLE DAGGER
+	0x0088: None,	# UNDEFINED
+	0x0089: 0x2030,	# PER MILLE SIGN
+	0x008a: None,	# UNDEFINED
+	0x008b: 0x2039,	# SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+	0x008c: None,	# UNDEFINED
+	0x008d: None,	# UNDEFINED
+	0x008e: None,	# UNDEFINED
+	0x008f: None,	# UNDEFINED
+	0x0090: None,	# UNDEFINED
+	0x0091: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x0092: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x0093: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x0094: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x0095: 0x2022,	# BULLET
+	0x0096: 0x2013,	# EN DASH
+	0x0097: 0x2014,	# EM DASH
+	0x0098: None,	# UNDEFINED
+	0x0099: 0x2122,	# TRADE MARK SIGN
+	0x009a: None,	# UNDEFINED
+	0x009b: 0x203a,	# SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+	0x009c: None,	# UNDEFINED
+	0x009d: None,	# UNDEFINED
+	0x009e: None,	# UNDEFINED
+	0x009f: None,	# UNDEFINED
+	0x00a1: 0x0385,	# GREEK DIALYTIKA TONOS
+	0x00a2: 0x0386,	# GREEK CAPITAL LETTER ALPHA WITH TONOS
+	0x00aa: None,	# UNDEFINED
+	0x00af: 0x2015,	# HORIZONTAL BAR
+	0x00b4: 0x0384,	# GREEK TONOS
+	0x00b8: 0x0388,	# GREEK CAPITAL LETTER EPSILON WITH TONOS
+	0x00b9: 0x0389,	# GREEK CAPITAL LETTER ETA WITH TONOS
+	0x00ba: 0x038a,	# GREEK CAPITAL LETTER IOTA WITH TONOS
+	0x00bc: 0x038c,	# GREEK CAPITAL LETTER OMICRON WITH TONOS
+	0x00be: 0x038e,	# GREEK CAPITAL LETTER UPSILON WITH TONOS
+	0x00bf: 0x038f,	# GREEK CAPITAL LETTER OMEGA WITH TONOS
+	0x00c0: 0x0390,	# GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+	0x00c1: 0x0391,	# GREEK CAPITAL LETTER ALPHA
+	0x00c2: 0x0392,	# GREEK CAPITAL LETTER BETA
+	0x00c3: 0x0393,	# GREEK CAPITAL LETTER GAMMA
+	0x00c4: 0x0394,	# GREEK CAPITAL LETTER DELTA
+	0x00c5: 0x0395,	# GREEK CAPITAL LETTER EPSILON
+	0x00c6: 0x0396,	# GREEK CAPITAL LETTER ZETA
+	0x00c7: 0x0397,	# GREEK CAPITAL LETTER ETA
+	0x00c8: 0x0398,	# GREEK CAPITAL LETTER THETA
+	0x00c9: 0x0399,	# GREEK CAPITAL LETTER IOTA
+	0x00ca: 0x039a,	# GREEK CAPITAL LETTER KAPPA
+	0x00cb: 0x039b,	# GREEK CAPITAL LETTER LAMDA
+	0x00cc: 0x039c,	# GREEK CAPITAL LETTER MU
+	0x00cd: 0x039d,	# GREEK CAPITAL LETTER NU
+	0x00ce: 0x039e,	# GREEK CAPITAL LETTER XI
+	0x00cf: 0x039f,	# GREEK CAPITAL LETTER OMICRON
+	0x00d0: 0x03a0,	# GREEK CAPITAL LETTER PI
+	0x00d1: 0x03a1,	# GREEK CAPITAL LETTER RHO
+	0x00d2: None,	# UNDEFINED
+	0x00d3: 0x03a3,	# GREEK CAPITAL LETTER SIGMA
+	0x00d4: 0x03a4,	# GREEK CAPITAL LETTER TAU
+	0x00d5: 0x03a5,	# GREEK CAPITAL LETTER UPSILON
+	0x00d6: 0x03a6,	# GREEK CAPITAL LETTER PHI
+	0x00d7: 0x03a7,	# GREEK CAPITAL LETTER CHI
+	0x00d8: 0x03a8,	# GREEK CAPITAL LETTER PSI
+	0x00d9: 0x03a9,	# GREEK CAPITAL LETTER OMEGA
+	0x00da: 0x03aa,	# GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+	0x00db: 0x03ab,	# GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+	0x00dc: 0x03ac,	# GREEK SMALL LETTER ALPHA WITH TONOS
+	0x00dd: 0x03ad,	# GREEK SMALL LETTER EPSILON WITH TONOS
+	0x00de: 0x03ae,	# GREEK SMALL LETTER ETA WITH TONOS
+	0x00df: 0x03af,	# GREEK SMALL LETTER IOTA WITH TONOS
+	0x00e0: 0x03b0,	# GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+	0x00e1: 0x03b1,	# GREEK SMALL LETTER ALPHA
+	0x00e2: 0x03b2,	# GREEK SMALL LETTER BETA
+	0x00e3: 0x03b3,	# GREEK SMALL LETTER GAMMA
+	0x00e4: 0x03b4,	# GREEK SMALL LETTER DELTA
+	0x00e5: 0x03b5,	# GREEK SMALL LETTER EPSILON
+	0x00e6: 0x03b6,	# GREEK SMALL LETTER ZETA
+	0x00e7: 0x03b7,	# GREEK SMALL LETTER ETA
+	0x00e8: 0x03b8,	# GREEK SMALL LETTER THETA
+	0x00e9: 0x03b9,	# GREEK SMALL LETTER IOTA
+	0x00ea: 0x03ba,	# GREEK SMALL LETTER KAPPA
+	0x00eb: 0x03bb,	# GREEK SMALL LETTER LAMDA
+	0x00ec: 0x03bc,	# GREEK SMALL LETTER MU
+	0x00ed: 0x03bd,	# GREEK SMALL LETTER NU
+	0x00ee: 0x03be,	# GREEK SMALL LETTER XI
+	0x00ef: 0x03bf,	# GREEK SMALL LETTER OMICRON
+	0x00f0: 0x03c0,	# GREEK SMALL LETTER PI
+	0x00f1: 0x03c1,	# GREEK SMALL LETTER RHO
+	0x00f2: 0x03c2,	# GREEK SMALL LETTER FINAL SIGMA
+	0x00f3: 0x03c3,	# GREEK SMALL LETTER SIGMA
+	0x00f4: 0x03c4,	# GREEK SMALL LETTER TAU
+	0x00f5: 0x03c5,	# GREEK SMALL LETTER UPSILON
+	0x00f6: 0x03c6,	# GREEK SMALL LETTER PHI
+	0x00f7: 0x03c7,	# GREEK SMALL LETTER CHI
+	0x00f8: 0x03c8,	# GREEK SMALL LETTER PSI
+	0x00f9: 0x03c9,	# GREEK SMALL LETTER OMEGA
+	0x00fa: 0x03ca,	# GREEK SMALL LETTER IOTA WITH DIALYTIKA
+	0x00fb: 0x03cb,	# GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+	0x00fc: 0x03cc,	# GREEK SMALL LETTER OMICRON WITH TONOS
+	0x00fd: 0x03cd,	# GREEK SMALL LETTER UPSILON WITH TONOS
+	0x00fe: 0x03ce,	# GREEK SMALL LETTER OMEGA WITH TONOS
+	0x00ff: None,	# UNDEFINED
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp1254.py b/Lib/encodings/cp1254.py
new file mode 100644
index 0000000..9897ecf
--- /dev/null
+++ b/Lib/encodings/cp1254.py
@@ -0,0 +1,84 @@
+""" Python Character Mapping Codec generated from 'CP1254.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x20ac,	# EURO SIGN
+	0x0081: None,	# UNDEFINED
+	0x0082: 0x201a,	# SINGLE LOW-9 QUOTATION MARK
+	0x0083: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x0084: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x0085: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x0086: 0x2020,	# DAGGER
+	0x0087: 0x2021,	# DOUBLE DAGGER
+	0x0088: 0x02c6,	# MODIFIER LETTER CIRCUMFLEX ACCENT
+	0x0089: 0x2030,	# PER MILLE SIGN
+	0x008a: 0x0160,	# LATIN CAPITAL LETTER S WITH CARON
+	0x008b: 0x2039,	# SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+	0x008c: 0x0152,	# LATIN CAPITAL LIGATURE OE
+	0x008d: None,	# UNDEFINED
+	0x008e: None,	# UNDEFINED
+	0x008f: None,	# UNDEFINED
+	0x0090: None,	# UNDEFINED
+	0x0091: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x0092: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x0093: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x0094: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x0095: 0x2022,	# BULLET
+	0x0096: 0x2013,	# EN DASH
+	0x0097: 0x2014,	# EM DASH
+	0x0098: 0x02dc,	# SMALL TILDE
+	0x0099: 0x2122,	# TRADE MARK SIGN
+	0x009a: 0x0161,	# LATIN SMALL LETTER S WITH CARON
+	0x009b: 0x203a,	# SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+	0x009c: 0x0153,	# LATIN SMALL LIGATURE OE
+	0x009d: None,	# UNDEFINED
+	0x009e: None,	# UNDEFINED
+	0x009f: 0x0178,	# LATIN CAPITAL LETTER Y WITH DIAERESIS
+	0x00d0: 0x011e,	# LATIN CAPITAL LETTER G WITH BREVE
+	0x00dd: 0x0130,	# LATIN CAPITAL LETTER I WITH DOT ABOVE
+	0x00de: 0x015e,	# LATIN CAPITAL LETTER S WITH CEDILLA
+	0x00f0: 0x011f,	# LATIN SMALL LETTER G WITH BREVE
+	0x00fd: 0x0131,	# LATIN SMALL LETTER DOTLESS I
+	0x00fe: 0x015f,	# LATIN SMALL LETTER S WITH CEDILLA
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp1255.py b/Lib/encodings/cp1255.py
new file mode 100644
index 0000000..5404b46
--- /dev/null
+++ b/Lib/encodings/cp1255.py
@@ -0,0 +1,145 @@
+""" Python Character Mapping Codec generated from 'CP1255.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x20ac,	# EURO SIGN
+	0x0081: None,	# UNDEFINED
+	0x0082: 0x201a,	# SINGLE LOW-9 QUOTATION MARK
+	0x0083: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x0084: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x0085: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x0086: 0x2020,	# DAGGER
+	0x0087: 0x2021,	# DOUBLE DAGGER
+	0x0088: 0x02c6,	# MODIFIER LETTER CIRCUMFLEX ACCENT
+	0x0089: 0x2030,	# PER MILLE SIGN
+	0x008a: None,	# UNDEFINED
+	0x008b: 0x2039,	# SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+	0x008c: None,	# UNDEFINED
+	0x008d: None,	# UNDEFINED
+	0x008e: None,	# UNDEFINED
+	0x008f: None,	# UNDEFINED
+	0x0090: None,	# UNDEFINED
+	0x0091: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x0092: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x0093: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x0094: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x0095: 0x2022,	# BULLET
+	0x0096: 0x2013,	# EN DASH
+	0x0097: 0x2014,	# EM DASH
+	0x0098: 0x02dc,	# SMALL TILDE
+	0x0099: 0x2122,	# TRADE MARK SIGN
+	0x009a: None,	# UNDEFINED
+	0x009b: 0x203a,	# SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+	0x009c: None,	# UNDEFINED
+	0x009d: None,	# UNDEFINED
+	0x009e: None,	# UNDEFINED
+	0x009f: None,	# UNDEFINED
+	0x00a4: 0x20aa,	# NEW SHEQEL SIGN
+	0x00aa: 0x00d7,	# MULTIPLICATION SIGN
+	0x00ba: 0x00f7,	# DIVISION SIGN
+	0x00c0: 0x05b0,	# HEBREW POINT SHEVA
+	0x00c1: 0x05b1,	# HEBREW POINT HATAF SEGOL
+	0x00c2: 0x05b2,	# HEBREW POINT HATAF PATAH
+	0x00c3: 0x05b3,	# HEBREW POINT HATAF QAMATS
+	0x00c4: 0x05b4,	# HEBREW POINT HIRIQ
+	0x00c5: 0x05b5,	# HEBREW POINT TSERE
+	0x00c6: 0x05b6,	# HEBREW POINT SEGOL
+	0x00c7: 0x05b7,	# HEBREW POINT PATAH
+	0x00c8: 0x05b8,	# HEBREW POINT QAMATS
+	0x00c9: 0x05b9,	# HEBREW POINT HOLAM
+	0x00ca: None,	# UNDEFINED
+	0x00cb: 0x05bb,	# HEBREW POINT QUBUTS
+	0x00cc: 0x05bc,	# HEBREW POINT DAGESH OR MAPIQ
+	0x00cd: 0x05bd,	# HEBREW POINT METEG
+	0x00ce: 0x05be,	# HEBREW PUNCTUATION MAQAF
+	0x00cf: 0x05bf,	# HEBREW POINT RAFE
+	0x00d0: 0x05c0,	# HEBREW PUNCTUATION PASEQ
+	0x00d1: 0x05c1,	# HEBREW POINT SHIN DOT
+	0x00d2: 0x05c2,	# HEBREW POINT SIN DOT
+	0x00d3: 0x05c3,	# HEBREW PUNCTUATION SOF PASUQ
+	0x00d4: 0x05f0,	# HEBREW LIGATURE YIDDISH DOUBLE VAV
+	0x00d5: 0x05f1,	# HEBREW LIGATURE YIDDISH VAV YOD
+	0x00d6: 0x05f2,	# HEBREW LIGATURE YIDDISH DOUBLE YOD
+	0x00d7: 0x05f3,	# HEBREW PUNCTUATION GERESH
+	0x00d8: 0x05f4,	# HEBREW PUNCTUATION GERSHAYIM
+	0x00d9: None,	# UNDEFINED
+	0x00da: None,	# UNDEFINED
+	0x00db: None,	# UNDEFINED
+	0x00dc: None,	# UNDEFINED
+	0x00dd: None,	# UNDEFINED
+	0x00de: None,	# UNDEFINED
+	0x00df: None,	# UNDEFINED
+	0x00e0: 0x05d0,	# HEBREW LETTER ALEF
+	0x00e1: 0x05d1,	# HEBREW LETTER BET
+	0x00e2: 0x05d2,	# HEBREW LETTER GIMEL
+	0x00e3: 0x05d3,	# HEBREW LETTER DALET
+	0x00e4: 0x05d4,	# HEBREW LETTER HE
+	0x00e5: 0x05d5,	# HEBREW LETTER VAV
+	0x00e6: 0x05d6,	# HEBREW LETTER ZAYIN
+	0x00e7: 0x05d7,	# HEBREW LETTER HET
+	0x00e8: 0x05d8,	# HEBREW LETTER TET
+	0x00e9: 0x05d9,	# HEBREW LETTER YOD
+	0x00ea: 0x05da,	# HEBREW LETTER FINAL KAF
+	0x00eb: 0x05db,	# HEBREW LETTER KAF
+	0x00ec: 0x05dc,	# HEBREW LETTER LAMED
+	0x00ed: 0x05dd,	# HEBREW LETTER FINAL MEM
+	0x00ee: 0x05de,	# HEBREW LETTER MEM
+	0x00ef: 0x05df,	# HEBREW LETTER FINAL NUN
+	0x00f0: 0x05e0,	# HEBREW LETTER NUN
+	0x00f1: 0x05e1,	# HEBREW LETTER SAMEKH
+	0x00f2: 0x05e2,	# HEBREW LETTER AYIN
+	0x00f3: 0x05e3,	# HEBREW LETTER FINAL PE
+	0x00f4: 0x05e4,	# HEBREW LETTER PE
+	0x00f5: 0x05e5,	# HEBREW LETTER FINAL TSADI
+	0x00f6: 0x05e6,	# HEBREW LETTER TSADI
+	0x00f7: 0x05e7,	# HEBREW LETTER QOF
+	0x00f8: 0x05e8,	# HEBREW LETTER RESH
+	0x00f9: 0x05e9,	# HEBREW LETTER SHIN
+	0x00fa: 0x05ea,	# HEBREW LETTER TAV
+	0x00fb: None,	# UNDEFINED
+	0x00fc: None,	# UNDEFINED
+	0x00fd: 0x200e,	# LEFT-TO-RIGHT MARK
+	0x00fe: 0x200f,	# RIGHT-TO-LEFT MARK
+	0x00ff: None,	# UNDEFINED
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp1256.py b/Lib/encodings/cp1256.py
new file mode 100644
index 0000000..6bb02dd
--- /dev/null
+++ b/Lib/encodings/cp1256.py
@@ -0,0 +1,131 @@
+""" Python Character Mapping Codec generated from 'CP1256.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x20ac,	# EURO SIGN
+	0x0081: 0x067e,	# ARABIC LETTER PEH
+	0x0082: 0x201a,	# SINGLE LOW-9 QUOTATION MARK
+	0x0083: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x0084: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x0085: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x0086: 0x2020,	# DAGGER
+	0x0087: 0x2021,	# DOUBLE DAGGER
+	0x0088: 0x02c6,	# MODIFIER LETTER CIRCUMFLEX ACCENT
+	0x0089: 0x2030,	# PER MILLE SIGN
+	0x008a: 0x0679,	# ARABIC LETTER TTEH
+	0x008b: 0x2039,	# SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+	0x008c: 0x0152,	# LATIN CAPITAL LIGATURE OE
+	0x008d: 0x0686,	# ARABIC LETTER TCHEH
+	0x008e: 0x0698,	# ARABIC LETTER JEH
+	0x008f: 0x0688,	# ARABIC LETTER DDAL
+	0x0090: 0x06af,	# ARABIC LETTER GAF
+	0x0091: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x0092: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x0093: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x0094: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x0095: 0x2022,	# BULLET
+	0x0096: 0x2013,	# EN DASH
+	0x0097: 0x2014,	# EM DASH
+	0x0098: 0x06a9,	# ARABIC LETTER KEHEH
+	0x0099: 0x2122,	# TRADE MARK SIGN
+	0x009a: 0x0691,	# ARABIC LETTER RREH
+	0x009b: 0x203a,	# SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+	0x009c: 0x0153,	# LATIN SMALL LIGATURE OE
+	0x009d: 0x200c,	# ZERO WIDTH NON-JOINER
+	0x009e: 0x200d,	# ZERO WIDTH JOINER
+	0x009f: 0x06ba,	# ARABIC LETTER NOON GHUNNA
+	0x00a1: 0x060c,	# ARABIC COMMA
+	0x00aa: 0x06be,	# ARABIC LETTER HEH DOACHASHMEE
+	0x00ba: 0x061b,	# ARABIC SEMICOLON
+	0x00bf: 0x061f,	# ARABIC QUESTION MARK
+	0x00c0: 0x06c1,	# ARABIC LETTER HEH GOAL
+	0x00c1: 0x0621,	# ARABIC LETTER HAMZA
+	0x00c2: 0x0622,	# ARABIC LETTER ALEF WITH MADDA ABOVE
+	0x00c3: 0x0623,	# ARABIC LETTER ALEF WITH HAMZA ABOVE
+	0x00c4: 0x0624,	# ARABIC LETTER WAW WITH HAMZA ABOVE
+	0x00c5: 0x0625,	# ARABIC LETTER ALEF WITH HAMZA BELOW
+	0x00c6: 0x0626,	# ARABIC LETTER YEH WITH HAMZA ABOVE
+	0x00c7: 0x0627,	# ARABIC LETTER ALEF
+	0x00c8: 0x0628,	# ARABIC LETTER BEH
+	0x00c9: 0x0629,	# ARABIC LETTER TEH MARBUTA
+	0x00ca: 0x062a,	# ARABIC LETTER TEH
+	0x00cb: 0x062b,	# ARABIC LETTER THEH
+	0x00cc: 0x062c,	# ARABIC LETTER JEEM
+	0x00cd: 0x062d,	# ARABIC LETTER HAH
+	0x00ce: 0x062e,	# ARABIC LETTER KHAH
+	0x00cf: 0x062f,	# ARABIC LETTER DAL
+	0x00d0: 0x0630,	# ARABIC LETTER THAL
+	0x00d1: 0x0631,	# ARABIC LETTER REH
+	0x00d2: 0x0632,	# ARABIC LETTER ZAIN
+	0x00d3: 0x0633,	# ARABIC LETTER SEEN
+	0x00d4: 0x0634,	# ARABIC LETTER SHEEN
+	0x00d5: 0x0635,	# ARABIC LETTER SAD
+	0x00d6: 0x0636,	# ARABIC LETTER DAD
+	0x00d8: 0x0637,	# ARABIC LETTER TAH
+	0x00d9: 0x0638,	# ARABIC LETTER ZAH
+	0x00da: 0x0639,	# ARABIC LETTER AIN
+	0x00db: 0x063a,	# ARABIC LETTER GHAIN
+	0x00dc: 0x0640,	# ARABIC TATWEEL
+	0x00dd: 0x0641,	# ARABIC LETTER FEH
+	0x00de: 0x0642,	# ARABIC LETTER QAF
+	0x00df: 0x0643,	# ARABIC LETTER KAF
+	0x00e1: 0x0644,	# ARABIC LETTER LAM
+	0x00e3: 0x0645,	# ARABIC LETTER MEEM
+	0x00e4: 0x0646,	# ARABIC LETTER NOON
+	0x00e5: 0x0647,	# ARABIC LETTER HEH
+	0x00e6: 0x0648,	# ARABIC LETTER WAW
+	0x00ec: 0x0649,	# ARABIC LETTER ALEF MAKSURA
+	0x00ed: 0x064a,	# ARABIC LETTER YEH
+	0x00f0: 0x064b,	# ARABIC FATHATAN
+	0x00f1: 0x064c,	# ARABIC DAMMATAN
+	0x00f2: 0x064d,	# ARABIC KASRATAN
+	0x00f3: 0x064e,	# ARABIC FATHA
+	0x00f5: 0x064f,	# ARABIC DAMMA
+	0x00f6: 0x0650,	# ARABIC KASRA
+	0x00f8: 0x0651,	# ARABIC SHADDA
+	0x00fa: 0x0652,	# ARABIC SUKUN
+	0x00fd: 0x200e,	# LEFT-TO-RIGHT MARK
+	0x00fe: 0x200f,	# RIGHT-TO-LEFT MARK
+	0x00ff: 0x06d2,	# ARABIC LETTER YEH BARREE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp1257.py b/Lib/encodings/cp1257.py
new file mode 100644
index 0000000..ded826c
--- /dev/null
+++ b/Lib/encodings/cp1257.py
@@ -0,0 +1,133 @@
+""" Python Character Mapping Codec generated from 'CP1257.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x20ac,	# EURO SIGN
+	0x0081: None,	# UNDEFINED
+	0x0082: 0x201a,	# SINGLE LOW-9 QUOTATION MARK
+	0x0083: None,	# UNDEFINED
+	0x0084: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x0085: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x0086: 0x2020,	# DAGGER
+	0x0087: 0x2021,	# DOUBLE DAGGER
+	0x0088: None,	# UNDEFINED
+	0x0089: 0x2030,	# PER MILLE SIGN
+	0x008a: None,	# UNDEFINED
+	0x008b: 0x2039,	# SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+	0x008c: None,	# UNDEFINED
+	0x008d: 0x00a8,	# DIAERESIS
+	0x008e: 0x02c7,	# CARON
+	0x008f: 0x00b8,	# CEDILLA
+	0x0090: None,	# UNDEFINED
+	0x0091: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x0092: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x0093: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x0094: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x0095: 0x2022,	# BULLET
+	0x0096: 0x2013,	# EN DASH
+	0x0097: 0x2014,	# EM DASH
+	0x0098: None,	# UNDEFINED
+	0x0099: 0x2122,	# TRADE MARK SIGN
+	0x009a: None,	# UNDEFINED
+	0x009b: 0x203a,	# SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+	0x009c: None,	# UNDEFINED
+	0x009d: 0x00af,	# MACRON
+	0x009e: 0x02db,	# OGONEK
+	0x009f: None,	# UNDEFINED
+	0x00a1: None,	# UNDEFINED
+	0x00a5: None,	# UNDEFINED
+	0x00a8: 0x00d8,	# LATIN CAPITAL LETTER O WITH STROKE
+	0x00aa: 0x0156,	# LATIN CAPITAL LETTER R WITH CEDILLA
+	0x00af: 0x00c6,	# LATIN CAPITAL LETTER AE
+	0x00b8: 0x00f8,	# LATIN SMALL LETTER O WITH STROKE
+	0x00ba: 0x0157,	# LATIN SMALL LETTER R WITH CEDILLA
+	0x00bf: 0x00e6,	# LATIN SMALL LETTER AE
+	0x00c0: 0x0104,	# LATIN CAPITAL LETTER A WITH OGONEK
+	0x00c1: 0x012e,	# LATIN CAPITAL LETTER I WITH OGONEK
+	0x00c2: 0x0100,	# LATIN CAPITAL LETTER A WITH MACRON
+	0x00c3: 0x0106,	# LATIN CAPITAL LETTER C WITH ACUTE
+	0x00c6: 0x0118,	# LATIN CAPITAL LETTER E WITH OGONEK
+	0x00c7: 0x0112,	# LATIN CAPITAL LETTER E WITH MACRON
+	0x00c8: 0x010c,	# LATIN CAPITAL LETTER C WITH CARON
+	0x00ca: 0x0179,	# LATIN CAPITAL LETTER Z WITH ACUTE
+	0x00cb: 0x0116,	# LATIN CAPITAL LETTER E WITH DOT ABOVE
+	0x00cc: 0x0122,	# LATIN CAPITAL LETTER G WITH CEDILLA
+	0x00cd: 0x0136,	# LATIN CAPITAL LETTER K WITH CEDILLA
+	0x00ce: 0x012a,	# LATIN CAPITAL LETTER I WITH MACRON
+	0x00cf: 0x013b,	# LATIN CAPITAL LETTER L WITH CEDILLA
+	0x00d0: 0x0160,	# LATIN CAPITAL LETTER S WITH CARON
+	0x00d1: 0x0143,	# LATIN CAPITAL LETTER N WITH ACUTE
+	0x00d2: 0x0145,	# LATIN CAPITAL LETTER N WITH CEDILLA
+	0x00d4: 0x014c,	# LATIN CAPITAL LETTER O WITH MACRON
+	0x00d8: 0x0172,	# LATIN CAPITAL LETTER U WITH OGONEK
+	0x00d9: 0x0141,	# LATIN CAPITAL LETTER L WITH STROKE
+	0x00da: 0x015a,	# LATIN CAPITAL LETTER S WITH ACUTE
+	0x00db: 0x016a,	# LATIN CAPITAL LETTER U WITH MACRON
+	0x00dd: 0x017b,	# LATIN CAPITAL LETTER Z WITH DOT ABOVE
+	0x00de: 0x017d,	# LATIN CAPITAL LETTER Z WITH CARON
+	0x00e0: 0x0105,	# LATIN SMALL LETTER A WITH OGONEK
+	0x00e1: 0x012f,	# LATIN SMALL LETTER I WITH OGONEK
+	0x00e2: 0x0101,	# LATIN SMALL LETTER A WITH MACRON
+	0x00e3: 0x0107,	# LATIN SMALL LETTER C WITH ACUTE
+	0x00e6: 0x0119,	# LATIN SMALL LETTER E WITH OGONEK
+	0x00e7: 0x0113,	# LATIN SMALL LETTER E WITH MACRON
+	0x00e8: 0x010d,	# LATIN SMALL LETTER C WITH CARON
+	0x00ea: 0x017a,	# LATIN SMALL LETTER Z WITH ACUTE
+	0x00eb: 0x0117,	# LATIN SMALL LETTER E WITH DOT ABOVE
+	0x00ec: 0x0123,	# LATIN SMALL LETTER G WITH CEDILLA
+	0x00ed: 0x0137,	# LATIN SMALL LETTER K WITH CEDILLA
+	0x00ee: 0x012b,	# LATIN SMALL LETTER I WITH MACRON
+	0x00ef: 0x013c,	# LATIN SMALL LETTER L WITH CEDILLA
+	0x00f0: 0x0161,	# LATIN SMALL LETTER S WITH CARON
+	0x00f1: 0x0144,	# LATIN SMALL LETTER N WITH ACUTE
+	0x00f2: 0x0146,	# LATIN SMALL LETTER N WITH CEDILLA
+	0x00f4: 0x014d,	# LATIN SMALL LETTER O WITH MACRON
+	0x00f8: 0x0173,	# LATIN SMALL LETTER U WITH OGONEK
+	0x00f9: 0x0142,	# LATIN SMALL LETTER L WITH STROKE
+	0x00fa: 0x015b,	# LATIN SMALL LETTER S WITH ACUTE
+	0x00fb: 0x016b,	# LATIN SMALL LETTER U WITH MACRON
+	0x00fd: 0x017c,	# LATIN SMALL LETTER Z WITH DOT ABOVE
+	0x00fe: 0x017e,	# LATIN SMALL LETTER Z WITH CARON
+	0x00ff: 0x02d9,	# DOT ABOVE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp1258.py b/Lib/encodings/cp1258.py
new file mode 100644
index 0000000..955253c
--- /dev/null
+++ b/Lib/encodings/cp1258.py
@@ -0,0 +1,92 @@
+""" Python Character Mapping Codec generated from 'CP1258.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x20ac,	# EURO SIGN
+	0x0081: None,	# UNDEFINED
+	0x0082: 0x201a,	# SINGLE LOW-9 QUOTATION MARK
+	0x0083: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x0084: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x0085: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x0086: 0x2020,	# DAGGER
+	0x0087: 0x2021,	# DOUBLE DAGGER
+	0x0088: 0x02c6,	# MODIFIER LETTER CIRCUMFLEX ACCENT
+	0x0089: 0x2030,	# PER MILLE SIGN
+	0x008a: None,	# UNDEFINED
+	0x008b: 0x2039,	# SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+	0x008c: 0x0152,	# LATIN CAPITAL LIGATURE OE
+	0x008d: None,	# UNDEFINED
+	0x008e: None,	# UNDEFINED
+	0x008f: None,	# UNDEFINED
+	0x0090: None,	# UNDEFINED
+	0x0091: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x0092: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x0093: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x0094: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x0095: 0x2022,	# BULLET
+	0x0096: 0x2013,	# EN DASH
+	0x0097: 0x2014,	# EM DASH
+	0x0098: 0x02dc,	# SMALL TILDE
+	0x0099: 0x2122,	# TRADE MARK SIGN
+	0x009a: None,	# UNDEFINED
+	0x009b: 0x203a,	# SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+	0x009c: 0x0153,	# LATIN SMALL LIGATURE OE
+	0x009d: None,	# UNDEFINED
+	0x009e: None,	# UNDEFINED
+	0x009f: 0x0178,	# LATIN CAPITAL LETTER Y WITH DIAERESIS
+	0x00c3: 0x0102,	# LATIN CAPITAL LETTER A WITH BREVE
+	0x00cc: 0x0300,	# COMBINING GRAVE ACCENT
+	0x00d0: 0x0110,	# LATIN CAPITAL LETTER D WITH STROKE
+	0x00d2: 0x0309,	# COMBINING HOOK ABOVE
+	0x00d5: 0x01a0,	# LATIN CAPITAL LETTER O WITH HORN
+	0x00dd: 0x01af,	# LATIN CAPITAL LETTER U WITH HORN
+	0x00de: 0x0303,	# COMBINING TILDE
+	0x00e3: 0x0103,	# LATIN SMALL LETTER A WITH BREVE
+	0x00ec: 0x0301,	# COMBINING ACUTE ACCENT
+	0x00f0: 0x0111,	# LATIN SMALL LETTER D WITH STROKE
+	0x00f2: 0x0323,	# COMBINING DOT BELOW
+	0x00f5: 0x01a1,	# LATIN SMALL LETTER O WITH HORN
+	0x00fd: 0x01b0,	# LATIN SMALL LETTER U WITH HORN
+	0x00fe: 0x20ab,	# DONG SIGN
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp424.py b/Lib/encodings/cp424.py
new file mode 100644
index 0000000..c4abaec
--- /dev/null
+++ b/Lib/encodings/cp424.py
@@ -0,0 +1,282 @@
+""" Python Character Mapping Codec generated from 'CP424.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0004: 0x009c,	# SELECT
+	0x0005: 0x0009,	# HORIZONTAL TABULATION
+	0x0006: 0x0086,	# REQUIRED NEW LINE
+	0x0007: 0x007f,	# DELETE
+	0x0008: 0x0097,	# GRAPHIC ESCAPE
+	0x0009: 0x008d,	# SUPERSCRIPT
+	0x000a: 0x008e,	# REPEAT
+	0x0014: 0x009d,	# RESTORE/ENABLE PRESENTATION
+	0x0015: 0x0085,	# NEW LINE
+	0x0016: 0x0008,	# BACKSPACE
+	0x0017: 0x0087,	# PROGRAM OPERATOR COMMUNICATION
+	0x001a: 0x0092,	# UNIT BACK SPACE
+	0x001b: 0x008f,	# CUSTOMER USE ONE
+	0x0020: 0x0080,	# DIGIT SELECT
+	0x0021: 0x0081,	# START OF SIGNIFICANCE
+	0x0022: 0x0082,	# FIELD SEPARATOR
+	0x0023: 0x0083,	# WORD UNDERSCORE
+	0x0024: 0x0084,	# BYPASS OR INHIBIT PRESENTATION
+	0x0025: 0x000a,	# LINE FEED
+	0x0026: 0x0017,	# END OF TRANSMISSION BLOCK
+	0x0027: 0x001b,	# ESCAPE
+	0x0028: 0x0088,	# SET ATTRIBUTE
+	0x0029: 0x0089,	# START FIELD EXTENDED
+	0x002a: 0x008a,	# SET MODE OR SWITCH
+	0x002b: 0x008b,	# CONTROL SEQUENCE PREFIX
+	0x002c: 0x008c,	# MODIFY FIELD ATTRIBUTE
+	0x002d: 0x0005,	# ENQUIRY
+	0x002e: 0x0006,	# ACKNOWLEDGE
+	0x002f: 0x0007,	# BELL
+	0x0030: 0x0090,	# <reserved>
+	0x0031: 0x0091,	# <reserved>
+	0x0032: 0x0016,	# SYNCHRONOUS IDLE
+	0x0033: 0x0093,	# INDEX RETURN
+	0x0034: 0x0094,	# PRESENTATION POSITION
+	0x0035: 0x0095,	# TRANSPARENT
+	0x0036: 0x0096,	# NUMERIC BACKSPACE
+	0x0037: 0x0004,	# END OF TRANSMISSION
+	0x0038: 0x0098,	# SUBSCRIPT
+	0x0039: 0x0099,	# INDENT TABULATION
+	0x003a: 0x009a,	# REVERSE FORM FEED
+	0x003b: 0x009b,	# CUSTOMER USE THREE
+	0x003c: 0x0014,	# DEVICE CONTROL FOUR
+	0x003d: 0x0015,	# NEGATIVE ACKNOWLEDGE
+	0x003e: 0x009e,	# <reserved>
+	0x003f: 0x001a,	# SUBSTITUTE
+	0x0040: 0x0020,	# SPACE
+	0x0041: 0x05d0,	# HEBREW LETTER ALEF
+	0x0042: 0x05d1,	# HEBREW LETTER BET
+	0x0043: 0x05d2,	# HEBREW LETTER GIMEL
+	0x0044: 0x05d3,	# HEBREW LETTER DALET
+	0x0045: 0x05d4,	# HEBREW LETTER HE
+	0x0046: 0x05d5,	# HEBREW LETTER VAV
+	0x0047: 0x05d6,	# HEBREW LETTER ZAYIN
+	0x0048: 0x05d7,	# HEBREW LETTER HET
+	0x0049: 0x05d8,	# HEBREW LETTER TET
+	0x004a: 0x00a2,	# CENT SIGN
+	0x004b: 0x002e,	# FULL STOP
+	0x004c: 0x003c,	# LESS-THAN SIGN
+	0x004d: 0x0028,	# LEFT PARENTHESIS
+	0x004e: 0x002b,	# PLUS SIGN
+	0x004f: 0x007c,	# VERTICAL LINE
+	0x0050: 0x0026,	# AMPERSAND
+	0x0051: 0x05d9,	# HEBREW LETTER YOD
+	0x0052: 0x05da,	# HEBREW LETTER FINAL KAF
+	0x0053: 0x05db,	# HEBREW LETTER KAF
+	0x0054: 0x05dc,	# HEBREW LETTER LAMED
+	0x0055: 0x05dd,	# HEBREW LETTER FINAL MEM
+	0x0056: 0x05de,	# HEBREW LETTER MEM
+	0x0057: 0x05df,	# HEBREW LETTER FINAL NUN
+	0x0058: 0x05e0,	# HEBREW LETTER NUN
+	0x0059: 0x05e1,	# HEBREW LETTER SAMEKH
+	0x005a: 0x0021,	# EXCLAMATION MARK
+	0x005b: 0x0024,	# DOLLAR SIGN
+	0x005c: 0x002a,	# ASTERISK
+	0x005d: 0x0029,	# RIGHT PARENTHESIS
+	0x005e: 0x003b,	# SEMICOLON
+	0x005f: 0x00ac,	# NOT SIGN
+	0x0060: 0x002d,	# HYPHEN-MINUS
+	0x0061: 0x002f,	# SOLIDUS
+	0x0062: 0x05e2,	# HEBREW LETTER AYIN
+	0x0063: 0x05e3,	# HEBREW LETTER FINAL PE
+	0x0064: 0x05e4,	# HEBREW LETTER PE
+	0x0065: 0x05e5,	# HEBREW LETTER FINAL TSADI
+	0x0066: 0x05e6,	# HEBREW LETTER TSADI
+	0x0067: 0x05e7,	# HEBREW LETTER QOF
+	0x0068: 0x05e8,	# HEBREW LETTER RESH
+	0x0069: 0x05e9,	# HEBREW LETTER SHIN
+	0x006a: 0x00a6,	# BROKEN BAR
+	0x006b: 0x002c,	# COMMA
+	0x006c: 0x0025,	# PERCENT SIGN
+	0x006d: 0x005f,	# LOW LINE
+	0x006e: 0x003e,	# GREATER-THAN SIGN
+	0x006f: 0x003f,	# QUESTION MARK
+	0x0070: None,	# UNDEFINED
+	0x0071: 0x05ea,	# HEBREW LETTER TAV
+	0x0072: None,	# UNDEFINED
+	0x0073: None,	# UNDEFINED
+	0x0074: 0x00a0,	# NO-BREAK SPACE
+	0x0075: None,	# UNDEFINED
+	0x0076: None,	# UNDEFINED
+	0x0077: None,	# UNDEFINED
+	0x0078: 0x2017,	# DOUBLE LOW LINE
+	0x0079: 0x0060,	# GRAVE ACCENT
+	0x007a: 0x003a,	# COLON
+	0x007b: 0x0023,	# NUMBER SIGN
+	0x007c: 0x0040,	# COMMERCIAL AT
+	0x007d: 0x0027,	# APOSTROPHE
+	0x007e: 0x003d,	# EQUALS SIGN
+	0x007f: 0x0022,	# QUOTATION MARK
+	0x0080: None,	# UNDEFINED
+	0x0081: 0x0061,	# LATIN SMALL LETTER A
+	0x0082: 0x0062,	# LATIN SMALL LETTER B
+	0x0083: 0x0063,	# LATIN SMALL LETTER C
+	0x0084: 0x0064,	# LATIN SMALL LETTER D
+	0x0085: 0x0065,	# LATIN SMALL LETTER E
+	0x0086: 0x0066,	# LATIN SMALL LETTER F
+	0x0087: 0x0067,	# LATIN SMALL LETTER G
+	0x0088: 0x0068,	# LATIN SMALL LETTER H
+	0x0089: 0x0069,	# LATIN SMALL LETTER I
+	0x008a: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x008b: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x008c: None,	# UNDEFINED
+	0x008d: None,	# UNDEFINED
+	0x008e: None,	# UNDEFINED
+	0x008f: 0x00b1,	# PLUS-MINUS SIGN
+	0x0090: 0x00b0,	# DEGREE SIGN
+	0x0091: 0x006a,	# LATIN SMALL LETTER J
+	0x0092: 0x006b,	# LATIN SMALL LETTER K
+	0x0093: 0x006c,	# LATIN SMALL LETTER L
+	0x0094: 0x006d,	# LATIN SMALL LETTER M
+	0x0095: 0x006e,	# LATIN SMALL LETTER N
+	0x0096: 0x006f,	# LATIN SMALL LETTER O
+	0x0097: 0x0070,	# LATIN SMALL LETTER P
+	0x0098: 0x0071,	# LATIN SMALL LETTER Q
+	0x0099: 0x0072,	# LATIN SMALL LETTER R
+	0x009a: None,	# UNDEFINED
+	0x009b: None,	# UNDEFINED
+	0x009c: None,	# UNDEFINED
+	0x009d: 0x00b8,	# CEDILLA
+	0x009e: None,	# UNDEFINED
+	0x009f: 0x00a4,	# CURRENCY SIGN
+	0x00a0: 0x00b5,	# MICRO SIGN
+	0x00a1: 0x007e,	# TILDE
+	0x00a2: 0x0073,	# LATIN SMALL LETTER S
+	0x00a3: 0x0074,	# LATIN SMALL LETTER T
+	0x00a4: 0x0075,	# LATIN SMALL LETTER U
+	0x00a5: 0x0076,	# LATIN SMALL LETTER V
+	0x00a6: 0x0077,	# LATIN SMALL LETTER W
+	0x00a7: 0x0078,	# LATIN SMALL LETTER X
+	0x00a8: 0x0079,	# LATIN SMALL LETTER Y
+	0x00a9: 0x007a,	# LATIN SMALL LETTER Z
+	0x00aa: None,	# UNDEFINED
+	0x00ab: None,	# UNDEFINED
+	0x00ac: None,	# UNDEFINED
+	0x00ad: None,	# UNDEFINED
+	0x00ae: None,	# UNDEFINED
+	0x00af: 0x00ae,	# REGISTERED SIGN
+	0x00b0: 0x005e,	# CIRCUMFLEX ACCENT
+	0x00b1: 0x00a3,	# POUND SIGN
+	0x00b2: 0x00a5,	# YEN SIGN
+	0x00b3: 0x00b7,	# MIDDLE DOT
+	0x00b4: 0x00a9,	# COPYRIGHT SIGN
+	0x00b5: 0x00a7,	# SECTION SIGN
+	0x00b7: 0x00bc,	# VULGAR FRACTION ONE QUARTER
+	0x00b8: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00b9: 0x00be,	# VULGAR FRACTION THREE QUARTERS
+	0x00ba: 0x005b,	# LEFT SQUARE BRACKET
+	0x00bb: 0x005d,	# RIGHT SQUARE BRACKET
+	0x00bc: 0x00af,	# MACRON
+	0x00bd: 0x00a8,	# DIAERESIS
+	0x00be: 0x00b4,	# ACUTE ACCENT
+	0x00bf: 0x00d7,	# MULTIPLICATION SIGN
+	0x00c0: 0x007b,	# LEFT CURLY BRACKET
+	0x00c1: 0x0041,	# LATIN CAPITAL LETTER A
+	0x00c2: 0x0042,	# LATIN CAPITAL LETTER B
+	0x00c3: 0x0043,	# LATIN CAPITAL LETTER C
+	0x00c4: 0x0044,	# LATIN CAPITAL LETTER D
+	0x00c5: 0x0045,	# LATIN CAPITAL LETTER E
+	0x00c6: 0x0046,	# LATIN CAPITAL LETTER F
+	0x00c7: 0x0047,	# LATIN CAPITAL LETTER G
+	0x00c8: 0x0048,	# LATIN CAPITAL LETTER H
+	0x00c9: 0x0049,	# LATIN CAPITAL LETTER I
+	0x00ca: 0x00ad,	# SOFT HYPHEN
+	0x00cb: None,	# UNDEFINED
+	0x00cc: None,	# UNDEFINED
+	0x00cd: None,	# UNDEFINED
+	0x00ce: None,	# UNDEFINED
+	0x00cf: None,	# UNDEFINED
+	0x00d0: 0x007d,	# RIGHT CURLY BRACKET
+	0x00d1: 0x004a,	# LATIN CAPITAL LETTER J
+	0x00d2: 0x004b,	# LATIN CAPITAL LETTER K
+	0x00d3: 0x004c,	# LATIN CAPITAL LETTER L
+	0x00d4: 0x004d,	# LATIN CAPITAL LETTER M
+	0x00d5: 0x004e,	# LATIN CAPITAL LETTER N
+	0x00d6: 0x004f,	# LATIN CAPITAL LETTER O
+	0x00d7: 0x0050,	# LATIN CAPITAL LETTER P
+	0x00d8: 0x0051,	# LATIN CAPITAL LETTER Q
+	0x00d9: 0x0052,	# LATIN CAPITAL LETTER R
+	0x00da: 0x00b9,	# SUPERSCRIPT ONE
+	0x00db: None,	# UNDEFINED
+	0x00dc: None,	# UNDEFINED
+	0x00dd: None,	# UNDEFINED
+	0x00de: None,	# UNDEFINED
+	0x00df: None,	# UNDEFINED
+	0x00e0: 0x005c,	# REVERSE SOLIDUS
+	0x00e1: 0x00f7,	# DIVISION SIGN
+	0x00e2: 0x0053,	# LATIN CAPITAL LETTER S
+	0x00e3: 0x0054,	# LATIN CAPITAL LETTER T
+	0x00e4: 0x0055,	# LATIN CAPITAL LETTER U
+	0x00e5: 0x0056,	# LATIN CAPITAL LETTER V
+	0x00e6: 0x0057,	# LATIN CAPITAL LETTER W
+	0x00e7: 0x0058,	# LATIN CAPITAL LETTER X
+	0x00e8: 0x0059,	# LATIN CAPITAL LETTER Y
+	0x00e9: 0x005a,	# LATIN CAPITAL LETTER Z
+	0x00ea: 0x00b2,	# SUPERSCRIPT TWO
+	0x00eb: None,	# UNDEFINED
+	0x00ec: None,	# UNDEFINED
+	0x00ed: None,	# UNDEFINED
+	0x00ee: None,	# UNDEFINED
+	0x00ef: None,	# UNDEFINED
+	0x00f0: 0x0030,	# DIGIT ZERO
+	0x00f1: 0x0031,	# DIGIT ONE
+	0x00f2: 0x0032,	# DIGIT TWO
+	0x00f3: 0x0033,	# DIGIT THREE
+	0x00f4: 0x0034,	# DIGIT FOUR
+	0x00f5: 0x0035,	# DIGIT FIVE
+	0x00f6: 0x0036,	# DIGIT SIX
+	0x00f7: 0x0037,	# DIGIT SEVEN
+	0x00f8: 0x0038,	# DIGIT EIGHT
+	0x00f9: 0x0039,	# DIGIT NINE
+	0x00fa: 0x00b3,	# SUPERSCRIPT THREE
+	0x00fb: None,	# UNDEFINED
+	0x00fc: None,	# UNDEFINED
+	0x00fd: None,	# UNDEFINED
+	0x00fe: None,	# UNDEFINED
+	0x00ff: 0x009f,	# EIGHT ONES
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp437.py b/Lib/encodings/cp437.py
new file mode 100644
index 0000000..ca7d90e
--- /dev/null
+++ b/Lib/encodings/cp437.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'CP437.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x00c7,	# LATIN CAPITAL LETTER C WITH CEDILLA
+	0x0081: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x0082: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x0083: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x0084: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x0085: 0x00e0,	# LATIN SMALL LETTER A WITH GRAVE
+	0x0086: 0x00e5,	# LATIN SMALL LETTER A WITH RING ABOVE
+	0x0087: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x0088: 0x00ea,	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+	0x0089: 0x00eb,	# LATIN SMALL LETTER E WITH DIAERESIS
+	0x008a: 0x00e8,	# LATIN SMALL LETTER E WITH GRAVE
+	0x008b: 0x00ef,	# LATIN SMALL LETTER I WITH DIAERESIS
+	0x008c: 0x00ee,	# LATIN SMALL LETTER I WITH CIRCUMFLEX
+	0x008d: 0x00ec,	# LATIN SMALL LETTER I WITH GRAVE
+	0x008e: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x008f: 0x00c5,	# LATIN CAPITAL LETTER A WITH RING ABOVE
+	0x0090: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0091: 0x00e6,	# LATIN SMALL LIGATURE AE
+	0x0092: 0x00c6,	# LATIN CAPITAL LIGATURE AE
+	0x0093: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x0094: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x0095: 0x00f2,	# LATIN SMALL LETTER O WITH GRAVE
+	0x0096: 0x00fb,	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+	0x0097: 0x00f9,	# LATIN SMALL LETTER U WITH GRAVE
+	0x0098: 0x00ff,	# LATIN SMALL LETTER Y WITH DIAERESIS
+	0x0099: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x009a: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x009b: 0x00a2,	# CENT SIGN
+	0x009c: 0x00a3,	# POUND SIGN
+	0x009d: 0x00a5,	# YEN SIGN
+	0x009e: 0x20a7,	# PESETA SIGN
+	0x009f: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x00a0: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x00a1: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x00a2: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x00a3: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x00a4: 0x00f1,	# LATIN SMALL LETTER N WITH TILDE
+	0x00a5: 0x00d1,	# LATIN CAPITAL LETTER N WITH TILDE
+	0x00a6: 0x00aa,	# FEMININE ORDINAL INDICATOR
+	0x00a7: 0x00ba,	# MASCULINE ORDINAL INDICATOR
+	0x00a8: 0x00bf,	# INVERTED QUESTION MARK
+	0x00a9: 0x2310,	# REVERSED NOT SIGN
+	0x00aa: 0x00ac,	# NOT SIGN
+	0x00ab: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00ac: 0x00bc,	# VULGAR FRACTION ONE QUARTER
+	0x00ad: 0x00a1,	# INVERTED EXCLAMATION MARK
+	0x00ae: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00af: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: 0x2561,	# BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+	0x00b6: 0x2562,	# BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+	0x00b7: 0x2556,	# BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+	0x00b8: 0x2555,	# BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x255c,	# BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+	0x00be: 0x255b,	# BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: 0x255e,	# BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+	0x00c7: 0x255f,	# BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x2567,	# BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+	0x00d0: 0x2568,	# BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+	0x00d1: 0x2564,	# BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+	0x00d2: 0x2565,	# BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+	0x00d3: 0x2559,	# BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+	0x00d4: 0x2558,	# BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+	0x00d5: 0x2552,	# BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+	0x00d6: 0x2553,	# BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+	0x00d7: 0x256b,	# BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+	0x00d8: 0x256a,	# BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x258c,	# LEFT HALF BLOCK
+	0x00de: 0x2590,	# RIGHT HALF BLOCK
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: 0x03b1,	# GREEK SMALL LETTER ALPHA
+	0x00e1: 0x00df,	# LATIN SMALL LETTER SHARP S
+	0x00e2: 0x0393,	# GREEK CAPITAL LETTER GAMMA
+	0x00e3: 0x03c0,	# GREEK SMALL LETTER PI
+	0x00e4: 0x03a3,	# GREEK CAPITAL LETTER SIGMA
+	0x00e5: 0x03c3,	# GREEK SMALL LETTER SIGMA
+	0x00e6: 0x00b5,	# MICRO SIGN
+	0x00e7: 0x03c4,	# GREEK SMALL LETTER TAU
+	0x00e8: 0x03a6,	# GREEK CAPITAL LETTER PHI
+	0x00e9: 0x0398,	# GREEK CAPITAL LETTER THETA
+	0x00ea: 0x03a9,	# GREEK CAPITAL LETTER OMEGA
+	0x00eb: 0x03b4,	# GREEK SMALL LETTER DELTA
+	0x00ec: 0x221e,	# INFINITY
+	0x00ed: 0x03c6,	# GREEK SMALL LETTER PHI
+	0x00ee: 0x03b5,	# GREEK SMALL LETTER EPSILON
+	0x00ef: 0x2229,	# INTERSECTION
+	0x00f0: 0x2261,	# IDENTICAL TO
+	0x00f1: 0x00b1,	# PLUS-MINUS SIGN
+	0x00f2: 0x2265,	# GREATER-THAN OR EQUAL TO
+	0x00f3: 0x2264,	# LESS-THAN OR EQUAL TO
+	0x00f4: 0x2320,	# TOP HALF INTEGRAL
+	0x00f5: 0x2321,	# BOTTOM HALF INTEGRAL
+	0x00f6: 0x00f7,	# DIVISION SIGN
+	0x00f7: 0x2248,	# ALMOST EQUAL TO
+	0x00f8: 0x00b0,	# DEGREE SIGN
+	0x00f9: 0x2219,	# BULLET OPERATOR
+	0x00fa: 0x00b7,	# MIDDLE DOT
+	0x00fb: 0x221a,	# SQUARE ROOT
+	0x00fc: 0x207f,	# SUPERSCRIPT LATIN SMALL LETTER N
+	0x00fd: 0x00b2,	# SUPERSCRIPT TWO
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp500.py b/Lib/encodings/cp500.py
new file mode 100644
index 0000000..33d6fed
--- /dev/null
+++ b/Lib/encodings/cp500.py
@@ -0,0 +1,282 @@
+""" Python Character Mapping Codec generated from 'CP500.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0004: 0x009c,	# CONTROL
+	0x0005: 0x0009,	# HORIZONTAL TABULATION
+	0x0006: 0x0086,	# CONTROL
+	0x0007: 0x007f,	# DELETE
+	0x0008: 0x0097,	# CONTROL
+	0x0009: 0x008d,	# CONTROL
+	0x000a: 0x008e,	# CONTROL
+	0x0014: 0x009d,	# CONTROL
+	0x0015: 0x0085,	# CONTROL
+	0x0016: 0x0008,	# BACKSPACE
+	0x0017: 0x0087,	# CONTROL
+	0x001a: 0x0092,	# CONTROL
+	0x001b: 0x008f,	# CONTROL
+	0x0020: 0x0080,	# CONTROL
+	0x0021: 0x0081,	# CONTROL
+	0x0022: 0x0082,	# CONTROL
+	0x0023: 0x0083,	# CONTROL
+	0x0024: 0x0084,	# CONTROL
+	0x0025: 0x000a,	# LINE FEED
+	0x0026: 0x0017,	# END OF TRANSMISSION BLOCK
+	0x0027: 0x001b,	# ESCAPE
+	0x0028: 0x0088,	# CONTROL
+	0x0029: 0x0089,	# CONTROL
+	0x002a: 0x008a,	# CONTROL
+	0x002b: 0x008b,	# CONTROL
+	0x002c: 0x008c,	# CONTROL
+	0x002d: 0x0005,	# ENQUIRY
+	0x002e: 0x0006,	# ACKNOWLEDGE
+	0x002f: 0x0007,	# BELL
+	0x0030: 0x0090,	# CONTROL
+	0x0031: 0x0091,	# CONTROL
+	0x0032: 0x0016,	# SYNCHRONOUS IDLE
+	0x0033: 0x0093,	# CONTROL
+	0x0034: 0x0094,	# CONTROL
+	0x0035: 0x0095,	# CONTROL
+	0x0036: 0x0096,	# CONTROL
+	0x0037: 0x0004,	# END OF TRANSMISSION
+	0x0038: 0x0098,	# CONTROL
+	0x0039: 0x0099,	# CONTROL
+	0x003a: 0x009a,	# CONTROL
+	0x003b: 0x009b,	# CONTROL
+	0x003c: 0x0014,	# DEVICE CONTROL FOUR
+	0x003d: 0x0015,	# NEGATIVE ACKNOWLEDGE
+	0x003e: 0x009e,	# CONTROL
+	0x003f: 0x001a,	# SUBSTITUTE
+	0x0040: 0x0020,	# SPACE
+	0x0041: 0x00a0,	# NO-BREAK SPACE
+	0x0042: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x0043: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x0044: 0x00e0,	# LATIN SMALL LETTER A WITH GRAVE
+	0x0045: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x0046: 0x00e3,	# LATIN SMALL LETTER A WITH TILDE
+	0x0047: 0x00e5,	# LATIN SMALL LETTER A WITH RING ABOVE
+	0x0048: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x0049: 0x00f1,	# LATIN SMALL LETTER N WITH TILDE
+	0x004a: 0x005b,	# LEFT SQUARE BRACKET
+	0x004b: 0x002e,	# FULL STOP
+	0x004c: 0x003c,	# LESS-THAN SIGN
+	0x004d: 0x0028,	# LEFT PARENTHESIS
+	0x004e: 0x002b,	# PLUS SIGN
+	0x004f: 0x0021,	# EXCLAMATION MARK
+	0x0050: 0x0026,	# AMPERSAND
+	0x0051: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x0052: 0x00ea,	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+	0x0053: 0x00eb,	# LATIN SMALL LETTER E WITH DIAERESIS
+	0x0054: 0x00e8,	# LATIN SMALL LETTER E WITH GRAVE
+	0x0055: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x0056: 0x00ee,	# LATIN SMALL LETTER I WITH CIRCUMFLEX
+	0x0057: 0x00ef,	# LATIN SMALL LETTER I WITH DIAERESIS
+	0x0058: 0x00ec,	# LATIN SMALL LETTER I WITH GRAVE
+	0x0059: 0x00df,	# LATIN SMALL LETTER SHARP S (GERMAN)
+	0x005a: 0x005d,	# RIGHT SQUARE BRACKET
+	0x005b: 0x0024,	# DOLLAR SIGN
+	0x005c: 0x002a,	# ASTERISK
+	0x005d: 0x0029,	# RIGHT PARENTHESIS
+	0x005e: 0x003b,	# SEMICOLON
+	0x005f: 0x005e,	# CIRCUMFLEX ACCENT
+	0x0060: 0x002d,	# HYPHEN-MINUS
+	0x0061: 0x002f,	# SOLIDUS
+	0x0062: 0x00c2,	# LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+	0x0063: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x0064: 0x00c0,	# LATIN CAPITAL LETTER A WITH GRAVE
+	0x0065: 0x00c1,	# LATIN CAPITAL LETTER A WITH ACUTE
+	0x0066: 0x00c3,	# LATIN CAPITAL LETTER A WITH TILDE
+	0x0067: 0x00c5,	# LATIN CAPITAL LETTER A WITH RING ABOVE
+	0x0068: 0x00c7,	# LATIN CAPITAL LETTER C WITH CEDILLA
+	0x0069: 0x00d1,	# LATIN CAPITAL LETTER N WITH TILDE
+	0x006a: 0x00a6,	# BROKEN BAR
+	0x006b: 0x002c,	# COMMA
+	0x006c: 0x0025,	# PERCENT SIGN
+	0x006d: 0x005f,	# LOW LINE
+	0x006e: 0x003e,	# GREATER-THAN SIGN
+	0x006f: 0x003f,	# QUESTION MARK
+	0x0070: 0x00f8,	# LATIN SMALL LETTER O WITH STROKE
+	0x0071: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0072: 0x00ca,	# LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+	0x0073: 0x00cb,	# LATIN CAPITAL LETTER E WITH DIAERESIS
+	0x0074: 0x00c8,	# LATIN CAPITAL LETTER E WITH GRAVE
+	0x0075: 0x00cd,	# LATIN CAPITAL LETTER I WITH ACUTE
+	0x0076: 0x00ce,	# LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+	0x0077: 0x00cf,	# LATIN CAPITAL LETTER I WITH DIAERESIS
+	0x0078: 0x00cc,	# LATIN CAPITAL LETTER I WITH GRAVE
+	0x0079: 0x0060,	# GRAVE ACCENT
+	0x007a: 0x003a,	# COLON
+	0x007b: 0x0023,	# NUMBER SIGN
+	0x007c: 0x0040,	# COMMERCIAL AT
+	0x007d: 0x0027,	# APOSTROPHE
+	0x007e: 0x003d,	# EQUALS SIGN
+	0x007f: 0x0022,	# QUOTATION MARK
+	0x0080: 0x00d8,	# LATIN CAPITAL LETTER O WITH STROKE
+	0x0081: 0x0061,	# LATIN SMALL LETTER A
+	0x0082: 0x0062,	# LATIN SMALL LETTER B
+	0x0083: 0x0063,	# LATIN SMALL LETTER C
+	0x0084: 0x0064,	# LATIN SMALL LETTER D
+	0x0085: 0x0065,	# LATIN SMALL LETTER E
+	0x0086: 0x0066,	# LATIN SMALL LETTER F
+	0x0087: 0x0067,	# LATIN SMALL LETTER G
+	0x0088: 0x0068,	# LATIN SMALL LETTER H
+	0x0089: 0x0069,	# LATIN SMALL LETTER I
+	0x008a: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x008b: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x008c: 0x00f0,	# LATIN SMALL LETTER ETH (ICELANDIC)
+	0x008d: 0x00fd,	# LATIN SMALL LETTER Y WITH ACUTE
+	0x008e: 0x00fe,	# LATIN SMALL LETTER THORN (ICELANDIC)
+	0x008f: 0x00b1,	# PLUS-MINUS SIGN
+	0x0090: 0x00b0,	# DEGREE SIGN
+	0x0091: 0x006a,	# LATIN SMALL LETTER J
+	0x0092: 0x006b,	# LATIN SMALL LETTER K
+	0x0093: 0x006c,	# LATIN SMALL LETTER L
+	0x0094: 0x006d,	# LATIN SMALL LETTER M
+	0x0095: 0x006e,	# LATIN SMALL LETTER N
+	0x0096: 0x006f,	# LATIN SMALL LETTER O
+	0x0097: 0x0070,	# LATIN SMALL LETTER P
+	0x0098: 0x0071,	# LATIN SMALL LETTER Q
+	0x0099: 0x0072,	# LATIN SMALL LETTER R
+	0x009a: 0x00aa,	# FEMININE ORDINAL INDICATOR
+	0x009b: 0x00ba,	# MASCULINE ORDINAL INDICATOR
+	0x009c: 0x00e6,	# LATIN SMALL LIGATURE AE
+	0x009d: 0x00b8,	# CEDILLA
+	0x009e: 0x00c6,	# LATIN CAPITAL LIGATURE AE
+	0x009f: 0x00a4,	# CURRENCY SIGN
+	0x00a0: 0x00b5,	# MICRO SIGN
+	0x00a1: 0x007e,	# TILDE
+	0x00a2: 0x0073,	# LATIN SMALL LETTER S
+	0x00a3: 0x0074,	# LATIN SMALL LETTER T
+	0x00a4: 0x0075,	# LATIN SMALL LETTER U
+	0x00a5: 0x0076,	# LATIN SMALL LETTER V
+	0x00a6: 0x0077,	# LATIN SMALL LETTER W
+	0x00a7: 0x0078,	# LATIN SMALL LETTER X
+	0x00a8: 0x0079,	# LATIN SMALL LETTER Y
+	0x00a9: 0x007a,	# LATIN SMALL LETTER Z
+	0x00aa: 0x00a1,	# INVERTED EXCLAMATION MARK
+	0x00ab: 0x00bf,	# INVERTED QUESTION MARK
+	0x00ac: 0x00d0,	# LATIN CAPITAL LETTER ETH (ICELANDIC)
+	0x00ad: 0x00dd,	# LATIN CAPITAL LETTER Y WITH ACUTE
+	0x00ae: 0x00de,	# LATIN CAPITAL LETTER THORN (ICELANDIC)
+	0x00af: 0x00ae,	# REGISTERED SIGN
+	0x00b0: 0x00a2,	# CENT SIGN
+	0x00b1: 0x00a3,	# POUND SIGN
+	0x00b2: 0x00a5,	# YEN SIGN
+	0x00b3: 0x00b7,	# MIDDLE DOT
+	0x00b4: 0x00a9,	# COPYRIGHT SIGN
+	0x00b5: 0x00a7,	# SECTION SIGN
+	0x00b7: 0x00bc,	# VULGAR FRACTION ONE QUARTER
+	0x00b8: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00b9: 0x00be,	# VULGAR FRACTION THREE QUARTERS
+	0x00ba: 0x00ac,	# NOT SIGN
+	0x00bb: 0x007c,	# VERTICAL LINE
+	0x00bc: 0x00af,	# MACRON
+	0x00bd: 0x00a8,	# DIAERESIS
+	0x00be: 0x00b4,	# ACUTE ACCENT
+	0x00bf: 0x00d7,	# MULTIPLICATION SIGN
+	0x00c0: 0x007b,	# LEFT CURLY BRACKET
+	0x00c1: 0x0041,	# LATIN CAPITAL LETTER A
+	0x00c2: 0x0042,	# LATIN CAPITAL LETTER B
+	0x00c3: 0x0043,	# LATIN CAPITAL LETTER C
+	0x00c4: 0x0044,	# LATIN CAPITAL LETTER D
+	0x00c5: 0x0045,	# LATIN CAPITAL LETTER E
+	0x00c6: 0x0046,	# LATIN CAPITAL LETTER F
+	0x00c7: 0x0047,	# LATIN CAPITAL LETTER G
+	0x00c8: 0x0048,	# LATIN CAPITAL LETTER H
+	0x00c9: 0x0049,	# LATIN CAPITAL LETTER I
+	0x00ca: 0x00ad,	# SOFT HYPHEN
+	0x00cb: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x00cc: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x00cd: 0x00f2,	# LATIN SMALL LETTER O WITH GRAVE
+	0x00ce: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x00cf: 0x00f5,	# LATIN SMALL LETTER O WITH TILDE
+	0x00d0: 0x007d,	# RIGHT CURLY BRACKET
+	0x00d1: 0x004a,	# LATIN CAPITAL LETTER J
+	0x00d2: 0x004b,	# LATIN CAPITAL LETTER K
+	0x00d3: 0x004c,	# LATIN CAPITAL LETTER L
+	0x00d4: 0x004d,	# LATIN CAPITAL LETTER M
+	0x00d5: 0x004e,	# LATIN CAPITAL LETTER N
+	0x00d6: 0x004f,	# LATIN CAPITAL LETTER O
+	0x00d7: 0x0050,	# LATIN CAPITAL LETTER P
+	0x00d8: 0x0051,	# LATIN CAPITAL LETTER Q
+	0x00d9: 0x0052,	# LATIN CAPITAL LETTER R
+	0x00da: 0x00b9,	# SUPERSCRIPT ONE
+	0x00db: 0x00fb,	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+	0x00dc: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x00dd: 0x00f9,	# LATIN SMALL LETTER U WITH GRAVE
+	0x00de: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x00df: 0x00ff,	# LATIN SMALL LETTER Y WITH DIAERESIS
+	0x00e0: 0x005c,	# REVERSE SOLIDUS
+	0x00e1: 0x00f7,	# DIVISION SIGN
+	0x00e2: 0x0053,	# LATIN CAPITAL LETTER S
+	0x00e3: 0x0054,	# LATIN CAPITAL LETTER T
+	0x00e4: 0x0055,	# LATIN CAPITAL LETTER U
+	0x00e5: 0x0056,	# LATIN CAPITAL LETTER V
+	0x00e6: 0x0057,	# LATIN CAPITAL LETTER W
+	0x00e7: 0x0058,	# LATIN CAPITAL LETTER X
+	0x00e8: 0x0059,	# LATIN CAPITAL LETTER Y
+	0x00e9: 0x005a,	# LATIN CAPITAL LETTER Z
+	0x00ea: 0x00b2,	# SUPERSCRIPT TWO
+	0x00eb: 0x00d4,	# LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+	0x00ec: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x00ed: 0x00d2,	# LATIN CAPITAL LETTER O WITH GRAVE
+	0x00ee: 0x00d3,	# LATIN CAPITAL LETTER O WITH ACUTE
+	0x00ef: 0x00d5,	# LATIN CAPITAL LETTER O WITH TILDE
+	0x00f0: 0x0030,	# DIGIT ZERO
+	0x00f1: 0x0031,	# DIGIT ONE
+	0x00f2: 0x0032,	# DIGIT TWO
+	0x00f3: 0x0033,	# DIGIT THREE
+	0x00f4: 0x0034,	# DIGIT FOUR
+	0x00f5: 0x0035,	# DIGIT FIVE
+	0x00f6: 0x0036,	# DIGIT SIX
+	0x00f7: 0x0037,	# DIGIT SEVEN
+	0x00f8: 0x0038,	# DIGIT EIGHT
+	0x00f9: 0x0039,	# DIGIT NINE
+	0x00fa: 0x00b3,	# SUPERSCRIPT THREE
+	0x00fb: 0x00db,	# LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+	0x00fc: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x00fd: 0x00d9,	# LATIN CAPITAL LETTER U WITH GRAVE
+	0x00fe: 0x00da,	# LATIN CAPITAL LETTER U WITH ACUTE
+	0x00ff: 0x009f,	# CONTROL
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp737.py b/Lib/encodings/cp737.py
new file mode 100644
index 0000000..e55b3dd
--- /dev/null
+++ b/Lib/encodings/cp737.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'CP737.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x0391,	# GREEK CAPITAL LETTER ALPHA
+	0x0081: 0x0392,	# GREEK CAPITAL LETTER BETA
+	0x0082: 0x0393,	# GREEK CAPITAL LETTER GAMMA
+	0x0083: 0x0394,	# GREEK CAPITAL LETTER DELTA
+	0x0084: 0x0395,	# GREEK CAPITAL LETTER EPSILON
+	0x0085: 0x0396,	# GREEK CAPITAL LETTER ZETA
+	0x0086: 0x0397,	# GREEK CAPITAL LETTER ETA
+	0x0087: 0x0398,	# GREEK CAPITAL LETTER THETA
+	0x0088: 0x0399,	# GREEK CAPITAL LETTER IOTA
+	0x0089: 0x039a,	# GREEK CAPITAL LETTER KAPPA
+	0x008a: 0x039b,	# GREEK CAPITAL LETTER LAMDA
+	0x008b: 0x039c,	# GREEK CAPITAL LETTER MU
+	0x008c: 0x039d,	# GREEK CAPITAL LETTER NU
+	0x008d: 0x039e,	# GREEK CAPITAL LETTER XI
+	0x008e: 0x039f,	# GREEK CAPITAL LETTER OMICRON
+	0x008f: 0x03a0,	# GREEK CAPITAL LETTER PI
+	0x0090: 0x03a1,	# GREEK CAPITAL LETTER RHO
+	0x0091: 0x03a3,	# GREEK CAPITAL LETTER SIGMA
+	0x0092: 0x03a4,	# GREEK CAPITAL LETTER TAU
+	0x0093: 0x03a5,	# GREEK CAPITAL LETTER UPSILON
+	0x0094: 0x03a6,	# GREEK CAPITAL LETTER PHI
+	0x0095: 0x03a7,	# GREEK CAPITAL LETTER CHI
+	0x0096: 0x03a8,	# GREEK CAPITAL LETTER PSI
+	0x0097: 0x03a9,	# GREEK CAPITAL LETTER OMEGA
+	0x0098: 0x03b1,	# GREEK SMALL LETTER ALPHA
+	0x0099: 0x03b2,	# GREEK SMALL LETTER BETA
+	0x009a: 0x03b3,	# GREEK SMALL LETTER GAMMA
+	0x009b: 0x03b4,	# GREEK SMALL LETTER DELTA
+	0x009c: 0x03b5,	# GREEK SMALL LETTER EPSILON
+	0x009d: 0x03b6,	# GREEK SMALL LETTER ZETA
+	0x009e: 0x03b7,	# GREEK SMALL LETTER ETA
+	0x009f: 0x03b8,	# GREEK SMALL LETTER THETA
+	0x00a0: 0x03b9,	# GREEK SMALL LETTER IOTA
+	0x00a1: 0x03ba,	# GREEK SMALL LETTER KAPPA
+	0x00a2: 0x03bb,	# GREEK SMALL LETTER LAMDA
+	0x00a3: 0x03bc,	# GREEK SMALL LETTER MU
+	0x00a4: 0x03bd,	# GREEK SMALL LETTER NU
+	0x00a5: 0x03be,	# GREEK SMALL LETTER XI
+	0x00a6: 0x03bf,	# GREEK SMALL LETTER OMICRON
+	0x00a7: 0x03c0,	# GREEK SMALL LETTER PI
+	0x00a8: 0x03c1,	# GREEK SMALL LETTER RHO
+	0x00a9: 0x03c3,	# GREEK SMALL LETTER SIGMA
+	0x00aa: 0x03c2,	# GREEK SMALL LETTER FINAL SIGMA
+	0x00ab: 0x03c4,	# GREEK SMALL LETTER TAU
+	0x00ac: 0x03c5,	# GREEK SMALL LETTER UPSILON
+	0x00ad: 0x03c6,	# GREEK SMALL LETTER PHI
+	0x00ae: 0x03c7,	# GREEK SMALL LETTER CHI
+	0x00af: 0x03c8,	# GREEK SMALL LETTER PSI
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: 0x2561,	# BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+	0x00b6: 0x2562,	# BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+	0x00b7: 0x2556,	# BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+	0x00b8: 0x2555,	# BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x255c,	# BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+	0x00be: 0x255b,	# BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: 0x255e,	# BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+	0x00c7: 0x255f,	# BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x2567,	# BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+	0x00d0: 0x2568,	# BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+	0x00d1: 0x2564,	# BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+	0x00d2: 0x2565,	# BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+	0x00d3: 0x2559,	# BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+	0x00d4: 0x2558,	# BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+	0x00d5: 0x2552,	# BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+	0x00d6: 0x2553,	# BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+	0x00d7: 0x256b,	# BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+	0x00d8: 0x256a,	# BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x258c,	# LEFT HALF BLOCK
+	0x00de: 0x2590,	# RIGHT HALF BLOCK
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: 0x03c9,	# GREEK SMALL LETTER OMEGA
+	0x00e1: 0x03ac,	# GREEK SMALL LETTER ALPHA WITH TONOS
+	0x00e2: 0x03ad,	# GREEK SMALL LETTER EPSILON WITH TONOS
+	0x00e3: 0x03ae,	# GREEK SMALL LETTER ETA WITH TONOS
+	0x00e4: 0x03ca,	# GREEK SMALL LETTER IOTA WITH DIALYTIKA
+	0x00e5: 0x03af,	# GREEK SMALL LETTER IOTA WITH TONOS
+	0x00e6: 0x03cc,	# GREEK SMALL LETTER OMICRON WITH TONOS
+	0x00e7: 0x03cd,	# GREEK SMALL LETTER UPSILON WITH TONOS
+	0x00e8: 0x03cb,	# GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+	0x00e9: 0x03ce,	# GREEK SMALL LETTER OMEGA WITH TONOS
+	0x00ea: 0x0386,	# GREEK CAPITAL LETTER ALPHA WITH TONOS
+	0x00eb: 0x0388,	# GREEK CAPITAL LETTER EPSILON WITH TONOS
+	0x00ec: 0x0389,	# GREEK CAPITAL LETTER ETA WITH TONOS
+	0x00ed: 0x038a,	# GREEK CAPITAL LETTER IOTA WITH TONOS
+	0x00ee: 0x038c,	# GREEK CAPITAL LETTER OMICRON WITH TONOS
+	0x00ef: 0x038e,	# GREEK CAPITAL LETTER UPSILON WITH TONOS
+	0x00f0: 0x038f,	# GREEK CAPITAL LETTER OMEGA WITH TONOS
+	0x00f1: 0x00b1,	# PLUS-MINUS SIGN
+	0x00f2: 0x2265,	# GREATER-THAN OR EQUAL TO
+	0x00f3: 0x2264,	# LESS-THAN OR EQUAL TO
+	0x00f4: 0x03aa,	# GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+	0x00f5: 0x03ab,	# GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+	0x00f6: 0x00f7,	# DIVISION SIGN
+	0x00f7: 0x2248,	# ALMOST EQUAL TO
+	0x00f8: 0x00b0,	# DEGREE SIGN
+	0x00f9: 0x2219,	# BULLET OPERATOR
+	0x00fa: 0x00b7,	# MIDDLE DOT
+	0x00fb: 0x221a,	# SQUARE ROOT
+	0x00fc: 0x207f,	# SUPERSCRIPT LATIN SMALL LETTER N
+	0x00fd: 0x00b2,	# SUPERSCRIPT TWO
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp775.py b/Lib/encodings/cp775.py
new file mode 100644
index 0000000..e43ce2d1
--- /dev/null
+++ b/Lib/encodings/cp775.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'CP775.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x0106,	# LATIN CAPITAL LETTER C WITH ACUTE
+	0x0081: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x0082: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x0083: 0x0101,	# LATIN SMALL LETTER A WITH MACRON
+	0x0084: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x0085: 0x0123,	# LATIN SMALL LETTER G WITH CEDILLA
+	0x0086: 0x00e5,	# LATIN SMALL LETTER A WITH RING ABOVE
+	0x0087: 0x0107,	# LATIN SMALL LETTER C WITH ACUTE
+	0x0088: 0x0142,	# LATIN SMALL LETTER L WITH STROKE
+	0x0089: 0x0113,	# LATIN SMALL LETTER E WITH MACRON
+	0x008a: 0x0156,	# LATIN CAPITAL LETTER R WITH CEDILLA
+	0x008b: 0x0157,	# LATIN SMALL LETTER R WITH CEDILLA
+	0x008c: 0x012b,	# LATIN SMALL LETTER I WITH MACRON
+	0x008d: 0x0179,	# LATIN CAPITAL LETTER Z WITH ACUTE
+	0x008e: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x008f: 0x00c5,	# LATIN CAPITAL LETTER A WITH RING ABOVE
+	0x0090: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0091: 0x00e6,	# LATIN SMALL LIGATURE AE
+	0x0092: 0x00c6,	# LATIN CAPITAL LIGATURE AE
+	0x0093: 0x014d,	# LATIN SMALL LETTER O WITH MACRON
+	0x0094: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x0095: 0x0122,	# LATIN CAPITAL LETTER G WITH CEDILLA
+	0x0096: 0x00a2,	# CENT SIGN
+	0x0097: 0x015a,	# LATIN CAPITAL LETTER S WITH ACUTE
+	0x0098: 0x015b,	# LATIN SMALL LETTER S WITH ACUTE
+	0x0099: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x009a: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x009b: 0x00f8,	# LATIN SMALL LETTER O WITH STROKE
+	0x009c: 0x00a3,	# POUND SIGN
+	0x009d: 0x00d8,	# LATIN CAPITAL LETTER O WITH STROKE
+	0x009e: 0x00d7,	# MULTIPLICATION SIGN
+	0x009f: 0x00a4,	# CURRENCY SIGN
+	0x00a0: 0x0100,	# LATIN CAPITAL LETTER A WITH MACRON
+	0x00a1: 0x012a,	# LATIN CAPITAL LETTER I WITH MACRON
+	0x00a2: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x00a3: 0x017b,	# LATIN CAPITAL LETTER Z WITH DOT ABOVE
+	0x00a4: 0x017c,	# LATIN SMALL LETTER Z WITH DOT ABOVE
+	0x00a5: 0x017a,	# LATIN SMALL LETTER Z WITH ACUTE
+	0x00a6: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x00a7: 0x00a6,	# BROKEN BAR
+	0x00a8: 0x00a9,	# COPYRIGHT SIGN
+	0x00a9: 0x00ae,	# REGISTERED SIGN
+	0x00aa: 0x00ac,	# NOT SIGN
+	0x00ab: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00ac: 0x00bc,	# VULGAR FRACTION ONE QUARTER
+	0x00ad: 0x0141,	# LATIN CAPITAL LETTER L WITH STROKE
+	0x00ae: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00af: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: 0x0104,	# LATIN CAPITAL LETTER A WITH OGONEK
+	0x00b6: 0x010c,	# LATIN CAPITAL LETTER C WITH CARON
+	0x00b7: 0x0118,	# LATIN CAPITAL LETTER E WITH OGONEK
+	0x00b8: 0x0116,	# LATIN CAPITAL LETTER E WITH DOT ABOVE
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x012e,	# LATIN CAPITAL LETTER I WITH OGONEK
+	0x00be: 0x0160,	# LATIN CAPITAL LETTER S WITH CARON
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: 0x0172,	# LATIN CAPITAL LETTER U WITH OGONEK
+	0x00c7: 0x016a,	# LATIN CAPITAL LETTER U WITH MACRON
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x017d,	# LATIN CAPITAL LETTER Z WITH CARON
+	0x00d0: 0x0105,	# LATIN SMALL LETTER A WITH OGONEK
+	0x00d1: 0x010d,	# LATIN SMALL LETTER C WITH CARON
+	0x00d2: 0x0119,	# LATIN SMALL LETTER E WITH OGONEK
+	0x00d3: 0x0117,	# LATIN SMALL LETTER E WITH DOT ABOVE
+	0x00d4: 0x012f,	# LATIN SMALL LETTER I WITH OGONEK
+	0x00d5: 0x0161,	# LATIN SMALL LETTER S WITH CARON
+	0x00d6: 0x0173,	# LATIN SMALL LETTER U WITH OGONEK
+	0x00d7: 0x016b,	# LATIN SMALL LETTER U WITH MACRON
+	0x00d8: 0x017e,	# LATIN SMALL LETTER Z WITH CARON
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x258c,	# LEFT HALF BLOCK
+	0x00de: 0x2590,	# RIGHT HALF BLOCK
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: 0x00d3,	# LATIN CAPITAL LETTER O WITH ACUTE
+	0x00e1: 0x00df,	# LATIN SMALL LETTER SHARP S (GERMAN)
+	0x00e2: 0x014c,	# LATIN CAPITAL LETTER O WITH MACRON
+	0x00e3: 0x0143,	# LATIN CAPITAL LETTER N WITH ACUTE
+	0x00e4: 0x00f5,	# LATIN SMALL LETTER O WITH TILDE
+	0x00e5: 0x00d5,	# LATIN CAPITAL LETTER O WITH TILDE
+	0x00e6: 0x00b5,	# MICRO SIGN
+	0x00e7: 0x0144,	# LATIN SMALL LETTER N WITH ACUTE
+	0x00e8: 0x0136,	# LATIN CAPITAL LETTER K WITH CEDILLA
+	0x00e9: 0x0137,	# LATIN SMALL LETTER K WITH CEDILLA
+	0x00ea: 0x013b,	# LATIN CAPITAL LETTER L WITH CEDILLA
+	0x00eb: 0x013c,	# LATIN SMALL LETTER L WITH CEDILLA
+	0x00ec: 0x0146,	# LATIN SMALL LETTER N WITH CEDILLA
+	0x00ed: 0x0112,	# LATIN CAPITAL LETTER E WITH MACRON
+	0x00ee: 0x0145,	# LATIN CAPITAL LETTER N WITH CEDILLA
+	0x00ef: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x00f0: 0x00ad,	# SOFT HYPHEN
+	0x00f1: 0x00b1,	# PLUS-MINUS SIGN
+	0x00f2: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x00f3: 0x00be,	# VULGAR FRACTION THREE QUARTERS
+	0x00f4: 0x00b6,	# PILCROW SIGN
+	0x00f5: 0x00a7,	# SECTION SIGN
+	0x00f6: 0x00f7,	# DIVISION SIGN
+	0x00f7: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x00f8: 0x00b0,	# DEGREE SIGN
+	0x00f9: 0x2219,	# BULLET OPERATOR
+	0x00fa: 0x00b7,	# MIDDLE DOT
+	0x00fb: 0x00b9,	# SUPERSCRIPT ONE
+	0x00fc: 0x00b3,	# SUPERSCRIPT THREE
+	0x00fd: 0x00b2,	# SUPERSCRIPT TWO
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp850.py b/Lib/encodings/cp850.py
new file mode 100644
index 0000000..cb0918c
--- /dev/null
+++ b/Lib/encodings/cp850.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'CP850.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x00c7,	# LATIN CAPITAL LETTER C WITH CEDILLA
+	0x0081: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x0082: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x0083: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x0084: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x0085: 0x00e0,	# LATIN SMALL LETTER A WITH GRAVE
+	0x0086: 0x00e5,	# LATIN SMALL LETTER A WITH RING ABOVE
+	0x0087: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x0088: 0x00ea,	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+	0x0089: 0x00eb,	# LATIN SMALL LETTER E WITH DIAERESIS
+	0x008a: 0x00e8,	# LATIN SMALL LETTER E WITH GRAVE
+	0x008b: 0x00ef,	# LATIN SMALL LETTER I WITH DIAERESIS
+	0x008c: 0x00ee,	# LATIN SMALL LETTER I WITH CIRCUMFLEX
+	0x008d: 0x00ec,	# LATIN SMALL LETTER I WITH GRAVE
+	0x008e: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x008f: 0x00c5,	# LATIN CAPITAL LETTER A WITH RING ABOVE
+	0x0090: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0091: 0x00e6,	# LATIN SMALL LIGATURE AE
+	0x0092: 0x00c6,	# LATIN CAPITAL LIGATURE AE
+	0x0093: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x0094: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x0095: 0x00f2,	# LATIN SMALL LETTER O WITH GRAVE
+	0x0096: 0x00fb,	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+	0x0097: 0x00f9,	# LATIN SMALL LETTER U WITH GRAVE
+	0x0098: 0x00ff,	# LATIN SMALL LETTER Y WITH DIAERESIS
+	0x0099: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x009a: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x009b: 0x00f8,	# LATIN SMALL LETTER O WITH STROKE
+	0x009c: 0x00a3,	# POUND SIGN
+	0x009d: 0x00d8,	# LATIN CAPITAL LETTER O WITH STROKE
+	0x009e: 0x00d7,	# MULTIPLICATION SIGN
+	0x009f: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x00a0: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x00a1: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x00a2: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x00a3: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x00a4: 0x00f1,	# LATIN SMALL LETTER N WITH TILDE
+	0x00a5: 0x00d1,	# LATIN CAPITAL LETTER N WITH TILDE
+	0x00a6: 0x00aa,	# FEMININE ORDINAL INDICATOR
+	0x00a7: 0x00ba,	# MASCULINE ORDINAL INDICATOR
+	0x00a8: 0x00bf,	# INVERTED QUESTION MARK
+	0x00a9: 0x00ae,	# REGISTERED SIGN
+	0x00aa: 0x00ac,	# NOT SIGN
+	0x00ab: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00ac: 0x00bc,	# VULGAR FRACTION ONE QUARTER
+	0x00ad: 0x00a1,	# INVERTED EXCLAMATION MARK
+	0x00ae: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00af: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: 0x00c1,	# LATIN CAPITAL LETTER A WITH ACUTE
+	0x00b6: 0x00c2,	# LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+	0x00b7: 0x00c0,	# LATIN CAPITAL LETTER A WITH GRAVE
+	0x00b8: 0x00a9,	# COPYRIGHT SIGN
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x00a2,	# CENT SIGN
+	0x00be: 0x00a5,	# YEN SIGN
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: 0x00e3,	# LATIN SMALL LETTER A WITH TILDE
+	0x00c7: 0x00c3,	# LATIN CAPITAL LETTER A WITH TILDE
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x00a4,	# CURRENCY SIGN
+	0x00d0: 0x00f0,	# LATIN SMALL LETTER ETH
+	0x00d1: 0x00d0,	# LATIN CAPITAL LETTER ETH
+	0x00d2: 0x00ca,	# LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+	0x00d3: 0x00cb,	# LATIN CAPITAL LETTER E WITH DIAERESIS
+	0x00d4: 0x00c8,	# LATIN CAPITAL LETTER E WITH GRAVE
+	0x00d5: 0x0131,	# LATIN SMALL LETTER DOTLESS I
+	0x00d6: 0x00cd,	# LATIN CAPITAL LETTER I WITH ACUTE
+	0x00d7: 0x00ce,	# LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+	0x00d8: 0x00cf,	# LATIN CAPITAL LETTER I WITH DIAERESIS
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x00a6,	# BROKEN BAR
+	0x00de: 0x00cc,	# LATIN CAPITAL LETTER I WITH GRAVE
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: 0x00d3,	# LATIN CAPITAL LETTER O WITH ACUTE
+	0x00e1: 0x00df,	# LATIN SMALL LETTER SHARP S
+	0x00e2: 0x00d4,	# LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+	0x00e3: 0x00d2,	# LATIN CAPITAL LETTER O WITH GRAVE
+	0x00e4: 0x00f5,	# LATIN SMALL LETTER O WITH TILDE
+	0x00e5: 0x00d5,	# LATIN CAPITAL LETTER O WITH TILDE
+	0x00e6: 0x00b5,	# MICRO SIGN
+	0x00e7: 0x00fe,	# LATIN SMALL LETTER THORN
+	0x00e8: 0x00de,	# LATIN CAPITAL LETTER THORN
+	0x00e9: 0x00da,	# LATIN CAPITAL LETTER U WITH ACUTE
+	0x00ea: 0x00db,	# LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+	0x00eb: 0x00d9,	# LATIN CAPITAL LETTER U WITH GRAVE
+	0x00ec: 0x00fd,	# LATIN SMALL LETTER Y WITH ACUTE
+	0x00ed: 0x00dd,	# LATIN CAPITAL LETTER Y WITH ACUTE
+	0x00ee: 0x00af,	# MACRON
+	0x00ef: 0x00b4,	# ACUTE ACCENT
+	0x00f0: 0x00ad,	# SOFT HYPHEN
+	0x00f1: 0x00b1,	# PLUS-MINUS SIGN
+	0x00f2: 0x2017,	# DOUBLE LOW LINE
+	0x00f3: 0x00be,	# VULGAR FRACTION THREE QUARTERS
+	0x00f4: 0x00b6,	# PILCROW SIGN
+	0x00f5: 0x00a7,	# SECTION SIGN
+	0x00f6: 0x00f7,	# DIVISION SIGN
+	0x00f7: 0x00b8,	# CEDILLA
+	0x00f8: 0x00b0,	# DEGREE SIGN
+	0x00f9: 0x00a8,	# DIAERESIS
+	0x00fa: 0x00b7,	# MIDDLE DOT
+	0x00fb: 0x00b9,	# SUPERSCRIPT ONE
+	0x00fc: 0x00b3,	# SUPERSCRIPT THREE
+	0x00fd: 0x00b2,	# SUPERSCRIPT TWO
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp852.py b/Lib/encodings/cp852.py
new file mode 100644
index 0000000..ba4f142
--- /dev/null
+++ b/Lib/encodings/cp852.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'CP852.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x00c7,	# LATIN CAPITAL LETTER C WITH CEDILLA
+	0x0081: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x0082: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x0083: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x0084: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x0085: 0x016f,	# LATIN SMALL LETTER U WITH RING ABOVE
+	0x0086: 0x0107,	# LATIN SMALL LETTER C WITH ACUTE
+	0x0087: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x0088: 0x0142,	# LATIN SMALL LETTER L WITH STROKE
+	0x0089: 0x00eb,	# LATIN SMALL LETTER E WITH DIAERESIS
+	0x008a: 0x0150,	# LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+	0x008b: 0x0151,	# LATIN SMALL LETTER O WITH DOUBLE ACUTE
+	0x008c: 0x00ee,	# LATIN SMALL LETTER I WITH CIRCUMFLEX
+	0x008d: 0x0179,	# LATIN CAPITAL LETTER Z WITH ACUTE
+	0x008e: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x008f: 0x0106,	# LATIN CAPITAL LETTER C WITH ACUTE
+	0x0090: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0091: 0x0139,	# LATIN CAPITAL LETTER L WITH ACUTE
+	0x0092: 0x013a,	# LATIN SMALL LETTER L WITH ACUTE
+	0x0093: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x0094: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x0095: 0x013d,	# LATIN CAPITAL LETTER L WITH CARON
+	0x0096: 0x013e,	# LATIN SMALL LETTER L WITH CARON
+	0x0097: 0x015a,	# LATIN CAPITAL LETTER S WITH ACUTE
+	0x0098: 0x015b,	# LATIN SMALL LETTER S WITH ACUTE
+	0x0099: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x009a: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x009b: 0x0164,	# LATIN CAPITAL LETTER T WITH CARON
+	0x009c: 0x0165,	# LATIN SMALL LETTER T WITH CARON
+	0x009d: 0x0141,	# LATIN CAPITAL LETTER L WITH STROKE
+	0x009e: 0x00d7,	# MULTIPLICATION SIGN
+	0x009f: 0x010d,	# LATIN SMALL LETTER C WITH CARON
+	0x00a0: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x00a1: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x00a2: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x00a3: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x00a4: 0x0104,	# LATIN CAPITAL LETTER A WITH OGONEK
+	0x00a5: 0x0105,	# LATIN SMALL LETTER A WITH OGONEK
+	0x00a6: 0x017d,	# LATIN CAPITAL LETTER Z WITH CARON
+	0x00a7: 0x017e,	# LATIN SMALL LETTER Z WITH CARON
+	0x00a8: 0x0118,	# LATIN CAPITAL LETTER E WITH OGONEK
+	0x00a9: 0x0119,	# LATIN SMALL LETTER E WITH OGONEK
+	0x00aa: 0x00ac,	# NOT SIGN
+	0x00ab: 0x017a,	# LATIN SMALL LETTER Z WITH ACUTE
+	0x00ac: 0x010c,	# LATIN CAPITAL LETTER C WITH CARON
+	0x00ad: 0x015f,	# LATIN SMALL LETTER S WITH CEDILLA
+	0x00ae: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00af: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: 0x00c1,	# LATIN CAPITAL LETTER A WITH ACUTE
+	0x00b6: 0x00c2,	# LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+	0x00b7: 0x011a,	# LATIN CAPITAL LETTER E WITH CARON
+	0x00b8: 0x015e,	# LATIN CAPITAL LETTER S WITH CEDILLA
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x017b,	# LATIN CAPITAL LETTER Z WITH DOT ABOVE
+	0x00be: 0x017c,	# LATIN SMALL LETTER Z WITH DOT ABOVE
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: 0x0102,	# LATIN CAPITAL LETTER A WITH BREVE
+	0x00c7: 0x0103,	# LATIN SMALL LETTER A WITH BREVE
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x00a4,	# CURRENCY SIGN
+	0x00d0: 0x0111,	# LATIN SMALL LETTER D WITH STROKE
+	0x00d1: 0x0110,	# LATIN CAPITAL LETTER D WITH STROKE
+	0x00d2: 0x010e,	# LATIN CAPITAL LETTER D WITH CARON
+	0x00d3: 0x00cb,	# LATIN CAPITAL LETTER E WITH DIAERESIS
+	0x00d4: 0x010f,	# LATIN SMALL LETTER D WITH CARON
+	0x00d5: 0x0147,	# LATIN CAPITAL LETTER N WITH CARON
+	0x00d6: 0x00cd,	# LATIN CAPITAL LETTER I WITH ACUTE
+	0x00d7: 0x00ce,	# LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+	0x00d8: 0x011b,	# LATIN SMALL LETTER E WITH CARON
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x0162,	# LATIN CAPITAL LETTER T WITH CEDILLA
+	0x00de: 0x016e,	# LATIN CAPITAL LETTER U WITH RING ABOVE
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: 0x00d3,	# LATIN CAPITAL LETTER O WITH ACUTE
+	0x00e1: 0x00df,	# LATIN SMALL LETTER SHARP S
+	0x00e2: 0x00d4,	# LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+	0x00e3: 0x0143,	# LATIN CAPITAL LETTER N WITH ACUTE
+	0x00e4: 0x0144,	# LATIN SMALL LETTER N WITH ACUTE
+	0x00e5: 0x0148,	# LATIN SMALL LETTER N WITH CARON
+	0x00e6: 0x0160,	# LATIN CAPITAL LETTER S WITH CARON
+	0x00e7: 0x0161,	# LATIN SMALL LETTER S WITH CARON
+	0x00e8: 0x0154,	# LATIN CAPITAL LETTER R WITH ACUTE
+	0x00e9: 0x00da,	# LATIN CAPITAL LETTER U WITH ACUTE
+	0x00ea: 0x0155,	# LATIN SMALL LETTER R WITH ACUTE
+	0x00eb: 0x0170,	# LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+	0x00ec: 0x00fd,	# LATIN SMALL LETTER Y WITH ACUTE
+	0x00ed: 0x00dd,	# LATIN CAPITAL LETTER Y WITH ACUTE
+	0x00ee: 0x0163,	# LATIN SMALL LETTER T WITH CEDILLA
+	0x00ef: 0x00b4,	# ACUTE ACCENT
+	0x00f0: 0x00ad,	# SOFT HYPHEN
+	0x00f1: 0x02dd,	# DOUBLE ACUTE ACCENT
+	0x00f2: 0x02db,	# OGONEK
+	0x00f3: 0x02c7,	# CARON
+	0x00f4: 0x02d8,	# BREVE
+	0x00f5: 0x00a7,	# SECTION SIGN
+	0x00f6: 0x00f7,	# DIVISION SIGN
+	0x00f7: 0x00b8,	# CEDILLA
+	0x00f8: 0x00b0,	# DEGREE SIGN
+	0x00f9: 0x00a8,	# DIAERESIS
+	0x00fa: 0x02d9,	# DOT ABOVE
+	0x00fb: 0x0171,	# LATIN SMALL LETTER U WITH DOUBLE ACUTE
+	0x00fc: 0x0158,	# LATIN CAPITAL LETTER R WITH CARON
+	0x00fd: 0x0159,	# LATIN SMALL LETTER R WITH CARON
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp855.py b/Lib/encodings/cp855.py
new file mode 100644
index 0000000..c967bcf
--- /dev/null
+++ b/Lib/encodings/cp855.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'CP855.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x0452,	# CYRILLIC SMALL LETTER DJE
+	0x0081: 0x0402,	# CYRILLIC CAPITAL LETTER DJE
+	0x0082: 0x0453,	# CYRILLIC SMALL LETTER GJE
+	0x0083: 0x0403,	# CYRILLIC CAPITAL LETTER GJE
+	0x0084: 0x0451,	# CYRILLIC SMALL LETTER IO
+	0x0085: 0x0401,	# CYRILLIC CAPITAL LETTER IO
+	0x0086: 0x0454,	# CYRILLIC SMALL LETTER UKRAINIAN IE
+	0x0087: 0x0404,	# CYRILLIC CAPITAL LETTER UKRAINIAN IE
+	0x0088: 0x0455,	# CYRILLIC SMALL LETTER DZE
+	0x0089: 0x0405,	# CYRILLIC CAPITAL LETTER DZE
+	0x008a: 0x0456,	# CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+	0x008b: 0x0406,	# CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+	0x008c: 0x0457,	# CYRILLIC SMALL LETTER YI
+	0x008d: 0x0407,	# CYRILLIC CAPITAL LETTER YI
+	0x008e: 0x0458,	# CYRILLIC SMALL LETTER JE
+	0x008f: 0x0408,	# CYRILLIC CAPITAL LETTER JE
+	0x0090: 0x0459,	# CYRILLIC SMALL LETTER LJE
+	0x0091: 0x0409,	# CYRILLIC CAPITAL LETTER LJE
+	0x0092: 0x045a,	# CYRILLIC SMALL LETTER NJE
+	0x0093: 0x040a,	# CYRILLIC CAPITAL LETTER NJE
+	0x0094: 0x045b,	# CYRILLIC SMALL LETTER TSHE
+	0x0095: 0x040b,	# CYRILLIC CAPITAL LETTER TSHE
+	0x0096: 0x045c,	# CYRILLIC SMALL LETTER KJE
+	0x0097: 0x040c,	# CYRILLIC CAPITAL LETTER KJE
+	0x0098: 0x045e,	# CYRILLIC SMALL LETTER SHORT U
+	0x0099: 0x040e,	# CYRILLIC CAPITAL LETTER SHORT U
+	0x009a: 0x045f,	# CYRILLIC SMALL LETTER DZHE
+	0x009b: 0x040f,	# CYRILLIC CAPITAL LETTER DZHE
+	0x009c: 0x044e,	# CYRILLIC SMALL LETTER YU
+	0x009d: 0x042e,	# CYRILLIC CAPITAL LETTER YU
+	0x009e: 0x044a,	# CYRILLIC SMALL LETTER HARD SIGN
+	0x009f: 0x042a,	# CYRILLIC CAPITAL LETTER HARD SIGN
+	0x00a0: 0x0430,	# CYRILLIC SMALL LETTER A
+	0x00a1: 0x0410,	# CYRILLIC CAPITAL LETTER A
+	0x00a2: 0x0431,	# CYRILLIC SMALL LETTER BE
+	0x00a3: 0x0411,	# CYRILLIC CAPITAL LETTER BE
+	0x00a4: 0x0446,	# CYRILLIC SMALL LETTER TSE
+	0x00a5: 0x0426,	# CYRILLIC CAPITAL LETTER TSE
+	0x00a6: 0x0434,	# CYRILLIC SMALL LETTER DE
+	0x00a7: 0x0414,	# CYRILLIC CAPITAL LETTER DE
+	0x00a8: 0x0435,	# CYRILLIC SMALL LETTER IE
+	0x00a9: 0x0415,	# CYRILLIC CAPITAL LETTER IE
+	0x00aa: 0x0444,	# CYRILLIC SMALL LETTER EF
+	0x00ab: 0x0424,	# CYRILLIC CAPITAL LETTER EF
+	0x00ac: 0x0433,	# CYRILLIC SMALL LETTER GHE
+	0x00ad: 0x0413,	# CYRILLIC CAPITAL LETTER GHE
+	0x00ae: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00af: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: 0x0445,	# CYRILLIC SMALL LETTER HA
+	0x00b6: 0x0425,	# CYRILLIC CAPITAL LETTER HA
+	0x00b7: 0x0438,	# CYRILLIC SMALL LETTER I
+	0x00b8: 0x0418,	# CYRILLIC CAPITAL LETTER I
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x0439,	# CYRILLIC SMALL LETTER SHORT I
+	0x00be: 0x0419,	# CYRILLIC CAPITAL LETTER SHORT I
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: 0x043a,	# CYRILLIC SMALL LETTER KA
+	0x00c7: 0x041a,	# CYRILLIC CAPITAL LETTER KA
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x00a4,	# CURRENCY SIGN
+	0x00d0: 0x043b,	# CYRILLIC SMALL LETTER EL
+	0x00d1: 0x041b,	# CYRILLIC CAPITAL LETTER EL
+	0x00d2: 0x043c,	# CYRILLIC SMALL LETTER EM
+	0x00d3: 0x041c,	# CYRILLIC CAPITAL LETTER EM
+	0x00d4: 0x043d,	# CYRILLIC SMALL LETTER EN
+	0x00d5: 0x041d,	# CYRILLIC CAPITAL LETTER EN
+	0x00d6: 0x043e,	# CYRILLIC SMALL LETTER O
+	0x00d7: 0x041e,	# CYRILLIC CAPITAL LETTER O
+	0x00d8: 0x043f,	# CYRILLIC SMALL LETTER PE
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x041f,	# CYRILLIC CAPITAL LETTER PE
+	0x00de: 0x044f,	# CYRILLIC SMALL LETTER YA
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: 0x042f,	# CYRILLIC CAPITAL LETTER YA
+	0x00e1: 0x0440,	# CYRILLIC SMALL LETTER ER
+	0x00e2: 0x0420,	# CYRILLIC CAPITAL LETTER ER
+	0x00e3: 0x0441,	# CYRILLIC SMALL LETTER ES
+	0x00e4: 0x0421,	# CYRILLIC CAPITAL LETTER ES
+	0x00e5: 0x0442,	# CYRILLIC SMALL LETTER TE
+	0x00e6: 0x0422,	# CYRILLIC CAPITAL LETTER TE
+	0x00e7: 0x0443,	# CYRILLIC SMALL LETTER U
+	0x00e8: 0x0423,	# CYRILLIC CAPITAL LETTER U
+	0x00e9: 0x0436,	# CYRILLIC SMALL LETTER ZHE
+	0x00ea: 0x0416,	# CYRILLIC CAPITAL LETTER ZHE
+	0x00eb: 0x0432,	# CYRILLIC SMALL LETTER VE
+	0x00ec: 0x0412,	# CYRILLIC CAPITAL LETTER VE
+	0x00ed: 0x044c,	# CYRILLIC SMALL LETTER SOFT SIGN
+	0x00ee: 0x042c,	# CYRILLIC CAPITAL LETTER SOFT SIGN
+	0x00ef: 0x2116,	# NUMERO SIGN
+	0x00f0: 0x00ad,	# SOFT HYPHEN
+	0x00f1: 0x044b,	# CYRILLIC SMALL LETTER YERU
+	0x00f2: 0x042b,	# CYRILLIC CAPITAL LETTER YERU
+	0x00f3: 0x0437,	# CYRILLIC SMALL LETTER ZE
+	0x00f4: 0x0417,	# CYRILLIC CAPITAL LETTER ZE
+	0x00f5: 0x0448,	# CYRILLIC SMALL LETTER SHA
+	0x00f6: 0x0428,	# CYRILLIC CAPITAL LETTER SHA
+	0x00f7: 0x044d,	# CYRILLIC SMALL LETTER E
+	0x00f8: 0x042d,	# CYRILLIC CAPITAL LETTER E
+	0x00f9: 0x0449,	# CYRILLIC SMALL LETTER SHCHA
+	0x00fa: 0x0429,	# CYRILLIC CAPITAL LETTER SHCHA
+	0x00fb: 0x0447,	# CYRILLIC SMALL LETTER CHE
+	0x00fc: 0x0427,	# CYRILLIC CAPITAL LETTER CHE
+	0x00fd: 0x00a7,	# SECTION SIGN
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp856.py b/Lib/encodings/cp856.py
new file mode 100644
index 0000000..a0aa4c1
--- /dev/null
+++ b/Lib/encodings/cp856.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'CP856.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x05d0,	# HEBREW LETTER ALEF
+	0x0081: 0x05d1,	# HEBREW LETTER BET
+	0x0082: 0x05d2,	# HEBREW LETTER GIMEL
+	0x0083: 0x05d3,	# HEBREW LETTER DALET
+	0x0084: 0x05d4,	# HEBREW LETTER HE
+	0x0085: 0x05d5,	# HEBREW LETTER VAV
+	0x0086: 0x05d6,	# HEBREW LETTER ZAYIN
+	0x0087: 0x05d7,	# HEBREW LETTER HET
+	0x0088: 0x05d8,	# HEBREW LETTER TET
+	0x0089: 0x05d9,	# HEBREW LETTER YOD
+	0x008a: 0x05da,	# HEBREW LETTER FINAL KAF
+	0x008b: 0x05db,	# HEBREW LETTER KAF
+	0x008c: 0x05dc,	# HEBREW LETTER LAMED
+	0x008d: 0x05dd,	# HEBREW LETTER FINAL MEM
+	0x008e: 0x05de,	# HEBREW LETTER MEM
+	0x008f: 0x05df,	# HEBREW LETTER FINAL NUN
+	0x0090: 0x05e0,	# HEBREW LETTER NUN
+	0x0091: 0x05e1,	# HEBREW LETTER SAMEKH
+	0x0092: 0x05e2,	# HEBREW LETTER AYIN
+	0x0093: 0x05e3,	# HEBREW LETTER FINAL PE
+	0x0094: 0x05e4,	# HEBREW LETTER PE
+	0x0095: 0x05e5,	# HEBREW LETTER FINAL TSADI
+	0x0096: 0x05e6,	# HEBREW LETTER TSADI
+	0x0097: 0x05e7,	# HEBREW LETTER QOF
+	0x0098: 0x05e8,	# HEBREW LETTER RESH
+	0x0099: 0x05e9,	# HEBREW LETTER SHIN
+	0x009a: 0x05ea,	# HEBREW LETTER TAV
+	0x009b: None,	# UNDEFINED
+	0x009c: 0x00a3,	# POUND SIGN
+	0x009d: None,	# UNDEFINED
+	0x009e: 0x00d7,	# MULTIPLICATION SIGN
+	0x009f: None,	# UNDEFINED
+	0x00a0: None,	# UNDEFINED
+	0x00a1: None,	# UNDEFINED
+	0x00a2: None,	# UNDEFINED
+	0x00a3: None,	# UNDEFINED
+	0x00a4: None,	# UNDEFINED
+	0x00a5: None,	# UNDEFINED
+	0x00a6: None,	# UNDEFINED
+	0x00a7: None,	# UNDEFINED
+	0x00a8: None,	# UNDEFINED
+	0x00a9: 0x00ae,	# REGISTERED SIGN
+	0x00aa: 0x00ac,	# NOT SIGN
+	0x00ab: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00ac: 0x00bc,	# VULGAR FRACTION ONE QUARTER
+	0x00ad: None,	# UNDEFINED
+	0x00ae: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00af: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: None,	# UNDEFINED
+	0x00b6: None,	# UNDEFINED
+	0x00b7: None,	# UNDEFINED
+	0x00b8: 0x00a9,	# COPYRIGHT SIGN
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x00a2,	# CENT SIGN
+	0x00be: 0x00a5,	# YEN SIGN
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: None,	# UNDEFINED
+	0x00c7: None,	# UNDEFINED
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x00a4,	# CURRENCY SIGN
+	0x00d0: None,	# UNDEFINED
+	0x00d1: None,	# UNDEFINED
+	0x00d2: None,	# UNDEFINED
+	0x00d3: None,	# UNDEFINEDS
+	0x00d4: None,	# UNDEFINED
+	0x00d5: None,	# UNDEFINED
+	0x00d6: None,	# UNDEFINEDE
+	0x00d7: None,	# UNDEFINED
+	0x00d8: None,	# UNDEFINED
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x00a6,	# BROKEN BAR
+	0x00de: None,	# UNDEFINED
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: None,	# UNDEFINED
+	0x00e1: None,	# UNDEFINED
+	0x00e2: None,	# UNDEFINED
+	0x00e3: None,	# UNDEFINED
+	0x00e4: None,	# UNDEFINED
+	0x00e5: None,	# UNDEFINED
+	0x00e6: 0x00b5,	# MICRO SIGN
+	0x00e7: None,	# UNDEFINED
+	0x00e8: None,	# UNDEFINED
+	0x00e9: None,	# UNDEFINED
+	0x00ea: None,	# UNDEFINED
+	0x00eb: None,	# UNDEFINED
+	0x00ec: None,	# UNDEFINED
+	0x00ed: None,	# UNDEFINED
+	0x00ee: 0x00af,	# MACRON
+	0x00ef: 0x00b4,	# ACUTE ACCENT
+	0x00f0: 0x00ad,	# SOFT HYPHEN
+	0x00f1: 0x00b1,	# PLUS-MINUS SIGN
+	0x00f2: 0x2017,	# DOUBLE LOW LINE
+	0x00f3: 0x00be,	# VULGAR FRACTION THREE QUARTERS
+	0x00f4: 0x00b6,	# PILCROW SIGN
+	0x00f5: 0x00a7,	# SECTION SIGN
+	0x00f6: 0x00f7,	# DIVISION SIGN
+	0x00f7: 0x00b8,	# CEDILLA
+	0x00f8: 0x00b0,	# DEGREE SIGN
+	0x00f9: 0x00a8,	# DIAERESIS
+	0x00fa: 0x00b7,	# MIDDLE DOT
+	0x00fb: 0x00b9,	# SUPERSCRIPT ONE
+	0x00fc: 0x00b3,	# SUPERSCRIPT THREE
+	0x00fd: 0x00b2,	# SUPERSCRIPT TWO
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp857.py b/Lib/encodings/cp857.py
new file mode 100644
index 0000000..49cc685
--- /dev/null
+++ b/Lib/encodings/cp857.py
@@ -0,0 +1,173 @@
+""" Python Character Mapping Codec generated from 'CP857.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x00c7,	# LATIN CAPITAL LETTER C WITH CEDILLA
+	0x0081: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x0082: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x0083: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x0084: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x0085: 0x00e0,	# LATIN SMALL LETTER A WITH GRAVE
+	0x0086: 0x00e5,	# LATIN SMALL LETTER A WITH RING ABOVE
+	0x0087: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x0088: 0x00ea,	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+	0x0089: 0x00eb,	# LATIN SMALL LETTER E WITH DIAERESIS
+	0x008a: 0x00e8,	# LATIN SMALL LETTER E WITH GRAVE
+	0x008b: 0x00ef,	# LATIN SMALL LETTER I WITH DIAERESIS
+	0x008c: 0x00ee,	# LATIN SMALL LETTER I WITH CIRCUMFLEX
+	0x008d: 0x0131,	# LATIN SMALL LETTER DOTLESS I
+	0x008e: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x008f: 0x00c5,	# LATIN CAPITAL LETTER A WITH RING ABOVE
+	0x0090: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0091: 0x00e6,	# LATIN SMALL LIGATURE AE
+	0x0092: 0x00c6,	# LATIN CAPITAL LIGATURE AE
+	0x0093: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x0094: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x0095: 0x00f2,	# LATIN SMALL LETTER O WITH GRAVE
+	0x0096: 0x00fb,	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+	0x0097: 0x00f9,	# LATIN SMALL LETTER U WITH GRAVE
+	0x0098: 0x0130,	# LATIN CAPITAL LETTER I WITH DOT ABOVE
+	0x0099: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x009a: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x009b: 0x00f8,	# LATIN SMALL LETTER O WITH STROKE
+	0x009c: 0x00a3,	# POUND SIGN
+	0x009d: 0x00d8,	# LATIN CAPITAL LETTER O WITH STROKE
+	0x009e: 0x015e,	# LATIN CAPITAL LETTER S WITH CEDILLA
+	0x009f: 0x015f,	# LATIN SMALL LETTER S WITH CEDILLA
+	0x00a0: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x00a1: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x00a2: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x00a3: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x00a4: 0x00f1,	# LATIN SMALL LETTER N WITH TILDE
+	0x00a5: 0x00d1,	# LATIN CAPITAL LETTER N WITH TILDE
+	0x00a6: 0x011e,	# LATIN CAPITAL LETTER G WITH BREVE
+	0x00a7: 0x011f,	# LATIN SMALL LETTER G WITH BREVE
+	0x00a8: 0x00bf,	# INVERTED QUESTION MARK
+	0x00a9: 0x00ae,	# REGISTERED SIGN
+	0x00aa: 0x00ac,	# NOT SIGN
+	0x00ab: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00ac: 0x00bc,	# VULGAR FRACTION ONE QUARTER
+	0x00ad: 0x00a1,	# INVERTED EXCLAMATION MARK
+	0x00ae: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00af: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: 0x00c1,	# LATIN CAPITAL LETTER A WITH ACUTE
+	0x00b6: 0x00c2,	# LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+	0x00b7: 0x00c0,	# LATIN CAPITAL LETTER A WITH GRAVE
+	0x00b8: 0x00a9,	# COPYRIGHT SIGN
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x00a2,	# CENT SIGN
+	0x00be: 0x00a5,	# YEN SIGN
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: 0x00e3,	# LATIN SMALL LETTER A WITH TILDE
+	0x00c7: 0x00c3,	# LATIN CAPITAL LETTER A WITH TILDE
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x00a4,	# CURRENCY SIGN
+	0x00d0: 0x00ba,	# MASCULINE ORDINAL INDICATOR
+	0x00d1: 0x00aa,	# FEMININE ORDINAL INDICATOR
+	0x00d2: 0x00ca,	# LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+	0x00d3: 0x00cb,	# LATIN CAPITAL LETTER E WITH DIAERESIS
+	0x00d4: 0x00c8,	# LATIN CAPITAL LETTER E WITH GRAVE
+	0x00d5: None,	# UNDEFINED
+	0x00d6: 0x00cd,	# LATIN CAPITAL LETTER I WITH ACUTE
+	0x00d7: 0x00ce,	# LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+	0x00d8: 0x00cf,	# LATIN CAPITAL LETTER I WITH DIAERESIS
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x00a6,	# BROKEN BAR
+	0x00de: 0x00cc,	# LATIN CAPITAL LETTER I WITH GRAVE
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: 0x00d3,	# LATIN CAPITAL LETTER O WITH ACUTE
+	0x00e1: 0x00df,	# LATIN SMALL LETTER SHARP S
+	0x00e2: 0x00d4,	# LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+	0x00e3: 0x00d2,	# LATIN CAPITAL LETTER O WITH GRAVE
+	0x00e4: 0x00f5,	# LATIN SMALL LETTER O WITH TILDE
+	0x00e5: 0x00d5,	# LATIN CAPITAL LETTER O WITH TILDE
+	0x00e6: 0x00b5,	# MICRO SIGN
+	0x00e7: None,	# UNDEFINED
+	0x00e8: 0x00d7,	# MULTIPLICATION SIGN
+	0x00e9: 0x00da,	# LATIN CAPITAL LETTER U WITH ACUTE
+	0x00ea: 0x00db,	# LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+	0x00eb: 0x00d9,	# LATIN CAPITAL LETTER U WITH GRAVE
+	0x00ed: 0x00ff,	# LATIN SMALL LETTER Y WITH DIAERESIS
+	0x00ee: 0x00af,	# MACRON
+	0x00ef: 0x00b4,	# ACUTE ACCENT
+	0x00f0: 0x00ad,	# SOFT HYPHEN
+	0x00f1: 0x00b1,	# PLUS-MINUS SIGN
+	0x00f2: None,	# UNDEFINED
+	0x00f3: 0x00be,	# VULGAR FRACTION THREE QUARTERS
+	0x00f4: 0x00b6,	# PILCROW SIGN
+	0x00f5: 0x00a7,	# SECTION SIGN
+	0x00f6: 0x00f7,	# DIVISION SIGN
+	0x00f7: 0x00b8,	# CEDILLA
+	0x00f8: 0x00b0,	# DEGREE SIGN
+	0x00f9: 0x00a8,	# DIAERESIS
+	0x00fa: 0x00b7,	# MIDDLE DOT
+	0x00fb: 0x00b9,	# SUPERSCRIPT ONE
+	0x00fc: 0x00b3,	# SUPERSCRIPT THREE
+	0x00fd: 0x00b2,	# SUPERSCRIPT TWO
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp860.py b/Lib/encodings/cp860.py
new file mode 100644
index 0000000..3b9a15d
--- /dev/null
+++ b/Lib/encodings/cp860.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'CP860.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x00c7,	# LATIN CAPITAL LETTER C WITH CEDILLA
+	0x0081: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x0082: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x0083: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x0084: 0x00e3,	# LATIN SMALL LETTER A WITH TILDE
+	0x0085: 0x00e0,	# LATIN SMALL LETTER A WITH GRAVE
+	0x0086: 0x00c1,	# LATIN CAPITAL LETTER A WITH ACUTE
+	0x0087: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x0088: 0x00ea,	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+	0x0089: 0x00ca,	# LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+	0x008a: 0x00e8,	# LATIN SMALL LETTER E WITH GRAVE
+	0x008b: 0x00cd,	# LATIN CAPITAL LETTER I WITH ACUTE
+	0x008c: 0x00d4,	# LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+	0x008d: 0x00ec,	# LATIN SMALL LETTER I WITH GRAVE
+	0x008e: 0x00c3,	# LATIN CAPITAL LETTER A WITH TILDE
+	0x008f: 0x00c2,	# LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+	0x0090: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0091: 0x00c0,	# LATIN CAPITAL LETTER A WITH GRAVE
+	0x0092: 0x00c8,	# LATIN CAPITAL LETTER E WITH GRAVE
+	0x0093: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x0094: 0x00f5,	# LATIN SMALL LETTER O WITH TILDE
+	0x0095: 0x00f2,	# LATIN SMALL LETTER O WITH GRAVE
+	0x0096: 0x00da,	# LATIN CAPITAL LETTER U WITH ACUTE
+	0x0097: 0x00f9,	# LATIN SMALL LETTER U WITH GRAVE
+	0x0098: 0x00cc,	# LATIN CAPITAL LETTER I WITH GRAVE
+	0x0099: 0x00d5,	# LATIN CAPITAL LETTER O WITH TILDE
+	0x009a: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x009b: 0x00a2,	# CENT SIGN
+	0x009c: 0x00a3,	# POUND SIGN
+	0x009d: 0x00d9,	# LATIN CAPITAL LETTER U WITH GRAVE
+	0x009e: 0x20a7,	# PESETA SIGN
+	0x009f: 0x00d3,	# LATIN CAPITAL LETTER O WITH ACUTE
+	0x00a0: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x00a1: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x00a2: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x00a3: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x00a4: 0x00f1,	# LATIN SMALL LETTER N WITH TILDE
+	0x00a5: 0x00d1,	# LATIN CAPITAL LETTER N WITH TILDE
+	0x00a6: 0x00aa,	# FEMININE ORDINAL INDICATOR
+	0x00a7: 0x00ba,	# MASCULINE ORDINAL INDICATOR
+	0x00a8: 0x00bf,	# INVERTED QUESTION MARK
+	0x00a9: 0x00d2,	# LATIN CAPITAL LETTER O WITH GRAVE
+	0x00aa: 0x00ac,	# NOT SIGN
+	0x00ab: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00ac: 0x00bc,	# VULGAR FRACTION ONE QUARTER
+	0x00ad: 0x00a1,	# INVERTED EXCLAMATION MARK
+	0x00ae: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00af: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: 0x2561,	# BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+	0x00b6: 0x2562,	# BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+	0x00b7: 0x2556,	# BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+	0x00b8: 0x2555,	# BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x255c,	# BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+	0x00be: 0x255b,	# BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: 0x255e,	# BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+	0x00c7: 0x255f,	# BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x2567,	# BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+	0x00d0: 0x2568,	# BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+	0x00d1: 0x2564,	# BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+	0x00d2: 0x2565,	# BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+	0x00d3: 0x2559,	# BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+	0x00d4: 0x2558,	# BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+	0x00d5: 0x2552,	# BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+	0x00d6: 0x2553,	# BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+	0x00d7: 0x256b,	# BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+	0x00d8: 0x256a,	# BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x258c,	# LEFT HALF BLOCK
+	0x00de: 0x2590,	# RIGHT HALF BLOCK
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: 0x03b1,	# GREEK SMALL LETTER ALPHA
+	0x00e1: 0x00df,	# LATIN SMALL LETTER SHARP S
+	0x00e2: 0x0393,	# GREEK CAPITAL LETTER GAMMA
+	0x00e3: 0x03c0,	# GREEK SMALL LETTER PI
+	0x00e4: 0x03a3,	# GREEK CAPITAL LETTER SIGMA
+	0x00e5: 0x03c3,	# GREEK SMALL LETTER SIGMA
+	0x00e6: 0x00b5,	# MICRO SIGN
+	0x00e7: 0x03c4,	# GREEK SMALL LETTER TAU
+	0x00e8: 0x03a6,	# GREEK CAPITAL LETTER PHI
+	0x00e9: 0x0398,	# GREEK CAPITAL LETTER THETA
+	0x00ea: 0x03a9,	# GREEK CAPITAL LETTER OMEGA
+	0x00eb: 0x03b4,	# GREEK SMALL LETTER DELTA
+	0x00ec: 0x221e,	# INFINITY
+	0x00ed: 0x03c6,	# GREEK SMALL LETTER PHI
+	0x00ee: 0x03b5,	# GREEK SMALL LETTER EPSILON
+	0x00ef: 0x2229,	# INTERSECTION
+	0x00f0: 0x2261,	# IDENTICAL TO
+	0x00f1: 0x00b1,	# PLUS-MINUS SIGN
+	0x00f2: 0x2265,	# GREATER-THAN OR EQUAL TO
+	0x00f3: 0x2264,	# LESS-THAN OR EQUAL TO
+	0x00f4: 0x2320,	# TOP HALF INTEGRAL
+	0x00f5: 0x2321,	# BOTTOM HALF INTEGRAL
+	0x00f6: 0x00f7,	# DIVISION SIGN
+	0x00f7: 0x2248,	# ALMOST EQUAL TO
+	0x00f8: 0x00b0,	# DEGREE SIGN
+	0x00f9: 0x2219,	# BULLET OPERATOR
+	0x00fa: 0x00b7,	# MIDDLE DOT
+	0x00fb: 0x221a,	# SQUARE ROOT
+	0x00fc: 0x207f,	# SUPERSCRIPT LATIN SMALL LETTER N
+	0x00fd: 0x00b2,	# SUPERSCRIPT TWO
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp861.py b/Lib/encodings/cp861.py
new file mode 100644
index 0000000..3f07fba
--- /dev/null
+++ b/Lib/encodings/cp861.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'CP861.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x00c7,	# LATIN CAPITAL LETTER C WITH CEDILLA
+	0x0081: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x0082: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x0083: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x0084: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x0085: 0x00e0,	# LATIN SMALL LETTER A WITH GRAVE
+	0x0086: 0x00e5,	# LATIN SMALL LETTER A WITH RING ABOVE
+	0x0087: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x0088: 0x00ea,	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+	0x0089: 0x00eb,	# LATIN SMALL LETTER E WITH DIAERESIS
+	0x008a: 0x00e8,	# LATIN SMALL LETTER E WITH GRAVE
+	0x008b: 0x00d0,	# LATIN CAPITAL LETTER ETH
+	0x008c: 0x00f0,	# LATIN SMALL LETTER ETH
+	0x008d: 0x00de,	# LATIN CAPITAL LETTER THORN
+	0x008e: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x008f: 0x00c5,	# LATIN CAPITAL LETTER A WITH RING ABOVE
+	0x0090: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0091: 0x00e6,	# LATIN SMALL LIGATURE AE
+	0x0092: 0x00c6,	# LATIN CAPITAL LIGATURE AE
+	0x0093: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x0094: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x0095: 0x00fe,	# LATIN SMALL LETTER THORN
+	0x0096: 0x00fb,	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+	0x0097: 0x00dd,	# LATIN CAPITAL LETTER Y WITH ACUTE
+	0x0098: 0x00fd,	# LATIN SMALL LETTER Y WITH ACUTE
+	0x0099: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x009a: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x009b: 0x00f8,	# LATIN SMALL LETTER O WITH STROKE
+	0x009c: 0x00a3,	# POUND SIGN
+	0x009d: 0x00d8,	# LATIN CAPITAL LETTER O WITH STROKE
+	0x009e: 0x20a7,	# PESETA SIGN
+	0x009f: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x00a0: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x00a1: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x00a2: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x00a3: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x00a4: 0x00c1,	# LATIN CAPITAL LETTER A WITH ACUTE
+	0x00a5: 0x00cd,	# LATIN CAPITAL LETTER I WITH ACUTE
+	0x00a6: 0x00d3,	# LATIN CAPITAL LETTER O WITH ACUTE
+	0x00a7: 0x00da,	# LATIN CAPITAL LETTER U WITH ACUTE
+	0x00a8: 0x00bf,	# INVERTED QUESTION MARK
+	0x00a9: 0x2310,	# REVERSED NOT SIGN
+	0x00aa: 0x00ac,	# NOT SIGN
+	0x00ab: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00ac: 0x00bc,	# VULGAR FRACTION ONE QUARTER
+	0x00ad: 0x00a1,	# INVERTED EXCLAMATION MARK
+	0x00ae: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00af: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: 0x2561,	# BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+	0x00b6: 0x2562,	# BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+	0x00b7: 0x2556,	# BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+	0x00b8: 0x2555,	# BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x255c,	# BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+	0x00be: 0x255b,	# BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: 0x255e,	# BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+	0x00c7: 0x255f,	# BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x2567,	# BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+	0x00d0: 0x2568,	# BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+	0x00d1: 0x2564,	# BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+	0x00d2: 0x2565,	# BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+	0x00d3: 0x2559,	# BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+	0x00d4: 0x2558,	# BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+	0x00d5: 0x2552,	# BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+	0x00d6: 0x2553,	# BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+	0x00d7: 0x256b,	# BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+	0x00d8: 0x256a,	# BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x258c,	# LEFT HALF BLOCK
+	0x00de: 0x2590,	# RIGHT HALF BLOCK
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: 0x03b1,	# GREEK SMALL LETTER ALPHA
+	0x00e1: 0x00df,	# LATIN SMALL LETTER SHARP S
+	0x00e2: 0x0393,	# GREEK CAPITAL LETTER GAMMA
+	0x00e3: 0x03c0,	# GREEK SMALL LETTER PI
+	0x00e4: 0x03a3,	# GREEK CAPITAL LETTER SIGMA
+	0x00e5: 0x03c3,	# GREEK SMALL LETTER SIGMA
+	0x00e6: 0x00b5,	# MICRO SIGN
+	0x00e7: 0x03c4,	# GREEK SMALL LETTER TAU
+	0x00e8: 0x03a6,	# GREEK CAPITAL LETTER PHI
+	0x00e9: 0x0398,	# GREEK CAPITAL LETTER THETA
+	0x00ea: 0x03a9,	# GREEK CAPITAL LETTER OMEGA
+	0x00eb: 0x03b4,	# GREEK SMALL LETTER DELTA
+	0x00ec: 0x221e,	# INFINITY
+	0x00ed: 0x03c6,	# GREEK SMALL LETTER PHI
+	0x00ee: 0x03b5,	# GREEK SMALL LETTER EPSILON
+	0x00ef: 0x2229,	# INTERSECTION
+	0x00f0: 0x2261,	# IDENTICAL TO
+	0x00f1: 0x00b1,	# PLUS-MINUS SIGN
+	0x00f2: 0x2265,	# GREATER-THAN OR EQUAL TO
+	0x00f3: 0x2264,	# LESS-THAN OR EQUAL TO
+	0x00f4: 0x2320,	# TOP HALF INTEGRAL
+	0x00f5: 0x2321,	# BOTTOM HALF INTEGRAL
+	0x00f6: 0x00f7,	# DIVISION SIGN
+	0x00f7: 0x2248,	# ALMOST EQUAL TO
+	0x00f8: 0x00b0,	# DEGREE SIGN
+	0x00f9: 0x2219,	# BULLET OPERATOR
+	0x00fa: 0x00b7,	# MIDDLE DOT
+	0x00fb: 0x221a,	# SQUARE ROOT
+	0x00fc: 0x207f,	# SUPERSCRIPT LATIN SMALL LETTER N
+	0x00fd: 0x00b2,	# SUPERSCRIPT TWO
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp862.py b/Lib/encodings/cp862.py
new file mode 100644
index 0000000..4bc1cbe
--- /dev/null
+++ b/Lib/encodings/cp862.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'CP862.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x05d0,	# HEBREW LETTER ALEF
+	0x0081: 0x05d1,	# HEBREW LETTER BET
+	0x0082: 0x05d2,	# HEBREW LETTER GIMEL
+	0x0083: 0x05d3,	# HEBREW LETTER DALET
+	0x0084: 0x05d4,	# HEBREW LETTER HE
+	0x0085: 0x05d5,	# HEBREW LETTER VAV
+	0x0086: 0x05d6,	# HEBREW LETTER ZAYIN
+	0x0087: 0x05d7,	# HEBREW LETTER HET
+	0x0088: 0x05d8,	# HEBREW LETTER TET
+	0x0089: 0x05d9,	# HEBREW LETTER YOD
+	0x008a: 0x05da,	# HEBREW LETTER FINAL KAF
+	0x008b: 0x05db,	# HEBREW LETTER KAF
+	0x008c: 0x05dc,	# HEBREW LETTER LAMED
+	0x008d: 0x05dd,	# HEBREW LETTER FINAL MEM
+	0x008e: 0x05de,	# HEBREW LETTER MEM
+	0x008f: 0x05df,	# HEBREW LETTER FINAL NUN
+	0x0090: 0x05e0,	# HEBREW LETTER NUN
+	0x0091: 0x05e1,	# HEBREW LETTER SAMEKH
+	0x0092: 0x05e2,	# HEBREW LETTER AYIN
+	0x0093: 0x05e3,	# HEBREW LETTER FINAL PE
+	0x0094: 0x05e4,	# HEBREW LETTER PE
+	0x0095: 0x05e5,	# HEBREW LETTER FINAL TSADI
+	0x0096: 0x05e6,	# HEBREW LETTER TSADI
+	0x0097: 0x05e7,	# HEBREW LETTER QOF
+	0x0098: 0x05e8,	# HEBREW LETTER RESH
+	0x0099: 0x05e9,	# HEBREW LETTER SHIN
+	0x009a: 0x05ea,	# HEBREW LETTER TAV
+	0x009b: 0x00a2,	# CENT SIGN
+	0x009c: 0x00a3,	# POUND SIGN
+	0x009d: 0x00a5,	# YEN SIGN
+	0x009e: 0x20a7,	# PESETA SIGN
+	0x009f: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x00a0: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x00a1: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x00a2: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x00a3: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x00a4: 0x00f1,	# LATIN SMALL LETTER N WITH TILDE
+	0x00a5: 0x00d1,	# LATIN CAPITAL LETTER N WITH TILDE
+	0x00a6: 0x00aa,	# FEMININE ORDINAL INDICATOR
+	0x00a7: 0x00ba,	# MASCULINE ORDINAL INDICATOR
+	0x00a8: 0x00bf,	# INVERTED QUESTION MARK
+	0x00a9: 0x2310,	# REVERSED NOT SIGN
+	0x00aa: 0x00ac,	# NOT SIGN
+	0x00ab: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00ac: 0x00bc,	# VULGAR FRACTION ONE QUARTER
+	0x00ad: 0x00a1,	# INVERTED EXCLAMATION MARK
+	0x00ae: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00af: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: 0x2561,	# BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+	0x00b6: 0x2562,	# BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+	0x00b7: 0x2556,	# BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+	0x00b8: 0x2555,	# BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x255c,	# BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+	0x00be: 0x255b,	# BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: 0x255e,	# BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+	0x00c7: 0x255f,	# BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x2567,	# BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+	0x00d0: 0x2568,	# BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+	0x00d1: 0x2564,	# BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+	0x00d2: 0x2565,	# BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+	0x00d3: 0x2559,	# BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+	0x00d4: 0x2558,	# BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+	0x00d5: 0x2552,	# BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+	0x00d6: 0x2553,	# BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+	0x00d7: 0x256b,	# BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+	0x00d8: 0x256a,	# BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x258c,	# LEFT HALF BLOCK
+	0x00de: 0x2590,	# RIGHT HALF BLOCK
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: 0x03b1,	# GREEK SMALL LETTER ALPHA
+	0x00e1: 0x00df,	# LATIN SMALL LETTER SHARP S (GERMAN)
+	0x00e2: 0x0393,	# GREEK CAPITAL LETTER GAMMA
+	0x00e3: 0x03c0,	# GREEK SMALL LETTER PI
+	0x00e4: 0x03a3,	# GREEK CAPITAL LETTER SIGMA
+	0x00e5: 0x03c3,	# GREEK SMALL LETTER SIGMA
+	0x00e6: 0x00b5,	# MICRO SIGN
+	0x00e7: 0x03c4,	# GREEK SMALL LETTER TAU
+	0x00e8: 0x03a6,	# GREEK CAPITAL LETTER PHI
+	0x00e9: 0x0398,	# GREEK CAPITAL LETTER THETA
+	0x00ea: 0x03a9,	# GREEK CAPITAL LETTER OMEGA
+	0x00eb: 0x03b4,	# GREEK SMALL LETTER DELTA
+	0x00ec: 0x221e,	# INFINITY
+	0x00ed: 0x03c6,	# GREEK SMALL LETTER PHI
+	0x00ee: 0x03b5,	# GREEK SMALL LETTER EPSILON
+	0x00ef: 0x2229,	# INTERSECTION
+	0x00f0: 0x2261,	# IDENTICAL TO
+	0x00f1: 0x00b1,	# PLUS-MINUS SIGN
+	0x00f2: 0x2265,	# GREATER-THAN OR EQUAL TO
+	0x00f3: 0x2264,	# LESS-THAN OR EQUAL TO
+	0x00f4: 0x2320,	# TOP HALF INTEGRAL
+	0x00f5: 0x2321,	# BOTTOM HALF INTEGRAL
+	0x00f6: 0x00f7,	# DIVISION SIGN
+	0x00f7: 0x2248,	# ALMOST EQUAL TO
+	0x00f8: 0x00b0,	# DEGREE SIGN
+	0x00f9: 0x2219,	# BULLET OPERATOR
+	0x00fa: 0x00b7,	# MIDDLE DOT
+	0x00fb: 0x221a,	# SQUARE ROOT
+	0x00fc: 0x207f,	# SUPERSCRIPT LATIN SMALL LETTER N
+	0x00fd: 0x00b2,	# SUPERSCRIPT TWO
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp863.py b/Lib/encodings/cp863.py
new file mode 100644
index 0000000..3e6103f
--- /dev/null
+++ b/Lib/encodings/cp863.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'CP863.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x00c7,	# LATIN CAPITAL LETTER C WITH CEDILLA
+	0x0081: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x0082: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x0083: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x0084: 0x00c2,	# LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+	0x0085: 0x00e0,	# LATIN SMALL LETTER A WITH GRAVE
+	0x0086: 0x00b6,	# PILCROW SIGN
+	0x0087: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x0088: 0x00ea,	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+	0x0089: 0x00eb,	# LATIN SMALL LETTER E WITH DIAERESIS
+	0x008a: 0x00e8,	# LATIN SMALL LETTER E WITH GRAVE
+	0x008b: 0x00ef,	# LATIN SMALL LETTER I WITH DIAERESIS
+	0x008c: 0x00ee,	# LATIN SMALL LETTER I WITH CIRCUMFLEX
+	0x008d: 0x2017,	# DOUBLE LOW LINE
+	0x008e: 0x00c0,	# LATIN CAPITAL LETTER A WITH GRAVE
+	0x008f: 0x00a7,	# SECTION SIGN
+	0x0090: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0091: 0x00c8,	# LATIN CAPITAL LETTER E WITH GRAVE
+	0x0092: 0x00ca,	# LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+	0x0093: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x0094: 0x00cb,	# LATIN CAPITAL LETTER E WITH DIAERESIS
+	0x0095: 0x00cf,	# LATIN CAPITAL LETTER I WITH DIAERESIS
+	0x0096: 0x00fb,	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+	0x0097: 0x00f9,	# LATIN SMALL LETTER U WITH GRAVE
+	0x0098: 0x00a4,	# CURRENCY SIGN
+	0x0099: 0x00d4,	# LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+	0x009a: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x009b: 0x00a2,	# CENT SIGN
+	0x009c: 0x00a3,	# POUND SIGN
+	0x009d: 0x00d9,	# LATIN CAPITAL LETTER U WITH GRAVE
+	0x009e: 0x00db,	# LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+	0x009f: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x00a0: 0x00a6,	# BROKEN BAR
+	0x00a1: 0x00b4,	# ACUTE ACCENT
+	0x00a2: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x00a3: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x00a4: 0x00a8,	# DIAERESIS
+	0x00a5: 0x00b8,	# CEDILLA
+	0x00a6: 0x00b3,	# SUPERSCRIPT THREE
+	0x00a7: 0x00af,	# MACRON
+	0x00a8: 0x00ce,	# LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+	0x00a9: 0x2310,	# REVERSED NOT SIGN
+	0x00aa: 0x00ac,	# NOT SIGN
+	0x00ab: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00ac: 0x00bc,	# VULGAR FRACTION ONE QUARTER
+	0x00ad: 0x00be,	# VULGAR FRACTION THREE QUARTERS
+	0x00ae: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00af: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: 0x2561,	# BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+	0x00b6: 0x2562,	# BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+	0x00b7: 0x2556,	# BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+	0x00b8: 0x2555,	# BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x255c,	# BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+	0x00be: 0x255b,	# BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: 0x255e,	# BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+	0x00c7: 0x255f,	# BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x2567,	# BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+	0x00d0: 0x2568,	# BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+	0x00d1: 0x2564,	# BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+	0x00d2: 0x2565,	# BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+	0x00d3: 0x2559,	# BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+	0x00d4: 0x2558,	# BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+	0x00d5: 0x2552,	# BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+	0x00d6: 0x2553,	# BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+	0x00d7: 0x256b,	# BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+	0x00d8: 0x256a,	# BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x258c,	# LEFT HALF BLOCK
+	0x00de: 0x2590,	# RIGHT HALF BLOCK
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: 0x03b1,	# GREEK SMALL LETTER ALPHA
+	0x00e1: 0x00df,	# LATIN SMALL LETTER SHARP S
+	0x00e2: 0x0393,	# GREEK CAPITAL LETTER GAMMA
+	0x00e3: 0x03c0,	# GREEK SMALL LETTER PI
+	0x00e4: 0x03a3,	# GREEK CAPITAL LETTER SIGMA
+	0x00e5: 0x03c3,	# GREEK SMALL LETTER SIGMA
+	0x00e6: 0x00b5,	# MICRO SIGN
+	0x00e7: 0x03c4,	# GREEK SMALL LETTER TAU
+	0x00e8: 0x03a6,	# GREEK CAPITAL LETTER PHI
+	0x00e9: 0x0398,	# GREEK CAPITAL LETTER THETA
+	0x00ea: 0x03a9,	# GREEK CAPITAL LETTER OMEGA
+	0x00eb: 0x03b4,	# GREEK SMALL LETTER DELTA
+	0x00ec: 0x221e,	# INFINITY
+	0x00ed: 0x03c6,	# GREEK SMALL LETTER PHI
+	0x00ee: 0x03b5,	# GREEK SMALL LETTER EPSILON
+	0x00ef: 0x2229,	# INTERSECTION
+	0x00f0: 0x2261,	# IDENTICAL TO
+	0x00f1: 0x00b1,	# PLUS-MINUS SIGN
+	0x00f2: 0x2265,	# GREATER-THAN OR EQUAL TO
+	0x00f3: 0x2264,	# LESS-THAN OR EQUAL TO
+	0x00f4: 0x2320,	# TOP HALF INTEGRAL
+	0x00f5: 0x2321,	# BOTTOM HALF INTEGRAL
+	0x00f6: 0x00f7,	# DIVISION SIGN
+	0x00f7: 0x2248,	# ALMOST EQUAL TO
+	0x00f8: 0x00b0,	# DEGREE SIGN
+	0x00f9: 0x2219,	# BULLET OPERATOR
+	0x00fa: 0x00b7,	# MIDDLE DOT
+	0x00fb: 0x221a,	# SQUARE ROOT
+	0x00fc: 0x207f,	# SUPERSCRIPT LATIN SMALL LETTER N
+	0x00fd: 0x00b2,	# SUPERSCRIPT TWO
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp864.py b/Lib/encodings/cp864.py
new file mode 100644
index 0000000..8193278
--- /dev/null
+++ b/Lib/encodings/cp864.py
@@ -0,0 +1,172 @@
+""" Python Character Mapping Codec generated from 'CP864.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0025: 0x066a,	# ARABIC PERCENT SIGN
+	0x0080: 0x00b0,	# DEGREE SIGN
+	0x0081: 0x00b7,	# MIDDLE DOT
+	0x0082: 0x2219,	# BULLET OPERATOR
+	0x0083: 0x221a,	# SQUARE ROOT
+	0x0084: 0x2592,	# MEDIUM SHADE
+	0x0085: 0x2500,	# FORMS LIGHT HORIZONTAL
+	0x0086: 0x2502,	# FORMS LIGHT VERTICAL
+	0x0087: 0x253c,	# FORMS LIGHT VERTICAL AND HORIZONTAL
+	0x0088: 0x2524,	# FORMS LIGHT VERTICAL AND LEFT
+	0x0089: 0x252c,	# FORMS LIGHT DOWN AND HORIZONTAL
+	0x008a: 0x251c,	# FORMS LIGHT VERTICAL AND RIGHT
+	0x008b: 0x2534,	# FORMS LIGHT UP AND HORIZONTAL
+	0x008c: 0x2510,	# FORMS LIGHT DOWN AND LEFT
+	0x008d: 0x250c,	# FORMS LIGHT DOWN AND RIGHT
+	0x008e: 0x2514,	# FORMS LIGHT UP AND RIGHT
+	0x008f: 0x2518,	# FORMS LIGHT UP AND LEFT
+	0x0090: 0x03b2,	# GREEK SMALL BETA
+	0x0091: 0x221e,	# INFINITY
+	0x0092: 0x03c6,	# GREEK SMALL PHI
+	0x0093: 0x00b1,	# PLUS-OR-MINUS SIGN
+	0x0094: 0x00bd,	# FRACTION 1/2
+	0x0095: 0x00bc,	# FRACTION 1/4
+	0x0096: 0x2248,	# ALMOST EQUAL TO
+	0x0097: 0x00ab,	# LEFT POINTING GUILLEMET
+	0x0098: 0x00bb,	# RIGHT POINTING GUILLEMET
+	0x0099: 0xfef7,	# ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+	0x009a: 0xfef8,	# ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+	0x009b: None,	# UNDEFINED
+	0x009c: None,	# UNDEFINED
+	0x009d: 0xfefb,	# ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+	0x009e: 0xfefc,	# ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+	0x009f: None,	# UNDEFINED
+	0x00a1: 0x00ad,	# SOFT HYPHEN
+	0x00a2: 0xfe82,	# ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+	0x00a5: 0xfe84,	# ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+	0x00a6: None,	# UNDEFINED
+	0x00a7: None,	# UNDEFINED
+	0x00a8: 0xfe8e,	# ARABIC LETTER ALEF FINAL FORM
+	0x00a9: 0xfe8f,	# ARABIC LETTER BEH ISOLATED FORM
+	0x00aa: 0xfe95,	# ARABIC LETTER TEH ISOLATED FORM
+	0x00ab: 0xfe99,	# ARABIC LETTER THEH ISOLATED FORM
+	0x00ac: 0x060c,	# ARABIC COMMA
+	0x00ad: 0xfe9d,	# ARABIC LETTER JEEM ISOLATED FORM
+	0x00ae: 0xfea1,	# ARABIC LETTER HAH ISOLATED FORM
+	0x00af: 0xfea5,	# ARABIC LETTER KHAH ISOLATED FORM
+	0x00b0: 0x0660,	# ARABIC-INDIC DIGIT ZERO
+	0x00b1: 0x0661,	# ARABIC-INDIC DIGIT ONE
+	0x00b2: 0x0662,	# ARABIC-INDIC DIGIT TWO
+	0x00b3: 0x0663,	# ARABIC-INDIC DIGIT THREE
+	0x00b4: 0x0664,	# ARABIC-INDIC DIGIT FOUR
+	0x00b5: 0x0665,	# ARABIC-INDIC DIGIT FIVE
+	0x00b6: 0x0666,	# ARABIC-INDIC DIGIT SIX
+	0x00b7: 0x0667,	# ARABIC-INDIC DIGIT SEVEN
+	0x00b8: 0x0668,	# ARABIC-INDIC DIGIT EIGHT
+	0x00b9: 0x0669,	# ARABIC-INDIC DIGIT NINE
+	0x00ba: 0xfed1,	# ARABIC LETTER FEH ISOLATED FORM
+	0x00bb: 0x061b,	# ARABIC SEMICOLON
+	0x00bc: 0xfeb1,	# ARABIC LETTER SEEN ISOLATED FORM
+	0x00bd: 0xfeb5,	# ARABIC LETTER SHEEN ISOLATED FORM
+	0x00be: 0xfeb9,	# ARABIC LETTER SAD ISOLATED FORM
+	0x00bf: 0x061f,	# ARABIC QUESTION MARK
+	0x00c0: 0x00a2,	# CENT SIGN
+	0x00c1: 0xfe80,	# ARABIC LETTER HAMZA ISOLATED FORM
+	0x00c2: 0xfe81,	# ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+	0x00c3: 0xfe83,	# ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+	0x00c4: 0xfe85,	# ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+	0x00c5: 0xfeca,	# ARABIC LETTER AIN FINAL FORM
+	0x00c6: 0xfe8b,	# ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+	0x00c7: 0xfe8d,	# ARABIC LETTER ALEF ISOLATED FORM
+	0x00c8: 0xfe91,	# ARABIC LETTER BEH INITIAL FORM
+	0x00c9: 0xfe93,	# ARABIC LETTER TEH MARBUTA ISOLATED FORM
+	0x00ca: 0xfe97,	# ARABIC LETTER TEH INITIAL FORM
+	0x00cb: 0xfe9b,	# ARABIC LETTER THEH INITIAL FORM
+	0x00cc: 0xfe9f,	# ARABIC LETTER JEEM INITIAL FORM
+	0x00cd: 0xfea3,	# ARABIC LETTER HAH INITIAL FORM
+	0x00ce: 0xfea7,	# ARABIC LETTER KHAH INITIAL FORM
+	0x00cf: 0xfea9,	# ARABIC LETTER DAL ISOLATED FORM
+	0x00d0: 0xfeab,	# ARABIC LETTER THAL ISOLATED FORM
+	0x00d1: 0xfead,	# ARABIC LETTER REH ISOLATED FORM
+	0x00d2: 0xfeaf,	# ARABIC LETTER ZAIN ISOLATED FORM
+	0x00d3: 0xfeb3,	# ARABIC LETTER SEEN INITIAL FORM
+	0x00d4: 0xfeb7,	# ARABIC LETTER SHEEN INITIAL FORM
+	0x00d5: 0xfebb,	# ARABIC LETTER SAD INITIAL FORM
+	0x00d6: 0xfebf,	# ARABIC LETTER DAD INITIAL FORM
+	0x00d7: 0xfec1,	# ARABIC LETTER TAH ISOLATED FORM
+	0x00d8: 0xfec5,	# ARABIC LETTER ZAH ISOLATED FORM
+	0x00d9: 0xfecb,	# ARABIC LETTER AIN INITIAL FORM
+	0x00da: 0xfecf,	# ARABIC LETTER GHAIN INITIAL FORM
+	0x00db: 0x00a6,	# BROKEN VERTICAL BAR
+	0x00dc: 0x00ac,	# NOT SIGN
+	0x00dd: 0x00f7,	# DIVISION SIGN
+	0x00de: 0x00d7,	# MULTIPLICATION SIGN
+	0x00df: 0xfec9,	# ARABIC LETTER AIN ISOLATED FORM
+	0x00e0: 0x0640,	# ARABIC TATWEEL
+	0x00e1: 0xfed3,	# ARABIC LETTER FEH INITIAL FORM
+	0x00e2: 0xfed7,	# ARABIC LETTER QAF INITIAL FORM
+	0x00e3: 0xfedb,	# ARABIC LETTER KAF INITIAL FORM
+	0x00e4: 0xfedf,	# ARABIC LETTER LAM INITIAL FORM
+	0x00e5: 0xfee3,	# ARABIC LETTER MEEM INITIAL FORM
+	0x00e6: 0xfee7,	# ARABIC LETTER NOON INITIAL FORM
+	0x00e7: 0xfeeb,	# ARABIC LETTER HEH INITIAL FORM
+	0x00e8: 0xfeed,	# ARABIC LETTER WAW ISOLATED FORM
+	0x00e9: 0xfeef,	# ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+	0x00ea: 0xfef3,	# ARABIC LETTER YEH INITIAL FORM
+	0x00eb: 0xfebd,	# ARABIC LETTER DAD ISOLATED FORM
+	0x00ec: 0xfecc,	# ARABIC LETTER AIN MEDIAL FORM
+	0x00ed: 0xfece,	# ARABIC LETTER GHAIN FINAL FORM
+	0x00ee: 0xfecd,	# ARABIC LETTER GHAIN ISOLATED FORM
+	0x00ef: 0xfee1,	# ARABIC LETTER MEEM ISOLATED FORM
+	0x00f0: 0xfe7d,	# ARABIC SHADDA MEDIAL FORM
+	0x00f1: 0x0651,	# ARABIC SHADDAH
+	0x00f2: 0xfee5,	# ARABIC LETTER NOON ISOLATED FORM
+	0x00f3: 0xfee9,	# ARABIC LETTER HEH ISOLATED FORM
+	0x00f4: 0xfeec,	# ARABIC LETTER HEH MEDIAL FORM
+	0x00f5: 0xfef0,	# ARABIC LETTER ALEF MAKSURA FINAL FORM
+	0x00f6: 0xfef2,	# ARABIC LETTER YEH FINAL FORM
+	0x00f7: 0xfed0,	# ARABIC LETTER GHAIN MEDIAL FORM
+	0x00f8: 0xfed5,	# ARABIC LETTER QAF ISOLATED FORM
+	0x00f9: 0xfef5,	# ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+	0x00fa: 0xfef6,	# ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+	0x00fb: 0xfedd,	# ARABIC LETTER LAM ISOLATED FORM
+	0x00fc: 0xfed9,	# ARABIC LETTER KAF ISOLATED FORM
+	0x00fd: 0xfef1,	# ARABIC LETTER YEH ISOLATED FORM
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: None,	# UNDEFINED
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp865.py b/Lib/encodings/cp865.py
new file mode 100644
index 0000000..eaed7a9
--- /dev/null
+++ b/Lib/encodings/cp865.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'CP865.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x00c7,	# LATIN CAPITAL LETTER C WITH CEDILLA
+	0x0081: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x0082: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x0083: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x0084: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x0085: 0x00e0,	# LATIN SMALL LETTER A WITH GRAVE
+	0x0086: 0x00e5,	# LATIN SMALL LETTER A WITH RING ABOVE
+	0x0087: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x0088: 0x00ea,	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+	0x0089: 0x00eb,	# LATIN SMALL LETTER E WITH DIAERESIS
+	0x008a: 0x00e8,	# LATIN SMALL LETTER E WITH GRAVE
+	0x008b: 0x00ef,	# LATIN SMALL LETTER I WITH DIAERESIS
+	0x008c: 0x00ee,	# LATIN SMALL LETTER I WITH CIRCUMFLEX
+	0x008d: 0x00ec,	# LATIN SMALL LETTER I WITH GRAVE
+	0x008e: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x008f: 0x00c5,	# LATIN CAPITAL LETTER A WITH RING ABOVE
+	0x0090: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0091: 0x00e6,	# LATIN SMALL LIGATURE AE
+	0x0092: 0x00c6,	# LATIN CAPITAL LIGATURE AE
+	0x0093: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x0094: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x0095: 0x00f2,	# LATIN SMALL LETTER O WITH GRAVE
+	0x0096: 0x00fb,	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+	0x0097: 0x00f9,	# LATIN SMALL LETTER U WITH GRAVE
+	0x0098: 0x00ff,	# LATIN SMALL LETTER Y WITH DIAERESIS
+	0x0099: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x009a: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x009b: 0x00f8,	# LATIN SMALL LETTER O WITH STROKE
+	0x009c: 0x00a3,	# POUND SIGN
+	0x009d: 0x00d8,	# LATIN CAPITAL LETTER O WITH STROKE
+	0x009e: 0x20a7,	# PESETA SIGN
+	0x009f: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x00a0: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x00a1: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x00a2: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x00a3: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x00a4: 0x00f1,	# LATIN SMALL LETTER N WITH TILDE
+	0x00a5: 0x00d1,	# LATIN CAPITAL LETTER N WITH TILDE
+	0x00a6: 0x00aa,	# FEMININE ORDINAL INDICATOR
+	0x00a7: 0x00ba,	# MASCULINE ORDINAL INDICATOR
+	0x00a8: 0x00bf,	# INVERTED QUESTION MARK
+	0x00a9: 0x2310,	# REVERSED NOT SIGN
+	0x00aa: 0x00ac,	# NOT SIGN
+	0x00ab: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00ac: 0x00bc,	# VULGAR FRACTION ONE QUARTER
+	0x00ad: 0x00a1,	# INVERTED EXCLAMATION MARK
+	0x00ae: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00af: 0x00a4,	# CURRENCY SIGN
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: 0x2561,	# BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+	0x00b6: 0x2562,	# BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+	0x00b7: 0x2556,	# BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+	0x00b8: 0x2555,	# BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x255c,	# BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+	0x00be: 0x255b,	# BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: 0x255e,	# BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+	0x00c7: 0x255f,	# BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x2567,	# BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+	0x00d0: 0x2568,	# BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+	0x00d1: 0x2564,	# BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+	0x00d2: 0x2565,	# BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+	0x00d3: 0x2559,	# BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+	0x00d4: 0x2558,	# BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+	0x00d5: 0x2552,	# BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+	0x00d6: 0x2553,	# BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+	0x00d7: 0x256b,	# BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+	0x00d8: 0x256a,	# BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x258c,	# LEFT HALF BLOCK
+	0x00de: 0x2590,	# RIGHT HALF BLOCK
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: 0x03b1,	# GREEK SMALL LETTER ALPHA
+	0x00e1: 0x00df,	# LATIN SMALL LETTER SHARP S
+	0x00e2: 0x0393,	# GREEK CAPITAL LETTER GAMMA
+	0x00e3: 0x03c0,	# GREEK SMALL LETTER PI
+	0x00e4: 0x03a3,	# GREEK CAPITAL LETTER SIGMA
+	0x00e5: 0x03c3,	# GREEK SMALL LETTER SIGMA
+	0x00e6: 0x00b5,	# MICRO SIGN
+	0x00e7: 0x03c4,	# GREEK SMALL LETTER TAU
+	0x00e8: 0x03a6,	# GREEK CAPITAL LETTER PHI
+	0x00e9: 0x0398,	# GREEK CAPITAL LETTER THETA
+	0x00ea: 0x03a9,	# GREEK CAPITAL LETTER OMEGA
+	0x00eb: 0x03b4,	# GREEK SMALL LETTER DELTA
+	0x00ec: 0x221e,	# INFINITY
+	0x00ed: 0x03c6,	# GREEK SMALL LETTER PHI
+	0x00ee: 0x03b5,	# GREEK SMALL LETTER EPSILON
+	0x00ef: 0x2229,	# INTERSECTION
+	0x00f0: 0x2261,	# IDENTICAL TO
+	0x00f1: 0x00b1,	# PLUS-MINUS SIGN
+	0x00f2: 0x2265,	# GREATER-THAN OR EQUAL TO
+	0x00f3: 0x2264,	# LESS-THAN OR EQUAL TO
+	0x00f4: 0x2320,	# TOP HALF INTEGRAL
+	0x00f5: 0x2321,	# BOTTOM HALF INTEGRAL
+	0x00f6: 0x00f7,	# DIVISION SIGN
+	0x00f7: 0x2248,	# ALMOST EQUAL TO
+	0x00f8: 0x00b0,	# DEGREE SIGN
+	0x00f9: 0x2219,	# BULLET OPERATOR
+	0x00fa: 0x00b7,	# MIDDLE DOT
+	0x00fb: 0x221a,	# SQUARE ROOT
+	0x00fc: 0x207f,	# SUPERSCRIPT LATIN SMALL LETTER N
+	0x00fd: 0x00b2,	# SUPERSCRIPT TWO
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp866.py b/Lib/encodings/cp866.py
new file mode 100644
index 0000000..25e1a50
--- /dev/null
+++ b/Lib/encodings/cp866.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'CP866.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x0410,	# CYRILLIC CAPITAL LETTER A
+	0x0081: 0x0411,	# CYRILLIC CAPITAL LETTER BE
+	0x0082: 0x0412,	# CYRILLIC CAPITAL LETTER VE
+	0x0083: 0x0413,	# CYRILLIC CAPITAL LETTER GHE
+	0x0084: 0x0414,	# CYRILLIC CAPITAL LETTER DE
+	0x0085: 0x0415,	# CYRILLIC CAPITAL LETTER IE
+	0x0086: 0x0416,	# CYRILLIC CAPITAL LETTER ZHE
+	0x0087: 0x0417,	# CYRILLIC CAPITAL LETTER ZE
+	0x0088: 0x0418,	# CYRILLIC CAPITAL LETTER I
+	0x0089: 0x0419,	# CYRILLIC CAPITAL LETTER SHORT I
+	0x008a: 0x041a,	# CYRILLIC CAPITAL LETTER KA
+	0x008b: 0x041b,	# CYRILLIC CAPITAL LETTER EL
+	0x008c: 0x041c,	# CYRILLIC CAPITAL LETTER EM
+	0x008d: 0x041d,	# CYRILLIC CAPITAL LETTER EN
+	0x008e: 0x041e,	# CYRILLIC CAPITAL LETTER O
+	0x008f: 0x041f,	# CYRILLIC CAPITAL LETTER PE
+	0x0090: 0x0420,	# CYRILLIC CAPITAL LETTER ER
+	0x0091: 0x0421,	# CYRILLIC CAPITAL LETTER ES
+	0x0092: 0x0422,	# CYRILLIC CAPITAL LETTER TE
+	0x0093: 0x0423,	# CYRILLIC CAPITAL LETTER U
+	0x0094: 0x0424,	# CYRILLIC CAPITAL LETTER EF
+	0x0095: 0x0425,	# CYRILLIC CAPITAL LETTER HA
+	0x0096: 0x0426,	# CYRILLIC CAPITAL LETTER TSE
+	0x0097: 0x0427,	# CYRILLIC CAPITAL LETTER CHE
+	0x0098: 0x0428,	# CYRILLIC CAPITAL LETTER SHA
+	0x0099: 0x0429,	# CYRILLIC CAPITAL LETTER SHCHA
+	0x009a: 0x042a,	# CYRILLIC CAPITAL LETTER HARD SIGN
+	0x009b: 0x042b,	# CYRILLIC CAPITAL LETTER YERU
+	0x009c: 0x042c,	# CYRILLIC CAPITAL LETTER SOFT SIGN
+	0x009d: 0x042d,	# CYRILLIC CAPITAL LETTER E
+	0x009e: 0x042e,	# CYRILLIC CAPITAL LETTER YU
+	0x009f: 0x042f,	# CYRILLIC CAPITAL LETTER YA
+	0x00a0: 0x0430,	# CYRILLIC SMALL LETTER A
+	0x00a1: 0x0431,	# CYRILLIC SMALL LETTER BE
+	0x00a2: 0x0432,	# CYRILLIC SMALL LETTER VE
+	0x00a3: 0x0433,	# CYRILLIC SMALL LETTER GHE
+	0x00a4: 0x0434,	# CYRILLIC SMALL LETTER DE
+	0x00a5: 0x0435,	# CYRILLIC SMALL LETTER IE
+	0x00a6: 0x0436,	# CYRILLIC SMALL LETTER ZHE
+	0x00a7: 0x0437,	# CYRILLIC SMALL LETTER ZE
+	0x00a8: 0x0438,	# CYRILLIC SMALL LETTER I
+	0x00a9: 0x0439,	# CYRILLIC SMALL LETTER SHORT I
+	0x00aa: 0x043a,	# CYRILLIC SMALL LETTER KA
+	0x00ab: 0x043b,	# CYRILLIC SMALL LETTER EL
+	0x00ac: 0x043c,	# CYRILLIC SMALL LETTER EM
+	0x00ad: 0x043d,	# CYRILLIC SMALL LETTER EN
+	0x00ae: 0x043e,	# CYRILLIC SMALL LETTER O
+	0x00af: 0x043f,	# CYRILLIC SMALL LETTER PE
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: 0x2561,	# BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+	0x00b6: 0x2562,	# BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+	0x00b7: 0x2556,	# BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+	0x00b8: 0x2555,	# BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x255c,	# BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+	0x00be: 0x255b,	# BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: 0x255e,	# BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+	0x00c7: 0x255f,	# BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x2567,	# BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+	0x00d0: 0x2568,	# BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+	0x00d1: 0x2564,	# BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+	0x00d2: 0x2565,	# BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+	0x00d3: 0x2559,	# BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+	0x00d4: 0x2558,	# BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+	0x00d5: 0x2552,	# BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+	0x00d6: 0x2553,	# BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+	0x00d7: 0x256b,	# BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+	0x00d8: 0x256a,	# BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x258c,	# LEFT HALF BLOCK
+	0x00de: 0x2590,	# RIGHT HALF BLOCK
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: 0x0440,	# CYRILLIC SMALL LETTER ER
+	0x00e1: 0x0441,	# CYRILLIC SMALL LETTER ES
+	0x00e2: 0x0442,	# CYRILLIC SMALL LETTER TE
+	0x00e3: 0x0443,	# CYRILLIC SMALL LETTER U
+	0x00e4: 0x0444,	# CYRILLIC SMALL LETTER EF
+	0x00e5: 0x0445,	# CYRILLIC SMALL LETTER HA
+	0x00e6: 0x0446,	# CYRILLIC SMALL LETTER TSE
+	0x00e7: 0x0447,	# CYRILLIC SMALL LETTER CHE
+	0x00e8: 0x0448,	# CYRILLIC SMALL LETTER SHA
+	0x00e9: 0x0449,	# CYRILLIC SMALL LETTER SHCHA
+	0x00ea: 0x044a,	# CYRILLIC SMALL LETTER HARD SIGN
+	0x00eb: 0x044b,	# CYRILLIC SMALL LETTER YERU
+	0x00ec: 0x044c,	# CYRILLIC SMALL LETTER SOFT SIGN
+	0x00ed: 0x044d,	# CYRILLIC SMALL LETTER E
+	0x00ee: 0x044e,	# CYRILLIC SMALL LETTER YU
+	0x00ef: 0x044f,	# CYRILLIC SMALL LETTER YA
+	0x00f0: 0x0401,	# CYRILLIC CAPITAL LETTER IO
+	0x00f1: 0x0451,	# CYRILLIC SMALL LETTER IO
+	0x00f2: 0x0404,	# CYRILLIC CAPITAL LETTER UKRAINIAN IE
+	0x00f3: 0x0454,	# CYRILLIC SMALL LETTER UKRAINIAN IE
+	0x00f4: 0x0407,	# CYRILLIC CAPITAL LETTER YI
+	0x00f5: 0x0457,	# CYRILLIC SMALL LETTER YI
+	0x00f6: 0x040e,	# CYRILLIC CAPITAL LETTER SHORT U
+	0x00f7: 0x045e,	# CYRILLIC SMALL LETTER SHORT U
+	0x00f8: 0x00b0,	# DEGREE SIGN
+	0x00f9: 0x2219,	# BULLET OPERATOR
+	0x00fa: 0x00b7,	# MIDDLE DOT
+	0x00fb: 0x221a,	# SQUARE ROOT
+	0x00fc: 0x2116,	# NUMERO SIGN
+	0x00fd: 0x00a4,	# CURRENCY SIGN
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp869.py b/Lib/encodings/cp869.py
new file mode 100644
index 0000000..840335f
--- /dev/null
+++ b/Lib/encodings/cp869.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'CP869.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: None,	# UNDEFINED
+	0x0081: None,	# UNDEFINED
+	0x0082: None,	# UNDEFINED
+	0x0083: None,	# UNDEFINED
+	0x0084: None,	# UNDEFINED
+	0x0085: None,	# UNDEFINED
+	0x0086: 0x0386,	# GREEK CAPITAL LETTER ALPHA WITH TONOS
+	0x0087: None,	# UNDEFINED
+	0x0088: 0x00b7,	# MIDDLE DOT
+	0x0089: 0x00ac,	# NOT SIGN
+	0x008a: 0x00a6,	# BROKEN BAR
+	0x008b: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x008c: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x008d: 0x0388,	# GREEK CAPITAL LETTER EPSILON WITH TONOS
+	0x008e: 0x2015,	# HORIZONTAL BAR
+	0x008f: 0x0389,	# GREEK CAPITAL LETTER ETA WITH TONOS
+	0x0090: 0x038a,	# GREEK CAPITAL LETTER IOTA WITH TONOS
+	0x0091: 0x03aa,	# GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+	0x0092: 0x038c,	# GREEK CAPITAL LETTER OMICRON WITH TONOS
+	0x0093: None,	# UNDEFINED
+	0x0094: None,	# UNDEFINED
+	0x0095: 0x038e,	# GREEK CAPITAL LETTER UPSILON WITH TONOS
+	0x0096: 0x03ab,	# GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+	0x0097: 0x00a9,	# COPYRIGHT SIGN
+	0x0098: 0x038f,	# GREEK CAPITAL LETTER OMEGA WITH TONOS
+	0x0099: 0x00b2,	# SUPERSCRIPT TWO
+	0x009a: 0x00b3,	# SUPERSCRIPT THREE
+	0x009b: 0x03ac,	# GREEK SMALL LETTER ALPHA WITH TONOS
+	0x009c: 0x00a3,	# POUND SIGN
+	0x009d: 0x03ad,	# GREEK SMALL LETTER EPSILON WITH TONOS
+	0x009e: 0x03ae,	# GREEK SMALL LETTER ETA WITH TONOS
+	0x009f: 0x03af,	# GREEK SMALL LETTER IOTA WITH TONOS
+	0x00a0: 0x03ca,	# GREEK SMALL LETTER IOTA WITH DIALYTIKA
+	0x00a1: 0x0390,	# GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+	0x00a2: 0x03cc,	# GREEK SMALL LETTER OMICRON WITH TONOS
+	0x00a3: 0x03cd,	# GREEK SMALL LETTER UPSILON WITH TONOS
+	0x00a4: 0x0391,	# GREEK CAPITAL LETTER ALPHA
+	0x00a5: 0x0392,	# GREEK CAPITAL LETTER BETA
+	0x00a6: 0x0393,	# GREEK CAPITAL LETTER GAMMA
+	0x00a7: 0x0394,	# GREEK CAPITAL LETTER DELTA
+	0x00a8: 0x0395,	# GREEK CAPITAL LETTER EPSILON
+	0x00a9: 0x0396,	# GREEK CAPITAL LETTER ZETA
+	0x00aa: 0x0397,	# GREEK CAPITAL LETTER ETA
+	0x00ab: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00ac: 0x0398,	# GREEK CAPITAL LETTER THETA
+	0x00ad: 0x0399,	# GREEK CAPITAL LETTER IOTA
+	0x00ae: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00af: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00b0: 0x2591,	# LIGHT SHADE
+	0x00b1: 0x2592,	# MEDIUM SHADE
+	0x00b2: 0x2593,	# DARK SHADE
+	0x00b3: 0x2502,	# BOX DRAWINGS LIGHT VERTICAL
+	0x00b4: 0x2524,	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x00b5: 0x039a,	# GREEK CAPITAL LETTER KAPPA
+	0x00b6: 0x039b,	# GREEK CAPITAL LETTER LAMDA
+	0x00b7: 0x039c,	# GREEK CAPITAL LETTER MU
+	0x00b8: 0x039d,	# GREEK CAPITAL LETTER NU
+	0x00b9: 0x2563,	# BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00ba: 0x2551,	# BOX DRAWINGS DOUBLE VERTICAL
+	0x00bb: 0x2557,	# BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00bc: 0x255d,	# BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00bd: 0x039e,	# GREEK CAPITAL LETTER XI
+	0x00be: 0x039f,	# GREEK CAPITAL LETTER OMICRON
+	0x00bf: 0x2510,	# BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x00c0: 0x2514,	# BOX DRAWINGS LIGHT UP AND RIGHT
+	0x00c1: 0x2534,	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x00c2: 0x252c,	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x00c3: 0x251c,	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x00c4: 0x2500,	# BOX DRAWINGS LIGHT HORIZONTAL
+	0x00c5: 0x253c,	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x00c6: 0x03a0,	# GREEK CAPITAL LETTER PI
+	0x00c7: 0x03a1,	# GREEK CAPITAL LETTER RHO
+	0x00c8: 0x255a,	# BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00c9: 0x2554,	# BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00ca: 0x2569,	# BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00cb: 0x2566,	# BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00cc: 0x2560,	# BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00cd: 0x2550,	# BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00ce: 0x256c,	# BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00cf: 0x03a3,	# GREEK CAPITAL LETTER SIGMA
+	0x00d0: 0x03a4,	# GREEK CAPITAL LETTER TAU
+	0x00d1: 0x03a5,	# GREEK CAPITAL LETTER UPSILON
+	0x00d2: 0x03a6,	# GREEK CAPITAL LETTER PHI
+	0x00d3: 0x03a7,	# GREEK CAPITAL LETTER CHI
+	0x00d4: 0x03a8,	# GREEK CAPITAL LETTER PSI
+	0x00d5: 0x03a9,	# GREEK CAPITAL LETTER OMEGA
+	0x00d6: 0x03b1,	# GREEK SMALL LETTER ALPHA
+	0x00d7: 0x03b2,	# GREEK SMALL LETTER BETA
+	0x00d8: 0x03b3,	# GREEK SMALL LETTER GAMMA
+	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
+	0x00da: 0x250c,	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x00db: 0x2588,	# FULL BLOCK
+	0x00dc: 0x2584,	# LOWER HALF BLOCK
+	0x00dd: 0x03b4,	# GREEK SMALL LETTER DELTA
+	0x00de: 0x03b5,	# GREEK SMALL LETTER EPSILON
+	0x00df: 0x2580,	# UPPER HALF BLOCK
+	0x00e0: 0x03b6,	# GREEK SMALL LETTER ZETA
+	0x00e1: 0x03b7,	# GREEK SMALL LETTER ETA
+	0x00e2: 0x03b8,	# GREEK SMALL LETTER THETA
+	0x00e3: 0x03b9,	# GREEK SMALL LETTER IOTA
+	0x00e4: 0x03ba,	# GREEK SMALL LETTER KAPPA
+	0x00e5: 0x03bb,	# GREEK SMALL LETTER LAMDA
+	0x00e6: 0x03bc,	# GREEK SMALL LETTER MU
+	0x00e7: 0x03bd,	# GREEK SMALL LETTER NU
+	0x00e8: 0x03be,	# GREEK SMALL LETTER XI
+	0x00e9: 0x03bf,	# GREEK SMALL LETTER OMICRON
+	0x00ea: 0x03c0,	# GREEK SMALL LETTER PI
+	0x00eb: 0x03c1,	# GREEK SMALL LETTER RHO
+	0x00ec: 0x03c3,	# GREEK SMALL LETTER SIGMA
+	0x00ed: 0x03c2,	# GREEK SMALL LETTER FINAL SIGMA
+	0x00ee: 0x03c4,	# GREEK SMALL LETTER TAU
+	0x00ef: 0x0384,	# GREEK TONOS
+	0x00f0: 0x00ad,	# SOFT HYPHEN
+	0x00f1: 0x00b1,	# PLUS-MINUS SIGN
+	0x00f2: 0x03c5,	# GREEK SMALL LETTER UPSILON
+	0x00f3: 0x03c6,	# GREEK SMALL LETTER PHI
+	0x00f4: 0x03c7,	# GREEK SMALL LETTER CHI
+	0x00f5: 0x00a7,	# SECTION SIGN
+	0x00f6: 0x03c8,	# GREEK SMALL LETTER PSI
+	0x00f7: 0x0385,	# GREEK DIALYTIKA TONOS
+	0x00f8: 0x00b0,	# DEGREE SIGN
+	0x00f9: 0x00a8,	# DIAERESIS
+	0x00fa: 0x03c9,	# GREEK SMALL LETTER OMEGA
+	0x00fb: 0x03cb,	# GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+	0x00fc: 0x03b0,	# GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+	0x00fd: 0x03ce,	# GREEK SMALL LETTER OMEGA WITH TONOS
+	0x00fe: 0x25a0,	# BLACK SQUARE
+	0x00ff: 0x00a0,	# NO-BREAK SPACE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp874.py b/Lib/encodings/cp874.py
new file mode 100644
index 0000000..0231c7a
--- /dev/null
+++ b/Lib/encodings/cp874.py
@@ -0,0 +1,173 @@
+""" Python Character Mapping Codec generated from 'CP874.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x20ac,	# EURO SIGN
+	0x0081: None,	# UNDEFINED
+	0x0082: None,	# UNDEFINED
+	0x0083: None,	# UNDEFINED
+	0x0084: None,	# UNDEFINED
+	0x0085: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x0086: None,	# UNDEFINED
+	0x0087: None,	# UNDEFINED
+	0x0088: None,	# UNDEFINED
+	0x0089: None,	# UNDEFINED
+	0x008a: None,	# UNDEFINED
+	0x008b: None,	# UNDEFINED
+	0x008c: None,	# UNDEFINED
+	0x008d: None,	# UNDEFINED
+	0x008e: None,	# UNDEFINED
+	0x008f: None,	# UNDEFINED
+	0x0090: None,	# UNDEFINED
+	0x0091: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x0092: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x0093: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x0094: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x0095: 0x2022,	# BULLET
+	0x0096: 0x2013,	# EN DASH
+	0x0097: 0x2014,	# EM DASH
+	0x0098: None,	# UNDEFINED
+	0x0099: None,	# UNDEFINED
+	0x009a: None,	# UNDEFINED
+	0x009b: None,	# UNDEFINED
+	0x009c: None,	# UNDEFINED
+	0x009d: None,	# UNDEFINED
+	0x009e: None,	# UNDEFINED
+	0x009f: None,	# UNDEFINED
+	0x00a1: 0x0e01,	# THAI CHARACTER KO KAI
+	0x00a2: 0x0e02,	# THAI CHARACTER KHO KHAI
+	0x00a3: 0x0e03,	# THAI CHARACTER KHO KHUAT
+	0x00a4: 0x0e04,	# THAI CHARACTER KHO KHWAI
+	0x00a5: 0x0e05,	# THAI CHARACTER KHO KHON
+	0x00a6: 0x0e06,	# THAI CHARACTER KHO RAKHANG
+	0x00a7: 0x0e07,	# THAI CHARACTER NGO NGU
+	0x00a8: 0x0e08,	# THAI CHARACTER CHO CHAN
+	0x00a9: 0x0e09,	# THAI CHARACTER CHO CHING
+	0x00aa: 0x0e0a,	# THAI CHARACTER CHO CHANG
+	0x00ab: 0x0e0b,	# THAI CHARACTER SO SO
+	0x00ac: 0x0e0c,	# THAI CHARACTER CHO CHOE
+	0x00ad: 0x0e0d,	# THAI CHARACTER YO YING
+	0x00ae: 0x0e0e,	# THAI CHARACTER DO CHADA
+	0x00af: 0x0e0f,	# THAI CHARACTER TO PATAK
+	0x00b0: 0x0e10,	# THAI CHARACTER THO THAN
+	0x00b1: 0x0e11,	# THAI CHARACTER THO NANGMONTHO
+	0x00b2: 0x0e12,	# THAI CHARACTER THO PHUTHAO
+	0x00b3: 0x0e13,	# THAI CHARACTER NO NEN
+	0x00b4: 0x0e14,	# THAI CHARACTER DO DEK
+	0x00b5: 0x0e15,	# THAI CHARACTER TO TAO
+	0x00b6: 0x0e16,	# THAI CHARACTER THO THUNG
+	0x00b7: 0x0e17,	# THAI CHARACTER THO THAHAN
+	0x00b8: 0x0e18,	# THAI CHARACTER THO THONG
+	0x00b9: 0x0e19,	# THAI CHARACTER NO NU
+	0x00ba: 0x0e1a,	# THAI CHARACTER BO BAIMAI
+	0x00bb: 0x0e1b,	# THAI CHARACTER PO PLA
+	0x00bc: 0x0e1c,	# THAI CHARACTER PHO PHUNG
+	0x00bd: 0x0e1d,	# THAI CHARACTER FO FA
+	0x00be: 0x0e1e,	# THAI CHARACTER PHO PHAN
+	0x00bf: 0x0e1f,	# THAI CHARACTER FO FAN
+	0x00c0: 0x0e20,	# THAI CHARACTER PHO SAMPHAO
+	0x00c1: 0x0e21,	# THAI CHARACTER MO MA
+	0x00c2: 0x0e22,	# THAI CHARACTER YO YAK
+	0x00c3: 0x0e23,	# THAI CHARACTER RO RUA
+	0x00c4: 0x0e24,	# THAI CHARACTER RU
+	0x00c5: 0x0e25,	# THAI CHARACTER LO LING
+	0x00c6: 0x0e26,	# THAI CHARACTER LU
+	0x00c7: 0x0e27,	# THAI CHARACTER WO WAEN
+	0x00c8: 0x0e28,	# THAI CHARACTER SO SALA
+	0x00c9: 0x0e29,	# THAI CHARACTER SO RUSI
+	0x00ca: 0x0e2a,	# THAI CHARACTER SO SUA
+	0x00cb: 0x0e2b,	# THAI CHARACTER HO HIP
+	0x00cc: 0x0e2c,	# THAI CHARACTER LO CHULA
+	0x00cd: 0x0e2d,	# THAI CHARACTER O ANG
+	0x00ce: 0x0e2e,	# THAI CHARACTER HO NOKHUK
+	0x00cf: 0x0e2f,	# THAI CHARACTER PAIYANNOI
+	0x00d0: 0x0e30,	# THAI CHARACTER SARA A
+	0x00d1: 0x0e31,	# THAI CHARACTER MAI HAN-AKAT
+	0x00d2: 0x0e32,	# THAI CHARACTER SARA AA
+	0x00d3: 0x0e33,	# THAI CHARACTER SARA AM
+	0x00d4: 0x0e34,	# THAI CHARACTER SARA I
+	0x00d5: 0x0e35,	# THAI CHARACTER SARA II
+	0x00d6: 0x0e36,	# THAI CHARACTER SARA UE
+	0x00d7: 0x0e37,	# THAI CHARACTER SARA UEE
+	0x00d8: 0x0e38,	# THAI CHARACTER SARA U
+	0x00d9: 0x0e39,	# THAI CHARACTER SARA UU
+	0x00da: 0x0e3a,	# THAI CHARACTER PHINTHU
+	0x00db: None,	# UNDEFINED
+	0x00dc: None,	# UNDEFINED
+	0x00dd: None,	# UNDEFINED
+	0x00de: None,	# UNDEFINED
+	0x00df: 0x0e3f,	# THAI CURRENCY SYMBOL BAHT
+	0x00e0: 0x0e40,	# THAI CHARACTER SARA E
+	0x00e1: 0x0e41,	# THAI CHARACTER SARA AE
+	0x00e2: 0x0e42,	# THAI CHARACTER SARA O
+	0x00e3: 0x0e43,	# THAI CHARACTER SARA AI MAIMUAN
+	0x00e4: 0x0e44,	# THAI CHARACTER SARA AI MAIMALAI
+	0x00e5: 0x0e45,	# THAI CHARACTER LAKKHANGYAO
+	0x00e6: 0x0e46,	# THAI CHARACTER MAIYAMOK
+	0x00e7: 0x0e47,	# THAI CHARACTER MAITAIKHU
+	0x00e8: 0x0e48,	# THAI CHARACTER MAI EK
+	0x00e9: 0x0e49,	# THAI CHARACTER MAI THO
+	0x00ea: 0x0e4a,	# THAI CHARACTER MAI TRI
+	0x00eb: 0x0e4b,	# THAI CHARACTER MAI CHATTAWA
+	0x00ec: 0x0e4c,	# THAI CHARACTER THANTHAKHAT
+	0x00ed: 0x0e4d,	# THAI CHARACTER NIKHAHIT
+	0x00ee: 0x0e4e,	# THAI CHARACTER YAMAKKAN
+	0x00ef: 0x0e4f,	# THAI CHARACTER FONGMAN
+	0x00f0: 0x0e50,	# THAI DIGIT ZERO
+	0x00f1: 0x0e51,	# THAI DIGIT ONE
+	0x00f2: 0x0e52,	# THAI DIGIT TWO
+	0x00f3: 0x0e53,	# THAI DIGIT THREE
+	0x00f4: 0x0e54,	# THAI DIGIT FOUR
+	0x00f5: 0x0e55,	# THAI DIGIT FIVE
+	0x00f6: 0x0e56,	# THAI DIGIT SIX
+	0x00f7: 0x0e57,	# THAI DIGIT SEVEN
+	0x00f8: 0x0e58,	# THAI DIGIT EIGHT
+	0x00f9: 0x0e59,	# THAI DIGIT NINE
+	0x00fa: 0x0e5a,	# THAI CHARACTER ANGKHANKHU
+	0x00fb: 0x0e5b,	# THAI CHARACTER KHOMUT
+	0x00fc: None,	# UNDEFINED
+	0x00fd: None,	# UNDEFINED
+	0x00fe: None,	# UNDEFINED
+	0x00ff: None,	# UNDEFINED
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/cp875.py b/Lib/encodings/cp875.py
new file mode 100644
index 0000000..924c0a0
--- /dev/null
+++ b/Lib/encodings/cp875.py
@@ -0,0 +1,283 @@
+""" Python Character Mapping Codec generated from 'CP875.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0004: 0x009c,	# CONTROL
+	0x0005: 0x0009,	# HORIZONTAL TABULATION
+	0x0006: 0x0086,	# CONTROL
+	0x0007: 0x007f,	# DELETE
+	0x0008: 0x0097,	# CONTROL
+	0x0009: 0x008d,	# CONTROL
+	0x000a: 0x008e,	# CONTROL
+	0x0014: 0x009d,	# CONTROL
+	0x0015: 0x0085,	# CONTROL
+	0x0016: 0x0008,	# BACKSPACE
+	0x0017: 0x0087,	# CONTROL
+	0x001a: 0x0092,	# CONTROL
+	0x001b: 0x008f,	# CONTROL
+	0x0020: 0x0080,	# CONTROL
+	0x0021: 0x0081,	# CONTROL
+	0x0022: 0x0082,	# CONTROL
+	0x0023: 0x0083,	# CONTROL
+	0x0024: 0x0084,	# CONTROL
+	0x0025: 0x000a,	# LINE FEED
+	0x0026: 0x0017,	# END OF TRANSMISSION BLOCK
+	0x0027: 0x001b,	# ESCAPE
+	0x0028: 0x0088,	# CONTROL
+	0x0029: 0x0089,	# CONTROL
+	0x002a: 0x008a,	# CONTROL
+	0x002b: 0x008b,	# CONTROL
+	0x002c: 0x008c,	# CONTROL
+	0x002d: 0x0005,	# ENQUIRY
+	0x002e: 0x0006,	# ACKNOWLEDGE
+	0x002f: 0x0007,	# BELL
+	0x0030: 0x0090,	# CONTROL
+	0x0031: 0x0091,	# CONTROL
+	0x0032: 0x0016,	# SYNCHRONOUS IDLE
+	0x0033: 0x0093,	# CONTROL
+	0x0034: 0x0094,	# CONTROL
+	0x0035: 0x0095,	# CONTROL
+	0x0036: 0x0096,	# CONTROL
+	0x0037: 0x0004,	# END OF TRANSMISSION
+	0x0038: 0x0098,	# CONTROL
+	0x0039: 0x0099,	# CONTROL
+	0x003a: 0x009a,	# CONTROL
+	0x003b: 0x009b,	# CONTROL
+	0x003c: 0x0014,	# DEVICE CONTROL FOUR
+	0x003d: 0x0015,	# NEGATIVE ACKNOWLEDGE
+	0x003e: 0x009e,	# CONTROL
+	0x003f: 0x001a,	# SUBSTITUTE
+	0x0040: 0x0020,	# SPACE
+	0x0041: 0x0391,	# GREEK CAPITAL LETTER ALPHA
+	0x0042: 0x0392,	# GREEK CAPITAL LETTER BETA
+	0x0043: 0x0393,	# GREEK CAPITAL LETTER GAMMA
+	0x0044: 0x0394,	# GREEK CAPITAL LETTER DELTA
+	0x0045: 0x0395,	# GREEK CAPITAL LETTER EPSILON
+	0x0046: 0x0396,	# GREEK CAPITAL LETTER ZETA
+	0x0047: 0x0397,	# GREEK CAPITAL LETTER ETA
+	0x0048: 0x0398,	# GREEK CAPITAL LETTER THETA
+	0x0049: 0x0399,	# GREEK CAPITAL LETTER IOTA
+	0x004a: 0x005b,	# LEFT SQUARE BRACKET
+	0x004b: 0x002e,	# FULL STOP
+	0x004c: 0x003c,	# LESS-THAN SIGN
+	0x004d: 0x0028,	# LEFT PARENTHESIS
+	0x004e: 0x002b,	# PLUS SIGN
+	0x004f: 0x0021,	# EXCLAMATION MARK
+	0x0050: 0x0026,	# AMPERSAND
+	0x0051: 0x039a,	# GREEK CAPITAL LETTER KAPPA
+	0x0052: 0x039b,	# GREEK CAPITAL LETTER LAMDA
+	0x0053: 0x039c,	# GREEK CAPITAL LETTER MU
+	0x0054: 0x039d,	# GREEK CAPITAL LETTER NU
+	0x0055: 0x039e,	# GREEK CAPITAL LETTER XI
+	0x0056: 0x039f,	# GREEK CAPITAL LETTER OMICRON
+	0x0057: 0x03a0,	# GREEK CAPITAL LETTER PI
+	0x0058: 0x03a1,	# GREEK CAPITAL LETTER RHO
+	0x0059: 0x03a3,	# GREEK CAPITAL LETTER SIGMA
+	0x005a: 0x005d,	# RIGHT SQUARE BRACKET
+	0x005b: 0x0024,	# DOLLAR SIGN
+	0x005c: 0x002a,	# ASTERISK
+	0x005d: 0x0029,	# RIGHT PARENTHESIS
+	0x005e: 0x003b,	# SEMICOLON
+	0x005f: 0x005e,	# CIRCUMFLEX ACCENT
+	0x0060: 0x002d,	# HYPHEN-MINUS
+	0x0061: 0x002f,	# SOLIDUS
+	0x0062: 0x03a4,	# GREEK CAPITAL LETTER TAU
+	0x0063: 0x03a5,	# GREEK CAPITAL LETTER UPSILON
+	0x0064: 0x03a6,	# GREEK CAPITAL LETTER PHI
+	0x0065: 0x03a7,	# GREEK CAPITAL LETTER CHI
+	0x0066: 0x03a8,	# GREEK CAPITAL LETTER PSI
+	0x0067: 0x03a9,	# GREEK CAPITAL LETTER OMEGA
+	0x0068: 0x03aa,	# GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+	0x0069: 0x03ab,	# GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+	0x006a: 0x007c,	# VERTICAL LINE
+	0x006b: 0x002c,	# COMMA
+	0x006c: 0x0025,	# PERCENT SIGN
+	0x006d: 0x005f,	# LOW LINE
+	0x006e: 0x003e,	# GREATER-THAN SIGN
+	0x006f: 0x003f,	# QUESTION MARK
+	0x0070: 0x00a8,	# DIAERESIS
+	0x0071: 0x0386,	# GREEK CAPITAL LETTER ALPHA WITH TONOS
+	0x0072: 0x0388,	# GREEK CAPITAL LETTER EPSILON WITH TONOS
+	0x0073: 0x0389,	# GREEK CAPITAL LETTER ETA WITH TONOS
+	0x0074: 0x00a0,	# NO-BREAK SPACE
+	0x0075: 0x038a,	# GREEK CAPITAL LETTER IOTA WITH TONOS
+	0x0076: 0x038c,	# GREEK CAPITAL LETTER OMICRON WITH TONOS
+	0x0077: 0x038e,	# GREEK CAPITAL LETTER UPSILON WITH TONOS
+	0x0078: 0x038f,	# GREEK CAPITAL LETTER OMEGA WITH TONOS
+	0x0079: 0x0060,	# GRAVE ACCENT
+	0x007a: 0x003a,	# COLON
+	0x007b: 0x0023,	# NUMBER SIGN
+	0x007c: 0x0040,	# COMMERCIAL AT
+	0x007d: 0x0027,	# APOSTROPHE
+	0x007e: 0x003d,	# EQUALS SIGN
+	0x007f: 0x0022,	# QUOTATION MARK
+	0x0080: 0x0385,	# GREEK DIALYTIKA TONOS
+	0x0081: 0x0061,	# LATIN SMALL LETTER A
+	0x0082: 0x0062,	# LATIN SMALL LETTER B
+	0x0083: 0x0063,	# LATIN SMALL LETTER C
+	0x0084: 0x0064,	# LATIN SMALL LETTER D
+	0x0085: 0x0065,	# LATIN SMALL LETTER E
+	0x0086: 0x0066,	# LATIN SMALL LETTER F
+	0x0087: 0x0067,	# LATIN SMALL LETTER G
+	0x0088: 0x0068,	# LATIN SMALL LETTER H
+	0x0089: 0x0069,	# LATIN SMALL LETTER I
+	0x008a: 0x03b1,	# GREEK SMALL LETTER ALPHA
+	0x008b: 0x03b2,	# GREEK SMALL LETTER BETA
+	0x008c: 0x03b3,	# GREEK SMALL LETTER GAMMA
+	0x008d: 0x03b4,	# GREEK SMALL LETTER DELTA
+	0x008e: 0x03b5,	# GREEK SMALL LETTER EPSILON
+	0x008f: 0x03b6,	# GREEK SMALL LETTER ZETA
+	0x0090: 0x00b0,	# DEGREE SIGN
+	0x0091: 0x006a,	# LATIN SMALL LETTER J
+	0x0092: 0x006b,	# LATIN SMALL LETTER K
+	0x0093: 0x006c,	# LATIN SMALL LETTER L
+	0x0094: 0x006d,	# LATIN SMALL LETTER M
+	0x0095: 0x006e,	# LATIN SMALL LETTER N
+	0x0096: 0x006f,	# LATIN SMALL LETTER O
+	0x0097: 0x0070,	# LATIN SMALL LETTER P
+	0x0098: 0x0071,	# LATIN SMALL LETTER Q
+	0x0099: 0x0072,	# LATIN SMALL LETTER R
+	0x009a: 0x03b7,	# GREEK SMALL LETTER ETA
+	0x009b: 0x03b8,	# GREEK SMALL LETTER THETA
+	0x009c: 0x03b9,	# GREEK SMALL LETTER IOTA
+	0x009d: 0x03ba,	# GREEK SMALL LETTER KAPPA
+	0x009e: 0x03bb,	# GREEK SMALL LETTER LAMDA
+	0x009f: 0x03bc,	# GREEK SMALL LETTER MU
+	0x00a0: 0x00b4,	# ACUTE ACCENT
+	0x00a1: 0x007e,	# TILDE
+	0x00a2: 0x0073,	# LATIN SMALL LETTER S
+	0x00a3: 0x0074,	# LATIN SMALL LETTER T
+	0x00a4: 0x0075,	# LATIN SMALL LETTER U
+	0x00a5: 0x0076,	# LATIN SMALL LETTER V
+	0x00a6: 0x0077,	# LATIN SMALL LETTER W
+	0x00a7: 0x0078,	# LATIN SMALL LETTER X
+	0x00a8: 0x0079,	# LATIN SMALL LETTER Y
+	0x00a9: 0x007a,	# LATIN SMALL LETTER Z
+	0x00aa: 0x03bd,	# GREEK SMALL LETTER NU
+	0x00ab: 0x03be,	# GREEK SMALL LETTER XI
+	0x00ac: 0x03bf,	# GREEK SMALL LETTER OMICRON
+	0x00ad: 0x03c0,	# GREEK SMALL LETTER PI
+	0x00ae: 0x03c1,	# GREEK SMALL LETTER RHO
+	0x00af: 0x03c3,	# GREEK SMALL LETTER SIGMA
+	0x00b0: 0x00a3,	# POUND SIGN
+	0x00b1: 0x03ac,	# GREEK SMALL LETTER ALPHA WITH TONOS
+	0x00b2: 0x03ad,	# GREEK SMALL LETTER EPSILON WITH TONOS
+	0x00b3: 0x03ae,	# GREEK SMALL LETTER ETA WITH TONOS
+	0x00b4: 0x03ca,	# GREEK SMALL LETTER IOTA WITH DIALYTIKA
+	0x00b5: 0x03af,	# GREEK SMALL LETTER IOTA WITH TONOS
+	0x00b6: 0x03cc,	# GREEK SMALL LETTER OMICRON WITH TONOS
+	0x00b7: 0x03cd,	# GREEK SMALL LETTER UPSILON WITH TONOS
+	0x00b8: 0x03cb,	# GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+	0x00b9: 0x03ce,	# GREEK SMALL LETTER OMEGA WITH TONOS
+	0x00ba: 0x03c2,	# GREEK SMALL LETTER FINAL SIGMA
+	0x00bb: 0x03c4,	# GREEK SMALL LETTER TAU
+	0x00bc: 0x03c5,	# GREEK SMALL LETTER UPSILON
+	0x00bd: 0x03c6,	# GREEK SMALL LETTER PHI
+	0x00be: 0x03c7,	# GREEK SMALL LETTER CHI
+	0x00bf: 0x03c8,	# GREEK SMALL LETTER PSI
+	0x00c0: 0x007b,	# LEFT CURLY BRACKET
+	0x00c1: 0x0041,	# LATIN CAPITAL LETTER A
+	0x00c2: 0x0042,	# LATIN CAPITAL LETTER B
+	0x00c3: 0x0043,	# LATIN CAPITAL LETTER C
+	0x00c4: 0x0044,	# LATIN CAPITAL LETTER D
+	0x00c5: 0x0045,	# LATIN CAPITAL LETTER E
+	0x00c6: 0x0046,	# LATIN CAPITAL LETTER F
+	0x00c7: 0x0047,	# LATIN CAPITAL LETTER G
+	0x00c8: 0x0048,	# LATIN CAPITAL LETTER H
+	0x00c9: 0x0049,	# LATIN CAPITAL LETTER I
+	0x00ca: 0x00ad,	# SOFT HYPHEN
+	0x00cb: 0x03c9,	# GREEK SMALL LETTER OMEGA
+	0x00cc: 0x0390,	# GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+	0x00cd: 0x03b0,	# GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+	0x00ce: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x00cf: 0x2015,	# HORIZONTAL BAR
+	0x00d0: 0x007d,	# RIGHT CURLY BRACKET
+	0x00d1: 0x004a,	# LATIN CAPITAL LETTER J
+	0x00d2: 0x004b,	# LATIN CAPITAL LETTER K
+	0x00d3: 0x004c,	# LATIN CAPITAL LETTER L
+	0x00d4: 0x004d,	# LATIN CAPITAL LETTER M
+	0x00d5: 0x004e,	# LATIN CAPITAL LETTER N
+	0x00d6: 0x004f,	# LATIN CAPITAL LETTER O
+	0x00d7: 0x0050,	# LATIN CAPITAL LETTER P
+	0x00d8: 0x0051,	# LATIN CAPITAL LETTER Q
+	0x00d9: 0x0052,	# LATIN CAPITAL LETTER R
+	0x00da: 0x00b1,	# PLUS-MINUS SIGN
+	0x00db: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x00dc: 0x001a,	# SUBSTITUTE
+	0x00dd: 0x0387,	# GREEK ANO TELEIA
+	0x00de: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x00df: 0x00a6,	# BROKEN BAR
+	0x00e0: 0x005c,	# REVERSE SOLIDUS
+	0x00e1: 0x001a,	# SUBSTITUTE
+	0x00e2: 0x0053,	# LATIN CAPITAL LETTER S
+	0x00e3: 0x0054,	# LATIN CAPITAL LETTER T
+	0x00e4: 0x0055,	# LATIN CAPITAL LETTER U
+	0x00e5: 0x0056,	# LATIN CAPITAL LETTER V
+	0x00e6: 0x0057,	# LATIN CAPITAL LETTER W
+	0x00e7: 0x0058,	# LATIN CAPITAL LETTER X
+	0x00e8: 0x0059,	# LATIN CAPITAL LETTER Y
+	0x00e9: 0x005a,	# LATIN CAPITAL LETTER Z
+	0x00ea: 0x00b2,	# SUPERSCRIPT TWO
+	0x00eb: 0x00a7,	# SECTION SIGN
+	0x00ec: 0x001a,	# SUBSTITUTE
+	0x00ed: 0x001a,	# SUBSTITUTE
+	0x00ee: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00ef: 0x00ac,	# NOT SIGN
+	0x00f0: 0x0030,	# DIGIT ZERO
+	0x00f1: 0x0031,	# DIGIT ONE
+	0x00f2: 0x0032,	# DIGIT TWO
+	0x00f3: 0x0033,	# DIGIT THREE
+	0x00f4: 0x0034,	# DIGIT FOUR
+	0x00f5: 0x0035,	# DIGIT FIVE
+	0x00f6: 0x0036,	# DIGIT SIX
+	0x00f7: 0x0037,	# DIGIT SEVEN
+	0x00f8: 0x0038,	# DIGIT EIGHT
+	0x00f9: 0x0039,	# DIGIT NINE
+	0x00fa: 0x00b3,	# SUPERSCRIPT THREE
+	0x00fb: 0x00a9,	# COPYRIGHT SIGN
+	0x00fc: 0x001a,	# SUBSTITUTE
+	0x00fd: 0x001a,	# SUBSTITUTE
+	0x00fe: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00ff: 0x009f,	# CONTROL
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/iso8859_1.py b/Lib/encodings/iso8859_1.py
new file mode 100644
index 0000000..7355853
--- /dev/null
+++ b/Lib/encodings/iso8859_1.py
@@ -0,0 +1,49 @@
+""" Python Character Mapping Codec generated from '8859-1.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+
+    def __init__(self,stream,errors='strict'):
+
+        codecs.StreamWriter.__init__(self,strict,errors)
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/iso8859_10.py b/Lib/encodings/iso8859_10.py
new file mode 100644
index 0000000..96b435c
--- /dev/null
+++ b/Lib/encodings/iso8859_10.py
@@ -0,0 +1,92 @@
+""" Python Character Mapping Codec generated from '8859-10.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x00a1: 0x0104,	# 	LATIN CAPITAL LETTER A WITH OGONEK
+	0x00a2: 0x0112,	# 	LATIN CAPITAL LETTER E WITH MACRON
+	0x00a3: 0x0122,	# 	LATIN CAPITAL LETTER G WITH CEDILLA
+	0x00a4: 0x012a,	# 	LATIN CAPITAL LETTER I WITH MACRON
+	0x00a5: 0x0128,	# 	LATIN CAPITAL LETTER I WITH TILDE
+	0x00a6: 0x0136,	# 	LATIN CAPITAL LETTER K WITH CEDILLA
+	0x00a8: 0x013b,	# 	LATIN CAPITAL LETTER L WITH CEDILLA
+	0x00a9: 0x0110,	# 	LATIN CAPITAL LETTER D WITH STROKE
+	0x00aa: 0x0160,	# 	LATIN CAPITAL LETTER S WITH CARON
+	0x00ab: 0x0166,	# 	LATIN CAPITAL LETTER T WITH STROKE
+	0x00ac: 0x017d,	# 	LATIN CAPITAL LETTER Z WITH CARON
+	0x00ae: 0x016a,	# 	LATIN CAPITAL LETTER U WITH MACRON
+	0x00af: 0x014a,	# 	LATIN CAPITAL LETTER ENG
+	0x00b1: 0x0105,	# 	LATIN SMALL LETTER A WITH OGONEK
+	0x00b2: 0x0113,	# 	LATIN SMALL LETTER E WITH MACRON
+	0x00b3: 0x0123,	# 	LATIN SMALL LETTER G WITH CEDILLA
+	0x00b4: 0x012b,	# 	LATIN SMALL LETTER I WITH MACRON
+	0x00b5: 0x0129,	# 	LATIN SMALL LETTER I WITH TILDE
+	0x00b6: 0x0137,	# 	LATIN SMALL LETTER K WITH CEDILLA
+	0x00b8: 0x013c,	# 	LATIN SMALL LETTER L WITH CEDILLA
+	0x00b9: 0x0111,	# 	LATIN SMALL LETTER D WITH STROKE
+	0x00ba: 0x0161,	# 	LATIN SMALL LETTER S WITH CARON
+	0x00bb: 0x0167,	# 	LATIN SMALL LETTER T WITH STROKE
+	0x00bc: 0x017e,	# 	LATIN SMALL LETTER Z WITH CARON
+	0x00bd: 0x2015,	# 	HORIZONTAL BAR
+	0x00be: 0x016b,	# 	LATIN SMALL LETTER U WITH MACRON
+	0x00bf: 0x014b,	# 	LATIN SMALL LETTER ENG
+	0x00c0: 0x0100,	# 	LATIN CAPITAL LETTER A WITH MACRON
+	0x00c7: 0x012e,	# 	LATIN CAPITAL LETTER I WITH OGONEK
+	0x00c8: 0x010c,	# 	LATIN CAPITAL LETTER C WITH CARON
+	0x00ca: 0x0118,	# 	LATIN CAPITAL LETTER E WITH OGONEK
+	0x00cc: 0x0116,	# 	LATIN CAPITAL LETTER E WITH DOT ABOVE
+	0x00d1: 0x0145,	# 	LATIN CAPITAL LETTER N WITH CEDILLA
+	0x00d2: 0x014c,	# 	LATIN CAPITAL LETTER O WITH MACRON
+	0x00d7: 0x0168,	# 	LATIN CAPITAL LETTER U WITH TILDE
+	0x00d9: 0x0172,	# 	LATIN CAPITAL LETTER U WITH OGONEK
+	0x00e0: 0x0101,	# 	LATIN SMALL LETTER A WITH MACRON
+	0x00e7: 0x012f,	# 	LATIN SMALL LETTER I WITH OGONEK
+	0x00e8: 0x010d,	# 	LATIN SMALL LETTER C WITH CARON
+	0x00ea: 0x0119,	# 	LATIN SMALL LETTER E WITH OGONEK
+	0x00ec: 0x0117,	# 	LATIN SMALL LETTER E WITH DOT ABOVE
+	0x00f1: 0x0146,	# 	LATIN SMALL LETTER N WITH CEDILLA
+	0x00f2: 0x014d,	# 	LATIN SMALL LETTER O WITH MACRON
+	0x00f7: 0x0169,	# 	LATIN SMALL LETTER U WITH TILDE
+	0x00f9: 0x0173,	# 	LATIN SMALL LETTER U WITH OGONEK
+	0x00ff: 0x0138,	# 	LATIN SMALL LETTER KRA
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/iso8859_13.py b/Lib/encodings/iso8859_13.py
new file mode 100644
index 0000000..d8b2230
--- /dev/null
+++ b/Lib/encodings/iso8859_13.py
@@ -0,0 +1,102 @@
+""" Python Character Mapping Codec generated from '8859-13.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x00a1: 0x201d,	# 	RIGHT DOUBLE QUOTATION MARK
+	0x00a5: 0x201e,	# 	DOUBLE LOW-9 QUOTATION MARK
+	0x00a8: 0x00d8,	# 	LATIN CAPITAL LETTER O WITH STROKE
+	0x00aa: 0x0156,	# 	LATIN CAPITAL LETTER R WITH CEDILLA
+	0x00af: 0x00c6,	# 	LATIN CAPITAL LETTER AE
+	0x00b4: 0x201c,	# 	LEFT DOUBLE QUOTATION MARK
+	0x00b8: 0x00f8,	# 	LATIN SMALL LETTER O WITH STROKE
+	0x00ba: 0x0157,	# 	LATIN SMALL LETTER R WITH CEDILLA
+	0x00bf: 0x00e6,	# 	LATIN SMALL LETTER AE
+	0x00c0: 0x0104,	# 	LATIN CAPITAL LETTER A WITH OGONEK
+	0x00c1: 0x012e,	# 	LATIN CAPITAL LETTER I WITH OGONEK
+	0x00c2: 0x0100,	# 	LATIN CAPITAL LETTER A WITH MACRON
+	0x00c3: 0x0106,	# 	LATIN CAPITAL LETTER C WITH ACUTE
+	0x00c6: 0x0118,	# 	LATIN CAPITAL LETTER E WITH OGONEK
+	0x00c7: 0x0112,	# 	LATIN CAPITAL LETTER E WITH MACRON
+	0x00c8: 0x010c,	# 	LATIN CAPITAL LETTER C WITH CARON
+	0x00ca: 0x0179,	# 	LATIN CAPITAL LETTER Z WITH ACUTE
+	0x00cb: 0x0116,	# 	LATIN CAPITAL LETTER E WITH DOT ABOVE
+	0x00cc: 0x0122,	# 	LATIN CAPITAL LETTER G WITH CEDILLA
+	0x00cd: 0x0136,	# 	LATIN CAPITAL LETTER K WITH CEDILLA
+	0x00ce: 0x012a,	# 	LATIN CAPITAL LETTER I WITH MACRON
+	0x00cf: 0x013b,	# 	LATIN CAPITAL LETTER L WITH CEDILLA
+	0x00d0: 0x0160,	# 	LATIN CAPITAL LETTER S WITH CARON
+	0x00d1: 0x0143,	# 	LATIN CAPITAL LETTER N WITH ACUTE
+	0x00d2: 0x0145,	# 	LATIN CAPITAL LETTER N WITH CEDILLA
+	0x00d4: 0x014c,	# 	LATIN CAPITAL LETTER O WITH MACRON
+	0x00d8: 0x0172,	# 	LATIN CAPITAL LETTER U WITH OGONEK
+	0x00d9: 0x0141,	# 	LATIN CAPITAL LETTER L WITH STROKE
+	0x00da: 0x015a,	# 	LATIN CAPITAL LETTER S WITH ACUTE
+	0x00db: 0x016a,	# 	LATIN CAPITAL LETTER U WITH MACRON
+	0x00dd: 0x017b,	# 	LATIN CAPITAL LETTER Z WITH DOT ABOVE
+	0x00de: 0x017d,	# 	LATIN CAPITAL LETTER Z WITH CARON
+	0x00e0: 0x0105,	# 	LATIN SMALL LETTER A WITH OGONEK
+	0x00e1: 0x012f,	# 	LATIN SMALL LETTER I WITH OGONEK
+	0x00e2: 0x0101,	# 	LATIN SMALL LETTER A WITH MACRON
+	0x00e3: 0x0107,	# 	LATIN SMALL LETTER C WITH ACUTE
+	0x00e6: 0x0119,	# 	LATIN SMALL LETTER E WITH OGONEK
+	0x00e7: 0x0113,	# 	LATIN SMALL LETTER E WITH MACRON
+	0x00e8: 0x010d,	# 	LATIN SMALL LETTER C WITH CARON
+	0x00ea: 0x017a,	# 	LATIN SMALL LETTER Z WITH ACUTE
+	0x00eb: 0x0117,	# 	LATIN SMALL LETTER E WITH DOT ABOVE
+	0x00ec: 0x0123,	# 	LATIN SMALL LETTER G WITH CEDILLA
+	0x00ed: 0x0137,	# 	LATIN SMALL LETTER K WITH CEDILLA
+	0x00ee: 0x012b,	# 	LATIN SMALL LETTER I WITH MACRON
+	0x00ef: 0x013c,	# 	LATIN SMALL LETTER L WITH CEDILLA
+	0x00f0: 0x0161,	# 	LATIN SMALL LETTER S WITH CARON
+	0x00f1: 0x0144,	# 	LATIN SMALL LETTER N WITH ACUTE
+	0x00f2: 0x0146,	# 	LATIN SMALL LETTER N WITH CEDILLA
+	0x00f4: 0x014d,	# 	LATIN SMALL LETTER O WITH MACRON
+	0x00f8: 0x0173,	# 	LATIN SMALL LETTER U WITH OGONEK
+	0x00f9: 0x0142,	# 	LATIN SMALL LETTER L WITH STROKE
+	0x00fa: 0x015b,	# 	LATIN SMALL LETTER S WITH ACUTE
+	0x00fb: 0x016b,	# 	LATIN SMALL LETTER U WITH MACRON
+	0x00fd: 0x017c,	# 	LATIN SMALL LETTER Z WITH DOT ABOVE
+	0x00fe: 0x017e,	# 	LATIN SMALL LETTER Z WITH CARON
+	0x00ff: 0x2019,	# 	RIGHT SINGLE QUOTATION MARK
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/iso8859_14.py b/Lib/encodings/iso8859_14.py
new file mode 100644
index 0000000..8ee0aa9
--- /dev/null
+++ b/Lib/encodings/iso8859_14.py
@@ -0,0 +1,77 @@
+""" Python Character Mapping Codec generated from '8859-14.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x00a1: 0x1e02,	# 	LATIN CAPITAL LETTER B WITH DOT ABOVE
+	0x00a2: 0x1e03,	# 	LATIN SMALL LETTER B WITH DOT ABOVE
+	0x00a4: 0x010a,	# 	LATIN CAPITAL LETTER C WITH DOT ABOVE
+	0x00a5: 0x010b,	# 	LATIN SMALL LETTER C WITH DOT ABOVE
+	0x00a6: 0x1e0a,	# 	LATIN CAPITAL LETTER D WITH DOT ABOVE
+	0x00a8: 0x1e80,	# 	LATIN CAPITAL LETTER W WITH GRAVE
+	0x00aa: 0x1e82,	# 	LATIN CAPITAL LETTER W WITH ACUTE
+	0x00ab: 0x1e0b,	# 	LATIN SMALL LETTER D WITH DOT ABOVE
+	0x00ac: 0x1ef2,	# 	LATIN CAPITAL LETTER Y WITH GRAVE
+	0x00af: 0x0178,	# 	LATIN CAPITAL LETTER Y WITH DIAERESIS
+	0x00b0: 0x1e1e,	# 	LATIN CAPITAL LETTER F WITH DOT ABOVE
+	0x00b1: 0x1e1f,	# 	LATIN SMALL LETTER F WITH DOT ABOVE
+	0x00b2: 0x0120,	# 	LATIN CAPITAL LETTER G WITH DOT ABOVE
+	0x00b3: 0x0121,	# 	LATIN SMALL LETTER G WITH DOT ABOVE
+	0x00b4: 0x1e40,	# 	LATIN CAPITAL LETTER M WITH DOT ABOVE
+	0x00b5: 0x1e41,	# 	LATIN SMALL LETTER M WITH DOT ABOVE
+	0x00b7: 0x1e56,	# 	LATIN CAPITAL LETTER P WITH DOT ABOVE
+	0x00b8: 0x1e81,	# 	LATIN SMALL LETTER W WITH GRAVE
+	0x00b9: 0x1e57,	# 	LATIN SMALL LETTER P WITH DOT ABOVE
+	0x00ba: 0x1e83,	# 	LATIN SMALL LETTER W WITH ACUTE
+	0x00bb: 0x1e60,	# 	LATIN CAPITAL LETTER S WITH DOT ABOVE
+	0x00bc: 0x1ef3,	# 	LATIN SMALL LETTER Y WITH GRAVE
+	0x00bd: 0x1e84,	# 	LATIN CAPITAL LETTER W WITH DIAERESIS
+	0x00be: 0x1e85,	# 	LATIN SMALL LETTER W WITH DIAERESIS
+	0x00bf: 0x1e61,	# 	LATIN SMALL LETTER S WITH DOT ABOVE
+	0x00d0: 0x0174,	# 	LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+	0x00d7: 0x1e6a,	# 	LATIN CAPITAL LETTER T WITH DOT ABOVE
+	0x00de: 0x0176,	# 	LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+	0x00f0: 0x0175,	# 	LATIN SMALL LETTER W WITH CIRCUMFLEX
+	0x00f7: 0x1e6b,	# 	LATIN SMALL LETTER T WITH DOT ABOVE
+	0x00fe: 0x0177,	# 	LATIN SMALL LETTER Y WITH CIRCUMFLEX
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/iso8859_15.py b/Lib/encodings/iso8859_15.py
new file mode 100644
index 0000000..862ff28
--- /dev/null
+++ b/Lib/encodings/iso8859_15.py
@@ -0,0 +1,54 @@
+""" Python Character Mapping Codec generated from '8859-15.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x00a4: 0x20ac,	# 	EURO SIGN
+	0x00a6: 0x0160,	# 	LATIN CAPITAL LETTER S WITH CARON
+	0x00a8: 0x0161,	# 	LATIN SMALL LETTER S WITH CARON
+	0x00b4: 0x017d,	# 	LATIN CAPITAL LETTER Z WITH CARON
+	0x00b8: 0x017e,	# 	LATIN SMALL LETTER Z WITH CARON
+	0x00bc: 0x0152,	# 	LATIN CAPITAL LIGATURE OE
+	0x00bd: 0x0153,	# 	LATIN SMALL LIGATURE OE
+	0x00be: 0x0178,	# 	LATIN CAPITAL LETTER Y WITH DIAERESIS
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/iso8859_2.py b/Lib/encodings/iso8859_2.py
new file mode 100644
index 0000000..034001a
--- /dev/null
+++ b/Lib/encodings/iso8859_2.py
@@ -0,0 +1,103 @@
+""" Python Character Mapping Codec generated from '8859-2.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x00a1: 0x0104,	# 	LATIN CAPITAL LETTER A WITH OGONEK
+	0x00a2: 0x02d8,	# 	BREVE
+	0x00a3: 0x0141,	# 	LATIN CAPITAL LETTER L WITH STROKE
+	0x00a5: 0x013d,	# 	LATIN CAPITAL LETTER L WITH CARON
+	0x00a6: 0x015a,	# 	LATIN CAPITAL LETTER S WITH ACUTE
+	0x00a9: 0x0160,	# 	LATIN CAPITAL LETTER S WITH CARON
+	0x00aa: 0x015e,	# 	LATIN CAPITAL LETTER S WITH CEDILLA
+	0x00ab: 0x0164,	# 	LATIN CAPITAL LETTER T WITH CARON
+	0x00ac: 0x0179,	# 	LATIN CAPITAL LETTER Z WITH ACUTE
+	0x00ae: 0x017d,	# 	LATIN CAPITAL LETTER Z WITH CARON
+	0x00af: 0x017b,	# 	LATIN CAPITAL LETTER Z WITH DOT ABOVE
+	0x00b1: 0x0105,	# 	LATIN SMALL LETTER A WITH OGONEK
+	0x00b2: 0x02db,	# 	OGONEK
+	0x00b3: 0x0142,	# 	LATIN SMALL LETTER L WITH STROKE
+	0x00b5: 0x013e,	# 	LATIN SMALL LETTER L WITH CARON
+	0x00b6: 0x015b,	# 	LATIN SMALL LETTER S WITH ACUTE
+	0x00b7: 0x02c7,	# 	CARON
+	0x00b9: 0x0161,	# 	LATIN SMALL LETTER S WITH CARON
+	0x00ba: 0x015f,	# 	LATIN SMALL LETTER S WITH CEDILLA
+	0x00bb: 0x0165,	# 	LATIN SMALL LETTER T WITH CARON
+	0x00bc: 0x017a,	# 	LATIN SMALL LETTER Z WITH ACUTE
+	0x00bd: 0x02dd,	# 	DOUBLE ACUTE ACCENT
+	0x00be: 0x017e,	# 	LATIN SMALL LETTER Z WITH CARON
+	0x00bf: 0x017c,	# 	LATIN SMALL LETTER Z WITH DOT ABOVE
+	0x00c0: 0x0154,	# 	LATIN CAPITAL LETTER R WITH ACUTE
+	0x00c3: 0x0102,	# 	LATIN CAPITAL LETTER A WITH BREVE
+	0x00c5: 0x0139,	# 	LATIN CAPITAL LETTER L WITH ACUTE
+	0x00c6: 0x0106,	# 	LATIN CAPITAL LETTER C WITH ACUTE
+	0x00c8: 0x010c,	# 	LATIN CAPITAL LETTER C WITH CARON
+	0x00ca: 0x0118,	# 	LATIN CAPITAL LETTER E WITH OGONEK
+	0x00cc: 0x011a,	# 	LATIN CAPITAL LETTER E WITH CARON
+	0x00cf: 0x010e,	# 	LATIN CAPITAL LETTER D WITH CARON
+	0x00d0: 0x0110,	# 	LATIN CAPITAL LETTER D WITH STROKE
+	0x00d1: 0x0143,	# 	LATIN CAPITAL LETTER N WITH ACUTE
+	0x00d2: 0x0147,	# 	LATIN CAPITAL LETTER N WITH CARON
+	0x00d5: 0x0150,	# 	LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+	0x00d8: 0x0158,	# 	LATIN CAPITAL LETTER R WITH CARON
+	0x00d9: 0x016e,	# 	LATIN CAPITAL LETTER U WITH RING ABOVE
+	0x00db: 0x0170,	# 	LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+	0x00de: 0x0162,	# 	LATIN CAPITAL LETTER T WITH CEDILLA
+	0x00e0: 0x0155,	# 	LATIN SMALL LETTER R WITH ACUTE
+	0x00e3: 0x0103,	# 	LATIN SMALL LETTER A WITH BREVE
+	0x00e5: 0x013a,	# 	LATIN SMALL LETTER L WITH ACUTE
+	0x00e6: 0x0107,	# 	LATIN SMALL LETTER C WITH ACUTE
+	0x00e8: 0x010d,	# 	LATIN SMALL LETTER C WITH CARON
+	0x00ea: 0x0119,	# 	LATIN SMALL LETTER E WITH OGONEK
+	0x00ec: 0x011b,	# 	LATIN SMALL LETTER E WITH CARON
+	0x00ef: 0x010f,	# 	LATIN SMALL LETTER D WITH CARON
+	0x00f0: 0x0111,	# 	LATIN SMALL LETTER D WITH STROKE
+	0x00f1: 0x0144,	# 	LATIN SMALL LETTER N WITH ACUTE
+	0x00f2: 0x0148,	# 	LATIN SMALL LETTER N WITH CARON
+	0x00f5: 0x0151,	# 	LATIN SMALL LETTER O WITH DOUBLE ACUTE
+	0x00f8: 0x0159,	# 	LATIN SMALL LETTER R WITH CARON
+	0x00f9: 0x016f,	# 	LATIN SMALL LETTER U WITH RING ABOVE
+	0x00fb: 0x0171,	# 	LATIN SMALL LETTER U WITH DOUBLE ACUTE
+	0x00fe: 0x0163,	# 	LATIN SMALL LETTER T WITH CEDILLA
+	0x00ff: 0x02d9,	# 	DOT ABOVE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/iso8859_3.py b/Lib/encodings/iso8859_3.py
new file mode 100644
index 0000000..f262767
--- /dev/null
+++ b/Lib/encodings/iso8859_3.py
@@ -0,0 +1,74 @@
+""" Python Character Mapping Codec generated from '8859-3.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x00a1: 0x0126,	# 	LATIN CAPITAL LETTER H WITH STROKE
+	0x00a2: 0x02d8,	# 	BREVE
+	0x00a6: 0x0124,	# 	LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+	0x00a9: 0x0130,	# 	LATIN CAPITAL LETTER I WITH DOT ABOVE
+	0x00aa: 0x015e,	# 	LATIN CAPITAL LETTER S WITH CEDILLA
+	0x00ab: 0x011e,	# 	LATIN CAPITAL LETTER G WITH BREVE
+	0x00ac: 0x0134,	# 	LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+	0x00af: 0x017b,	# 	LATIN CAPITAL LETTER Z WITH DOT ABOVE
+	0x00b1: 0x0127,	# 	LATIN SMALL LETTER H WITH STROKE
+	0x00b6: 0x0125,	# 	LATIN SMALL LETTER H WITH CIRCUMFLEX
+	0x00b9: 0x0131,	# 	LATIN SMALL LETTER DOTLESS I
+	0x00ba: 0x015f,	# 	LATIN SMALL LETTER S WITH CEDILLA
+	0x00bb: 0x011f,	# 	LATIN SMALL LETTER G WITH BREVE
+	0x00bc: 0x0135,	# 	LATIN SMALL LETTER J WITH CIRCUMFLEX
+	0x00bf: 0x017c,	# 	LATIN SMALL LETTER Z WITH DOT ABOVE
+	0x00c5: 0x010a,	# 	LATIN CAPITAL LETTER C WITH DOT ABOVE
+	0x00c6: 0x0108,	# 	LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+	0x00d5: 0x0120,	# 	LATIN CAPITAL LETTER G WITH DOT ABOVE
+	0x00d8: 0x011c,	# 	LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+	0x00dd: 0x016c,	# 	LATIN CAPITAL LETTER U WITH BREVE
+	0x00de: 0x015c,	# 	LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+	0x00e5: 0x010b,	# 	LATIN SMALL LETTER C WITH DOT ABOVE
+	0x00e6: 0x0109,	# 	LATIN SMALL LETTER C WITH CIRCUMFLEX
+	0x00f5: 0x0121,	# 	LATIN SMALL LETTER G WITH DOT ABOVE
+	0x00f8: 0x011d,	# 	LATIN SMALL LETTER G WITH CIRCUMFLEX
+	0x00fd: 0x016d,	# 	LATIN SMALL LETTER U WITH BREVE
+	0x00fe: 0x015d,	# 	LATIN SMALL LETTER S WITH CIRCUMFLEX
+	0x00ff: 0x02d9,	# 	DOT ABOVE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/iso8859_4.py b/Lib/encodings/iso8859_4.py
new file mode 100644
index 0000000..29f9fd3
--- /dev/null
+++ b/Lib/encodings/iso8859_4.py
@@ -0,0 +1,96 @@
+""" Python Character Mapping Codec generated from '8859-4.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x00a1: 0x0104,	# 	LATIN CAPITAL LETTER A WITH OGONEK
+	0x00a2: 0x0138,	# 	LATIN SMALL LETTER KRA
+	0x00a3: 0x0156,	# 	LATIN CAPITAL LETTER R WITH CEDILLA
+	0x00a5: 0x0128,	# 	LATIN CAPITAL LETTER I WITH TILDE
+	0x00a6: 0x013b,	# 	LATIN CAPITAL LETTER L WITH CEDILLA
+	0x00a9: 0x0160,	# 	LATIN CAPITAL LETTER S WITH CARON
+	0x00aa: 0x0112,	# 	LATIN CAPITAL LETTER E WITH MACRON
+	0x00ab: 0x0122,	# 	LATIN CAPITAL LETTER G WITH CEDILLA
+	0x00ac: 0x0166,	# 	LATIN CAPITAL LETTER T WITH STROKE
+	0x00ae: 0x017d,	# 	LATIN CAPITAL LETTER Z WITH CARON
+	0x00b1: 0x0105,	# 	LATIN SMALL LETTER A WITH OGONEK
+	0x00b2: 0x02db,	# 	OGONEK
+	0x00b3: 0x0157,	# 	LATIN SMALL LETTER R WITH CEDILLA
+	0x00b5: 0x0129,	# 	LATIN SMALL LETTER I WITH TILDE
+	0x00b6: 0x013c,	# 	LATIN SMALL LETTER L WITH CEDILLA
+	0x00b7: 0x02c7,	# 	CARON
+	0x00b9: 0x0161,	# 	LATIN SMALL LETTER S WITH CARON
+	0x00ba: 0x0113,	# 	LATIN SMALL LETTER E WITH MACRON
+	0x00bb: 0x0123,	# 	LATIN SMALL LETTER G WITH CEDILLA
+	0x00bc: 0x0167,	# 	LATIN SMALL LETTER T WITH STROKE
+	0x00bd: 0x014a,	# 	LATIN CAPITAL LETTER ENG
+	0x00be: 0x017e,	# 	LATIN SMALL LETTER Z WITH CARON
+	0x00bf: 0x014b,	# 	LATIN SMALL LETTER ENG
+	0x00c0: 0x0100,	# 	LATIN CAPITAL LETTER A WITH MACRON
+	0x00c7: 0x012e,	# 	LATIN CAPITAL LETTER I WITH OGONEK
+	0x00c8: 0x010c,	# 	LATIN CAPITAL LETTER C WITH CARON
+	0x00ca: 0x0118,	# 	LATIN CAPITAL LETTER E WITH OGONEK
+	0x00cc: 0x0116,	# 	LATIN CAPITAL LETTER E WITH DOT ABOVE
+	0x00cf: 0x012a,	# 	LATIN CAPITAL LETTER I WITH MACRON
+	0x00d0: 0x0110,	# 	LATIN CAPITAL LETTER D WITH STROKE
+	0x00d1: 0x0145,	# 	LATIN CAPITAL LETTER N WITH CEDILLA
+	0x00d2: 0x014c,	# 	LATIN CAPITAL LETTER O WITH MACRON
+	0x00d3: 0x0136,	# 	LATIN CAPITAL LETTER K WITH CEDILLA
+	0x00d9: 0x0172,	# 	LATIN CAPITAL LETTER U WITH OGONEK
+	0x00dd: 0x0168,	# 	LATIN CAPITAL LETTER U WITH TILDE
+	0x00de: 0x016a,	# 	LATIN CAPITAL LETTER U WITH MACRON
+	0x00e0: 0x0101,	# 	LATIN SMALL LETTER A WITH MACRON
+	0x00e7: 0x012f,	# 	LATIN SMALL LETTER I WITH OGONEK
+	0x00e8: 0x010d,	# 	LATIN SMALL LETTER C WITH CARON
+	0x00ea: 0x0119,	# 	LATIN SMALL LETTER E WITH OGONEK
+	0x00ec: 0x0117,	# 	LATIN SMALL LETTER E WITH DOT ABOVE
+	0x00ef: 0x012b,	# 	LATIN SMALL LETTER I WITH MACRON
+	0x00f0: 0x0111,	# 	LATIN SMALL LETTER D WITH STROKE
+	0x00f1: 0x0146,	# 	LATIN SMALL LETTER N WITH CEDILLA
+	0x00f2: 0x014d,	# 	LATIN SMALL LETTER O WITH MACRON
+	0x00f3: 0x0137,	# 	LATIN SMALL LETTER K WITH CEDILLA
+	0x00f9: 0x0173,	# 	LATIN SMALL LETTER U WITH OGONEK
+	0x00fd: 0x0169,	# 	LATIN SMALL LETTER U WITH TILDE
+	0x00fe: 0x016b,	# 	LATIN SMALL LETTER U WITH MACRON
+	0x00ff: 0x02d9,	# 	DOT ABOVE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/iso8859_5.py b/Lib/encodings/iso8859_5.py
new file mode 100644
index 0000000..d71c15f
--- /dev/null
+++ b/Lib/encodings/iso8859_5.py
@@ -0,0 +1,140 @@
+""" Python Character Mapping Codec generated from '8859-5.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x00a1: 0x0401,	# 	CYRILLIC CAPITAL LETTER IO
+	0x00a2: 0x0402,	# 	CYRILLIC CAPITAL LETTER DJE
+	0x00a3: 0x0403,	# 	CYRILLIC CAPITAL LETTER GJE
+	0x00a4: 0x0404,	# 	CYRILLIC CAPITAL LETTER UKRAINIAN IE
+	0x00a5: 0x0405,	# 	CYRILLIC CAPITAL LETTER DZE
+	0x00a6: 0x0406,	# 	CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+	0x00a7: 0x0407,	# 	CYRILLIC CAPITAL LETTER YI
+	0x00a8: 0x0408,	# 	CYRILLIC CAPITAL LETTER JE
+	0x00a9: 0x0409,	# 	CYRILLIC CAPITAL LETTER LJE
+	0x00aa: 0x040a,	# 	CYRILLIC CAPITAL LETTER NJE
+	0x00ab: 0x040b,	# 	CYRILLIC CAPITAL LETTER TSHE
+	0x00ac: 0x040c,	# 	CYRILLIC CAPITAL LETTER KJE
+	0x00ae: 0x040e,	# 	CYRILLIC CAPITAL LETTER SHORT U
+	0x00af: 0x040f,	# 	CYRILLIC CAPITAL LETTER DZHE
+	0x00b0: 0x0410,	# 	CYRILLIC CAPITAL LETTER A
+	0x00b1: 0x0411,	# 	CYRILLIC CAPITAL LETTER BE
+	0x00b2: 0x0412,	# 	CYRILLIC CAPITAL LETTER VE
+	0x00b3: 0x0413,	# 	CYRILLIC CAPITAL LETTER GHE
+	0x00b4: 0x0414,	# 	CYRILLIC CAPITAL LETTER DE
+	0x00b5: 0x0415,	# 	CYRILLIC CAPITAL LETTER IE
+	0x00b6: 0x0416,	# 	CYRILLIC CAPITAL LETTER ZHE
+	0x00b7: 0x0417,	# 	CYRILLIC CAPITAL LETTER ZE
+	0x00b8: 0x0418,	# 	CYRILLIC CAPITAL LETTER I
+	0x00b9: 0x0419,	# 	CYRILLIC CAPITAL LETTER SHORT I
+	0x00ba: 0x041a,	# 	CYRILLIC CAPITAL LETTER KA
+	0x00bb: 0x041b,	# 	CYRILLIC CAPITAL LETTER EL
+	0x00bc: 0x041c,	# 	CYRILLIC CAPITAL LETTER EM
+	0x00bd: 0x041d,	# 	CYRILLIC CAPITAL LETTER EN
+	0x00be: 0x041e,	# 	CYRILLIC CAPITAL LETTER O
+	0x00bf: 0x041f,	# 	CYRILLIC CAPITAL LETTER PE
+	0x00c0: 0x0420,	# 	CYRILLIC CAPITAL LETTER ER
+	0x00c1: 0x0421,	# 	CYRILLIC CAPITAL LETTER ES
+	0x00c2: 0x0422,	# 	CYRILLIC CAPITAL LETTER TE
+	0x00c3: 0x0423,	# 	CYRILLIC CAPITAL LETTER U
+	0x00c4: 0x0424,	# 	CYRILLIC CAPITAL LETTER EF
+	0x00c5: 0x0425,	# 	CYRILLIC CAPITAL LETTER HA
+	0x00c6: 0x0426,	# 	CYRILLIC CAPITAL LETTER TSE
+	0x00c7: 0x0427,	# 	CYRILLIC CAPITAL LETTER CHE
+	0x00c8: 0x0428,	# 	CYRILLIC CAPITAL LETTER SHA
+	0x00c9: 0x0429,	# 	CYRILLIC CAPITAL LETTER SHCHA
+	0x00ca: 0x042a,	# 	CYRILLIC CAPITAL LETTER HARD SIGN
+	0x00cb: 0x042b,	# 	CYRILLIC CAPITAL LETTER YERU
+	0x00cc: 0x042c,	# 	CYRILLIC CAPITAL LETTER SOFT SIGN
+	0x00cd: 0x042d,	# 	CYRILLIC CAPITAL LETTER E
+	0x00ce: 0x042e,	# 	CYRILLIC CAPITAL LETTER YU
+	0x00cf: 0x042f,	# 	CYRILLIC CAPITAL LETTER YA
+	0x00d0: 0x0430,	# 	CYRILLIC SMALL LETTER A
+	0x00d1: 0x0431,	# 	CYRILLIC SMALL LETTER BE
+	0x00d2: 0x0432,	# 	CYRILLIC SMALL LETTER VE
+	0x00d3: 0x0433,	# 	CYRILLIC SMALL LETTER GHE
+	0x00d4: 0x0434,	# 	CYRILLIC SMALL LETTER DE
+	0x00d5: 0x0435,	# 	CYRILLIC SMALL LETTER IE
+	0x00d6: 0x0436,	# 	CYRILLIC SMALL LETTER ZHE
+	0x00d7: 0x0437,	# 	CYRILLIC SMALL LETTER ZE
+	0x00d8: 0x0438,	# 	CYRILLIC SMALL LETTER I
+	0x00d9: 0x0439,	# 	CYRILLIC SMALL LETTER SHORT I
+	0x00da: 0x043a,	# 	CYRILLIC SMALL LETTER KA
+	0x00db: 0x043b,	# 	CYRILLIC SMALL LETTER EL
+	0x00dc: 0x043c,	# 	CYRILLIC SMALL LETTER EM
+	0x00dd: 0x043d,	# 	CYRILLIC SMALL LETTER EN
+	0x00de: 0x043e,	# 	CYRILLIC SMALL LETTER O
+	0x00df: 0x043f,	# 	CYRILLIC SMALL LETTER PE
+	0x00e0: 0x0440,	# 	CYRILLIC SMALL LETTER ER
+	0x00e1: 0x0441,	# 	CYRILLIC SMALL LETTER ES
+	0x00e2: 0x0442,	# 	CYRILLIC SMALL LETTER TE
+	0x00e3: 0x0443,	# 	CYRILLIC SMALL LETTER U
+	0x00e4: 0x0444,	# 	CYRILLIC SMALL LETTER EF
+	0x00e5: 0x0445,	# 	CYRILLIC SMALL LETTER HA
+	0x00e6: 0x0446,	# 	CYRILLIC SMALL LETTER TSE
+	0x00e7: 0x0447,	# 	CYRILLIC SMALL LETTER CHE
+	0x00e8: 0x0448,	# 	CYRILLIC SMALL LETTER SHA
+	0x00e9: 0x0449,	# 	CYRILLIC SMALL LETTER SHCHA
+	0x00ea: 0x044a,	# 	CYRILLIC SMALL LETTER HARD SIGN
+	0x00eb: 0x044b,	# 	CYRILLIC SMALL LETTER YERU
+	0x00ec: 0x044c,	# 	CYRILLIC SMALL LETTER SOFT SIGN
+	0x00ed: 0x044d,	# 	CYRILLIC SMALL LETTER E
+	0x00ee: 0x044e,	# 	CYRILLIC SMALL LETTER YU
+	0x00ef: 0x044f,	# 	CYRILLIC SMALL LETTER YA
+	0x00f0: 0x2116,	# 	NUMERO SIGN
+	0x00f1: 0x0451,	# 	CYRILLIC SMALL LETTER IO
+	0x00f2: 0x0452,	# 	CYRILLIC SMALL LETTER DJE
+	0x00f3: 0x0453,	# 	CYRILLIC SMALL LETTER GJE
+	0x00f4: 0x0454,	# 	CYRILLIC SMALL LETTER UKRAINIAN IE
+	0x00f5: 0x0455,	# 	CYRILLIC SMALL LETTER DZE
+	0x00f6: 0x0456,	# 	CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+	0x00f7: 0x0457,	# 	CYRILLIC SMALL LETTER YI
+	0x00f8: 0x0458,	# 	CYRILLIC SMALL LETTER JE
+	0x00f9: 0x0459,	# 	CYRILLIC SMALL LETTER LJE
+	0x00fa: 0x045a,	# 	CYRILLIC SMALL LETTER NJE
+	0x00fb: 0x045b,	# 	CYRILLIC SMALL LETTER TSHE
+	0x00fc: 0x045c,	# 	CYRILLIC SMALL LETTER KJE
+	0x00fd: 0x00a7,	# 	SECTION SIGN
+	0x00fe: 0x045e,	# 	CYRILLIC SMALL LETTER SHORT U
+	0x00ff: 0x045f,	# 	CYRILLIC SMALL LETTER DZHE
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/iso8859_6.py b/Lib/encodings/iso8859_6.py
new file mode 100644
index 0000000..b4d4315
--- /dev/null
+++ b/Lib/encodings/iso8859_6.py
@@ -0,0 +1,94 @@
+""" Python Character Mapping Codec generated from '8859-6.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x00ac: 0x060c,	# 	ARABIC COMMA
+	0x00bb: 0x061b,	# 	ARABIC SEMICOLON
+	0x00bf: 0x061f,	# 	ARABIC QUESTION MARK
+	0x00c1: 0x0621,	# 	ARABIC LETTER HAMZA
+	0x00c2: 0x0622,	# 	ARABIC LETTER ALEF WITH MADDA ABOVE
+	0x00c3: 0x0623,	# 	ARABIC LETTER ALEF WITH HAMZA ABOVE
+	0x00c4: 0x0624,	# 	ARABIC LETTER WAW WITH HAMZA ABOVE
+	0x00c5: 0x0625,	# 	ARABIC LETTER ALEF WITH HAMZA BELOW
+	0x00c6: 0x0626,	# 	ARABIC LETTER YEH WITH HAMZA ABOVE
+	0x00c7: 0x0627,	# 	ARABIC LETTER ALEF
+	0x00c8: 0x0628,	# 	ARABIC LETTER BEH
+	0x00c9: 0x0629,	# 	ARABIC LETTER TEH MARBUTA
+	0x00ca: 0x062a,	# 	ARABIC LETTER TEH
+	0x00cb: 0x062b,	# 	ARABIC LETTER THEH
+	0x00cc: 0x062c,	# 	ARABIC LETTER JEEM
+	0x00cd: 0x062d,	# 	ARABIC LETTER HAH
+	0x00ce: 0x062e,	# 	ARABIC LETTER KHAH
+	0x00cf: 0x062f,	# 	ARABIC LETTER DAL
+	0x00d0: 0x0630,	# 	ARABIC LETTER THAL
+	0x00d1: 0x0631,	# 	ARABIC LETTER REH
+	0x00d2: 0x0632,	# 	ARABIC LETTER ZAIN
+	0x00d3: 0x0633,	# 	ARABIC LETTER SEEN
+	0x00d4: 0x0634,	# 	ARABIC LETTER SHEEN
+	0x00d5: 0x0635,	# 	ARABIC LETTER SAD
+	0x00d6: 0x0636,	# 	ARABIC LETTER DAD
+	0x00d7: 0x0637,	# 	ARABIC LETTER TAH
+	0x00d8: 0x0638,	# 	ARABIC LETTER ZAH
+	0x00d9: 0x0639,	# 	ARABIC LETTER AIN
+	0x00da: 0x063a,	# 	ARABIC LETTER GHAIN
+	0x00e0: 0x0640,	# 	ARABIC TATWEEL
+	0x00e1: 0x0641,	# 	ARABIC LETTER FEH
+	0x00e2: 0x0642,	# 	ARABIC LETTER QAF
+	0x00e3: 0x0643,	# 	ARABIC LETTER KAF
+	0x00e4: 0x0644,	# 	ARABIC LETTER LAM
+	0x00e5: 0x0645,	# 	ARABIC LETTER MEEM
+	0x00e6: 0x0646,	# 	ARABIC LETTER NOON
+	0x00e7: 0x0647,	# 	ARABIC LETTER HEH
+	0x00e8: 0x0648,	# 	ARABIC LETTER WAW
+	0x00e9: 0x0649,	# 	ARABIC LETTER ALEF MAKSURA
+	0x00ea: 0x064a,	# 	ARABIC LETTER YEH
+	0x00eb: 0x064b,	# 	ARABIC FATHATAN
+	0x00ec: 0x064c,	# 	ARABIC DAMMATAN
+	0x00ed: 0x064d,	# 	ARABIC KASRATAN
+	0x00ee: 0x064e,	# 	ARABIC FATHA
+	0x00ef: 0x064f,	# 	ARABIC DAMMA
+	0x00f0: 0x0650,	# 	ARABIC KASRA
+	0x00f1: 0x0651,	# 	ARABIC SHADDA
+	0x00f2: 0x0652,	# 	ARABIC SUKUN
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/iso8859_7.py b/Lib/encodings/iso8859_7.py
new file mode 100644
index 0000000..c847610
--- /dev/null
+++ b/Lib/encodings/iso8859_7.py
@@ -0,0 +1,120 @@
+""" Python Character Mapping Codec generated from '8859-7.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x00a1: 0x2018,	# 	LEFT SINGLE QUOTATION MARK
+	0x00a2: 0x2019,	# 	RIGHT SINGLE QUOTATION MARK
+	0x00af: 0x2015,	# 	HORIZONTAL BAR
+	0x00b4: 0x0384,	# 	GREEK TONOS
+	0x00b5: 0x0385,	# 	GREEK DIALYTIKA TONOS
+	0x00b6: 0x0386,	# 	GREEK CAPITAL LETTER ALPHA WITH TONOS
+	0x00b8: 0x0388,	# 	GREEK CAPITAL LETTER EPSILON WITH TONOS
+	0x00b9: 0x0389,	# 	GREEK CAPITAL LETTER ETA WITH TONOS
+	0x00ba: 0x038a,	# 	GREEK CAPITAL LETTER IOTA WITH TONOS
+	0x00bc: 0x038c,	# 	GREEK CAPITAL LETTER OMICRON WITH TONOS
+	0x00be: 0x038e,	# 	GREEK CAPITAL LETTER UPSILON WITH TONOS
+	0x00bf: 0x038f,	# 	GREEK CAPITAL LETTER OMEGA WITH TONOS
+	0x00c0: 0x0390,	# 	GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+	0x00c1: 0x0391,	# 	GREEK CAPITAL LETTER ALPHA
+	0x00c2: 0x0392,	# 	GREEK CAPITAL LETTER BETA
+	0x00c3: 0x0393,	# 	GREEK CAPITAL LETTER GAMMA
+	0x00c4: 0x0394,	# 	GREEK CAPITAL LETTER DELTA
+	0x00c5: 0x0395,	# 	GREEK CAPITAL LETTER EPSILON
+	0x00c6: 0x0396,	# 	GREEK CAPITAL LETTER ZETA
+	0x00c7: 0x0397,	# 	GREEK CAPITAL LETTER ETA
+	0x00c8: 0x0398,	# 	GREEK CAPITAL LETTER THETA
+	0x00c9: 0x0399,	# 	GREEK CAPITAL LETTER IOTA
+	0x00ca: 0x039a,	# 	GREEK CAPITAL LETTER KAPPA
+	0x00cb: 0x039b,	# 	GREEK CAPITAL LETTER LAMDA
+	0x00cc: 0x039c,	# 	GREEK CAPITAL LETTER MU
+	0x00cd: 0x039d,	# 	GREEK CAPITAL LETTER NU
+	0x00ce: 0x039e,	# 	GREEK CAPITAL LETTER XI
+	0x00cf: 0x039f,	# 	GREEK CAPITAL LETTER OMICRON
+	0x00d0: 0x03a0,	# 	GREEK CAPITAL LETTER PI
+	0x00d1: 0x03a1,	# 	GREEK CAPITAL LETTER RHO
+	0x00d3: 0x03a3,	# 	GREEK CAPITAL LETTER SIGMA
+	0x00d4: 0x03a4,	# 	GREEK CAPITAL LETTER TAU
+	0x00d5: 0x03a5,	# 	GREEK CAPITAL LETTER UPSILON
+	0x00d6: 0x03a6,	# 	GREEK CAPITAL LETTER PHI
+	0x00d7: 0x03a7,	# 	GREEK CAPITAL LETTER CHI
+	0x00d8: 0x03a8,	# 	GREEK CAPITAL LETTER PSI
+	0x00d9: 0x03a9,	# 	GREEK CAPITAL LETTER OMEGA
+	0x00da: 0x03aa,	# 	GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+	0x00db: 0x03ab,	# 	GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+	0x00dc: 0x03ac,	# 	GREEK SMALL LETTER ALPHA WITH TONOS
+	0x00dd: 0x03ad,	# 	GREEK SMALL LETTER EPSILON WITH TONOS
+	0x00de: 0x03ae,	# 	GREEK SMALL LETTER ETA WITH TONOS
+	0x00df: 0x03af,	# 	GREEK SMALL LETTER IOTA WITH TONOS
+	0x00e0: 0x03b0,	# 	GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+	0x00e1: 0x03b1,	# 	GREEK SMALL LETTER ALPHA
+	0x00e2: 0x03b2,	# 	GREEK SMALL LETTER BETA
+	0x00e3: 0x03b3,	# 	GREEK SMALL LETTER GAMMA
+	0x00e4: 0x03b4,	# 	GREEK SMALL LETTER DELTA
+	0x00e5: 0x03b5,	# 	GREEK SMALL LETTER EPSILON
+	0x00e6: 0x03b6,	# 	GREEK SMALL LETTER ZETA
+	0x00e7: 0x03b7,	# 	GREEK SMALL LETTER ETA
+	0x00e8: 0x03b8,	# 	GREEK SMALL LETTER THETA
+	0x00e9: 0x03b9,	# 	GREEK SMALL LETTER IOTA
+	0x00ea: 0x03ba,	# 	GREEK SMALL LETTER KAPPA
+	0x00eb: 0x03bb,	# 	GREEK SMALL LETTER LAMDA
+	0x00ec: 0x03bc,	# 	GREEK SMALL LETTER MU
+	0x00ed: 0x03bd,	# 	GREEK SMALL LETTER NU
+	0x00ee: 0x03be,	# 	GREEK SMALL LETTER XI
+	0x00ef: 0x03bf,	# 	GREEK SMALL LETTER OMICRON
+	0x00f0: 0x03c0,	# 	GREEK SMALL LETTER PI
+	0x00f1: 0x03c1,	# 	GREEK SMALL LETTER RHO
+	0x00f2: 0x03c2,	# 	GREEK SMALL LETTER FINAL SIGMA
+	0x00f3: 0x03c3,	# 	GREEK SMALL LETTER SIGMA
+	0x00f4: 0x03c4,	# 	GREEK SMALL LETTER TAU
+	0x00f5: 0x03c5,	# 	GREEK SMALL LETTER UPSILON
+	0x00f6: 0x03c6,	# 	GREEK SMALL LETTER PHI
+	0x00f7: 0x03c7,	# 	GREEK SMALL LETTER CHI
+	0x00f8: 0x03c8,	# 	GREEK SMALL LETTER PSI
+	0x00f9: 0x03c9,	# 	GREEK SMALL LETTER OMEGA
+	0x00fa: 0x03ca,	# 	GREEK SMALL LETTER IOTA WITH DIALYTIKA
+	0x00fb: 0x03cb,	# 	GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+	0x00fc: 0x03cc,	# 	GREEK SMALL LETTER OMICRON WITH TONOS
+	0x00fd: 0x03cd,	# 	GREEK SMALL LETTER UPSILON WITH TONOS
+	0x00fe: 0x03ce,	# 	GREEK SMALL LETTER OMEGA WITH TONOS
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/iso8859_8.py b/Lib/encodings/iso8859_8.py
new file mode 100644
index 0000000..72b783b
--- /dev/null
+++ b/Lib/encodings/iso8859_8.py
@@ -0,0 +1,77 @@
+""" Python Character Mapping Codec generated from '8859-8.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x00aa: 0x00d7,	# 	MULTIPLICATION SIGN
+	0x00af: 0x203e,	# 	OVERLINE
+	0x00ba: 0x00f7,	# 	DIVISION SIGN
+	0x00df: 0x2017,	# 	DOUBLE LOW LINE
+	0x00e0: 0x05d0,	# 	HEBREW LETTER ALEF
+	0x00e1: 0x05d1,	# 	HEBREW LETTER BET
+	0x00e2: 0x05d2,	# 	HEBREW LETTER GIMEL
+	0x00e3: 0x05d3,	# 	HEBREW LETTER DALET
+	0x00e4: 0x05d4,	# 	HEBREW LETTER HE
+	0x00e5: 0x05d5,	# 	HEBREW LETTER VAV
+	0x00e6: 0x05d6,	# 	HEBREW LETTER ZAYIN
+	0x00e7: 0x05d7,	# 	HEBREW LETTER HET
+	0x00e8: 0x05d8,	# 	HEBREW LETTER TET
+	0x00e9: 0x05d9,	# 	HEBREW LETTER YOD
+	0x00ea: 0x05da,	# 	HEBREW LETTER FINAL KAF
+	0x00eb: 0x05db,	# 	HEBREW LETTER KAF
+	0x00ec: 0x05dc,	# 	HEBREW LETTER LAMED
+	0x00ed: 0x05dd,	# 	HEBREW LETTER FINAL MEM
+	0x00ee: 0x05de,	# 	HEBREW LETTER MEM
+	0x00ef: 0x05df,	# 	HEBREW LETTER FINAL NUN
+	0x00f0: 0x05e0,	# 	HEBREW LETTER NUN
+	0x00f1: 0x05e1,	# 	HEBREW LETTER SAMEKH
+	0x00f2: 0x05e2,	# 	HEBREW LETTER AYIN
+	0x00f3: 0x05e3,	# 	HEBREW LETTER FINAL PE
+	0x00f4: 0x05e4,	# 	HEBREW LETTER PE
+	0x00f5: 0x05e5,	# 	HEBREW LETTER FINAL TSADI
+	0x00f6: 0x05e6,	# 	HEBREW LETTER TSADI
+	0x00f7: 0x05e7,	# 	HEBREW LETTER QOF
+	0x00f8: 0x05e8,	# 	HEBREW LETTER RESH
+	0x00f9: 0x05e9,	# 	HEBREW LETTER SHIN
+	0x00fa: 0x05ea,	# 	HEBREW LETTER TAV
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/iso8859_9.py b/Lib/encodings/iso8859_9.py
new file mode 100644
index 0000000..3f91d32
--- /dev/null
+++ b/Lib/encodings/iso8859_9.py
@@ -0,0 +1,52 @@
+""" Python Character Mapping Codec generated from '8859-9.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x00d0: 0x011e,	# 	LATIN CAPITAL LETTER G WITH BREVE
+	0x00dd: 0x0130,	# 	LATIN CAPITAL LETTER I WITH DOT ABOVE
+	0x00de: 0x015e,	# 	LATIN CAPITAL LETTER S WITH CEDILLA
+	0x00f0: 0x011f,	# 	LATIN SMALL LETTER G WITH BREVE
+	0x00fd: 0x0131,	# 	LATIN SMALL LETTER DOTLESS I
+	0x00fe: 0x015f,	# 	LATIN SMALL LETTER S WITH CEDILLA
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/koi8_r.py b/Lib/encodings/koi8_r.py
new file mode 100644
index 0000000..0e1c15b
--- /dev/null
+++ b/Lib/encodings/koi8_r.py
@@ -0,0 +1,174 @@
+""" Python Character Mapping Codec generated from 'KOI8-R.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x2500,	# 	BOX DRAWINGS LIGHT HORIZONTAL
+	0x0081: 0x2502,	# 	BOX DRAWINGS LIGHT VERTICAL
+	0x0082: 0x250c,	# 	BOX DRAWINGS LIGHT DOWN AND RIGHT
+	0x0083: 0x2510,	# 	BOX DRAWINGS LIGHT DOWN AND LEFT
+	0x0084: 0x2514,	# 	BOX DRAWINGS LIGHT UP AND RIGHT
+	0x0085: 0x2518,	# 	BOX DRAWINGS LIGHT UP AND LEFT
+	0x0086: 0x251c,	# 	BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+	0x0087: 0x2524,	# 	BOX DRAWINGS LIGHT VERTICAL AND LEFT
+	0x0088: 0x252c,	# 	BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+	0x0089: 0x2534,	# 	BOX DRAWINGS LIGHT UP AND HORIZONTAL
+	0x008a: 0x253c,	# 	BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+	0x008b: 0x2580,	# 	UPPER HALF BLOCK
+	0x008c: 0x2584,	# 	LOWER HALF BLOCK
+	0x008d: 0x2588,	# 	FULL BLOCK
+	0x008e: 0x258c,	# 	LEFT HALF BLOCK
+	0x008f: 0x2590,	# 	RIGHT HALF BLOCK
+	0x0090: 0x2591,	# 	LIGHT SHADE
+	0x0091: 0x2592,	# 	MEDIUM SHADE
+	0x0092: 0x2593,	# 	DARK SHADE
+	0x0093: 0x2320,	# 	TOP HALF INTEGRAL
+	0x0094: 0x25a0,	# 	BLACK SQUARE
+	0x0095: 0x2219,	# 	BULLET OPERATOR
+	0x0096: 0x221a,	# 	SQUARE ROOT
+	0x0097: 0x2248,	# 	ALMOST EQUAL TO
+	0x0098: 0x2264,	# 	LESS-THAN OR EQUAL TO
+	0x0099: 0x2265,	# 	GREATER-THAN OR EQUAL TO
+	0x009a: 0x00a0,	# 	NO-BREAK SPACE
+	0x009b: 0x2321,	# 	BOTTOM HALF INTEGRAL
+	0x009c: 0x00b0,	# 	DEGREE SIGN
+	0x009d: 0x00b2,	# 	SUPERSCRIPT TWO
+	0x009e: 0x00b7,	# 	MIDDLE DOT
+	0x009f: 0x00f7,	# 	DIVISION SIGN
+	0x00a0: 0x2550,	# 	BOX DRAWINGS DOUBLE HORIZONTAL
+	0x00a1: 0x2551,	# 	BOX DRAWINGS DOUBLE VERTICAL
+	0x00a2: 0x2552,	# 	BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+	0x00a3: 0x0451,	# 	CYRILLIC SMALL LETTER IO
+	0x00a4: 0x2553,	# 	BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+	0x00a5: 0x2554,	# 	BOX DRAWINGS DOUBLE DOWN AND RIGHT
+	0x00a6: 0x2555,	# 	BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+	0x00a7: 0x2556,	# 	BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+	0x00a8: 0x2557,	# 	BOX DRAWINGS DOUBLE DOWN AND LEFT
+	0x00a9: 0x2558,	# 	BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+	0x00aa: 0x2559,	# 	BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+	0x00ab: 0x255a,	# 	BOX DRAWINGS DOUBLE UP AND RIGHT
+	0x00ac: 0x255b,	# 	BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+	0x00ad: 0x255c,	# 	BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+	0x00ae: 0x255d,	# 	BOX DRAWINGS DOUBLE UP AND LEFT
+	0x00af: 0x255e,	# 	BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+	0x00b0: 0x255f,	# 	BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+	0x00b1: 0x2560,	# 	BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+	0x00b2: 0x2561,	# 	BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+	0x00b3: 0x0401,	# 	CYRILLIC CAPITAL LETTER IO
+	0x00b4: 0x2562,	# 	BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+	0x00b5: 0x2563,	# 	BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+	0x00b6: 0x2564,	# 	BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+	0x00b7: 0x2565,	# 	BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+	0x00b8: 0x2566,	# 	BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+	0x00b9: 0x2567,	# 	BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+	0x00ba: 0x2568,	# 	BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+	0x00bb: 0x2569,	# 	BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+	0x00bc: 0x256a,	# 	BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+	0x00bd: 0x256b,	# 	BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+	0x00be: 0x256c,	# 	BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+	0x00bf: 0x00a9,	# 	COPYRIGHT SIGN
+	0x00c0: 0x044e,	# 	CYRILLIC SMALL LETTER YU
+	0x00c1: 0x0430,	# 	CYRILLIC SMALL LETTER A
+	0x00c2: 0x0431,	# 	CYRILLIC SMALL LETTER BE
+	0x00c3: 0x0446,	# 	CYRILLIC SMALL LETTER TSE
+	0x00c4: 0x0434,	# 	CYRILLIC SMALL LETTER DE
+	0x00c5: 0x0435,	# 	CYRILLIC SMALL LETTER IE
+	0x00c6: 0x0444,	# 	CYRILLIC SMALL LETTER EF
+	0x00c7: 0x0433,	# 	CYRILLIC SMALL LETTER GHE
+	0x00c8: 0x0445,	# 	CYRILLIC SMALL LETTER HA
+	0x00c9: 0x0438,	# 	CYRILLIC SMALL LETTER I
+	0x00ca: 0x0439,	# 	CYRILLIC SMALL LETTER SHORT I
+	0x00cb: 0x043a,	# 	CYRILLIC SMALL LETTER KA
+	0x00cc: 0x043b,	# 	CYRILLIC SMALL LETTER EL
+	0x00cd: 0x043c,	# 	CYRILLIC SMALL LETTER EM
+	0x00ce: 0x043d,	# 	CYRILLIC SMALL LETTER EN
+	0x00cf: 0x043e,	# 	CYRILLIC SMALL LETTER O
+	0x00d0: 0x043f,	# 	CYRILLIC SMALL LETTER PE
+	0x00d1: 0x044f,	# 	CYRILLIC SMALL LETTER YA
+	0x00d2: 0x0440,	# 	CYRILLIC SMALL LETTER ER
+	0x00d3: 0x0441,	# 	CYRILLIC SMALL LETTER ES
+	0x00d4: 0x0442,	# 	CYRILLIC SMALL LETTER TE
+	0x00d5: 0x0443,	# 	CYRILLIC SMALL LETTER U
+	0x00d6: 0x0436,	# 	CYRILLIC SMALL LETTER ZHE
+	0x00d7: 0x0432,	# 	CYRILLIC SMALL LETTER VE
+	0x00d8: 0x044c,	# 	CYRILLIC SMALL LETTER SOFT SIGN
+	0x00d9: 0x044b,	# 	CYRILLIC SMALL LETTER YERU
+	0x00da: 0x0437,	# 	CYRILLIC SMALL LETTER ZE
+	0x00db: 0x0448,	# 	CYRILLIC SMALL LETTER SHA
+	0x00dc: 0x044d,	# 	CYRILLIC SMALL LETTER E
+	0x00dd: 0x0449,	# 	CYRILLIC SMALL LETTER SHCHA
+	0x00de: 0x0447,	# 	CYRILLIC SMALL LETTER CHE
+	0x00df: 0x044a,	# 	CYRILLIC SMALL LETTER HARD SIGN
+	0x00e0: 0x042e,	# 	CYRILLIC CAPITAL LETTER YU
+	0x00e1: 0x0410,	# 	CYRILLIC CAPITAL LETTER A
+	0x00e2: 0x0411,	# 	CYRILLIC CAPITAL LETTER BE
+	0x00e3: 0x0426,	# 	CYRILLIC CAPITAL LETTER TSE
+	0x00e4: 0x0414,	# 	CYRILLIC CAPITAL LETTER DE
+	0x00e5: 0x0415,	# 	CYRILLIC CAPITAL LETTER IE
+	0x00e6: 0x0424,	# 	CYRILLIC CAPITAL LETTER EF
+	0x00e7: 0x0413,	# 	CYRILLIC CAPITAL LETTER GHE
+	0x00e8: 0x0425,	# 	CYRILLIC CAPITAL LETTER HA
+	0x00e9: 0x0418,	# 	CYRILLIC CAPITAL LETTER I
+	0x00ea: 0x0419,	# 	CYRILLIC CAPITAL LETTER SHORT I
+	0x00eb: 0x041a,	# 	CYRILLIC CAPITAL LETTER KA
+	0x00ec: 0x041b,	# 	CYRILLIC CAPITAL LETTER EL
+	0x00ed: 0x041c,	# 	CYRILLIC CAPITAL LETTER EM
+	0x00ee: 0x041d,	# 	CYRILLIC CAPITAL LETTER EN
+	0x00ef: 0x041e,	# 	CYRILLIC CAPITAL LETTER O
+	0x00f0: 0x041f,	# 	CYRILLIC CAPITAL LETTER PE
+	0x00f1: 0x042f,	# 	CYRILLIC CAPITAL LETTER YA
+	0x00f2: 0x0420,	# 	CYRILLIC CAPITAL LETTER ER
+	0x00f3: 0x0421,	# 	CYRILLIC CAPITAL LETTER ES
+	0x00f4: 0x0422,	# 	CYRILLIC CAPITAL LETTER TE
+	0x00f5: 0x0423,	# 	CYRILLIC CAPITAL LETTER U
+	0x00f6: 0x0416,	# 	CYRILLIC CAPITAL LETTER ZHE
+	0x00f7: 0x0412,	# 	CYRILLIC CAPITAL LETTER VE
+	0x00f8: 0x042c,	# 	CYRILLIC CAPITAL LETTER SOFT SIGN
+	0x00f9: 0x042b,	# 	CYRILLIC CAPITAL LETTER YERU
+	0x00fa: 0x0417,	# 	CYRILLIC CAPITAL LETTER ZE
+	0x00fb: 0x0428,	# 	CYRILLIC CAPITAL LETTER SHA
+	0x00fc: 0x042d,	# 	CYRILLIC CAPITAL LETTER E
+	0x00fd: 0x0429,	# 	CYRILLIC CAPITAL LETTER SHCHA
+	0x00fe: 0x0427,	# 	CYRILLIC CAPITAL LETTER CHE
+	0x00ff: 0x042a,	# 	CYRILLIC CAPITAL LETTER HARD SIGN
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/latin_1.py b/Lib/encodings/latin_1.py
new file mode 100644
index 0000000..ebca9fb
--- /dev/null
+++ b/Lib/encodings/latin_1.py
@@ -0,0 +1,35 @@
+""" Python 'latin-1' Codec
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    # Note: Binding these as C functions will result in the class not
+    # converting them to methods. This is intended.
+    encode = codecs.latin_1_encode
+    decode = codecs.latin_1_decode
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+class StreamConverter(StreamWriter,StreamReader):
+
+    encode = codecs.latin_1_decode
+    decode = codecs.latin_1_encode
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec.encode,Codec.decode,StreamReader,StreamWriter)
diff --git a/Lib/encodings/mac_cyrillic.py b/Lib/encodings/mac_cyrillic.py
new file mode 100644
index 0000000..1314836
--- /dev/null
+++ b/Lib/encodings/mac_cyrillic.py
@@ -0,0 +1,169 @@
+""" Python Character Mapping Codec generated from 'CYRILLIC.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x0410,	# CYRILLIC CAPITAL LETTER A
+	0x0081: 0x0411,	# CYRILLIC CAPITAL LETTER BE
+	0x0082: 0x0412,	# CYRILLIC CAPITAL LETTER VE
+	0x0083: 0x0413,	# CYRILLIC CAPITAL LETTER GHE
+	0x0084: 0x0414,	# CYRILLIC CAPITAL LETTER DE
+	0x0085: 0x0415,	# CYRILLIC CAPITAL LETTER IE
+	0x0086: 0x0416,	# CYRILLIC CAPITAL LETTER ZHE
+	0x0087: 0x0417,	# CYRILLIC CAPITAL LETTER ZE
+	0x0088: 0x0418,	# CYRILLIC CAPITAL LETTER I
+	0x0089: 0x0419,	# CYRILLIC CAPITAL LETTER SHORT I
+	0x008a: 0x041a,	# CYRILLIC CAPITAL LETTER KA
+	0x008b: 0x041b,	# CYRILLIC CAPITAL LETTER EL
+	0x008c: 0x041c,	# CYRILLIC CAPITAL LETTER EM
+	0x008d: 0x041d,	# CYRILLIC CAPITAL LETTER EN
+	0x008e: 0x041e,	# CYRILLIC CAPITAL LETTER O
+	0x008f: 0x041f,	# CYRILLIC CAPITAL LETTER PE
+	0x0090: 0x0420,	# CYRILLIC CAPITAL LETTER ER
+	0x0091: 0x0421,	# CYRILLIC CAPITAL LETTER ES
+	0x0092: 0x0422,	# CYRILLIC CAPITAL LETTER TE
+	0x0093: 0x0423,	# CYRILLIC CAPITAL LETTER U
+	0x0094: 0x0424,	# CYRILLIC CAPITAL LETTER EF
+	0x0095: 0x0425,	# CYRILLIC CAPITAL LETTER HA
+	0x0096: 0x0426,	# CYRILLIC CAPITAL LETTER TSE
+	0x0097: 0x0427,	# CYRILLIC CAPITAL LETTER CHE
+	0x0098: 0x0428,	# CYRILLIC CAPITAL LETTER SHA
+	0x0099: 0x0429,	# CYRILLIC CAPITAL LETTER SHCHA
+	0x009a: 0x042a,	# CYRILLIC CAPITAL LETTER HARD SIGN
+	0x009b: 0x042b,	# CYRILLIC CAPITAL LETTER YERU
+	0x009c: 0x042c,	# CYRILLIC CAPITAL LETTER SOFT SIGN
+	0x009d: 0x042d,	# CYRILLIC CAPITAL LETTER E
+	0x009e: 0x042e,	# CYRILLIC CAPITAL LETTER YU
+	0x009f: 0x042f,	# CYRILLIC CAPITAL LETTER YA
+	0x00a0: 0x2020,	# DAGGER
+	0x00a1: 0x00b0,	# DEGREE SIGN
+	0x00a4: 0x00a7,	# SECTION SIGN
+	0x00a5: 0x2022,	# BULLET
+	0x00a6: 0x00b6,	# PILCROW SIGN
+	0x00a7: 0x0406,	# CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+	0x00a8: 0x00ae,	# REGISTERED SIGN
+	0x00aa: 0x2122,	# TRADE MARK SIGN
+	0x00ab: 0x0402,	# CYRILLIC CAPITAL LETTER DJE
+	0x00ac: 0x0452,	# CYRILLIC SMALL LETTER DJE
+	0x00ad: 0x2260,	# NOT EQUAL TO
+	0x00ae: 0x0403,	# CYRILLIC CAPITAL LETTER GJE
+	0x00af: 0x0453,	# CYRILLIC SMALL LETTER GJE
+	0x00b0: 0x221e,	# INFINITY
+	0x00b2: 0x2264,	# LESS-THAN OR EQUAL TO
+	0x00b3: 0x2265,	# GREATER-THAN OR EQUAL TO
+	0x00b4: 0x0456,	# CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+	0x00b6: 0x2202,	# PARTIAL DIFFERENTIAL
+	0x00b7: 0x0408,	# CYRILLIC CAPITAL LETTER JE
+	0x00b8: 0x0404,	# CYRILLIC CAPITAL LETTER UKRAINIAN IE
+	0x00b9: 0x0454,	# CYRILLIC SMALL LETTER UKRAINIAN IE
+	0x00ba: 0x0407,	# CYRILLIC CAPITAL LETTER YI
+	0x00bb: 0x0457,	# CYRILLIC SMALL LETTER YI
+	0x00bc: 0x0409,	# CYRILLIC CAPITAL LETTER LJE
+	0x00bd: 0x0459,	# CYRILLIC SMALL LETTER LJE
+	0x00be: 0x040a,	# CYRILLIC CAPITAL LETTER NJE
+	0x00bf: 0x045a,	# CYRILLIC SMALL LETTER NJE
+	0x00c0: 0x0458,	# CYRILLIC SMALL LETTER JE
+	0x00c1: 0x0405,	# CYRILLIC CAPITAL LETTER DZE
+	0x00c2: 0x00ac,	# NOT SIGN
+	0x00c3: 0x221a,	# SQUARE ROOT
+	0x00c4: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x00c5: 0x2248,	# ALMOST EQUAL TO
+	0x00c6: 0x2206,	# INCREMENT
+	0x00c7: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00c8: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00c9: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x00ca: 0x00a0,	# NO-BREAK SPACE
+	0x00cb: 0x040b,	# CYRILLIC CAPITAL LETTER TSHE
+	0x00cc: 0x045b,	# CYRILLIC SMALL LETTER TSHE
+	0x00cd: 0x040c,	# CYRILLIC CAPITAL LETTER KJE
+	0x00ce: 0x045c,	# CYRILLIC SMALL LETTER KJE
+	0x00cf: 0x0455,	# CYRILLIC SMALL LETTER DZE
+	0x00d0: 0x2013,	# EN DASH
+	0x00d1: 0x2014,	# EM DASH
+	0x00d2: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x00d3: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x00d4: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x00d5: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x00d6: 0x00f7,	# DIVISION SIGN
+	0x00d7: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x00d8: 0x040e,	# CYRILLIC CAPITAL LETTER SHORT U
+	0x00d9: 0x045e,	# CYRILLIC SMALL LETTER SHORT U
+	0x00da: 0x040f,	# CYRILLIC CAPITAL LETTER DZHE
+	0x00db: 0x045f,	# CYRILLIC SMALL LETTER DZHE
+	0x00dc: 0x2116,	# NUMERO SIGN
+	0x00dd: 0x0401,	# CYRILLIC CAPITAL LETTER IO
+	0x00de: 0x0451,	# CYRILLIC SMALL LETTER IO
+	0x00df: 0x044f,	# CYRILLIC SMALL LETTER YA
+	0x00e0: 0x0430,	# CYRILLIC SMALL LETTER A
+	0x00e1: 0x0431,	# CYRILLIC SMALL LETTER BE
+	0x00e2: 0x0432,	# CYRILLIC SMALL LETTER VE
+	0x00e3: 0x0433,	# CYRILLIC SMALL LETTER GHE
+	0x00e4: 0x0434,	# CYRILLIC SMALL LETTER DE
+	0x00e5: 0x0435,	# CYRILLIC SMALL LETTER IE
+	0x00e6: 0x0436,	# CYRILLIC SMALL LETTER ZHE
+	0x00e7: 0x0437,	# CYRILLIC SMALL LETTER ZE
+	0x00e8: 0x0438,	# CYRILLIC SMALL LETTER I
+	0x00e9: 0x0439,	# CYRILLIC SMALL LETTER SHORT I
+	0x00ea: 0x043a,	# CYRILLIC SMALL LETTER KA
+	0x00eb: 0x043b,	# CYRILLIC SMALL LETTER EL
+	0x00ec: 0x043c,	# CYRILLIC SMALL LETTER EM
+	0x00ed: 0x043d,	# CYRILLIC SMALL LETTER EN
+	0x00ee: 0x043e,	# CYRILLIC SMALL LETTER O
+	0x00ef: 0x043f,	# CYRILLIC SMALL LETTER PE
+	0x00f0: 0x0440,	# CYRILLIC SMALL LETTER ER
+	0x00f1: 0x0441,	# CYRILLIC SMALL LETTER ES
+	0x00f2: 0x0442,	# CYRILLIC SMALL LETTER TE
+	0x00f3: 0x0443,	# CYRILLIC SMALL LETTER U
+	0x00f4: 0x0444,	# CYRILLIC SMALL LETTER EF
+	0x00f5: 0x0445,	# CYRILLIC SMALL LETTER HA
+	0x00f6: 0x0446,	# CYRILLIC SMALL LETTER TSE
+	0x00f7: 0x0447,	# CYRILLIC SMALL LETTER CHE
+	0x00f8: 0x0448,	# CYRILLIC SMALL LETTER SHA
+	0x00f9: 0x0449,	# CYRILLIC SMALL LETTER SHCHA
+	0x00fa: 0x044a,	# CYRILLIC SMALL LETTER HARD SIGN
+	0x00fb: 0x044b,	# CYRILLIC SMALL LETTER YERU
+	0x00fc: 0x044c,	# CYRILLIC SMALL LETTER SOFT SIGN
+	0x00fd: 0x044d,	# CYRILLIC SMALL LETTER E
+	0x00fe: 0x044e,	# CYRILLIC SMALL LETTER YU
+	0x00ff: 0x00a4,	# CURRENCY SIGN
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/mac_greek.py b/Lib/encodings/mac_greek.py
new file mode 100644
index 0000000..7673b83
--- /dev/null
+++ b/Lib/encodings/mac_greek.py
@@ -0,0 +1,172 @@
+""" Python Character Mapping Codec generated from 'GREEK.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x0081: 0x00b9,	# SUPERSCRIPT ONE
+	0x0082: 0x00b2,	# SUPERSCRIPT TWO
+	0x0083: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0084: 0x00b3,	# SUPERSCRIPT THREE
+	0x0085: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x0086: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x0087: 0x0385,	# GREEK DIALYTIKA TONOS
+	0x0088: 0x00e0,	# LATIN SMALL LETTER A WITH GRAVE
+	0x0089: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x008a: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x008b: 0x0384,	# GREEK TONOS
+	0x008c: 0x00a8,	# DIAERESIS
+	0x008d: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x008e: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x008f: 0x00e8,	# LATIN SMALL LETTER E WITH GRAVE
+	0x0090: 0x00ea,	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+	0x0091: 0x00eb,	# LATIN SMALL LETTER E WITH DIAERESIS
+	0x0092: 0x00a3,	# POUND SIGN
+	0x0093: 0x2122,	# TRADE MARK SIGN
+	0x0094: 0x00ee,	# LATIN SMALL LETTER I WITH CIRCUMFLEX
+	0x0095: 0x00ef,	# LATIN SMALL LETTER I WITH DIAERESIS
+	0x0096: 0x2022,	# BULLET
+	0x0097: 0x00bd,	# VULGAR FRACTION ONE HALF
+	0x0098: 0x2030,	# PER MILLE SIGN
+	0x0099: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x009a: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x009b: 0x00a6,	# BROKEN BAR
+	0x009c: 0x00ad,	# SOFT HYPHEN
+	0x009d: 0x00f9,	# LATIN SMALL LETTER U WITH GRAVE
+	0x009e: 0x00fb,	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+	0x009f: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x00a0: 0x2020,	# DAGGER
+	0x00a1: 0x0393,	# GREEK CAPITAL LETTER GAMMA
+	0x00a2: 0x0394,	# GREEK CAPITAL LETTER DELTA
+	0x00a3: 0x0398,	# GREEK CAPITAL LETTER THETA
+	0x00a4: 0x039b,	# GREEK CAPITAL LETTER LAMBDA
+	0x00a5: 0x039e,	# GREEK CAPITAL LETTER XI
+	0x00a6: 0x03a0,	# GREEK CAPITAL LETTER PI
+	0x00a7: 0x00df,	# LATIN SMALL LETTER SHARP S
+	0x00a8: 0x00ae,	# REGISTERED SIGN
+	0x00aa: 0x03a3,	# GREEK CAPITAL LETTER SIGMA
+	0x00ab: 0x03aa,	# GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+	0x00ac: 0x00a7,	# SECTION SIGN
+	0x00ad: 0x2260,	# NOT EQUAL TO
+	0x00ae: 0x00b0,	# DEGREE SIGN
+	0x00af: 0x0387,	# GREEK ANO TELEIA
+	0x00b0: 0x0391,	# GREEK CAPITAL LETTER ALPHA
+	0x00b2: 0x2264,	# LESS-THAN OR EQUAL TO
+	0x00b3: 0x2265,	# GREATER-THAN OR EQUAL TO
+	0x00b4: 0x00a5,	# YEN SIGN
+	0x00b5: 0x0392,	# GREEK CAPITAL LETTER BETA
+	0x00b6: 0x0395,	# GREEK CAPITAL LETTER EPSILON
+	0x00b7: 0x0396,	# GREEK CAPITAL LETTER ZETA
+	0x00b8: 0x0397,	# GREEK CAPITAL LETTER ETA
+	0x00b9: 0x0399,	# GREEK CAPITAL LETTER IOTA
+	0x00ba: 0x039a,	# GREEK CAPITAL LETTER KAPPA
+	0x00bb: 0x039c,	# GREEK CAPITAL LETTER MU
+	0x00bc: 0x03a6,	# GREEK CAPITAL LETTER PHI
+	0x00bd: 0x03ab,	# GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+	0x00be: 0x03a8,	# GREEK CAPITAL LETTER PSI
+	0x00bf: 0x03a9,	# GREEK CAPITAL LETTER OMEGA
+	0x00c0: 0x03ac,	# GREEK SMALL LETTER ALPHA WITH TONOS
+	0x00c1: 0x039d,	# GREEK CAPITAL LETTER NU
+	0x00c2: 0x00ac,	# NOT SIGN
+	0x00c3: 0x039f,	# GREEK CAPITAL LETTER OMICRON
+	0x00c4: 0x03a1,	# GREEK CAPITAL LETTER RHO
+	0x00c5: 0x2248,	# ALMOST EQUAL TO
+	0x00c6: 0x03a4,	# GREEK CAPITAL LETTER TAU
+	0x00c7: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00c8: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00c9: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x00ca: 0x00a0,	# NO-BREAK SPACE
+	0x00cb: 0x03a5,	# GREEK CAPITAL LETTER UPSILON
+	0x00cc: 0x03a7,	# GREEK CAPITAL LETTER CHI
+	0x00cd: 0x0386,	# GREEK CAPITAL LETTER ALPHA WITH TONOS
+	0x00ce: 0x0388,	# GREEK CAPITAL LETTER EPSILON WITH TONOS
+	0x00cf: 0x0153,	# LATIN SMALL LIGATURE OE
+	0x00d0: 0x2013,	# EN DASH
+	0x00d1: 0x2015,	# HORIZONTAL BAR
+	0x00d2: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x00d3: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x00d4: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x00d5: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x00d6: 0x00f7,	# DIVISION SIGN
+	0x00d7: 0x0389,	# GREEK CAPITAL LETTER ETA WITH TONOS
+	0x00d8: 0x038a,	# GREEK CAPITAL LETTER IOTA WITH TONOS
+	0x00d9: 0x038c,	# GREEK CAPITAL LETTER OMICRON WITH TONOS
+	0x00da: 0x038e,	# GREEK CAPITAL LETTER UPSILON WITH TONOS
+	0x00db: 0x03ad,	# GREEK SMALL LETTER EPSILON WITH TONOS
+	0x00dc: 0x03ae,	# GREEK SMALL LETTER ETA WITH TONOS
+	0x00dd: 0x03af,	# GREEK SMALL LETTER IOTA WITH TONOS
+	0x00de: 0x03cc,	# GREEK SMALL LETTER OMICRON WITH TONOS
+	0x00df: 0x038f,	# GREEK CAPITAL LETTER OMEGA WITH TONOS
+	0x00e0: 0x03cd,	# GREEK SMALL LETTER UPSILON WITH TONOS
+	0x00e1: 0x03b1,	# GREEK SMALL LETTER ALPHA
+	0x00e2: 0x03b2,	# GREEK SMALL LETTER BETA
+	0x00e3: 0x03c8,	# GREEK SMALL LETTER PSI
+	0x00e4: 0x03b4,	# GREEK SMALL LETTER DELTA
+	0x00e5: 0x03b5,	# GREEK SMALL LETTER EPSILON
+	0x00e6: 0x03c6,	# GREEK SMALL LETTER PHI
+	0x00e7: 0x03b3,	# GREEK SMALL LETTER GAMMA
+	0x00e8: 0x03b7,	# GREEK SMALL LETTER ETA
+	0x00e9: 0x03b9,	# GREEK SMALL LETTER IOTA
+	0x00ea: 0x03be,	# GREEK SMALL LETTER XI
+	0x00eb: 0x03ba,	# GREEK SMALL LETTER KAPPA
+	0x00ec: 0x03bb,	# GREEK SMALL LETTER LAMBDA
+	0x00ed: 0x03bc,	# GREEK SMALL LETTER MU
+	0x00ee: 0x03bd,	# GREEK SMALL LETTER NU
+	0x00ef: 0x03bf,	# GREEK SMALL LETTER OMICRON
+	0x00f0: 0x03c0,	# GREEK SMALL LETTER PI
+	0x00f1: 0x03ce,	# GREEK SMALL LETTER OMEGA WITH TONOS
+	0x00f2: 0x03c1,	# GREEK SMALL LETTER RHO
+	0x00f3: 0x03c3,	# GREEK SMALL LETTER SIGMA
+	0x00f4: 0x03c4,	# GREEK SMALL LETTER TAU
+	0x00f5: 0x03b8,	# GREEK SMALL LETTER THETA
+	0x00f6: 0x03c9,	# GREEK SMALL LETTER OMEGA
+	0x00f7: 0x03c2,	# GREEK SMALL LETTER FINAL SIGMA
+	0x00f8: 0x03c7,	# GREEK SMALL LETTER CHI
+	0x00f9: 0x03c5,	# GREEK SMALL LETTER UPSILON
+	0x00fa: 0x03b6,	# GREEK SMALL LETTER ZETA
+	0x00fb: 0x03ca,	# GREEK SMALL LETTER IOTA WITH DIALYTIKA
+	0x00fc: 0x03cb,	# GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+	0x00fd: 0x0390,	# GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+	0x00fe: 0x03b0,	# GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+	0x00ff: None,	# UNDEFINED
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/mac_iceland.py b/Lib/encodings/mac_iceland.py
new file mode 100644
index 0000000..62e1f63
--- /dev/null
+++ b/Lib/encodings/mac_iceland.py
@@ -0,0 +1,168 @@
+""" Python Character Mapping Codec generated from 'ICELAND.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x0081: 0x00c5,	# LATIN CAPITAL LETTER A WITH RING ABOVE
+	0x0082: 0x00c7,	# LATIN CAPITAL LETTER C WITH CEDILLA
+	0x0083: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0084: 0x00d1,	# LATIN CAPITAL LETTER N WITH TILDE
+	0x0085: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x0086: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x0087: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x0088: 0x00e0,	# LATIN SMALL LETTER A WITH GRAVE
+	0x0089: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x008a: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x008b: 0x00e3,	# LATIN SMALL LETTER A WITH TILDE
+	0x008c: 0x00e5,	# LATIN SMALL LETTER A WITH RING ABOVE
+	0x008d: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x008e: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x008f: 0x00e8,	# LATIN SMALL LETTER E WITH GRAVE
+	0x0090: 0x00ea,	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+	0x0091: 0x00eb,	# LATIN SMALL LETTER E WITH DIAERESIS
+	0x0092: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x0093: 0x00ec,	# LATIN SMALL LETTER I WITH GRAVE
+	0x0094: 0x00ee,	# LATIN SMALL LETTER I WITH CIRCUMFLEX
+	0x0095: 0x00ef,	# LATIN SMALL LETTER I WITH DIAERESIS
+	0x0096: 0x00f1,	# LATIN SMALL LETTER N WITH TILDE
+	0x0097: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x0098: 0x00f2,	# LATIN SMALL LETTER O WITH GRAVE
+	0x0099: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x009a: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x009b: 0x00f5,	# LATIN SMALL LETTER O WITH TILDE
+	0x009c: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x009d: 0x00f9,	# LATIN SMALL LETTER U WITH GRAVE
+	0x009e: 0x00fb,	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+	0x009f: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x00a0: 0x00dd,	# LATIN CAPITAL LETTER Y WITH ACUTE
+	0x00a1: 0x00b0,	# DEGREE SIGN
+	0x00a4: 0x00a7,	# SECTION SIGN
+	0x00a5: 0x2022,	# BULLET
+	0x00a6: 0x00b6,	# PILCROW SIGN
+	0x00a7: 0x00df,	# LATIN SMALL LETTER SHARP S
+	0x00a8: 0x00ae,	# REGISTERED SIGN
+	0x00aa: 0x2122,	# TRADE MARK SIGN
+	0x00ab: 0x00b4,	# ACUTE ACCENT
+	0x00ac: 0x00a8,	# DIAERESIS
+	0x00ad: 0x2260,	# NOT EQUAL TO
+	0x00ae: 0x00c6,	# LATIN CAPITAL LIGATURE AE
+	0x00af: 0x00d8,	# LATIN CAPITAL LETTER O WITH STROKE
+	0x00b0: 0x221e,	# INFINITY
+	0x00b2: 0x2264,	# LESS-THAN OR EQUAL TO
+	0x00b3: 0x2265,	# GREATER-THAN OR EQUAL TO
+	0x00b4: 0x00a5,	# YEN SIGN
+	0x00b6: 0x2202,	# PARTIAL DIFFERENTIAL
+	0x00b7: 0x2211,	# N-ARY SUMMATION
+	0x00b8: 0x220f,	# N-ARY PRODUCT
+	0x00b9: 0x03c0,	# GREEK SMALL LETTER PI
+	0x00ba: 0x222b,	# INTEGRAL
+	0x00bb: 0x00aa,	# FEMININE ORDINAL INDICATOR
+	0x00bc: 0x00ba,	# MASCULINE ORDINAL INDICATOR
+	0x00bd: 0x2126,	# OHM SIGN
+	0x00be: 0x00e6,	# LATIN SMALL LIGATURE AE
+	0x00bf: 0x00f8,	# LATIN SMALL LETTER O WITH STROKE
+	0x00c0: 0x00bf,	# INVERTED QUESTION MARK
+	0x00c1: 0x00a1,	# INVERTED EXCLAMATION MARK
+	0x00c2: 0x00ac,	# NOT SIGN
+	0x00c3: 0x221a,	# SQUARE ROOT
+	0x00c4: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x00c5: 0x2248,	# ALMOST EQUAL TO
+	0x00c6: 0x2206,	# INCREMENT
+	0x00c7: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00c8: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00c9: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x00ca: 0x00a0,	# NO-BREAK SPACE
+	0x00cb: 0x00c0,	# LATIN CAPITAL LETTER A WITH GRAVE
+	0x00cc: 0x00c3,	# LATIN CAPITAL LETTER A WITH TILDE
+	0x00cd: 0x00d5,	# LATIN CAPITAL LETTER O WITH TILDE
+	0x00ce: 0x0152,	# LATIN CAPITAL LIGATURE OE
+	0x00cf: 0x0153,	# LATIN SMALL LIGATURE OE
+	0x00d0: 0x2013,	# EN DASH
+	0x00d1: 0x2014,	# EM DASH
+	0x00d2: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x00d3: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x00d4: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x00d5: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x00d6: 0x00f7,	# DIVISION SIGN
+	0x00d7: 0x25ca,	# LOZENGE
+	0x00d8: 0x00ff,	# LATIN SMALL LETTER Y WITH DIAERESIS
+	0x00d9: 0x0178,	# LATIN CAPITAL LETTER Y WITH DIAERESIS
+	0x00da: 0x2044,	# FRACTION SLASH
+	0x00db: 0x00a4,	# CURRENCY SIGN
+	0x00dc: 0x00d0,	# LATIN CAPITAL LETTER ETH
+	0x00dd: 0x00f0,	# LATIN SMALL LETTER ETH
+	0x00df: 0x00fe,	# LATIN SMALL LETTER THORN
+	0x00e0: 0x00fd,	# LATIN SMALL LETTER Y WITH ACUTE
+	0x00e1: 0x00b7,	# MIDDLE DOT
+	0x00e2: 0x201a,	# SINGLE LOW-9 QUOTATION MARK
+	0x00e3: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x00e4: 0x2030,	# PER MILLE SIGN
+	0x00e5: 0x00c2,	# LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+	0x00e6: 0x00ca,	# LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+	0x00e7: 0x00c1,	# LATIN CAPITAL LETTER A WITH ACUTE
+	0x00e8: 0x00cb,	# LATIN CAPITAL LETTER E WITH DIAERESIS
+	0x00e9: 0x00c8,	# LATIN CAPITAL LETTER E WITH GRAVE
+	0x00ea: 0x00cd,	# LATIN CAPITAL LETTER I WITH ACUTE
+	0x00eb: 0x00ce,	# LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+	0x00ec: 0x00cf,	# LATIN CAPITAL LETTER I WITH DIAERESIS
+	0x00ed: 0x00cc,	# LATIN CAPITAL LETTER I WITH GRAVE
+	0x00ee: 0x00d3,	# LATIN CAPITAL LETTER O WITH ACUTE
+	0x00ef: 0x00d4,	# LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+	0x00f0: None,	# UNDEFINED
+	0x00f1: 0x00d2,	# LATIN CAPITAL LETTER O WITH GRAVE
+	0x00f2: 0x00da,	# LATIN CAPITAL LETTER U WITH ACUTE
+	0x00f3: 0x00db,	# LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+	0x00f4: 0x00d9,	# LATIN CAPITAL LETTER U WITH GRAVE
+	0x00f5: 0x0131,	# LATIN SMALL LETTER DOTLESS I
+	0x00f6: 0x02c6,	# MODIFIER LETTER CIRCUMFLEX ACCENT
+	0x00f7: 0x02dc,	# SMALL TILDE
+	0x00f8: 0x00af,	# MACRON
+	0x00f9: 0x02d8,	# BREVE
+	0x00fa: 0x02d9,	# DOT ABOVE
+	0x00fb: 0x02da,	# RING ABOVE
+	0x00fc: 0x00b8,	# CEDILLA
+	0x00fd: 0x02dd,	# DOUBLE ACUTE ACCENT
+	0x00fe: 0x02db,	# OGONEK
+	0x00ff: 0x02c7,	# CARON
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/mac_latin2.py b/Lib/encodings/mac_latin2.py
new file mode 100644
index 0000000..7e64959
--- /dev/null
+++ b/Lib/encodings/mac_latin2.py
@@ -0,0 +1,172 @@
+""" Python Character Mapping Codec generated from 'LATIN2.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x0081: 0x0100,	# LATIN CAPITAL LETTER A WITH MACRON
+	0x0082: 0x0101,	# LATIN SMALL LETTER A WITH MACRON
+	0x0083: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0084: 0x0104,	# LATIN CAPITAL LETTER A WITH OGONEK
+	0x0085: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x0086: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x0087: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x0088: 0x0105,	# LATIN SMALL LETTER A WITH OGONEK
+	0x0089: 0x010c,	# LATIN CAPITAL LETTER C WITH CARON
+	0x008a: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x008b: 0x010d,	# LATIN SMALL LETTER C WITH CARON
+	0x008c: 0x0106,	# LATIN CAPITAL LETTER C WITH ACUTE
+	0x008d: 0x0107,	# LATIN SMALL LETTER C WITH ACUTE
+	0x008e: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x008f: 0x0179,	# LATIN CAPITAL LETTER Z WITH ACUTE
+	0x0090: 0x017a,	# LATIN SMALL LETTER Z WITH ACUTE
+	0x0091: 0x010e,	# LATIN CAPITAL LETTER D WITH CARON
+	0x0092: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x0093: 0x010f,	# LATIN SMALL LETTER D WITH CARON
+	0x0094: 0x0112,	# LATIN CAPITAL LETTER E WITH MACRON
+	0x0095: 0x0113,	# LATIN SMALL LETTER E WITH MACRON
+	0x0096: 0x0116,	# LATIN CAPITAL LETTER E WITH DOT ABOVE
+	0x0097: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x0098: 0x0117,	# LATIN SMALL LETTER E WITH DOT ABOVE
+	0x0099: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x009a: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x009b: 0x00f5,	# LATIN SMALL LETTER O WITH TILDE
+	0x009c: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x009d: 0x011a,	# LATIN CAPITAL LETTER E WITH CARON
+	0x009e: 0x011b,	# LATIN SMALL LETTER E WITH CARON
+	0x009f: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x00a0: 0x2020,	# DAGGER
+	0x00a1: 0x00b0,	# DEGREE SIGN
+	0x00a2: 0x0118,	# LATIN CAPITAL LETTER E WITH OGONEK
+	0x00a4: 0x00a7,	# SECTION SIGN
+	0x00a5: 0x2022,	# BULLET
+	0x00a6: 0x00b6,	# PILCROW SIGN
+	0x00a7: 0x00df,	# LATIN SMALL LETTER SHARP S
+	0x00a8: 0x00ae,	# REGISTERED SIGN
+	0x00aa: 0x2122,	# TRADE MARK SIGN
+	0x00ab: 0x0119,	# LATIN SMALL LETTER E WITH OGONEK
+	0x00ac: 0x00a8,	# DIAERESIS
+	0x00ad: 0x2260,	# NOT EQUAL TO
+	0x00ae: 0x0123,	# LATIN SMALL LETTER G WITH CEDILLA
+	0x00af: 0x012e,	# LATIN CAPITAL LETTER I WITH OGONEK
+	0x00b0: 0x012f,	# LATIN SMALL LETTER I WITH OGONEK
+	0x00b1: 0x012a,	# LATIN CAPITAL LETTER I WITH MACRON
+	0x00b2: 0x2264,	# LESS-THAN OR EQUAL TO
+	0x00b3: 0x2265,	# GREATER-THAN OR EQUAL TO
+	0x00b4: 0x012b,	# LATIN SMALL LETTER I WITH MACRON
+	0x00b5: 0x0136,	# LATIN CAPITAL LETTER K WITH CEDILLA
+	0x00b6: 0x2202,	# PARTIAL DIFFERENTIAL
+	0x00b7: 0x2211,	# N-ARY SUMMATION
+	0x00b8: 0x0142,	# LATIN SMALL LETTER L WITH STROKE
+	0x00b9: 0x013b,	# LATIN CAPITAL LETTER L WITH CEDILLA
+	0x00ba: 0x013c,	# LATIN SMALL LETTER L WITH CEDILLA
+	0x00bb: 0x013d,	# LATIN CAPITAL LETTER L WITH CARON
+	0x00bc: 0x013e,	# LATIN SMALL LETTER L WITH CARON
+	0x00bd: 0x0139,	# LATIN CAPITAL LETTER L WITH ACUTE
+	0x00be: 0x013a,	# LATIN SMALL LETTER L WITH ACUTE
+	0x00bf: 0x0145,	# LATIN CAPITAL LETTER N WITH CEDILLA
+	0x00c0: 0x0146,	# LATIN SMALL LETTER N WITH CEDILLA
+	0x00c1: 0x0143,	# LATIN CAPITAL LETTER N WITH ACUTE
+	0x00c2: 0x00ac,	# NOT SIGN
+	0x00c3: 0x221a,	# SQUARE ROOT
+	0x00c4: 0x0144,	# LATIN SMALL LETTER N WITH ACUTE
+	0x00c5: 0x0147,	# LATIN CAPITAL LETTER N WITH CARON
+	0x00c6: 0x2206,	# INCREMENT
+	0x00c7: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00c8: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00c9: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x00ca: 0x00a0,	# NO-BREAK SPACE
+	0x00cb: 0x0148,	# LATIN SMALL LETTER N WITH CARON
+	0x00cc: 0x0150,	# LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+	0x00cd: 0x00d5,	# LATIN CAPITAL LETTER O WITH TILDE
+	0x00ce: 0x0151,	# LATIN SMALL LETTER O WITH DOUBLE ACUTE
+	0x00cf: 0x014c,	# LATIN CAPITAL LETTER O WITH MACRON
+	0x00d0: 0x2013,	# EN DASH
+	0x00d1: 0x2014,	# EM DASH
+	0x00d2: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x00d3: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x00d4: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x00d5: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x00d6: 0x00f7,	# DIVISION SIGN
+	0x00d7: 0x25ca,	# LOZENGE
+	0x00d8: 0x014d,	# LATIN SMALL LETTER O WITH MACRON
+	0x00d9: 0x0154,	# LATIN CAPITAL LETTER R WITH ACUTE
+	0x00da: 0x0155,	# LATIN SMALL LETTER R WITH ACUTE
+	0x00db: 0x0158,	# LATIN CAPITAL LETTER R WITH CARON
+	0x00dc: 0x2039,	# SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+	0x00dd: 0x203a,	# SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+	0x00de: 0x0159,	# LATIN SMALL LETTER R WITH CARON
+	0x00df: 0x0156,	# LATIN CAPITAL LETTER R WITH CEDILLA
+	0x00e0: 0x0157,	# LATIN SMALL LETTER R WITH CEDILLA
+	0x00e1: 0x0160,	# LATIN CAPITAL LETTER S WITH CARON
+	0x00e2: 0x201a,	# SINGLE LOW-9 QUOTATION MARK
+	0x00e3: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x00e4: 0x0161,	# LATIN SMALL LETTER S WITH CARON
+	0x00e5: 0x015a,	# LATIN CAPITAL LETTER S WITH ACUTE
+	0x00e6: 0x015b,	# LATIN SMALL LETTER S WITH ACUTE
+	0x00e7: 0x00c1,	# LATIN CAPITAL LETTER A WITH ACUTE
+	0x00e8: 0x0164,	# LATIN CAPITAL LETTER T WITH CARON
+	0x00e9: 0x0165,	# LATIN SMALL LETTER T WITH CARON
+	0x00ea: 0x00cd,	# LATIN CAPITAL LETTER I WITH ACUTE
+	0x00eb: 0x017d,	# LATIN CAPITAL LETTER Z WITH CARON
+	0x00ec: 0x017e,	# LATIN SMALL LETTER Z WITH CARON
+	0x00ed: 0x016a,	# LATIN CAPITAL LETTER U WITH MACRON
+	0x00ee: 0x00d3,	# LATIN CAPITAL LETTER O WITH ACUTE
+	0x00ef: 0x00d4,	# LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+	0x00f0: 0x016b,	# LATIN SMALL LETTER U WITH MACRON
+	0x00f1: 0x016e,	# LATIN CAPITAL LETTER U WITH RING ABOVE
+	0x00f2: 0x00da,	# LATIN CAPITAL LETTER U WITH ACUTE
+	0x00f3: 0x016f,	# LATIN SMALL LETTER U WITH RING ABOVE
+	0x00f4: 0x0170,	# LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+	0x00f5: 0x0171,	# LATIN SMALL LETTER U WITH DOUBLE ACUTE
+	0x00f6: 0x0172,	# LATIN CAPITAL LETTER U WITH OGONEK
+	0x00f7: 0x0173,	# LATIN SMALL LETTER U WITH OGONEK
+	0x00f8: 0x00dd,	# LATIN CAPITAL LETTER Y WITH ACUTE
+	0x00f9: 0x00fd,	# LATIN SMALL LETTER Y WITH ACUTE
+	0x00fa: 0x0137,	# LATIN SMALL LETTER K WITH CEDILLA
+	0x00fb: 0x017b,	# LATIN CAPITAL LETTER Z WITH DOT ABOVE
+	0x00fc: 0x0141,	# LATIN CAPITAL LETTER L WITH STROKE
+	0x00fd: 0x017c,	# LATIN SMALL LETTER Z WITH DOT ABOVE
+	0x00fe: 0x0122,	# LATIN CAPITAL LETTER G WITH CEDILLA
+	0x00ff: 0x02c7,	# CARON
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/mac_roman.py b/Lib/encodings/mac_roman.py
new file mode 100644
index 0000000..9147e93
--- /dev/null
+++ b/Lib/encodings/mac_roman.py
@@ -0,0 +1,169 @@
+""" Python Character Mapping Codec generated from 'ROMAN.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x0081: 0x00c5,	# LATIN CAPITAL LETTER A WITH RING ABOVE
+	0x0082: 0x00c7,	# LATIN CAPITAL LETTER C WITH CEDILLA
+	0x0083: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0084: 0x00d1,	# LATIN CAPITAL LETTER N WITH TILDE
+	0x0085: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x0086: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x0087: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x0088: 0x00e0,	# LATIN SMALL LETTER A WITH GRAVE
+	0x0089: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x008a: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x008b: 0x00e3,	# LATIN SMALL LETTER A WITH TILDE
+	0x008c: 0x00e5,	# LATIN SMALL LETTER A WITH RING ABOVE
+	0x008d: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x008e: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x008f: 0x00e8,	# LATIN SMALL LETTER E WITH GRAVE
+	0x0090: 0x00ea,	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+	0x0091: 0x00eb,	# LATIN SMALL LETTER E WITH DIAERESIS
+	0x0092: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x0093: 0x00ec,	# LATIN SMALL LETTER I WITH GRAVE
+	0x0094: 0x00ee,	# LATIN SMALL LETTER I WITH CIRCUMFLEX
+	0x0095: 0x00ef,	# LATIN SMALL LETTER I WITH DIAERESIS
+	0x0096: 0x00f1,	# LATIN SMALL LETTER N WITH TILDE
+	0x0097: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x0098: 0x00f2,	# LATIN SMALL LETTER O WITH GRAVE
+	0x0099: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x009a: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x009b: 0x00f5,	# LATIN SMALL LETTER O WITH TILDE
+	0x009c: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x009d: 0x00f9,	# LATIN SMALL LETTER U WITH GRAVE
+	0x009e: 0x00fb,	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+	0x009f: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x00a0: 0x2020,	# DAGGER
+	0x00a1: 0x00b0,	# DEGREE SIGN
+	0x00a4: 0x00a7,	# SECTION SIGN
+	0x00a5: 0x2022,	# BULLET
+	0x00a6: 0x00b6,	# PILCROW SIGN
+	0x00a7: 0x00df,	# LATIN SMALL LETTER SHARP S
+	0x00a8: 0x00ae,	# REGISTERED SIGN
+	0x00aa: 0x2122,	# TRADE MARK SIGN
+	0x00ab: 0x00b4,	# ACUTE ACCENT
+	0x00ac: 0x00a8,	# DIAERESIS
+	0x00ad: 0x2260,	# NOT EQUAL TO
+	0x00ae: 0x00c6,	# LATIN CAPITAL LIGATURE AE
+	0x00af: 0x00d8,	# LATIN CAPITAL LETTER O WITH STROKE
+	0x00b0: 0x221e,	# INFINITY
+	0x00b2: 0x2264,	# LESS-THAN OR EQUAL TO
+	0x00b3: 0x2265,	# GREATER-THAN OR EQUAL TO
+	0x00b4: 0x00a5,	# YEN SIGN
+	0x00b6: 0x2202,	# PARTIAL DIFFERENTIAL
+	0x00b7: 0x2211,	# N-ARY SUMMATION
+	0x00b8: 0x220f,	# N-ARY PRODUCT
+	0x00b9: 0x03c0,	# GREEK SMALL LETTER PI
+	0x00ba: 0x222b,	# INTEGRAL
+	0x00bb: 0x00aa,	# FEMININE ORDINAL INDICATOR
+	0x00bc: 0x00ba,	# MASCULINE ORDINAL INDICATOR
+	0x00bd: 0x2126,	# OHM SIGN
+	0x00be: 0x00e6,	# LATIN SMALL LIGATURE AE
+	0x00bf: 0x00f8,	# LATIN SMALL LETTER O WITH STROKE
+	0x00c0: 0x00bf,	# INVERTED QUESTION MARK
+	0x00c1: 0x00a1,	# INVERTED EXCLAMATION MARK
+	0x00c2: 0x00ac,	# NOT SIGN
+	0x00c3: 0x221a,	# SQUARE ROOT
+	0x00c4: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x00c5: 0x2248,	# ALMOST EQUAL TO
+	0x00c6: 0x2206,	# INCREMENT
+	0x00c7: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00c8: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00c9: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x00ca: 0x00a0,	# NO-BREAK SPACE
+	0x00cb: 0x00c0,	# LATIN CAPITAL LETTER A WITH GRAVE
+	0x00cc: 0x00c3,	# LATIN CAPITAL LETTER A WITH TILDE
+	0x00cd: 0x00d5,	# LATIN CAPITAL LETTER O WITH TILDE
+	0x00ce: 0x0152,	# LATIN CAPITAL LIGATURE OE
+	0x00cf: 0x0153,	# LATIN SMALL LIGATURE OE
+	0x00d0: 0x2013,	# EN DASH
+	0x00d1: 0x2014,	# EM DASH
+	0x00d2: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x00d3: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x00d4: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x00d5: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x00d6: 0x00f7,	# DIVISION SIGN
+	0x00d7: 0x25ca,	# LOZENGE
+	0x00d8: 0x00ff,	# LATIN SMALL LETTER Y WITH DIAERESIS
+	0x00d9: 0x0178,	# LATIN CAPITAL LETTER Y WITH DIAERESIS
+	0x00da: 0x2044,	# FRACTION SLASH
+	0x00db: 0x00a4,	# CURRENCY SIGN
+	0x00dc: 0x2039,	# SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+	0x00dd: 0x203a,	# SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+	0x00de: 0xfb01,	# LATIN SMALL LIGATURE FI
+	0x00df: 0xfb02,	# LATIN SMALL LIGATURE FL
+	0x00e0: 0x2021,	# DOUBLE DAGGER
+	0x00e1: 0x00b7,	# MIDDLE DOT
+	0x00e2: 0x201a,	# SINGLE LOW-9 QUOTATION MARK
+	0x00e3: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x00e4: 0x2030,	# PER MILLE SIGN
+	0x00e5: 0x00c2,	# LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+	0x00e6: 0x00ca,	# LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+	0x00e7: 0x00c1,	# LATIN CAPITAL LETTER A WITH ACUTE
+	0x00e8: 0x00cb,	# LATIN CAPITAL LETTER E WITH DIAERESIS
+	0x00e9: 0x00c8,	# LATIN CAPITAL LETTER E WITH GRAVE
+	0x00ea: 0x00cd,	# LATIN CAPITAL LETTER I WITH ACUTE
+	0x00eb: 0x00ce,	# LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+	0x00ec: 0x00cf,	# LATIN CAPITAL LETTER I WITH DIAERESIS
+	0x00ed: 0x00cc,	# LATIN CAPITAL LETTER I WITH GRAVE
+	0x00ee: 0x00d3,	# LATIN CAPITAL LETTER O WITH ACUTE
+	0x00ef: 0x00d4,	# LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+	0x00f0: None,	# UNDEFINED
+	0x00f1: 0x00d2,	# LATIN CAPITAL LETTER O WITH GRAVE
+	0x00f2: 0x00da,	# LATIN CAPITAL LETTER U WITH ACUTE
+	0x00f3: 0x00db,	# LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+	0x00f4: 0x00d9,	# LATIN CAPITAL LETTER U WITH GRAVE
+	0x00f5: 0x0131,	# LATIN SMALL LETTER DOTLESS I
+	0x00f6: 0x02c6,	# MODIFIER LETTER CIRCUMFLEX ACCENT
+	0x00f7: 0x02dc,	# SMALL TILDE
+	0x00f8: 0x00af,	# MACRON
+	0x00f9: 0x02d8,	# BREVE
+	0x00fa: 0x02d9,	# DOT ABOVE
+	0x00fb: 0x02da,	# RING ABOVE
+	0x00fc: 0x00b8,	# CEDILLA
+	0x00fd: 0x02dd,	# DOUBLE ACUTE ACCENT
+	0x00fe: 0x02db,	# OGONEK
+	0x00ff: 0x02c7,	# CARON
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/mac_turkish.py b/Lib/encodings/mac_turkish.py
new file mode 100644
index 0000000..76b6bbe
--- /dev/null
+++ b/Lib/encodings/mac_turkish.py
@@ -0,0 +1,169 @@
+""" Python Character Mapping Codec generated from 'TURKISH.TXT'.
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = {
+
+	0x0080: 0x00c4,	# LATIN CAPITAL LETTER A WITH DIAERESIS
+	0x0081: 0x00c5,	# LATIN CAPITAL LETTER A WITH RING ABOVE
+	0x0082: 0x00c7,	# LATIN CAPITAL LETTER C WITH CEDILLA
+	0x0083: 0x00c9,	# LATIN CAPITAL LETTER E WITH ACUTE
+	0x0084: 0x00d1,	# LATIN CAPITAL LETTER N WITH TILDE
+	0x0085: 0x00d6,	# LATIN CAPITAL LETTER O WITH DIAERESIS
+	0x0086: 0x00dc,	# LATIN CAPITAL LETTER U WITH DIAERESIS
+	0x0087: 0x00e1,	# LATIN SMALL LETTER A WITH ACUTE
+	0x0088: 0x00e0,	# LATIN SMALL LETTER A WITH GRAVE
+	0x0089: 0x00e2,	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+	0x008a: 0x00e4,	# LATIN SMALL LETTER A WITH DIAERESIS
+	0x008b: 0x00e3,	# LATIN SMALL LETTER A WITH TILDE
+	0x008c: 0x00e5,	# LATIN SMALL LETTER A WITH RING ABOVE
+	0x008d: 0x00e7,	# LATIN SMALL LETTER C WITH CEDILLA
+	0x008e: 0x00e9,	# LATIN SMALL LETTER E WITH ACUTE
+	0x008f: 0x00e8,	# LATIN SMALL LETTER E WITH GRAVE
+	0x0090: 0x00ea,	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+	0x0091: 0x00eb,	# LATIN SMALL LETTER E WITH DIAERESIS
+	0x0092: 0x00ed,	# LATIN SMALL LETTER I WITH ACUTE
+	0x0093: 0x00ec,	# LATIN SMALL LETTER I WITH GRAVE
+	0x0094: 0x00ee,	# LATIN SMALL LETTER I WITH CIRCUMFLEX
+	0x0095: 0x00ef,	# LATIN SMALL LETTER I WITH DIAERESIS
+	0x0096: 0x00f1,	# LATIN SMALL LETTER N WITH TILDE
+	0x0097: 0x00f3,	# LATIN SMALL LETTER O WITH ACUTE
+	0x0098: 0x00f2,	# LATIN SMALL LETTER O WITH GRAVE
+	0x0099: 0x00f4,	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+	0x009a: 0x00f6,	# LATIN SMALL LETTER O WITH DIAERESIS
+	0x009b: 0x00f5,	# LATIN SMALL LETTER O WITH TILDE
+	0x009c: 0x00fa,	# LATIN SMALL LETTER U WITH ACUTE
+	0x009d: 0x00f9,	# LATIN SMALL LETTER U WITH GRAVE
+	0x009e: 0x00fb,	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+	0x009f: 0x00fc,	# LATIN SMALL LETTER U WITH DIAERESIS
+	0x00a0: 0x2020,	# DAGGER
+	0x00a1: 0x00b0,	# DEGREE SIGN
+	0x00a4: 0x00a7,	# SECTION SIGN
+	0x00a5: 0x2022,	# BULLET
+	0x00a6: 0x00b6,	# PILCROW SIGN
+	0x00a7: 0x00df,	# LATIN SMALL LETTER SHARP S
+	0x00a8: 0x00ae,	# REGISTERED SIGN
+	0x00aa: 0x2122,	# TRADE MARK SIGN
+	0x00ab: 0x00b4,	# ACUTE ACCENT
+	0x00ac: 0x00a8,	# DIAERESIS
+	0x00ad: 0x2260,	# NOT EQUAL TO
+	0x00ae: 0x00c6,	# LATIN CAPITAL LIGATURE AE
+	0x00af: 0x00d8,	# LATIN CAPITAL LETTER O WITH STROKE
+	0x00b0: 0x221e,	# INFINITY
+	0x00b2: 0x2264,	# LESS-THAN OR EQUAL TO
+	0x00b3: 0x2265,	# GREATER-THAN OR EQUAL TO
+	0x00b4: 0x00a5,	# YEN SIGN
+	0x00b6: 0x2202,	# PARTIAL DIFFERENTIAL
+	0x00b7: 0x2211,	# N-ARY SUMMATION
+	0x00b8: 0x220f,	# N-ARY PRODUCT
+	0x00b9: 0x03c0,	# GREEK SMALL LETTER PI
+	0x00ba: 0x222b,	# INTEGRAL
+	0x00bb: 0x00aa,	# FEMININE ORDINAL INDICATOR
+	0x00bc: 0x00ba,	# MASCULINE ORDINAL INDICATOR
+	0x00bd: 0x2126,	# OHM SIGN
+	0x00be: 0x00e6,	# LATIN SMALL LIGATURE AE
+	0x00bf: 0x00f8,	# LATIN SMALL LETTER O WITH STROKE
+	0x00c0: 0x00bf,	# INVERTED QUESTION MARK
+	0x00c1: 0x00a1,	# INVERTED EXCLAMATION MARK
+	0x00c2: 0x00ac,	# NOT SIGN
+	0x00c3: 0x221a,	# SQUARE ROOT
+	0x00c4: 0x0192,	# LATIN SMALL LETTER F WITH HOOK
+	0x00c5: 0x2248,	# ALMOST EQUAL TO
+	0x00c6: 0x2206,	# INCREMENT
+	0x00c7: 0x00ab,	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00c8: 0x00bb,	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	0x00c9: 0x2026,	# HORIZONTAL ELLIPSIS
+	0x00ca: 0x00a0,	# NO-BREAK SPACE
+	0x00cb: 0x00c0,	# LATIN CAPITAL LETTER A WITH GRAVE
+	0x00cc: 0x00c3,	# LATIN CAPITAL LETTER A WITH TILDE
+	0x00cd: 0x00d5,	# LATIN CAPITAL LETTER O WITH TILDE
+	0x00ce: 0x0152,	# LATIN CAPITAL LIGATURE OE
+	0x00cf: 0x0153,	# LATIN SMALL LIGATURE OE
+	0x00d0: 0x2013,	# EN DASH
+	0x00d1: 0x2014,	# EM DASH
+	0x00d2: 0x201c,	# LEFT DOUBLE QUOTATION MARK
+	0x00d3: 0x201d,	# RIGHT DOUBLE QUOTATION MARK
+	0x00d4: 0x2018,	# LEFT SINGLE QUOTATION MARK
+	0x00d5: 0x2019,	# RIGHT SINGLE QUOTATION MARK
+	0x00d6: 0x00f7,	# DIVISION SIGN
+	0x00d7: 0x25ca,	# LOZENGE
+	0x00d8: 0x00ff,	# LATIN SMALL LETTER Y WITH DIAERESIS
+	0x00d9: 0x0178,	# LATIN CAPITAL LETTER Y WITH DIAERESIS
+	0x00da: 0x011e,	# LATIN CAPITAL LETTER G WITH BREVE
+	0x00db: 0x011f,	# LATIN SMALL LETTER G WITH BREVE
+	0x00dc: 0x0130,	# LATIN CAPITAL LETTER I WITH DOT ABOVE
+	0x00dd: 0x0131,	# LATIN SMALL LETTER DOTLESS I
+	0x00de: 0x015e,	# LATIN CAPITAL LETTER S WITH CEDILLA
+	0x00df: 0x015f,	# LATIN SMALL LETTER S WITH CEDILLA
+	0x00e0: 0x2021,	# DOUBLE DAGGER
+	0x00e1: 0x00b7,	# MIDDLE DOT
+	0x00e2: 0x201a,	# SINGLE LOW-9 QUOTATION MARK
+	0x00e3: 0x201e,	# DOUBLE LOW-9 QUOTATION MARK
+	0x00e4: 0x2030,	# PER MILLE SIGN
+	0x00e5: 0x00c2,	# LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+	0x00e6: 0x00ca,	# LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+	0x00e7: 0x00c1,	# LATIN CAPITAL LETTER A WITH ACUTE
+	0x00e8: 0x00cb,	# LATIN CAPITAL LETTER E WITH DIAERESIS
+	0x00e9: 0x00c8,	# LATIN CAPITAL LETTER E WITH GRAVE
+	0x00ea: 0x00cd,	# LATIN CAPITAL LETTER I WITH ACUTE
+	0x00eb: 0x00ce,	# LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+	0x00ec: 0x00cf,	# LATIN CAPITAL LETTER I WITH DIAERESIS
+	0x00ed: 0x00cc,	# LATIN CAPITAL LETTER I WITH GRAVE
+	0x00ee: 0x00d3,	# LATIN CAPITAL LETTER O WITH ACUTE
+	0x00ef: 0x00d4,	# LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+	0x00f0: None,	# UNDEFINED
+	0x00f1: 0x00d2,	# LATIN CAPITAL LETTER O WITH GRAVE
+	0x00f2: 0x00da,	# LATIN CAPITAL LETTER U WITH ACUTE
+	0x00f3: 0x00db,	# LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+	0x00f4: 0x00d9,	# LATIN CAPITAL LETTER U WITH GRAVE
+	0x00f5: None,	# UNDEFINED
+	0x00f6: 0x02c6,	# MODIFIER LETTER CIRCUMFLEX ACCENT
+	0x00f7: 0x02dc,	# SMALL TILDE
+	0x00f8: 0x00af,	# MACRON
+	0x00f9: 0x02d8,	# BREVE
+	0x00fa: 0x02d9,	# DOT ABOVE
+	0x00fb: 0x02da,	# RING ABOVE
+	0x00fc: 0x00b8,	# CEDILLA
+	0x00fd: 0x02dd,	# DOUBLE ACUTE ACCENT
+	0x00fe: 0x02db,	# OGONEK
+	0x00ff: 0x02c7,	# CARON
+}
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
diff --git a/Lib/encodings/raw_unicode_escape.py b/Lib/encodings/raw_unicode_escape.py
new file mode 100644
index 0000000..e142846
--- /dev/null
+++ b/Lib/encodings/raw_unicode_escape.py
@@ -0,0 +1,30 @@
+""" Python 'raw-unicode-escape' Codec
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    # Note: Binding these as C functions will result in the class not
+    # converting them to methods. This is intended.
+    encode = codecs.raw_unicode_escape_encode
+    decode = codecs.raw_unicode_escape_decode
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec.encode,Codec.decode,StreamReader,StreamWriter)
diff --git a/Lib/encodings/unicode_escape.py b/Lib/encodings/unicode_escape.py
new file mode 100644
index 0000000..841651b
--- /dev/null
+++ b/Lib/encodings/unicode_escape.py
@@ -0,0 +1,30 @@
+""" Python 'unicode-escape' Codec
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    # Note: Binding these as C functions will result in the class not
+    # converting them to methods. This is intended.
+    encode = codecs.unicode_escape_encode
+    decode = codecs.unicode_escape_decode
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec.encode,Codec.decode,StreamReader,StreamWriter)
diff --git a/Lib/encodings/unicode_internal.py b/Lib/encodings/unicode_internal.py
new file mode 100644
index 0000000..4a0f4c1
--- /dev/null
+++ b/Lib/encodings/unicode_internal.py
@@ -0,0 +1,30 @@
+""" Python 'unicode-internal' Codec
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    # Note: Binding these as C functions will result in the class not
+    # converting them to methods. This is intended.
+    encode = codecs.unicode_internal_encode
+    decode = codecs.unicode_internal_decode
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec.encode,Codec.decode,StreamReader,StreamWriter)
diff --git a/Lib/encodings/utf_16.py b/Lib/encodings/utf_16.py
new file mode 100644
index 0000000..c034a97
--- /dev/null
+++ b/Lib/encodings/utf_16.py
@@ -0,0 +1,31 @@
+""" Python 'utf-16' Codec
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    # Note: Binding these as C functions will result in the class not
+    # converting them to methods. This is intended.
+    encode = codecs.utf_16_encode
+    decode = codecs.utf_16_decode
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec.encode,Codec.decode,StreamReader,StreamWriter)
+
diff --git a/Lib/encodings/utf_16_be.py b/Lib/encodings/utf_16_be.py
new file mode 100644
index 0000000..2fd28da
--- /dev/null
+++ b/Lib/encodings/utf_16_be.py
@@ -0,0 +1,31 @@
+""" Python 'utf-16-be' Codec
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    # Note: Binding these as C functions will result in the class not
+    # converting them to methods. This is intended.
+    encode = codecs.utf_16_be_encode
+    decode = codecs.utf_16_be_decode
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec.encode,Codec.decode,StreamReader,StreamWriter)
+
diff --git a/Lib/encodings/utf_16_le.py b/Lib/encodings/utf_16_le.py
new file mode 100644
index 0000000..fea9122
--- /dev/null
+++ b/Lib/encodings/utf_16_le.py
@@ -0,0 +1,31 @@
+""" Python 'utf-16-le' Codec
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    # Note: Binding these as C functions will result in the class not
+    # converting them to methods. This is intended.
+    encode = codecs.utf_16_le_encode
+    decode = codecs.utf_16_le_decode
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec.encode,Codec.decode,StreamReader,StreamWriter)
+
diff --git a/Lib/encodings/utf_8.py b/Lib/encodings/utf_8.py
new file mode 100644
index 0000000..a745f5b
--- /dev/null
+++ b/Lib/encodings/utf_8.py
@@ -0,0 +1,31 @@
+""" Python 'utf-8' Codec
+
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+
+"""
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    # Note: Binding these as C functions will result in the class not
+    # converting them to methods. This is intended.
+    encode = codecs.utf_8_encode
+    decode = codecs.utf_8_decode
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec.encode,Codec.decode,StreamReader,StreamWriter)
+
