#!/usr/bin/env python3

# compressor.py
from subprocess import Popen, PIPE

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

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

def decompress(value):
    """Decompresses a byte array 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

import os
import sys
from optparse import OptionParser
from sys import argv
import base64
import json
from io import BytesIO

from os.path import basename
from errno import EPIPE

def load():
    ppds_compressed = base64.b64decode(ppds_compressed_b64)
    ppds_decompressed = decompress(ppds_compressed)
    ppds = json.loads(ppds_decompressed.decode(encoding='ASCII'))
    return ppds

def ls():
    binary_name = basename(argv[0])
    ppds = load()
    for key, value in ppds.items():
        if key == 'ARCHIVE': continue
        for ppd in value[2]:
            try:
                print(ppd.replace('"', '"' + binary_name + ':', 1))
            except IOError as e:
                # Errors like broken pipes (program which takes the standard
                # output terminates before this program terminates) should not
                # generate a traceback.
                if e.errno == EPIPE: exit(0)
                raise

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()
    # Encode to binary, decode base64, decompress and convert to bytes again
    ppds['ARCHIVE'] = BytesIO(decompress(base64.b64decode(ppds['ARCHIVE'].encode('ASCII'))))

    if ppd in ppds:
        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 1.0.2\n" \
              "Copyright (c) 2013 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])
        try:
            # avoid any assumption of encoding or system locale; just print the
            # bytes of the PPD as they are
            if sys.version_info.major < 3:
                sys.stdout.write(ppd)
            else:
                sys.stdout.buffer.write(ppd)
        except IOError as e:
            # Errors like broken pipes (program which takes the standard output
            # terminates before this program terminates) should not generate a
            # traceback.
            if e.errno == EPIPE: exit(0)
            raise
    else:
        parser.error("argument " + args[0] + " invalid")

# PPDs Archive
ppds_compressed_b64 = b"/Td6WFoAAATm1rRGAgAhARYAAAB0L+Wj4LJJUBZdAD2IggMSmC9XevBhMLNv3RpjKreYaXHZGB82OhmTrTGU7VyY8vf83uQWyv2dz8WtK2ppwpk2JZKbviMq51RRO/BMgyY3VkXXV4n4KGNCNR1xNNs1UXxFks7Ltckr9hY9TjCDgSDzkr3tiKC1WMzQ8KXLBZqTz+wa6uEVRwIulBtdjvFJ/QtXU2IA0L6Uvjfzb+PQq2XoWBA8ehSRraXp+N0sVLiSl3slhizAJzHtnblpjTEg+Q56NN6Q7XAt4UXX+qgeZ9DczQ2bodmHWDTcZzwlxxtT8Hs6UXZGIn09QyrYK2cH6ffuiI+9aT1KzX+jUFdJeNW/IM/7vd8Tydfqsfplck8BOLxW6szcrlA5WPYvAOTD1cligbDttlpQFSOAvrH51nYR7EO3pPeQCpPfjsbl0mbr5/kt1cKN2FbbGWqLgUuZppAKtN7j5AIEyEQNh01Cohy4hHSYDQ8NUjdn1cW3Bpnjz9y33hwUFIAD000v0TzgARTdhJZMNRcbq/DV0+Y/NIMk+trf5SoVpLGU9wluqBp8qCEpry6LvcTZci0xmtPoglts29kQBXOTSW1qS0BbdvU3lfHTgRAcF9/7hLSJ2EqvEPXYQ27jfmlwBYad4ZB3golZwAVnwMd/E0zxHbx0d9ztS2q1NsL2ODcEzkRIVIeQ9yEbPrcPGurwDL3GV3IuvbgL7tAXhNejLgcoDAJwd/Xq9wF1hWg+/LsYQtY/oaSCwSl7NIRBk+ClaIUWT+oLrIqieke4AZs+9e6+VucC2y8t0zHFP9lOWM1JAfXRRNpAfXZT/UicTB2UBmTmNzL2ww57+zy53FNp52GRTgC6W57ePUNd64L/ARfRQrfEkVymUqj/Rmbc6g3ZdWLOgMQaF0BTCDZSFPUFMundbEJyfd/UaR+oWYbSF9LoUvggU5qEl8KRramEcW5QjNpHKVftIS6GkjvY1WakjzGDma8op4MtbUCXLSjBfbUHl8LI5qxYYKNLfeRyfqThKIOgdkpML2rSvCEIjUy4FA9qoW3EFgcqxt4C4KE5cLG2Lg5V/qGJYD+7mmedPFGitXo3JSL6D+UTNcSsBPWryVEjjKGSCptwDyoOvYy2HWpHsMpVfd4QymANk3yOyMZvQrwbGxiNFImn3MyVapbdp2ySwpMItacAoR2Fc6Jfw8fFmUzYJI77Hbexs+MA/842sNNgVN9VmxW2cM9QkzWvtxiOkmIdBas/qxKaL52UpNVlqCqGnA8vlinMWGETg+cFN0KcG4m7s1qsqv2Lcwv/eZHjZFvHLJoS49L+cbT3ZIEW63AeHxc7e/8s2qFXwN8psOdk+SwhwaGW+0KFRmTdeoAO8SNSsdoiK1cZLbd5+NXGN/jeRnFY62JFoXsbR5ceGr2ZF21PfekzDQ+ha3CEtcxs+pW4HXmng0dQ+qeikCm1oj6XCy+HaAgHnq4ICCX6tQ1fI1r/dZ5V+kDhyR0AAb7nriDzYIjQz/+cRexGfy/AIs99ls6uaWAgA7z9r3AKFX3451fioUN01gaymp8+dOmxTJhzcj3jezEjYPqMBiuL9Y0uxvzZVC6axX6QIBXzAtzdXrSgL6NeMOQgaarqwm4nWxQCOHS57rWJiIy4vSX4FbyhC6WbJ9oNDF07jaog7aiUVHxJ5DoLvlPARSfp+pV36s8ldlk6K6DD0xZZHh6FEGpra1+shsupHOla/rVCKpIjS/x37McDtpt1MLLjrkYrbqBPV9vjJYK77Yo3GqSiEt/dFzieKnMYimHWaFoiiQIP80zeL2UiXzKXdkqYGdPHRJE5Pc2k3/hzIq6y592nPNqNWzXkvhMWfKe3s2J7MyEuhksoWe8LW3cS8U/LplFHPk6n2iVM4/9FippCq1JUFa4gj7XC7z7uZsGjNqGTLfYxMJEp8646oZA2VIEPUtQFQ0jLHMd1xp78HJNve6it8t00el/m3viwbbygk6BkTOHQYbaS3hk8U+MmaLeLGd4VLKPI/kx0j8DvDGDxdMPqmFMjCa69/1mluwfl6rtQLa2OW9WXWSMpd+Ju2wpBxsEva0d/BBCm/rOAFoSDPp6GsCyMSQgyzIfTNdW0T+LsBs07klu/f2vjZ1JWXt7QpM0+8D4J+jsV+xGH7n3p/RC5pFYph+XZpjjadHmQR3zK9W8YD9RQjlDohduMsze8j8cn05EzzAlXldBgPks68zyh9mbdNBhjQLgZtNvSTOnMxKy1BtNWAk5kNt3ROyLMwAiVLFvtdjtKvjefWhHMfH5fEEQhlC+dCXENZqhLl0G1weLKNC39DMv2nAw9xEr9OoEXVlt/5oeYnu0FpYSHQuq7QBtGEuMQNg0Oy3DRChBQ96fyHCtfzKyilIQJVxGx3CDjHxhu13OVFPfUoGxvh9LQkN2GV/1A6dnP516HMsSjzizj3s8l6bKv0WoD1baTW644UWuYga30MpNdODDq3yyQ5Xl2aCj+3ZaKEJKsSu/GuIb6pIdLUqsSaKBwdIWPRxKbMmKlZzplnk5Bf9pBIg4lPNnF5bQZYTQK29pVj5AgwpQkABCt3O16MDkBMGffW6YteijZZWJ00BHH1cH0s4ZELno8zPgNZ3twOpK4z5M6Pn/OFx1gve+wP7WuXa07Zaq+kIX3kYBfG3Di2JhJQA8MVkH3AXh3Ib7ZILcjZULTru9TGpJ/Zc1M4lDgq3mXoAdCpZxHqs5OGYKCTufzt1VN6eM6unTDQ8ZMXEimvZCtby491WLLmYBai06TmWdpoVL1Q9zHnXoeeuTqtCgoNLXU2EpHMTWa7hLj5BYCHNfsxmfAZp2YfO5EjgCOb65JnKu9JryYdxhiEfsJWa4CaOeVhqOUJI9Di7OiPw8A+mIX2aI+QLjxhnycFxsIFVe4j3+Gk+NwZor8i32XJQAVuSGGirLyb3M5R42ck3v4O8DNIZjPDfmtvIBHYAmBPHYs8nKRP+zGdleTcgOTDuFfbLG6YqAmNxqWIBKy8GkIF6KGS8PZoDDyvLM6O8xUanZzf7PXfNjpEwoZ+Zq3AxS10LYqehcqaPVAQ2ZQ7s3znwTRzfbinGqmBn6rxR23XmyIGyykl5P33jUxTzXj/RRZ7RmfXf+NxO7UXar6cHNcU2EXfKz03eMl1atzN/ZQ/8qEIyj5Oy3ybwg2lkB1GkrqJTEGcVdXqHcmk2TjNfCDYL+AWlaUJeskuw3Qffsq8O84Ux/CbKYLgNs3RuTCQvtxu7utCPA3PrQcsjQkLRaPDADZeQYsbLLnRWBYHqbGknL640KSeN4xRdM4BDgAU482zyXU/m24enRDyKRoeZz3of6IzeUND5W+h7+SrtkPTRtlbcPiMZ/hJBVz594qmmRC9rXD+ghR1UnhmKe1BA0LluKkoXn/xIo3ncnXBWpg0RuA+5MTc/5aiprSU+ZAo+zhnr8IZq/K6vJD/izy8eGWdV7uwASFMgIIdMGv7z9MDLhcP9fN53CSaUpFxQwXG19+iWwhgrw4N4zWjyZ54jxTaEeIKSosm4tRHM/Rl8h8iqJVAr7vA0TaJr+3OncD36g5Lf64X6sW8iZaoMcAdNfmc7TO+2xTKDPKHBM5w8HlssV6qWvOd5rnjB/dETDQVIPrItT2y7LEtTvIbpjKfbxx2Infu1ly7TSne3626a3gbHCPu2kdLcyoeA53RGR5HnlEdV2O3Fhlz9CijXZyu14Okd5z7CU6t/AywNFHSYyP6R8Dn0EbC004ypIMLjgWx9vhtyinxMdtxrQmxWJCPvBqGpalmPZ3vDoPMoBR0jjxPDJr8UzDZWu1zO2CxBS+LSNAq1BvDsVcnuKBbWRYWo2kGIq0bpTQYQtXgo2mHIr1BD9P1+7x6sIwSCApd/1iXNzZZwH91IOP8ZHUszQD9VAI0TjLM1Khid6s3t1K+vMjynPnzGIDNsDDLOjz94yfdIDibWYrVndtHUlQ5t53gz7ypnTn/i6s1WdefTspX3lqemkpORctSuz5RhhH9XahEdoIU8OWQAfLwVgFTXDPx+ugSmlsErdmpkoKRkuXrGN6oGiibonMjlcv2Uvx0vAhdvayr0bma+X8kI+obBnchu+wGTKEf2XANfVkY5EGB4MNBFRmuYP37X34iaL/QpVnKDjfqMkDtezoJ5CA/ueZXiYOUS/DF+c80TWM7LhgGxsmELqKhXa6nIjPTgBdDaaLRtY7mpUvkTiHLH/9NkmncddBFnlg8h0CkpvqDPrqFqmtNhEN0/kVkSYMexb6ZHaEqhiiIH+5Ptt6iBE2Mc9VvzHM77mG9i2lo8NpgycHDPtdWkAkEW8ZJGuwvtMmtnMQEBsk155L8N+tBDPdm/AkX3pYSFjIaNLPO3GRj+iWQr6zrjbNZm6Sbxw33fK8DWQIgH8uncsIGi6QxZtraCd/v8zlkLTNdTC+l0Ofe01eYryj7+n8V1r9QBYMft5+tnEFTdjLR1gL/YdIzAmFT+FGy3ICAXeEwteinlh8Lj8wvUm3wBLCvmKbC9uEh7UE9X7jFHA3wsHtxw3RmDkxefIo5KXg8uQJrK4YM/1WB2TaF3vB5ewx1TlXqjy7+9WhVCb8wSAzkBdJjOnZQO/zPZqGFr6PXet4OP2YccRigBY2bNuvYTBpTeHEiouL1BrpkSJIXFOD5lsY38MzXGAA3bsR+hElnFWaxLzNfs6Lc3DZTTA4Nw26upl7Sw8NvuIW2iJjStkIrYlN7xy7QVd3qSANSKBz38oLe/I9KPpGlNbLOZFnLtz2DY1TQARiarcLbQcUFSW6hGVmqWuE6+JVHcO5kO6Iyr6UkZbn6PHNUBl4Pzb4v5JdZrLsXvcfgjGA3TVsJDKOgqxplMEwp6VR7ZOsTaq4VRgLCFvkqrP8I9YHOjplRBXgQZXH/+l/TsxFRZtEnYOuZcqPIR2bHBS6E096ZgYVAKWdXpjPi4qHSZBPn7Ftid4ZXIpQ6jbwmXRjE5IsX14KrXr9IB6NKvY713FS2jq2aCUs5SJ6l8SSq4F8Yyi/WLoQJBxNpoF6l9WCcicYrvoDuNQFexkEv8z9vOsrz4M0X5xVlnmEhrnNGYXxz4omDKTTcEsxWhAqQO7zcqedmlsa73uK6SIPEfZT/iYzcUDLGeRyPVMqLFy2bzStgpo7qeqeAxX/VL6G8jgsTLJ17l4mQPFDJSn4csNyhIMGSgWY3sS4enwze4Yssn59sXeFevc0qGXcqacvozC6WmnsaNbfTbcPAXX8F9Iwz7g42yCj5DSq89bDAmkOEvBRHzM9b6V0dGsNxOYkeeb+JauZOBOV5/Cib0y6gWwJtw++Vb2wx6+3WsI+4XJA7mYDeJUq9Mb9JlVrCKUgoW7wie8uNcooCBmMUpl8IV2/RP9J4qmLkNKHqcDGZrpUZ1ZcJLaygav0sl+vsR1825DhdD6hGdDMM+e4iYkijY7S6/9pbsHk2Tt1Jc3qF4sVR7fWClNYa0IQbATOLZXiCorTB/IFGnRa58dtaRSoIalfj0pVZngJtXgNozvxWkz31A1Jl/XPICYd6ZX13WIB2Kvnyz8EIAqDzzSEbRZ+/dlmFxMlr9ES/Q1ke1/3aEqTxYgPj3hNw3//oI+mlvuFcFe6+7ynTOda19YU2cCI2ire9yvuVMpYn8mXuqH3tdNXrG+GgzJdDdF2qPu1TCTiw35+dnyhHBzjHmDVLeE63n7bClTNVMzQKltzIQvXcWVEChVLlaZLSrPrKNbg4fJBenW42VKKpEcUJNx2j5/QDeTWO97mKNxgUreMepkdQfpWaxYiBkW6Q98N8dZxio394CC87RMeNTEEAgPGwbgjCBn7Ko4BG1RUpAhDADOdfKJkP7V258U9KigZ/hsMMMKqKcq6wcgU+1kYNwHF7SzgGc5P5rbEw3BXePv5QoXK+kRkvMuwqF0rKlJDwSQaUKv2kV27SsheGK2s4EZyG7wV8eXq6RawfD0zUnGHQtKnm/Jhcu+rsjgJtyxi8aqqX1Y2fAtAIDxUEE+SEL/WsMv321Y7bZqg+vUCe/kAyU3feFDycozDUHeH6nMjhjbNE8cFDFwUdZzMBqM2htDn9lrlJfFdzUgyMNBRIym+gxAA/6Nrw5nOI3FY3ME9P45fIYn8tCuUNrdsXAAR/WgtetGKORvbYjDvC5+ZyL0t9UwZpqZ6pnEeqY9FIDBTp619RG1yN8lOBjjL6Q1nDAXlvJkK2SGhS/2Y4Jwj6fiIDcvHtH3uFwufxvW8ShqofLn1elfVpJtQWfT6Z27t3/A4qDrG5L9u/jpK7pZ86EEbE0elhtvyfDPQIaDjkGOx8mLyVF4144GZGBu5EmiSyLutxoZS082//zq6BJWjo28ZDtDirjWnSX9nIYtqzYb+xqpf9SHnJoKym5/hy6mYYj7ak1ZrjppNQ6n3ZR/xhmIgdx9N8ryGFio99wlakk8Q8ywtpLiYLR3qeEY5wGiosiamr010jpSf4lmLNBkUVfp3IZEEDkkhU6wMtDy9Z7z2hyICRtBwRZQqBW0WCtBaGiSW/2UuenNIERIB5T3KhJ5K+aYJD/ON1tpB6d7rmITmQpxhiWvIpK/+y9pQEwn0PXkIXFEQObBATjH2WEdQGaaBnDLlUpz693J2P1UPHqKaMGSSF3iHqwecsEdN5JmHVTJZrpzr94axQBch1Fsic0z2SRFpz6852bxfTGFGF4S+JFfc5znr9m6fRM60Ig509X8muhqMUueFFuHeDvROiGsIHVLYOVu2GQZ5tA0KVgh/Quua4STX9E8NlK649VyBlfeGdncOE66Bg2UtFR/SY3MZGy2bQo1c+LmHcxrfOY8xTlIvVaEiNiC4vr270RopfCT7lUa/Z2sQjYg34jeyomhTeqtzj/8BD9n9DdA5tYeZylxkQnNkW/DBdiIgXXLFkld3QPYMspEaAPGDDJ7Dt3Vd9Ve9cYvpb2LzJrC7qSVYj0+fxUfRCF87kZiemnvT4Ek6Ld82cSg5PtKnTHRcCym0AZL1ccQymSE/b1GOK8Z3gCfc/HvrgeSyNcZ5NNHeKsbabmY1zELMT8as3Ulmr3QgJKm97UOatJhy/2RbsuGeo/mVh8tTYxpB301O6FaM6pOml4STYiZGySOgTv+BaEm+GoA8GEPH8dwkN2qJczXYm46X/V6e/oIUhro4rIPcqop7YirOTZPM5jvUjgv4XwG1TH7usFBbN6awI0PQYwr4vXWHUewzp22H2KKGqbggnTndco3gcu0kFOfn1F9u8TT5VpZ9R7NT4GU7W52nbsc3rCnznLumiNtdayrRtV2eIbWj1dvIoX3zC5+EbvFvcffbpNBRN5PXew0YWdasQLQ8Iju70bbQ+ORAX6WxJdulh7tGliCg1CEvABUu2HKDbgyOOO+GxD9aekOPDgEsHuGC78agYlLLTW+4N3fMgfkALe072sF4X9ApvDHhcm8rgWMTnprFORkPqMAW/mAon9gJU6p20VZyXqsBrtlOyp9icpppa/qzXxHejWI8hHuqDgUFkQU3S32czWKoWn6VtMSW+FpPBPe/UbyILk9sVAGGAWchXOSZe9akKYe3avn55JJQRVjVr31dlqSZmRjlHXdpLCYI6/XRUUy6Dxi8kuTOfLrcBBVXZrR+mg+nqMaFKMCRqqByCNYWRTDzD0SFcMwnJabezZycPg0ooVbyJdfxY0kc2CtA359X2m/8GLCHRkhMpO3SiHhyNohLp9Uy5w4vHY5s46HQ+1tBi8VrZgalZ3tJn8GR89r/Il6+/SpbT8uJek3Sqaj3/DTM5hl/FZIPFW74ur+w5ERr0OadXfmPnhoM8xlURRULHyP1ATYVlZtPZ8k/pheAzOL10lCMZVXs11M52V+iS4uDngbYgQBGmxoaMhRUXRZi2N2dtP4P8O5vn5TCSL2zWCcwQiRWUcT8AtQ4uJitqR8BOhKEKxQ9TQZzP+OHn/Wg0gkNmxxC/t4WIXVX8AxedfJ7dW4KqW8k8mU0UgaFu9nB9Joa9U6TwD2fXF0biuMcBcqIWWPXCuej4yXVZKJYmAszu/7ZnJbeHqPZx9Fr3C7KvLbeAAZ8kTAE0CWFl0HaMNQsFm6SDkBDSuDL1f0q71kOvS1ARSiW9yehe4BldkAkDJAIv7+pV8zTTY01P2WhrlN0mub12VZB6/YiEwkZ5NHWEPu/M893MyEygh1CzZfSfq9wIzYKlVWvdIk9tgUpd8W78aEEg7FAuowDJ/e8xR6fZRMtjwciZFIjfpT+9irz0j0uauCsa1HtB6f5mQ6S6hhsX7yK0T8YDh/RHU92jvo7ZchA72DuavMmkemqTCvFuGj8B7FbxkqgujhoW3wuTfRbDODZmp611xtgfZTKNssfOrbfE/U60x/CNGCArDuPVspkU24xDkjyvfdwCAzxOVc6cUPoAocY15PXsgqGdw0ilo33T39MgGq1ESesqALJuUXZA4fZoMs0Nl2r3qg+KmNWuRNBWvBjvA0oVV1NZmH63xWp6ykxv9DIKXL2b480ZPR/VS6aktnJ0VFxbQ2qYLAqXvfhdRW33bUE7lT4Oxa/+mdRd2t6Eq0PKIrS7xGOhPm/OfAkZWWz0lQkiqXRoVe6vww0zp7qwodHitIZ1lRoJhF/UG05NZWMN73xE0mcqY2BevoDIN0c/PjF2VRxnP0NdIXeLDubAgfvKnMPPfNIAg7VKFNe6pRNR54RjiP2G4IGA5lrJkPK5OfcOSEW4Z2pBVIGCCzcNR7Ze0whulH6FdvXIG7MtajfPuPJD/GyPILTQh/+2Cl2iYFveg5K5/uKwdXialMIXR5PMDEaoryumuQMIVqYsZEZ+WStkKK2Z+3jye0lO51+MQ7n94fFgyeHe2j482TeXShxDq8WwIkGLiOKmrZ299H+CTPSEAkMXfKBFNO3diaGEfkJzQB7nG0Xqe1w7RTTEU7l2xh4JIbnb82bM2KASnzYSudBQ/siGLQURgdzQv80LX047cZyv4A0q6Tf+kY0HuqEIBBGvKOsEcW89rO1EhSRUX6V+VB41CidFcjO8N7c5CMv9M6DdbeVFAlvrzFnqo2OFu7atiV3EOhShWd5OI5dzZE+PVCmr5lmIage81S12pOrslQ0EfGXIbRWwA93OcRvIvpWeVUa8w6fr69bzS7LULwdFeTiNmTGRNc3xlFr4i8zSGGmUVpSOmaQ6QC/iB5lFJikwlUVGKX0dOvCXzcz+7rCNvFdUR9jjsh88HBss7+D74u1t3SnaWX4ehjrD/Gv9mciAdMD2EuTb0Edog0TSlKGXnVKHVeAbyPUA3ECP24sjXoY+tmfwpanF+LboptUFB3KKfHKsABmdvRG50Sze5tFCKImUGJtzKc/r2hSmDi2DXPGMt5+evQKeR7CB/CqQhcPsThb/9IZvMH1HdQ8ZUQ/EhNOOse8slplih5IIeBASRyFXjP0FaG7T8FxumVwFuvMwLTXYDO5NmRJmm52tI7BYYnCTATYXCP+TDAn8/1QahdW2qW2sSWgM5jXV3gNOTOxOEu4k3V9aJD504742ppevLa6mixikantrRBbZf60EgfSIQ0QbFgfrsY/nusnBCPl/n1Is8BEuW94JPwak6LO8PodHTlaBfCMHnN4iBop/dBg1gktWgJRonNcH99BMVoV3BTeCPpNewqzS3i8sMn1Nn44gCbVyW6Zid+ue9o/Kx1l0gQk57GyK4MLYw3SRbs5uA4sGLtsd/y/s0uX/Fc21wHiUHELuDwF6O1dBttJgE7Qn5eCzuIQHfM95qvrYRklfSgdPeGZdg3DlWf7VzQNHGemHs89UTtZQN1TmtZmLVoqaZlhIIDWw+z9BoQNEhVIRK1cT1ORbxR0WpIr6Itd+ommJsRPw4B814vfH5rsROPURTKWjLNHAz3RHb9cv8SZuvD8MGYNRltaXvIHdDgyFlJBIbiYKlV985sMk1ripi+5XZ6pyCAzu24OQ/KMGrPxwpIEQVgKBUfi06t1IgQzfAnJT3GAijUGpTEHKDF4mDj2RrpXRTc1sPQVz54C/bc8q8khkp+KQ6ihjT8L4kMlY9lyusjabHqjeQVuak7Qs38oDHS8SYhp3wXa6xeTxTmkjsBUAO76XI2bjVxmY3/hKqMkApoTlpjCV/W/G1r3+y3xuakzvV/x77Ltt3lIQuSatsXEnCClVfVpGvun8ogc0hBb8RM7ZUz06QgXHGATMNmQvkwJUCU1gX3jtO5Xt2PNLYG8Ly1s/OnT/29A9goae1feXm5WQzRjqM1vds9jug7pM0wh5UjGjsi9LM5fsoKeBvjUINARrw/rWB4a1HA0x0e5OUcupdaL5qyltLMwd05WoKuDQbZD4mLYY5I0/noSS6rjinqsX/bwUzXXOi0mDtA4wakC4qTKTB5w2xXwYcq9NGbfXwQOUv9l5+IwQYfaEdBHGGXawz8L9bnmAhYJLUKW+Jl9Gz05XcEwIBAygb6rESHrySsf5qF9JI3Uhi4w3mTuLfF5GmT/zzBtAuCKABKmMXVg7MXKFeFQT8EL7vBS7zidG0TQry7iMg63Ps5Y42gqWGKn+I1Q6a0n4LGrMqB063hzKZ5npuEkUpeI4aP9bkZhc2VPfBlfJaKTRXTupWKJBApSIJ4EIs5vRW7gGAz2EBqK/4OrdJEgD4IeNEpTM9LmgosKe95b/UAZfKZBVSaqT8p8sq+NDDdKY8Gqfi3A9d2F7mdtJYoB4qgiL3HSyhv6CQ54NnClXO62nBREmUjYhT3TtjUeUByE0voqvvsPuv1sbSIKLbvjgE9mgPv9gUCkdxJtiaTbWzjLIKbaw6DzNVG1WVGVne+cnPkr9Bb839tiIZ/2gaJGHUDSddRSSFCQh9zfqTzoJaINvwvG77QlqeE9/WeUdUmEoFpQJsYfGWSqsTgo5YjUp/GdDoVM/9pvdorRHIUoCUa921VxdStE2MQpzSHWBq59EoJQBqd8gOG41D2BLqHWoXsRd8nzmysDfkuFrQoxf8gcb5xO9mG/ZAwcjzjBYrHmqCFnh1LOrBuQJtmqjYB3WdiruJjLPWpEdvcXkxGssyT53TA6H2vahEFHSIS2mOd2MgKEDF7Th9hH6yEnJQEhwNZuIcHEam5Jxc6w9qKdKLbb5lkC8RqoITZ3C/pVb/nEJZg07YVJTwV1POiDUGGwB96P9BIUpCALEnCTKIGCm8j/2jikNtxE1qwX3Pr3ZNrKMTmgamYRcFWx0s9gzy6HE0XhLpvBlynSQhk0+4OtCKPfm2PNnWRqmuqywD7objq/zL2NbeTeUzzwEQssG3EIL2KEj2enV/oLjGwJ34XlyB8/i9WARVFxfIA1ihrP0frqPQaN5DsW8F3cuBA0+mrhdulhx0sFTuAEq4MZkHxPfbev/4LkqwN0NWUrI2nsjyJ7AzqFoNWjdxD8mCCIxUzLnFQVDWyd9urjZ0rpXJE1d1NaO98+0l2nK7i5e2qIThG3li5lVVEjT7EeMoppgYlsqc7V/h6Ip3X/JUWR7lrhuHe1ns2uoXfIjvfFVqpQf+v0x/FB6vGdYOZpiEO5cltcxsP+pfwwHbeyGkYltv98h4PdH7/0ikTmi1DRE6nBgsw0vPaiMZsW5QEWF851rA4I4StPZZh3m2QuKWkwuj3Tiu3N4oR0OWpBXPh/faWPATMgCjb6jc44Y/JkFLbukoqpzo4kJ9l59761rfFZCR/WRlRXQ4sFKEYMxSez3G0XcYbRQ5tbmOEOxsyE2h2G8aFMm1Y6V80XdtG2D5xPqHXGep88xMGSl/lj3AFL7Hkz/xdmuX2BsRHnuWQuSwWEY7qsfkYImFbucfP1v0E5yXvy4OKQV414SQw1xhfgLAxNj2M8W+M4qtYefCEtfJA1dIubp2xKXjv5lU/Y8DwUAdJTSum85TLfuwIhnaWEDqlDhh/6CC93Bemlbt3Qpy2QznJ8WF2w1/OME1b1Ga282Fp/bR2NbWlhI4kt51o7TnKMtf9oUXtEqFfjEKlEM8n4pSPbxyqE+y1r4B8YgyjbLtebkalcv/L+BMeMaR5iM+Mh8qF5p+aJLQYDzx5nNRfQHQdo572kBiIo3rhRdkSOfoQA6GJTEMEhl6dFJgD1p5tIitLC0vyaqBM/BlAJxOXPVmlkDBJ7Ex+MsQj4hnEiTis3P1S9rj/ji/7FH5Gx57AppBtFIBzuMy7Q4xXTQqBLWZWdAZZQ13iAFmopV/eodUVYP1QaauyGfxX4n5CBUkrmCzubIG0m9lWHZ7kNVQm17bczV7UwGWFltJKM+NcoASqfqO6JVkJRY0QH1gVyPDK0VjB14WC/toIt//O4pwwfUOdzOt1dECob/A9ONJQXh6QKQx75Fybqz57KfDyAAsh5VJ7vdlon/eJLb70110cga0B/l0C8kHfK45CgEn/ke2SQTCZxx/dMgnEcf1l3NS1ArIkKCVnMPnTer0l0S+f73MUJsUxa+Ef7KHe32g61cE4FCzBbYmgLNAkZwZZEzbO03o+gejDbBUNGqLbU05ZmkHxvN1avpD/HHYqK5DvDJEc8oYi/a7d038GM4kplG2mAOCIsRS6Bo+F1XQzcT2osnnxTW52ygp+fCSs/FrItYnra+xAeF1dh8B4uYO/cyomfBvnSJ7TI2WMsrpy/YTiHGP+ZmdI9Z/+0U9fduy4buwN0SEv8lBwCOnhvMNGVnbn2a+gwqXLuZrpf2qS6GvyvfKknnc8m6sMW3GhNPSEUW/94xA6G69SQCN9KVE+juPDp9s4NRDBXr+IpkDgEwEiuSv9bF8qOQsjGeOK8G/nq9c0CjY+lK4Fu2aafj6Lru5q1SRdRwX7VKYpq0AWWrJibKMyAAEElsrqTWayYQt9cGeSeqK6wEUMOVQyExt9kYjqXc+/O3c8MzbckoZai6mUeNrqYXr1xcmKcgw4VZoIY3xVekd/lD0X8J0+YScbsAgRyl48cZCvULiSPj741VcUlEIYkx+jt1/+fboIplvUESv1JJUi7El2CXlsrGUYljyukQa+n6dGhm9p5D70rn0KQ0268p3NSh7zKFO16E6EfYPzh90cqMvs7Ie33y+tWGyWcQNdRtjwf2ZO4tDburT23PQUBsT7nLDkyVrk9odepFEe3xPdOzUt/h6IRhpKQjI6H6UwBvTgrRR8AdWsP2PGtZmvlC7wdmLQk5wMB9rPru7Y7EF7yu2xjhYgzfYQ/nCxKI10ovvqtHE2V2EhCjg2yqHSWL+XawVggRLzDcR0ttXOI0Gz5AmNlzJoxTa2jqlXNQVeqoXQxZWyNcF0cN9jRlvB9y0NXCCzfMbT1uN35FWBFMSBElegMMj2aT4SXVVvk31F3CIKQDxhkFOhrNwiKkNyDxO/F3NSbSxnhTb4Hqv4Cmqlbsy0Tv3WAZ46jLZaL44RrhwZy0MckWo+nkaM2wkuBRJhjkCUNFaXtfZgdPDxdaYuYTTdcR/eqjh5YznanRLkziEBZy0ZoQ37JQNoHLhQJVEoArprvU4E3jGS5UNM0KNLsp5h68uPbv9mC14/4gyM0urp/K6eOlVTGh6pQIXcU1XN4IfUg1Gb7Njychg7cjakvVacsLwHQE0CBc1j5rYlQl278DdK3VeIf6Pgml8M5SPA0IcAEamK/NnbLpPHOkSOk3hjAhTqGAQrfYXTICgr8M7EzKTZviwV0HRrrhy4HwBEjRoPyYWsTcGmxZHtReUHdiWZTgx5cWwCDDkJXFtVV+rKgLcvhRj23Nfa7lDy78OIoqBQca5SjirEzxauvgR2k/8OseaQpHN4wGEg6HmW3zg15IYTiweDhFp8WAmJc0bi+FMVs9etzRseI+Ph8cU9Ll59yRKQ1siSCn8rnQFyY4tQ6oLIMlEk27K/+0TBfbQGtSPR6r7hzliBr6Arx4oN2RGE4VYqB/e3YnXNRF6wCJLRP9tiQRlHYY+k1IrzmgIN+INWqajOcZJBkV9yaKQjkZpBdB+V8eHCnTZE/G9jYo70QSwe7xrfnGCWlRaiPwj0q+YzbjeSTf1xK9z+b7Md1DvykpBPhNENYIILl84OPGgL8nb2WI3M8zFwQa8bNOXwup7R4nAjftqStS8ACvqhLQmI7fztLIpN+pXQWyHnAem3r0xjGeiSTe0ng725SsZbCiybaC1gt6AGZJlDKWPfRstMO3lZqAdVTvNxVVfjKtku0ESxRCUSdNwOZIiifpqWQXd63YmXcvpxE/ll7hU+qJAwpcb/EnL5NyikwwgUnE/nNK2Qck1UUYLGabG8pJcGNDrEFMDk0CZ+OqSyJUX/ocfV40dIvgxcwlFe/qgDjJ+JYhA5/KBB5E7YQ+T1XeqcYkxsrgtQB5ncDuEywcXSecJHUxTum/XUv9ANm1UmsWt5DXITVWcfj9LZxxej1EPj4Wwb3bjT2CllPA7C9btgKOgUWkmu+8/PPuHxg3cdXq2K31mlmFzYEdwdEOm4HzlUpgjk278D2Aep7yb9xllT2U2wS5tDCWAOvSXJwavUgMp/gA/i5RbpO1nXtryFtzuC1VoiX6fbrsnaU0I5jCQ/QQauRyJqbrs96g59GO07rnBEXwAknkOnqfA7e+6SXN43wZC7RvRMGCY0uble0chQK3woGyf7AVD/KqT6uiySLevuFxl/RZXTfV10x35u/VCXIINqR/vj+qDCdLJLepjQTBWcfrrlHgns1wVTuxv1QR25f1m3PHdLB+Iq+NPa37hToZJzdiXlfRdHNxxqRelLLbusfKIboCXYyCc6n90h8rKvLEZKKaBRwM8Ne+hQTIIiFZXaeiSwJd2sU9vz/1mqIhE6j9wbv1WAeKSLQJvDIJh/PD4jTD688lsirS6FbXbatZH6JJa1BF96T9sWl29qcQo0grCziIlL0/8Q9ORf6DfSnRqX9yS/3hjGlkNbG5oUfMqfWPAZKeWsFp7FKnRgQigZ5y3Xd/AcmbsJu3SWEB+85rnYyE+aH5OxF5Rn7WQvvxq4Ac4IpBBZG9KcKlqmqOiqIZcb6+HIQPbBF8+P0mxAM0jNAEps/026u7Ony6eov0ijvtPrBm6OJqUleBXUNP0PN9D1JsqqiRSLnuFAd3SI7h7McYoUPxB1+s9RX6UepuBW2jiwKMwfB1GFEpIvtDMXqQXn/kFoQplUZOQyipGhrRoWmhk54S9+H1eaGVaaU/S72lP2MIPlIfB2d9/8fr4aGKkY+vjeS92A9eZCjm5dRYxlwZ5yY3fN2YTtPt+j4GzTlGuzqIRZkE5c4CG2Fqeb68NhMC1kBdMoSAMNADt7YpFU+eh8zGpsuYPs4E8P59tCgN2zzvzx57sGZBxBA+gsr7QJWWe99oYpVJv01/bK6tmx/14pEUSil4xsrenYVJPDeOlrUhXmz42tqcG0uRCI5keCektmDAw75t4sjqJx9P2Ci5Cq5WMX+WIex4R6jcbu8tsAZm+m8V6nqj0eBcQjZqFTDymhXEDgx0alA4Szzj81wGcJlKe+Ut19f200fVO34T2RMDGp2yYRP7mz4Rt2bWSsP43SJlako9SPnrxvw6RpJg/9YW6I0GuYTAHtbjbGjAqvQgRv73Rz/SZFppCe9uZVcZBrcyBtEf9EOLuxFQhrl10yQ9TfuPeqOU1XRsjvBXBrsQRMuvSCU6AzHWpN//BsiKZgH7ACD1Nz3sh7vvcr1zpwnk28ObHsDaBBiFDYii8sR3QI4U2ZRWXh9BeY37IlVsgc3XmgCmH15i801yf4p2044Zh36sVvy5jxr36rsX6dN5UOSOYkKHyJJFA/lNO/Pjomh+pYgSp2DeFxVl8XLRG+laaNRF3bjyzmpbzyH+UzgvvGdquS/XiSq+uhsG/fk+Y4s48mwmbYCEaioBocsNXRyTsa/3LiJLdQDWkq8FYZyNBuVjZ3kq4xcg6olqLvZQ2YPWfIM6V8FBLOY6JuWQSWM7sc0XOSPfucx3Aufv1Tckw+G0bFQTzuIqVgWxzT9rOPnjazDKGLxtVXK7XfXXeLUasbOL97qgFIXTD30SAFCb2OX9Uo7D/BtEtx4iY3UxYBO+ZP3nJFw7gKgICrMmgifGC2GbnbljjLzdJ3rxxYLKJ6XBjccNdVPBf6Et5t5djdPub+lIU9ZFAdapEWXGJdjpU2uhcaZKGecqI4+IDA+e5JEWDFdQc4hlXxZKx4myQRD4S2DmkAOKzVQL7o0zg3mOEYS+cNvyl4EDHgF/gOiD4trFExQwjJATcWC8x3SfKwy//GwhjlS6zHCZoCYS3Vfr50SnKHZKr0EpBcVLfJd+tpO6o2iLRQaQTpi9Nc1WiCB+e3I0LeU16syn5X8ehJOt0fekmWD+0aEAq7O+EpsWXm+8K1lom38W9BjeDHY2ZFpCi4g9qoiGA9JCTyu3NDX4SN1z8LwRjgwxxD9vCxB1jUsui8Xyrqzv6gFtcQ4PiyBf0h/knuE6Ae1WdLEsv7SJ3UqfswD6XUvpHRKqGDIN9k8WHpB668WBXiipX5Z1/0wuTw9/MbN/psD9XYWBEsEGZDFALr+9WGlzTXCe/DKO599z1KvKTwQEkJ2JBVjX4k8i1mpPcpsvrqMbe8rL9Kxoc1Vg8QLvJNKZh8AcpAep/yN7XMlwgnX40z7V/2P1VcKO0nYRxk5YblzGPsJLFb20Jab7Aspo0Mu2jVrjGILP21G3z2cyR4gyUNzX2DNHsiwLq4FvXf36vE8MLKGRurHujThgf7ForzIpI+jy7Ei3/7pGqXcXimsh1BB2VsIZ8zsEgc1oSf0TCnu9o1q5pgSdIL/JMBXEiKgWMTbPJewwAuHwM3o3kw7DytN91e5rig6OS3Fi8LnNvi8MTpBYjZpPoA1fO5peULbhfpBDKVPD+G6CB+8C8yCXNdxt960LIBlGtmAdAqe4CGiJ6Udsh2UrV5Nvhsf0j7Y/D9y0nhHq3iB4X6Ro62SZ38HzsacKZHg4ye7oG01Yh3zdGCUhPKlp/ZjETwAfJ0bDRI/8FGl0nIgh/gSSiGrexsDdJOfJHjhhHJwO03VYiSA4uORwTxMVC8uG+WK2JbgLUSgWpyO1b5Yhmcf4rsK4K7UDU78bqhSXuKbi3hfgsHRTOc8pQJUUcYVtFuKFDr3DFlOlB7OSLbuj2godTZn5d6bVBGd+ijBfXvrH1brsEE6f0j5e1KEttRPG5OdOlZ86dGmXEobCeUMEA0Sa/RinnJ9pjGebIH9yErDNAbotLeSBybdItpt6LmJ74jX7GvNaONGRm/DK73S+UF7sHsUX8+2b7+lIkJeQDF1HkH6yyaYaGevo4PjiGng447MQ9XWKrAcxKXYqDLTsHeALTWaMC674ooDA2OWYG8RjBfZ+tF9DTus7hKVeo9qrP3uBKPYfg96ldFLx4l+BJa6a8paCkRJXrrGdb4YTRRCobHLSXRgl98X/g5SV5D6Y6cQd9vQhqJyIvY0cjjiW1x9KoMQCj9NoZlDhHmCxOz0m49+LrFOEaDrzQQAYqcryH+Q5v6AiQqNYGLLdu+/gn2HuwrkSXM+gnSCYh+DMUN9ocXyjwsrZec7hFpjUWJ7CaD4Qr7ARPSjvpENjdgyOKyv62YuLdN9hH2xDi6vbYlJxy/fFBNbCjFz+S5vsTE6ZuLwERxXJyayQ0l/kiNN51JT7IHUsXnhDptogGkPAdrxnqTZpktTupoyCtLMTHLMNEOGM7stUN5AYtzMtyDQHvLK9L57SgQ9zJyOKPv1iFt5I1wB9hTtkXpAdmQ3UxuhDP4b7qfFvxtDhUndo9pRHeXQKW2dJfYdZ+IiMmouFaK0N/K4lv/GKlvMOEvmuyMVjxqwoStZGbvMCq/Zo3Fvx5piPzdnZWcGb1mj3LEPxJPI396qLAG/807CeUFCohjVD9ITR53pClzn6EjH9OUojUZvvFsntiAKHSAzjBtSrof5L0XYwk8c1oNYuaZqQ2zHFh4wo5tb3Nh7/XQWG5vgXILZxOVbTSMA3Rr5kzHGWCfut4LAIbacrSlpbYDTPEHjILWbnDvidSGf+dxDnBlnmigmUJGwixlaGruVpf8LfPyCA+5TVx83lKFkPMb98HZVXYBd/V9bd7DWjJKvgr+2vrl4ycN1oFOdFaHDu+DQPH5gFnYBHLVuXespfRZfqOaspkZonz40JBG4mz4hjZ0CBzFqWTA0ISdU8QBFjLyOEW3HxOVuXGumfi39MRr3pqflkNXP/KCqFX6v9S8RIiJB1zxIvBtWvAItQeGn54fOEhrWEhUGq8gJhcECvwdfpKiVxFZJL3F3tV17gH6Rpd+SyOekliCd60hmmwrT/A+HhTqrxFbCSXbpB1LjbpU+pS33Jj6bzWhtepPiEsCCFIk6PTYAbgpBT1WOifwSpYfBUDj+yvBOsIsB0Xf5NbMio4oPYN6FwkyefQt7vtZVxX0g3jeamjL7adszj7XHLEN4lfzR6c+90xItzuKiJSWd6RBuZe8ePHT1pupmjK4E92S23TWopXYGNW6hVscHyJpjLljDqhWmpOoSAIcb8pmRgGwdkq1hrYiZJusHT1f4DbP3/mouLoGYlQ/3s6J2iQLw5goK4s+Rd8jrhb4i/GQ1NjmpnIZTUkHowqxZs3KjwlQBnQHqV9un+A3yq4jnajPmtbj6AKWycYrfOTK1N8C0sz84Y1+0BWUKJKdxPzk+KErKOsDiWKjfUg8Y5rk2SH1LXqejTHGAwV7sSC4KZShSW5quwm+pHYGMEo5zKkQ8fwMa8HbsK1bZdIkBKql8mEyQh62q1JKMCZxvBGRZhDZVZbuRlwucJhFON6EDx2qF5L4pO2P4Sf1UhtO3XX18nn3PVG3w8Kzf33PjUmcpNxCVM3UXVck2JyqGZ/P6iLNm2nTbl1KRMttCurWbStJctEYdqK/YRCy2bq1AYhraqQ3b9xcBUyui0yZc5StfwBZgZ+pH+hD9w7R/mPLvFzYLLGwrWYptHy+iNgXiilei3DqVjpz2dS6wkbZFWj+3CMEjv6UosVpz5wVsS+jynp1ihWOC1HXZoxuCOd2b0rn2PyqjXjUkhZgN6q3xmI7+vrkWtDMl9lDx0YJeXSEJbBdEL2Qj9mZ4V+hV8kZLlI8NmAxe7BxIHUq/e40eJ5ZwaRrzUntkGqSK0xtjljngULSMDb3xynNcOmlWNt58M5POyaHzb2WsyZwV/mJlkjJtvrtPbOsgOqEuzGnZD/bR8DgFfPaRsSk9iPkrQQLcYPLoC2DtSECXRwesogd7xKzCJ9z+Nq8nVtgytL4D08YKQDmRPJlZr7pyrD5UurwVIrvnoiyJK7Aud+X0jenmbK4W6cgs858uLEXv4NUiJrtppmrwMqr6IAmQ+gXR2LjkUnOKCXQiOgskDazrhVt4p08e7UEFHsbbUH26zY4rr4S9nMwOGAVIKzXqNCmfq41mDuzzFYHwOQy6BNLVLH4e9W2snus40RVTkRwC/EFJH1jyQj7TaynOyctsIOR3rQSpoKSDrl2pzREGRVghZX7ih1kxvEGoe9TwNUcq+boNYPZamu1YUyWeUEJHqDCnQG862oGj3ZvtUfFS/ULjok97mnwvkd3hMgO4sgFsEWbYHr9QoP4O/IZzw8bSYxJyC59FQ+JQwzd1isX7RZ7eNMhQs/li8jc9AmYiV4HXmAg2CqLU+OQCWloIvhx9iXkVoHucDGd9PkNZvofisIfH05L5smVf9d6JHUSaCGc3aVvRFMuTuipjZJTJPTT6VwIfTCCkiGkdhA6CbUn6tN/+z4le9n85D6M/qEprSvYz2TJ0NYBrkHYclDaQpJyYgjib6fjZjz1Mb25o/4mi199S/iq3fEBQ1EVdiMMCB1TGd62SjHhzPOGjC56YA8AKDexAbP4N8ysLZ2Vh+cwsdpoybxTR7/AuU7GE+FKYJ5OQq9/hJ9EEkEwQ/taZKeDw3WpiGa6aRrtVgMT0q5rXt0U8e6Rdv+32X0UNenvRsIMLs9v2M/KNaOIYk4MLUv30rtvL+x3ya8JOhRvBKJM3uYcpUTm27L5jQSvHi7PB+sXJeoqpIbFfzpNM9gZJ9TVyLvpf8DV73WKhsQV1cX4Sa0PltQGQ/PVTN/6AN0qiJSLpC8uTRk02CBHjTvaDF8wJbFHjS876mBbgO1pkqzSlbIUhAOjY7Z5VlcBJ6KJCzDuBVqzILl8wa+6UByMl0LKcL3V3+OX4bCScc4cujf2jwDjjOxqz6q03aF2BYysTF166MJNzrVXdv1xBGeW+FT+T2R4YWaY0uGmFKbjFIaXoRImgFGSmOkfJbsVQs7w7LvMz5pzyEho/b6mrMWXkI2wBS1HF/Bsul5YCfEHR4CqY24JU6d1gZOiGDUsV1Nm1XM4nDzzvUj3+kRe0aPhBmtDRDjcwAzNT3q86poF5f8GZdsuGYobBXhY6KSVk1zyhaIhqm6jH4CZ+RVjrqljbvJL9nYPxXlAdaWtx5qet5zG+nwaP1l/JbOGS5+2Xz1dE7IY7enS0UvsejeXM/RtxkWSWGg+AuuNUSXVgbU5psrW09kNKQiKe8TvfihD/0jHVGC1y10JWJZopyuJ2nU2SlUvpOU4mh3k5ODEbNAIgWU19t/NZ1QiFbzicbkpfCjOVKUZKrt409oWb2hVoFqP16iNqd51vx/Tg6aym9cF422T2iQc4RRYy2GQleXy/r0/V9LtC+nBK8ky8Pj/Bx3sz1IgALo/GHDPxKBLzvWmTF6HkZIZ+EZT67/HphBV3cYTxh8JOkNGiRlIPG9ATFItknsbDYA1OdZMOvYlwbvsvQJZ1tH//Hc3jAfCdNp/i55kEuyJKZitbM2rX5IxhdtMSac9klnBXpTw530jee7OxEBVb1uJ0zRv71keGrDRyS5OdInR1EY2a3rHZlOlGMH7X9FRA93hmuIgJlbvpOckDuR7tmUjk+mUgY4EZvlVQVKusUoDltwmk/czTektBMnitvhTN5pMNpyJ62CoZ1CLU5bR3DClPZwjZJIEE3W2qjmWWIe2ONLMBQIrkrLDP6s+A3QyTi8pe+X947Br8EXKVPIDEPg84GH61appb25HSP+dpI6Y0U9dmx/d7OJY8XGWHknnSs4gJTPm+Kkro+X11cINf10PatOFYYrd7MfLqukxOk2nmFNotBV1ZzG3Oy+jYFgRsRxgJmAFCCiBFLkvIrlJEJtdoiKSrr694jGWMvmQnM2Re/hXIg3Eb7aE5Ri8anJMh11G/3moUlz9huIOLO553yYo9KFgfJBEuSQzP4MprQk74K+T9sjgEFIAFd16iGaghRBgXXBPk9QyJrAegX3f2B1808ZDJM6P5BLoTRjCVK9BWpXzgsISKKT5B00IHtt+g7D+zPWyep2/MfMj8Dr2UFM1alwdjFQlkgwgPbA11ssSduzwFbyOxM+89dV4bYSCWLmIsLIy1ISCSribkIxz+EGzD4bo4kNx0kI/pDBYius5JZFx5a9axHJ3zXRqDwhXQfxe2m+EApfzy2lepK898ZCno+BXwhx/Iih89tuuYg/y19zVQ28cj0GHoO0lBim1BO2GZ2QNu+mQdi3JhBra7f0l3c/cbD0AQD4cgGXa9nTbEVT20JgIWnV1ZIyVsKZBprtIMMGZREXzuHTgkybBHbgmW1o/NeK70pes53inTFzszPTHLuF8xLKeM1f7gd7I69Kl3v8C1ttdwBpa6zhsy8yLnejxSrsrNAwYx26dmnBPzs2L+NnCf7oJ4YVxFrqVgIISvmJJZC8ahYUsmGfMiqtLRGrW24I1oQ53uEvDjAjH2fYXgftfIaAYHqXQxfHlCdgNv3O5nAxrJWGUvwY0vqbdr3WqWkf6rdIiw6hVuDXYkEJs7rJGFdwQ3ht1o+iF0Of7vPMrg+g+K+ojHwUWy+Mge4oHQwVaDQ7jY3/rGHWErCosRNGUGipYCEw77XjRfSPajaI6X8FTD8UIEDIfiH/H9irWsBQyl7G4LYukPCf0750uO3boLx3bmdoD1hvDA8TN8ma6HPSJHrBT5ywBdzwe/RgAS7kC2hGRZGSwVsj8v17ADmBysWFOgVTUp4ugCtmD37TlMdtxNXAcG9onP/E+YqMJHn6JDfUegXwrNRgo6ZLm6v3jt+jNEunGkBq2nffx74utg7sA2sMqJ5pLkSbZa69X6bcZPoq8GD3gtOGGP2xdkQFADEyc5p7VluVAx978UoDYV737EbUIiXYf+S2FVqpCe+8wXQYpidk0Q5QrYPFBu65SB8cth2GaeZBYXOT9VfEqKescmWh9fgkODSw3+tBGdgcFtGR0aGYUULditFIPchRTKZX9/Ad+vdX05mIn+dxc045D8ncH2JbAxJBeOxI+HRjveP46g5H1/zFWzLDuR6JE9nmb9yH+COhaUdzPUO3hEi5s6uqj0dP2D/qUIVpzsTqJ5phLDShPsZsCJSn4P2Hd0GyDxnDcawKssfJWan04LFXA47JeooHymsCcJghUUbB3hTQXYQP2l/Uig/khWRtIAPG8nymqBPsaHOlcbDln+Spn8PasALzfZtMS9y+ZMuZk3Z6Z2NfEgQoyD7sF3+sQ7IsvlwN66jwcvJiT9s9eNjBBuKnmWWJMrlDY4UYqfZ99fL0bsZx1gJyPbebXDMtHKT7jZiyC6+HUGSxZGPSzmzJnd8x1kuMznR6VjClcbm3uA9LIMoUwNGh8g+9rdpf/GGMW2PMDuLi92zm77EdA88q7nmwLGkHkIxPMtyWidtoosjX2FT8UBRz3D6iSxXm+VohuJoGTg8Lp/0uotr1qqrDFKKeJL6m7fUrmsq3CROcOsJTnz5DIdWd1SEXpcxFawaRK36fvuQS9zj2m8b3U0qXt0Sj6yklqFFbHE7fdSSp86Jfst55iRLFrcw4xx1T6jpSppfk6ywRN+KBhtXb+nxTj6iL78rQxr9Mog3R3US+7vy+4xDEP+UA/fuXAeayQt69hMiG4U50GhOSQhxJ8ApzO06h3CeCeSbVNtr96ofTBqmD7VnQONsQGp7TbhlFBVKFYW2uOpLDqzQBe8GmkmzrZnfppd4O34bRGv9zKetDUW22qJnUA3VpfXJWtbtFDcp/XA3xYapdIAxTd6y8DZvahYVACDH1HErPTyP8nOGN9SWcPzVpo+qboDdxItzneZExh8Tjej/D1XJrxvVSdGyz8WpZYtWTj0UZgj8orgfxrxPQli0EzDwksZjnZ9HCb10IonQdYmJs0xUb2/uC+79PRtAUOkEb1YQJAOZPzeztw7vmmTqhuCfkS97CX46Yv6pVnMQhwo2BCkuEQr2lSvFQL1UBogA6IrFWW3wXAyWSqRirvuoE0nB5RykZ9m+5+tTFJto6vCOt00vWDzeEscnCXgo6XHrj9+0ZRGIrOnYkrfTKhOD82eWbyfxBYJPWTNxobFCCVozE0Em6jjo7APDonxGvrU7JhD6bu6R/HhWrGAWlSgIhY/TASNbz3Ia+moOAlVAMYFpgQlpvGpkH081n8F3oGZiUietlfVwSe2q8EMqG//Vufxbi0caQ70Cj5SK61sQfpiKUfjMUu8IO6l/4V+zjqIVSlPmdYzuOiZdaZCEYbyi1K5VYUvLATkKNbjTq0IgSVY5QPLYQnt6RdTMy8XjLV9iBqExvra4gyvbBSh7E9JssABDiQcyeZc+3y8Wl9XTCYJKZEG2/XhALHyEXWmY3Gd7CCazMyCNq/+/fu/cwspgIcztbI+kFSn8uEBizfdg3W0tGnlQlIF2bvHoVnCBfdnQ81CmSOnNpwBlBfRN4zxup0nl4mPsGJXq8LBApz5aUA10YtqfxqVEi0zMbjoMT4KHeR5b7BVyHYa3N+fQf28og5kLfnc3b5HchdO1YOF+Wn/4UCeYEpalGNp7PMwZqPeu5dnSDOPUZcaFPZxQ9zzSYgIrd6tpMQ69EP3Eq2pbIensAHfeI1jDAHhOGSpegD453J5A5KWgQkN5eDmt0H3gtRnSwREXLE0iD3DOWaDb7yTb1TVGI2kJIwNeG3EZ27ytJAt+lE43ZhxWXs16nlEn2JUXvV/YRb0lkOa6bIzCsq1AVV555VcyPNvZb9PvpcNZurxRvYdfMwkO+hy2WG7k2YemR+r+bwfitwVSmCr3wAu33QMEHDF377uINnvvHe6OszRpK3J1bVjGqqE6TzuBFCm7MbBnTFa7UBRjrGcf1bqtS9ApTVHfTJ9Hpl4FAnMXX4mVQPfBhU86kmhhxyUH6tPGT9hwZjLKC7g5XGP+L458YlmIeacJmCtvND8jzymiTDu1u841c73L9L/kO9AZVNhSmgW/V1W12iRdQBMnUa/XmxI6/J6HdaeboXP2zOHYPyi0gZHcaI5wZg8fLVNwsjDdWaOpRJJwWfzWr0jvvp/SdQMdvsc6fxNr3X0vLicma9mj+dRdtuGOhlDGjL8dXgEUuUYdumHpht/xJyYvVksIA80GgGp9c3J4YLXKaizJFBUhiCXqEAW8BCmGuFosLFoFrqPnScw+MiHpzjZFNTG8/A8HOh69mvpANkgJQdoUyQNihFlI8dK28+bn/vqJtZBcQjBrEmy7HrxmS5WsjCd+H8+zabdQPcSOoycw2wnh3k1yhZWYcIAiH4KxVKy05iTsEF6hHyGpRm1t+pPrknMt7jS9Q52TRinedrRhRLjCsvWq8/ZJThbI2vrYGGVuJNI1e9UInjNXwr0G3u2WkSyfVd1sdtXekD1vhdbl6yzAyCdkOCAW1T8qxqBJfutHUC7ayjtz+P/SYZlHX8HePtaUm4KA9wzHzON8wvSZa3MZ7RUlmSwXKoLdUwAhmjccx3XX4AZ3xNF+8L/4kGtQY1aprefi4dGEe5febhz4ltfMlo4ud139WXquk9tmBrhdorASjZI/YTEA9QtYA3rJ3yBCxFRHqwVR4Spb4ZhprAYByVMTvAlg/D9rsKZCqIwhgg92Q576b4mrA6MkwrfEY2fbs/oQpA9dNiNeLIpbrJyP7WskPioNqJwFjX5I+oIY+LVIPl2JQlHAx/ngSpN8JPvZxxBveGj2ev0BJA0UtfkCU5h4WkcxndOCtO6II0YRwY8B5x96emJNA6b5twIwkmOWS33mDSXdzDNqg82hI3SIAu75m4a14v8JkoBDo0gSoLzW+NvikugwzIPHrRhm79en6475isr4ogZ2RIkey78oJ3Duig6bSO855R4kD67ut0w006/POXBJHbqSoLbVx5RSUSx95/kJ7dxoOuDUNRm1kQv9zm/zHJwiIFZP4p+Td3k1Z6N1WjXwbjwIcZZTQfG1lqzRkw/Xsvb00X8yh6LEw4RBsaNg+BaaYorUYZX5C0sTVnWevmN23uZFgEsA6xvo5HdOH2voPJ3axBJHOXypQ8Lj8b1xGB4YSQm1qAinTVNewVpuPVCJgeUgx97HYay+b0K8hGNs7SmdSlQPuUgUFnY+l9LBDl6gFOcGm8V1zyIvTjJUSBJl90JL+d8bbdora7z49hcLYPGLDVEsKjb2uAY/+nNqYu7iGzsOpPW/1+FmP5zrSiNtV4G+M/ERS/qR+56Ll7JGcLMV60H1WG0I2Qz6rIfA1/BU8E+P/9GWriygKqv3acYq+DARP/Y1NFQf7pXJCETzzRJNCPTCnw3L4tTxVHMkUpEDTvXeYTKo+PnFz15HsrZADUhbU7H9xqys/FSoq7+4FOh6tsiS8tQCeR1g1CAZ0SbtQDx5GuV5g8T9X1ZE+2AgFxzQGfCzrhasoLRpOe6OzX9nzGR6ho2QLBoF6FQMHC+uNc+44jWspVomF91hbNNBZKssaKrhbbir2eTwYwlpb2/fqcgerUYID/Pt9OQKKze+sAvizuOm2DIWVj6Grp4+M6EAaKqrJE1Y19LtsESGXU83GujDMEfL1BTKMXW5PkwRObNlfKMS7H0fA+YNHIlWtz9hB+JQ0byD0fZDzL+4UNyhfzK6Gxt1I4m7mVfJlsaKHAvvtmiz5e1TOJ7Q7QU0aFDU3WeIvGXaT+uZm0eluM7CVqh22gYMF8vgeE6p1ind27PxMUNcw0PSq/7+jA1G5cy4tqzT7nVVq6480VHSHeoPxHYqXqHpbw/9E4XOkl3S0HiWf217ErpmZzg58P/9EDp74YPRIL+ii7OVmSvyZLzDngchnDw9mtcD96sQ6wWV0eioIo/Sj+lETKG2IUB1TBptNVlbDBpvxJN2TbQT5jHqzz7wgGvtbK6dn9dgwkPKquJoZQmDE7tLLj5L2HwUDABdUuclj+iyzNrdY5XA7jUUUsQMbQi71im0r87yWzx73oTzi+Q5izNz0DNqX710sjrplUkjvy5geAqayuXeN0GPWbVn1IDx1LcbpobC28ymkla3YkJnf51iKPRdw474vkCSD85gLjM4+/ulpDJ0WREJQ8wA8jShEBPIoCD0TZr4bjLztXDR/5fevEsce/4g817yvob3nPaNKQIfxPRygV8g/Assx8ADcocP+makJ+8kq4IOrD71J4wwySduQJc6YR1XxMmoG+dOxs4UIzlOOiXs3KTLI8PZs7QUK6+lIZVb9mfQS/D0fHRuoMHFNa8RNGatM16/xDDdUa0nx2wKqX4mhKj4HR/1CXFnVymcVP8jKF2x18Ho3YdmoLhoytoAM2K8HiEcPHRyQQNxGhWYMVwdCFPT5s6qc9NcwKVEsO2Iqr8u+UfWdR7nDk4GDP/QTjmFueas8Hd4zPTb8IfCevkAELbq/6KiWP8dyxxJTEhOtqNmxuN8w5LnMCjEbjLtlYGjD0FAqnhp6b2b4/oceI1rdQykmT+F2vVTrLaa2q9jWPE/fxTwnkedfBpHupOKA32YzqywZHPnOvaZR/mPbv2I4KemWJUSYpleQAenem+x7wdIiSc/mqjYvriGw4lVMHp+jEX02D5O3EyESklb03nbgbicI1ikGAhwIH53I/5MtcRkSxfKVIJMhQ+TRWctDJqpZur6S3cvP2SwrV545mu5v5F5Vrv11yUVByeBk3oUs+TTHWt1G4k5652eQqb/3FyOhV5EAtt8abhYhHL3k8ZPJRaTBa0LdLuCsAcsDhUy7PrbHqv2e5yj5FDHySk13Dkzuijig1fNfYG3nW+1An2Y3SimMwo+Vl9hCrfhwhR5dvL/ALtI2k2Cw7tpspaBrhsq1wmZuGVm83x/Ml+GIgPqhI/iPrzFPiRcdO9kDCJ3HmJTDoU37DFvqMRtYahZDnGd9d0Q31pYY1hc6fTEoGqdkYRiPzZtq9ZQlg7mRWTIrEtlMeYF3HJwJXMIIU8BhTHDTL0opxpjlWkMny50M8GV/rhKZMok/VIGHgOzC7LUnMUSC1tSEktZm8UzwGV8+zZzDThRqsIu+W0VW+6gXvWigU2Nr/cHym73SDeSev2W5puA1ZqmCv3aAxJscoW35b+GvXBjmjxPDjN9K3EA60Ak3zuwMoN2+hmNvxL8Fx6KNeQOE6aZYsY3kf8Pzu2dvVt8MoBmfQiFr/84H7K5FvVX+hV/MNL51HywR10qH0bin0UixfA+Y2PJnzylSPXq+Ai0gHKb8ESIsaEKIX7ehfDdFo0AAAAADNe8VD44mtyAAGyoAHK5AIC2ugUscRn+wIAAAAABFla"

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