ansilove.js

A script to display ANSi and artscene related file formats on web pages
Log | Files | Refs | README | LICENSE

ansilove.js (283096B)


      1 /*
      2  * AnsiLove.js
      3  * Copyright (c) 2019-2020, Frederic Cambus
      4  * Copyright (c) 2013-2017, Andrew Herbert and Frederic Cambus
      5  * https://www.ansilove.org
      6  *
      7  * AnsiLove.js is released under the BSD 2-Clause license.
      8  * See LICENSE file for details.
      9  *
     10  * SPDX-License-Identifier: BSD-2-Clause
     11  */
     12 
     13 var AnsiLove = (function () {
     14     "use strict";
     15     var Palette, Font, Parser, Popup;
     16     // Fetches a file located at <url>, returned as a Uint8Array. <callback> is called upon success, returning the array, <callbackFail> is called, if specified, if the operation was unsucessful with the http code.
     17     function httpGet(url, callback, callbackFail) {
     18         var http = new XMLHttpRequest();
     19 
     20         http.open("GET", url, true);
     21 
     22         http.onreadystatechange = function () {
     23             if (http.readyState === 4) {
     24                 switch (http.status) {
     25                 case 0:
     26                 case 200:
     27                     callback(new Uint8Array(http.response));
     28                     break;
     29                 default:
     30                     if (callbackFail) {
     31                         callbackFail(http.status);
     32                     }
     33                 }
     34             }
     35         };
     36 
     37         http.responseType = "arraybuffer";
     38         http.send();
     39     }
     40 
     41     // This function returns an object that emulates basic file-handling when fed an array of bytes.
     42     function File(bytes) {
     43         // pos points to the current position in the 'file'. SAUCE_ID, COMNT_ID, and commentCount are used later when parsing the SAUCE record.
     44         var pos, SAUCE_ID, COMNT_ID, commentCount;
     45 
     46         // Raw Bytes for "SAUCE" and "COMNT", used when parsing SAUCE records.
     47         SAUCE_ID = new Uint8Array([0x53, 0x41, 0x55, 0x43, 0x45]);
     48         COMNT_ID = new Uint8Array([0x43, 0x4F, 0x4D, 0x4E, 0x54]);
     49 
     50         // Returns an 8-bit byte at the current byte position, <pos>. Also advances <pos> by a single byte. Throws an error if we advance beyond the length of the array.
     51         this.get = function () {
     52             if (pos >= bytes.length) {
     53                 throw "Unexpected end of file reached.";
     54             }
     55             return bytes[pos++];
     56         };
     57 
     58         // Same as get(), but returns a 16-bit byte. Also advances <pos> by two (8-bit) bytes.
     59         this.get16 = function () {
     60             var v;
     61             v = this.get();
     62             return v + (this.get() << 8);
     63         };
     64 
     65         // Same as get(), but returns a 32-bit byte. Also advances <pos> by four (8-bit) bytes.
     66         this.get32 = function () {
     67             var v;
     68             v = this.get();
     69             v += this.get() << 8;
     70             v += this.get() << 16;
     71             return v + (this.get() << 24);
     72         };
     73 
     74         // Exactly the same as get(), but returns a character symbol, instead of the value. e.g. 65 = "A".
     75         this.getC = function () {
     76             return String.fromCharCode(this.get());
     77         };
     78 
     79         // Returns a string of <num> characters at the current file position, and strips the trailing whitespace characters. Advances <pos> by <num> by calling getC().
     80         this.getS = function (num) {
     81             var string;
     82             string = "";
     83             while (num-- > 0) {
     84                 string += this.getC();
     85             }
     86             return string.replace(/\s+$/, '');
     87         };
     88 
     89         // Returns a string of <num> characters at the current file position which is terminated by a null character.
     90         this.getSZ = function (num) {
     91             var string, value;
     92             string = "";
     93             while (num-- > 0) {
     94                 value = this.get();
     95                 if (value === 0) {
     96                     break;
     97                 }
     98                 string += String.fromCharCode(value);
     99             }
    100             return string;
    101         };
    102 
    103         // Returns "true" if, at the current <pos>, a string of characters matches <match>. Does not increment <pos>.
    104         this.lookahead = function (match) {
    105             var i;
    106             for (i = 0; i < match.length; ++i) {
    107                 if ((pos + i === bytes.length) || (bytes[pos + i] !== match[i])) {
    108                     break;
    109                 }
    110             }
    111             return i === match.length;
    112         };
    113 
    114         // Returns an array of <num> bytes found at the current <pos>. Also increments <pos>.
    115         this.read = function (num) {
    116             var t;
    117             t = pos;
    118             // If num is undefined, return all the bytes until the end of file.
    119             num = num || this.size - pos;
    120             while (++pos < this.size) {
    121                 if (--num === 0) {
    122                     break;
    123                 }
    124             }
    125             return bytes.subarray(t, pos);
    126         };
    127 
    128         // Sets a new value for <pos>. Equivalent to seeking a file to a new position.
    129         this.seek = function (newPos) {
    130             pos = newPos;
    131         };
    132 
    133         // Returns the value found at <pos>, without incrementing <pos>.
    134         this.peek = function (num) {
    135             num = num || 0;
    136             return bytes[pos + num];
    137         };
    138 
    139         // Returns the the current position being read in the file, in amount of bytes. i.e. <pos>.
    140         this.getPos = function () {
    141             return pos;
    142         };
    143 
    144         // Returns true if the end of file has been reached. <this.size> is set later by the SAUCE parsing section, as it is not always the same value as the length of <bytes>. (In case there is a SAUCE record, and optional comments).
    145         this.eof = function () {
    146             return pos === this.size;
    147         };
    148 
    149         // Seek to the position we would expect to find a SAUCE record.
    150         pos = bytes.length - 128;
    151         // If we find "SAUCE".
    152         if (this.lookahead(SAUCE_ID)) {
    153             this.sauce = {};
    154             // Read "SAUCE".
    155             this.getS(5);
    156             // Read and store the various SAUCE values.
    157             this.sauce.version = this.getS(2); // String, maximum of 2 characters
    158             this.sauce.title = this.getS(35); // String, maximum of 35 characters
    159             this.sauce.author = this.getS(20); // String, maximum of 20 characters
    160             this.sauce.group = this.getS(20); // String, maximum of 20 characters
    161             this.sauce.date = this.getS(8); // String, maximum of 8 characters
    162             this.sauce.fileSize = this.get32(); // unsigned 32-bit
    163             this.sauce.dataType = this.get(); // unsigned 8-bit
    164             this.sauce.fileType = this.get(); // unsigned 8-bit
    165             this.sauce.tInfo1 = this.get16(); // unsigned 16-bit
    166             this.sauce.tInfo2 = this.get16(); // unsigned 16-bit
    167             this.sauce.tInfo3 = this.get16(); // unsigned 16-bit
    168             this.sauce.tInfo4 = this.get16(); // unsigned 16-bit
    169             // Initialize the comments array.
    170             this.sauce.comments = [];
    171             commentCount = this.get(); // unsigned 8-bit
    172             this.sauce.flags = this.get(); // unsigned 8-bit
    173             this.sauce.blinkMode = (this.sauce.flags & 1) === 1;
    174             this.sauce.letterSpacing = (this.sauce.flags >> 1) & 3;
    175             this.sauce.aspectRatio = (this.sauce.flags >> 3) & 3;
    176             this.sauce.tInfoS = this.getSZ(22); // Null-terminated string, maximum of 22 characters
    177             if (commentCount > 0) {
    178                 // If we have a value for the comments amount, seek to the position we'd expect to find them...
    179                 pos = bytes.length - 128 - (commentCount * 64) - 5;
    180                 // ... and check that we find a COMNT header.
    181                 if (this.lookahead(COMNT_ID)) {
    182                     // Read COMNT ...
    183                     this.getS(5);
    184                     // ... and push everything we find after that into our <this.sauce.comments> array, in 64-byte chunks, stripping the trailing whitespace in the getS() function.
    185                     while (commentCount-- > 0) {
    186                         this.sauce.comments.push(this.getS(64));
    187                     }
    188                 }
    189             }
    190         }
    191         // Seek back to the start of the file, ready for reading.
    192         pos = 0;
    193 
    194         if (this.sauce) {
    195             // If we have found a SAUCE record, and the fileSize field passes some basic sanity checks...
    196             if (this.sauce.fileSize > 0 && this.sauce.fileSize < bytes.length) {
    197                 // Set <this.size> to the value set in SAUCE.
    198                 this.size = this.sauce.fileSize;
    199             } else {
    200                 // If it fails the sanity checks, just assume that SAUCE record can't be trusted, and set <this.size> to the position where the SAUCE record begins.
    201                 this.size = bytes.length - 128;
    202             }
    203         } else {
    204             // If there is no SAUCE record, assume that everything in <bytes> relates to an image.
    205             this.size = bytes.length;
    206         }
    207     }
    208 
    209     // Returns a sauce record i.e. File.sauce to <callback> asynchronously, for an array of <bytes>.
    210     function sauceBytes(bytes) {
    211         return new File(bytes).sauce;
    212     }
    213 
    214     // Returns a sauce record i.e. File.sauce to <callback> asynchronously, for the file found at <url>. <callbackFail> is called if unsuccesful.
    215     function sauce(url, callback, callbackFail) {
    216         httpGet(url, function (bytes) {
    217             callback(sauceBytes(bytes));
    218         }, callbackFail);
    219     }
    220 
    221     // Font collects together the functions for reading, rendering, and drawing the glyphs used on a canvas element.
    222     Font = (function () {
    223         // FONT_PRESETS stores all the predefined font characters, BASE64_CHARS is used when decoding the predefined data (in base64 format), and fontBitsBuffer is a buffer which is leveraged whenever a font is re-used to save a few cpu cycles.
    224         var FONT_PRESETS, BASE64_CHARS, fontBitsBuffer;
    225 
    226         // This object describes all the predefined font data, <width> and <height> are in pixels, <data> is a base64-encoded byte array, containing a 1-bit image for all 256 characters in sequence. <amigaFont> is referenced when rendering to make sure the font is one pixel wider.
    227         FONT_PRESETS = {
    228             "b-strict": {
    229                 "width": 8,
    230                 "height": 8,
    231                 "data": "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",
    232                 "amigaFont": true
    233             },
    234             "b-struct": {
    235                 "width": 8,
    236                 "height": 8,
    237                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBgYGBgAGABsbAAAAAAAAGxs/mz+bGwAGD5gPAZ8GAAAdpx4PGrMADxmZD9sxn8AGBgwAAAAAAAMGDAwMBgMADAYDAwMGDAAAMd+PH7/GBAAGBj/GBgAAAAAAAAAGBgwAAAA/gAAAAAAAAAAABgYAAMGDBgwYMCAAnzO1tbmfIAAfAwMDAwMAHzGxgZ8wP4A/AZ8BsbGfADAwMbGxn8GAP7AfAbGxnwAfMD8xsbGfAD+xgwYMDAwAHzGxsZ8xnwAfMbGxn4GfAAAGBgAABgYAAAYGAAAGBgwAAYYYBgGAAAAAH4AfgAAAABgGAYYYAAAfMbGBnwwADB+w9/z38B9AHwGfsbGxn4A/MbGxvzG/AB8xsbAwMZ8APjMxsbGxvwAfMbGxv7AfAA8ZmZmYP5gAHbOxsZ+BnwAxsbGxv7GxgAYGBgYGBgYAH4GBsbGxnwAxsbGzPjGxgDAwMDAxsZ8AMbu/tbGxsYA/MbGxsbGxgB8xsbGxsZ8APzGxsbG/MAAfMbGxsbMfgP8xsbM+MbGAHzGxsB8BnwAYPxgZmZmPADGxsbGxsZ8AMbGxsZsbDgAxsbG1v7uxgDGxsbGfMbGAMbGxsZ+BnwA/sbGBnzA/gA8MDAwMDA8AMBgMBgMBgMBPAwMDAwMPAAYPGbDAAAAAAAAAAAAAAD/GBgOAAAAAAB8BnbOxsZ+APzGzPjGxvwAfMbAxsbGfAAGfsbGxsZ+AHzG/sDGxnwAPGZmZmD8YAB+xsbOdgZ8AMbG/sbGxsYAGAAYGBgYGAAGAB7GxsZ8AMbGxsz8xsYAYGBgYGZmPAD81tbWxsbGAMbm9t7OxsYAfMbGxsbGfAD8xsbG/MDAAHzGxsbOdgYA/MbG+MzGxgB8xsbAfAZ8AP5gZmZmZjwABsbGxsbOdgAGxsbGbHw4AAbGxtbW1nwABsbGxnzGxgAGxsbGfgZ8AP4GfMDGxv4ADhgYcBgYDgAYGBgYGBgYGHAYGA4YGHAAdtwAAAAAAAAGPOCGDjjAAAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAAAAAAAAAABgAGBgYGBgA//////////8cMDB8MDB+AGM+dz5jAAAAw2Y8GD4YGAAYGBgAGBgYAAAzZsxmMwAAZmYAAAAAAAB+gZ2xnYF+AB42Zj4AfwAAADNmzGYzAAD/DgAAAAAAAAAAAP4AAAAA6U9JAAAAAAD/AAAAAAAAADxmPAAAAAAAAAAYfhgAfgB4DBgwfAAAAHgMGAx4AAAAGDBgAAAAAAAAAGZmZmZ/YD56ejoKCgoAAAAAGBgAAAAAAAAAAAAcOHgYGBgAAAAAPGZmPAB+AAAAzGYzZswAAEDGTFgyZs4CQMNGTB4yZA7gM2Y8+TNnAQwADD5gY2M+YDB8xsb+xgAMGHzGxv7GADjGfMbG/sYAdtx8xsb+xgBsAHzGxv7GABhmfMbG/sYAAH/MzP/MzwB8xsDAwMZ8GHA+ZsD4wP4ADD5mwPjA/gAwzP7A+MD+AP9/Pw8ff///MBgAGBgYGAAMGAAYGBgYABhmGBgYGBgA//788Pj+//94bGb2ZmZ8ADtuAOb23s4AYDB8xsbGfAAMGHzGxsZ8ADDMfMbGxnwAbNh8xsbGfADGAHzGxsZ8AADDZhhmwwAAfM7O1ubmfAAwGMbGxsZ8ABgwxsbGxnwAEGyCxsbGfABsAMbGxsZ8ABgwxsbGfgZ8YGB8ZnxgYAB8xsbG3MbcwGAwPAZ+xn4ADBg8Bn7GfgAYZjwGfsZ+AHbcPAZ+xn4AbAA8Bn7GfgAYZjwGfsZ+AAAAPht/2G4AAHzGwMDGfBhgMHzG/sB8AAwYfMb+wHwAMMx8xv7AfAADHz9/f////zAYABgYGAwADBgAGBgYDAAYZgAYGBgMAMD4/P7+////Dz9///9/Pw9m2PzGxsbGADAYfMbGxnwAGDB8xsbGfADw/P7///788HbcfMbGxnwAbAB8xsbGfAAAGAB+ABgAAAB8ztbW5nwAYDDGxsbGfgAYMMbGxsZ+ABhmAMbGxn4A////f38/HwMYMMbGxn4GfGBgfGZmfGBg/////v78+MA=",
    238                 "amigaFont": true
    239             },
    240             "microknight": {
    241                 "width": 8,
    242                 "height": 16,
    243                 "data": "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",
    244                 "amigaFont": true
    245             },
    246             "microknight+": {
    247                 "width": 8,
    248                 "height": 16,
    249                 "data": "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",
    250                 "amigaFont": true
    251             },
    252             "mosoul": {
    253                 "width": 8,
    254                 "height": 16,
    255                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBgYGBgYGBgYGAAAGBgAAGxsbGwAAAAAAAAAAAAAAABsbGxs/v5sbP7+bGxsbAAAGBg+PmBgPDwGBnx8GBgAAAAAZmasrNjYNjZqaszMAAA4OGxsaGh2dtzczs57ewAAGBgYGDAwAAAAAAAAAAAAAAwMGBgwMDAwMDAYGAwMAAAwMBgYDAwMDAwMGBgwMAAAAABmZjw8//88PGZmAAAAAAAAGBgYGH5+GBgYGAAAAAAAAAAAAAAAAAAAGBgYGDAwAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAYGBgYAAADAwYGDAwYGDAwYGDAwICAPDxmZm5ufn52dmZmPDwAADg4GBgYGBgYGBgYGBgYAAA8PAYGPDxgYGBgYGB+fgAAfHwGBhwcBgYGBgYGfHwAAAwMzMzMzMzM/v4MDAwMAAB8fGBgfHwGBgYGBgZ8fAAAPDxgYHx8ZmZmZmZmPDwAAH5+BgYGBgwMGBgYGBgYAAA8PGZmPDxmZmZmZmY8PAAAPDxmZmZmZmY+PgYGPDwAAAAAGBgYGAAAAAAYGBgYAAAAABgYGBgAAAAAGBgYGDAwAAAGBhgYYGAYGAYGAAAAAAAAAAD//wAA//8AAAAAAAAAAGBgGBgGBhgYYGAAAAAAPDxmZgYGHBwYGAAAGBgAAHx8xsbe3tbW3t7AwHh4AAA8PGZmZmZmZn5+ZmZmZgAAfHxmZnx8ZmZmZmZmfHwAAB4eMDBgYGBgYGAwMB4eAAB8fGZmZmZmZmZmZmZ8fAAAfn5gYGBgYGB4eGBgfn4AAH5+YGBgYGBgeHhgYGBgAAA8PGBgbm5mZmZmZmY+PgAAZmZmZmZmZmZ+fmZmZmYAADw8GBgYGBgYGBgYGDw8AAAODgYGBgYGBgYGBgY8PAAAxsbMzNjY8PDY2MzMxsYAAGBgYGBgYGBgYGBgYH5+AADGxu7u/v7W1sbGxsbGxgAAxsbm5vb23t7OzsbGxsYAADw8ZmZmZmZmZmZmZjw8AAB8fGZmZmZmZnx8YGBgYAAAeHjMzMzMzMzMzNzcfn4AAHx8ZmZmZmZmfHxmZmZmAAA8PGBgPDwGBgYGBgZ8fAAAfn4YGBgYGBgYGBgYGBgAAGZmZmZmZmZmZmZmZjw8AABmZmZmZmZmZjw8PDwYGAAAxsbGxsbG1tb+/u7uxsYAAMPDZmY8PBgYPDxmZsPDAADDw2ZmPDwYGBgYGBgYGAAA/v4MDBgYMDBgYMDA/PwAADw8MDAwMDAwMDAwMDw8AADAwGBgMDAYGAwMBgYDAwEBPDwMDAwMDAwMDAwMPDwAABAQODhsbMbGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//GBgYGAwMAAAAAAAAAAAAAAAAAAA8PAYGPj5mZj4+AABgYGBgfHxmZmZmZmZ8fAAAAAAAADw8YGBgYGBgPDwAAAYGBgY+PmZmZmZmZj4+AAAAAAAAPDxmZn5+YGA8PAAAHBwwMDAwMDB8fDAwMDAAAAAAAAA+PmZmZmY+PgYGPDxgYGBgfHxmZmZmZmZmZgAAGBgAABgYGBgYGBgYDAwAAAwMAAAMDAwMDAwMDAwMeHhgYGBgZmZsbHh4bGxmZgAAGBgYGBgYGBgYGBgYDAwAAAAAAADs7P7+1tbGxsbGAAAAAAAAfHxmZmZmZmZmZgAAAAAAADw8ZmZmZmZmPDwAAAAAAAB8fGZmZmZ8fGBgYGAAAAAAPj5mZmZmPj4GBgYGAAAAAD4+YGBgYGBgYGAAAAAAAAA8PGBgPDwGBnx8AAAwMDAwfHwwMDAwMDAcHAAAAAAAAGZmZmZmZmZmPDwAAAAAAABmZmZmZmY8PBgYAAAAAAAAxsbGxtbW/v5sbAAAAAAAAMbGbGw4OGxsxsYAAAAAAABmZmZmZmY+PgYGPDwAAAAAfn4MDBgYMDB+fgAADg4YGBgYcHAYGBgYDg4AABgYGBgYGBgYGBgYGBgYGBhwcBgYGBgODhgYGBhwcAAAcnKcnAAAAAAAAAAAAAAAAA8PPDzw8MPDDw88PPDwAAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAAAAAAAAAAAAAAAAAAAAYGAAAGBgYGBgYGBgYGAAAAAAMDD4+bGw+PgwMAAAAABwcNjYwMHh4MDAwMH5+AABCQjw8ZmY8PEJCAAAAAAAAw8NmZjw8GBg8PBgYGBgAABgYGBgYGAAAGBgYGBgYAAA8PGBgPDxmZjw8BgY8PAAAZmZmZgAAAAAAAAAAAAAAADw8QkKdnaGhoaGdnUJCPDwcHCQkREQ8PAAAfn4AAAAAAAAzM2ZmzMxmZjMzAAAAAD4+BgYAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAPDxCQrm5paW5uaWlQkI8PP//AAAAAAAAAAAAAAAAAAA8PGZmPDwAAAAAAAAAAAAAGBgYGH5+GBgYGAAAfn4AAHh4DAwYGDAwfHwAAAAAAAB4eAwMGBgMDHh4AAAAAAAAGBgwMGBgAAAAAAAAAAAAAAAAAABmZmZmZmZmZn9/YGA+Pnp6eno6OgoKCgoKCgAAAAAAABgYGBgAAAAAAAAAAAAAAAAAAAAAAAAAABgYMDAwMHBwMDAwMDAwAAAAAAAAODhEREREODgAAHx8AAAAAAAAzMxmZjMzZmbMzAAAAABAQMbGTExYWDIyZmbPzwICQEDGxkxMWFg+PmJixMQODsDAIyNmZiws2dkzM2dnAQEYGAAAGBgwMGBgZmY8PAAAMDAYGDw8ZmZ+fmZmZmYAAAwMGBg8PGZmfn5mZmZmAAAYGGZmPDxmZn5+ZmZmZgAAcXGOjjw8ZmZ+fmZmZmYAAGZmAAA8PGZmfn5mZmZmAAAYGCQkPDxmZn5+ZmZmZgAAHx88PDw8b298fMzMz88AAB4eMDBgYGBgMDAeHgwMGBgwMBgYfn5gYHh4YGB+fgAADAwYGH5+YGB4eGBgfn4AABgYZmZ+fmBgeHhgYH5+AABmZgAAfn5gYHh4YGB+fgAAMDAYGDw8GBgYGBgYPDwAAAwMGBg8PBgYGBgYGDw8AAAYGGZmPDwYGBgYGBg8PAAAZmYAADw8GBgYGBgYPDwAAHh4bGxmZvb2ZmZsbHh4AABxcc7O5ub29t7ezs7GxgAAMDAYGDw8ZmZmZmZmPDwAAAwMGBg8PGZmZmZmZjw8AAAYGGZmPDxmZmZmZmY8PAAAcXGOjjw8ZmZmZmZmPDwAAMPDPDxmZmZmZmZmZjw8AAAAAMbGbGw4OGxsxsYAAAAAPz9mZm5ufn52dmZm/PwAADAwGBhmZmZmZmZmZjw8AAAMDBgYZmZmZmZmZmY8PAAAGBgkJGZmZmZmZmZmPDwAAGZmAABmZmZmZmZmZjw8AAAGBggIw8NmZjw8GBgYGAAAwMDAwPz8xsb8/MDAwMAAADw8ZmZmZmxsZmZmZmxsYGAwMBgYPDwGBj4+ZmY+PgAADAwYGDw8BgY+PmZmPj4AABgYZmY8PAYGPj5mZj4+AABxcY6OPDwGBj4+ZmY+PgAAZmYAADw8BgY+PmZmPj4AABgYJCQ8PAYGPj5mZj4+AAAAAAAAfn4bG39/2Nh3dwAAAAAAADw8YGBgYGBgPDwYGDAwGBg8PGZmfn5gYDw8AAAMDBgYPDxmZn5+YGA8PAAAGBhmZjw8ZmZ+fmBgPDwAAGZmAAA8PGZmfn5gYDw8AAAwMBgYAAAYGBgYGBgMDAAADAwYGAAAGBgYGBgYDAwAABgYZmYAABgYGBgYGAwMAAAAAGZmAAAYGBgYGBgMDAAAYGD8/BgYPDxmZmZmPDwAAHFxjo4AAHx8ZmZmZmZmAAAwMBgYAAA8PGZmZmY8PAAADAwYGAAAPDxmZmZmPDwAABgYZmYAADw8ZmZmZjw8AABxcY6OAAA8PGZmZmY8PAAAAABmZgAAPDxmZmZmPDwAAAAAGBgAAP//AAAYGAAAAAAAAAICfHzOztbW5uZ8fICAMDAYGAAAZmZmZmZmPj4AAAwMGBgAAGZmZmZmZj4+AAAYGGZmAABmZmZmZmY+PgAAAABmZgAAZmZmZmZmPj4AAAwMGBgAAGZmZmY8PBgYMDBgYGBgfHxmZmZmfHxgYGBgAABmZgAAZmZmZjw8GBgwMA==",
    256                 "amigaFont": true
    257             },
    258             "pot-noodle": {
    259                 "width": 8,
    260                 "height": 16,
    261                 "data": "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GBgwMHx8BgZ2dsbGfn4AABgYZmZ8fAYGdnbGxn5+AAB2dtzcfHwGBnZ2xsZ+fgAAxsYAAHx8BgZ2dsbGfn4AAHx8xsZ8fAYGdnbGxn5+AAAAAAAAfn4bG35+yMh/fwAAAAAAAHx8xsbAwMbGfHwwMDAwGBh8fMbG3NzAwH5+AAAYGDAwfHzGxtzcwMB+fgAAGBhmZnx8xsbc3MDAfn4AAMbGAAB8fMbG3NzAwH5+AAAwMBgYAAAYGBgYGBgMDAAADAwYGAAAGBgYGBgYDAwAABgYZmYAABgYGBgYGAwMAAAAAGZmAAAYGBgYGBgMDAAAMDB+fhgYfHzGxsbGfHwAAHZ23NwAAPz8xsbGxsbGAgIwMBgYAAB8fMbGxsZ8fAAAGBgwMAAAfHzGxsbGfHwAABgYZmYAAHx8xsbGxnx8AAB2dtzcAAB8fMbGxsZ8fAAAAABsbAAAfHzGxsbGfHwAAAAAGBgAAH5+AAAYGAAAAAAAAAMDPj5ubn5+dnZ8fMDAdnbc3ICAxsbGxsbGfn4AAAwMGBiAgMbGxsbGxn5+AAAYGGZmgIDGxsbGxsZ+fgAAAADGxoCAxsbGxsbGfn4AAAwMGBiAgMbGxsZsbDg48PDw8GBgfHxmZmZmfHxgYPDwAADGxoCAxsbGxmxsODjw8A==",
    262                 "amigaFont": true
    263             },
    264             "topaz": {
    265                 "width": 8,
    266                 "height": 16,
    267                 "data": "AAAAAAAAAAAAAAAAAAAAAIODOTkhISkpISE/P4eH///Dw5mZmZmBgZmZmZmZmf//g4OZmZmZg4OZmZmZg4P//+Hhz8+fn5+fn5/Pz+Hh//+Hh5OTmZmZmZmZk5OHh///gYGfn5+fh4efn5+fgYH//4GBn5+fn4eHn5+fn5+f///Dw5mZn5+RkZmZmZnBwf//mZmZmZmZgYGZmZmZmZn//8PD5+fn5+fn5+fn58PD///5+fn5+fn5+fn5mZnDw///nJyZmZOTh4eTk5mZnJz//5+fn5+fn5+fn5+fn4GB//+cnIiIgICUlJycnJycnP//nJyMjISEkJCYmJycnJz//8PDmZmZmZmZmZmZmcPD//+Dg5mZmZmDg5+fn5+fn///w8OZmZmZmZmZmZGRwMD//4ODmZmZmYODk5OZmZmZ///Dw5mZj4/Dw/HxmZnDw///gYHn5+fn5+fn5+fn5+f//5mZmZmZmZmZmZmZmcPD//+ZmZmZmZmZmZmBw8Pn5///nJycnJyclJSAgIiInJz//zw8mZnDw+fnw8OZmTw8//88PJmZw8Pn5+fn5+fn5///gID5+fPz5+fPz5+fgID//8PDz8/Pz8/Pz8/Pz8PD//8/P5+fz8/n5/Pz+fn8/P//w8Pz8/Pz8/Pz8/Pzw8P/////////////////////gIAAAAAAAAAAAAAAAAAAAAAAGBgYGBgYGBgYGAAAGBgAAGxsbGwAAAAAAAAAAAAAAABsbGxs/v5sbP7+bGxsbAAAGBg+PmBgPDwGBnx8GBgAAAAAZmasrNjYNjZqaszMAAA4OGxsaGh2dtzczs57ewAAGBgYGDAwAAAAAAAAAAAAAAwMGBgwMDAwMDAYGAwMAAAwMBgYDAwMDAwMGBgwMAAAAABmZjw8//88PGZmAAAAAAAAGBgYGH5+GBgYGAAAAAAAAAAAAAAAAAAAGBgYGDAwAAAAAAAAfn4AAAAAAAAAAAAAAAAAAAAAAAAYGBgYAAADAwYGDAwYGDAwYGDAwAAAPDxmZm5ufn52dmZmPDwAABgYODh4eBgYGBgYGBgYAAA8PGZmBgYMDBgYMDB+fgAAPDxmZgYGHBwGBmZmPDwAABwcPDxsbMzM/v4MDAwMAAB+fmBgfHwGBgYGZmY8PAAAHBwwMGBgfHxmZmZmPDwAAH5+BgYGBgwMGBgYGBgYAAA8PGZmZmY8PGZmZmY8PAAAPDxmZmZmPj4GBgwMODgAAAAAGBgYGAAAAAAYGBgYAAAAABgYGBgAAAAAGBgYGDAwAAAGBhgYYGAYGAYGAAAAAAAAAAB+fgAAfn4AAAAAAAAAAGBgGBgGBhgYYGAAAAAAPDxmZgYGDAwYGAAAGBgAAHx8xsbe3tbW3t7AwHh4AAA8PGZmZmZ+fmZmZmZmZgAAfHxmZmZmfHxmZmZmfHwAAB4eMDBgYGBgYGAwMB4eAAB4eGxsZmZmZmZmbGx4eAAAfn5gYGBgeHhgYGBgfn4AAH5+YGBgYHh4YGBgYGBgAAA8PGZmYGBubmZmZmY+PgAAZmZmZmZmfn5mZmZmZmYAADw8GBgYGBgYGBgYGDw8AAAGBgYGBgYGBgYGZmY8PAAAxsbMzNjY8PDY2MzMxsYAAGBgYGBgYGBgYGBgYH5+AADGxu7u/v7W1sbGxsbGxgAAxsbm5vb23t7OzsbGxsYAADw8ZmZmZmZmZmZmZjw8AAB8fGZmZmZ8fGBgYGBgYAAAeHjMzMzMzMzMzNzcfn4AAHx8ZmZmZnx8bGxmZmZmAAA8PGZmcHA8PA4OZmY8PAAAfn4YGBgYGBgYGBgYGBgAAGZmZmZmZmZmZmZmZjw8AABmZmZmZmZmZjw8PDwYGAAAxsbGxsbG1tb+/u7uxsYAAMPDZmY8PBgYPDxmZsPDAADDw2ZmPDwYGBgYGBgYGAAA/v4MDBgYMDBgYMDA/v4AADw8MDAwMDAwMDAwMDw8AADAwGBgMDAYGAwMBgYDAwAAPDwMDAwMDAwMDAwMPDwAABAQODhsbMbGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+GBgYGAwMAAAAAAAAAAAAAAAAAAA8PAYGPj5mZj4+AABgYGBgfHxmZmZmZmZ8fAAAAAAAADw8YGBgYGBgPDwAAAYGBgY+PmZmZmZmZj4+AAAAAAAAPDxmZn5+YGA8PAAAHBwwMHx8MDAwMDAwMDAAAAAAAAA+PmZmZmY+PgYGPDxgYGBgfHxmZmZmZmZmZgAAGBgAABgYGBgYGBgYDAwAAAwMAAAMDAwMDAwMDAwMeHhgYGBgZmZsbHh4bGxmZgAAGBgYGBgYGBgYGBgYDAwAAAAAAADs7P7+1tbGxsbGAAAAAAAAfHxmZmZmZmZmZgAAAAAAADw8ZmZmZmZmPDwAAAAAAAB8fGZm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",
    268                 "amigaFont": true
    269             },
    270             "topaz+": {
    271                 "width": 8,
    272                 "height": 16,
    273                 "data": "AAAAAAAAAAAAAAAAAAAAAIODOTkhISkpISE/P4eH///Dw5mZmZmBgZmZmZmZmf//g4OZmZmZg4OZmZmZg4P//+Hhz8+fn5+fn5/Pz+Hh//+Hh5OTmZmZmZmZk5OHh///gYGfn5+fh4efn5+fgYH//4GBn5+fn4eHn5+fn5+f///Dw5mZn5+RkZmZmZnBwf//mZmZmZmZgYGZmZmZmZn//8PD5+fn5+fn5+fn58PD///5+fn5+fn5+fn5mZnDw///nJyZmZOTh4eTk5mZnJz//5+fn5+fn5+fn5+fn4GB//+cnIiIgICUlJycnJycnP//nJyMjISEkJCYmJycnJz//8PDmZmZmZmZmZmZmcPD//+Dg5mZmZmDg5+fn5+fn///w8OZmZmZmZmZmZGRwMD//4ODmZmZmYODk5OZmZmZ///Dw5mZj4/Dw/HxmZnDw///gYHn5+fn5+fn5+fn5+f//5mZmZmZmZmZmZmZmcPD//+ZmZmZmZmZmZmBw8Pn5///nJycnJyclJSAgIiInJz//zw8mZnDw+fnw8OZmTw8//88PJmZw8Pn5+fn5+fn5///gID5+fPz5+fPz5+fgID//8PAz8/Pz8/Pz8/Pz8DD//8/P5+fz8/n5/Pz+fn8/P7+wwPz8/Pz8/Pz8/PzA8P/////////////////////AAAAAAAAAAAAAAAAAAAAAAAAGBgYGBgYGBgYGAAAGBgAAGxsbGwAAAAAAAAAAAAAAABsbGxs/v5sbP7+bGxsbAAAGBg+PmBgPDwGBnx8GBgAAAMDZmasrNjYNjZqaszMAAA4OGxsaGh2dtzczs57ewAAGBgYGDAwAAAAAAAAAAAAAAMHDgwYGBgYGBgMDgcDAADA4HAwGBgYGBgYMHDgwAAAAABmZjw8//88PGZmAAAAAAAAGBgYGH5+GBgYGAAAAAAAAAAAAAAAAAAAGBgYGDAwAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAYGBgYAAADAwYGDAwYGDAwYGDAwICAPDxmZm5ufn52dmZmPDwAABgYODh4eBgYGBgYGBgYAAA8PGZmBgYMDBgYMDB+fgAAPDxmZgYGHBwGBmZmPDwAABwcPDxsbMzM/v4MDAwMAAB+fmBgfHwGBgYGZmY8PAAAHBwwMGBgfHxmZmZmPDwAAH5+BgYGBgwMGBgYGBgYAAA8PGZmZmY8PGZmZmY8PAAAPDxmZmZmPj4GBgwMODgAAAAAGBgYGAAAAAAYGBgYAAAAABgYGBgAAAAAGBgYGDAwAwMGBgwMGBgMDAYGAwMAAAAAAAD//wAA//8AAAAAAADAwGBgMDAYGDAwYGDAwAAAPDxmZgYGDAwYGAAAGBgAAHx8xsbe3tbW3t7AwHh4AAA8PGZmZmZ+fmZmZmZmZgAAfHxmZmZmfHxmZmZmfHwAAB4eMDBgYGBgYGAwMB4eAAB4eGxsZmZmZmZmbGx4eAAAfn5gYGBgeHhgYGBgfn4AAH5+YGBgYHh4YGBgYGBgAAA8PGZmYGBubmZmZmY+PgAAZmZmZmZmfn5mZmZmZmYAADw8GBgYGBgYGBgYGDw8AAAGBgYGBgYGBgYGZmY8PAAAxsbMzNjY8PDY2MzMxsYAAGBgYGBgYGBgYGBgYH5+AADGxu7u/v7W1sbGxsbGxgAAxsbm5vb23t7OzsbGxsYAADw8ZmZmZmZmZmZmZjw8AAB8fGZmZmZ8fGBgYGBgYAAAeHjMzMzMzMzMzNzcfn4AAHx8ZmZmZnx8bGxmZmZmAAA8PGZmcHA8PA4OZmY8PAAAfn4YGBgYGBgYGBgYGBgAAGZmZmZmZmZmZmZmZjw8AABmZmZmZmZmZjw8PDwYGAAAxsbGxsbG1tb+/u7uxsYAAMPDZmY8PBgYPDxmZsPDAADDw2ZmPDwYGBgYGBgYGAAA/v4MDBgYMDBgYMDA/v4AADw/MDAwMDAwMDAwMD88AADAwGBgMDAYGAwMBgYDAwEBPPwMDAwMDAwMDAwM/DwAABAQODhsbMbGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//GBgYGAwMAAAAAAAAAAAAAAAAAAA8PAYGPj5mZj4+AABgYGBgfHxmZmZmZmZ8fAAAAAAAADw8YGBgYGBgPDwAAAYGBgY+PmZmZmZmZj4+AAAAAAAAPDxmZn5+YGA8PAAAHBwwMHx8MDAwMDAwMDAAAAAAAAA+PmZmZmY+PgYGPDxgYGBgfHxmZmZmZmZmZgAAGBgAABgYGBgYGBgYDAwAAAwMAAAMDAwMDAwMDAwMeHhgYGBgZmZsbHh4bGxmZgAAGBgYGBgYGBgYGBgYDAwAAAAAAADs7P7+1tbGxsbGAAAAAAAAfHxmZmZmZmZmZgAAAAAAADw8ZmZmZmZmPDwAAAAAAAB8fGZm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",
    274                 "amigaFont": true
    275             },
    276             "topaz500": {
    277                 "width": 8,
    278                 "height": 16,
    279                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBg8PDw8GBgYGAAAGBgAAGxsbGwAAAAAAAAAAAAAAABsbGxs/v5sbP7+bGxsbAAAGBg+PmBgPDwGBnx8GBgAAAAAxsbMzBgYMDBmZsbGAAA4OGxsaGh2dtzczMx2dgAAGBgYGDAwAAAAAAAAAAAAAAwMGBgwMDAwMDAYGAwMAAAwMBgYDAwMDAwMGBgwMAAAAABmZjw8//88PGZmAAAAAAAAGBgYGH5+GBgYGAAAAAAAAAAAAAAAAAAAGBgYGDAwAAAAAAAAfn4AAAAAAAAAAAAAAAAAAAAAAAAYGBgYAAADAwYGDAwYGDAwYGDAwAAAPDxmZm5ufn52dmZmPDwAABgYODgYGBgYGBgYGH5+AAA8PGZmBgYcHDAwZmZ+fgAAPDxmZgYGHBwGBmZmPDwAABwcPDxsbMzM/v4MDB4eAAB+fmBgfHwGBgYGZmY8PAAAHBwwMGBgfHxmZmZmPDwAAH5+ZmYGBgwMGBgYGBgYAAA8PGZm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",
    280                 "amigaFont": true
    281             },
    282             "topaz500+": {
    283                 "width": 8,
    284                 "height": 16,
    285                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBg8PDw8GBgYGAAAGBgAAGxsbGwAAAAAAAAAAAAAAABsbGxs/v5sbP7+bGxsbAAAGBg+PmBgPDwGBnx8GBgAAAMDxsbMzBgYMDBmZsbGgIA4OGxsaGh2dtzczMx2dgAAGBgYGDAwAAAAAAAAAAAAAAMHDgwYGBgYGBgMDgcDAADA4HAwGBgYGBgYMHDgwAAAAABmZjw8//88PGZmAAAAAAAAGBgYGH5+GBgYGAAAAAAAAAAAAAAAAAAAGBgYGDAwAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAYGBgYAAADAwYGDAwYGDAwYGDAwICAPDxmZm5ufn52dmZmPDwAABgYODgYGBgYGBgYGH5+AAA8PGZmBgYcHDAwZmZ+fgAAPDxmZgYGHBwGBmZmPDwAABwcPDxsbMzM/v4MDB4eAAB+fmBgfHwGBgYGZmY8PAAAHBwwMGBgfHxmZmZmPDwAAH5+ZmYGBgwMGBgYGBgYAAA8PGZm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",
    286                 "amigaFont": true
    287             },
    288             "80x25": {
    289                 "width": 9,
    290                 "height": 16,
    291                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4GDgAAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAAAAzAAADwDD4zGYzDsAAAAAAADAMAwADwDD4zGYzDsAAAAAAABwbBwADwDD4zGYzDsAAAAAAAAAAAAAD4xmAwGAxj4GDgAAAAAgODYAD4xn8wGAxj4AAAAAAAAAxgAAD4xn8wGAxj4AAAAAAADAMAwAD4xn8wGAxj4AAAAAAAAAZgAABwGAwGAwGB4AAAAAAAAwPDMABwGAwGAwGB4AAAAAAADAMAwABwGAwGAwGB4AAAAAAAGMAAgODYxmM/mMxmMAAAAAAODYOAgODYxn8xmMxmMAAAAAADAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAAHYNhsfmw2DcAAAAAAAAAPjYzGY/mYzGYzGcAAAAAAAAgODYAD4xmMxmMxj4AAAAAAAAAxgAAD4xmMxmMxj4AAAAAAADAMAwAD4xmMxmMxj4AAAAAAABgeGYAGYzGYzGYzDsAAAAAAADAMAwAGYzGYzGYzDsAAAAAAAAAxgAAGMxmMxmMxj8BgYeAAAGMAD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAAAwGD4xmAwGAxj4GAwAAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAAZjMPAwfgwfgwGAwAAAAAAAHwzGY+GIzG8zGYzGMAAAAAAAAcGwwGAwfgwGAw2DgAAAAAAAAwMDAADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAAAdm4AG4ZjMZjMZjMAAAAAAdm4AGM5ns/m8zmMxmMAAAAAAAAAPDYbB8AD8AAAAAAAAAAAAAAAODYbBwAD4AAAAAAAAAAAAAAAMBgABgMDAwGMxj4AAAAAAAAAAAAAAA/mAwGAwAAAAAAAAAAAAAAAAA/gMBgMBgAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAAAGAwAAwGAwPB4PAwAAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAADs3Gw2Gw3DsAAAAAAAAAeGYzGY2GYxmMxmYAAAAAAAAA/mMxmAwGAwGAwGAAAAAAAAAAAAAAH8bDYbDYbDYAAAAAAAAA/mMYBgGAwMDAxn8AAAAAAAAAAAAAD82Gw2Gw2DgAAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAAAAAdm4GAwGAwGAwAAAAAAAAAfgwPDMZjMZh4GD8AAAAAAAAAODYxmM/mMxmMbBwAAAAAAAAAODYxmMxjYbDYbHcAAAAAAAAAHhgGAYPjMZjMZh4AAAAAAAAAAAAAD82222z8AAAAAAAAAAAAAAGBj82228z8YGAAAAAAAAAAHBgYDAfDAYDAMA4AAAAAAAAAAD4xmMxmMxmMxmMAAAAAAAAAAAA/gAAH8AAA/gAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAABgGAYBgYGBgAD8AAAAAAAAAAAYGBgYBgGAYAD8AAAAAAAAADg2GwwGAwGAwGAwGAwGAwGAwGAwGAwGAwGGw2GwcAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAADs3AAdm4AAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAeDAYDAYDHYbDYPA4AAAAAAADYNhsNhsNgAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    292                 "amigaFont": false
    293             },
    294             "80x25small": {
    295                 "width": 4,
    296                 "height": 8,
    297                 "data": "AAAAAACQD2Bvb/CfCu5EAATu5AAE6k4ABO5OAAAGYAD/+Z//AGmWAP+Waf8CSqQABKpEAAdESAAHVVoABEpEAAjOyAACbmIABOTkAAqqCgAHpiIwaGlhYAAA7gAE5OTgBOREQATkREAALyAAAE9AAAAI8AAAb2AAAE7gAADuQAAAAAAABEQEAAqgAAAE5OQARoQsQACSSQAE5JpQBIAAAAJERCAEIiJACk5KAABOQAAAAASAAA4AAAAABAAAJEgABKqkAAxETgAMJI4ADCQsAAiORAAOhCwABIykAA4kRAAEpKQABqYiAABAQAAAQEgAAkhCAADw8AAIQkgASiQEAATuhgAErqoADKysAASopAAMqqwADoyOAA6MiAAEqOQACq6qAA5ETgAOIqQACqyqAAiIjgAK7qoACu7qAASqpAAMrIgABKqmAAysqgAGhCwADkREAAqqpAAKqkQACq7kAAqkqgAKpEQADiSOAAZERgAAhEIABiImAEoAAAAAAADwCEAAAABqpgAIyqwAAGiGAAJqpgAAToYAAkZEAABKpiQIyqoABAREAAQERIAIrKoABEREAADuqgAAyqoAAEqkAADKyAAAamIAAMqIAABoLAAE5EQAAKqmAACqpAAAqu4AAKRKAACqRAAA4s4AAkxCAARERAAIRkgAbAAAAABKrgAEqKSACgqmACQk6OBKBuYACgbmAEIG5gAEBuYAAAaGSEoE6OAKBOjghATo4AoERABKBEQAhAREAKBK6gBASuoAJA6MjgBv5wAHr6sASgSqQKAEqkCEBKpASgqkAIQKpACgqkQAoEqqQKCqqkAARoZASoyOAKpORADKyrohJU5EgCQG5gAkBEQAJASqQCQKpABsDKoAbAru6gbmDgAEpA4AQEikAAAOiAAADiIARA4EjkQOCOQEBO5AAFhQAAChoAAUFBQUWlpaWtfX19dERERERExERETMRERVXVVVAA9VVQDMRERV3VVVVVVVVQD9VVVV3wAAVV8AAETMAAAADEREREcAAERPAAAAD0REREdERAAPAABET0RERHdERFVXVVVVdwAAAHdVVVX/AAAA/1VVVXdVVQD/AABV/1VVRP8AAFVfAAAA/0REAA9VVVVXAABEdwAAAHdERAAHVVVVX1VVRP9ERERMAAAAB0RE/////wAA///MzMzMMzMzM///AAAFqqUAaamSAA6oiAAA6qoA+EJI8AB6qkAAVVZIAKREQOSqpOBKrqpAaZZmkGQmmWAA+Z8AEmlkgAaOhgAGmZkADg4OAABOQOAAQkBgACQgYAJUREREREzABA4EAAWgWgBKQAAAAAZgAAAGAAADIqYgDKoAAEJGAAAAZmYAAAAAAA==",
    298                 "amigaFont": false
    299             },
    300             "80x50": {
    301                 "width": 9,
    302                 "height": 8,
    303                 "data": "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NhsN5gP4AAAAAAAP5gN5sNhsNhs94A/4AAAAAAA/4A95sNhsNhsN5gN5sNhsAAA/4A/4AAAANhs94A95sNhsGAw/4A/4AAAANhsNhs/4AAAAAAA/4A/4wGAwAAAAAA/5sNhsNhsNhsP4AAAAGAwH4wH4AAAAAAAH4wH4wGAwAAAAAAP5sNhsNhsNhs/5sNhsGAw/4w/4wGAwGAwGAw+AAAAAAAAAAAH4wGAw////////////AAAAAA//////8Hg8Hg8Hg8HgD4fD4fD4fD4f//////AAAAAAAAAdm4yG4dgAeGYzGwzGMzAA/mMwGAwGAwAAAAA/jYbDYbAA/mMYBgYGM/gAAAAfmw2GwcAAAAAZjMZjMfGAADs3AwGAwGAAfgwPDMZh4GD8ODYxn8xjYOAAODYxmMbDY7gADgwDB8ZjMPAAAAAfm22z8AAABgYfm22z8YGAHhgYD8YBgHgAAD4xmMxmMxgAAH8AH8AH8AAAGAwfgwGAAfgAMAwDAwMAAfgADAwMAwDAAfgADg2GwwGAwGAwGAwGAwGGw2DgAAwAD8AAwAAAADs3AAdm4AAAODYbBwAAAAAAAAAAAwGAAAAAAAAAAwAAAAAADwYDAY7DYPA4bBsNhsNgAAAAeAYGBgfAAAAAAAAPB4PB4AAAAAAAAAAAAAAA",
    304                 "amigaFont": false
    305             },
    306             "armenian": {
    307                 "width": 9,
    308                 "height": 16,
    309                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABIZn+ZhIAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAPDMw2G222w2GZh4AAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAw3O/3+22Gw2Gw2GAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAA/22mQwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAw2Gw2Gw2GwzMPAwAAAAAAAAAw2Gw2Gw2223+ZjMAAAAAAAAAw2GZh4GAwPDMw2GAAAAAAAAAw2GwzMPAwGAwGB4AAAAAAAAA/2GhgYGBgYGCw3+AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAMBgGAAAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAODYZDA8DAYDAYHgAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHM/22222222AAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGGw2GwzMPAwAAAAAAAAAAAAAGGw2G222/zMAAAAAAAAAAAAAGGZh4GB4ZmGAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwAAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAAAAdm4AAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAzGYzGYzGY3G4zjsAAAAAAAAAAAAAG22222222zeAAAAAAAAAeGYzGYzGAwH8wGAAAAAAAAAAAAAAHwzGYzGAwH8wGAwAAAAAeGYzGYzGYfwYDAYAAAAAAAAAAAAAD4zGYzGYzD+DAYDAAAAAeGYzGYzGYzwYDAYAAAAAAAAAAAAAHwzGYzGYzGeDAYDAAAAAwGA/mAwGYzGYzDwAAAAAAAAAwGA/GAwGAzGYzD4AAAAAAAAAPDMZjMZh8BgY2H8wwAAAAAAAAAAAGYzGYzGYzD4DAYDwAAAAwGA/mAwGAwHwDAYeAAAAAAAAwGAwH4wGAwGA+AYeAAAAAAAAeGYzGYzGYwGAwH8AAAAAAAAAAAAAHwzGYzGYzGAwGA/gAAAAfGMz2s1ms1ms1mYAAAAAAAAAAAAAH4xme1ms1mYwGAwAAAAADAYf2YzGYzGYzDwAAAAAAAAADAYDD+zGYzGYzD4AAAAAAAAAwGA+GYzGYzGYwGAAAAAAAAAAwGAwHwzGYzGYzGYwGAwAAAAAwGAwGAwGAwGAwH4BgAAAAAAAAAAADAYDAYDAYDAYDAfAAAAAwGA+2222222222cAAAAAAAAAwGAwH222222222ewGAwAAAAAwD8+2YzGYzGYzDwAAAAAAAGAeAYDD+zGYzGYzD4AAAAAAAAAwGAzGYzGYzD4DAYAAAAAAAAAwGAwGYzGYzGYzD4DAYDAAAAAMAwDAwMDAwGAwH4DgAAAAAAAwGAwHwzGYzGYzGYAAAAAAAAAPDMZjMZgMBjY2DcAAAAAAAAAID8DAwMDg2GYzjsAAAAAAAAAeGYzGYzGYzAYDAeAAAAAAAAAAAAAHwzGYzGYzGYDAYDAeAAAzj2cGwzGYzGYzD4AAAAAAAAAGHgYDg2GYzGYzD4AAAAAAAAAz2YzGYzGYzGYzDwAAAAAAAAADwYDGYzGYzGYzD4AAAAAAAAAeGYDBwbAYDGYzDwAAAAAAAAAAAAAAYDAYDAYDAYbG4eAAAAA4DAYDMZjMZjMZh4AAAAAAAAA4DAYDMZjMZjMZh8AAAAAAAAA+AYfGYwGAzGYzDwAAAAAAAAAAAAADwzGYzAYGBgYGAfgAAAAeGYzGYzGYzGYzGYAAAAAAAAAAAAAHwzGYzGYzGYAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAeGYzGYDAYDGwcBgGAAAAAAAAAAAAAwMAwDAwMDAwGAfgAAAAfm2222222Gw2AwGAAAAAAAAAAAAAG22222222z+AwGAwAAAAYHg2GYZhsFg42H8wwAAAAAAAAAAADg2GYzDYOBgYGAfgAAAAeGYzGYzGezGYzGYAAAAAAAAAAAAAHwzGYzGYzGeAAAAAAAAAzGYzGYzGYzGYzDwAAAAAAAAAAAAAGYzGYzGYzD4AAAAAAAAADAYzGYzGYzD4DAeAAAAAAAAADAYDGYzGYzGYzD4DAYDwAAAAeGYzDAMAwDGYzDwAAAAAAAAAAAAAG82222222z2AAAAAAAAAeGYzGYzGYzGAwGAAAAAAAAAAAAAAHwzGYzGYzGYwGAwAAAAAeGYzDwzAYDAYzDwAAAAAAAAAAAAAGYzGYzGYzD4DAYeAAAAAwGA+GYzGYzGMwGAAAAAAAAAAAAAADAYDAYDAYD4AAAAAAAAAGAwfm22222z8GAwAAAAAAAAAGAwGG82222222z2GAwGAAAAAPDMZjMfDAYH8YDAAAAAAAAAAAAAAD4ZjMZjMZj4YH8YAAAAAeGYzGYzGYzGYzDwAAAAAAAAAAAAADwzGYzGYzDwAAAAAAAAAeGw2D8Gw22222z8AAAAAAAAAeGw2D8Gw22222z8GAwGAAAAAOCIlAQAAAAAAAAAAAAAAAAAYGBgYAAAAAAAAAAAAAAAAAAAAAAAfD4fD4fD4fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    310                 "amigaFont": false
    311             },
    312             "baltic": {
    313                 "width": 9,
    314                 "height": 16,
    315                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAADAwAB4ZmEwGAwGEZh4AAAAAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAAfgAADwDD4zGYzDsAAAAAAAAAzAAADwDD4zGYzDsAAAAAAAAAHBgGDszGYzGIzD4DGYeAAABwbBwADwDD4zGYzDsAAAAAAAAYGBgAD4xmAwGAxj4AAAAAAAAAOA0Hg4GBweCwGB4AAAAAAAAAfgAAD4xn8wGAxj4AAAAAAAAA/DMZjMfDYZjMZnMDAMPAAAAAAAAAG4djMYDAYHgGAYeAAAAAfAAABwGAwGAwGB4AAAAAAGBgAH8hgYGBgYGExn8AAAAAAAGMAAgODYxmM/mMxmMAAAAAAODYOAgODYxmM/mMxmMAAAAAADAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAAHYNhsfmw2DcAAAAAAAAAPjYzGY/mYzGYzGcAAAAAAAAAfgAAD4xmMxmMxj4AAAAAAAAAxgAAD4xmMxmMxj4AAAAAAAAAPDMwmAwG8xmMZh0DAMPAAAAAGAwfGMwGAxj4GAwAAAAAAGBgAD4xmMYBwDGMxj4AAAAAAAAADAwAD4xjAOAYxj4AAAAAAAGMAD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAAAAAAAAD4zm89nMxj4AAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAIfGczms1ms1nM5j4QAAAAAAAAAAAAGMbBwODYxgAAAAAAAAAAAAAxj4xmMxmMfGMAAAAAAfgAEBwbGMxn8xmMxmMAAAAAAfgAPAwGAwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAGAwAH8hgYGBgYGExn8AAAAAAAAAGAwAH8zAwMDAxn8AAAAAAAAYGBgAH8zAwMDAxn8AAAAAAABsbGwAAAAAAAAAAAAAAAAAAAAwGAwGAwAAAGAwGAwGAAAAAAAAfEEmlEolEmkEfAAAAAAAAAAAfEEslUslUqkEfAAAAAAAAAAAAAAAAAAD8AgEAAAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAAA8DIbDwcHA4DEZn8AAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwAAAEBwbGMxn8xmMxmMGBgHgAZh4AB4ZmEwGAwGEZh4AAAAAAAAA/jMYjQeDQYDEZn8GBgHgAGAw/jMYjQeDQYDEZn8AAAAAANhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAAAAAPAwGAwGAwGAwGB4GBgHgAbBwAD4xmAYBwDAMxj4AAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwAAAxmMxmMxmMxmMxj4MDAPAAfgAxmMxmMxmMxmMxj4AAAAAANhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsbBwAH8xkYGBgYGExn8AAAAAAAAAAAAADwDD4zGYzDsGBgHgAAAAbBwAD4xmAwGAxj4AAAAAAAAAAAAAD4xn8wGAxj4MDAPAAAAAGAwAD4xn8wGAxj4AAAAAAAAAGAwABwGAwGAwGB4GBgHgAAAAbBwAD4xjAOAYxj4AAAAAAAAAAAAAGYzGYzGYzDsMDAPAAAAAfAAAGYzGYzGYzDsAAAAAAAAAbBwAH8zAwMDAxn8AAAAAAGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAGBgAD4xmMxmMxmMxj4AAAAAAAAAeGYzGY2GYxmMxmYAAAAAAfgAAD4xmMxmMxmMxj4AAAAAADAwAGM5ns/m8zmMxmMAAAAAAAAAdm4AD4xmMxmMxj4AAAAAAdm4AD4xmMxmMxmMxj4AAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAYGBgAG4ZjMZjMZjMAAAAAAAAA5jMZjYeDwbDMZnMGAYeAAAAA4DAYDMbDweDYZnMGAYeAAAAA8DAYDAYDAYDEZn8GAYeAAAAAOAwGAwGAwGAwGB4GAYeAAAAAAAAAG4ZjMZjMZjMDAMPAAfgA/jMYjQeDQYDEZn8AAAAAAAAAAGM5ns/m8zmMxmMGAYeAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAABsbGwAAAAAAAAAAAAAAAAAAAHAMDENnYGBgZmcmh+BgMAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAAAAAAAAAA2DYNgAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAwOAwGAwPAAAAAAAAAAAAAAAD4Bh4BgMfAAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    316                 "amigaFont": false
    317             },
    318             "cyrillic": {
    319                 "width": 9,
    320                 "height": 16,
    321                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAfGMxmc1nMxmMxj4AAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAA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",
    322                 "amigaFont": false
    323             },
    324             "french_canadian": {
    325                 "width": 9,
    326                 "height": 16,
    327                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4GDgAAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAODYxggODYxmM/mMxmMAAAAAAADAMAwADwDD4zGYzDsAAAAAAAAAAD+2222z2Gw2Gw2AAAAAAAAAAAAAD4xmAwGAxj4GDgAAAAAgODYAD4xn8wGAxj4AAAAAAAAAxgAAD4xn8wGAxj4AAAAAAADAMAwAD4xn8wGAxj4AAAAAAAAAZgAABwGAwGAwGB4AAAAAAAAwPDMABwGAwGAwGB4AAAAAAAAAAAAAAAAAAAAAAAA/wA/wAGAYBggODYxmM/mMxmMAAAAAAAD4xjAODYxmMbBwDGMfAAAAADAwAH8ZjEaDwaDEZn8AAAAAAMAwAH8ZjEaDwaDEZn8AAAAAAODYAH8ZjEaDwaDEZn8AAAAAAAAgODYAD4xmMxmMxj4AAAAAAAGMAH8ZjEaDwaDEZn8AAAAAAADMAB4GAwGAwGAwGB4AAAAAAABgeGYAGYzGYzGYzDsAAAAAAADAMAwAGYzGYzGYzDsAAAAAAAAAAAAxj4xmMxmMfGMAAAAAAODYAD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAAAwGD4xmAwGAxj4GAwAAAAAAABwbDIYHgYDAYDA5n4AAAAAAMAwAGMxmMxmMxmMxj4AAAAAAODYAGMxmMxmMxmMxj4AAAAAAAAcGwwGAwfgwGAw2DgAAAAAAAAwGAwGAwAAAGAwGAwGAAAAAAAYGBgAAAAAAAAAAAAAAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwDDwAAAAD4Bh4BgMfAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAAAPDMAB4GAwGAwGAwGB4AAAAAAAAAAAAAAA/mAwGAwAAAAAAAAAAAAAAAAA/gMBgMBgAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAHAMHENnYGBgZmcmh+BgMAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAADs3Gw2Gw3DsAAAAAAAAAeGYzGY2GYxmMxmYAAAAAAAAA/mMxmAwGAwGAwGAAAAAAAAAAAAAAH8bDYbDYbDYAAAAAAAAA/mMYBgGAwMDAxn8AAAAAAAAAAAAAD82Gw2Gw2DgAAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAAAAAdm4GAwGAwGAwAAAAAAAAAfgwPDMZjMZh4GD8AAAAAAAAAODYxmM/mMxmMbBwAAAAAAAAAODYxmMxjYbDYbHcAAAAAAAAAHhgGAYPjMZjMZh4AAAAAAAAAAAAAD82222z8AAAAAAAAAAAAAAGBj82228z8YGAAAAAAAAAAHBgYDAfDAYDAMA4AAAAAAAAAAD4xmMxmMxmMxmMAAAAAAAAAAAA/gAAH8AAA/gAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAABgGAYBgYGBgAD8AAAAAAAAAAAYGBgYBgGAYAD8AAAAAAAAADg2GwwGAwGAwGAwGAwGAwGAwGAwGAwGAwGGw2GwcAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAADs3AAdm4AAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAeDAYDAYDHYbDYPA4AAAAAAADYNhsNhsNgAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    328                 "amigaFont": false
    329             },
    330             "greek": {
    331                 "width": 9,
    332                 "height": 16,
    333                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAA/jEYDAYDAYDAYHgAAAAAAAAAEBwbGMxmMxmMxn8AAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAfGMxmM/mMxmMxj4AAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAAEBwbGMxmMxmMxmMAAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAA/kEAAAfAAAAAgn8AAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/mMxmMxmMxmMxmMAAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAA/mAYBgGAwMDAwH8AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAAPAwfkymUyfgwGB4AAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAGG2222222fgwGB4AAAAAAAAAPDMw2Gw2GwzMJHOAAAAAAAAAAAAAD2zmYzGYzD2AAAAAAAAAfGMxmMxn4xmMxn4wGAwAAAAAAAAAGGZh4GB4ZiEZh4AAAAAAfDAMAweGYzGYzDwAAAAAAAAAAAAAD4xmAeGAxj4AAAAAAAAA/AYGBgYGAwGAwDwDAYeAAAAAAAAAG4ZjMZjMZjMBgMBgAAAAPjGYzGfzGYzGYx8AAAAAAAAAAAAAAwGAwGAwGgYAAAAAAAAAAAAAHMbDweDYZnMAAAAAAAAAPDMBgMBh8ZjMZjMAAAAAAAAAAAAADMZjMZjMZj+YDAYAAAAAAAAAHMZjMZjYeBgAAAAAAAAA/DAwDwMDAwGAwD4BgMPAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAH+ZjMZjMZjMAAAAAAAAAAAAAB4ZjMZjMZj4YDAYAAAAAAAAAD+zGYzGYzDwAAAAAAAAAAAAAD4xmAYB4BmMfAAAAAAAAAAAAH4MBgMBgNAwAAAAAAAAAAAAAHOZjMZjMZh4AAAAAAAAAAAAAC41ms1ms1j4EAgEAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGs1ms1ms1j4EAgEAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAADMw2Gw22/zMAAAAAAAAAOAgAD2zmYzGYzD2AAAAAAAAAOAgAD4xmAeGAxj4AAAAAAAAAOAgAG4ZjMZjMZjMBgMBgAAAAZgAAAwGAwGAwGgYAAAAAAAAAOAgAAwGAwGAwGgYAAAAAAAAAOAgAD4xmMxmMxj4AAAAAAAAAOAgAHOZjMZjMZh4AAAAAAAAAZgAAHOZjMZjMZh4AAAAAAAAAOAgADMw2Gw22/zMAAAAAAQEAEBwbGMxn8xmMxmMAAAAAAQEA/jMYjQeDQYDEZn8AAAAAAQEAxmMxmM/mMxmMxmMAAAAAAQEAPAwGAwGAwGAwGB4AAAAAAQEAfGMxmMxmMxmMxj4AAAAAAQEAZjMZjMPAwGAwGB4AAAAAAQEAPDMw2Gw2GwzMJHOAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAABgGAYBgYGBgAD8AAAAAAAAAAAYGBgYBgGAYAD8AAAAAAZgAPAwGAwGAwGAwGB4AAAAAAZgAZjMZjMPAwGAwGB4AAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAADs3AAdm4AAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAeDAYDAYDHYbDYPA4AAAAAAADYNhsNhsNgAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    334                 "amigaFont": false
    335             },
    336             "greek_869": {
    337                 "width": 9,
    338                 "height": 16,
    339                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABASA4NjGYz+YzGYzGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAAAAAAAAAAH8BgMAAAAAAAAAAAwGAwGAwGAAAAwGAwGAwGAAAAAGAwEAQAAAAAAAAAAAAAAAAAAGAwCAgAAAAAAAAAAAAAAAACAvxgMBgPhgMBgMB+AAAAAAAAAAAAAAAAH+AAAAAAAAAAAAACAsxmMxmPxmMxmMxmAAAAAAABAXgYDAYDAYDAYDA8AAAAAAZgAfgwGAwGAwGAwGD8AAAAAAACAvjGYzGYzGYzGYx8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAsxmMxmHgYDAYDAYAAAAAAZgAZjMZjMPAwGAwGAwAAAAAAAAAPCEmVKoVKmSEPAAAAAAAAACAuDYxmMxmMxjYKHcAAAAAAABwbAYGBgfAAAAAAAAAAAAAAAD4DBgDAYeAAAAAAAAAAAAAAAAACAgADszGYzGYzDsAAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAACAgAD4xmAeGAxj4AAAAAAAAACAgAG4ZjMZjMZjMBgAAAAAAACAgABgMBgMBgMA4AAAAAAAAAAGYABgMBgMBgMA4AAAAAACAgAGYABgMBgMBgMA4AAAAAAAAACAgAD4xmMxmMxj4AAAAAAAAABAQAHMZjMZjMZh4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAA/mAwGAwGAwGAwGAAAAAAAAAAEBwbDYxmMxmMxn8AAAAAAAAA/mAwGA/GAwGAwH8AAAAAAAAA/gMBgYGBgYGAwH8AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAADA4DEZjYGBgYG4hgYGB8AAAAAAfGMxmMxn8xmMxj4AAAAAAAAAfgwGAwGAwGAwGD8AAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwAAAxmY2Hg4Hg2GYxmMAAAAAAAAAEBwbDYxmMxmMxmMAAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAANhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAAAAA/mMAAAfD4AAAxn8AAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwAAA/7MZjMZjMZjMZjMAAAAAAAAA/GMxmM/GAwGAwGAAAAAAANhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsAAA/mAYBgGAwMDAwH8AAAAAAAAAfgwGAwGAwGAwGAwAAAAAAAAAZjMZjMPAwGAwGAwAAAAAAAAAED41ms1msfAgEBwAAAAAAAAAxmMbDYOBwbDYxmMAAAAAAAAAEGs1ms1msfAgEBwAAAAAAAAAODYxmMxmMxjYKHcAAAAAAAAAAAAADszGYzGYzDsAAAAAAAAAeGYzGY2H4xmMxn4wEAAAAAAAAAAAEExjYOD4xmMxmMfAAGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////AAAfjAMAwfGMxmMxj4AAAAAAAAAAAAAD4xmAeGAxj4AAAAAA//////////4AAAAAAAAAAAAAAAAfgMDAwMDAYDAYB8Bh4AAAAAAAAAAG4ZjMZjMZjMBgAAAAAAAfGMxjMNh8hmMxj4AAAAAAAAAAAAABgMBgMBgMA4AAAAAAAAAAAAAGMzGw8GwzGMAAAAAAAAAfGMBgMPjMZmMxmMAAAAAAAAAAAAAGMxmMxmM5m6wGAwAAAAAAAAAEExmMxjYbBwAAAAAAAAAfgwMBgHBgYDAYB8Bh4AAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAH+ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmM5m4wGAwAAAAAAAAAD82GYzGYzDwAAAAAAAAAAAAAD4xmAwD4BgMPAAAAAAAAAAAAH4MBgMBgNg4AAAAAAAAYGAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAAAAAHMZjMZjMZh4AAAAAAAAAAAAAA4Vms1ms1j4EAgEAAAAAAAAAGEbBwOBwbEMAAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAg1ms1ms1j4EAgEAABAQADMAAAAAAAAAAAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAAAAAAAAAACIxmM1ms1jYAAAAAAAAAADMAHMZjMZjMZh4AAAAAABAQADMAHMZjMZjMZh4AAAAAAAAACAgACIxmM1ms1jYAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    340                 "amigaFont": false
    341             },
    342             "hebrew": {
    343                 "width": 9,
    344                 "height": 16,
    345                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZm4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAAAAxmMZjs3GYxmMAAAAAAAAAAAA+AYDAYDAYDH8AAAAAAAAAAAAOAYDAYDA4NnMAAAAAAAAAAAA/gYDAYDAYDAYAAAAAAAAAAAA/AMBgMxmMxmMAAAAAAAAAAAAcAwGAwGAwGAwAAAAAAAAAAAA/BgMBgGAwMDAAAAAAAAAAAAA/DMxmMxmMxmMAAAAAAAAAAAAzGs1mMxmMxj4AAAAAAAAAAAAcAwGAwMAAAAAAAAAAAAAAAAA/AMBgMDAYDAYDAYDgAAAAAAA/AMBgMBgMBn4AAAAAAAAAwGA/AMBgMBgYGAwAAAAAAAAAAAA/DMxmMxmMxn8AAAAAAAAAAAA3DsZmMxmMxm8AAAAAAAAAAAAOAYDAwGAwGAwGAwHAAAAAAAAOAYDAYDAYDD4AAAAAAAAAAAA/DMxmMxmMzDwAAAAAAAAAAAA7jMZjMZjMLHwAAAAAAAAAAAA+CYzGY7AYDAYDAYDgAAAAAAA/CMxmM5gMBn8AAAAAAAAAAAA7jMZjYeDAYDAYDAcAAAAAAAA7jMZhoGAYBn8AAAAAAAAAAAA/AMBjMZDYbjAYDAYAAAAAAAA/AMBgMBgMBgMAAAAAAAAAAAA1ms1ms1nsxj4AAAAAAAAAAAA/DMZjMZjM5nMAAAAAAAAwGD4xmAwGAxj4GAwAAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAAZjMPAwfgwfgwGAwAAAAAAAHwzGY+GIzG8zGYzGMAAAAAAAAcGwwGAwfgwGAw2DgAAAAAAAAwMDAADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAAAdm4AG4ZjMZjMZjMAAAAAAdm4AGM5ns/m8zmMxmMAAAAAAAAAPDYbB8AD8AAAAAAAAAAAAAAAODYbBwAD4AAAAAAAAAAAAAAAMBgABgMDAwGMxj4AAAAAAAAAAAAAAA/mAwGAwAAAAAAAAAAAAAAAAA/gMBgMBgAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAAAGAwAAwGAwPB4PAwAAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAADs3Gw2Gw3DsAAAAAAAAAeGYzGY2GYxmMxmYAAAAAAAAA/mMxmAwGAwGAwGAAAAAAAAAAAAAAH8bDYbDYbDYAAAAAAAAA/mMYBgGAwMDAxn8AAAAAAAAAAAAAD82Gw2Gw2DgAAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAAAAAdm4GAwGAwGAwAAAAAAAAAfgwPDMZjMZh4GD8AAAAAAAAAODYxmM/mMxmMbBwAAAAAAAAAODYxmMxjYbDYbHcAAAAAAAAAHhgGAYPjMZjMZh4AAAAAAAAAAAAAD82222z8AAAAAAAAAAAAAAGBj82228z8YGAAAAAAAAAAHBgYDAfDAYDAMA4AAAAAAAAAAD4xmMxmMxmMxmMAAAAAAAAAAAA/gAAH8AAA/gAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAABgGAYBgYGBgAD8AAAAAAAAAAAYGBgYBgGAYAD8AAAAAAAAADg2GwwGAwGAwGAwGAwGAwGAwGAwGAwGAwGGw2GwcAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAADs3AAdm4AAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAeDAYDAYDHYbDYPA4AAAAAAADYNhsNhsNgAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    346                 "amigaFont": false
    347             },
    348             "icelandic": {
    349                 "width": 9,
    350                 "height": 16,
    351                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcHhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwGD8PAwAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAAAH8/n8AAAAAAAAAGB4fgwGAwGD8PAwfgAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAGAwGAwH8AAAAAAAAAAAAAAAABIZn+ZhIAAAAAAAAAAAAAAgEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAAAwGD4xmEwD4BkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAAAwGAwMAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGH+GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAABgMDAYGAwMBgYDAAAAAAAAAAfGMxms1ms1mMxj4AAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAAA/gAAH8AAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgMDAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAADwMBgMBgMBmMxj4AAAAAAAAA5jMbDYeD4bDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAODYxmMxmMxmMbBwAAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmMxms1n8bDYAAAAAAAAAxmMbDYOBwbDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAYDAMBgGAwDAYBgMAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZm4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAODYZDA8DAYDAYHgAAAAAAAAAAAAADszGYzGYfAYDGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1msxmMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMfDAYDA8AAAAAAAAADszGYzGYfAYDAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAADMZjMZjMPAwAAAAAAAAAAAAAGMxmM1ms/jYAAAAAAAAAAAAAGMxjYODYxmMAAAAAAAAAAAAAGMxmMxmMfgMBgYeAAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcDgGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgcGAwGDgAAAAAAAAAdm4AAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4GAYOAAAAAzGYAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAAAAzGYADwDD4zGYzDsAAAAAAADAMAwADwDD4zGYzDsAAAAAAABwbBwADwDD4zGYzDsAAAAAAAAAAAAAD4xmAwGAxj4GAYOAAAAgODYAD4xn8wGAxj4AAAAAAAAAzGYAD4xn8wGAxj4AAAAAAADAMAwAD4xn8wGAxj4AAAAAAAAA+DYZjM9jMZjMbHwAAAAAAAAAbBg2AYfmMxmMxj4AAAAAAAAA8DAfDMZjMZj4YHgAAAAAAxmMEBwbGMxn8xmMxmMAAAAAAODYOAAODYxmM/mMxmMAAAAAADAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAAHYNjs3mw2DcAAAAAAAAAPjYzGY/mYzGYzGcAAAAAAAAgODYAD4xmMxmMxj4AAAAAAAAAxmMAD4xmMxmMxj4AAAAAAAAA4DAYD4ZjMZjMfDAYDA8AAABgeGYAGYzGYzGYzDsAAAAAADAwADMZjMZh4GAwGB4AAAAAAAAYGBgAGMxmMxmMfgMBgYeAAxmMODYxmMxmMxmMbBwAAAAAAxmMAGMxmMxmMxmMxj4AAAAAAAAAAAABj4zm81nM5j4wAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAMPDYzmc1ms5nMbDwwAAAAAAHwzGY+GIzG8zGYzGMAAAAAAAAcGwwGAwfgwGAwGAw2DgAAAAAYGBgADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAYGBgAD4xmMxmMxj4AAAAAAAAYGBgAGYzGYzGYzDsAAAAAADAwABwbGMxn8xmMxmMAAAAAADAwAB4GAwGAwGAwGB4AAAAAADAwABwbGMxmMxmMbBwAAAAAADAwAGMxmMxmMxmMxj4AAAAAAAAAMBgABgMDAwGMxj4AAAAAAAAAAAAAAA/mAwGAAAAAAAAAAAAAAAAAAA/gMBgMAAAAAAAAAAGAwGExmYGBgYG4pgYGB8AAAAGAwGExmYGBgZmcnh8BgMAAAAAAGAwAAwGAwPB4PAwAAAAAAAAAAAAABmZmYZhmAAAAAAAAAAAAAAAAGYZhmZmYAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAADs3Gw2Gw3DsAAAAAAAAAeGYzGY2GYxmMxm4AAAAAAAAA/mMxmAwGAwGAwGAAAAAAAAAAAAAAH8bDYbDYbDYAAAAAAAAA/mMYBgGAwMDAxn8AAAAAAAAAAAAAD82Gw2Gw2DgAAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAAAAAADs3AwGAwGAwAAAAAAAAAPAwPDMZjMZh4GB4AAAAAAAAAODYxmM/mMxmMbBwAAAAAAAAAODYxmMxmMxjYbHcAAAAAAAAAHhgGAYPjMZjMZh4AAAAAAAAAAAAAD82222z8AAAAAAAAAAAAAAGBj82228z8YGAAAAAAAAAAHBgYDAfDAYDAMA4AAAAAAAAAfGMxmMxmMxmMxmMAAAAAAAAAAAA/gAAH8AAA/gAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAABgGAYBgYGBgAD8AAAAAAAAAAAYGBgYBgGAYAD8AAAAAAAAADg2GwwGAwGAwGAwGAwGAwGAwGAwGAwGAw2Gw2DgAAAAAAAAAAAAGAwAD8AAwGAAAAAAAAAAAAAAADs3AAdm4AAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAeDAYDAYDHYbDYPA4AAAAAAAGwbDYbDYbAAAAAAAAAAAAAAADg2BgYGQ+AAAAAAAAAAAAAAAAAAAAfD4fD4fD4fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    352                 "amigaFont": false
    353             },
    354             "latin1": {
    355                 "width": 9,
    356                 "height": 16,
    357                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4GDgAAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAAAAzAAADwDD4zGYzDsAAAAAAADAMAwADwDD4zGYzDsAAAAAAABwbBwADwDD4zGYzDsAAAAAAAAAAAAAD4xmAwGAxj4GDgAAAAAgODYAD4xn8wGAxj4AAAAAAAAAxgAAD4xn8wGAxj4AAAAAAADAMAwAD4xn8wGAxj4AAAAAAAAAZgAABwGAwGAwGB4AAAAAAAAwPDMABwGAwGAwGB4AAAAAAADAMAwABwGAwGAwGB4AAAAAAAGMAAgODYxmM/mMxmMAAAAAAODYOAgODYxmM/mMxmMAAAAAADAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAAHYNhsfmw2DcAAAAAAAAAPjYzGY/mYzGYzGcAAAAAAAAgODYAD4xmMxmMxj4AAAAAAAAAxgAAD4xmMxmMxj4AAAAAAADAMAwAD4xmMxmMxj4AAAAAAABgeGYAGYzGYzGYzDsAAAAAAADAMAwAGYzGYzGYzDsAAAAAAAAAxgAAGMxmMxmMxj8BgYeAAAGMAD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAAAAAAAAD4zm89nMxj4AAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAIfGczms1ms1nM5j4QAAAAAAAAAAAAGMbBwODYxgAAAAAAAAAcGwwGAwfgwGAw2DgAAAAAAAAwMDAADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAAAdm4AG4ZjMZjMZjMAAAAAAdm4AGM5ns/m8zmMxmMAAAAAAAAAPDYbB8AD8AAAAAAAAAAAAAAAODYbBwAD4AAAAAAAAAAAAAAAMBgABgMDAwGMxj4AAAAAAAAAfEEslUslUqkEfAAAAAAAAAAAAAAAAA/gMBgMBgAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAAAGAwAAwGAwPB4PAwAAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwYGAEBwbGMxn8xmMxmMAAAAAAfGMEBwbGMxn8xmMxmMAAAAAADAMEBwbGMxn8xmMxmMAAAAAAAAAfEEmlEolEmkEfAAAAAAAANhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAAAAAGAwfGMwGAxj4GAwAAAAAAAAAADMZh4GD8GD8GAwAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwAAAdm4ADwDD4zGYzDsAAAAAAdm4ABwbGMxn8xmMxmMAAAAAANhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsAAAAAAxj4xmMxmMfGMAAAAAAAAANAwLAMPjMZjMZh4AAAAAAAAA+DYZjM9jMZjMbHwAAAAAAODYAH8ZjEaDwaDEZn8AAAAAAAGMAH8ZjEaDwaDEZn8AAAAAAMAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAABwGAwGAwGB4AAAAAADAwAB4GAwGAwGAwGB4AAAAAAPDMAB4GAwGAwGAwGB4AAAAAAADMAB4GAwGAwGAwGB4AAAAAAGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////AAwGAwGAwAAAGAwGAwGAAAAAMAwAB4GAwGAwGAwGB4AAAAAA//////////4AAAAAAAAAAAAAGBgAD4xmMxmMxmMxj4AAAAAAAAAeGYzGY2GYxmMxmYAAAAAAODYAD4xmMxmMxmMxj4AAAAAAMAwAD4xmMxmMxmMxj4AAAAAAAAAdm4AD4xmMxmMxj4AAAAAAdm4AD4xmMxmMxmMxj4AAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAA4DAYD4ZjMZjMZj4YDA8AAAAA8DAfDMZjMZj4YHgAAAAAAGBgAGMxmMxmMxmMxj4AAAAAAODYAGMxmMxmMxmMxj4AAAAAAMAwAGMxmMxmMxmMxj4AAAAAAAAYGBgAGMxmMxmMxj8BgY+AADAwADMZjMZh4GAwGB4AAAAAAAH+AAAAAAAAAAAAAAAAAAAAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAAAAAAAAAAAAAAAA/wA/wAAHAMDENnYGBgZmcmh+BgMAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAAAAAAAAAAAAwDDwAAAABwbDYOAAAAAAAAAAAAAAAAAAGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAwOAwGAwPAAAAAAAAAAAAAAAD4Bh4BgMfAAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    358                 "amigaFont": false
    359             },
    360             "latin2": {
    361                 "width": 9,
    362                 "height": 16,
    363                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPhsPhgMBgMDg8HAAAAAAAAAAfjMfjMZjMZjc7nYwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH4YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAAGMxmMRAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgYGBgMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnsAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAMBgGAAAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGYzGYzGYeBgAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwAAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAAAAdm4AAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4DAMfAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAAAAzAAADwDD4zGYzDsAAAAAAADwzDwAGYzGYzGYzDsAAAAAAAAYGBgAD4xmAwGAxj4AAAAAAAAAAAAAD4xmAwGAxj4GAYeAAAAAOA0Hg4GBweCwGB4AAAAAAAAAxgAAD4xn8wGAxj4AAAAAANjYAD4xmMxmMxmMxj4AAAAAAAAANjYAD4xmMxmMxj4AAAAAAAAwPDMABwGAwGAwGB4AAAAAAGBgAH8hgYGBgYGExn8AAAAAAAGMEBwbGMxn8xmMxmMAAAAAADAwAB4ZmEwGAwGEZh4AAAAAAGBgYAA/jMYDwYDEZn8AAAAAAMDAAHgYDAYDAYDEZn8AAAAAAMDAAHAYDAYDAYDAYHgAAAAAAAAgODYAD4xmMxmMxj4AAAAAAAAAxgAAD4xmMxmMxj4AAAAAAAAA9jEZDAYDAYDEZn8AAAAAAAAA7DIaDAYDAYDAYHgAAAAAAGBgAD4xmMYBwDGMxj4AAAAAAAAADAwAD4xjAOAYxj4AAAAAAAGMAD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAZh4AD8fi0GAwGAwGB4AAAAAAAAMEhoMH4MBgMBgNg4AAAAAAAAA8DIbDwcHA4DEZn8AAAAAAAAAAAAAAAxjYODYxgAAAAAAAAAAbBwAD4xmAwGAxj4AAAAAAAAwMDAADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAAAEBwbGMxn8xmMxmMGBgHgAAAAAAAADwDD4zGYzDsGBgHgAbBwAH8xkYGBgYGExn8AAAAAAAAAbBwAH8zAwMDAxn8AAAAAAAAA/jMYjQeDQYDEZn8GBgHgAAAAAAAAD4xn8wGAxj4MDAPAAAAAAAAAAA/gMBgMBgAAAAAAAAAYGBgAH8zAwMDAxn8AAAAAAZh4AB4ZmEwGAwGEZh4AAAAAAAAAAAAAD4xjAOAYxj4GAYeAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAADYNg2NjYAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGBgAAgODYxmM/mMxmMAAAAAAODYAAgODYxmM/mMxmMAAAAAAbBwAH8ZjEaDwaDEZn8AAAAAAAAAfGMxjAOAYBmMxj4GAYeAANhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAAGAwAH8hgYGBgYGExn8AAAAAAAAAGAwAH8zAwMDAxn8AAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwxj4AAgODYxmM/mMxmMAAAAAAAAAxj4ADwDD4zGYzDsAAAAAANhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsAAAAAAAGMfGMxmMfGMAAAAAAAAADAYfgYPDYzGYzDsAAAAAAAAA+DYZjM9jMZjMbHwAAAAAAbBwAHwbDMZjMZjMbHwAAAAAAbAAAH8ZjEaDwaDEZn8AAAAAAAAAHYbDZ4bGYzGYzDsAAAAAAbBwAGM5ns/m8zmMxmMAAAAAADAwAB4GAwGAwGAwGB4AAAAAAPDMAB4GAwGAwGAwGB4AAAAAAAAAZh4AD4xn8wGAxj4AAAAAAGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////AAAfj8WgwGAwGAwGB4GAYeAAODYOAAxmMxmMxmMxj4AAAAAA//////////4AAAAAAAAAAAAADAwAD4xmMxmMxmMxj4AAAAAAAAAeGYzGY2GYxmMxmYAAAAAAODYAD4xmMxmMxmMxj4AAAAAADAwAGM5ns/m8zmMxmMAAAAAAAAYGBgAG4ZjMZjMZjMAAAAAAAAAbBwAG4ZjMZjMZjMAAAAAAbBwAD4xmAYBwDAMxj4AAAAAAAAAbBwAD4xjAOAYxj4AAAAAAGBgAH4ZjMZj4bDMZnsAAAAAAGBgAGMxmMxmMxmMxj4AAAAAAAAYGBgAG4djMYDAYHgAAAAAANjYAGMxmMxmMxmMxj4AAAAAAAAYGBgAGMxmMxmMxj8BgY+AADAwADMZjMZh4GAwGB4AAAAAAAAAEBgMH4MBgMBgNg4GAYeAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAABsbGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAPAAADYOAAAAAAAAAAAAAAAAAAAAAGMfAAAAAAAAAAAAAAAAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAGAwAD8AAwGAAAAAAAAAAAAAAAAAAAAAAAAAAGAYeAAABwbDYOAAAAAAAAAAAAAAAAAADYbAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAANjYAGYzGYzGYzDsAAAAAAbBwAH4ZjMZj4bDMZnsAAAAAAAAAbBwAG4djMYDAYHgAAAAAAAAAAAAfD4fD4fD4fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    364                 "amigaFont": false
    365             },
    366             "nordic": {
    367                 "width": 9,
    368                 "height": 16,
    369                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4GDgAAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAAAAzAAADwDD4zGYzDsAAAAAAADAMAwADwDD4zGYzDsAAAAAAABwbBwADwDD4zGYzDsAAAAAAAAAAAAAD4xmAwGAxj4GDgAAAAAgODYAD4xn8wGAxj4AAAAAAAAAxgAAD4xn8wGAxj4AAAAAAADAMAwAD4xn8wGAxj4AAAAAAAAAZgAABwGAwGAwGB4AAAAAAAAwPDMABwGAwGAwGB4AAAAAAADAMAwABwGAwGAwGB4AAAAAAAGMAAgODYxmM/mMxmMAAAAAAODYOAgODYxmM/mMxmMAAAAAADAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAAHYNhsfmw2DcAAAAAAAAAPjYzGY/mYzGYzGcAAAAAAAAgODYAD4xmMxmMxj4AAAAAAAAAxgAAD4xmMxmMxj4AAAAAAADAMAwAD4xmMxmMxj4AAAAAAABgeGYAGYzGYzGYzDsAAAAAAADAMAwAGYzGYzGYzDsAAAAAAAAAxgAAGMxmMxmMxj8BgYeAAAGMAD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAAAAAAAAD4xmc1nMxj4AAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAIfGczms1ms1nM5j4QAAAAAAHwzGY+GIzG8zGYzGMAAAAAAAAcGwwGAwfgwGAw2DgAAAAAAAAwMDAADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAAAdm4AG4ZjMZjMZjMAAAAAAdm4AGM5ns/m8zmMxmMAAAAAAAAAPDYbB8AD8AAAAAAAAAAAAAAAODYbBwAD4AAAAAAAAAAAAAAAMBgABgMDAwGMxj4AAAAAAAAAAAAAAA/mAwGAwAAAAAAAAAAAAAAAAA/gMBgMBgAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAAAGAwAAwGAwPB4PAwAAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAxj4xmMxmMfGMAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAADs3Gw2Gw3DsAAAAAAAAAeGYzGY2GYxmMxmYAAAAAAAAA/mMxmAwGAwGAwGAAAAAAAAAAAAAAH8bDYbDYbDYAAAAAAAAA/mMYBgGAwMDAxn8AAAAAAAAAAAAAD82Gw2Gw2DgAAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAAAAAdm4GAwGAwGAwAAAAAAAAAfgwPDMZjMZh4GD8AAAAAAAAAODYxmM/mMxmMbBwAAAAAAAAAODYxmMxjYbDYbHcAAAAAAAAAHhgGAYPjMZjMZh4AAAAAAAAAAAAAD82222z8AAAAAAAAAAAAAAGBj82228z8YGAAAAAAAAAAHBgYDAfDAYDAMA4AAAAAAAAAAD4xmMxmMxmMxmMAAAAAAAAAAAA/gAAH8AAA/gAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAABgGAYBgYGBgAD8AAAAAAAAAAAYGBgYBgGAYAD8AAAAAAAAADg2GwwGAwGAwGAwGAwGAwGAwGAwGAwGAwGGw2GwcAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAADs3AAdm4AAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAeDAYDAYDHYbDYPA4AAAAAAADYNhsNhsNgAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    370                 "amigaFont": false
    371             },
    372             "persian": {
    373                 "width": 9,
    374                 "height": 16,
    375                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABIZn+ZhIAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAPDMw2G222w2GZh4AAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAw3O/3+22Gw2Gw2GAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAA/22mQwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAw2Gw2Gw2GwzMPAwAAAAAAAAAw2Gw2Gw2223+ZjMAAAAAAAAAw2GZh4GAwPDMw2GAAAAAAAAAw2GwzMPAwGAwGB4AAAAAAAAA/2GhgYGBgYGCw3+AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAMBgGAAAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAODYZDA8DAYDAYHgAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHM/22222222AAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGGw2GwzMPAwAAAAAAAAAAAAAGGw2G222/zMAAAAAAAAAAAAAGGZh4GB4ZmGAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwAAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAAAAAAAAAAAAAAAQEAgCAOAAAAAAAAAAAACAgDwAAAAAAAAAAAAAAAAAAAAAAAAgOAgAAAAAAAAAAAgEAgEAQCAQBAIBAIAAAAAAAAEQj4QBAIBAEAgEAgAAAAAAACSSTsQBAIBAEAgEAgAAAAAAAAMCAgEAYCAgIBAIA8AAAAAAAAAEAQFBIIiEQUCkTcAAAAAAACEPgEAgIBAIBAEAgEAAAAAAACEQiEQhEJBIFAwGAgAAAAAAAAQGAwFBIJBEQiEQiEAAAAAAAAwJCIRB4BAIBAEAgEAAAAAAAAAAAADAwGAwAAAAAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAB4QiAQBAEAYDAAAAYDAAAAAAACPiACAQCAQCAQCAAAAAAAAAAAAAMCAcEACAX8AAAAAAAAAAAAAAAAAQEAgDAgBAQAAAAAAAACAQCAQCAQCAQCAAAAAAAAAAAIBAIBAIBAIBAGAAAAAAAAAAAAAAAAAAACCgT8AAAEAAAAAAAAAAAAAAAACAX8AAAEAAAAAAAAAAAAAAACCgT8AAAFAQAAAAAAAAAAAAAACAX8AAAKAgAAAAAAAAAFAAACCgT8AAAAAAAAAAAAAAAFAAAACAX8AAAAAAAAAAAAAAQFAAACCgT8AAAAAAAAAAAAAAQFAAAACAX8AAAAAAAAAAAAAAAAAwJAEHxAQCARCAIQ8AAAAAAAAAGBIAn+AAACAAAAAAAAAAAAAwJAEHxAQCURCAIQ8AAAAAAAAAGBIAn+AAAKAgAAAAAAAAAAAwJAEHxAQCAQCAIQ8AAAAAAAAAGBIAn+AAAAAAAAAAAAEAAAAwJAEHxAQCAQCAIQ8AAAAAgAAAGBIAn+AAAAAAAAAAAAAAAAAIAgCIQ8AAAAAAAAAAAACAAAAIAgCIQ8AAAAAAAAAAAAAAAAAAAAEAQCAQEBBwAAAAAAAAAAgAAAEAQCAQEBBwAAAAAAAAICgAAAEAQCAQEBBwAAAAAAAAAAAAABKFQ+EAgIGAAAAAAAAAAAAAAACJX8AAAAAAAAAAAAAAICgAABKFQ+EAgIGAAAAAAAAAQFAAAACJX8AAAAAAAAAAAAAAAAAAAgKKQ8EAgIGAAAAAAAAAAAAABhSMX8AAAAAAAAAAAAAAIAAAAgKKQ8EAgIGAAAAAAABAAAAABhSMX8AAAAAAAAAABAIBAIBAJhSMX8AAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVUAAAAQCAgEBEISBQEAAAAAAAAGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAw+AwGAwGAwGAwGAwGAwGAw+Aw+AwGAwGAwGAwNhsNhsNhsNhs9hsNhsNhsNhsAAAAAAAAAAAA/hsNhsNhsNhsAAAAAAAAA+Aw+AwGAwGAwGAwNhsNhsNhs9gM9hsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAAA/gM9hsNhsNhsNhsNhsNhsNhs9gM/gAAAAAAAAAANhsNhsNhsNhs/gAAAAAAAAAAGAwGAwGAw+Aw+AAAAAAAAAAAAAAAAAAAAAAA+AwGAwGAwGAwGAwGAwGAwGAwH4AAAAAAAAAAGAwGAwGAwGAw/4AAAAAAAAAAAAAAAAAAAAAA/4wGAwGAwGAwGAwGAwGAwGAwH4wGAwGAwGAwAAAAAAAAAAAA/4AAAAAAAAAAGAwGAwGAwGAw/4wGAwGAwGAwGAwGAwGAwH4wH4wGAwGAwGAwNhsNhsNhsNhsN5sNhsNhsNhsNhsNhsNhsN5gP4AAAAAAAAAAAAAAAAAAAP5gN5sNhsNhsNhsNhsNhsNhs94A/4AAAAAAAAAAAAAAAAAAA/4A95sNhsNhsNhsNhsNhsNhsN5gN5sNhsNhsNhsAAAAAAAAA/4A/4AAAAAAAAAANhsNhsNhs94A95sNhsNhsNhsGAwGAwGAw/4A/4AAAAAAAAAANhsNhsNhsNhs/4AAAAAAAAAAAAAAAAAAA/4A/4wGAwGAwGAwAAAAAAAAAAAA/5sNhsNhsNhsNhsNhsNhsNhsP4AAAAAAAAAAGAwGAwGAwH4wH4AAAAAAAAAAAAAAAAAAAH4wH4wGAwGAwGAwAAAAAAAAAAAAP5sNhsNhsNhsNhsNhsNhsNhs/5sNhsNhsNhsGAwGAwGAw/4w/4wGAwGAwGAwGAwGAwGAwGAw+AAAAAAAAAAAAAAAAAAAAAAAH4wGAwGAwGAw////////////////////////AAAAAAAAAAAA////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f////////////AAAAAAAAAAAAABAIBIIBAJhSMX8AAAAAAAAAAAAAAADAgEAQHhAQCAQCAIQ8AAAAAAAAcHgYExAQCAQCAIQ8AAAAAAAAAHB4GHOAAAAAAAAAAAAAAAAAYEggCH+AAAAAAAAAAAACAADAgEAQHhAQCAQCAIQ8AAABAAAAcHgYExAQCAQCAIQ8AAAAAQAAAHB4GHOAAAAAAAAAAAACAAAAYEggCH+AAAAAAAAAAAAAgAAAEBSOgT8AAAAAAAAAAAAAgAAAEBQOAX8AAAAAAAAAAAAAAUAAAAgKJSGQSCQREHAAAAACgAAAEBQOAX8AAAAAAAAAAACAQCCQiCQigT8AAAAAAAAAAQEBAQEAgDgCAX8AAAAAAAAABQUFAQEAwBgCgT8AAAAAAAAABQUFAQEAgDgCAX8AAAAAAAAAAACAQCAQCAQCISCQSCQR8AAAAACIRCEQiCQSBg+AAAAAAAAAAACAQCAQCAQCAX8AAAAAAAAAAAAAAAAAADAcHxAIBAIBAIBAAAAAAAAAAAAMCXsAAAAAAAAAAAAAAAAAIAACISCQSCQRCHgAAAAAAACAAAACAX8AAAAAAAAAAAAAAAAAAAgKBQGAQEBDwAAAAAAAAAAAIBgSCQMAAAAAAAAAAAAAAAAAAHBIKHmJAkDgAAAAAAAAAACAIHhKGXsAAAAAAAAAAAAAAAAAAAAAAAOCCQhEEgj4AAAAAAAAABgQSEIgkEgj4AAAAAAAAAAAAAACAX8AAAKAAAAAAAAAH+VX+VX+VX+5Xu/X+/3+",
    376                 "amigaFont": false
    377             },
    378             "portuguese": {
    379                 "width": 9,
    380                 "height": 16,
    381                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4GDgAAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAAAAdm4ADwDD4zGYzDsAAAAAAADAMAwADwDD4zGYzDsAAAAAAYGAEBwbGMxn8xmMxmMAAAAAAAAAAAAAD4xmAwGAxj4GDgAAAAAgODYAD4xn8wGAxj4AAAAAAODYAH8ZjEaDwaDEZn8AAAAAAADAMAwAD4xn8wGAxj4AAAAAADAwAB4GAwGAwGAwGB4AAAAAAODYAD4xmMxmMxmMxj4AAAAAAADAMAwABwGAwGAwGB4AAAAAAdm4ABwbGMxn8xmMxmMAAAAAAODYxhwbGMxn8xmMxmMAAAAAADAwAH8ZjEaDwaDEZn8AAAAAADAMEBwbGMxn8xmMxmMAAAAAAMAwAH8ZjEaDwaDEZn8AAAAAAAAgODYAD4xmMxmMxj4AAAAAAAAAdm4AD4xmMxmMxj4AAAAAAADAMAwAD4xmMxmMxj4AAAAAAGBgAGMxmMxmMxmMxj4AAAAAAADAMAwAGYzGYzGYzDsAAAAAAMAwAB4GAwGAwGAwGB4AAAAAAdm4AD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAAAwGD4xmAwGAxj4GAwAAAAAAABwbDIYHgYDAYDA5n4AAAAAAMAwAGMxmMxmMxmMxj4AAAAAAAHwzGY+GIzG8zGYzGMAAAAAAGBgAD4xmMxmMxmMxj4AAAAAAAAwMDAADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAAAdm4AG4ZjMZjMZjMAAAAAAdm4AGM5ns/m8zmMxmMAAAAAAAAAPDYbB8AD8AAAAAAAAAAAAAAAODYbBwAD4AAAAAAAAAAAAAAAMBgABgMDAwGMxj4AAAAAAMAwAD4xmMxmMxmMxj4AAAAAAAAAAAAAAA/gMBgMBgAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAAAGAwAAwGAwPB4PAwAAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAADs3Gw2Gw3DsAAAAAAAAAeGYzGY2GYxmMxmYAAAAAAAAA/mMxmAwGAwGAwGAAAAAAAAAAAAAAH8bDYbDYbDYAAAAAAAAA/mMYBgGAwMDAxn8AAAAAAAAAAAAAD82Gw2Gw2DgAAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAAAAAdm4GAwGAwGAwAAAAAAAAAfgwPDMZjMZh4GD8AAAAAAAAAODYxmM/mMxmMbBwAAAAAAAAAODYxmMxjYbDYbHcAAAAAAAAAHhgGAYPjMZjMZh4AAAAAAAAAAAAAD82222z8AAAAAAAAAAAAAAGBj82228z8YGAAAAAAAAAAHBgYDAfDAYDAMA4AAAAAAAAAAD4xmMxmMxmMxmMAAAAAAAAAAAA/gAAH8AAA/gAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAABgGAYBgYGBgAD8AAAAAAAAAAAYGBgYBgGAYAD8AAAAAAAAADg2GwwGAwGAwGAwGAwGAwGAwGAwGAwGAwGGw2GwcAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAADs3AAdm4AAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAeDAYDAYDHYbDYPA4AAAAAAADYNhsNhsNgAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    382                 "amigaFont": false
    383             },
    384             "russian": {
    385                 "width": 9,
    386                 "height": 16,
    387                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAfGMxmc1nMxmMxj4AAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAHhsZmMxn8xmMxmMAAAAAAAAA/jEYDAfDMZjMZn4AAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAA/jMYjAYDAYDAYHgAAAAAAAAAHhsZjMZjMZjMZn+w0CAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA222Wi0fj8Wm2222AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAAxmMxmc3ns5mMxmMAAAAAAbBwxmMxmc3ns5mMxmMAAAAAAAAA5jMbDYeDwbDYZnMAAAAAAAAAHxsZjMZjMZjMZmeAAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/mMxmMxmMxmMxmMAAAAAAAAA/DMZjMZj4YDAYHgAAAAAAAAAfGMxmAwGAwGExj4AAAAAAAAA/22mQwGAwGAwGB4AAAAAAAAAxmMxmMxj8BgMxj4AAAAAAAAAfm22222222z8GB4AAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAxmMxmMxmMxmMxn+AwGAAAAAAxmMxmMxj8BgMBgMAAAAAAAAA1ms1ms1ms1ms1n8AAAAAAAAA1ms1ms1ms1ms1n+AwGAAAAAA+HgsBgPhmMxmMz8AAAAAAAAAw2Gw2G82222223mAAAAAAAAA8DAYDAfDMZjMZn4AAAAAAAAAfGMBhMPhMBgMxj4AAAAAAAAAzm2222+2222222cAAAAAAAAAPzMZjMPh8ZjMZnOAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAEBj4wGA/GMxmMxj4AAAAAAAAAAAAAH4ZjMfDMZn4AAAAAAAAAAAAAH8YjEYDAYHgAAAAAAAAAAAAAA8NjMZjMZn+w2GAAAAAAAAAAD4xmM/mAxj4AAAAAAAAAAAAAGs1iofCo1msAAAAAAAAAAAAAD4xgMPAMxj4AAAAAAAAAAAAAGMxmc1nMxmMAAAAAAAAAADYOGMxmc1nMxmMAAAAAAAAAAAAAHMbDweDYZnMAAAAAAAAAAAAAA8NjMZjMZnMAAAAAAAAAAAAAGM7n8/ms1mMAAAAAAAAAAAAAGMxmM/mMxmMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAH8xmMxmMxmMAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAAD4xmAwGAxj4AAAAAAAAAAAAAD8WgwGAwGB4AAAAAAAAAAAAAGMxmMxmMfgMBmMfAAAAAAB4GD82222222z8GAwPAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxn+AwGAAAAAAAAAAGMxmMxj8BgMAAAAAAAAAAAAAGs1ms1ms1n8AAAAAAAAAAAAAGs1ms1ms1n8AwGAAAAAAAAAAHwsFgPhmMz8AAAAAAAAAAAAAGMxmM9m83nsAAAAAAAAAAAAAHgYDAfDMZn4AAAAAAAAAAAAAD4xgMPgMxj4AAAAAAAAAAAAAGc222+2222cAAAAAAAAAAAAAD+xmMfhsZnOAAAAAAbAA/jMYjQeDQYDEZn8AAAAAAAAAADYAD4xmM/GAxj4AAAAAAAAAfGMwGQ+GQwGAxj4AAAAAAAAAAAAAD4xmA+GAxj4AAAAAAZgAPAwGAwGAwGAwGB4AAAAAAAAAADYABwGAwGAwGB4AAAAAAbBwxmMxmMxj8BgMxj4AAAAAAAAAADYOGMxmMxmMfgMBmMfAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAcDAYDAYDAY7DYPA4AAAAAAAAAz2a73Y/243GYzGYAAAAAAAAAAGMfGMxmMxmMfGMAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    388                 "amigaFont": false
    389             },
    390             "terminus": {
    391                 "width": 9,
    392                 "height": 16,
    393                 "data": "AAAfiEQiEQiEQiEQj8AAAAAAAAAfEEqkEgl0kkEgj4AAAAAAAAAfH81n8/mM7n8/j4AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAEBwOAgVH8/ioEBwAAAAAAAAAEAgOD4/n8fAgEBwAAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAAAGBIJAwAAAAAAAAA/3+/3+/3+52223O/3+/3+/3+AAAHgMCgkOCIRCIRBwAAAAAAAAAOCIRCIRBwED4EAgAAAAAAAAAPhEPhAIBAIBAIGAAAAAAAAAAfiEfiEQiEQiEQiIgAAAAAAAAAAgkioOHcOCokggAAAAAAAAAAAAwHg/H+/HgwAAAAAAAAAAAAAAAweP3+PweAwAAAAAAAAAAEBwVAgEAgECoOAgAAAAAAAAAJBIJBIJBIJAAJBIAAAAAAAAAfkkkkkkjkEgkEgkAAAAAAABwRCAMCQRCIJAwBCIOAAAAAAAAAAAAAAAAAfj8fj8AAAAAAAAAEBwVAgEAgVBwED4AAAAAAAAAEBwVAgEAgEAgEAgAAAAAAAAAEAgEAgEAgECoOAgAAAAAAAAAAAAAAQBH8BAQAAAAAAAAAAAAAAAABAQH8QBAAAAAAAAAAAAAAAAQCAQCAQD8AAAAAAAAAAAAAAAABIQn+QhIAAAAAAAAAAAAAAAEAgOBwfD4/n8AAAAAAAAAAAA/n8fD4OBwEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgEAgEAgEAAEAgAAAAAAABIJBIAAAAAAAAAAAAAAAAAAAAAJBIJD8JBIfhIJBIAAAAAAAAgED4kkgkD4Egkkj4EAgAAAAAAZEoaAQEAgIBYUiYAAAAAAAAAGBIJAwMCURCIRB0AAAAAAAAgEAgAAAAAAAAAAAAAAAAAAAAACAgIBAIBAIBAEAQAAAAAAAAAIAgCAQCAQCAQEBAAAAAAAAAAAAAABIGD8GBIAAAAAAAAAAAAAAAAAgED4EAgAAAAAAAAAAAAAAAAAAAAAAAAEAgIAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAgAAAAAAAAABAICAQEAgIBAQCAAAAAAAAAAPCEQiMSikYiEQh4AAAAAAAAACAwKAQCAQCAQCB8AAAAAAAAAPCEQgEBAQEBAQD8AAAAAAAAAPCEQgEHAEAiEQh4AAAAAAAAAAgMCgkIiEfgEAgEAAAAAAAAAfiAQCAfAEAgEQh4AAAAAAAAAHBAQCAfCEQiEQh4AAAAAAAAAfgEAgIBAQCAgEAgAAAAAAAAAPCEQiEPCEQiEQh4AAAAAAAAAPCEQiEQh8AgEBBwAAAAAAAAAAAAAAgEAAAAAEAgAAAAAAAAAAAAAAgEAAAAAEAgIAAAAAAAAAAICAgICAIAgCAIAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAACAIAgCAICAgICAAAAAAAAAAPCEQiEBAQCAACAQAAAAAAAAAfEEnlEolEpk0gD8AAAAAAAAAPCEQiEQj8QiEQiEAAAAAAAAAfCEQiEfCEQiEQj4AAAAAAAAAPCEQiAQCAQCEQh4AAAAAAAAAeCIQiEQiEQiERDwAAAAAAAAAfiAQCAeCAQCAQD8AAAAAAAAAfiAQCAeCAQCAQCAAAAAAAAAAPCEQiAQCcQiEQh4AAAAAAAAAQiEQiEfiEQiEQiEAAAAAAAAAOAgEAgEAgEAgEBwAAAAAAAAADgIBAIBAIBCIRBwAAAAAAAAAQiISCgYDAUCQRCEAAAAAAAAAQCAQCAQCAQCAQD8AAAAAAAAAgmMqkkkkEgkEgkEAAAAAAAAAQiEQjEUiURiEQiEAAAAAAAAAPCEQiEQiEQiEQh4AAAAAAAAAfCEQiEQj4QCAQCAAAAAAAAAAPCEQiEQiEQiESh4AgAAAAAAAfCEQiEQj4UCQRCEAAAAAAAAAPCEQCAPAEAiEQh4AAAAAAAAA/ggEAgEAgEAgEAgAAAAAAAAAQiEQiEQiEQiEQh4AAAAAAAAAQiEQiEQhIJBIGAwAAAAAAAAAgkEgkEgkkklUxkEAAAAAAAAAQiEJBIGAwJBIQiEAAAAAAAAAgkERCIKAgEAgEAgAAAAAAAAAfgEAgICAgICAQD8AAAAAAAAAOBAIBAIBAIBAIBwAAAAAAAAAQCAIBAEAgCAQBAIAAAAAAAAAOAQCAQCAQCAQCBwAAAAAAAAgKCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4Ah8QiEQh8AAAAAAAAAQCAQD4QiEQiEQj4AAAAAAAAAAAAAB4QiAQCAQh4AAAAAAAAAAgEAh8QiEQiEQh8AAAAAAAAAAAAAB4QiEfiAQB4AAAAAAAAADggED4EAgEAgEAgAAAAAAAAAAAAAB8QiEQiEQh8AgEPAAAAAQCAQD4QiEQiEQiEAAAAAAAAAEAgABgEAgEAgEBwAAAAAAAAABAIAAYBAIBAIBAIRCIOAAAAAQCAQCERCQcCQRCEAAAAAAAAAMAgEAgEAgEAgEBwAAAAAAAAAAAAAH4kkkkkkkkkAAAAAAAAAAAAAD4QiEQiEQiEAAAAAAAAAAAAAB4QiEQiEQh4AAAAAAAAAAAAAD4QiEQiEQj4QCAQAAAAAAAAAB8QiEQiEQh8AgEAgAAAAAAAAC8YCAQCAQCAAAAAAAAAAAAAAB8QCAPAEAj4AAAAAAAAAEAgED4EAgEAgEAcAAAAAAAAAAAAACEQiEQiEQh8AAAAAAAAAAAAACEQiEJBIGAwAAAAAAAAAAAAAEEgkkkkkkj4AAAAAAAAAAAAACEQhIGBIQiEAAAAAAAAAAAAACEQiEQiEQh8AgEPAAAAAAAAAD8BAQEBAQD8AAAAAAAAADAgEAgIAgEAgEAYAAAAAAAAAEAgEAgEAgEAgEAgAAAAAAAAAMAQCAQBAQCAQCBgAAAAAAADEkkYAAAAAAAAAAAAAAAAAAAAAAAAEBQREEgkEgn8AAAAAAAAAPCEQiAQCAQCEQh4EAgIAAAAAJBIACEQiEQiEQh8AAAAAAAAACAgAB4QiEfiAQB4AAAAAAAAAGBIAB4Ah8QiEQh8AAAAAAAAAJBIAB4Ah8QiEQh8AAAAAAAAAEAQAB4Ah8QiEQh8AAAAAAAAAGBIGB4Ah8QiEQh8AAAAAAAAAAAAAB4QiAQCAQh4EAgIAAAAAGBIAB4QiEfiAQB4AAAAAAAAAJBIAB4QiEfiAQB4AAAAAAAAAEAQAB4QiEfiAQB4AAAAAAAAASCQABgEAgEAgEBwAAAAAAAAAMCQABgEAgEAgEBwAAAAAAAAAIAgABgEAgEAgEBwAAAAAAJBIAB4QiEQj8QiEQiEAAAAAAGBIGB4QiEQj8QiEQiEAAAAAACAgAD8QCAQDwQCAQD8AAAAAAAAAAAAADYEjknkgkDYAAAAAAAAAfkgkEg/EgkEgkE8AAAAAAAAAGBIAB4QiEQiEQh4AAAAAAAAAJBIAB4QiEQiEQh4AAAAAAAAAEAQAB4QiEQiEQh4AAAAAAAAAGBIACEQiEQiEQh8AAAAAAAAAEAQACEQiEQiEQh8AAAAAAAAAJBIACEQiEQiEQh8AgEPAAJBIAB4QiEQiEQiEQh4AAAAAAJBIACEQiEQiEQiEQh4AAAAAAAAAAAgED4kkgkEgkj4EAgAAAAAAGBIIBAeBAIBAIj8AAAAAAAAAgkERBQED4ED4EAgAAAAAAAAA8EQiEQ9EIjkIhEEAAAAAAAAADAkEAgfAgEAgEAgEEgYAAAAACAgAB4Ah8QiEQh8AAAAAAAAACAgABgEAgEAgEBwAAAAAAAAACAgAB4QiEQiEQh4AAAAAAAAACAgACEQiEQiEQh8AAAAAAAAAMiYAD4QiEQiEQiEAAAAAAMiYACEQjEUiURiEQiEAAAAAAABwBB4RB4AD4AAAAAAAAAAAAABwRCIRBwAD4AAAAAAAAAAAAAAAEAgAAgEBAQiEQh4AAAAAAAAAAAAAD8QCAQAAAAAAAAAAAAAAAAAAD8AgEAgAAAAAAAAAAABAYBAIhICAgICYkgICA8AAAABAYBAIhICAgIiMig8AgEAAAAAAEAgAAgEAgEAgEAgAAAAAAAAAAAAAAkJCQkCQJAkAAAAAAAAAAAAAEgSBIEhISEgAAAAAAiBEiBEiBEiBEiBEiBEiBEiBEqiqqiqqiqqiqqiqqiqqiqqiq7l27l27l27l27l27l27l27l2EAgEAgEAgEAgEAgEAgEAgEAgEAgEAgEAgEHgEAgEAgEAgEAgEAgEAgEAg8Ag8AgEAgEAgEAgKBQKBQKBQKHQKBQKBQKBQKBQAAAAAAAAAAHwKBQKBQKBQKBQAAAAAAAAA8Ag8AgEAgEAgEAgKBQKBQKBQ6AQ6BQKBQKBQKBQKBQKBQKBQKBQKBQKBQKBQKBQAAAAAAAAA+AQ6BQKBQKBQKBQKBQKBQKBQ6AQ+AAAAAAAAAAAKBQKBQKBQKHwAAAAAAAAAAAAEAgEAgEAg8Ag8AAAAAAAAAAAAAAAAAAAAAHgEAgEAgEAgEAgEAgEAgEAgEA/AAAAAAAAAAAAEAgEAgEAgEH/AAAAAAAAAAAAAAAAAAAAAAH/EAgEAgEAgEAgEAgEAgEAgEA/EAgEAgEAgEAgAAAAAAAAAAH/AAAAAAAAAAAAEAgEAgEAgEH/EAgEAgEAgEAgEAgEAgEAgH4gH4gEAgEAgEAgKBQKBQKBQKBfKBQKBQKBQKBQKBQKBQKBQL5AP4AAAAAAAAAAAAAAAAAAAP5AL5QKBQKBQKBQKBQKBQKBQ74A/4AAAAAAAAAAAAAAAAAAA/4A75QKBQKBQKBQKBQKBQKBQL5AL5QKBQKBQKBQAAAAAAAAA/4A/4AAAAAAAAAAKBQKBQKBQ74A75QKBQKBQKBQEAgEAgEAg/4A/4AAAAAAAAAAKBQKBQKBQKH/AAAAAAAAAAAAAAAAAAAAA/4A/4gEAgEAgEAgAAAAAAAAAAH/KBQKBQKBQKBQKBQKBQKBQKB/AAAAAAAAAAAAEAgEAgEAgH4gH4AAAAAAAAAAAAAAAAAAAH4gH4gEAgEAgEAgAAAAAAAAAAB/KBQKBQKBQKBQKBQKBQKBQKH/KBQKBQKBQKBQEAgEAgEAg/4g/4gEAgEAgEAgEAgEAgEAgEHgAAAAAAAAAAAAAAAAAAAAAAA/EAgEAgEAgEAg////////////////////////AAAAAAAAAAAA////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f////////////AAAAAAAAAAAAAAAAAAAB0RiIRCIRh0AAAAAAAAAOCIRCQfCEQiEQj4QCAQAAAAAfiAQCAQCAQCAQCAAAAAAAAAAAAAAD8QiEQiEQiEAAAAAAAAAfiAIAgCAQEBAQD8AAAAAAAAAAAAAB8RCIRCIRBwAAAAAAAAAAAAACEQiEQiERj0QCAQAAAAAAAAAH8EAgEAgEAYAAAAAAAAAED4kkkkkkkkkfAgAAAAAAAAAPCEQiEWiEQiEQh4AAAAAAAAAPCEQiEQiEQhIJDMAAAAAAAAAPggCB4QiEQiEQh4AAAAAAAAAAAAADYkkkkjYAAAAAAAAAAAAAgIfEUkkkoj4QEAAAAAAAAAAAAAHhAQD8QBAHgAAAAAAAAAAAAAPCEQiEQiEQiEAAAAAAAAAAAAfgAAD8AAAfgAAAAAAAAAAAAAAAgED4EAgAD4AAAAAAAAAABAEAQBAQEBAAD4AAAAAAAAAAAICAgIAgCAIAB8AAAAAAAAADAkEggEAgEAgEAgEAgEAgEAgEAgEAgEAgEEgkDAAAAAAAAAAAAAEAgAD4AAgEAAAAAAAAAAAAAAABkTAAMiYAAAAAAAAAAAwJBIGAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAgEAAAAAAAAAAAAAMBAIBAIRCIRBIFAYAAAAAAABwJBIJBIAAAAAAAAAAAAAAAAAwJAQEB4AAAAAAAAAAAAAAAAAAAAAAB4PB4PB4PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    394                 "amigaFont": false
    395             },
    396             "turkish": {
    397                 "width": 9,
    398                 "height": 16,
    399                 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4GBgAAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAAAAzAAADwDD4zGYzDsAAAAAAADAMAwADwDD4zGYzDsAAAAAAABwbBwADwDD4zGYzDsAAAAAAAAAAAAAD4xmAwGAxj4GBgAAAAAgODYAD4xn8wGAxj4AAAAAAAAAxgAAD4xn8wGAxj4AAAAAAADAMAwAD4xn8wGAxj4AAAAAAAAAZgAABwGAwGAwGB4AAAAAAAAwPDMABwGAwGAwGB4AAAAAAAAAAAAABwGAwGAwGB4AAAAAAAGMAAgODYxmM/mMxmMAAAAAAODYOAgODYxn8xmMxmMAAAAAADAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAAGYdhsfmw2DcAAAAAAAAAPjYzGY/mYzGYzGcAAAAAAAAgODYAD4xmMxmMxj4AAAAAAAAAxgAAD4xmMxmMxj4AAAAAAADAMAwAD4xmMxmMxj4AAAAAAABgeGYAGYzGYzGYzDsAAAAAAADAMAwAGYzGYzGYzDsAAAAAAAAwAB4GAwGAwGAwGB4AAAAAAAGMAD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAAAAAAAAD4zm89nMxj4AAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAAfGMxmc3ns5mMxj4AAAAAAAAAfGMxjAOAYBmMxj4GBgAAAAAAAAAAD4xjAOAYxj4GBgAAAAAwMDAADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAAAdm4AG4ZjMZjMZjMAAAAAAdm4AGM5ns/m8zmMxmMAAAAAAADMfh4ZmEwGA3mMbh0AAAAAAAAAzDwADszGYzGYzD4DGYeAAAAAMBgABgMDAwGMxj4AAAAAAAAAfEEslUslUqkEfAAAAAAAAAAAAAAAAA/gMBgMBgAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAAAGAwAAwGAwPB4PAwAAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwYGAEBwbGMxn8xmMxmMAAAAAAfGMEBwbGMxn8xmMxmMAAAAAADAMEBwbGMxn8xmMxmMAAAAAAAAAfEEmlEolEmkEfAAAAAAAANhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAAAAAGAwfGMwGAxj4GAwAAAAAAAAAADMZh4GD8GD8GAwAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwAAAdm4ADwDD4zGYzDsAAAAAAdm4ABwbGMxn8xmMxmMAAAAAANhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsAAAAAAxj4xmMxmMfGMAAAAAAAAAODYbBwAD4AAAAAAAAAAAAAAAPDYbB8AD8AAAAAAAAAAAAODYAH8ZjEaDwaDEZn8AAAAAAAGMAH8ZjEaDwaDEZn8AAAAAAMAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwAB4GAwGAwGAwGB4AAAAAAPDMAB4GAwGAwGAwGB4AAAAAAADMAB4GAwGAwGAwGB4AAAAAAGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////AAwGAwGAwAAAGAwGAwGAAAAAMAwAB4GAwGAwGAwGB4AAAAAA//////////4AAAAAAAAAAAAAGBgAD4xmMxmMxmMxj4AAAAAAAAAeGYzGY2GYxmMxmYAAAAAAODYAD4xmMxmMxmMxj4AAAAAAMAwAD4xmMxmMxmMxj4AAAAAAAAAdm4AD4xmMxmMxj4AAAAAAdm4AD4xmMxmMxmMxj4AAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGMbBwODYxgAAAAAAAGBgAGMxmMxmMxmMxj4AAAAAAODYAGMxmMxmMxmMxj4AAAAAAMAwAGMxmMxmMxmMxj4AAAAAAADAMAwABwGAwGAwGB4AAAAAAAAAxgAAGMxmMxmMxj8BgYeAAAH+AAAAAAAAAAAAAAAAAAAAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAMDENnYGBgZmcmh+BgMAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAAAAAAAAAAAAwDDwAAAABwbDYOAAAAAAAAAAAAAAAAAAGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAwOAwGAwPAAAAAAAAAAAAAAAD4Bh4BgMfAAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    400                 "amigaFont": false
    401             }
    402         };
    403 
    404         BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    405 
    406         fontBitsBuffer = {};
    407 
    408         // Receives an RGBA image, <rgbaSource>, and the font width <fontWidth>, and delivers a double-scaled version, suitable for retina-type devices.
    409         function doubleScale(rgbaSource, fontWidth) {
    410             var byteWidth, doubledByteWidth, rgba, rgbaDoubled, startOfRow, i, k;
    411             byteWidth = fontWidth * 4;
    412             doubledByteWidth = byteWidth * 2;
    413             rgbaDoubled = new Uint8Array(rgbaSource.length * 4);
    414             for (i = 0, k = 0; i < rgbaSource.length; i += 4) {
    415                 rgba = rgbaSource.subarray(i, i + 4);
    416                 rgbaDoubled.set(rgba, k);
    417                 k += 4;
    418                 rgbaDoubled.set(rgba, k);
    419                 k += 4;
    420                 if ((i + 4) % byteWidth === 0) {
    421                     startOfRow = k - doubledByteWidth;
    422                     rgbaDoubled.set(rgbaDoubled.subarray(startOfRow, startOfRow + doubledByteWidth), k);
    423                     k += doubledByteWidth;
    424                 }
    425             }
    426             return rgbaDoubled;
    427         }
    428 
    429         // Returns properties that describe a font's size, and functions which return RGBA arrays, which are to be inserted in an entire RGBA image. Accepts <bits> an array of boolean values which describe a 1-bit image of a font, all 256 characters, as well as the <width> and <height> of each glyph, and a boolean, <amigaFont>, which if set to true is used when drawing a glyph in bold type.
    430         function font(bits, width, height, amigaFont, options) {
    431             // <fontBitWidth> is the size of each glyph, in amount of bits, <fontBuffer> is used to buffer RGBA images of each glyph. <fontBuffer24Bit> is used on a case-by-case basis when rendering a glyph in the get24BitData() function.
    432             var fontBitWidth, fontBuffer, fontBuffer24Bit, excludeNinthBit;
    433             fontBitWidth = width * height;
    434             fontBuffer = [];
    435             // Set <excludeNinthBit> to true, if we need to ignore the ninth bit of a font.
    436             excludeNinthBit = (width === 9 && options.bits !== "9") || (width === 9 && options.thumbnail);
    437             // RGBA data, requires Red, Green, Blue, and Alpha values for each 'bit' in the 1-bit image data, <bits>.
    438             fontBuffer24Bit = new Uint8Array((excludeNinthBit ? width - 1 : width) * height * 4);
    439 
    440             // Accepts a character code <charCode>, e.g. 65 = A, with an array of RGBA values, <palette>, and a foreground, <fg>, and background, <bg>, value which points at an element in the array.
    441             function getData(charCode, palette, fg, bg) {
    442                 var i, j, k, bufferIndex;
    443                 // For each value of <charCode>, and <fg>, and <bg>, create a unique reference for our buffered array, <fontBuffer>.
    444                 bufferIndex = charCode + (fg << 8) + (bg << 12);
    445                 // If we haven't already drawn this glyph before...
    446                 if (!fontBuffer[bufferIndex]) {
    447                     // ... create a new one.
    448                     fontBuffer[bufferIndex] = new Uint8Array((excludeNinthBit ? width - 1 : width) * height * 4);
    449                     // Works through each bit in <bits> at the point where our <charCode> starts, and copy <fg> where the bit is set, and <bg> where it is not.
    450                     for (i = 0, j = charCode * fontBitWidth, k = 0; i < fontBitWidth; ++i, ++j) {
    451                         // Ignore the ninth bit, if <excludeNinthBit> is set.
    452                         if (!excludeNinthBit || (i + 1) % 9 !== 0) {
    453                             if (bits[j]) {
    454                                 fontBuffer[bufferIndex].set(palette[fg], k);
    455                             } else {
    456                                 // In case that this is an <amigaFont>, and the foreground colour <fg> is set to bold type, i.e. 8 to 15, make sure we 'double-width' the glyph.
    457                                 if (amigaFont && (fg > 7) && (i % width > 0) && bits[j - 1] && (options.bits === "ced" || options.bits === "workbench")) {
    458                                     fontBuffer[bufferIndex].set(palette[fg], k);
    459                                 } else {
    460                                     fontBuffer[bufferIndex].set(palette[bg], k);
    461                                 }
    462                             }
    463                             k += 4;
    464                         }
    465                     }
    466                     if (options["2x"]) {
    467                         fontBuffer[bufferIndex] = doubleScale(fontBuffer[bufferIndex], excludeNinthBit ? width - 1 : width);
    468                     }
    469                 }
    470                 // Return the buffered RGBA image.
    471                 return fontBuffer[bufferIndex];
    472             }
    473 
    474             // Same as getData(), but accepts only a <fg> (foreground) and <bg> (background) arrays as RGBA data. Returns, as with getData(), raw RGBA data which describes the glyph's image.
    475             function get24BitData(charCode, fg, bg) {
    476                 var i, j, k;
    477                 for (i = 0, j = charCode * fontBitWidth, k = 0; i < fontBitWidth; ++i, ++j) {
    478                     // Ignore the ninth bit, if <excludeNinthBit> is set.
    479                     if (!excludeNinthBit || (i + 1) % 9 !== 0) {
    480                         if (bits[j]) {
    481                             fontBuffer24Bit.set(fg, k);
    482                         } else {
    483                             fontBuffer24Bit.set(bg, k);
    484                         }
    485                         k += 4;
    486                     }
    487                 }
    488                 if (options["2x"]) {
    489                     return doubleScale(fontBuffer24Bit, excludeNinthBit ? width - 1 : width);
    490                 }
    491                 return fontBuffer24Bit;
    492             }
    493 
    494             // Entrypoint for each of the functions publicly available in Font.
    495             return {
    496                 "getData": getData,
    497                 "get24BitData": get24BitData,
    498                 "height": height * (options["2x"] ? 2 : 1),
    499                 "width" : (excludeNinthBit ? 8 : width) * (options["2x"] ? 2 : 1)
    500             };
    501         }
    502 
    503         // Converts a stream of bytes returned by a File object, <file>, into a boolean array, <bits>, which represent the 1-bit image data of all the glyphs. The number of bytes to be read are calculated by the <width> and <height> specified for each glyph.
    504         function bytesToBits(file, width, height) {
    505             var bits, i, j, k, v;
    506             // Build the <bits> array, for all 256 glyphs.
    507             bits = new Uint8Array(width * height * 256);
    508             for (i = width * height * 256 / 8, k = 0; i > 0; --i) {
    509                 v = file.get();
    510                 for (j = 7; j >= 0; --j) {
    511                     // returns true or false if the bit is set for each bit in every byte read.
    512                     bits[k++] = !!((v >> j) & 1);
    513                 }
    514             }
    515             return bits;
    516         }
    517 
    518         // Converts a string of <text> in Base64 characters to a File object. This is probably much slower than calling window.atob(), but atob() cannot be invoked by a Web Worker instance. Truncating the array based on padding characters is not implemented, but is not necessary for this script. <bytes16> is used on the assumption that keeping the bit-shifting limited to typed-arrays is faster that dynamic types.
    519         function base64ToFile(text) {
    520             var i, j, bytes16, bytes8;
    521             bytes16 = new Uint32Array(1);
    522             bytes8 = new Uint8Array(text.length / 4 * 3);
    523             for (i = j = 0; i < text.length; bytes16[0] = 0) {
    524                 bytes16[0] += (BASE64_CHARS.indexOf(text.charAt(i++)) & 63) << 18;
    525                 bytes16[0] += (BASE64_CHARS.indexOf(text.charAt(i++)) & 63) << 12;
    526                 bytes16[0] += (BASE64_CHARS.indexOf(text.charAt(i++)) & 63) << 6;
    527                 bytes16[0] += BASE64_CHARS.indexOf(text.charAt(i++)) & 63;
    528                 bytes8[j++] = (bytes16[0] >> 16) & 255;
    529                 bytes8[j++] = (bytes16[0] >> 8) & 255;
    530                 bytes8[j++] = bytes16[0] & 255;
    531             }
    532             return new File(bytes8);
    533         }
    534 
    535         // Returns a font object returned by <font> based on the data held in FONT_PRESETS using the key <name>. When the preset is called initially, the 1-bit image data returned by bytesToBits() is buffered in <fontBitsBuffer>, referenced by the key <name>, which may save some cpu cycles when the function is called again. Assumes <name> absolutely exists in FONT_PRESETS, and any error checking is handled by calling has() previously.
    536         function preset(name, options) {
    537             // Aliases for various keys, used to preserve compatibility with url schemes.
    538             switch (name) {
    539             case "amiga":
    540                 name = "topaz";
    541                 break;
    542             case "microknightplus":
    543                 name = "microknight+";
    544                 break;
    545             case "topazplus":
    546                 name = "topaz+";
    547                 break;
    548             case "topaz500plus":
    549                 name = "topaz500+";
    550                 break;
    551             }
    552             // If we haven't already converted this data to a boolean array...
    553             if (!fontBitsBuffer[name]) {
    554                 // ... build and store it.
    555                 fontBitsBuffer[name] = bytesToBits(base64ToFile(FONT_PRESETS[name].data), FONT_PRESETS[name].width, FONT_PRESETS[name].height);
    556             }
    557             // Return our font object based on the buffered array by calling font() with all the data held in FONT_PRESETS.
    558             return font(fontBitsBuffer[name], FONT_PRESETS[name].width, FONT_PRESETS[name].height, FONT_PRESETS[name].amigaFont, options);
    559         }
    560 
    561         // Returns a font object by reading <file>, assuming a predefined glyph height, <fontHeight>. This is a predefined function to handle font data held in xbin files.
    562         function xbin(file, fontHeight, options) {
    563             return font(bytesToBits(file, 8, fontHeight), 8, fontHeight, false, options);
    564         }
    565 
    566         // A generic function, leveraged by various parsers to read font data of a standard 8x16 size, to be read from <file>, and returns a font object.
    567         function font8x16x256(file, options) {
    568             return font(bytesToBits(file, 8, 16), 8, 16, false, options);
    569         }
    570 
    571         // A simple function, which returns true or false depending on whether <name> is a key name in FONT_PRESETS, so that a call to preset will return valid data.
    572         function has(name) {
    573             switch (name) {
    574             case "amiga":
    575             case "microknightplus":
    576             case "topazplus":
    577             case "topaz500plus":
    578                 return true;
    579             default:
    580                 return FONT_PRESETS.hasOwnProperty(name);
    581             }
    582         }
    583 
    584         // Entrypoint for publicly-available functions.
    585         return {
    586             "preset": preset,
    587             "xbin": xbin,
    588             "font8x16x256": font8x16x256,
    589             "has": has
    590         };
    591     }());
    592 
    593     // Collects together several functions and variables which hold palette data.
    594     Palette = (function () {
    595         // Variables, which should be treated as constants for use when rendering .asc, .ans, .bin files, as well as when setting "bits" to "ced", and "workbench". All are defined as native arrays of RGBA data, held as Uint8Array arrays. e.g. [[0, 0, 0, 255], [255, 255, 255,255] ...]
    596         var ASC_PC, ANSI, BIN, CED, WORKBENCH;
    597 
    598         // Converts a 6-bit <value>, representing a colour in the EGA palette, to its RGBA equivalent (as a Uint8Array).
    599         function egaRGB(value) {
    600             return new Uint8Array([
    601                 (((value & 32) >> 5) + ((value & 4) >> 1)) * 0x55,
    602                 (((value & 16) >> 4) + ((value & 2))) * 0x55,
    603                 (((value & 8) >> 3) + ((value & 1) << 1)) * 0x55,
    604                 255
    605             ]);
    606         }
    607 
    608         // Define the various preset palettes. Since the Workbench palette does not have equivalent EGA values, RGBA values are defined directly.
    609         ASC_PC = [0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7].map(egaRGB);
    610         ANSI = [0, 4, 2, 20, 1, 5, 3, 7, 56, 60, 58, 62, 57, 61, 59, 63].map(egaRGB);
    611         BIN = [0, 1, 2, 3, 4, 5, 20, 7, 56, 57, 58, 59, 60, 61, 62, 63].map(egaRGB);
    612         CED = [7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0].map(egaRGB);
    613         WORKBENCH = [new Uint8Array([170, 170, 170, 255]), new Uint8Array([170, 170, 170, 255]), new Uint8Array([0, 0, 0, 255]), new Uint8Array([0, 0, 0, 255]), new Uint8Array([255, 255, 255, 255]), new Uint8Array([255, 255, 255, 255]), new Uint8Array([102, 136, 187, 255]), new Uint8Array([102, 136, 187, 255]), new Uint8Array([0, 0, 255, 255]), new Uint8Array([0, 0, 255, 255]), new Uint8Array([255, 0, 255, 255]), new Uint8Array([255, 0, 255, 255]), new Uint8Array([0, 255, 255, 255]), new Uint8Array([0, 255, 255, 255]), new Uint8Array([255, 255, 255, 255]), new Uint8Array([255, 255, 255, 255])];
    614 
    615         // Reads palette information from <file>, assuming it is held as RGB data, and has 16 members. Returns a native array of RGBA data, held as Uint8Array arrays.
    616         function triplets16(file) {
    617             var pal, i, r, g, b;
    618             for (pal = [], i = 0; i < 16; ++i) {
    619                 r = file.get();
    620                 g = file.get();
    621                 b = file.get();
    622                 pal.push(new Uint8Array([r << 2 | r >> 4, g << 2 | g >> 4, b << 2 | b >> 4, 255]));
    623             }
    624             return pal;
    625         }
    626 
    627         // A very specific function to interpret palette information held by adf files. Information on all 64 colours is read from <file>, and then only colours from specific places in that array are used in the image. Returns RGBA data in the same format returned by triplets16().
    628         function adf(file) {
    629             var pal, i, r, g, b;
    630             for (pal = [], i = 0; i < 64; ++i) {
    631                 r = file.get();
    632                 g = file.get();
    633                 b = file.get();
    634                 pal.push(new Uint8Array([r << 2 | r >> 4, g << 2 | g >> 4, b << 2 | b >> 4, 255]));
    635             }
    636             return [pal[0], pal[1], pal[2], pal[3], pal[4], pal[5], pal[20], pal[7], pal[56], pal[57], pal[58], pal[59], pal[60], pal[61], pal[62], pal[63]];
    637         }
    638 
    639         // Entrypoint for the various public methods.
    640         return {
    641             "ASC_PC": ASC_PC,
    642             "ANSI": ANSI,
    643             "BIN": BIN,
    644             "CED": CED,
    645             "WORKBENCH": WORKBENCH,
    646             "adf": adf,
    647             "triplets16": triplets16
    648         };
    649     }());
    650 
    651     // Scales the RGBA image data, <sourcedata>, by averaging each "chunk" of a certain size, <chunkWidth> and <chunkHeight>. <width> and <height> describe the size of the source image.
    652     function scaleCanvas(sourceData, width, height, chunkWidth, chunkHeight, options) {
    653         var destWidth, destHeight, destData, rgba, pixelRowOffset, chunkSize, i, j, k, x, y, r, g, b, a;
    654 
    655         // Temporary var for storing the value of the averaged "chunk".
    656         rgba = new Uint8Array(4);
    657 
    658         // Define the size of the destination image...
    659         destWidth = width / chunkWidth;
    660         destHeight = height / chunkHeight;
    661         // ... and create an 8-bit array for its RGBA data.
    662         destData = new Uint8Array(destWidth * destHeight * 4);
    663 
    664         // Pre-calculations used when building the destination data.
    665         pixelRowOffset = (width - chunkWidth) * 4;
    666         chunkSize = chunkWidth * chunkHeight;
    667 
    668         for (i = x = y = 0; i < destData.length; i += 4) {
    669             for (j = r = g = b = a = 0, k = (y * width * chunkHeight + x * chunkWidth) * 4; j < chunkSize; ++j) {
    670                 // Add all the values in each "chunk" for red, green, blue, and alpha bytes.
    671                 r += sourceData[k++];
    672                 g += sourceData[k++];
    673                 b += sourceData[k++];
    674                 a += sourceData[k++];
    675                 // Seek the next row of pixels in each "chunk".
    676                 if ((j + 1) % chunkWidth === 0) {
    677                     k += pixelRowOffset;
    678                 }
    679             }
    680             // Average out the values for each pixel in the destination image.
    681             rgba[0] = Math.round(r / chunkSize);
    682             rgba[1] = Math.round(g / chunkSize);
    683             rgba[2] = Math.round(b / chunkSize);
    684             rgba[3] = Math.round(a / chunkSize);
    685             // Write our averaged pixel.
    686             destData.set(rgba, i);
    687             if (++x === destWidth) {
    688                 x = 0;
    689                 ++y;
    690             }
    691         }
    692 
    693         // Returns the <width> and <height> of the destination image, as well as its RGBA data, <rgbaData>.
    694         return {
    695             "width": destWidth,
    696             "height": destHeight,
    697             "rgbaData": destData,
    698             "2x": options["2x"]
    699         };
    700     }
    701 
    702     // Receives a <raw> object returned from the image-parsing functions found in Parser, and outputs a Uint8Array with RGBA data, <rgbaData>, with dimensions <width> and <height>. <start> and <length> point to rows offsets, so that only part of the image can be rendered. <altFont> is a font object, returned by font() to be used when rendering the image (assuming no font information is held in raw.font), and <options>, which are passed by the user.
    703     function display(raw, start, length, options) {
    704         var canvasWidth, canvasHeight, rgbaData, end, i, k, l, x, fontBitWidth, fontData, rowOffset, data, screenOffset, fontOffset, chunky;
    705 
    706         // Temporary variable to pre-calculate some data.
    707         fontBitWidth = raw.font.width * 4;
    708 
    709         data = raw.getData();
    710 
    711         // Define where to stop reading data.
    712         start = start * raw.columns * 10;
    713         end = Math.min(start + length * raw.columns * 10, data.length);
    714 
    715         // Calculate the dimensions of the output image.
    716         canvasWidth = raw.columns * raw.font.width;
    717         canvasHeight = (end - start) / (raw.columns * 10) * raw.font.height;
    718 
    719         // Initialize the RGBA image data and calculate how many bytes are in each text-row.
    720         rgbaData = new Uint8Array(canvasWidth * canvasHeight * 4);
    721         rowOffset = canvasWidth * 4;
    722 
    723         for (i = start, screenOffset = 0, x = 0; i < end; i += 10, screenOffset += fontBitWidth) {
    724             // If we have 24 bit data
    725             if (data[i + 1]) {
    726                 fontData = raw.font.get24BitData(data[i], data.subarray(i + 2, i + 6), data.subarray(i + 6, i + 10));
    727             } else {
    728                 fontData = raw.font.getData(data[i], raw.palette, data[i + 2], data[i + 3]);
    729             }
    730             for (fontOffset = screenOffset, k = l = 0; k < raw.font.height; ++k, fontOffset += rowOffset, l += fontBitWidth) {
    731                 rgbaData.set(fontData.subarray(l, l + fontBitWidth), fontOffset);
    732             }
    733             if (++x % raw.columns === 0) {
    734                 screenOffset += (raw.font.height - 1) * rowOffset;
    735             }
    736         }
    737 
    738         // Finally, if the "thumbnail" option is chosen...
    739         if (options.thumbnail) {
    740             // ... calculate the scale factor and return the reduced image data.
    741             chunky = Math.pow(2, 4 - options.thumbnail);
    742             return scaleCanvas(rgbaData, canvasWidth, canvasHeight, chunky, chunky, options);
    743         }
    744 
    745         // Return the imageData, as a Uint8Array RGBA array, <rgbaData>, with image dimensions, <width> and <height>.
    746         return {
    747             "width": canvasWidth,
    748             "height": canvasHeight,
    749             "rgbaData": rgbaData,
    750             "2x": options["2x"]
    751         };
    752     }
    753 
    754     // A simple function to return a CANVAS element, at the defined <width> and <height>.
    755     function createCanvas(width, height) {
    756         var canvas = document.createElement("canvas");
    757         canvas.width = width;
    758         canvas.height = height;
    759         return canvas;
    760     }
    761 
    762     // Converts data returned by display() as a canvas element, can also be called externally after the results of a Web Worker has been returned (as creating a canvas element is not possible in a Worker thread).
    763     function displayDataToCanvas(displayData) {
    764         var canvas, ctx, imageData;
    765         canvas = createCanvas(displayData.width, displayData.height);
    766         ctx = canvas.getContext("2d");
    767         imageData = ctx.createImageData(canvas.width, canvas.height);
    768         imageData.data.set(displayData.rgbaData, 0);
    769         ctx.putImageData(imageData, 0, 0);
    770         // Deal with pixel ratio for retina-type displays.
    771         if (displayData["2x"]) {
    772             canvas.style.width = (canvas.width / 2) + "px";
    773             canvas.style.height = (canvas.height / 2) + "px";
    774         }
    775         return canvas;
    776     }
    777 
    778     // Returns an options object which has been validated to make sure all the arguments are legal, and sets defaults where missing.
    779     function validateOptions(options) {
    780         var validatedOptions;
    781 
    782         // Create the options object, if undefined.
    783         options = options || {};
    784         validatedOptions = {};
    785         // "icecolors", must be a number, 0 or 1. Defaults to 0.
    786         validatedOptions.icecolors = ((typeof options.icecolors === "number") && options.icecolors >= 0 && options.icecolors <= 1) ? options.icecolors : 0;
    787         // "bits", must be "8", "9", "ced", or "workbench". Defaults to "8".
    788         switch (options.bits) {
    789         case "8":
    790         case "9":
    791         case "ced":
    792         case "workbench":
    793             validatedOptions.bits = options.bits;
    794             break;
    795         default:
    796             validatedOptions.bits = "8";
    797         }
    798         // "columns" setting, must be a number greater than 0. Defaults to 160.
    799         validatedOptions.columns = ((typeof options.columns === "number") && options.columns > 0) ? options.columns : 160;
    800         // "font" setting, must be a string, and be in the list of available presets. Defaults to "80x25".
    801         validatedOptions.font = ((typeof options.font === "string") && Font.has(options.font)) ? options.font : "80x25";
    802         // "thumnail", must be a number between and including 0 to 3. Defaults to 0.
    803         validatedOptions.thumbnail = ((typeof options.thumbnail === "number") && options.thumbnail >= 0 && options.thumbnail <= 3) ? options.thumbnail : 0;
    804         // "2x", must be a number, 0 or 1. Defaults to 0.
    805         validatedOptions["2x"] = ((typeof options["2x"] === "number") && options["2x"] >= 0 && options["2x"] <= 1) ? options["2x"] : 0;
    806         // "imagedata", must be 0 or 1. Defaults to 0.
    807         validatedOptions.imagedata = ((typeof options.imagedata === "number") && options.imagedata >= 0 && options.imagedata <= 1) ? options.imagedata : 0;
    808         // "rows", must be a number greater than 0. Defaults to 26.
    809         validatedOptions.rows = ((typeof options.rows === "number") && options.rows > 0) ? options.rows : 26;
    810         // "2J", must be a number 0 or 1. Defaults to 1.
    811         validatedOptions["2J"] = ((typeof options["2J"] === "number") && options["2J"] >= 0 && options["2J"] <= 1) ? options["2J"] : 1;
    812         // "filetype", can be any string, since readBytes() defaults to the ANSI renderer if it is unrecognised.
    813         validatedOptions.filetype = (typeof options.filetype === "string") ? options.filetype : "ans";
    814 
    815         return validatedOptions;
    816     }
    817     // Collects all the functions which parse the supported image formats, with a single entrypoint, readBytes.
    818     Parser = (function () {
    819         // ScreenData() returns a representation of the screen with <width> columns. This is used for images with a predefined palette. i.e. all formats except Tundra.
    820         function ScreenData(columns) {
    821             // <imageData> represents a Uint8Array of the screen, two pairs of bytes represent the character code and colour attributes in the second, as also used in the .bin file format. <rows> stores the highest row number written to, and <pos> is the current cursor position represented in the <imageData> array.
    822             var that, imageData, pos;
    823 
    824             that = this;
    825 
    826             // Returns the ScreenData object to its initial start, used upon initialization or when a screen-clear code is issued.
    827             this.reset = function () {
    828                 imageData = new Uint8Array(columns * 1000 * 10);
    829                 pos = 0;
    830                 that.columns = columns;
    831                 that.rows = 0;
    832             };
    833 
    834             this.reset();
    835 
    836             // Extend the <imageData> array if necessary, by creating a new array with an additional 1000 rows after from the <y> position currently attempting to be written to, and copy the existing data to the start.
    837             function extendImageData(y) {
    838                 var newImageData;
    839                 newImageData = new Uint8Array(that.columns * (y + 1000) * 10 + imageData.length);
    840                 newImageData.set(imageData, 0);
    841                 imageData = newImageData;
    842             }
    843 
    844             // Set the character code, <charCode>, and foreground & background attribute, <attrib>, and the <x> and <y> position of the <imageData> array.
    845             this.set = function (x, y, charCode, trueColor, fg, bg) {
    846                 pos = (y * that.columns + x) * 10;
    847                 // If we see that we will be writing past the end of the array, extend the array by calling extendImageData() with the current <y> position we want to write to.
    848                 if (pos >= imageData.length) {
    849                     extendImageData(y);
    850                 }
    851                 // Store the data...
    852                 imageData[pos] = charCode;
    853                 if (trueColor) {
    854                     // Indicate that we are referring to RGBA values...
    855                     imageData[pos + 1] = 1;
    856                     // ... and store the data.
    857                     imageData.set(fg, pos + 2);
    858                     imageData.set(bg, pos + 6);
    859                 } else {
    860                     // ... and store the palette pointers.
    861                     imageData[pos + 2] = fg;
    862                     imageData[pos + 3] = bg;
    863                 }
    864                 // ... and update <rows> if it's the largest <y> value used so far.
    865                 if (y + 1 > that.rows) {
    866                     that.rows = y + 1;
    867                 }
    868             };
    869 
    870             this.raw = function (bytes) {
    871                 var i, j;
    872                 that.rows = Math.ceil(bytes.length / 2 / that.columns);
    873                 imageData = new Uint8Array(that.columns * that.rows * 10);
    874                 for (i = 0, j = 0; j < bytes.length; i += 10, j += 2) {
    875                     imageData[i] = bytes[j];
    876                     imageData[i + 2] = bytes[j + 1] & 15;
    877                     imageData[i + 3] = bytes[j + 1] >> 4;
    878                 }
    879             };
    880 
    881             this.trimColumns = function () {
    882                 var i, height, j, maxX, newImageData;
    883                 for (maxX = 0, height = imageData.length / 10 / that.columns, i = 0; i < imageData.length; i += 10) {
    884                     // If a character code is seen, check to see if it's the highest column value, and record it if necessary.
    885                     if (imageData[i]) {
    886                         maxX = Math.max((i / 10) % that.columns, maxX);
    887                     }
    888                 }
    889                 ++maxX;
    890                 // Create a new imageData object, with a reduced size if necessary.
    891                 for (newImageData = new Uint8Array((maxX + 1) * height * 10), i = 0, j = 0; i < newImageData.length; i += maxX * 10, j += that.columns * 10) {
    892                     newImageData.set(imageData.subarray(j, j + that.columns * 10), i);
    893                 }
    894                 imageData = newImageData;
    895                 // Set the new width.
    896                 that.columns = maxX;
    897             };
    898 
    899             // Return the <imageData> array, but only up to the <rows> row.
    900             this.getData = function () {
    901                 var subarray, i;
    902                 // Before returning the truncated array, set the Alpha byte for every character position to the maximum value, otherwise the whole image will be transparent when later copying into a RGBA.
    903                 for (subarray = imageData.subarray(0, that.columns * that.rows * 10), i = 0; i < subarray.length; i += 10) {
    904                     subarray[i + 5] = 255;
    905                     subarray[i + 9] = 255;
    906                 }
    907                 return subarray;
    908             };
    909         }
    910 
    911         // A function to parse a sequence of bytes representing an Artworx file format.
    912         function adf(bytes, options) {
    913             var file, imageData;
    914 
    915             // Turn bytes into a File object.
    916             file = new File(bytes);
    917 
    918             // Read version number.
    919             file.getC();
    920 
    921             imageData = new ScreenData(80);
    922 
    923             // Read Palette. See Palette.adf().
    924             imageData.palette = Palette.adf(file);
    925             // Read Font. See Font.font8x16x256().
    926             imageData.font = Font.font8x16x256(file, options);
    927 
    928             // Raw Imagedata.
    929             imageData.raw(file.read());
    930 
    931             // Return an object readable by display() for constructing an RGBA image.
    932             return {
    933                 "imageData": imageData,
    934                 "sauce": file.sauce // sauce record.
    935             };
    936         }
    937 
    938         // A function to parse a sequence of bytes representing an ANSI file format.
    939         function ans(bytes, options) {
    940             var file, escaped, escapeCode, j, code, values, columns, imageData, topOfScreen, x, y, savedX, savedY, foreground, background, foreground24bit, background24bit, drawForeground, drawBackground, bold, blink, inverse, icecolors;
    941 
    942             // Turn bytes into a File object.
    943             file = new File(bytes);
    944 
    945             // Reset all the attributes, used upon initialization, and on Esc[0m
    946             function resetAttributes() {
    947                 foreground = 7;
    948                 background = 0;
    949                 foreground24bit = undefined;
    950                 background24bit = undefined;
    951                 bold = false;
    952                 blink = false;
    953                 inverse = false;
    954             }
    955             resetAttributes();
    956 
    957             // On the event of a new line, reset <x>, and record a new value for <topOfScreen> or <y> depending on whether the bottom of the screen has already been reached.
    958             function newLine() {
    959                 x = 1;
    960                 if (y === 26 - 1) {
    961                     ++topOfScreen;
    962                 } else {
    963                     ++y;
    964                 }
    965             }
    966 
    967             // Set a new position for <x> and <y>, bounded by the maxumum amount of <columns>, and rows, and the minimum amount, 1.
    968             function setPos(newX, newY) {
    969                 x = Math.min(columns, Math.max(1, newX));
    970                 y = Math.min(26, Math.max(1, newY));
    971             }
    972 
    973             // Initialize <x>, <y>, and <topOfScreen>.
    974             x = 1;
    975             y = 1;
    976             topOfScreen = 0;
    977 
    978             // Reset variables which store the escape code string appended to whilst parsing <escapeCode>, and the variable which records if the parse is running in <escaped> mode.
    979             escapeCode = "";
    980             escaped = false;
    981 
    982             // If there is a sauce record...
    983             if (file.sauce) {
    984                 if (file.sauce.tInfo1 > 0) {
    985                     columns = file.sauce.tInfo1;
    986                 } else {
    987                     columns = 80;
    988                 }
    989                 // If no-blink mode is set in the sauce flags, use it. Otherwise, default to <options.icecolors> setting.
    990                 icecolors = file.sauce.flags & 1 || options.icecolors;
    991                 // Override the letterspacing setting if defined in sauce
    992                 switch (file.sauce.letterSpacing) {
    993                 case 1:
    994                     options.bits = "8";
    995                     break;
    996                 case 2:
    997                     options.bits = "9";
    998                     break;
    999                 default:
   1000                     break;
   1001                 }
   1002                 // Override the font setting if defined in sauce
   1003                 switch (file.sauce.tInfoS) {
   1004                 case "IBM VGA":
   1005                     options.font = "80x25";
   1006                     break;
   1007                 case "IBM VGA50":
   1008                     options.font = "80x50";
   1009                     break;
   1010                 case "Amiga Topaz 1":
   1011                     options.font = "topaz500";
   1012                     break;
   1013                 case "Amiga Topaz 1+":
   1014                     options.font = "topaz500+";
   1015                     break;
   1016                 case "Amiga Topaz 2":
   1017                     options.font = "topaz";
   1018                     break;
   1019                 case "Amiga Topaz 2+":
   1020                     options.font = "topaz+";
   1021                     break;
   1022                 case "Amiga P0T-NOoDLE":
   1023                     options.font = "pot-noodle";
   1024                     break;
   1025                 case "Amiga MicroKnight":
   1026                     options.font = "microknight";
   1027                     break;
   1028                 case "Amiga MicroKnight+":
   1029                     options.font = "microknight+";
   1030                     break;
   1031                 case "Amiga mOsOul":
   1032                     options.font = "mosoul";
   1033                     break;
   1034                 }
   1035             } else {
   1036                 // If "ced" mode has been invoked, set the <columns> to 78 character wide. Otherwise, use the default 80.
   1037                 if (options.mode === "ced") {
   1038                     columns = 78;
   1039                 } else {
   1040                     columns = 80;
   1041                 }
   1042                 // Set <icecolors> to whatever was chosen by the user, or set as the default by readBytes().
   1043                 icecolors = options.icecolors;
   1044             }
   1045 
   1046             // Create the ScreenData() object at the required width.
   1047             imageData = new ScreenData(columns);
   1048             imageData.font = Font.preset(options.font, options);
   1049 
   1050             // Choose the correct Palette constant, depending on whichever mode has been set. See Palette for more information.
   1051             switch (options.bits) {
   1052             case "ced":
   1053                 imageData.palette = Palette.CED;
   1054                 break;
   1055             case "workbench":
   1056                 imageData.palette = Palette.WORKBENCH;
   1057                 break;
   1058             default:
   1059                 imageData.palette = Palette.ANSI;
   1060             }
   1061 
   1062             // Returns an array of values found in <escapeCode>, seperated by ";". If there value is not a number, or missing, then the default value of 1 is used.
   1063             function getValues() {
   1064                 return escapeCode.substr(1, escapeCode.length - 2).split(";").map(function (value) {
   1065                     var parsedValue;
   1066                     parsedValue = parseInt(value, 10);
   1067                     return isNaN(parsedValue) ? 1 : parsedValue;
   1068                 });
   1069             }
   1070 
   1071             while (!file.eof()) {
   1072                 // Obtain the current character <code>.
   1073                 code = file.get();
   1074                 if (escaped) {
   1075                     // If the routine is in <escaped> mode, add the <code> to the <escapeCode> string.
   1076                     escapeCode += String.fromCharCode(code);
   1077                     // If the code terminates the <escaped> mode...
   1078                     if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122)) {
   1079                         // ... set the mode to unescaped, and obtain the values in the escaped string.
   1080                         escaped = false;
   1081                         values = getValues();
   1082                         // Check for a valid CSI code.
   1083                         if (escapeCode.charAt(0) === "[") {
   1084                             switch (escapeCode.charAt(escapeCode.length - 1)) {
   1085                             case "A": // Up cursor.
   1086                                 y = Math.max(1, y - values[0]);
   1087                                 break;
   1088                             case "B": // Down cursor.
   1089                                 y = Math.min(26 - 1, y + values[0]);
   1090                                 break;
   1091                             case "C": // Forward cursor.
   1092                                 if (x === columns) {
   1093                                     newLine();
   1094                                 }
   1095                                 x = Math.min(columns, x + values[0]);
   1096                                 break;
   1097                             case "D": // Backward cursor.
   1098                                 x = Math.max(1, x - values[0]);
   1099                                 break;
   1100                             case "H": // Set the cursor position by calling setPos(), first <y>, then <x>.
   1101                                 if (values.length === 1) {
   1102                                     setPos(1, values[0]);
   1103                                 } else {
   1104                                     setPos(values[1], values[0]);
   1105                                 }
   1106                                 break;
   1107                             case "J": // Clear screen.
   1108                                 if (values[0] === 2) {
   1109                                     x = 1;
   1110                                     y = 1;
   1111                                     imageData.reset();
   1112                                 }
   1113                                 break;
   1114                             case "K": // Clear until the end of line.
   1115                                 for (j = x - 1; j < columns; ++j) {
   1116                                     imageData.set(j, y - 1 + topOfScreen, 0, false, 0, 0);
   1117                                 }
   1118                                 break;
   1119                             case "m": // Attributes, work through each code in turn.
   1120                                 for (j = 0; j < values.length; ++j) {
   1121                                     if (values[j] >= 30 && values[j] <= 37) {
   1122                                         // Set the <foreground> color, points to a value in the <palette> array...
   1123                                         foreground = values[j] - 30;
   1124                                         if (foreground24bit) {
   1125                                             foreground24bit = undefined;
   1126                                         }
   1127                                     } else if (values[j] >= 40 && values[j] <= 47) {
   1128                                         // ... and for <background>, if the required value is used.
   1129                                         background = values[j] - 40;
   1130                                         if (background24bit) {
   1131                                             background24bit = undefined;
   1132                                         }
   1133                                     } else {
   1134                                         switch (values[j]) {
   1135                                         case 0: // Reset attributes
   1136                                             resetAttributes();
   1137                                             break;
   1138                                         case 1: // Bold
   1139                                             bold = true;
   1140                                             if (foreground24bit) {
   1141                                                 foreground24bit = undefined;
   1142                                             }
   1143                                             break;
   1144                                         case 5: // Blink
   1145                                             blink = true;
   1146                                             if (background24bit) {
   1147                                                 background24bit = undefined;
   1148                                             }
   1149                                             break;
   1150                                         case 7: // Inverse
   1151                                             inverse = true;
   1152                                             break;
   1153                                         case 22: // Bold off
   1154                                             bold = false;
   1155                                             break;
   1156                                         case 25: // Blink off
   1157                                             blink = false;
   1158                                             break;
   1159                                         case 27: // Inverse off
   1160                                             inverse = false;
   1161                                             break;
   1162                                         }
   1163                                     }
   1164                                 }
   1165                                 break;
   1166                             case "s": // Save the current <x> and <y> positions.
   1167                                 savedX = x;
   1168                                 savedY = y;
   1169                                 break;
   1170                             case "t": // 24 bit ANSI
   1171                                 if (values.length === 4) {
   1172                                     switch (values[0]) {
   1173                                     case 0: // Background
   1174                                         background24bit = new Uint8Array([values[1], values[2], values[3]]);
   1175                                         break;
   1176                                     case 1: // Foreground
   1177                                         foreground24bit = new Uint8Array([values[1], values[2], values[3]]);
   1178                                         break;
   1179                                     }
   1180                                 }
   1181                                 break;
   1182                             case "u": // Restore the current <x> and <y> positions.
   1183                                 x = savedX;
   1184                                 y = savedY;
   1185                                 break;
   1186                             }
   1187                         }
   1188                         // Finally, reset the <escapeCode>.
   1189                         escapeCode = "";
   1190                     }
   1191                 } else {
   1192                     // If not in <escaped> mode, treat <code> as a literal.
   1193                     switch (code) {
   1194                     case 10: // Lone linefeed (LF).
   1195                         newLine();
   1196                         break;
   1197                     case 13: // Carriage Return, and Linefeed (CRLF)
   1198                         if (file.peek() === 0x0A) {
   1199                             file.read(1);
   1200                             newLine();
   1201                         }
   1202                         break;
   1203                     case 26: // Ignore eof characters until the actual end-of-file, or sauce record has been reached.
   1204                         break;
   1205                     default:
   1206                         // Go in <escaped> mode if "Esc[" is seen.
   1207                         if (code === 27 && file.peek() === 0x5B) {
   1208                             escaped = true;
   1209                         } else {
   1210                             // If "ced" mod has been invoked, don't record any additional attribute data.
   1211                             if (options.mode === "ced") {
   1212                                 imageData.set(x - 1, y - 1 + topOfScreen, code, false, 1, 0);
   1213                             } else {
   1214                                 // In <inverse> mode, or not, set the character <code> and attribute data to the <imageData> object, according to the current <foreground>, <background>, <icecolors>, <bold>, and <blink> setting.
   1215                                 if (inverse) {
   1216                                     drawForeground = background;
   1217                                     drawBackground = foreground;
   1218                                 } else {
   1219                                     drawForeground = foreground;
   1220                                     drawBackground = background;
   1221                                 }
   1222                                 if (bold) {
   1223                                     drawForeground += 8;
   1224                                 }
   1225                                 if (blink && icecolors && !background24bit) {
   1226                                     drawBackground += 8;
   1227                                 }
   1228                                 if (foreground24bit || background24bit) {
   1229                                     imageData.set(x - 1, y - 1 + topOfScreen, code, true, foreground24bit || imageData.palette[drawForeground], background24bit || imageData.palette[drawBackground]);
   1230                                 } else {
   1231                                     imageData.set(x - 1, y - 1 + topOfScreen, code, false, drawForeground, drawBackground);
   1232                                 }
   1233                             }
   1234                             // If the end of row has been reached, start a new line.
   1235                             if (++x === columns + 1) {
   1236                                 newLine();
   1237                             }
   1238                         }
   1239                     }
   1240                 }
   1241             }
   1242 
   1243             // Returns an object usable by display() to convert into an RGBA array.
   1244             return {
   1245                 "imageData": imageData,
   1246                 "sauce": file.sauce // SAUCE record.
   1247             };
   1248         }
   1249 
   1250         // A function to parse a sequence of bytes representing an ASCII plain-text file.
   1251         function asc(bytes, options) {
   1252             var file, imageData, code, x, y;
   1253 
   1254             // Create a new <file> object, based on <bytes>, and create an <imageData> representation of the screen.
   1255             file = new File(bytes);
   1256             imageData = new ScreenData(80);
   1257             imageData.font = Font.preset(options.font, options);
   1258             imageData.palette = Palette.ASC_PC;
   1259 
   1260             // Initialize the cursor position by setting <x> and <y>.
   1261             x = 0;
   1262             y = 0;
   1263 
   1264             while (!file.eof()) {
   1265                 // Get the character <code>
   1266                 code = file.get();
   1267                 // If we see a carriage return then line feed (CRLF), start a new line.
   1268                 if (code === 13 && file.peek() === 10) {
   1269                     file.read(1);
   1270                     ++y;
   1271                     x = 0;
   1272                 } else if (code === 10) { // A lone line feed (LF) also starts a new line.
   1273                     ++y;
   1274                     x = 0;
   1275                 } else {
   1276                     // For a literal, record the character code at the <x> and <y>.
   1277                     imageData.set(x, y, code, false, 1, 0);
   1278                     // Start a new line when columns is reached.
   1279                     if (++x === 80) {
   1280                         ++y;
   1281                         x = 0;
   1282                     }
   1283                 }
   1284             }
   1285 
   1286             // Returns an object usable by display() to convert into an RGBA array.
   1287             return {
   1288                 "imageData": imageData,
   1289                 "sauce": file.sauce // SAUCE record.
   1290             };
   1291         }
   1292 
   1293         // A function to parse a sequence of bytes representing a raw display dump.
   1294         function bin(bytes, options) {
   1295             var file, imageData, i, icecolors;
   1296 
   1297             // Create a new <file> object, based on <bytes>, and create an <imageData> representation of the screen.
   1298             file = new File(bytes);
   1299 
   1300             imageData = new ScreenData(options.columns);
   1301             imageData.font = Font.preset(options.font, options);
   1302             imageData.palette = Palette.BIN;
   1303 
   1304             // Raw Imagedata.
   1305             imageData.raw(file.read());
   1306 
   1307             // If there is sauce record, look for an <icecolors> setting in flags, use the user-defined or default setting if not.
   1308             if (file.sauce) {
   1309                 icecolors = file.sauce.flags & 1 || options.icecolors;
   1310                 // Override the letterspacing setting if defined in sauce
   1311                 switch (file.sauce.letterSpacing) {
   1312                 case 1:
   1313                     options.bits = "8";
   1314                     break;
   1315                 case 2:
   1316                     options.bits = "9";
   1317                     break;
   1318                 default:
   1319                     break;
   1320                 }
   1321                 // Override the letterspacing setting if defined in sauce
   1322                 switch (file.sauce.letterSpacing) {
   1323                 case 1:
   1324                     options.bits = "8";
   1325                     break;
   1326                 case 2:
   1327                     options.bits = "9";
   1328                     break;
   1329                 default:
   1330                     break;
   1331                 }
   1332                 // Override the font setting if defined in sauce
   1333                 switch (file.sauce.tInfoS) {
   1334                 case "IBM VGA":
   1335                     options.font = "80x25";
   1336                     break;
   1337                 case "IBM VGA50":
   1338                     options.font = "80x50";
   1339                     break;
   1340                 case "Amiga Topaz 1":
   1341                     options.font = "topaz500";
   1342                     break;
   1343                 case "Amiga Topaz 1+":
   1344                     options.font = "topaz500+";
   1345                     break;
   1346                 case "Amiga Topaz 2":
   1347                     options.font = "topaz";
   1348                     break;
   1349                 case "Amiga Topaz 2+":
   1350                     options.font = "topaz+";
   1351                     break;
   1352                 case "Amiga P0T-NOoDLE":
   1353                     options.font = "pot-noodle";
   1354                     break;
   1355                 case "Amiga MicroKnight":
   1356                     options.font = "microknight";
   1357                     break;
   1358                 case "Amiga MicroKnight+":
   1359                     options.font = "microknight+";
   1360                     break;
   1361                 case "Amiga mOsOul":
   1362                     options.font = "mosoul";
   1363                     break;
   1364                 }
   1365             } else {
   1366                 icecolors = options.icecolors;
   1367             }
   1368 
   1369             // If <icecolors> is turned off, make sure the attribute data is corrected to remove the background bright bit.
   1370             if (!icecolors) {
   1371                 for (i = 1; i < imageData.length; i += 2) {
   1372                     imageData[i] = imageData[i] & 127;
   1373                 }
   1374             }
   1375 
   1376             // Returns an object usable by display() to convert into an RGBA array.
   1377             return {
   1378                 "imageData": imageData,
   1379                 "sauce": file.sauce // SAUCE record.
   1380             };
   1381         }
   1382 
   1383         // A function to parse a sequence of bytes representing an iCE Draw file format.
   1384         function idf(bytes, options) {
   1385             var file, columns, imageData, c, loop, ch, attr, x, y;
   1386 
   1387             // Convert the bytes to a File() object.
   1388             file = new File(bytes);
   1389 
   1390             // Seek to the column setting, and store.
   1391             file.seek(8);
   1392             columns = file.get16() + 1;
   1393 
   1394             // Create the <screenData> based on the column width.
   1395             imageData = new ScreenData(columns);
   1396 
   1397             // Seek to the raw image data, and decode based on a run length encoding method.
   1398             file.seek(12);
   1399 
   1400             x = 0;
   1401             y = 0;
   1402             while (file.getPos() < file.size - 4144) {
   1403                 c = file.get16();
   1404                 if (c === 1) {
   1405                     loop = file.get();
   1406                     file.get();
   1407                     ch = file.get();
   1408                     attr = file.get();
   1409                     while (loop-- > 0) {
   1410                         imageData.set(x++, y, ch, false, attr & 15, attr >> 4);
   1411                         if (x === columns) {
   1412                             x = 0;
   1413                             ++y;
   1414                         }
   1415                     }
   1416                 } else {
   1417                     imageData.set(x++, y, c & 255, false, (c >> 8) & 15, c >> 12);
   1418                     if (x === columns) {
   1419                         x = 0;
   1420                         ++y;
   1421                     }
   1422                 }
   1423             }
   1424 
   1425             // Decode the font and palette data.
   1426             imageData.font = Font.font8x16x256(file, options);
   1427             imageData.palette = Palette.triplets16(file);
   1428 
   1429             return {
   1430                 "imageData": imageData,
   1431                 "sauce": file.sauce // The SAUCE record.
   1432             };
   1433         }
   1434 
   1435         // A function to parse a sequence of bytes representing PCBoard file format.
   1436         function pcb(bytes, options) {
   1437             var file, loop, charCode, bg, fg, icecolors, x, y, imageData;
   1438 
   1439             // Convert bytes into a File() object, only for the convenience of later extracting the sauce record.
   1440             file = new File(bytes);
   1441             imageData = new ScreenData(80);
   1442             imageData.font = Font.preset(options.font, options);
   1443             imageData.palette = Palette.BIN;
   1444 
   1445             // Reset all colour attributes, <bg> and <fg> and cursor positions, <x> and <y>.
   1446             bg = 0;
   1447             fg = 7;
   1448             x = 0;
   1449             y = 0;
   1450 
   1451             // Set <icecolors> depending on the setting of flags in the sauce record
   1452             if (file.sauce) {
   1453                 icecolors = file.sauce.flags & 1 || options.icecolors;
   1454             } else {
   1455                 icecolors = options.icecolors;
   1456             }
   1457 
   1458             // Convenient function, to insert the current character code, <charCode>, with foreground and background attributes, <fg> and <bg>, at the current cursor position, <x> and <y>.
   1459             function printChar() {
   1460                 imageData.set(x, y, charCode, false, fg, bg);
   1461                 if (++x === 80) {
   1462                     y++;
   1463                     x = 0;
   1464                 }
   1465             }
   1466 
   1467             // Start the image data decoding loop
   1468             loop = 0;
   1469             while (loop < file.size) {
   1470                 // <charCode>, the current character under inspection.
   1471                 charCode = bytes[loop];
   1472 
   1473                 // Exit if we encounter an EOF character.
   1474                 if (charCode === 26) {
   1475                     break;
   1476                 }
   1477 
   1478                 switch (charCode) {
   1479                 case 13: // Ignore Carriage Returns <CR>
   1480                     break;
   1481                 case 10: // Linefeed character (LF), start a new line.
   1482                     y++;
   1483                     x = 0;
   1484                     break;
   1485                 case 9: // Horizontal tabs, add spaces.
   1486                     x += 8;
   1487                     break;
   1488                 case 64: // If we have a control code...
   1489                      // ... look ahead to see if it for and attribute change...
   1490                     if (bytes[loop + 1] === 88) {
   1491                         bg = bytes[loop + 2] - ((bytes[loop + 2] >= 65) ? 55 : 48);
   1492                         if (!icecolors && bg > 7) {
   1493                             bg -= 8;
   1494                         }
   1495                         fg = bytes[loop + 3] - ((bytes[loop + 3] >= 65) ? 55 : 48);
   1496                         loop += 3;
   1497                         // ... or to clear the screen...
   1498                     } else if (bytes[loop + 1] === 67 && bytes[loop + 2] === 76 && bytes[loop + 3] === 83) {
   1499                         x = y = 0;
   1500                         imageData.reset();
   1501                         loop += 4;
   1502                         // ... or to set the cursor position.
   1503                     } else if (bytes[loop + 1] === 80 && bytes[loop + 2] === 79 && bytes[loop + 3] === 83 && bytes[loop + 4] === 58) {
   1504                         if (bytes[loop + 6] === 64) {
   1505                             x = ((bytes[loop + 5]) - 48) - 1;
   1506                             loop += 5;
   1507                         } else {
   1508                             x = (10 * ((bytes[loop + 5]) - 48) + (bytes[loop + 6]) - 48) - 1;
   1509                             loop += 6;
   1510                         }
   1511                         // Otherwise, treat the control code as a literal.
   1512                     } else {
   1513                         printChar();
   1514                     }
   1515                     break;
   1516                 default: // Handle a literal character.
   1517                     printChar();
   1518                 }
   1519                 loop++;
   1520             }
   1521 
   1522             return {
   1523                 "imageData": imageData,
   1524                 "sauce": file.sauce // The sauce record.
   1525             };
   1526         }
   1527 
   1528         // A function to parse a sequence of bytes representing a Tundra file format.
   1529         function tnd(bytes, options) {
   1530             var file, x, y, imageData, charCode, fg, bg;
   1531 
   1532             // Routine to retrieve a 32-bit unsigned integer from a <file object>
   1533             function get32(file) {
   1534                 var value;
   1535                 value = file.get() << 24;
   1536                 value += file.get() << 16;
   1537                 value += file.get() << 8;
   1538                 return value + file.get();
   1539             }
   1540 
   1541             // Convert the bytes into a File() object;
   1542             file = new File(bytes);
   1543 
   1544             // THrow an error if the magic number in the header isn't seen.
   1545             if (file.get() !== 24) {
   1546                 throw "File ID does not match.";
   1547             }
   1548             if (file.getS(8) !== "TUNDRA24") {
   1549                 throw "File ID does not match.";
   1550             }
   1551 
   1552             // Since Tundra files use 24-bit palettes, setup the foreground and background variables, <fg> and <bg>, as RGB arrays, and initialize the cursor positions.
   1553             fg = new Uint8Array(3);
   1554             bg = new Uint8Array(3);
   1555             x = 0;
   1556             y = 0;
   1557 
   1558             // Create the <imageData> object, as a 24-bit version.
   1559             imageData = new ScreenData(80);
   1560             imageData.font = Font.preset(options.font, options);
   1561             imageData.palette = Palette.ANSI;
   1562 
   1563             while (!file.eof()) {
   1564                 // Start a newline if the current <x> position exceeds the column width.
   1565                 if (x === 80) {
   1566                     x = 0;
   1567                     ++y;
   1568                 }
   1569                 // Fetch the next character for inspection.
   1570                 charCode = file.get();
   1571                 // Cursor positioning code.
   1572                 if (charCode === 1) {
   1573                     y = get32(file);
   1574                     x = get32(file);
   1575                 }
   1576                 // Foreground attribute code.
   1577                 if (charCode === 2) {
   1578                     charCode = file.get();
   1579                     file.get();
   1580                     fg.set(file.read(3), 0);
   1581                 }
   1582                 // Background attribute code.
   1583                 if (charCode === 4) {
   1584                     charCode = file.get();
   1585                     file.get();
   1586                     bg.set(file.read(3), 0);
   1587                 }
   1588                 // Both foreground and background setting code.
   1589                 if (charCode === 6) {
   1590                     charCode = file.get();
   1591                     file.get();
   1592                     fg.set(file.read(3), 0);
   1593                     file.get();
   1594                     bg.set(file.read(3), 0);
   1595                 }
   1596                 // In case we see a literal, print it (<charCode>), with the current foreground and background attributes, <fg> and <bg>.
   1597                 if (charCode !== 1 && charCode !== 2 && charCode !== 4 && charCode !== 6) {
   1598                     imageData.set(x, y, charCode, true, fg, bg);
   1599                     ++x;
   1600                 }
   1601             }
   1602 
   1603             return {
   1604                 "imageData": imageData,
   1605                 "sauce": file.sauce // The sauce record.
   1606             };
   1607         }
   1608 
   1609         // A function to parse a sequence of bytes representing an XBiN file format.
   1610         function xb(bytes, options) {
   1611             var file, header, imageData;
   1612 
   1613             // This function is called to parse the XBin header.
   1614             function XBinHeader(file) {
   1615                 var flags;
   1616 
   1617                 // Look for the magic number, throw an error if not found.
   1618                 if (file.getS(4) !== "XBIN") {
   1619                     throw "File ID does not match.";
   1620                 }
   1621                 if (file.get() !== 26) {
   1622                     throw "File ID does not match.";
   1623                 }
   1624 
   1625                 // Get the dimensions of the image...
   1626                 this.width = file.get16();
   1627                 this.height = file.get16();
   1628 
   1629                 // ... and the height of the font, if included.
   1630                 this.fontHeight = file.get();
   1631 
   1632                 //  Sanity check for the font height, throw an error if failed.
   1633                 if (this.fontHeight === 0 || this.fontHeight > 32) {
   1634                     throw "Illegal value for the font height (" + this.fontHeight + ").";
   1635                 }
   1636 
   1637                 // Retrieve the flags.
   1638                 flags = file.get();
   1639 
   1640                 // Check to see if a palette and font is included.
   1641                 this.palette = ((flags & 1) === 1);
   1642                 this.font = ((flags & 2) === 2);
   1643 
   1644                 // Sanity check for conflicting information in font settings.
   1645                 if (this.fontHeight !== 16 && !this.font) {
   1646                     throw "A non-standard font size was defined, but no font information was included with the file.";
   1647                 }
   1648 
   1649                 // Check to see if the image data is <compressed>, if non-blink mode is set, <nonBlink>, and if 512 characters are included with the font data. <char512>.
   1650                 this.compressed = ((flags & 4) === 4);
   1651                 this.nonBlink = ((flags & 8) === 8);
   1652                 this.char512 = ((flags & 16) === 16);
   1653             }
   1654 
   1655             // Routine to decompress data found in an XBin <file>, which contains a Run-Length encoding scheme. Needs to know the current <width> and <height> of the image.
   1656             function uncompress(file, width, height) {
   1657                 var uncompressed, p, i, j, repeatAttr, repeatChar, count;
   1658                 // Initialize the data used to store the image, each text character has two bytes, one for the character code, and the other for the attribute.
   1659                 uncompressed = new Uint8Array(width * height * 2);
   1660                 i = 0;
   1661                 while (i < uncompressed.length) {
   1662                     p = file.get(); // <p>, the current code under inspection.
   1663                     count = p & 63; // <count>, the times data is repeated
   1664                     switch (p >> 6) { // Look at which RLE scheme to use
   1665                     case 1: // Handle repeated character code.
   1666                         for (repeatChar = file.get(), j = 0; j <= count; ++j) {
   1667                             uncompressed[i++] = repeatChar;
   1668                             uncompressed[i++] = file.get();
   1669                         }
   1670                         break;
   1671                     case 2: // Handle repeated attributes.
   1672                         for (repeatAttr = file.get(), j = 0; j <= count; ++j) {
   1673                             uncompressed[i++] = file.get();
   1674                             uncompressed[i++] = repeatAttr;
   1675                         }
   1676                         break;
   1677                     case 3: // Handle repeated character code and attributes.
   1678                         for (repeatChar = file.get(), repeatAttr = file.get(), j = 0; j <= count; ++j) {
   1679                             uncompressed[i++] = repeatChar;
   1680                             uncompressed[i++] = repeatAttr;
   1681                         }
   1682                         break;
   1683                     default: // Handle no RLE.
   1684                         for (j = 0; j <= count; ++j) {
   1685                             uncompressed[i++] = file.get();
   1686                             uncompressed[i++] = file.get();
   1687                         }
   1688                     }
   1689                 }
   1690                 return uncompressed; // Return the final, <uncompressed> data.
   1691             }
   1692 
   1693             // Convert the bytes to a File() object, and reader the settings in the header, by calling XBinHeader().
   1694             file = new File(bytes);
   1695             header = new XBinHeader(file);
   1696 
   1697             // Fetch the image data, and uncompress if necessary.
   1698             imageData = new ScreenData(header.width);
   1699 
   1700             // If palette information is included, read it immediately after the header, if not, use the default palette used for BIN files.
   1701             imageData.palette = header.palette ? Palette.triplets16(file) : Palette.BIN;
   1702             // If font information is included, read it, if not, use the default 80x25 font.
   1703             imageData.font = header.font ? Font.xbin(file, header.fontHeight, options) : Font.preset("80x25", options);
   1704 
   1705             if (header.compressed) {
   1706                 imageData.raw(uncompress(file, header.width, header.height));
   1707             } else {
   1708                 imageData.raw(file.read(header.width * header.height * 2));
   1709             }
   1710 
   1711             return {
   1712                 "imageData": imageData,
   1713                 "sauce": file.sauce // The sauce record.
   1714             };
   1715         }
   1716 
   1717         // Parses an array of <bytes>, which represent a file, and calls <callback> when the image has been generated successfully, <splitRows> is set to a value greater than 0 if the image is to be split over multiple images, defined by an amount of rows. And <options> is key-pair list of options supplied by the user.
   1718         function readBytes(bytes, callback, splitRows, options) {
   1719             var data, returnArray, start, displayData;
   1720 
   1721             // Validate the options given by the user.
   1722             options = validateOptions(options);
   1723 
   1724             // Choose which parser to use, based on the setting defined in <options.filetype>.
   1725             switch (options.filetype) {
   1726             case "txt":
   1727                 // For plain-text files, use the ascii parser, and use the default, or user-defined font.
   1728                 data = asc(bytes, options);
   1729                 break;
   1730             case "ion":
   1731                 // For diz files, use the ascii parser, and use the default, or user-defined font. Also, trim the extra columns.
   1732                 data = asc(bytes, options);
   1733                 data.imageData.trimColumns();
   1734                 break;
   1735             case "adf":
   1736                 // For Artworx files, use the adf parser. Font is already defined in the file.
   1737                 data = adf(bytes, options);
   1738                 break;
   1739             case "bin":
   1740                 // For raw-dump files, use the bin parser, and use the default, or user-defined font.
   1741                 data = bin(bytes, options);
   1742                 break;
   1743             case "idf":
   1744                 // For iCE draw files, use the idf parser. Font is already defined in the file.
   1745                 data = idf(bytes, options);
   1746                 break;
   1747             case "pcb":
   1748                 // For PCBoard files, use the pcb parser, and use the default, or user-defined font.
   1749                 data = pcb(bytes, options);
   1750                 break;
   1751             case "tnd":
   1752                 // For Tundra files, use the tnd parser, and use the default, or user-defined font.
   1753                 data = tnd(bytes, options);
   1754                 break;
   1755             case "xb":
   1756                 // For XBin files, use the xb parser. Font is already set in the parser.
   1757                 data = xb(bytes, options);
   1758                 break;
   1759             case "diz":
   1760                 data = ans(bytes, options);
   1761                 data.imageData.trimColumns();
   1762                 break;
   1763             default:
   1764                 // For unrecognised filetypes, use the ANSI parser.
   1765                 data = ans(bytes, options);
   1766             }
   1767 
   1768             // If the splitRows value is set..
   1769             if (splitRows > 0) {
   1770                 // .. intialize an array used to store the multiple images, and calculate the byte-length of each image.
   1771                 returnArray = [];
   1772                 for (start = 0; start < data.imageData.rows; start += splitRows) {
   1773                     // Call display with each "chunk" of data.
   1774                     displayData = display(data.imageData, start, splitRows, options);
   1775                     // Push the either raw image data or a canvas of each image into the array, according to the <options.imagedata> setting...
   1776                     returnArray.push(options.imagedata ? displayData : displayDataToCanvas(displayData));
   1777                 }
   1778                 // ... and return it.
   1779                 callback(returnArray, data.sauce);
   1780             } else {
   1781                 // For a single image, send the data to display()...
   1782                 displayData = display(data.imageData, 0, data.imageData.rows, options);
   1783                 // ... and call callback() with either the raw data, or a canvas element, depending on the <options.imagedata> setting. 
   1784                 callback(options.imagedata ? displayData : displayDataToCanvas(displayData), data.sauce);
   1785             }
   1786         }
   1787 
   1788         // A single entrypoint for the Parser.
   1789         return {
   1790             "readBytes": readBytes
   1791         };
   1792     }());
   1793 
   1794     // Parses an array of <bytes>, calls <callback> upon success. Uses <options> supplied by the user, and calls <callbackFail>, when supplied, if an error is caught.
   1795     function renderBytes(bytes, callback, options, callbackFail) {
   1796         // Catch any errors.
   1797         try {
   1798             // call readBytes(), with 0 as the splitRows option, and create an empty object if options, is missing.
   1799             Parser.readBytes(bytes, callback, 0, options);
   1800         } catch (e) {
   1801             if (callbackFail) {
   1802                 // If an error is caught, call callbackFail()...
   1803                 callbackFail(e);
   1804             } else {
   1805                 // ... otherwise, just throw it back.
   1806                 throw e;
   1807             }
   1808         }
   1809     }
   1810 
   1811     // Same as renderBytes(), but this fetches a <url> by calling httpGet(), instead of supplying raw bytes.
   1812     function render(url, callback, options, callbackFail) {
   1813         // Call httpGet() with the supplied <url>.
   1814         httpGet(url, function (bytes) {
   1815             // Create a blank <options> object, if one wasn't supplied.
   1816             options = options || {};
   1817             // Set the filetype option, based on the url, if one wasn't already set in <options>.
   1818             if (!options.filetype) {
   1819                 options.filetype = url.split(".").pop().toLowerCase();
   1820             }
   1821             // Call the version of this function for <bytes>, with the Uint8Array data returned with httpGet().
   1822             renderBytes(bytes, callback, options, callbackFail);
   1823             // Pass <callbackFail> to httpGet(), in case the network request fails.
   1824         }, callbackFail);
   1825     }
   1826 
   1827     // Parses an array of <bytes>, calls <callback> upon success. Uses <options> supplied by the user, and calls <callbackFail>, when supplied, if an error is caught. Multiple images are produced, based on the <splitRows> setting, divided by the amount of rows specified.
   1828     function splitRenderBytes(bytes, callback, splitRows, options, callbackFail) {
   1829         // Catch any errors.
   1830         try {
   1831             // call readBytes(), with 27 as the default splitRows option, and create an empty object if options, is missing.
   1832             Parser.readBytes(bytes, callback, splitRows || 27, options);
   1833         } catch (e) {
   1834             if (callbackFail) {
   1835                 // If an error is caught, call callbackFail()...
   1836                 callbackFail(e);
   1837             } else {
   1838                 // ... otherwise, just throw it back.
   1839                 throw e;
   1840             }
   1841         }
   1842     }
   1843 
   1844     // Same as splitRenderBytes(), but this fetches a <url> by calling httpGet(), instead of supplying raw bytes.
   1845     function splitRender(url, callback, splitRows, options, callbackFail) {
   1846         // Call httpGet() with the supplied <url>.
   1847         httpGet(url, function (bytes) {
   1848             // Create a blank <options> object, if one wasn't supplied.
   1849             options = options || {};
   1850             // Set the filetype option, based on the url, if one wasn't already set in <options>.
   1851             if (!options.filetype) {
   1852                 options.filetype = url.split(".").pop().toLowerCase();
   1853             }
   1854             // Call the version of this function for <bytes>, with the Uint8Array data returned with httpGet().
   1855             splitRenderBytes(bytes, callback, splitRows, options, callbackFail);
   1856             // Pass <callbackFail> to httpGet(), in case the network request fails.
   1857         }, callbackFail);
   1858     }
   1859 
   1860     // Receives a sequence of <bytes>, representing an ANSI file, with <options> supplied by the user and returns an Ansimation object which can be used to display and control an animation.
   1861     function Ansimation(bytes, options) {
   1862         var timer, interval, file, font, palette, columns, rows, canvas, ctx, blinkCanvas, buffer, bufferCtx, blinkCtx, escaped, escapeCode, j, code, values, x, y, savedX, savedY, foreground, background, foreground24bit, background24bit, drawForeground, drawBackground, bold, inverse, blink, fontImageData;
   1863 
   1864         // Convert bytes to a File() object.
   1865         file = new File(bytes);
   1866 
   1867         options = validateOptions(options);
   1868 
   1869         switch (options.bits) {
   1870         case "ced":
   1871             palette = Palette.CED;
   1872             break;
   1873         case "workbench":
   1874             palette = Palette.WORKBENCH;
   1875             break;
   1876         default:
   1877             palette = Palette.ANSI;
   1878         }
   1879 
   1880         // If the <columns> setting in the SAUCE record is set, use it.
   1881         if (file.sauce && file.sauce.tInfo1 > 0) {
   1882             columns = file.sauce.tInfo1;
   1883         } else if (options.mode === "ced") {
   1884             columns = 78;
   1885         } else {
   1886             columns = 80;
   1887         }
   1888 
   1889         // Set the amount of <columns> is set in <options>, use it.
   1890         columns = options.columns || columns;
   1891 
   1892         // Set the amount of <rows> is set in <options>, use it.
   1893         rows = options.rows || 26;
   1894 
   1895         // Use the <font> set in <options>, if found in presets, otherwise use the default "80x25".
   1896         font = Font.has(options.font) ? Font.preset(options.font, options) : Font.preset("80x25", options);
   1897 
   1898         // Initialize the canvas used to display the animation, obtain the context, and create the temporary variable <fontImageData> to store the font image-data when rendered.
   1899         canvas = createCanvas(columns * font.width, rows * font.height);
   1900 
   1901         // Deal with pixel ratio for retina-type displays.
   1902         if (options["2x"]) {
   1903             canvas.style.width = (canvas.width / 2) + "px";
   1904             canvas.style.height = (canvas.height / 2) + "px";
   1905         }
   1906 
   1907         ctx = canvas.getContext("2d");
   1908         fontImageData = ctx.createImageData(font.width, font.height);
   1909 
   1910         // <blinkCanvas> is used to record the blinking "on" and "off" on two seperate images, which are then composited onto the main <canvas> alternately.
   1911         blinkCanvas = [createCanvas(canvas.width, canvas.height), createCanvas(canvas.width, canvas.height)];
   1912         buffer = createCanvas(canvas.width, canvas.height);
   1913         blinkCtx = blinkCanvas.map(function (canvas) {
   1914             return canvas.getContext("2d");
   1915         });
   1916         bufferCtx = buffer.getContext("2d");
   1917 
   1918         // Reset all the text attributes set by ANSI control codes.
   1919         function resetAttributes() {
   1920             foreground = 7;
   1921             background = 0;
   1922             foreground24bit = undefined;
   1923             background24bit = undefined;
   1924             bold = false;
   1925             blink = false;
   1926             inverse = false;
   1927         }
   1928 
   1929         // Clear all the screen data, on all canvases, including the <blinkCanvas> array.
   1930         function clearScreen(sx, sy, width, height) {
   1931             ctx.fillStyle = "rgb(" + palette[0][0] + ", " + palette[0][1] + ", " + palette[0][2] + ")";
   1932             ctx.fillRect(sx, sy, width, height);
   1933             blinkCtx[0].clearRect(sx, sy, width, height);
   1934             blinkCtx[1].clearRect(sx, sy, width, height);
   1935         }
   1936 
   1937         // Clear the text characters held on the <blinkCanvas> array, used when a character is drawn which isn't set to blink.
   1938         function clearBlinkChar(charX, charY) {
   1939             var sx, sy;
   1940             sx = charX * font.width;
   1941             sy = charY * font.height;
   1942             blinkCtx[0].clearRect(sx, sy, font.width, font.height);
   1943             blinkCtx[1].clearRect(sx, sy, font.width, font.height);
   1944         }
   1945 
   1946         // Perform a newline operation, if the <y> amount is at the very bottom of the screen, then all canvas elements are shifted up a single line.
   1947         function newLine() {
   1948             x = 1;
   1949             if (y === rows - 1) {
   1950                 ctx.drawImage(canvas, 0, font.height, canvas.width, canvas.height - font.height * 2, 0, 0, canvas.width, canvas.height - font.height * 2);
   1951                 bufferCtx.clearRect(0, 0, canvas.width, canvas.height);
   1952                 bufferCtx.drawImage(blinkCanvas[0], 0, font.height, canvas.width, canvas.height - font.height * 2, 0, 0, canvas.width, canvas.height - font.height * 2);
   1953                 blinkCtx[0].clearRect(0, 0, canvas.width, canvas.height);
   1954                 blinkCtx[0].drawImage(buffer, 0, 0);
   1955                 bufferCtx.clearRect(0, 0, canvas.width, canvas.height);
   1956                 bufferCtx.drawImage(blinkCanvas[1], 0, font.height, canvas.width, canvas.height - font.height * 2, 0, 0, canvas.width, canvas.height - font.height * 2);
   1957                 blinkCtx[1].clearRect(0, 0, canvas.width, canvas.height);
   1958                 blinkCtx[1].drawImage(buffer, 0, 0);
   1959                 clearScreen(0, canvas.height - font.height * 2, canvas.width, font.height);
   1960                 return true;
   1961             }
   1962             ++y;
   1963             return false;
   1964         }
   1965 
   1966         // Sets the cursor position, <x> and <y>, according to new values. Performs a validation to make sure it remains in the boundries of the canvas.
   1967         function setPos(newX, newY) {
   1968             x = Math.min(columns, Math.max(1, newX));
   1969             y = Math.min(rows, Math.max(1, newY));
   1970         }
   1971 
   1972         // Resets all the settings, used upon initialization, and to restore after an animation is restarted.
   1973         function resetAll() {
   1974             clearScreen(0, 0, canvas.width, canvas.height);
   1975             resetAttributes();
   1976             setPos(1, 1);
   1977             escapeCode = "";
   1978             escaped = false;
   1979             file.seek(0);
   1980         }
   1981 
   1982         resetAll();
   1983 
   1984         // Obtains all the values currently stores in an <escapeCode> string. If one of the values cannot be parsed by parseInt(), or is missing, then the default value of 1 is used.
   1985         function getValues() {
   1986             return escapeCode.substr(1, escapeCode.length - 2).split(";").map(function (value) {
   1987                 var parsedValue;
   1988                 parsedValue = parseInt(value, 10);
   1989                 return isNaN(parsedValue) ? 1 : parsedValue;
   1990             });
   1991         }
   1992 
   1993         // Reads a certain amount of bytes, <num>, from the <file> object.
   1994         function read(num) {
   1995             var i;
   1996             for (i = 0; i < num; ++i) {
   1997                 // Break out of the loop if the end of file has been reached.
   1998                 if (file.eof()) {
   1999                     break;
   2000                 }
   2001                 // Store the current character fro inspection in <code>.
   2002                 code = file.get();
   2003                 if (escaped) {
   2004                     // If the <escaped> mode is set, add the code to <escapeCode> string.
   2005                     escapeCode += String.fromCharCode(code);
   2006                     // If the character ends the <escapeCode> string...
   2007                     if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122)) {
   2008                         // Turn <escaped> mode off, and obtain the values in the <escapeCode> string.
   2009                         escaped = false;
   2010                         values = getValues();
   2011                         // For ANSI control codes.
   2012                         if (escapeCode.charAt(0) === "[") {
   2013                             switch (escapeCode.charAt(escapeCode.length - 1)) {
   2014                             case "A": // Cursor up.
   2015                                 y = Math.max(1, y - values[0]);
   2016                                 break;
   2017                             case "B": // Cursor down.
   2018                                 y = Math.min(rows - 1, y + values[0]);
   2019                                 break;
   2020                             case "C": // Cursor right, creating a newline if necessary.
   2021                                 if (x === columns) {
   2022                                     if (newLine()) {
   2023                                         // Break out of the loop if the canvas has been shifted up, this causes the screen to be updated after breaking out of the loop to create the effect of smooth scrolling.
   2024                                         return i + 1;
   2025                                     }
   2026                                 }
   2027                                 x = Math.min(columns, x + values[0]);
   2028                                 break;
   2029                             case "D": // Cursor Up.
   2030                                 x = Math.max(1, x - values[0]);
   2031                                 break;
   2032                             case "H": // Set the cursor position, default value of 1 for <x> if missing.
   2033                                 if (values.length === 1) {
   2034                                     setPos(1, Math.min(values[0]));
   2035                                 } else {
   2036                                     setPos(values[1], values[0]);
   2037                                 }
   2038                                 break;
   2039                             case "J": // Clear screen, if allowed in <options["2J"]>
   2040                                 if (options["2J"] && values[0] === 2) {
   2041                                     x = 1;
   2042                                     y = 1;
   2043                                     clearScreen(0, 0, canvas.width, canvas.height);
   2044                                 }
   2045                                 break;
   2046                             case "K": // Clear to the end of line.
   2047                                 clearScreen((x - 1) * font.width, (y - 1) * font.height, canvas.width - (x - 1) * font.width, font.height);
   2048                                 break;
   2049                             case "m": // Attribute setting codes.
   2050                                 for (j = 0; j < values.length; ++j) {
   2051                                     if (values[j] >= 30 && values[j] <= 37) {
   2052                                         // Set the foreground colour.
   2053                                         foreground = values[j] - 30;
   2054                                         if (foreground24bit) {
   2055                                             foreground24bit = undefined;
   2056                                         }
   2057                                     } else if (values[j] >= 40 && values[j] <= 47) {
   2058                                         // Set the background colour.
   2059                                         background = values[j] - 40;
   2060                                         if (background24bit) {
   2061                                             background24bit = undefined;
   2062                                         }
   2063                                     } else {
   2064                                         switch (values[j]) {
   2065                                         case 0: // Reset attributes.
   2066                                             resetAttributes();
   2067                                             break;
   2068                                         case 1: // Bold on.
   2069                                             bold = true;
   2070                                             if (foreground24bit) {
   2071                                                 foreground24bit = undefined;
   2072                                             }
   2073                                             break;
   2074                                         case 5: // Blink on.
   2075                                             blink = true;
   2076                                             break;
   2077                                         case 7: // Inverse on.
   2078                                             inverse = true;
   2079                                             break;
   2080                                         case 22: // Bold off.
   2081                                             bold = false;
   2082                                             break;
   2083                                         case 25: // Blink off.
   2084                                             blink = false;
   2085                                             break;
   2086                                         case 27: // Inverse off.
   2087                                             inverse = false;
   2088                                             break;
   2089                                         }
   2090                                     }
   2091                                 }
   2092                                 break;
   2093                             case "s": // Store the current cursor position.
   2094                                 savedX = x;
   2095                                 savedY = y;
   2096                                 break;
   2097                             case "t": // 24 bit ANSI
   2098                                 if (values.length === 4) {
   2099                                     switch (values[0]) {
   2100                                     case 0: // Background
   2101                                         background24bit = new Uint8Array([values[1], values[2], values[3], 255]);
   2102                                         break;
   2103                                     case 1: // Foreground
   2104                                         foreground24bit = new Uint8Array([values[1], values[2], values[3], 255]);
   2105                                         break;
   2106                                     }
   2107                                 }
   2108                                 break;
   2109                             case "u": // Restore the saved cursor position.
   2110                                 if (savedX !== undefined && savedY !== undefined) {
   2111                                     x = savedX;
   2112                                     y = savedY;
   2113                                 }
   2114                                 break;
   2115                             }
   2116                         }
   2117                         escapeCode = "";
   2118                     }
   2119                 } else {
   2120                     switch (code) {
   2121                     case 10: // For a lone line feed (LF), start a new line.
   2122                         // Break out of the loop if the canvas has been shifted up, this causes the screen to be updated after breaking out of the loop to create the effect of smooth scrolling.
   2123                         if (newLine()) {
   2124                             // Return how many characters were interpreted.
   2125                             return i + 1;
   2126                         }
   2127                         break;
   2128                     case 13:
   2129                         // If a carriage return and line feed are seen together (CRLF), treat as a newline.
   2130                         if (file.peek() === 0x0A) {
   2131                             file.read(1);
   2132                             // Break out of the loop if the canvas has been shifted up, this causes the screen to be updated after breaking out of the loop to create the effect of smooth scrolling.
   2133                             if (newLine()) {
   2134                                 // Return how many characters were interpreted.
   2135                                 return i + 1;
   2136                             }
   2137                         }
   2138                         break;
   2139                     case 26: // Ignore eof characters.
   2140                         break;
   2141                     default: // Deal with literals
   2142                         // If an ANSI control code is seen, go into <escaped> mode.
   2143                         if (code === 27 && file.peek() === 0x5B) {
   2144                             escaped = true;
   2145                         } else {
   2146                             // Swap colours is <inverse> is set, otherwise, do not.
   2147                             if (inverse) {
   2148                                 drawForeground = background;
   2149                                 drawBackground = foreground;
   2150                             } else {
   2151                                 drawForeground = foreground;
   2152                                 drawBackground = background;
   2153                             }
   2154                             // Shift the colours is <bold> is set, observing the current <options.icecolors> setting.
   2155                             if (bold) {
   2156                                 drawForeground += 8;
   2157                             }
   2158                             if (blink && options.icecolors && !background24bit) {
   2159                                 drawBackground += 8;
   2160                             }
   2161                             // Obtain the <fontImageData> by calling font.getData().
   2162                             if (foreground24bit || background24bit) {
   2163                                 fontImageData.data.set(font.get24BitData(code, foreground24bit || palette[drawForeground], background24bit || palette[drawBackground]), 0);
   2164                             } else {
   2165                                 fontImageData.data.set(font.getData(code, palette, drawForeground, drawBackground), 0);
   2166                             }
   2167                             // Draw the image to the canvas.
   2168                             ctx.putImageData(fontImageData, (x - 1) * font.width, (y - 1) * font.height, 0, 0, font.width, font.height);
   2169                             if (!options.icecolors && !background24bit) {
   2170                                 // Update the blink canvas elements, by drawing both versions of the blinking data to the <blinkCanvas> array, or if <blink> is not set, clear whatever may already be drawn to these elements.
   2171                                 if (blink) {
   2172                                     blinkCtx[0].putImageData(fontImageData, (x - 1) * font.width, (y - 1) * font.height, 0, 0, font.width, font.height);
   2173                                     fontImageData.data.set(font.getData(code, palette, drawBackground, drawBackground), 0);
   2174                                     blinkCtx[1].putImageData(fontImageData, (x - 1) * font.width, (y - 1) * font.height, 0, 0, font.width, font.height);
   2175                                 } else {
   2176                                     clearBlinkChar(x - 1, y - 1);
   2177                                 }
   2178                             }
   2179                             // Start a new line if the <columns> boundry has been reached.
   2180                             if (++x === columns + 1) {
   2181                                 // Break out of the loop if the canvas has been shifted up, this causes the screen to be updated after breaking out of the loop to create the effect of smooth scrolling.
   2182                                 if (newLine()) {
   2183                                     // Return how many characters were interpreted.
   2184                                     return i + 1;
   2185                                 }
   2186                             }
   2187                         }
   2188                     }
   2189                 }
   2190             }
   2191 
   2192             // Return how many characters were interpreted, if we return 0, then the end of file has been reached.
   2193             return i;
   2194         }
   2195 
   2196         // Starts playing the animation from <file> at the specified <baud> rate. Calls <callback> upon completion>, and only clears the screen when encountering "Esc[2J" if <clearScreen> is set to true.
   2197         function play(baud, callback, clearScreen) {
   2198             var length, drawBlink;
   2199             // Sanity check for the <clearScreen> setting, defaults to true.
   2200             clearScreen = (clearScreen === undefined) ? true : clearScreen;
   2201             // Stop playing the animation, <timer>, and stops the blinking <interval> timer, if currently playing.
   2202             clearTimeout(timer);
   2203             clearInterval(interval);
   2204             // <drawBlink> is used to select which <blinkCanvas> is drawn to the screen.
   2205             drawBlink = false;
   2206             // Start drawing each <blinkCanvas> to <canvas> alternately, every 250ms.
   2207             interval = setInterval(function () {
   2208                 ctx.drawImage(blinkCanvas[drawBlink ? 1 : 0], 0, 0);
   2209                 drawBlink = !drawBlink;
   2210             }, 250);
   2211             // When called, drawChunk() will interpret and draw the next chunk of data, the maximum of <length> bytes long, by calling read(), every 10ms. If a value of 0 is returned by read(), call the <callback> function to indicate that it is complete.
   2212             function drawChunk() {
   2213                 if (read(length)) {
   2214                     timer = setTimeout(drawChunk, 10);
   2215                 } else if (callback) {
   2216                     callback();
   2217                 }
   2218             }
   2219             // Calculate roughly how many bytes to draw, based on the <baud> setting.
   2220             length = Math.floor((baud || 115200) / 8 / 100);
   2221             // If <clearScreen> is set, then clear everything, otherwise, just reset all the attributes and escaped data.
   2222             if (clearScreen) {
   2223                 resetAll();
   2224             } else {
   2225                 resetAttributes();
   2226                 escapeCode = "";
   2227                 escaped = false;
   2228                 file.seek(0);
   2229             }
   2230             // Start interpreting the data.
   2231             drawChunk();
   2232         }
   2233 
   2234         // Stops interpreting data, and copying the <blinkCanvas> to <canvas>
   2235         function stop() {
   2236             clearTimeout(timer);
   2237             clearInterval(interval);
   2238         }
   2239 
   2240         // Sets <file> to a new array of <bytes>, so new data can be appended to the animation.
   2241         function load(bytes, callback) {
   2242             clearTimeout(timer);
   2243             file = new File(bytes);
   2244             callback(file.sauce);
   2245         }
   2246 
   2247         // Returns the standard <canvas> and <sauce> information, as well as a <controller> object which is used to <play> and <stop> animations, as well as <load> new data.
   2248         return {
   2249             "canvas": canvas,
   2250             "sauce": file.sauce,
   2251             "controller": {
   2252                 "play": play,
   2253                 "stop": stop,
   2254                 "load": load
   2255             }
   2256         };
   2257     }
   2258 
   2259     // animateBytes() returns a controller object used to control an <ansimation>, based on the supplied <bytes> and <options> provided by the user.
   2260     function animateBytes(bytes, callback, options) {
   2261         var ansimation;
   2262         // Create the new ansimation object.
   2263         ansimation = new Ansimation(bytes, options);
   2264         // The reason for the timeout here is to return the controller object before calling <callback>, so that the animation isn't started before the controller is returned. Ideally, the controller should be passed via callback(), but it's implemented this way to achieve parity with the render() and splitRender() methods.
   2265         setTimeout(function () {
   2266             callback(ansimation.canvas, ansimation.sauce);
   2267         }, 250);
   2268         // Return the controller object.
   2269         return ansimation.controller;
   2270     }
   2271 
   2272     // The same as animateBytes(), but fetches <bytes> from a <url>, and calls <callbackFail> if it fails.
   2273     function animate(url, callback, options, callbackFail) {
   2274         var ansimation;
   2275         // Fetch the data.
   2276         httpGet(url, function (bytes) {
   2277             ansimation = new Ansimation(bytes, options);
   2278             callback(ansimation.canvas, ansimation.sauce);
   2279             // Pass <callbackFail> to httpGet, in case it fails.
   2280         }, callbackFail);
   2281         // The reason a new controller object is created here, instead of passing <ansimation.controller> directly, is because <ansimation> isn't initialized until the bytes are received asynchronously, via httpGet().
   2282         return {
   2283             "play": function (baud, callback, clearScreen) {
   2284                 ansimation.controller.play(baud, callback, clearScreen);
   2285             },
   2286             "stop": function () {
   2287                 ansimation.controller.stop();
   2288             },
   2289             // In this version of load(), httpGet provides the bytes.
   2290             "load": function (url, callback, callbackFail) {
   2291                 httpGet(url, function (bytes) {
   2292                     ansimation.controller.load(bytes, callback);
   2293                 }, callbackFail);
   2294             }
   2295         };
   2296     }
   2297 
   2298     // If this is running in a Web Worker instance, do not initialize Popup, as it provides an in-browser function.
   2299     if (!self.WorkerLocation) {
   2300         // Popup collects functions which allows a "pop-up" display to be shown in the browser, instead of calling the various render methods elsewhere.
   2301         Popup = (function () {
   2302             var STYLE_DEFAULTS;
   2303 
   2304             // Defaults used when rewriting the various CSS properties when creating a new element.
   2305             STYLE_DEFAULTS = {"background-color": "transparent", "background-image": "none", "margin": "0", "padding": "0", "border": "0", "font-size": "100%", "font": "inherit", "vertical-align": "baseline", "color": "black", "display": "block", "cursor": "default", "text-align": "left", "text-shadow": "none", "text-transform": "none", "clear": "none", "float": "none", "overflow": "auto", "position": "relative", "visibility": "visible"};
   2306 
   2307             // Works through every element, and discovers the highest z-index recorded. Later used to make sure that elements added to the document are visible.
   2308             function findHighestZIndex() {
   2309                 var elements, highest, i, zIndex;
   2310                 for (i = 0, elements = document.getElementsByTagName("*"), highest = 0; i < elements.length; ++i) {
   2311                     zIndex = document.defaultView.getComputedStyle(elements[i]).zIndex;
   2312                     if (zIndex !== "auto" && zIndex !== "inherit") {
   2313                         highest = Math.max(highest, parseInt(zIndex, 10));
   2314                     }
   2315                 }
   2316                 return highest;
   2317             }
   2318 
   2319             // Applies styles to an <element> stored in an object <style>
   2320             function applyStyle(element, style) {
   2321                 var name;
   2322                 for (name in style) {
   2323                     if (style.hasOwnProperty(name)) {
   2324                         // Mark every-one as "important", to make sure that it doesn't inherit any styles on the page.
   2325                         element.style.setProperty(name, style[name], "important");
   2326                     }
   2327                 }
   2328             }
   2329 
   2330             // Creates a new "div" element, applies the default set of CSS properties, and applies an optional set from <style>.
   2331             function createDiv(style) {
   2332                 var div;
   2333                 style = style || {};
   2334                 div = document.createElement("div");
   2335                 applyStyle(div, STYLE_DEFAULTS);
   2336                 applyStyle(div, style);
   2337                 return div;
   2338             }
   2339 
   2340             // Sets the transition css properties to <element>, and applies a <style> immediately to perform a CSS transition after a short timeout (in order to make sure the transition styles are registered first).
   2341             function transitionCSS(element, transProperty, transDuration, transFunction, style) {
   2342                 element.style.transitionProperty = transProperty;
   2343                 element.style.transitionDuration = transDuration;
   2344                 element.style.transitionTimingFunction = transFunction;
   2345                 if (style) {
   2346                     setTimeout(function () {
   2347                         applyStyle(element, style);
   2348                     }, 50);
   2349                 }
   2350             }
   2351 
   2352             // Displays a pop-up, based on the supplied <bytes> and <baud>-rate (if this is set to 0, display as an image). Also uses the user-supplied <options>.
   2353             function show(bytes, baud, options) {
   2354                 var divOverlay, divCanvasContainer;
   2355 
   2356                 // Slides up the <divOverlay> element on the screen by setting various transition styles, also displays a loading spinner, if a url is provided in <options.spinner>
   2357                 function slideUpContainer() {
   2358                     if (options.spinner) {
   2359                         applyStyle(divOverlay, {"background-image": "none"});
   2360                     }
   2361                     transitionCSS(divCanvasContainer, "top", "0.6s", "ease-in-out", {"top": "0"});
   2362                     setTimeout(function () {
   2363                         applyStyle(divOverlay, {"overflow": "auto"});
   2364                     }, 750);
   2365                 }
   2366 
   2367                 // Applies styles to a <canvas> element, also makes sure each <canvas> element is displayed vertically without a gap, by setting vertical-align: bottom.
   2368                 function processCanvas(canvas) {
   2369                     // Apply default styles.
   2370                     applyStyle(canvas, STYLE_DEFAULTS);
   2371                     canvas.style.verticalAlign = "bottom";
   2372 
   2373                     return canvas;
   2374                 }
   2375 
   2376                 // Displays an error, in the form of an dialog box, with a defined <message>, and dismisses the overlay element.
   2377                 function error(message) {
   2378                     alert("Error: " + message);
   2379                     document.body.removeChild(divOverlay);
   2380                 }
   2381 
   2382                 // Removes the overlay element.
   2383                 function dismiss(evt) {
   2384                     evt.preventDefault();
   2385                     document.body.removeChild(divOverlay);
   2386                 }
   2387 
   2388                 // Create the overlay element with various css styles.
   2389                 divOverlay = createDiv({"position": "fixed", "left": "0px", "top": "0px", "width": "100%", "height": "100%", "background-color": "rgba(0, 0, 0, 0.8)", "overflow": "hidden", "z-index": (findHighestZIndex() + 1).toString(10), "opacity": "0"});
   2390                 // If a spinner url is provided in <options>, add it to the backdrop of the overlay element...
   2391                 if (options.spinner) {
   2392                     applyStyle(divOverlay, {"background-image": "url(" + options.spinner + ")", "background-position": "center center", "background-repeat": "no-repeat"});
   2393                     // ... and scale it down to half-size in css-pixels if a retina-type is being used.
   2394                     if (options["2x"]) {
   2395                         applyStyle(divOverlay, {"background-size": "32px 64px"});
   2396                     }
   2397                 }
   2398                 // Create the elemtn used to containt the canvas element(s).
   2399                 divCanvasContainer = createDiv({"background-color": "black", "box-shadow": "0 8px 32px rgb(0, 0, 0)", "margin": "8px auto", "padding": "16px", "border": "2px solid white", "border-radius": "8px", "top": "100%"});
   2400 
   2401                 // Add the elements to the document.
   2402                 divOverlay.appendChild(divCanvasContainer);
   2403                 document.body.appendChild(divOverlay);
   2404 
   2405                 // Add the transition properties, and start the transition.
   2406                 transitionCSS(divOverlay, "opacity", "0.2s", "ease-out", {"opacity": "1.0"});
   2407 
   2408                 // After the transition has been given time to complete, start the rendering process.
   2409                 setTimeout(function () {
   2410                     var controller;
   2411                     // If a baud rate setting has been defined, regard as an animation.
   2412                     if (baud > 0) {
   2413                         controller = animateBytes(bytes, function (canvas) {
   2414                             // Set the container's width based on the width of the canvas element, and display the canvas.
   2415                             if (options["2x"]) {
   2416                                 divCanvasContainer.style.width = (canvas.width / 2) + "px";
   2417                             } else {
   2418                                 divCanvasContainer.style.width = canvas.width + "px";
   2419                             }
   2420                             divCanvasContainer.appendChild(processCanvas(canvas));
   2421                             // Slide up the container.
   2422                             slideUpContainer();
   2423                             setTimeout(function () {
   2424                                 // Start playing the animation after the sliding effect.
   2425                                 controller.play(baud);
   2426                             }, 750);
   2427                             // If the overlay is clicked anywhere...
   2428                             divOverlay.onclick = function (evt) {
   2429                                 // ... dismiss the overlay, and stop the animation.
   2430                                 dismiss(evt);
   2431                                 controller.stop();
   2432                             };
   2433                         }, options); // Pass the options to animateBytes.
   2434                     } else { // If no baud-rate, treat as an image.
   2435                         splitRenderBytes(bytes, function (canvases) {
   2436                             // Set the container's width based on the width of the first canvas element.
   2437                             if (options["2x"]) {
   2438                                 divCanvasContainer.style.width = (canvases[0].width / 2) + "px";
   2439                             } else {
   2440                                 divCanvasContainer.style.width = canvases[0].width + "px";
   2441                             }
   2442                             canvases.forEach(function (canvas) {
   2443                                 // Append each canvas element to the element container.
   2444                                 divCanvasContainer.appendChild(processCanvas(canvas));
   2445                             });
   2446                             // Slide up the container.
   2447                             slideUpContainer();
   2448                             // If the overlay is clicked anywhere dismiss the overlay.
   2449                             divOverlay.onclick = dismiss;
   2450                         }, 100, options, error); // Pass the options and error function to splitRenderBytes.
   2451                     }
   2452                 }, 250);
   2453             }
   2454 
   2455             // Single entrypoint for popup.
   2456             return {
   2457                 "show": show
   2458             };
   2459         }());
   2460     }
   2461 
   2462     // Calls show() in <Popup>, according to the supplied <bytes> and <options>.
   2463     function popupBytes(bytes, options) {
   2464         // Set baud-rate to 0, since this is assumed to be an image.
   2465         Popup.show(bytes, 0, options);
   2466     }
   2467 
   2468     // The <url> version of popupBytes(), which gets the <bytes> from a file from the network first, and calls <callbackFail> when the network fetch fails.
   2469     function popup(url, options, callbackFail) {
   2470         httpGet(url, function (bytes) {
   2471             // Set <options> to an empty object, if not set.
   2472             options = options || {};
   2473             // Set the filetype to the url extension, if <options.filetype> is not already set.
   2474             if (!options.filetype) {
   2475                 options.filetype = url.split(".").pop().toLowerCase();
   2476             }
   2477             // Call popupBytes() with the <bytes> returned from the httpGet() operation.
   2478             popupBytes(bytes, options);
   2479             // Pass <callbackFail> to httpGet(), in case the operation fails.
   2480         }, callbackFail);
   2481     }
   2482 
   2483     // The animation version of popupBytes(), this sets the <baud> option, defaults to 14400, so the bytes are assumend to represent an ANSI animation.
   2484     function popupAnimationBytes(bytes, baud, options) {
   2485         Popup.show(bytes, baud || 14400, options);
   2486     }
   2487 
   2488     // The <url> version of popupAnimationBytes(), fetches the <bytes> from a httpGet() operation.
   2489     function popupAnimation(url, baud, options, callbackFail) {
   2490         httpGet(url, function (bytes) {
   2491             // No filetype setting is set here, as the bytes are assumed in an animation to represent an ANSI file.
   2492             popupAnimationBytes(bytes, baud, options);
   2493             // Pass <callbackFail> to httpGet(), in case the operation fails.
   2494         }, callbackFail);
   2495     }
   2496 
   2497     // Return all the publicly-available functions for AnsiLove.
   2498     return {
   2499         "sauceBytes": sauceBytes,
   2500         "sauce": sauce,
   2501         // Used to convert raw image data to a canvas element, after a web worker returns it's results.
   2502         "displayDataToCanvas": displayDataToCanvas,
   2503         "renderBytes": renderBytes,
   2504         "render": render,
   2505         "splitRenderBytes": splitRenderBytes,
   2506         "splitRender": splitRender,
   2507         "animateBytes": animateBytes,
   2508         "animate": animate,
   2509         "popupBytes": popupBytes,
   2510         "popup": popup,
   2511         "popupAnimationBytes": popupAnimationBytes,
   2512         "popupAnimation": popupAnimation
   2513     };
   2514 }());
   2515 
   2516 (function () {
   2517     "use strict";
   2518     // If this script is executed as part of a Web Worker thread, attach methods to <self> to provide hooks for a web worker instance.
   2519     if (self.WorkerLocation) {
   2520         self.onmessage = function (evt) {
   2521             // If raw bytes have been supplied.
   2522             if (evt.data.bytes) {
   2523                 if (evt.data.split > 0) { // If the imagedata is to be split.
   2524                     // Web worker function for splitRenderBytes.
   2525                     AnsiLove.splitRenderBytes(evt.data.bytes, function (imagedata, sauce) {
   2526                         // Return the raw-data, returned by the display() function, and a sauce record.
   2527                         self.postMessage({"splitimagedata": imagedata, "sauce": sauce});
   2528                         // Pass the various options from the web worker invocation, setting the <imagedata> setting on.
   2529                     }, evt.data.split, {"imagedata": 1, "font": evt.data.font, "bits": evt.data.bits, "icecolors": evt.data.icecolors, "columns": evt.data.columns, "thumbnail": evt.data.thumbnail, "2x": evt.data["2x"], "filetype": evt.data.filetype});
   2530                 } else { // For just a single image.
   2531                     // Web worker function for renderBytes.
   2532                     AnsiLove.renderBytes(evt.data.bytes, function (imagedata, sauce) {
   2533                         // Return the raw-data, returned by the display() function, and a sauce record.
   2534                         self.postMessage({"imagedata": imagedata, "sauce": sauce});
   2535                         // Pass the various options from the web worker invocation, setting the <imagedata> setting on.
   2536                     }, {"imagedata": 1, "font": evt.data.font, "bits": evt.data.bits, "icecolors": evt.data.icecolors, "columns": evt.data.columns, "thumbnail": evt.data.thumbnail, "2x": evt.data["2x"], "filetype": evt.data.filetype});
   2537                 }
   2538             } else { // If a url has been supplied.
   2539                 if (evt.data.split > 0) { // If the imagedata is to be split.
   2540                     AnsiLove.splitRender(evt.data.url, function (imagedata, sauce) {
   2541                         // Return the raw-data, returned by the display() function, and a sauce record.
   2542                         self.postMessage({"splitimagedata": imagedata, "sauce": sauce});
   2543                         // Pass the various options from the web worker invocation, setting the <imagedata> setting on.
   2544                     }, evt.data.split, {"imagedata": 1, "font": evt.data.font, "bits": evt.data.bits, "icecolors": evt.data.icecolors, "columns": evt.data.columns, "thumbnail": evt.data.thumbnail, "2x": evt.data["2x"], "filetype": evt.data.filetype});
   2545                 } else { // For just a single image.
   2546                     AnsiLove.render(evt.data.url, function (imagedata, sauce) {
   2547                         // Return the raw-data, returned by the display() function, and a sauce record.
   2548                         self.postMessage({"imagedata": imagedata, "sauce": sauce});
   2549                         // Pass the various options from the web worker invocation, setting the <imagedata> setting on.
   2550                     }, {"imagedata": 1, "font": evt.data.font, "bits": evt.data.bits, "icecolors": evt.data.icecolors, "columns": evt.data.columns, "thumbnail": evt.data.thumbnail, "2x": evt.data["2x"], "filetype": evt.data.filetype});
   2551                 }
   2552             }
   2553         };
   2554     }
   2555 }());