#!/usr/bin/env python

# compressor.py
from subprocess import Popen, PIPE

def compress(value):
    """Compresses a string with the xz binary"""

    process = Popen(["xz", "--compress", "--force"], stdin=PIPE, stdout=PIPE)
    return process.communicate(value)[0]

def decompress(value):
    """Decompresses a string with the xz binary"""

    process = Popen(["xz", "--decompress", "--stdout", "--force"],
                    stdin=PIPE, stdout=PIPE)
    return process.communicate(value)[0]

def compress_file(path):
    """Compress the file at 'path' with the xz binary"""

    process = Popen(["xz", "--compress", "--force", "--stdout", path], stdout=PIPE)
    return process.communicate()[0]

# compressor.py

from optparse import OptionParser
from sys import argv
import base64
import cPickle
from cStringIO import StringIO
from os.path import basename

def load():
    ppds_compressed = base64.b64decode(ppds_compressed_b64)
    ppds_decompressed = decompress(ppds_compressed)
    ppds = cPickle.loads(ppds_decompressed)
    return ppds

def ls():
    binary_name = basename(argv[0])
    ppds = load()
    for key, value in ppds.iteritems():
        if key == 'ARCHIVE': continue
        for ppd in value[2]:
            print ppd.replace('"', '"' + binary_name + ':', 1)

def cat(ppd):
    # Ignore driver's name, take only PPD's
    ppd = ppd.split(":")[-1]
    # Remove also the index
    ppd = "0/" + ppd[ppd.find("/")+1:]

    ppds = load()
    ppds['ARCHIVE'] = StringIO(decompress(ppds['ARCHIVE']))

    if ppds.has_key(ppd):
        start = ppds[ppd][0]
        length = ppds[ppd][1]
        ppds['ARCHIVE'].seek(start)
        return ppds['ARCHIVE'].read(length)

def main():
    usage = "usage: %prog list\n" \
            "       %prog cat URI"
    version = "%prog 0.4.9\n" \
              "Copyright (c) 2010 Vitor Baptista.\n" \
              "This is free software; see the source for copying conditions.\n" \
              "There is NO warranty; not even for MERCHANTABILITY or\n" \
              "FITNESS FOR A PARTICULAR PURPOSE."
    parser = OptionParser(usage=usage,
                          version=version)
    (options, args) = parser.parse_args()

    if len(args) == 0 or len(args) > 2:
        parser.error("incorrect number of arguments")

    if args[0].lower() == 'list':
        ls()
    elif args[0].lower() == 'cat':
        if not len(args) == 2:
            parser.error("incorrect number of arguments")
        ppd = cat(args[1])
        if not ppd:
            parser.error("Printer '%s' does not have default driver!" % args[1])
        print ppd
    else:
        parser.error("argument " + args[0] + " invalid")

# PPDs Archive
ppds_compressed_b64 = "/Td6WFoAAATm1rRGAgAhARYAAAB0L+Wj4PrCVWFdABQZCgMPj8dYIupuhXtLeu6Ss6AXUXu8/A+QbCktlhJoQpVzWF4uf75Z6fLTnZK8w2qp38t+/nDyMWqBtq9DpSjTBSj8Ck267AZ6K45aNg8XSiVXQLIydQD8VYDQ8BE7P+GwFEqACba46Zo3olK/y0Wert1p1gzznFbFQBT03Q9Q+EMRb/ZvWV5A5Vj/eJFYiwCxLPfwz/9eRsk3HWJhhHlPlDQj0kb1RPQ8Z/f0oV8k6RJtOXxr3NIha25VU+Si8V1z2cgMOSmBw7qXSGSXRKYQNBDghgRi178veBuIFLF0hYPiSKk6MxZafZxXTDbKVN/F3DnVWlaTsiTOSW8ifD3753clXk6IZ6uE0aT7+XpDfCFzvOeeBvGSgdGg6c/22zqMUaehCWDnzhRG4+AHEhq17ttxNKpvf4ULIEqpUPM35S7wlwjdyy3qjmvTQkK/xAPzyVN/sbW655lrtrcL47e8b3QeloxWoKthjom0ixlWTfd9VOhYhXlVmwm6xWbxIkY0gAQwmWWdQw3FpR5pn8YJxCq+0RvYxqnb7nW+4bb8cP9DriVKnOGiO/0SEpCjr/79NH8G1OpDqzPlqRc6zNjY4XtHrhCNwJ2RfYBnYYWjdrThIOQP41EH1WgOUFoeNJaiiLbDeQFfpFlPndK5zCiZKfdgq9MRvYL4PIgpV0h4y8Z/yQee5ssvhH1JRiBRzYfAQbjG5jnnjSiXQg4kvixT7gvifBfjVWrDoy0dB76rZ6/h+vbgtoAgXycPuohLys4hQMSiKOgcsP3otFMBSIayed/9cUToYHk86uEu2oFOnuFYAxLQy1PHc58P3/QE2Hzv62ZNlY4WzH4m8HIviCe4qM1lM+NtFzPPMmgab3Wjcl30V4OrMaKh1HYwAjvs7Hrdl11KYtdOE8XPzHAjWauQSjJ9ibj0gyz99TjlqURfMKu+q2Qx9Q/NXKKIhuUTaO0+c8nnYQ3rocXLuYW+/SYD1QTur2VF07aJIDq8egIAEMNQOnaUGjghL1Jn7X2nIB1SwwMbUSqpGgTQa+YL7CctwjQ4FA1hjhdAegttTh5hJcm27lgiPkRh/5uF2wIHsKDudgJ61xE5Sj9eJdP1Uk5De3iVs0v9dYLeWKExXctvcSk7v3fsqOSQHjrbvhqDgd19uHCXSSI/PQsHaXB8Tbdsfj8ocL4QlktCn1yel4xkCqmym3NpgjfQEGJ+tloxrBcTOHN4m0meR9LG0UzFQpsoc70qUpKdMFrcanQ7j4ZOCA2jlqAlGZoozOL7eqtVeyrsaoc/t3NOkNMWBgu3bLPoHHV24Be+tzPbW59LM4ZAH8MQZLG1LAVg98S0jBmw43c0aLsdqzGBgZrlZcmldYVUWKna78XnzwdZVt9Oa8E22aUnOds9lPe13m0HQ/iSxBd9mcKzbVd6ng4fVlcQnjZpfKK0JfPhmWPHD8ou+k5XEvBQCUR+A4FPCRpnRrRrKv1kxWH4lz0pXrEPazV3vYes0OlUBipOdvYe0qbTVR1Fp2hccgjO1zFPL8aIxo8K7H+Fe3zI9ZXj4OahHZ9nFaDMIsI3xziQiPSBrXFCFchmfAt8z6aaKHNdvXYT9cIDWKKiuaowVHwn+t/n+wzDsGcGcZooAXwd1ULwM1Rz41HHEnXQ4qziRTyAtpllZot6/6Kp0cxLGFe/BDZnX4CZkwpo/lqBEwANfHm70IZ180LgrgkwwdsAwoslREbsQqLYqNm5hC27ow5O/GdrmkemayfaOc8cXyU0iCaotLffco+Gruh1iONqInbcPhj3FTIS8wsg57jdhBcQOX8/kwN/0DZOzrd2QXArFuaaUncl5R7WTemZAiyeuHuf2tu6JU2qB4EJg6yv2Hn3hcHuq7w6hPyTZThjamxAXOggHK/FjrEEjGueCHc2njw/NFjSWb68hXbvnZKVlBTBic+R56nIvbUCMT16/fVFfCel8uEfONKVCgzqTR2w96H15SuLo3DFbyu+o/7m6JRBVGGe47j4WTLxYd9UsIsBN+UFgPeaHCch2wYTb/5zOR+kgU0VJcMcRS1CDQq1XjehSRha4P/cJdn/3WL88kXAahGW5DXj+gCkah+laphz+6js4hgyWczvyXbdaIV5xx1GEG7mGecNJt7+x3d92nDkEFPCJcW/hRpkW/jUaFxcyYwSB2aqKPXgKybMQEXvfgWsOQt5JeUUG5M7ufvsAZAthzy+QgxN0eNxHpePg48MRFKdoP7QvKmg8jaPIXaKFQe4YgoP63Qfxo4VkezuPMjho2Uk3UPy9RkxBNYoH47HZfDFWgPN4iHtYuOvwDbxhDKdfMdFvAFFru52ul7F1D4vvyKRT7OQVwVgEEcSO5xntWjUP7+QbQEZMN7IkiD0tSgKb/3xw7ktGS6n5f0q6MwaNC2iNktm8xqzAtWr31XlCs6sAnL7VEJV1xwHZD10x79pOOAhP+ITXaUFT+5nvRED6ZzgM1HrJKOOX/QxLMKz1sJXUAPVNSKcF8ALe+ED74MbgNF0mgspxEtzHQNZo8/GWL3G71lXhAnE5xJVTrqPSvVD4+YkZjiCCzcytOdRuPHa1CRq3nWm0Mj7T928i357KDcAE5hzBMIAxAmlx31eoiKkKvllTif3XwuvaLarRGMypMUk+g7eHDVObGShhDGSpIiRsF3wTd+N2MlF9JsQY76k3Yuv5HBkeQgxiUa2Xcwl5NrDQIogHM7ck/T3184TiT9aAZPVzJhKR6a61VThDPT07GPleuqVJbFmZwySN7nmeprWvx20mEFu0hnPIogKAEYovJ0NgLY5vZ+96BfLNvfhzNXqGEoaz0k+7gz+AaatUqg/UzjsJdmdKd5TE/6aamKivSswfLWDMbPZUCFaQ7QrcNHCR/Yc2D/lmmYylpZQjV7IGWcasNqcOegyyNpfPxzYC2Ve+89figpflQ5HgVlNsxMECEOIjD1kH14/panMUiPkCsUibaEF8p9PzwHGJ/d+kH/9yfEz/xEEEqmZrsK9XNAu+1B3DB9p9/mLXuU4lcv0mFM6Py/dcz6FrEdEgqSyL9yNKsu87kseKlcTCqdg1DjBM8Q5DbvkSIm6I8ia+VnFB7+aWBvJrXrfGPtRHLZZaHSdHVqTsAorVShWUeYzK0z8Cs0Y0pNN2//Btsd8fPkhpQ5vLx1QvwyWTwJsHFPo3EutDiYUCI8EiAcjuJHpQz5Dim/aqUGn3Gcii9pDOjwc56OnKsdhVXZlxjfmtYaL2EYjyeLWqydzFqqHadbZJuQjucVIOOJnuyxqz8I4PT+11n0Hu+J2z2xeiy2xLT9UOZ92y9639DAfrZDeBoeiov8geevq9ADibI7UtDtAetuXZanJQogoLw8KgVwMNXsln5C/LvP7XgLhUMuyT8dVZjLbsrP5mKSNlUiSKfvv4w9yYrTbe9U7YKs9Ie4Zi5OSMB7fVlCloN760E+Ib9Y07kfgBl8eI+k+2ZeYD39TmIti1oBp3qe9RSk36FOnlekvd6L94+ZRpqooxE8fTVcOWa++lWYj9I3RHBqcl6z0h+SkUr2qnS3fhWqsVvoLeYdokW/BP5EcepIxRIh+bIRVJDqVA9FNEOTacUizF8W9aOAhLaNVv9eWXa352vkeOJ3laBLImEwQqjtJOx789kAF8ExqRQJO0GNx8lM032HQxw6HVwYFrupyEsWYXUIgcEvLJJiRnONiBpXO0ColE8Fdpd3lTOBWQV+fd6avi33qrK83QBdNvC1MppQFiKQM2jgkM3Znbh+QizjU69nTHJFsOo73XkNZYUlGPHya5OOsQPCDNpkFiYsSe6PufBqWXT0CcF1QT4gPbMIGx/BCPqhvlEXlB4tQvc7WKSdqyOk/c9lWTF8x/aA69mP5JR31lLeEmgp+I0wgj99TJOog6Viuyr9OpI0Ld1xGhm9pw42t3+0E4RMs17dUYIdtGQPw9ww9EDPeEEFaHPAHtFdwZetj4UlGkLor8OB5TycpjKtZ7m7rzZDplVBNGNateO0A1PNFIgciQ/pjCyotSPUg/2MvgWYX4waiCxaqQKfv3Ev9zuZlAPaS1D2puaqwMBh3fYkpoZ9Gq0GUSsQq44tUXJtNL7/VIPblISigtXClkQr6z8kaiqUS7PfUAusaDo5qPewtfgk7jOdz1uSxEmxg5uasYQ4eAFCR8qeoqVUexdcdHwwZCncQfbdEJtHR0Kx2Epe0jlviabwEQdFK02XASf00TjfLmST9QCk50av9HPEYxnUj3TBmqah9GJc7AXDZzfeY3eyPOeFpOIleklC1uesoX2D1piwrQWpPbdYT2KBi2Or7dCnA6K6unv9ITdyyEZAaFvr53zMrXnQnkjhn/PPzHBoLGjii8LgKqffiIrf9LoKdrBDeIDXvle4jF7dMwYpss2Xgi9QRNYmc0w9JeH3OuEQeOKiHIRfcOfAXPpe0GbCci+p7dQQ5mG/HLjSoaoUW8AZWXb10DFF4wYkzlGUKEmxLknJ6+e/UPOnkLcQJHXKW5PKt5LRuR1D/km2Bw89pIOHvntZo3UAFrRtcNiUsX2ZN3wXTP8tGXgvFGWyX67DvbYE43Vp9/uVgjZQ6bDTyleegfUmKsymZMp5OezFVFrTZ3DZpz3eVBJWUhG3WkjubRU2mYDnYYVQfmdWd+cEz9vq4EDrry+w2WhtojokxqLzyFemGR2+ZKJxUr4klegH0FS2mhM/yo6jEpLLwzaZC3sTt4DI4OCxK6D5QFnm0Fbmm2+5MI7JycTkKdKFh4X53brtCEBMMRu1lw5DT8dKmWTleKHFi7fUS1P6jhKMIfXS/JQYYp+rElHcamFDE2eWOOfUHOAdVUufzAlZcJ6/MaF/TLe5UK9ehVmjgRT5TbRsEaE5ZbQpu2qF1er2lj44cxaxJm+LdU9f76URDKQX+bTFtzwrsmFsgtbbqz51IZTygS+uPgF+V801BXwE8xRvC1cTIHkyGHERu1ezVc9sC7yjyrpWVJAiOOSvspKmSOL2uF7VLUXSEw7ekOptu4UwAa9QnWKk1eH2qlOtro+WtjVA6hMGfiDtuNytbQlN5o9xHXkjSTJ3cI4EqKuPPQTY/F0Onk4c+/JD3o1QEJlgeNuuuq/AqNCM6GBZEDPLfwRwQZT5XRYgNQFJ+Xx7NPcbMI6WF6FN27SX0HTwDDBn6JG0YeeYcjueDCklEyvXr/R57ZxJrQ/hHQ2zfzyJ3spvhhV96HoWOuWHT9tY6xKsWqzi4LhRqa3o7IIzR5QhyngNWM/UCYewtJcT5PoJdVNvGaEi6Qo8pHniC4x10KBqo7xULhjE2ptTmN8FZFXm+xBH9sImFhmF19cMN0fragoeI1OcrAQO+FtzehVDrh2IgLYNQqx5NuBugQFBWXLF2DlY/noHk0COQM9K4jivyZJiOE7xL1SxKir/ZzNPofvJH9vIkXTP4QHJg5MACR6TcKEQx/dRsVUmOoR4gHMOEAXyynMau0d1Ms5D/Hkgx0ctungmoSQ6jM4zLdGJjgiYVmPKtbOvdqYPGpAg24hzRTtRiV6psxMe4hUN+9+rIMiSI5U05NuJy902pwOhkhyhDw0GvIup/3tc0H1om+XvSTVNpEYZofrXk73VWdk+eVjn0pn4Z4hkMObxk3PeA2H7kfAfc7DfFUUCPHVuCkLm/DX6YKEQxgXLoPhL/T/Hmcs9kvyEdcNMkMEgmKiSp3qIkfTkckKXz+Yya8OXNmqrTPPMviWKS+GzyPN/MTLv7VLW575CrwgtVY5l7YQD4mH0qoc6un1JFB+j0BXc4jzQx6HbUA4GYkDahbYRTD2wQgVBldrR/FRrzRCGLmVXSn8UPPg9fWtsM5LmLCUk88WAB0S9DABCKH5JlniL6eJw0umkL+vN4/qMEte+bonnN/nBn/PWfhVPTwX1eDAOCznrs30WC4C3rYXQpDQeLOUbm7xCv98dbSKgaxvFgeftM+BV9/nywwodD97vbQiCr9Am02iTY9G6q7jaRbfWM+U9A70VpkQ1IetZ7KFZWhzDRGCDMN1ZJUgA2+kJxmRISo1T23x5ewlVAoGxWlX0k2XQaqM3P9NArNZiyRven6A3Ke7F3xA7KCdg2I4nvBerj+aaRViwXjoL4u6ZNZiD2bRJPzjCaOHpW7vI12upSlOK2PxmdJvlz+EZMqpSFPbDax0p4eHnxTtA7tQ7XfeMbcK2N7NQ8Sztuh3dw31tRNxQj83u6G9PmcHVgRqMzwn6g6fe79aLz7lo2VGQs6QnpxWbeb5ELHzKYgNb8qxUwfcmk3ZbBD5/t9IEn+oMkxs4t9gv34El1NwZYyTN4lfMktM1IWqrSUcQkHgSBBLlon9T9XdHSnqgUfubFrXlXrWyIORimrVDxsDIDeygDMgMfwc9+E6eV1noCooUQSjDY6FQUUXU9SfJfmQL5MWLE8Nl3DgvXuVUJUOHZAI3QvYipK6hu4ZcLusA6IWkC3y8loKiKFhM7RgAiwv7gBZC/4ofwDJiF35LPO7kcL2q/xECphxCSx4thFiDJgu2npmyFUe8+H78IgCap5zX2NOI295dvBvp4EQUy0m6N3Mo0ncFosJ5bOtC0pboKeEypSGp/Crn1OpH90VEvN8PiOjYsHfvtuxn3k2ueD9zZTXYKWCWqjS2Ykg3Vh1gIsq5gQX/wAezFN6H8choQE5sgCcjiCky/3/WRcuyb5KhJl6OTDZyC3dMYe98CeaVvd5TJuxKI3L81Pg41g/hQOHOCbt1j9fjSp7shbOBmUbmb7KN7ELMHCMVi6ctIsPPES/DuzBkXr8V4RQyweqg3BnYfVg/RIiva9HYI1SEndcfFXid5uPt7OS/ObRHoCXGFKfsK6mcIMeGCl/sSA35SahomruhzGFNOwjtBu+Gbd+pW4ZxcPg6e6Kki6Cbpc7AK2dJt+T78dqjKEyauUeuOU2z1a0YSsJpssyHB3jolSYE3kE9fk1OmeBA+MB+Jcyjn4tCxNWvhhkT1h/92PRFSr+tiXY8eEhtHRAAk76QVlajAOazaNDp+3P203DNbdE5yo/hDt9WGUog675zfO3ZZi+3nqb3zRg9WtDntQNVGJ+HZEZ8dH5y4t5W54FcJFHfCKk5IvraerJSZDaY3WfzqFTOsS+KXljB87k0rZc0gMhmuFZ8oLHUqvJKI1tXqIBICSRoigEAkrE02JPn2SFF/uEqFYY61wuj62AA8lF0gBH7z5VdhVkMLxL3c2Acc1J8cOW9rEYqN/ng70e8vc1Hdl+5JHeSYWl3N9T2JOwtEExtjvkJ92gc63STI42HMbitQy0go0b0tZzxqsTLsvvU6KHs0XG7iDZIHkDKR+DSQpeq/RTROXKZ+qeOJ15ppeJV1s+Fl5SnuOR1NPN13APLi2acoslbNYCdZFvFBLBuuRaIqT7DBySpaG8AXz8JA0HNaZEA1WRHPEj79H6/K9UcfVee2ghp20wgo580WxPXl/5xDybiLJDgbGZXhp8MCkcuJ3UPcXcC7SeTvBY0OBAMJ5LIn41kvf7cR3s/NHgsrsIjL4KwGw2wQGQ1Uh6iGsMwhblo50bILvk8mHPeJv/K8SIs+yV11ermQx4wOPAqu8ABQwDaHy2u2Yv/Ad5mJoxw/821FCxn8JwPzm8M3lDrGoiOoJW8s/8+oXVhdjGUlHd4Vv82iE4GGBlaNVRc1gfc9EtKP/hp/WN6pT/cfmdJDvx7EVdt2/XKGgIgSMH2S6A68C/2IDX6Ne7a2jxOeJZN7dp9MQWcWMdMpQC9M0TkNKC6iK7iLlbk+F0kq0/ygatFwNyHSi01ftDei5F3hfpwtEXVcouLcjdYj2itjnzy2K13ahUqQnD4r19lwPZYDbrOxj1Ay1sjSwupdtabJHIiPsy8J+EoC67WbjLXdvTEiCbROUDofPaqBXbb/bBwMEdU2PWd9r5RPgB0SQew7SQjYEOPr230Cnen66OT/jjA+tkB0bWTtEjTJYOBMHXt5wTt3XZEsR5f2AlLyv+h0Cebmzmcwd6ABxIlphy88t8Lu2QuHiAs09cxZ3bw1TSkPFVI1Rpn4/1mIwmURmPo1VxFNstR2DXRKWGbmFVQDFd6BmzxxanGxgndLo7RJDf8ESB6Zy8zszqC3RpwbJ7KKDQmDDyVa3K5djN7IaS58w0prK8zJvdnxLoySvur/0MmbVAGgKuEVNHBIsinV5qjjxBseP/adATz3xswVg+P4YL5aIlVrG1pvtZvJuJib+R5E5nyKC1xoiGO+4fK9PWCGn5bHJVJDPs42GlknPpYRSHqAxV/1eKn2YtNWAp0RXa+j7lK30sk78D893cCJ4wU6MS0FDWMA0NUkhsAAbBixbrtmHnOqspuZp3LmLu9S1SwXCSqiS6gvLTe3N9mCDWf5ta7F6thGLJj4HPuTC5XSKwZFCzI6rzdCPI7raqAgPDTbiXgRmMRR+i2IPpG8HrHCpPkoMqFuXaMhKEsReAjCwUAMTxbSx8wLDzR/DsiSO9FL517/wHGw7OkXT55PjAz1vpbZzKSKRFV/WVTNwTqCAHN+8eJrAgH9P39daRK1+wlTuXYVxdsSgr4XvNuFjw9alYeZhJ20uRGc3ZoGHjOvVAMlvoNFEYu+znQVuN1xtq7fU1Q4DgL5sP0wbqdwXI/qxnh4uykiJioUKnqUlGYG7zE3F2sroSERCraOBqBSKPCy3+cERp0aJxknbC35wU47XwUu3wCbshKy4XX0BN6zHJLOZL1OeY2lUuVzFpMdq79ZJx7gWxXtJGA+4RgExiXF3063UU5eOHMvy48TFcL5nNDL3fNDHwb3OQ1QnN2bMNgyPvKS4bksD0vrNoL9+nNFfmu30sgezI6OVmvIFwSLsh018L3GqMbLu3bahWLgnqAyyPPiAdD8UC3pfTOQ1E3Z1dmwm6A9KX+1NgXrYdOZWF2ftW/coc3xjl/wv+J33Gt8ySx6Zod+XzMzgjBtsp/lwkZZF32kHq5wNVoHXODbyV0wo5iRm+jlxxz1llCb6Lf8a6xcjsRqFIZa/MuTsO+G/otBz7eLTebsed1uiuCEiHqNZxX8ejYCpUKNAflv7iAg2IB9QcJB5NGZ0WcnnLH4Bf3wUiubcYZYqF5n25HY17AxqXYaDINE+Khl7BO8QvUUUJAHRCU4DIMPkMeApcWvq3MZDPgEfoHqs/b7e3YI4jxD+jQLoVZZBltzAZ/4+50gsO2RFj+AeqLJYnL7nkrzKr/7TjuXSKxMmRWO20HbRdcYjSDe90X1I7tQ4gOEqcZZBya7X02iUa+7cqln3V9yt/OxasuhXPknjTafSGq5XNaZ0K62a/+hMOwiJOo6+IlYSwLaApzXD9CoFWnBlkSRHg/6HHH+4o1VRt07AJffaYwkE5km9p23zS7G993XFt5xnoNEtVmZlRJqvW4beZgBbabmQndpsZPfF9ruuqglPAq3Pu59HK5Z4BUxwueWmIRuu6xXDbn4g0UAFAN+HDfLxGP201hbZhRLqUHpb2mfbf290YZp0kVU76xRFbwJprLddq3/uXNbROztYQss44TFd7kJdCkBJSvc2dGdWPphm20duSjt3YwBVLmuvd/7uOPc9282pH7MgA/JiLWt/W4ks+AAyqZ+RQrqCgKy3Isc4WTN2nO5w+EciVt6Z2kxaW7WQkSvBoIX4+NAhpur/wLCgvurKtNLtIQb4mfUYUxNwRbCd4G8OGNgVvZvJllm4KfbSl908NomjYXOFdIw+7EVzhNrddcRhShzTfCbi0o9Engt667do8QVzTB7vhklNkH7nSEuRKxSsgaPvtspggJyDqvKp/JsEDReA3XpzUoXAmCXXdoEFqd2h0CtPHu4EzWkf4fet4YoVXeOa2Y2AkfMAmeSQujd6xltl7WiVWRwoV0G3B0NvIRG2Di9hubCBMA9xkRJybSGmhmjBuwM9F8BVFxDG1Pll9K/2yQtYzPkfp53s/R9Eq046JtwNao0f5DcsU6Gr5SPs5DkkgZ2EYVUVMIQfZr9M9s/zvxWJ1yLQcZyivgsRtqBQ+9wwe1+r8yVAyQVl8Ud6efrT/+o2R7wXMu5gb/8Z90jxlCsrLYKqvI1ZoAfw92nUn5xi0DFbFl7l9VRoCy+RF/V3IhA5Agk1dyjkvCy/3+of42UuKdynz65upCclydRsTpcZewR5OjATWGQuoabS81MgF07ieU2wP1N9fFH9wUwj6L7PVgcOBKbNrTUQ6+P1vNm1aKGkLTUPeB5xOxa4j7MAqmD46d54GOqwk3k77sYIPUdBZfHSAF0pzZvwGk0WXuF0zsAoT8BBdeoBEdCvjaMiEqPMJzixJNitzcrQy7YGF0nECujzeruQ7DRU/6IVvaXvDTG9fce09flgo0P7VDci5dMh1pBsH6J0pLvp2txBR5f2QuJw2gPmAN2w9UYyqUg7gpGj4vK/ciMEWdzdtE+KRetQEotwKX09FynPS+KUHUzNuV4MyK5XVnbRe/tYJEqrSYddRkyqURVTUtHUN1u3eQVRi9iPHcM1MzKv7lratGo7RDurccCoRIXUe9RvJ+iJeeixXIWd1QmESndlj01FWLy/yFgB63f4Bn+CjJ2nst06oUYJkJQkRQJVdk/BK1v1f2z66kOGf0uWXDY7TqSoKCDcWwDKbVCutKx0CYeIsyQm6oGt/JARUCOEwfh94GZdImEF3UU6bCFdp1oxoT2RITFuAxrKNkYPzXMDGDYXICHl40s3br8wHXR9wCLm2r9rEH4UvkSuPcyJHNsEd5gw1niBpHeRWQzjZfwjk3U2I/8oIwTebAaU++qpNXoSJKEIgkMq/HE2bstB60hQUuvaRa7BQWXp/LTb6pmCdseLVvT1DwCIuiA1voxaJNMCRkyYMfNCbMULFlpGzmMM1pgJyvMuWcONCDjK26SeyOcNsV8M2DIyZibM+yA/Vj1UjbbCZjyj7Ff3h/n0XGU+py7XERXAKN0Sg4ag1lyv7gwxbo0XYx9/SMMDgnZpVqzxXNBMJSqVkL3reo+K3IUE8bepr9yJ8m94Wwp/8Kpri22QU4IRWNDSTe3OR684US0gUFUpyum2wxssOiEC8lBB7B+qg3eFQ5VZL7w59W6xM/zMQKaLdT/vKtW7lheZOFLBscMxmM95a5tKqGPolhhl75sIRZOljJOW7RgRr6o3i+gmQqp8SNwV+D7KUguKV2CePhWpn823PanAid+CJrDSBMO7KeXVKCtDTjsRjKuTn+8Y63EKlBa2fVAjDdF2K8js8aXW8UBIaXM24vgfaVD2X0C2m5c+EoMfzfqdJRpNrIABwsi0Lgg2DDmYUpkBWBmtcTkNGbHF0cvoJZ9ZRzV6IWvAM0S7xUBwSoXleLZDIaL+/6tp2gtun7lbUIZkJgiXdNe9M/9Nu3UznCBvzTFgLKTxrzH2Ezil03+KSOKjHoIfSqYsaPX7czZ7V/jl6z44XXOK7sQPnOonDahUleVSsKwm54CiMJGqI1hWON8ppnEFiG1eUj6+vS+t2dmQMIdVcX2fH0AVoHutEQiV+vd8H5/O4klHAeYYyabzGUQj5wi1M6RnWye0csPK32eEppFyFuXbO6NIBBnTl8XnPAWLCEhuwy23pjeSNNBgBoCbg86Qb7wlR3l5tWFs7vbmPPfdw9XOnmaKlaHWdpyqjpUMdgzEoB+l0WYKCi1imkEsJs+RYZwh9t8olBGNb4OMcmOpfJlVE0+04iVxJBPyVmM0X7bEkk10rtxb20wtXzkeAEIvGotT1CUeS/+v9b0rK5bkmaskZMvE8T6aiEKwek4xZcx2jzDMOuET0QD7nVFhn0LSkiX8hNoHTpoHMTLRZyJPnf7a63N+nMnHHhZ68iI0+GAJU4XcuSmlXTDPVQQ0cu5PCmTg6JUpNTdoQ2y+D964KxeZKXs96niPvg4ys9dAx63y+0dUGpsdoYy4aF9f3gk/tKXnpzqMt7uLRvzeVSotDi01tDi0CA1u9NUA4r9lROILTVwS5fvk0Du9wMng3wf5RaROfRYwN9t2441qE36WIbBZ9/Ta6DKADdjtI6o3wmjmcj5lu840KKHhzImLPqiNt+KgOCcRjfefYAda2z+pLCBS+O7adPJoVtToHGYPaUmiLqmsVsqm7tT51OsaGObDniuu6Z5WvLFlJl8IZFF5qK4QJT9txH/zG5RlI+wYMHilsOfL8nuwJIecB3ApGxHeASKiV/nV2OgNCNjVkvnHRKrumUwcwfZTp1+x3vsAP7DRn9TiuOjiWl0j0kWHalhMkMaDEFm2jj6wXLUqZ6Nv4pF1EQNozWQXKkhoNKU5uzPBmqVdvbgwZSuUbMjwcCJxhJLOKRMcIWG+pL0gl70F2EaUiJ3TBi2qt8Wn6eQ4XFD8u+ILRD93LpjAKU3yUFOq18grIdG1yJP1OUSEe15DEp5VS46Rqh24MKrus3EjlIl2y5RHOs258aDRARjhSFIzOZerF2vckL8qkVsNh2ZUoX1HbmPyon7FMu9QVQnz3H5Q04s0QtyepclTPhLD7Pp+DKexu8riLFySEQTvtOzqGXReg7eHKBOqvNLYYqMWI43XaJkCzfrlisL343TIVAhkm38sns3+qPO68rg5Eja3F2GY9FQny+qiBLaqnw2ZtB86qr0/ypF6C3eMTRWyen7Fdl39s1BQHYRWKz6iNzjOZ32+T55M64OMOu5SajhFohi9+BIY3wwPQYAbWYLTQhXNgZ/i92FO6Jiv2e4DG7sKU4W1db+oNHBy3dF4G7fo2+VSeguLUiadxc04DYWR/7UkhxxoZ40+5zAdJ+JqNjgAdTs/godNiiHBScxs3uGtIR9+gbVJOtxN9mNgkKtTLufmj0KKVoa34OaeS02AJ886aAvBmxIeNoxCn5XtPPdbf0ujNM+C/hLX/Fi4zwfbU+yL38t9FHp/kwlEjIMcMJOA6878ECnF4sqsjjolBKwuJ7qXBrzXVOGAKs0iuymhSl8vnVP80NC/VtYpO9Y+Gd+v6PDcPLof1S0hkYVf0FjJ9vHnqu2dzutl5KN+NvtVwQcN2dqIh/e+zaUEXZgf1PNjM6gWHeO/djdvNaUWLzLjsWyKaivmTv+H6c43masUyKqI/bhusp08fpGDsokv26KPLJhOP7qlj6ZkTJuV+moyhaSXtbbkGElXhdh9+8wa3Eb+WnUT634awEAALowHXhkpQR1s/554hNGRleuNhc4lky5/v0f1zPZY8eIkh1B6DpOzLosn/KauZw4Yt59/KNaVWWFgOgQMKBR2tSoTi+wOJsgRfyVi50LxAqUW2EnfkWnqoFOtTRx1ZcD9jx1R8uxClowS+EUKX4NdHLGmM1eLpGpH6xdBgNrKQ4/87sefZYT9ZgNITCxgXks9mbs8o2v2clSuhKu7MH7LfunT8UajI8iFysXeZUUtbgmSyKq468XApA9AurRf3qapUqmFQoRCeKG4HDMU8F3z7byGSh4CBZ7l+sZJf0Giy8NMflsU8v6099iKoAXcDMGjTbBdFwPWco9LbfcBWAPrKLwn3/O00QGJASghLGCJLDd2YZftiDqUeUdibB9OEmwC/C1P+hgfimtzhnUVUs4cz1x0cOlbJ2kXFwFu2ZXjZ3LFtyMvwSqsxGoqy2wglgsFlKaMLacTNQwJzZnPKFwdIjsvCqK/TMzm45B/XSi7IDh449H7A4TxIqtAZCLIpkXtQYSxv278B1FgWUTlK03DrEn0NbwfH6NPAYnto/ltzTqkURTpL8ng1sWrh/u4N6Gu6fKBqopHnzJyzc3+xse/QUeeEJ/VIvGY7ZOwxJall94fdavuhCV1wod3DBO6+6OWZadxftTxN7fDLEWTuEHFZ3ZYQtMF1Nj2VBOpz2xdaPD/yn6gnWbVP4B1nWMk8u8Ni+FDLu5M+XKPxk8Gv+TVUQc4CXUfu3Qk9zG8jllezLxr45ExyTjYFrTfO0cjbp7k7rzylPE88fwNCw+MNIAfxQuE2bu6bYdbDPiwOltmr8TP4RYZDQm0/VWfcvW53OYcDLbLjldbfnloFUXmscePGW7/1gel831d+YoqmJCNAGATQS+2QaINC9fc2ifoSPILAqbGKTyWRvml5MU8/NXrDqNZHf5nSp3hD2BdJhXmb/BSOiXgq4Upe4cWlY74CxQZ6ujsSM3D/+izLzrriXIPa2pc582SHB9V6UkwA3A+mOmHcA+XvhfS+iYcgt4eI76KKNyXkJ8hLeie2lEZEH8Sfiavy5lBIpwvGeQyl5rX2nqN9prawsUPJ+f5Y19q1P+pKQfTzKgK+7uQ06R9qrpHuDoenbCByb3gB+Q/QR70py+CTIFlMuG5BSX0E8p0afP9WhG/Y8iyFZPyUdR1JAKbkE8f0i7uP45VigP9Xq2APFMpr3APSgUGr6+qrGmrEKmwnFK2qvtiQV6xkNbG6vkU2tR89334tlRftXIqycTrdCcerZCmcohFa7JWbW5weIyGhzVeirXvsM48JJ/Rr1yzaxvh4ude8l7r11W5mo8AQ0ZL8XpOGaSEVullCiQIVoG6oZwgyGDzZd5jMNtNgElmrf7NAeiQuJ4sRDihQ+BD/nkjkLk9lsENlUn2LTJKdfU7fVG6A5gvTBrR4Y+LJVq8TabwmXH5j+2lFfQjoTSvRYBcHQmp+UZ5u7GgBfsBK8R9ywRgf48SSPoe3kc3nHzs9OMM0vlMshFkX+w+HI7fDTFcYkuZunwT9hd2hS0QBXXM2uwP2Stu4sKaiDMDA+GeVTNn2P2Dx35OgKMU7m1L9EQ9zbkdw8P7Yq1JD2wS5qkVPs2R9poLzayydq2sBr97DmMeRkSUdwokPIxQzh74oxYZliFxfPrxZfi7FnnxVC1ypU17OF97wFJK1vKoWCO5E9nykodQGd1RmQ7BqcRIU9aeql/Ehl0kg4xAps5xZn0uniZtJVL4SWe2ueCT16WeNpxBcPPFmj19HTNmt2G/eprheR6nAv3x5//uUwcVrV2OcvjOB1I31XmmfxEU0Wx+AGVtpDMyyJ1q15f5qk4ajGpAL0OCAEdBa6vdf69/UhTYWrVvQsveUJNb1vainGxAoLUXUdWjQvQme0OwSRHzUdUU5h6OWWfl8a0nSCF/ZQuTDef5YzWRcHwg59LBM5yEviNM/E0FbCrfClWtGz+LK6RW/BtT4jR2SSMx4M9wW7ud06AkdK0M4yFT8/xNysEY8aPjI5e0qRrNLAjt9kKMZ8mhuPGsl2jnw7+oyQBB6sWO7Kf9YklhHaL8Q9WEzOfx41GhUfjvA13Ttv1Nrew6U59I+h/FPuAUnie5LB65OzZqdLFuviQHMwU1pDMmXNgb//V4J8tDYJ3SFHlHWvsQkVWL6rSpX7Ln9kR7gvHPEViJwPn2x+09Osb+nUbaimfi37TYBYfq4B+8fH5LradzrP1S1OEtS7xoUTUNHNMlHrAfKLR9+Y/iOwkhlBT9VancDsaK4CXFp3r394hKHEFmSJ8mJwZBg0anlhjimkQhth62mZtZGsTXcxSjMBbNRFhxQ2y0bafTxiEtkPOUH1xadgSAr5XMvYvGy7nYVUMoFOmIA0MFaub2IXrLfXUWgDnjaU6QOKV3sxGYWzlaiXW2+nQjAi0OysoxBm8Q7NoOPXaMcLbiP5PeIZ+hy5z+u3kWlpF8I/+RCoIpy+fj44uge/9RtiGrRszUr9wqcp4MkRRcfZU6det05LRdsnVc3QIb5Wfqe9YZMeiTCaLm7rPPxF7k9JocGInMfPQ+NzsWAUnZp8dfouyc1hQn30nmEfKYkiAxd9b7TD3kZJBpGBr7cKTY+85nQnqZLdECNIMNvYTu7qfQZJmh3Czla5xg+UacHzNQ2O0LhpESg9M5MQ2V3nT5vmWKAcUII9/9Z8ulrKNT9QCrVtRlHXtPPOF7aVDNR6jFQl4yO84wLKbuHB3wg3AXQCVORxu8uZM0W0geOskYJj5ZpGCcBVz4+d67joS5iek/nF0wHv0Pde5gRyMYlhhbCT87qSJ/CkVu3PcRN4Z31/svOaWTujrEiXu2mtPVbPGCmYasDd26ijf/v3C037aEfRWIEZzDA0qWPre1yJxp5s4rj604pb8p2Mkiu7sON9O58/k271dA4LqbVz6oMrJlR1Qm4IJhg4CSzAwTcKoi3n00v7+T9NgQVzPuOZn/Ok74XCTSrn8n+xqqVHF+QyPJdllHjgwuShrS+YLbZxG4899k4D+x4r67CnxcASlMljFTDu6ta4Ylttqfmyjup4LVIccPby5sItlqJJ+rPMNWa1TDg/ymAK0kgqAHN+OAem5iLWXT/glUFlL84uMBJaz+3yPRA55JdybOFRhcFOwy346Xvm3bWhMvi4iPRqHR7aG2ftRKY/WjkRN6PEQwz1h4z07lpu1kP+etJsUrU8NiXmcUGEiNe3B/mhEl218L83Jxt8v7fDZwFojrPec38rsi1xUQjw/wJC9f9H8TKR+/deAZajzXVxjaIoH475p1rIxIMobLzgfWA3ZC5KgZfK80iJ0Gut1IFheCCjnix1VmwIby4htB9sARqPT4VprENxmkTPkjxR1ONeu32boSPFhz5mZrXBRCa+9jnsBtIjsqY7ikFLwO3M/fWP0dSrSV81rGjKqrtyGwqzV8j9Thr1KotWGZ4ESsICrwjCbAmxqLXg9unCWwZkBWH2tkKKgZqRS2bfP4Up7QZ7ZAqFZbVqv1EE75XjLCYONwI65ZgGIjsEzcB14WmmnsyGnW8x+iGW8Tau2m41iFuKHu26BRc+mb83Ugv8EPW2JATMeoKTym4oAliwIKg41YTel/xKYG++o5FgbmFkCPVfI52MhlTX9DD16IYn3FtXQiMw0UwFcLuUwXT3ikz7koG5citxv7WgQPJzR4ho7sBF39/Awv2uq3fmbzxxRA2Htk/XJxxBtqOqDvN5bXytiPC5286/hClOYq6cFIkMul5gF2e2C2IGr4iJNTkbkksdV8Ym1eAM1GRwSaUR1MsMEFQ9kH8i/gRnWDrfI2Wu9caY0F2dvOOmHT+Tb1LvdkydC6P05MyjuZSa7XwOVYplh/crO/BKAfLLz+T1Wi9tMg2YxWX842ZoH7oUu7HeAKu3byiCsg+I68q1diBS1bG1GIkJlSmZEgDhrOvYaPpQTPbGDSRtEs6jaK0QOJazdNv+QMeI/AhSGeJWZrzX3FqUhhwiqkwajWZIMgTIAetedJyB4qIFBElfCtohDL4OSYhmlKr8Obt+e3d4VpiFOCh1REc5ytthWOO/Ftya2Lw9QZbWchV1XILBLY3Te3itQvUCF0hP2d3f3N+pKy//vTjbQgXHVNf6OGOB82vLwObLzRE2DRTuLAj2y2PLGRMjt1h2+B9e7Sdlk0/AjrA6u4iQy7CnlGgRQHPUuC4RcfSJNMhlgKr137ID+rCyxzSipIkuGr4AhuehG7P34dP9P+FsiU7Rc2L2YvoZflpEkacxZh8riLqK/t7EuRII5kW0MI9ypsPcM3Dik4pOWkzXvxo4xFEK1zz1PWYC7tdQloyZqqdZla21BbD0uZnVFooT1k5Y9pt5yblpQNPIXBxBFJUcs6DEyajlCa5693mYXMxxFppQa7Jt976ytkyNfMpx0lEPjKRtnSh+kpLceBBdKCRZObKn1snEmxladgIxdoHbs+rZoNB2XKUOqYjEpbcaVAm+eSxpRJ3+W2c31d8u30jIWzb44ftZM6+WJVuxa4+MLeH0gAjrbW03kpljh3ZquXN/3QtGFl6s9ES2zwHQH9o+7UUm1muStcZyFdnUL0A1MNg3fsKlQ5PRuMkKKJsNyFh3vtK0WGUBw4bKSsFfNHAz4LXVTHL/JD90RDj/h2OLu65Gg0w35449f3wOpKy8ayrGEFKrc2NKzNhinUA/rMomgSfttXzs44X/HZA255KSpEucMo+791sAASzvmuNaYgc4Adw23O4GsIwMPw4bASK790CepEn95YdNuA142wNXPD6D/a5YiNWMZQAOcUogZ7mN4PbILA9UC9484jroqRaW1/tVrnPD7oHQLQlEj0Sm3kQDrBYaLO7Hl7QkaBL6eu9+OrMV9ybsTURMvf7Oxn277X8Fo5fDMQOOfH/uyta2DqzENc82IUjq+6nczP5nwY/DLtb+GvTFK+3ueShnqsD8mT12hXnOtmZmulne6vm47jvaeKvLQbsX7wCFSuNxPJdMSXs1bFui1W22kejDfd+bRGnm0Q3RXYNcon6/ExtM++I8nx6To61ZZEeAnEFbFyGSER73zEkMVS1ku+SBaZsIUrqebDV8mp4FjxtOxHYK9CRdHICcpD5Y0ewdT/5RxRpngCgTW4jK0jIKWUbLgGqH/W/+ONHqP9exDYkQRugqRcsop8ZUDVqc3RqQCl3lLVOge70zTAnadw6KKJadbi74Oaukm5Tyu1UBvEGX7bvr8JSldMQLEeKGEj153nuCcbUkC+7/0iRcOJhHfwTpDF218OCFa3pbdK/ltvHzOJTf4Nx11Dnj5svPwnYTQpsC9doOlubdFufimEV/PRVIJjja0oaGpmtDlSBmxTstaF/McoSZnjrfNd1hFL7L9dgLlEFPL5U4zdSK4ko12wD6wHoctRw50xlBBg7l3powU+zDHWxgdz0jbYyg1eNjnpgECTT/hJwDj0LSUnp0vO91OwdrTebKl5WOqsaW/QaY/vD4ot1LGdVeEqEubabf9TyUpsT/vlkwNsXvJSIj8EcbfcGhsM4/jqsbWomTJBak8YqsTP+6f4I59xR8hBUmzctCeoqbJSzWX7mhK7OD2CvXuxz/KTPG2IrwSP7THxyfP16oyZVhyYGVpRFhyT9/Y/7EDyxz70XmBiNjWOBtDtbmP/WQsu8cw44D9RXH4vhhLuxnkXIxxaXgDjkMumhnigdTk3zAk6Ak6xzy5phofZj1yvDcJO5C3XvPl410WBCQwLOXXM1XT+VHYbNLhGlMTzkvodPwLt1cO1NVc6fp3tRCO2w0FKGNJoTaeaAdC8SCD/r0mnIDlzLG4diRJR+mz9ffkuwgoeS/OUavRAV1St6w4s9SNrA9zCDzi6KF/WxLbeFL/uHCnBg9kYOJAIz4wbWi+v02mTTNUnnkxyFAXSZCAWql0GFN/IxUd+6EThtcM3ZaZtIorohPzguSRG/xCQDwU2fABNhLphsxlahndkRgnb3cv8k7dq8ScwBNslHnhj/0fhaQjBpbcvIlIY/dsUdtiamOzDeZ9ELWrG8bWplHjcn87Fm4oLXA3vnTW4mPM/sh3sUuvhlalifqiOvVUNT+QAHBaGtOxhsFN4SaHNkjCY0MTNCkbaxczknTeGxuyaMckYiwwSgjUwelXD9+Xbubh6zvCHnljZem6sTzwLQty5N6ZquIHQw92/AnbM3LVVdciM2MNCJIV+nGaRv0sWCaTHOfjBFoDRgGzRM4ICSLxlCY96IcPMBpqWRs/kWR7Ph6IC+oKPcZeH1fFj5Txa7I2rXeVTv5QpuAE9YlAFB6BkOccFJgq/+90C//o+KGifZ8nYFED6J39psj7tCd2HW1kdnkD4QFqkuBMOB6nC8gtihG2asR+p4vfl0l4S2gQIqYxCg6+22EJugG+eNKQAQj7vm3HzLUggQWSMNe1mEyKuwzTqHFZTfRLmUi8lxjjPIjYAHTskuHeyR+YxjnBONA8ulE8ZdhcuTGvFC/rz7AUJ6XuGddhivSQH/41vtMp0nVDWAwbBIaZGEkp3kzil3lZfGzwha0xXYo6ms4AQmWhyLQrhtw14aiw/NI+IuscY+AXkwUz5+B/syy+EjYNFa+CzTyDRF8Wrou8v0S3T25JveSyMJzqsEFC7FZAjY65+CWT58oUbbGoQmiioBeYjByOqtdH18VZG+bsonOcC51Z8JmPf4Zy6g7PCiu64YOo2wzSAR9dNNNWfmPq0XYuxFXdNFpMzwOfkqMvvkusKkTi3RHSIZTdXBz7XZS2/4zDlDfPw354Gut3kSjPhMYdO4KvsMWRXqdVZOeaiTPW1Rjzggf0fmeed1cELxrXQFcn+e0/gDO2EDSktXxVaYIIPSlQ58+OzkUQXURs5DiVjh9AmUx+xZze6Zm77w2vFzX6KD5FdpxPNJrtAIolUbpShrAlk/Kf35S2iik8ur4N/krrdLppWpWASEPITMFnm5T3aGAx/VErg990/vYy3UsWPf6sc0aUtGZdKQORPhVnCKHsM7QhUPioBABRmqNXvsqoQNf8Ok8tmovAC0UvQiP7+mguEm43CsEZJXHUrhDRRPbwKB7Rm/WpPQ2eh4hW42hOJZfDGXzdkVXnJ/Xf0uH0z46GCe68gbCESro70wTEtYaQZSsa+j8hgrcXCj21J8jL/5HVu2v81dxU/pbOSHTTFbOsNBo12NdiePoHes/vywuFz8maze9HpAxfqlNZVsoPL2YT1NQ/pvapFkmLIGCLoJF0CxyeSZDTNYDjpfgNKqWbplaFSXCXC2NzWlK6XOU7z5rWza5RQX9ASYtcozahSPtYHQU/4ypYf4q2L/lurDmSvGP+Ql5Ey80FOKiauBWDMdv/UrcSa8AgyJJYy54T/MbeAlNGu+o5K5kYoVmNf8g2ycDDq/P6C9QV5A9Pbw81XOE1/wxsdclq0kybAy4+8ARBF/HTg0wnLWTg/A8oO7dVL1ZP8XJ5AnW5n/dQnqD6dCR2JmXD7TEMWHcAPLm3nI3GYaLfV5xpnE2wbR8y1Ue0KuDKFw/gd1cgLnFUTGqMMkBfyhWLxn9VwvSS23XtQYTZrM1+6K1xbNovWyVQUMVmPTtZO4NnFyJwoyZb8mEri7YAtoOQFxTjCo7BImxDyQjJOzucscxgPd4fFA7Hj2At18pVXXHi3kk3xc+1NPlhS6X64SG1SU+9nt+GXknwdkMdbGE+JG7iEXU8UAQWm9hTEydFQycPgeLkW4NE9KWf2zVOV54TYZOU+DcunxqXGiYY3tw+ENh54JZU0aKwRFNb40fq8TMh8SenGwShBW+cS9XQXqvk/s7XsDIuYQqTGSm/GDJ+hettIgiVvhSToCqUkKJpiXdBkoadigWSIqcFhx7RPcMSnwiJjYDo48TcvHRnidSIFXmVDZY3/9BsgEYBQr12n4oMga7uPy/GVbNiNHKMHpbBmhHKXKjjnz7cdKO7/r1WgjFdHfhTAruLP+7KHG6p+FIgjo47rT+REm5JKeXsdg3RY5TKdobrQ86QlKQSzqi+UIvpk78+JnYOSrmwoHy61iNREDafZN2b+rT3zVFV/paeCEtTkbVbKAGat6/uz2LXqqkHjgMprlOjVP1+LqcvL/OCQorNzvxJdYbQOpmSojhJSxUhqn3nLiDIhEgxLGL/IC7jEgzVNtxWUxY4vY1q7RhKnLub/2MAr69Q9YuRQyr7/CC96V/61TPBKC4ZKZnZi8374pIjbaNGr76S8ZaQpx72d8bjydQWKbJWU+AFqsEMRe9CU6wuUFw+1LAhHC3mzyGGmB0njCegx/e4tCH/HEDoG29J8ULtbnHw+vd0LAy3mYnbOfuWsBGcAcocVgoRbdG21JX4cmiUMb819aLdpMwPdLTNDJ12SoSVDEjjyZbtwrmj/AFVEUAL5Hj6cE+wMtep0XkJLdInbRtPVlgPmAseDEDkvku9SePvpPNr8Flrsb6Jujdhtovg0KgqZ2h9u6pJWT7lWAh+tZXhJrd6IyMv6FNrFNfIJj4R21d9AJ51L5QKr4x3PSIS3y4gtC1X9G2jgJBSGsvI9mxC/vBP5jZrOWm0ehfOJCM8DYUfZiLaNXtr7Q4ZEWptG2plCu8uA1Quy2ROuBTIxmPbAKUGf7gn6kP5xbf9mHO127mems/vxs2AYDGgc5eLYbyntg1lBDeNsi5vmX4WcBUUC+WSTga196mhT6Ms9ibuR9wta+HlP+asbTsfNliJiihGb7zy9m9JoxKqe0rMuRG9tbvBHuKfSHZROyFe3OHhngHs/ioonvsyr+FEGoy6X7UVBwc8UDnwQCQe+99ydRwL60CGihPuBoJZq+UoutjelvF9ZrbqR2DQ18/saiswfjY31m7ABo8iELTvfNR6QZhH2LHEZJIPZ4DN54fdBoRX2YGmuhjyqCW26uKc8eGbJJjVzHGxN7tY4uGF+WLHz+qOe1bIH3wCyl/JCCjdUTMaiOB4JcGSm/YqUzqql0jO7/pnBODoIBhHRgQRw08v33oSj0vVQDn4M9Hi1vyFP+TIkfj/PicvcF2bsWHGivpeILAHE0htL7nOZpY3roYND/aSUV6EhmQEW31ZM9tfNch0VBz0Uu2C9hcsdx5oo00Z/I0ElQNNlrWK/m+NiRMAz+GQ1TajywwdP234Nn3XjMauhQyyuCzgLhYEuOu/vGZaEi1w6VPLLqfzPMivmRQ9/v/ugh2KOoCVd2Puv76/vP12KkU6mnTGS1YYgbpZXQBlfrvdE1wX4m6rSgU1oFIHnzmaMQHyrIbMm4xmNT/Wu6MVtuodbaNe1pG30ltO09TfAP2y3wUKE6evaXp6j0j6rqRXq6/H2y0Y+wVkpEvRQf2Q/AY1XliCGVQg8lu7ZzeYt7t2o501JVBHt8fb1foGVBD3hXYBgrySTErkBEYBafK0DOXttfWwPY+n0OKXMLHGKCHh0A1eo76nnAi6cjtU/vyNxNaKWcbxaH3nR8TWlTXTgRyJB9PKvi8vWPFnIl32sHfVvjwTBTNwzej8drJvd2rqi20chjhuGk0rQ0kNOvvdHGUgKTWPzcy5yXkGdS8j92YRhZxU+0H80KeNT4OO0D5uJeQZ2gMQKTJzqvUdGtMzsSm7VkA1qns4XVv2UDd2pm6UPJh2AqeX/WqFoSLrx8Qrvy4cFJ0PUrvXbGBiHviOAy1qScf+A5tTcUQztGJVW6nEmOdgEzFFIgIea1GX9ytMOUz5SbR0CncaZvpPellp2zbzSI13WcOaOEMC9J/JhhvTCZXLE0LRFwj4kXytPknYfjgxLqpbIfiMWmVwMtc2X+qniwFYOnMQYlOh4vvarcyl/FH6RoT8b/CKZGOXCCKZ3OSa1pnPdhCFbV8LIpug4lE06fRmbKIh4heAQOL/EolEafqp9YiKKV7GvhxemgAlvbaSUtVnx6YsVSrNQ48fw2bPGc5vvmUhBpmK/VFHOF03vDckWKiaz0UdpUDaN54Nk4MaUShDZdorNbfEhUPOJrGbWzizuT8lQLXwZJLXC/4VmKmrW5z5Vc54+SAOJgoLEERMTq1m6KRsY+/m8UrSGO0AVTYsByiqeYYVjkG83apreEt3nwgvt2tG6ZymAPyhXsg19Pm5wUoj12VMy97sEVilJJkDJUATZsQkLmr+aZ1yCblbC3toIX33s7JcmbEm3F7JL5GT1/mxLkwtUUQja3funrndBT85P/1Pg2gBKP6Qe6haV0RSrhp5WWDzZEJFNVcCxhkziPk8JKr4pDBv90OC+t3wjPM/oLXTr9ueKr3xPvkTedtqRyPtlIvOwqrzb9Yz4fJZ+B2Ktf5zdg3ShQBIUTxP26Mm/bKeOBwU6imMRa0jz5G0GFv7EqjviZzkz1z5T2Rb4AJZwHf8V3GQPO/RzKNjeE6g06e4x+ab6vtRtM5/7gN9L2NK09wHs1WFvEia4gFi5WWVNCSnL5IXUkSLUcSt1UlVobpVZpA1SMoh7axTOP6nIKPexm9kbi+4MxHWhp+jNifIGN253ioaEq9rWfptmBhyA9oZN7sNrmAwsL4Ji/mawdy2iuJgLh6lCvDuAsfjTJFud7RzZMHOy6K1xYjDUxabmSFK3ki3Y4ERhgbAxlJ9QMYK6FvaBK3ES+yYKuhCIWufa55vJWo5oKzuf9/Zn6a/ea0Uj1i6MKpluNcmZOE3LGl/xYUW/2jPWC1H3cs73gvmu8TLk49Tp4WNjydWh0PiSe7Zq92UYHXwXNim6NTAJpsCyyxNl1f/yGVXpyrNeSjCDoE77E7teUnCP6o2MBcGbyn2Lsp/y5C09/2CX7eMyUGIRKMFQb+nhApVKkZziO6+h1iFbz0LO+dQ4mPiKSSa3YeBqGxKwGFJQsfIonFXhuV5bqHAr/hl0e3WHESyA3i8aYzJnlZw/dIZKLmKb3v1kd8P/BK47/nFgGmx2swRMrqNwgmhZTq44TFmCSqy1EBkmIKJD//PYHbwkB57XGMsfSOYrsF00eV49K6lqG3N/0/eIRZv3uFA+5RwgcY2/zrEcthmF6biuKLnMrIId7aD5bB639QJhNnyUmvZf2ccuD2d/V/nkiTXv+ig8IIpnH0qYovCyRSGwvoyhRLulXET/skjHIZz9jBWy6fXGxcCs5EZj4AE5NTJVdt+cSj3dlJ3qGTe7KQcMQ9GnS4mO1HdEIM8DPz1cJ+KbVgq3wSu46ZeHvYVYR+znuK/TGLpIO+zpCqz6WvoRW6vMiaRtWXI4YQ9xJhu0F66ruGRCu22vAWIwuy+7vknxX7SoXXmqf6jTHo2i5GarkLMBktDFrtMC7slLWWquHKtqY9v6NQapZRORf9TDFsvrKYmcSOXkYqyyD+ABbIRCrZOnD77mSbE/VJTMyEVOBUEyj7ZXZpHGfALDY9zIAXpYTtGo6AJB3qIZqsUSpO2tZPIALs3AM0segJ+vFMHgkVaITJ9Jp1dyJpi8EwCzeuYErKq+oebqd2fbgCWwVyqq2gdk3uAJshS5SmMkYoN6Pz0WwW1wZt0+mbGutl/bSIV5wzHdGlk3Dv/JScctMgOBZQ26/H8YZeUUEcYQpIROyITd6M8m6muHh8yqvfG7R/GR2Zv1fYvMOTO+el1aEPkv6bE2nVgO946piXoPYPqF64gYNh72QRUNMx2uHOi8MSYAHl8jdXJITsAMMmIHzWqZyZHVwZAoBHRgQBcVbgZzdZ0xGVP6fIuXz0lMdKBV2wzB9DpzVItFXVpu5RFCqil+ayvsyze3MVvURRN7bVklgFanME95ZivnTEBqZClYGUkGZxiKJZqcdpFdON3jKOAEsZx8a6sxIUyZCSp6q1zgInMGXZXXbMTLdttY5lyF+PcnAwQjV8i365g8z0TgxMlkjwPLEP+H9QYgPvtjieWMB37zNaMSEzk1npzixjj/M/30lDRE1LV0ak0f1wXpW6CYkefarQhJbLaJOxWZ942iR5mbF+zXLPkcm0yayd9zVg1XBx9pf2YTh3rqhDBMyokWZkpLwei0a3A5IgTYEuD3bNwQdFnySZuLF8rKf8f3rD5WKpkn51Dphc/ZKflPUW6APHKYWcDuYAWs7zhrowYhrZTiKOknguHNYf/Y5xi/Gs3v+T3jruKGhqOXdrUtlvg7ouOfYfYfqf8oMlBaLHHsr5FEmP/MAt2bWInEB9BPGn8OXs/KtTdDuIfPssg8HLSeQXMsYPX2C1LHvVXpCL661pfdSVCAnd3yrBgM6+Wb38LQWxYkZbq4eQXw1n6SukVzR7bfFyMRknyui/LS3q+wHXdy3fgL04f9omLkgfZ0LwlB3sZpu7ZcRBEOjWlJs38vTsp9J0ikOYFiu6U/CBldjiBMVB1NcNv+BknEfA8ZCGZ8/M20+gklstv1kgO58H5FRtYwSXjIcFsImGIFP11gSXl6VtsOSLLDk7PxfzutUM8rIJl3xWzaGyKB2L+n4DM2LHIgjBFxHn2tL1kGcy3iEB3VpotoMulpizhREmEBeEvAmM/7OGKrO3sj5gALE3ozXjUNKu7pK0abkUOjxM4960BuMflYN9cFqhvXlfoBTbyr9i+8eWatKdmpYQpruFelcV9HZzT1qSbWJ28yB4H6Ipx9WXuYxVjxGFA0fyLU5MDehju6CtIL+jDqE6bgJb0pJfLGnqm15G3f5zcdvkd5Sc5EmkIOxq357qAboIP/3LvurCz3S8xIPqWOr/bbtmUk+yyWkN9qUFBn8ERzsVqIPgdthIzXlhbGq96zrv88L982+TJdL9esn3nSqN9HsQaxVzwhAkN7ty2qGFJFhw0H053SeMSxHbXsoRPVbTPp++M7xUM8ghinTLJu+fhtde1FEDu+UZq+2li4y0v/9oBjOS2temdWBkpEU0U0vi6mqqbDvuMqlvHt0jJhyNaTUFcMsAgOpKDyvDnN8Jw274mkiker9LhZzpPbeK+ZolRqxsILFLqcfahOyZ+KrXyRPJMX5NCdom1OVTJSt6c+bzWFUFak04p5tBR/TVjsa+HISkgzMW86mLEjxf7FeY0bR0DMJP+1Ix9dagXZ3RTYhFR0wMXGbcfJ44X6Bte6u+uUrYumxA9YT55ZseU9Ac3Daa9wOQDwafweaiHUg/0q94z6ZOvSd/fJ4ESIzwovBBWdJ23ixRY9GtBitcJ8cE/oeRn26fVreyCT5rfT390sE9AWAU/oMZ2xw74RO1G1bCfLdnD8O0d772zVqFCBuaY5XueXUqEDVci1lAyun7Zz+zC5ano6tG2/vys+DOxqqXauEMmnrtjvM+jfVBO8+v5JkMNiENPt/dgePDw05MRwAOINARG+Xq0uxvmzdMB8+DKM6NHi4V39qcImwLwRJ9d7K+lIom1J2fqE+tU6HZJI1oQY2hC7ONjWmNRu6/QN/3K4sZ4SsRyCkuSKWUMrQ6f43hdNxMY1ZA+Af+Y3k24r9FabTPYGPV5NSFLtz4PYpQNAXRb4MOjbm95u+iHC37igc/gGHTPMls0nd1tBtvXqLbF5EyZmYr6a8HfScnbMgZqfCIctIJHSzjr00x5SZM6R7B+MwOAn/3q1aLn6Zahd3FQOJ2V0XD8xuEVgP3AFy9ZcU1JlKz7Dc+lBPMOlaS7fdUbIKOIXpVe28Oks6vABR8xlbKgpwuIZcCDD57P75iCryigTu5ch2OEhbT73LD9fSrozhyFoo2VfgnbZHrL/OLW9Zfrs7KIaUJZWx8f1ABZKghl+zeCT2mD/V3fFqEjFLneWFKVAL5BK9rkXcQnt1XCyHxVETClwnDMI6vZcH73wiwwiaDc6ndyr8EowZNvng+cpW/saWBzGqHTI07s+PtB90xyXKuw2oR8wDj917giQqjNYwvIUXC3AIVEsWo5NtpV0SoEe07d/XPi3QbwBPAUF1tARlmUuxfgngMN3NKq6/Izyit7pe3Mwq0/176nKfd7SjKo9Uasqx13u9hlQqAbpi+x4Ljryb3X5C4gzFyzxOST1LEE9fIPQNdN7z6NBcU3j3+3oBqPby3Qod/WLoqhY/b8U/Ce20sfre7XlPgxSr5LnL2+AxFfBcI08lpguyrioHLrK4UitfpftpFY70tTWiKLctX5MQFRJIle77PMWnH+AmNM7pjYN6PzFzIN0vpsT7mRFBEqA7HPJ7b7H2IYuH+a++3Cx3qyQFa8dwwtMpF9osk8UFJjOtX3RL/+1cGFK+cHz3/I8my+nbglYvWLrbpPW1oK4fCjPpjB642Ihshg8O/1dQOUot7d8gHEv/s6KU8ljSLfexDcmDNeDiUF0iYtKFjOXpr7b9lxFsGo+hW8lIAt+1ohy9ztZQjrPftCNGDF9PwLMT/Vf37bISYVUqnlwn6lbrG2GA4s+zxLY57iTiAhLw+s8T3dissZetJ9FfYH6pBkp+s7TFhCXDF2JVPrBR1nZWBRtFVQXgqCqFZlfKAwjZVyThALKZp36gbctsl/tcGI5Pz/9R+yXgksUBSwHPedVFZ4IYw3BB2zGuPkTeWdpqxe/bWn6xb2g9+JPyXkaG8plSGRMTSvTD86jaI69Y2YQ6+vFRr5GSKpQevZLvF6LKUEFvMUvPDebBhTFEdbn5vtu1NapLTt0maHFWo+NHLdcXyf5elYwuM2YQWz5tPR0MJ5U7A5DbExaNn0U890zdoykGlL6oDFo0D8IkajTneQaaZzZMeIPNR1FledfWR6djVMwRGXIvJSQ707zH2WoOLMXL79LVxwZ8EqbFk6fow6khAkrEDLbgkqUOO9z6trn4LlQrHKU5tuxWGTSklS8B7ok+x0Pcvy+CStfcLBihBzcMDtxoBB49Rc1S7RoU2HbiNvHWxOqtwinPvPSLqQvthbk1yrOt0/RlDjnQpTz4hMbyrf/80jRWPAW5GVhGZLcaLKH8M/9T0J2N6LexCTNINUrT9S/+KLIG2cDu8JzWHwoEUCppO1ky5GM3tLNgVee22XFAA9vDI3sDdGEPhej/sXNjX3jUgJ7I/trHYRgPmIDQyKX5Ta/IT6A95bF50Lxm0IgMUcvj8ZHiVHQfdGx/U35YxHhNWjnNMum/DHul1PLJBf++6OSr8wS+y2Ym98LbxhacRyfgsALKWgGS/fuux+v0BzxDhOEnpVV2vGhdi8LV81oXgk8ujnORtiv4JVnRk82cb3/d9nJBAa8AbPiq5Q4ydEAbAZuhOiS07KHr7vhEcUgrj1QywJeJesZpJBjPz3yEExwq8Slzlog3MD40BRIvgZXs65acz+XhR4JCuGWFvD0chUYrEDefTXsKoO55hd/DZ0Z8tL9bQ3FJrp9hcuJN2fW9krYYFpG5ieNzJV+pdDaYtbzMH0T9p4o2ZG6+FemwaRiPWFRfFYGy7BjBLxS4EnmNBOfOLtzclDIeWKkFirDHtkUHfImT8LmhymfzDeDUehzCXD1hnllSashouFQS20D0Yyb+Q/s4b6lp1wUoALR6FopZCa/n6DfMLV10Lf3cSLrGr8WoAbdMc4vEz7XZP1Uy3QqI8n8d3Es9QXr7CMxUneF5Tt2uDy8REzeVVCzdJYvD2MM4DVDuqvxYXcsQsAyJJJphvk0iOR78J7TSJdhTBqPOC0IHJ1cS2cT7wXJdsa7hzeY8oHzS0qljvSCSOAI5+/Kp6cyDJGLxIq2gIvzufFbeBdaZYwSH11J66QQVsOO8qp82YYcCMCzWTjxafBVC2pktYysTMDN69+rnLkGsp9MVr+kBBk/YDRPJja0L+Pjxp7G+CSe2AcDsd4DoIuZOv5A1j+aJ4OB7Ujrb1taokYjPaahvjltWwNPcQdBCgBRSys0AHHj9bdv3JdenpE+yOPKWWj3QnkUDV0XN6UHBI29aFZwIR+ccuOOl8DqMc9j/2liR1RioaOzyM59ndz4QkEWumG/CDTCIEhcTmj5WalDOEPloWjdYCuqPZiXYrjiS2aq7gZRnQjwSmokfAPc2RwWULgU4CQu7YRfs1i0qgLiKoCAZMX6tKt78TR3U8gaRvBroJXKtSDBRHj0TDDBl2v0PQ7xN4rvXZYuBTTIWRhFERp/Z4C3EucBGd0vcMOWN6qaonE5KRFjYyTxxABZ/twBCZF14k+18wbapx88rusfmXDPPz5aIogNex1rnLsK5Mt7+1zAAAAAOPr5LuBQTZqAAH9qgHD9QMTUlmLscRn+wIAAAAABFla"

if __name__ == "__main__":
    try:
        main()
    except (IOError, KeyboardInterrupt):
        # We don't want neither IOError nor KeyboardInterrupt throwing a
        # traceback into stdout.
        pass
