From 25f9d68916e45da5875bd238069d3a5f0001d0a1 Mon Sep 17 00:00:00 2001 From: Peter Hinch Date: Mon, 4 Apr 2016 18:56:21 +0100 Subject: [PATCH] interim build. Bug with } in comment fixed. Bit reversal and individual text lines implemented. The latter not fully checked. --- tft_fonts/cfonts_to_py.py | 64 ++++++------ tft_fonts/fonts.py | 209 ++++++++++++++++++++------------------ tft_fonts/pyfont.py | 2 +- 3 files changed, 148 insertions(+), 127 deletions(-) diff --git a/tft_fonts/cfonts_to_py.py b/tft_fonts/cfonts_to_py.py index e6bd3da..aa0f144 100755 --- a/tft_fonts/cfonts_to_py.py +++ b/tft_fonts/cfonts_to_py.py @@ -16,7 +16,10 @@ # with a dictionary 'fonts.fonts' indexed by name and the value being a PyFont instance. # The name index is the font filename less path and extension -# TODO decide whether to bit reverse the font data or not +# TODO check that new format below works for all cases of character line length as per inded +# terminal7hex = b'\x08\x0C\x20\x80\x01'\ +# b'\x08\x00\x00\x3F\x00\x40\x80\x3F\x00\x00\x00\x0F\x80\x10\x40\x0F\x80'\ +# b'\x08\x00\x00\x3F\x00\x40\x80\x3F\x00\x00\x00\x08\x40\x1F\xC0\x00\x40'\ import argparse, os @@ -38,19 +41,26 @@ def rbits(n): # reverse bits in a byte # Given a string 0f form '0x23' representing a byte, return a string of same form but with the bits # comprising the byte reversed def rbits_text(string): - return hex(rbits(int(string, 16))) + return 'x{:02x}'.format(rbits(int(string, 16))) def writestart(outfile, name): print('{}: header found'.format(name)) - outfile.write('_') - outfile.write(name) # _fontname = b' - outfile.write(" = b'") + outfile.write('_{} = '.format(name)) def write_index(outfile, name, index): - outfile.write("_{:}_index = b'".format(name)) + outfile.write("_{:}_index = ".format(name)) + count = 0 for val in index: + if count == 0: + outfile.write("b'") outfile.write(halfword_to_str(val)) - outfile.write("'\n") + count += 1 + count %= 8 + if count == 0: + outfile.write("'\\\n") + if count > 0: + outfile.write("'") + outfile.write("\n\n") def process(infile, outfile, sourcefile): chars_processed = 0 @@ -102,33 +112,34 @@ def process(infile, outfile, sourcefile): break # No header data if phase == 3: # Process data until '}' bytes_vert = (vert + 7)//8 + comment = line.find('//') + if comment > 0 : + line = line[:comment] end = line.find('}') if end > 0 : line = line[:end] phase = 4 - comment = line.find('//') - if comment > 0 : - line = line[:comment] hexnums = line.split(',') if hexnums[0] != '': width = int(''.join(('0',hexnums[0].strip()[1:4])), 16) # in horizontal bits hbit_bytes = width * bytes_vert # Bytes per horiz bit offset += hbit_bytes index.append(offset) - for hexnum in [x for x in hexnums[1:] if not x.isspace()]: - outfile.write('\\') - hex_txt = hexnum.strip()[1:4] - if True: - outfile.write(hex_txt) # Don't reverse bits TODO which do we want? - else: - outfile.write(rbits_text(hex_txt)) # reverse bits - hbit_bytes -= 1 - if hbit_bytes == 0: - break - chars_processed += 1 - outfile.write("\\\n") + nums = [x for x in hexnums[1:] if not x.isspace()] + if nums: + outfile.write("b'") + for hexnum in nums: + outfile.write('\\') + # outfile.write(hexnum.strip()[1:4]) # Don't reverse bits + outfile.write(rbits_text(hexnum.strip()[0:4])) # reverse bits + hbit_bytes -= 1 + if hbit_bytes == 0: + break + outfile.write("'") + chars_processed += 1 + outfile.write("\\\n") # each char line ends with \ if phase == 4 : - outfile.write("'\n") + outfile.write("\n") write_index(outfile, name, index) outfile.write('{:} = pyfont.PyFont(_{:}, _{:}_index, {}, {}, {})\n\n'.format(name, name, name, vert, horiz, chars_processed)) print('{}: Characters in font: {} width: {} height: {}'.format(name, chars_processed, horiz, vert)) @@ -143,12 +154,7 @@ def write_trailer(sourcefiles, outfile): outfile.write('fonts = {') for sourcefile in sourcefiles: name = getname(sourcefile) - outfile.write('"') - outfile.write(name) - outfile.write('"') - outfile.write(':') - outfile.write(name) - outfile.write(',\n') + outfile.write('"{}":{},\n'.format(name, name)) outfile.write('}\n\n') def load_c(sourcefiles, destfile): diff --git a/tft_fonts/fonts.py b/tft_fonts/fonts.py index dc37de4..f66c624 100644 --- a/tft_fonts/fonts.py +++ b/tft_fonts/fonts.py @@ -1,102 +1,117 @@ # Code generated by CfontToPython.py import pyfont -_freesans23x25 = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\x0E\x00\xFC\x7F\x0E\x00\ -\x00\x00\x00\x00\x78\x00\x00\x00\xF8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\xF8\x01\x00\x00\ -\x00\x60\x00\x00\x00\x63\x00\x00\x00\x63\x0E\x00\x00\xF3\x0F\x00\x80\xFF\x00\x00\xF0\x67\x00\x00\x30\x63\x00\x00\x00\x63\x0F\x00\x00\xFB\x0F\x00\xC0\x7F\x00\x00\xF0\x63\x00\x00\x10\x63\x00\x00\x00\x03\x00\x00\ -\x00\x00\x00\x00\xC0\x83\x01\x00\xE0\x87\x07\x00\x30\x06\x06\x00\x10\x0C\x0C\x00\x18\x0C\x0C\x00\xFC\xFF\x3F\x00\x18\x0C\x0C\x00\x10\x18\x0C\x00\x30\x18\x06\x00\xF0\xF0\x07\x00\xC0\xE0\x01\x00\ -\x00\x00\x00\x00\xC0\x03\x00\x00\xE0\x07\x00\x00\x30\x0C\x00\x00\x30\x0C\x00\x00\x30\x0C\x08\x00\x70\x0E\x0E\x00\xE0\x07\x03\x00\x80\xC1\x01\x00\x00\x70\x00\x00\x00\x1C\x00\x00\x00\x07\x00\x00\xC0\xC1\x03\x00\x70\xE0\x07\x00\x38\x30\x0C\x00\x08\x30\x0C\x00\x00\x30\x0C\x00\x00\x30\x0C\x00\x00\x60\x06\x00\x00\xE0\x07\x00\x00\x80\x01\x00\ -\x00\x00\x00\x00\x00\xE0\x03\x00\x00\xF0\x07\x00\xE0\x38\x07\x00\xF0\x1B\x0C\x00\x18\x0F\x0C\x00\x18\x0E\x0C\x00\x18\x1E\x0C\x00\x18\x73\x06\x00\xF0\xE1\x07\x00\xE0\xC0\x03\x00\x00\xE0\x03\x00\x00\xF0\x0F\x00\x00\x30\x0E\x00\x00\x00\x08\x00\ -\x00\x00\x00\x00\x78\x00\x00\x00\xF8\x01\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFE\x01\x00\xC0\xFF\x0F\x00\xF0\x00\x7C\x00\x18\x00\xE0\x00\x04\x00\x80\x01\ -\x00\x00\x00\x00\x04\x00\x80\x01\x38\x00\xE0\x00\xF0\x01\x3C\x00\xC0\xFF\x0F\x00\x00\xFC\x01\x00\ -\x00\x00\x00\x00\x10\x00\x00\x00\xB0\x00\x00\x00\xE0\x00\x00\x00\x7C\x00\x00\x00\xE0\x00\x00\x00\xB0\x01\x00\x00\x10\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x60\x00\x00\x00\x60\x00\x00\x00\x60\x00\x00\x00\xFE\x0F\x00\x00\xFE\x0F\x00\x00\x60\x00\x00\x00\x60\x00\x00\x00\x60\x00\x00\x00\x60\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8E\x00\x00\x00\xFE\x00\x00\x00\x1E\x00\ -\x00\x00\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0E\x00\x00\x00\x0E\x00\x00\x00\x0E\x00\ -\x00\x00\x0C\x00\x00\x80\x07\x00\x00\xF0\x00\x00\x00\x1E\x00\x00\xC0\x03\x00\x00\x78\x00\x00\x00\x0C\x00\x00\x00\ -\x00\x00\x00\x00\x80\xFF\x00\x00\xE0\xFF\x03\x00\xF0\x80\x07\x00\x38\x00\x0E\x00\x18\x00\x0C\x00\x18\x00\x0C\x00\x18\x00\x0C\x00\x38\x00\x0E\x00\xF0\x00\x07\x00\xE0\xFF\x03\x00\x80\xFF\x01\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\xC0\x00\x00\x00\xC0\x00\x00\x00\xE0\xFF\x0F\x00\xF8\xFF\x0F\x00\ -\x00\x00\x00\x00\xC0\x01\x0E\x00\xE0\x81\x0F\x00\x70\xC0\x0D\x00\x38\xE0\x0C\x00\x18\x60\x0C\x00\x18\x30\x0C\x00\x18\x30\x0C\x00\x18\x18\x0C\x00\x30\x1C\x0C\x00\xF0\x0F\x0C\x00\xE0\x07\x0C\x00\ -\x00\x00\x00\x00\xE0\x80\x01\x00\xF0\x80\x07\x00\x70\x00\x06\x00\x18\x00\x0C\x00\x18\x0C\x0C\x00\x18\x0C\x0C\x00\x18\x0C\x0C\x00\x38\x0E\x0C\x00\xF0\x1F\x06\x00\xE0\xF3\x07\x00\x00\xF0\x03\x00\ -\x00\x00\x00\x00\x00\xE0\x00\x00\x00\xF0\x00\x00\x00\xDC\x00\x00\x00\xC6\x00\x00\x80\xC3\x00\x00\xC0\xC1\x00\x00\x60\xC0\x00\x00\xF8\xFF\x0F\x00\xF8\xFF\x0F\x00\x00\xC0\x00\x00\x00\xC0\x00\x00\ -\x00\x00\x00\x00\x00\x04\x03\x00\xF0\x07\x07\x00\xF8\x07\x06\x00\x18\x02\x0C\x00\x18\x03\x0C\x00\x18\x03\x0C\x00\x18\x03\x0C\x00\x18\x07\x0E\x00\x18\x0E\x07\x00\x18\xFE\x03\x00\x00\xF8\x01\x00\ -\x00\x00\x00\x00\x00\xFF\x00\x00\xE0\xFF\x03\x00\xF0\x18\x07\x00\x30\x0C\x0E\x00\x18\x06\x0C\x00\x18\x06\x0C\x00\x18\x06\x0C\x00\x18\x06\x0E\x00\x70\x0C\x07\x00\x70\xFC\x07\x00\x40\xF0\x01\x00\ -\x00\x00\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x18\x00\x0C\x00\x18\xC0\x0F\x00\x18\xF0\x03\x00\x18\x3C\x00\x00\x18\x0F\x00\x00\xD8\x01\x00\x00\xF8\x00\x00\x00\x38\x00\x00\x00\ -\x00\x00\x00\x00\x00\xE0\x01\x00\xE0\xF1\x03\x00\xF0\x3B\x07\x00\x30\x1E\x0E\x00\x18\x0C\x0C\x00\x18\x0C\x0C\x00\x18\x0C\x0C\x00\x38\x1E\x0C\x00\xF0\x1F\x06\x00\xE0\xF3\x07\x00\x00\xE0\x01\x00\ -\x00\x00\x00\x00\xC0\x07\x01\x00\xE0\x0F\x07\x00\x70\x1C\x07\x00\x38\x38\x0E\x00\x18\x30\x0C\x00\x18\x30\x0C\x00\x18\x30\x0C\x00\x38\x18\x0E\x00\x70\x1C\x07\x00\xE0\xFF\x03\x00\xC0\xFF\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x0E\x00\x80\x03\x0E\x00\x80\x03\x0E\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x8E\x00\x80\x03\xFE\x00\x80\x03\x1E\x00\ -\x00\x00\x00\x00\x00\x60\x00\x00\x00\xE0\x00\x00\x00\xF0\x00\x00\x00\xB0\x00\x00\x00\x98\x01\x00\x00\x98\x01\x00\x00\x08\x03\x00\x00\x0C\x03\x00\x00\x0C\x06\x00\x00\x06\x06\x00\x00\x06\x04\x00\x00\x02\x0C\x00\ -\x00\x00\x00\x00\x00\x98\x01\x00\x00\x98\x01\x00\x00\x98\x01\x00\x00\x98\x01\x00\x00\x98\x01\x00\x00\x98\x01\x00\x00\x98\x01\x00\x00\x98\x01\x00\x00\x98\x01\x00\x00\x98\x01\x00\x00\x98\x01\x00\x00\x98\x01\x00\ -\x00\x00\x00\x00\x00\x02\x0C\x00\x00\x06\x04\x00\x00\x06\x06\x00\x00\x0C\x06\x00\x00\x0C\x03\x00\x00\x18\x03\x00\x00\x18\x01\x00\x00\x98\x01\x00\x00\xB0\x00\x00\x00\xF0\x00\x00\x00\xE0\x00\x00\x00\x60\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x78\x00\x00\x00\x18\x00\x00\x00\x0C\x00\x00\x00\x0C\x70\x0E\x00\x0C\x78\x0E\x00\x0C\x1C\x00\x00\x1C\x06\x00\x00\xF8\x07\x00\x00\xF0\x01\x00\x00\ -\x00\x00\x00\x00\x00\xF8\x01\x00\x00\xFF\x07\x00\x80\x07\x0F\x00\xE0\x01\x1C\x00\x60\x00\x18\x00\x30\xF0\x31\x00\x18\xFC\x33\x00\x18\x1E\x67\x00\x0C\x07\x66\x00\x0C\x03\x66\x00\x0C\x01\x66\x00\x8C\x01\x62\x00\x0C\x81\x61\x00\x0C\xF7\x67\x00\x1C\xFE\x27\x00\x18\x1F\x26\x00\x38\x03\x06\x00\x30\x00\x06\x00\x70\x00\x03\x00\xE0\xC1\x03\x00\xC0\xFF\x01\x00\x00\x7F\x00\x00\ -\x00\x00\x00\x00\x00\x00\x0E\x00\x00\xC0\x0F\x00\x00\xF8\x03\x00\x00\x7F\x00\x00\xE0\x6F\x00\x00\xFC\x61\x00\x00\x3C\x60\x00\x00\x3C\x60\x00\x00\xFC\x61\x00\x00\xE0\x6F\x00\x00\x00\x7F\x00\x00\x00\xF8\x03\x00\x00\xC0\x0F\x00\x00\x00\x0E\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x1C\x0E\x0C\x00\xF8\x1B\x06\x00\xF0\xF1\x07\x00\x00\xE0\x03\x00\ -\x00\x00\x00\x00\x00\x3F\x00\x00\xE0\xFF\x01\x00\xF0\xC1\x03\x00\x38\x00\x07\x00\x18\x00\x06\x00\x1C\x00\x0E\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x18\x00\x06\x00\x38\x00\x07\x00\x70\xC0\x03\x00\x60\xC0\x01\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x1C\x00\x0E\x00\x38\x00\x07\x00\xF0\xC0\x03\x00\xE0\xFF\x01\x00\x80\x7F\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x00\x00\x0C\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x00\x00\x00\ -\x00\x00\x00\x00\x80\x3F\x00\x00\xE0\xFF\x00\x00\xF0\xE0\x03\x00\x38\x80\x07\x00\x18\x00\x06\x00\x18\x00\x0E\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x06\x00\x18\x0C\x07\x00\x38\x8C\x03\x00\x70\xFC\x07\x00\x60\xFC\x0F\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\ -\x00\x00\x00\x00\x00\xC0\x03\x00\x00\xC0\x07\x00\x00\x00\x0E\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0E\x00\xFC\xFF\x07\x00\xFC\xFF\x03\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x00\x18\x00\x00\x00\x0C\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x80\x1F\x00\x00\xC0\x39\x00\x00\x60\xF0\x00\x00\x38\xC0\x01\x00\x1C\x80\x07\x00\x0C\x00\x0F\x00\x04\x00\x0C\x00\x00\x00\x08\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x3C\x00\x00\x00\xF8\x01\x00\x00\xC0\x0F\x00\x00\x00\x7E\x00\x00\x00\xF0\x03\x00\x00\x00\x0F\x00\x00\x00\x0F\x00\x00\xE0\x07\x00\x00\xFC\x00\x00\x80\x1F\x00\x00\xF0\x03\x00\x00\x7C\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x3C\x00\x00\x00\xF0\x00\x00\x00\xE0\x01\x00\x00\x80\x07\x00\x00\x00\x1E\x00\x00\x00\x78\x00\x00\x00\xF0\x00\x00\x00\xC0\x03\x00\x00\x00\x0F\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\ -\x00\x00\x00\x00\x00\x3F\x00\x00\xC0\xFF\x00\x00\xF0\xE1\x03\x00\x78\x00\x03\x00\x18\x00\x06\x00\x18\x00\x06\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x1C\x00\x0E\x00\x18\x00\x06\x00\x38\x00\x07\x00\xF0\xC0\x03\x00\xE0\xFF\x01\x00\x80\x7F\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x1C\x0E\x00\x00\xF8\x07\x00\x00\xF0\x03\x00\x00\ -\x00\x00\x00\x00\x00\x3F\x00\x00\xC0\xFF\x00\x00\xF0\xE1\x03\x00\x70\x00\x07\x00\x18\x00\x06\x00\x18\x00\x06\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x00\x0C\x80\x0D\x00\x1C\x80\x0F\x00\x18\x00\x07\x00\x38\x00\x07\x00\xF0\xC0\x0F\x00\xE0\xFF\x1D\x00\x80\x7F\x18\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x0C\x0C\x00\x00\x1C\x1E\x00\x00\xF8\xFB\x0F\x00\xF0\xF1\x0F\x00\x00\x00\x0C\x00\ -\x00\x00\x00\x00\x00\xC0\x00\x00\xE0\xC3\x03\x00\xF0\x07\x07\x00\x38\x07\x06\x00\x1C\x0E\x0E\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x0C\x0C\x00\x0C\x1C\x0C\x00\x0C\x18\x0C\x00\x1C\x18\x0C\x00\x18\x38\x06\x00\x78\xF0\x07\x00\x70\xE0\x01\x00\ -\x00\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\x01\x00\xFC\xFF\x03\x00\x00\x00\x07\x00\x00\x00\x06\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0E\x00\x00\x00\x07\x00\xFC\xFF\x03\x00\xFC\xFF\x01\x00\ -\x00\x00\x00\x00\x1C\x00\x00\x00\xFC\x00\x00\x00\xF0\x07\x00\x00\x80\x3F\x00\x00\x00\xFC\x01\x00\x00\xE0\x0F\x00\x00\x00\x0F\x00\x00\x80\x0F\x00\x00\xF0\x07\x00\x00\xFE\x00\x00\xC0\x1F\x00\x00\xF8\x03\x00\x00\x7C\x00\x00\x00\x0C\x00\x00\x00\ -\x04\x00\x00\x00\x7C\x00\x00\x00\xFC\x07\x00\x00\xC0\x7F\x00\x00\x00\xFC\x07\x00\x00\xC0\x0F\x00\x00\x80\x0F\x00\x00\xF8\x07\x00\x00\x7F\x00\x00\xF0\x0F\x00\x00\xFC\x00\x00\x00\x7C\x00\x00\x00\xF8\x03\x00\x00\xC0\x3F\x00\x00\x00\xFC\x01\x00\x00\xE0\x0F\x00\x00\x00\x0F\x00\x00\xF0\x0F\x00\x80\xFF\x01\x00\xFC\x1F\x00\x00\xFC\x01\x00\x00\x1C\x00\x00\x00\ -\x00\x00\x00\x00\x04\x00\x0C\x00\x1C\x00\x0E\x00\x3C\x80\x07\x00\xF0\xC0\x03\x00\xE0\xF1\x00\x00\x80\x7F\x00\x00\x00\x1F\x00\x00\x00\x1F\x00\x00\x80\x7B\x00\x00\xE0\xE1\x01\x00\x78\xC0\x03\x00\x3C\x00\x0F\x00\x0C\x00\x0E\x00\x04\x00\x08\x00\ -\x00\x00\x00\x00\x0C\x00\x00\x00\x3C\x00\x00\x00\x78\x00\x00\x00\xE0\x01\x00\x00\xC0\x03\x00\x00\x00\x0F\x00\x00\x00\xFC\x0F\x00\x00\xFC\x0F\x00\x00\x1F\x00\x00\x80\x07\x00\x00\xE0\x01\x00\x00\xF8\x00\x00\x00\x3C\x00\x00\x00\x0C\x00\x00\x00\x04\x00\x00\x00\ -\x00\x00\x00\x00\x0C\x00\x0E\x00\x0C\x00\x0F\x00\x0C\xC0\x0F\x00\x0C\xE0\x0D\x00\x0C\x70\x0C\x00\x0C\x3C\x0C\x00\x0C\x1E\x0C\x00\x0C\x07\x0C\x00\xCC\x03\x0C\x00\xEC\x01\x0C\x00\x7C\x00\x0C\x00\x3C\x00\x0C\x00\x1C\x00\x0C\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\xFF\x01\xFC\xFF\xFF\x01\x0C\x00\x80\x01\x0C\x00\x80\x01\ -\x0C\x00\x00\x00\x78\x00\x00\x00\xC0\x03\x00\x00\x00\x1E\x00\x00\x00\xF0\x00\x00\x00\x80\x07\x00\x00\x00\x0C\x00\ -\x00\x00\x00\x00\x0C\x00\x80\x01\x0C\x00\x80\x01\xFC\xFF\xFF\x01\xFC\xFF\xFF\x01\ -\x00\x00\x00\x00\x00\x08\x00\x00\x00\x0E\x00\x00\xC0\x03\x00\x00\xF0\x00\x00\x00\x18\x00\x00\x00\x78\x00\x00\x00\xE0\x03\x00\x00\x00\x0F\x00\x00\x00\x0C\x00\x00\ -\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x80\x00\ -\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x0C\x00\x00\x00\x18\x00\x00\x00\x20\x00\x00\x00\ -\x00\x00\x00\x00\x00\xC6\x03\x00\x00\xC7\x07\x00\x80\xE3\x0C\x00\x80\x61\x0C\x00\x80\x61\x0C\x00\x80\x21\x0C\x00\x80\x21\x04\x00\x80\x33\x06\x00\x00\xFF\x07\x00\x00\xFE\x0F\x00\x00\x00\x0C\x00\ -\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x00\x06\x07\x00\x00\x03\x06\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\x80\x03\x0E\x00\x00\x07\x07\x00\x00\xFE\x03\x00\x00\xFC\x01\x00\ -\x00\x00\x00\x00\x00\xFC\x01\x00\x00\xFE\x03\x00\x00\x07\x07\x00\x80\x03\x0E\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\x80\x03\x0E\x00\x00\x87\x07\x00\x00\x86\x03\x00\ -\x00\x00\x00\x00\x00\xFC\x01\x00\x00\xFE\x03\x00\x00\x8F\x07\x00\x80\x03\x0E\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\x00\x03\x06\x00\x00\x07\x03\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\ -\x00\x00\x00\x00\x00\xF8\x01\x00\x00\xFE\x03\x00\x00\x37\x07\x00\x80\x33\x0E\x00\x80\x31\x0C\x00\x80\x31\x0C\x00\x80\x31\x0C\x00\x80\x31\x0C\x00\x00\x37\x06\x00\x00\x3F\x07\x00\x00\x3C\x01\x00\ -\x00\x00\x00\x00\x80\x01\x00\x00\xF8\xFF\x0F\x00\xFC\xFF\x0F\x00\x8C\x01\x00\x00\x8C\x01\x00\x00\ -\x00\x00\x00\x00\x00\xFC\x61\x00\x00\xFE\xE3\x00\x00\x07\xC7\x01\x80\x03\x8E\x01\x80\x01\x8C\x01\x80\x01\x8C\x01\x80\x01\x8C\x01\x00\x03\x86\x01\x00\x07\xC3\x00\x80\xFF\xFF\x00\x80\xFF\x3F\x00\ -\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x00\x07\x00\x00\x00\x01\x00\x00\x80\x01\x00\x00\x80\x01\x00\x00\x80\x01\x00\x00\x80\x03\x00\x00\x00\xFF\x0F\x00\x00\xFE\x0F\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x9C\xFF\x0F\x00\x9C\xFF\x0F\x00\ -\x00\x00\x80\x01\x00\x00\x80\x01\x9C\xFF\xFF\x01\x9C\xFF\xFF\x00\ -\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\x00\x30\x00\x00\x00\x18\x00\x00\x00\x3C\x00\x00\x00\xFE\x00\x00\x00\xE3\x01\x00\x80\x81\x07\x00\x80\x00\x0F\x00\x00\x00\x0C\x00\ -\x00\x00\x00\x00\xFC\xFF\x0F\x00\xFC\xFF\x0F\x00\ -\x00\x00\x00\x00\x80\xFF\x0F\x00\x80\xFF\x0F\x00\x00\x07\x00\x00\x00\x01\x00\x00\x80\x01\x00\x00\x80\x01\x00\x00\x80\x01\x00\x00\x80\x03\x00\x00\x00\xFF\x0F\x00\x00\xFF\x0F\x00\x00\x07\x00\x00\x80\x01\x00\x00\x80\x01\x00\x00\x80\x01\x00\x00\x80\x03\x00\x00\x80\xFF\x0F\x00\x00\xFF\x0F\x00\ -\x00\x00\x00\x00\x80\xFF\x0F\x00\x80\xFF\x0F\x00\x00\x06\x00\x00\x00\x03\x00\x00\x80\x01\x00\x00\x80\x01\x00\x00\x80\x01\x00\x00\x80\x03\x00\x00\x00\xFF\x0F\x00\x00\xFE\x0F\x00\ -\x00\x00\x00\x00\x00\xFC\x01\x00\x00\xFE\x03\x00\x00\x0F\x07\x00\x80\x03\x0E\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\x80\x03\x0E\x00\x00\x07\x07\x00\x00\xFF\x07\x00\x00\xFC\x01\x00\ -\x00\x00\x00\x00\x80\xFF\xFF\x00\x80\xFF\xFF\x00\x00\x8E\x03\x00\x00\x03\x06\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\x80\x03\x0E\x00\x00\x07\x07\x00\x00\xFE\x03\x00\x00\xFC\x01\x00\ -\x00\x00\x00\x00\x00\xF8\x01\x00\x00\xFE\x03\x00\x00\x8F\x07\x00\x80\x03\x0E\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\x00\x03\x06\x00\x00\x07\x07\x00\x80\xFF\xFF\x00\x80\xFF\xFF\x00\ -\x00\x00\x00\x00\x80\xFF\x0F\x00\x80\xFF\x0F\x00\x00\x06\x00\x00\x00\x03\x00\x00\x80\x01\x00\x00\x80\x01\x00\x00\ -\x00\x00\x00\x00\x00\x1E\x03\x00\x00\x3F\x07\x00\x80\x33\x0E\x00\x80\x31\x0C\x00\x80\x61\x0C\x00\x80\x61\x0C\x00\x80\x63\x0C\x00\x00\xE7\x0E\x00\x00\xC6\x07\x00\x00\xC0\x03\x00\ -\x00\x00\x00\x00\x80\x01\x00\x00\xF0\xFF\x07\x00\xF0\xFF\x0F\x00\x80\x01\x0C\x00\x80\x01\x0C\x00\ -\x00\x00\x00\x00\x80\xFF\x03\x00\x80\xFF\x07\x00\x00\x00\x0E\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x0C\x00\x00\x00\x04\x00\x00\x00\x03\x00\x80\xFF\x0F\x00\x80\xFF\x0F\x00\ -\x80\x00\x00\x00\x80\x07\x00\x00\x80\x3F\x00\x00\x00\xFC\x01\x00\x00\xE0\x0F\x00\x00\x00\x0F\x00\x00\x00\x0F\x00\x00\xE0\x03\x00\x00\xFC\x00\x00\x80\x1F\x00\x00\x80\x03\x00\x00\ -\x80\x00\x00\x00\x80\x0F\x00\x00\x00\x7F\x00\x00\x00\xF0\x07\x00\x00\x00\x0F\x00\x00\x80\x0F\x00\x00\xF8\x03\x00\x80\x3F\x00\x00\x80\x03\x00\x00\x80\x3F\x00\x00\x00\xFC\x03\x00\x00\xC0\x0F\x00\x00\x00\x0E\x00\x00\xE0\x0F\x00\x00\xFF\x00\x00\x80\x1F\x00\x00\x80\x01\x00\x00\ -\x00\x00\x00\x00\x80\x01\x0C\x00\x80\x03\x0E\x00\x00\x8F\x03\x00\x00\xDC\x01\x00\x00\x78\x00\x00\x00\xF8\x00\x00\x00\xCE\x03\x00\x80\x07\x07\x00\x80\x01\x0E\x00\x80\x00\x08\x00\ -\x80\x00\x00\x00\x80\x07\x80\x01\x80\x3F\x80\x01\x00\xFC\xC1\x01\x00\xE0\xFF\x00\x00\x00\x7E\x00\x00\x80\x0F\x00\x00\xF0\x03\x00\x00\x7E\x00\x00\x80\x0F\x00\x00\x80\x01\x00\x00\ -\x00\x00\x00\x00\x80\x01\x0E\x00\x80\x01\x0F\x00\x80\x81\x0F\x00\x80\xE1\x0D\x00\x80\x71\x0C\x00\x80\x39\x0C\x00\x80\x1D\x0C\x00\x80\x07\x0C\x00\x80\x03\x0C\x00\x80\x01\x0C\x00\ -\x00\x00\x00\x00\x00\x20\x00\x00\x00\x70\x00\x00\xF8\xDF\xFF\x00\xFC\x8F\xFF\x01\x0C\x00\x80\x01\ -\x00\x00\x00\x00\x00\x00\x00\x00\xFC\xFF\xFF\x01\ -\x00\x00\x00\x00\x00\x00\x00\x00\x0C\x00\x80\x01\xFC\x8F\xFF\x01\xF8\xDF\xFF\x00\x00\x70\x00\x00\x00\x20\x00\x00\ -' -_freesans23x25_index = b'\x00\x00\x30\x00\x44\x00\x60\x00\x94\x00\xc4\x00\x18\x01\x54\x01\x60\x01\x7c\x01\x94\x01\xb4\x01\xe4\x01\xf8\x01\x14\x02\x28\x02\x44\x02\x74\x02\x94\x02\xc4\x02\xf4\x02\x24\x03\x54\x03\x84\x03\xb0\x03\xe0\x03\x10\x04\x24\x04\x38\x04\x6c\x04\xa0\x04\xd4\x04\x04\x05\x60\x05\x9c\x05\xd8\x05\x18\x06\x58\x06\x90\x06\xc4\x06\x08\x07\x44\x07\x54\x07\x7c\x07\xbc\x07\xec\x07\x34\x08\x70\x08\xb8\x08\xf0\x08\x38\x09\x78\x09\xb4\x09\xe8\x09\x24\x0a\x60\x0a\xb8\x0a\xf4\x0a\x34\x0b\x6c\x0b\x84\x0b\xa0\x0b\xb4\x0b\xdc\x0b\x14\x0c\x2c\x0c\x5c\x0c\x90\x0c\xbc\x0c\xec\x0c\x1c\x0d\x34\x0d\x64\x0d\x90\x0d\xa0\x0d\xb0\x0d\xdc\x0d\xe8\x0d\x30\x0e\x5c\x0e\x8c\x0e\xc0\x0e\xf0\x0e\x0c\x0f\x38\x0f\x50\x0f\x7c\x0f\xa8\x0f\xec\x0f\x18\x10\x44\x10\x70\x10\x88\x10\x94\x10\xb0\x10' -freesans23x25 = pyfont.PyFont(_freesans23x25, _freesans23x25_index, 25, 23, 94) +_freesans23x25 = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\x70\x00\x3f\xfe\x70\x00'\ +b'\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x80\x00\x00'\ +b'\x00\x06\x00\x00\x00\xc6\x00\x00\x00\xc6\x70\x00\x00\xcf\xf0\x00\x01\xff\x00\x00\x0f\xe6\x00\x00\x0c\xc6\x00\x00\x00\xc6\xf0\x00\x00\xdf\xf0\x00\x03\xfe\x00\x00\x0f\xc6\x00\x00\x08\xc6\x00\x00\x00\xc0\x00\x00'\ +b'\x00\x00\x00\x00\x03\xc1\x80\x00\x07\xe1\xe0\x00\x0c\x60\x60\x00\x08\x30\x30\x00\x18\x30\x30\x00\x3f\xff\xfc\x00\x18\x30\x30\x00\x08\x18\x30\x00\x0c\x18\x60\x00\x0f\x0f\xe0\x00\x03\x07\x80\x00'\ +b'\x00\x00\x00\x00\x03\xc0\x00\x00\x07\xe0\x00\x00\x0c\x30\x00\x00\x0c\x30\x00\x00\x0c\x30\x10\x00\x0e\x70\x70\x00\x07\xe0\xc0\x00\x01\x83\x80\x00\x00\x0e\x00\x00\x00\x38\x00\x00\x00\xe0\x00\x00\x03\x83\xc0\x00\x0e\x07\xe0\x00\x1c\x0c\x30\x00\x10\x0c\x30\x00\x00\x0c\x30\x00\x00\x0c\x30\x00\x00\x06\x60\x00\x00\x07\xe0\x00\x00\x01\x80\x00'\ +b'\x00\x00\x00\x00\x00\x07\xc0\x00\x00\x0f\xe0\x00\x07\x1c\xe0\x00\x0f\xd8\x30\x00\x18\xf0\x30\x00\x18\x70\x30\x00\x18\x78\x30\x00\x18\xce\x60\x00\x0f\x87\xe0\x00\x07\x03\xc0\x00\x00\x07\xc0\x00\x00\x0f\xf0\x00\x00\x0c\x70\x00\x00\x00\x10\x00'\ +b'\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x80\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x80\x00\x03\xff\xf0\x00\x0f\x00\x3e\x00\x18\x00\x07\x00\x20\x00\x01\x80'\ +b'\x00\x00\x00\x00\x20\x00\x01\x80\x1c\x00\x07\x00\x0f\x80\x3c\x00\x03\xff\xf0\x00\x00\x3f\x80\x00'\ +b'\x00\x00\x00\x00\x08\x00\x00\x00\x0d\x00\x00\x00\x07\x00\x00\x00\x3e\x00\x00\x00\x07\x00\x00\x00\x0d\x80\x00\x00\x08\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x7f\xf0\x00\x00\x7f\xf0\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x7f\x00\x00\x00\x78\x00'\ +b'\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x70\x00\x00\x00\x70\x00'\ +b'\x00\x00\x30\x00\x00\x01\xe0\x00\x00\x0f\x00\x00\x00\x78\x00\x00\x03\xc0\x00\x00\x1e\x00\x00\x00\x30\x00\x00\x00'\ +b'\x00\x00\x00\x00\x01\xff\x00\x00\x07\xff\xc0\x00\x0f\x01\xe0\x00\x1c\x00\x70\x00\x18\x00\x30\x00\x18\x00\x30\x00\x18\x00\x30\x00\x1c\x00\x70\x00\x0f\x00\xe0\x00\x07\xff\xc0\x00\x01\xff\x80\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x07\xff\xf0\x00\x1f\xff\xf0\x00'\ +b'\x00\x00\x00\x00\x03\x80\x70\x00\x07\x81\xf0\x00\x0e\x03\xb0\x00\x1c\x07\x30\x00\x18\x06\x30\x00\x18\x0c\x30\x00\x18\x0c\x30\x00\x18\x18\x30\x00\x0c\x38\x30\x00\x0f\xf0\x30\x00\x07\xe0\x30\x00'\ +b'\x00\x00\x00\x00\x07\x01\x80\x00\x0f\x01\xe0\x00\x0e\x00\x60\x00\x18\x00\x30\x00\x18\x30\x30\x00\x18\x30\x30\x00\x18\x30\x30\x00\x1c\x70\x30\x00\x0f\xf8\x60\x00\x07\xcf\xe0\x00\x00\x0f\xc0\x00'\ +b'\x00\x00\x00\x00\x00\x07\x00\x00\x00\x0f\x00\x00\x00\x3b\x00\x00\x00\x63\x00\x00\x01\xc3\x00\x00\x03\x83\x00\x00\x06\x03\x00\x00\x1f\xff\xf0\x00\x1f\xff\xf0\x00\x00\x03\x00\x00\x00\x03\x00\x00'\ +b'\x00\x00\x00\x00\x00\x20\xc0\x00\x0f\xe0\xe0\x00\x1f\xe0\x60\x00\x18\x40\x30\x00\x18\xc0\x30\x00\x18\xc0\x30\x00\x18\xc0\x30\x00\x18\xe0\x70\x00\x18\x70\xe0\x00\x18\x7f\xc0\x00\x00\x1f\x80\x00'\ +b'\x00\x00\x00\x00\x00\xff\x00\x00\x07\xff\xc0\x00\x0f\x18\xe0\x00\x0c\x30\x70\x00\x18\x60\x30\x00\x18\x60\x30\x00\x18\x60\x30\x00\x18\x60\x70\x00\x0e\x30\xe0\x00\x0e\x3f\xe0\x00\x02\x0f\x80\x00'\ +b'\x00\x00\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x18\x00\x30\x00\x18\x03\xf0\x00\x18\x0f\xc0\x00\x18\x3c\x00\x00\x18\xf0\x00\x00\x1b\x80\x00\x00\x1f\x00\x00\x00\x1c\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x07\x80\x00\x07\x8f\xc0\x00\x0f\xdc\xe0\x00\x0c\x78\x70\x00\x18\x30\x30\x00\x18\x30\x30\x00\x18\x30\x30\x00\x1c\x78\x30\x00\x0f\xf8\x60\x00\x07\xcf\xe0\x00\x00\x07\x80\x00'\ +b'\x00\x00\x00\x00\x03\xe0\x80\x00\x07\xf0\xe0\x00\x0e\x38\xe0\x00\x1c\x1c\x70\x00\x18\x0c\x30\x00\x18\x0c\x30\x00\x18\x0c\x30\x00\x1c\x18\x70\x00\x0e\x38\xe0\x00\x07\xff\xc0\x00\x03\xff\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x01\xc0\x70\x00\x01\xc0\x70\x00\x01\xc0\x70\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x01\xc0\x71\x00\x01\xc0\x7f\x00\x01\xc0\x78\x00'\ +b'\x00\x00\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x0f\x00\x00\x00\x0d\x00\x00\x00\x19\x80\x00\x00\x19\x80\x00\x00\x10\xc0\x00\x00\x30\xc0\x00\x00\x30\x60\x00\x00\x60\x60\x00\x00\x60\x20\x00\x00\x40\x30\x00'\ +b'\x00\x00\x00\x00\x00\x19\x80\x00\x00\x19\x80\x00\x00\x19\x80\x00\x00\x19\x80\x00\x00\x19\x80\x00\x00\x19\x80\x00\x00\x19\x80\x00\x00\x19\x80\x00\x00\x19\x80\x00\x00\x19\x80\x00\x00\x19\x80\x00\x00\x19\x80\x00'\ +b'\x00\x00\x00\x00\x00\x40\x30\x00\x00\x60\x20\x00\x00\x60\x60\x00\x00\x30\x60\x00\x00\x30\xc0\x00\x00\x18\xc0\x00\x00\x18\x80\x00\x00\x19\x80\x00\x00\x0d\x00\x00\x00\x0f\x00\x00\x00\x07\x00\x00\x00\x06\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x1e\x00\x00\x00\x18\x00\x00\x00\x30\x00\x00\x00\x30\x0e\x70\x00\x30\x1e\x70\x00\x30\x38\x00\x00\x38\x60\x00\x00\x1f\xe0\x00\x00\x0f\x80\x00\x00'\ +b'\x00\x00\x00\x00\x00\x1f\x80\x00\x00\xff\xe0\x00\x01\xe0\xf0\x00\x07\x80\x38\x00\x06\x00\x18\x00\x0c\x0f\x8c\x00\x18\x3f\xcc\x00\x18\x78\xe6\x00\x30\xe0\x66\x00\x30\xc0\x66\x00\x30\x80\x66\x00\x31\x80\x46\x00\x30\x81\x86\x00\x30\xef\xe6\x00\x38\x7f\xe4\x00\x18\xf8\x64\x00\x1c\xc0\x60\x00\x0c\x00\x60\x00\x0e\x00\xc0\x00\x07\x83\xc0\x00\x03\xff\x80\x00\x00\xfe\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x70\x00\x00\x03\xf0\x00\x00\x1f\xc0\x00\x00\xfe\x00\x00\x07\xf6\x00\x00\x3f\x86\x00\x00\x3c\x06\x00\x00\x3c\x06\x00\x00\x3f\x86\x00\x00\x07\xf6\x00\x00\x00\xfe\x00\x00\x00\x1f\xc0\x00\x00\x03\xf0\x00\x00\x00\x70\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x30\x30\x00\x38\x70\x30\x00\x1f\xd8\x60\x00\x0f\x8f\xe0\x00\x00\x07\xc0\x00'\ +b'\x00\x00\x00\x00\x00\xfc\x00\x00\x07\xff\x80\x00\x0f\x83\xc0\x00\x1c\x00\xe0\x00\x18\x00\x60\x00\x38\x00\x70\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x18\x00\x60\x00\x1c\x00\xe0\x00\x0e\x03\xc0\x00\x06\x03\x80\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x38\x00\x70\x00\x1c\x00\xe0\x00\x0f\x03\xc0\x00\x07\xff\x80\x00\x01\xfe\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x30\x30\x00\x00\x00\x30\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x00\x00\x00'\ +b'\x00\x00\x00\x00\x01\xfc\x00\x00\x07\xff\x00\x00\x0f\x07\xc0\x00\x1c\x01\xe0\x00\x18\x00\x60\x00\x18\x00\x70\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x30\x60\x00\x18\x30\xe0\x00\x1c\x31\xc0\x00\x0e\x3f\xe0\x00\x06\x3f\xf0\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00'\ +b'\x00\x00\x00\x00\x00\x03\xc0\x00\x00\x03\xe0\x00\x00\x00\x70\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x70\x00\x3f\xff\xe0\x00\x3f\xff\xc0\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x00\x18\x00\x00\x00\x30\x00\x00\x00\x60\x00\x00\x00\xe0\x00\x00\x01\xf8\x00\x00\x03\x9c\x00\x00\x06\x0f\x00\x00\x1c\x03\x80\x00\x38\x01\xe0\x00\x30\x00\xf0\x00\x20\x00\x30\x00\x00\x00\x10\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x3c\x00\x00\x00\x1f\x80\x00\x00\x03\xf0\x00\x00\x00\x7e\x00\x00\x00\x0f\xc0\x00\x00\x00\xf0\x00\x00\x00\xf0\x00\x00\x07\xe0\x00\x00\x3f\x00\x00\x01\xf8\x00\x00\x0f\xc0\x00\x00\x3e\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x3c\x00\x00\x00\x0f\x00\x00\x00\x07\x80\x00\x00\x01\xe0\x00\x00\x00\x78\x00\x00\x00\x1e\x00\x00\x00\x0f\x00\x00\x00\x03\xc0\x00\x00\x00\xf0\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00'\ +b'\x00\x00\x00\x00\x00\xfc\x00\x00\x03\xff\x00\x00\x0f\x87\xc0\x00\x1e\x00\xc0\x00\x18\x00\x60\x00\x18\x00\x60\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x38\x00\x70\x00\x18\x00\x60\x00\x1c\x00\xe0\x00\x0f\x03\xc0\x00\x07\xff\x80\x00\x01\xfe\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x38\x70\x00\x00\x1f\xe0\x00\x00\x0f\xc0\x00\x00'\ +b'\x00\x00\x00\x00\x00\xfc\x00\x00\x03\xff\x00\x00\x0f\x87\xc0\x00\x0e\x00\xe0\x00\x18\x00\x60\x00\x18\x00\x60\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x01\xb0\x00\x38\x01\xf0\x00\x18\x00\xe0\x00\x1c\x00\xe0\x00\x0f\x03\xf0\x00\x07\xff\xb8\x00\x01\xfe\x18\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x30\x30\x00\x00\x38\x78\x00\x00\x1f\xdf\xf0\x00\x0f\x8f\xf0\x00\x00\x00\x30\x00'\ +b'\x00\x00\x00\x00\x00\x03\x00\x00\x07\xc3\xc0\x00\x0f\xe0\xe0\x00\x1c\xe0\x60\x00\x38\x70\x70\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x30\x30\x00\x30\x38\x30\x00\x30\x18\x30\x00\x38\x18\x30\x00\x18\x1c\x60\x00\x1e\x0f\xe0\x00\x0e\x07\x80\x00'\ +b'\x00\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\x80\x00\x3f\xff\xc0\x00\x00\x00\xe0\x00\x00\x00\x60\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x70\x00\x00\x00\xe0\x00\x3f\xff\xc0\x00\x3f\xff\x80\x00'\ +b'\x00\x00\x00\x00\x38\x00\x00\x00\x3f\x00\x00\x00\x0f\xe0\x00\x00\x01\xfc\x00\x00\x00\x3f\x80\x00\x00\x07\xf0\x00\x00\x00\xf0\x00\x00\x01\xf0\x00\x00\x0f\xe0\x00\x00\x7f\x00\x00\x03\xf8\x00\x00\x1f\xc0\x00\x00\x3e\x00\x00\x00\x30\x00\x00\x00'\ +b'\x20\x00\x00\x00\x3e\x00\x00\x00\x3f\xe0\x00\x00\x03\xfe\x00\x00\x00\x3f\xe0\x00\x00\x03\xf0\x00\x00\x01\xf0\x00\x00\x1f\xe0\x00\x00\xfe\x00\x00\x0f\xf0\x00\x00\x3f\x00\x00\x00\x3e\x00\x00\x00\x1f\xc0\x00\x00\x03\xfc\x00\x00\x00\x3f\x80\x00\x00\x07\xf0\x00\x00\x00\xf0\x00\x00\x0f\xf0\x00\x01\xff\x80\x00\x3f\xf8\x00\x00\x3f\x80\x00\x00\x38\x00\x00\x00'\ +b'\x00\x00\x00\x00\x20\x00\x30\x00\x38\x00\x70\x00\x3c\x01\xe0\x00\x0f\x03\xc0\x00\x07\x8f\x00\x00\x01\xfe\x00\x00\x00\xf8\x00\x00\x00\xf8\x00\x00\x01\xde\x00\x00\x07\x87\x80\x00\x1e\x03\xc0\x00\x3c\x00\xf0\x00\x30\x00\x70\x00\x20\x00\x10\x00'\ +b'\x00\x00\x00\x00\x30\x00\x00\x00\x3c\x00\x00\x00\x1e\x00\x00\x00\x07\x80\x00\x00\x03\xc0\x00\x00\x00\xf0\x00\x00\x00\x3f\xf0\x00\x00\x3f\xf0\x00\x00\xf8\x00\x00\x01\xe0\x00\x00\x07\x80\x00\x00\x1f\x00\x00\x00\x3c\x00\x00\x00\x30\x00\x00\x00\x20\x00\x00\x00'\ +b'\x00\x00\x00\x00\x30\x00\x70\x00\x30\x00\xf0\x00\x30\x03\xf0\x00\x30\x07\xb0\x00\x30\x0e\x30\x00\x30\x3c\x30\x00\x30\x78\x30\x00\x30\xe0\x30\x00\x33\xc0\x30\x00\x37\x80\x30\x00\x3e\x00\x30\x00\x3c\x00\x30\x00\x38\x00\x30\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xff\x80\x3f\xff\xff\x80\x30\x00\x01\x80\x30\x00\x01\x80'\ +b'\x30\x00\x00\x00\x1e\x00\x00\x00\x03\xc0\x00\x00\x00\x78\x00\x00\x00\x0f\x00\x00\x00\x01\xe0\x00\x00\x00\x30\x00'\ +b'\x00\x00\x00\x00\x30\x00\x01\x80\x30\x00\x01\x80\x3f\xff\xff\x80\x3f\xff\xff\x80'\ +b'\x00\x00\x00\x00\x00\x10\x00\x00\x00\x70\x00\x00\x03\xc0\x00\x00\x0f\x00\x00\x00\x18\x00\x00\x00\x1e\x00\x00\x00\x07\xc0\x00\x00\x00\xf0\x00\x00\x00\x30\x00\x00'\ +b'\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00'\ +b'\x00\x00\x00\x00\x20\x00\x00\x00\x20\x00\x00\x00\x30\x00\x00\x00\x18\x00\x00\x00\x04\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x63\xc0\x00\x00\xe3\xe0\x00\x01\xc7\x30\x00\x01\x86\x30\x00\x01\x86\x30\x00\x01\x84\x30\x00\x01\x84\x20\x00\x01\xcc\x60\x00\x00\xff\xe0\x00\x00\x7f\xf0\x00\x00\x00\x30\x00'\ +b'\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x00\x60\xe0\x00\x00\xc0\x60\x00\x01\x80\x30\x00\x01\x80\x30\x00\x01\x80\x30\x00\x01\x80\x30\x00\x01\xc0\x70\x00\x00\xe0\xe0\x00\x00\x7f\xc0\x00\x00\x3f\x80\x00'\ +b'\x00\x00\x00\x00\x00\x3f\x80\x00\x00\x7f\xc0\x00\x00\xe0\xe0\x00\x01\xc0\x70\x00\x01\x80\x30\x00\x01\x80\x30\x00\x01\x80\x30\x00\x01\xc0\x70\x00\x00\xe1\xe0\x00\x00\x61\xc0\x00'\ +b'\x00\x00\x00\x00\x00\x3f\x80\x00\x00\x7f\xc0\x00\x00\xf1\xe0\x00\x01\xc0\x70\x00\x01\x80\x30\x00\x01\x80\x30\x00\x01\x80\x30\x00\x00\xc0\x60\x00\x00\xe0\xc0\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00'\ +b'\x00\x00\x00\x00\x00\x1f\x80\x00\x00\x7f\xc0\x00\x00\xec\xe0\x00\x01\xcc\x70\x00\x01\x8c\x30\x00\x01\x8c\x30\x00\x01\x8c\x30\x00\x01\x8c\x30\x00\x00\xec\x60\x00\x00\xfc\xe0\x00\x00\x3c\x80\x00'\ +b'\x00\x00\x00\x00\x01\x80\x00\x00\x1f\xff\xf0\x00\x3f\xff\xf0\x00\x31\x80\x00\x00\x31\x80\x00\x00'\ +b'\x00\x00\x00\x00\x00\x3f\x86\x00\x00\x7f\xc7\x00\x00\xe0\xe3\x80\x01\xc0\x71\x80\x01\x80\x31\x80\x01\x80\x31\x80\x01\x80\x31\x80\x00\xc0\x61\x80\x00\xe0\xc3\x00\x01\xff\xff\x00\x01\xff\xfc\x00'\ +b'\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x00\xe0\x00\x00\x00\x80\x00\x00\x01\x80\x00\x00\x01\x80\x00\x00\x01\x80\x00\x00\x01\xc0\x00\x00\x00\xff\xf0\x00\x00\x7f\xf0\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x39\xff\xf0\x00\x39\xff\xf0\x00'\ +b'\x00\x00\x01\x80\x00\x00\x01\x80\x39\xff\xff\x80\x39\xff\xff\x00'\ +b'\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00\x00\x0c\x00\x00\x00\x18\x00\x00\x00\x3c\x00\x00\x00\x7f\x00\x00\x00\xc7\x80\x00\x01\x81\xe0\x00\x01\x00\xf0\x00\x00\x00\x30\x00'\ +b'\x00\x00\x00\x00\x3f\xff\xf0\x00\x3f\xff\xf0\x00'\ +b'\x00\x00\x00\x00\x01\xff\xf0\x00\x01\xff\xf0\x00\x00\xe0\x00\x00\x00\x80\x00\x00\x01\x80\x00\x00\x01\x80\x00\x00\x01\x80\x00\x00\x01\xc0\x00\x00\x00\xff\xf0\x00\x00\xff\xf0\x00\x00\xe0\x00\x00\x01\x80\x00\x00\x01\x80\x00\x00\x01\x80\x00\x00\x01\xc0\x00\x00\x01\xff\xf0\x00\x00\xff\xf0\x00'\ +b'\x00\x00\x00\x00\x01\xff\xf0\x00\x01\xff\xf0\x00\x00\x60\x00\x00\x00\xc0\x00\x00\x01\x80\x00\x00\x01\x80\x00\x00\x01\x80\x00\x00\x01\xc0\x00\x00\x00\xff\xf0\x00\x00\x7f\xf0\x00'\ +b'\x00\x00\x00\x00\x00\x3f\x80\x00\x00\x7f\xc0\x00\x00\xf0\xe0\x00\x01\xc0\x70\x00\x01\x80\x30\x00\x01\x80\x30\x00\x01\x80\x30\x00\x01\xc0\x70\x00\x00\xe0\xe0\x00\x00\xff\xe0\x00\x00\x3f\x80\x00'\ +b'\x00\x00\x00\x00\x01\xff\xff\x00\x01\xff\xff\x00\x00\x71\xc0\x00\x00\xc0\x60\x00\x01\x80\x30\x00\x01\x80\x30\x00\x01\x80\x30\x00\x01\x80\x30\x00\x01\xc0\x70\x00\x00\xe0\xe0\x00\x00\x7f\xc0\x00\x00\x3f\x80\x00'\ +b'\x00\x00\x00\x00\x00\x1f\x80\x00\x00\x7f\xc0\x00\x00\xf1\xe0\x00\x01\xc0\x70\x00\x01\x80\x30\x00\x01\x80\x30\x00\x01\x80\x30\x00\x00\xc0\x60\x00\x00\xe0\xe0\x00\x01\xff\xff\x00\x01\xff\xff\x00'\ +b'\x00\x00\x00\x00\x01\xff\xf0\x00\x01\xff\xf0\x00\x00\x60\x00\x00\x00\xc0\x00\x00\x01\x80\x00\x00\x01\x80\x00\x00'\ +b'\x00\x00\x00\x00\x00\x78\xc0\x00\x00\xfc\xe0\x00\x01\xcc\x70\x00\x01\x8c\x30\x00\x01\x86\x30\x00\x01\x86\x30\x00\x01\xc6\x30\x00\x00\xe7\x70\x00\x00\x63\xe0\x00\x00\x03\xc0\x00'\ +b'\x00\x00\x00\x00\x01\x80\x00\x00\x0f\xff\xe0\x00\x0f\xff\xf0\x00\x01\x80\x30\x00\x01\x80\x30\x00'\ +b'\x00\x00\x00\x00\x01\xff\xc0\x00\x01\xff\xe0\x00\x00\x00\x70\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x20\x00\x00\x00\xc0\x00\x01\xff\xf0\x00\x01\xff\xf0\x00'\ +b'\x01\x00\x00\x00\x01\xe0\x00\x00\x01\xfc\x00\x00\x00\x3f\x80\x00\x00\x07\xf0\x00\x00\x00\xf0\x00\x00\x00\xf0\x00\x00\x07\xc0\x00\x00\x3f\x00\x00\x01\xf8\x00\x00\x01\xc0\x00\x00'\ +b'\x01\x00\x00\x00\x01\xf0\x00\x00\x00\xfe\x00\x00\x00\x0f\xe0\x00\x00\x00\xf0\x00\x00\x01\xf0\x00\x00\x1f\xc0\x00\x01\xfc\x00\x00\x01\xc0\x00\x00\x01\xfc\x00\x00\x00\x3f\xc0\x00\x00\x03\xf0\x00\x00\x00\x70\x00\x00\x07\xf0\x00\x00\xff\x00\x00\x01\xf8\x00\x00\x01\x80\x00\x00'\ +b'\x00\x00\x00\x00\x01\x80\x30\x00\x01\xc0\x70\x00\x00\xf1\xc0\x00\x00\x3b\x80\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x73\xc0\x00\x01\xe0\xe0\x00\x01\x80\x70\x00\x01\x00\x10\x00'\ +b'\x01\x00\x00\x00\x01\xe0\x01\x80\x01\xfc\x01\x80\x00\x3f\x83\x80\x00\x07\xff\x00\x00\x00\x7e\x00\x00\x01\xf0\x00\x00\x0f\xc0\x00\x00\x7e\x00\x00\x01\xf0\x00\x00\x01\x80\x00\x00'\ +b'\x00\x00\x00\x00\x01\x80\x70\x00\x01\x80\xf0\x00\x01\x81\xf0\x00\x01\x87\xb0\x00\x01\x8e\x30\x00\x01\x9c\x30\x00\x01\xb8\x30\x00\x01\xe0\x30\x00\x01\xc0\x30\x00\x01\x80\x30\x00'\ +b'\x00\x00\x00\x00\x00\x04\x00\x00\x00\x0e\x00\x00\x1f\xfb\xff\x00\x3f\xf1\xff\x80\x30\x00\x01\x80'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xff\x80'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x01\x80\x3f\xf1\xff\x80\x1f\xfb\xff\x00\x00\x0e\x00\x00\x00\x04\x00\x00'\ +b'\x00\x00\x00\x00\x00\x30\x00\x00\x00\x20\x00\x00\x00\x60\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x18\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x18\x00\x00'\ +b'\x00\x00\x00\x00\xff\xff\xfe\x00\xff\xff\xfe\x00\xc0\x00\x06\x00\xc7\x00\x06\x00\xcf\x00\x06\x00\xcc\x00\x06\x00\xd8\x00\x06\x00\xd8\x07\x3e\x00\xd8\x0f\x3e\x00\xd8\x1c\x06\x00\xd8\x38\x06\x00\xcc\x70\x06\x00\xcf\xe0\x06\x00\xc7\xc0\x06\x00\xc0\x00\x06\x00\xff\xff\xfe\x00\xff\xff\xfe\x00'\ + +_freesans23x25_index = b'\x00\x00\x30\x00\x44\x00\x60\x00\x94\x00\xc4\x00\x18\x01\x54\x01'\ +b'\x60\x01\x7c\x01\x94\x01\xb4\x01\xe4\x01\xf8\x01\x14\x02\x28\x02'\ +b'\x44\x02\x74\x02\x94\x02\xc4\x02\xf4\x02\x24\x03\x54\x03\x84\x03'\ +b'\xb0\x03\xe0\x03\x10\x04\x24\x04\x38\x04\x6c\x04\xa0\x04\xd4\x04'\ +b'\x04\x05\x60\x05\x9c\x05\xd8\x05\x18\x06\x58\x06\x90\x06\xc4\x06'\ +b'\x08\x07\x44\x07\x54\x07\x7c\x07\xbc\x07\xec\x07\x34\x08\x70\x08'\ +b'\xb8\x08\xf0\x08\x38\x09\x78\x09\xb4\x09\xe8\x09\x24\x0a\x60\x0a'\ +b'\xb8\x0a\xf4\x0a\x34\x0b\x6c\x0b\x84\x0b\xa0\x0b\xb4\x0b\xdc\x0b'\ +b'\x14\x0c\x2c\x0c\x5c\x0c\x90\x0c\xbc\x0c\xec\x0c\x1c\x0d\x34\x0d'\ +b'\x64\x0d\x90\x0d\xa0\x0d\xb0\x0d\xdc\x0d\xe8\x0d\x30\x0e\x5c\x0e'\ +b'\x8c\x0e\xc0\x0e\xf0\x0e\x0c\x0f\x38\x0f\x50\x0f\x7c\x0f\xa8\x0f'\ +b'\xec\x0f\x18\x10\x44\x10\x70\x10\x88\x10\x94\x10\xb0\x10\xdc\x10'\ +b'\x24\x11\x24\x11' + +freesans23x25 = pyfont.PyFont(_freesans23x25, _freesans23x25_index, 25, 23, 96) fonts = {"freesans23x25":freesans23x25, } diff --git a/tft_fonts/pyfont.py b/tft_fonts/pyfont.py index decfaf7..81740c0 100644 --- a/tft_fonts/pyfont.py +++ b/tft_fonts/pyfont.py @@ -45,7 +45,7 @@ class PyFont(object): mv = self.mv for bit_vert in range(bv): # for each vertical line bytenum, bitnum = divmod(bit_vert, 8) - bit = 1 << bitnum + bit = 1 << (7 - bitnum) # bits are reversed 1 << bitnum for bit_horiz in range(bh): # horizontal line fontbyte = self.mv[self.bytes_vert * bit_horiz + bytenum] print('*' if fontbyte & bit else ' ', end = '')