From cb8446fdb0054672c8f8794fb28e8158d3932e6d Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Thu, 26 Sep 2013 16:48:28 +0300 Subject: [PATCH 001/108] latest coffeescript version used --- textmode.js | 2583 +++++++++++++++++++++++++-------------------------- 1 file changed, 1290 insertions(+), 1293 deletions(-) diff --git a/textmode.js b/textmode.js index 9906fbc..9998fb7 100644 --- a/textmode.js +++ b/textmode.js @@ -1,1372 +1,1369 @@ // Generated by CoffeeScript 1.6.3 -(function() { - var __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; +var __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; - this.ImageTextModeSAUCE = (function() { - function ImageTextModeSAUCE() {} +this.ImageTextModeSAUCE = (function() { + function ImageTextModeSAUCE() {} - ImageTextModeSAUCE.prototype.parseUrl = function(url) { - var content, req; - req = new XMLHttpRequest; - req.open('GET', url, false); - req.overrideMimeType('text/plain; charset=x-user-defined'); - req.send(null); - content = req.status === 200 || req.status === 0 ? req.responseText : ''; - return this.parse(content); - }; + ImageTextModeSAUCE.prototype.parseUrl = function(url) { + var content, req; + req = new XMLHttpRequest; + req.open('GET', url, false); + req.overrideMimeType('text/plain; charset=x-user-defined'); + req.send(null); + content = req.status === 200 || req.status === 0 ? req.responseText : ''; + return this.parse(content); + }; - ImageTextModeSAUCE.prototype.parse = function(content) { - var commentMarker, i, sauceMarker; - sauceMarker = content.length - 128; - if (content.substr(sauceMarker, 5) === !'SAUCE') { - return false; - } - this.id = 'SAUCE'; - this.version = content.substr(sauceMarker + 5, 2); - this.title = content.substr(sauceMarker + 7, 35); - this.author = content.substr(sauceMarker + 42, 20); - this.group = content.substr(sauceMarker + 62, 20); - this.date = content.substr(sauceMarker + 82, 8); - this.fileSize = this.unpackLong(content.substr(sauceMarker + 90, 4)); - this.dataType = this.getByteAt(content.substr(sauceMarker + 94, 1)); - this.fileType = this.getByteAt(content.substr(sauceMarker + 95, 1)); - this.tinfo1 = this.unpackShort(content.substr(sauceMarker + 96, 2)); - this.tinfo2 = this.unpackShort(content.substr(sauceMarker + 98, 2)); - this.tinfo3 = this.unpackShort(content.substr(sauceMarker + 100, 2)); - this.tinfo4 = this.unpackShort(content.substr(sauceMarker + 102, 2)); - this.commentCount = this.getByteAt(content.substr(sauceMarker + 104, 1)); - this.flags = this.getByteAt(content.substr(sauceMarker + 105, 1)); - this.filler = content.substr(sauceMarker + 106, 22); - commentMarker = sauceMarker - 5 - this.commentCount * 64; - if (this.commentCount > 0 && content.substr(commentMarker, 5) === 'COMNT') { - commentMarker += 5; - this.comments = []; - i = this.commentCount; - while (i-- > 0) { - this.comments.push(content.substr(commentMarker, 64)); - commentMarker += 64; - } - } - return true; - }; - - ImageTextModeSAUCE.prototype.unpackLong = function(data) { - var lng; - lng = (((this.getByteAt(data, 3) << 8) + this.getByteAt(data, 2) << 8) + this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); - if (lng < 0) { - lng += 4294967296; - } - return lng; - }; - - ImageTextModeSAUCE.prototype.unpackShort = function(data) { - var shrt; - shrt = (this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); - if (shrt < 0) { - shrt += 65536; - } - return shrt; - }; - - ImageTextModeSAUCE.prototype.getByteAt = function(data, offset) { - return data.charCodeAt(offset) & 0xFF; - }; - - return ImageTextModeSAUCE; - - })(); - - this.ImageTextModePalette = (function() { - function ImageTextModePalette(options) { - var k, v; - this.colors = []; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; + ImageTextModeSAUCE.prototype.parse = function(content) { + var commentMarker, i, sauceMarker; + sauceMarker = content.length - 128; + if (content.substr(sauceMarker, 5) === !'SAUCE') { + return false; + } + this.id = 'SAUCE'; + this.version = content.substr(sauceMarker + 5, 2); + this.title = content.substr(sauceMarker + 7, 35); + this.author = content.substr(sauceMarker + 42, 20); + this.group = content.substr(sauceMarker + 62, 20); + this.date = content.substr(sauceMarker + 82, 8); + this.fileSize = this.unpackLong(content.substr(sauceMarker + 90, 4)); + this.dataType = this.getByteAt(content.substr(sauceMarker + 94, 1)); + this.fileType = this.getByteAt(content.substr(sauceMarker + 95, 1)); + this.tinfo1 = this.unpackShort(content.substr(sauceMarker + 96, 2)); + this.tinfo2 = this.unpackShort(content.substr(sauceMarker + 98, 2)); + this.tinfo3 = this.unpackShort(content.substr(sauceMarker + 100, 2)); + this.tinfo4 = this.unpackShort(content.substr(sauceMarker + 102, 2)); + this.commentCount = this.getByteAt(content.substr(sauceMarker + 104, 1)); + this.flags = this.getByteAt(content.substr(sauceMarker + 105, 1)); + this.filler = content.substr(sauceMarker + 106, 22); + commentMarker = sauceMarker - 5 - this.commentCount * 64; + if (this.commentCount > 0 && content.substr(commentMarker, 5) === 'COMNT') { + commentMarker += 5; + this.comments = []; + i = this.commentCount; + while (i-- > 0) { + this.comments.push(content.substr(commentMarker, 64)); + commentMarker += 64; } } + return true; + }; - ImageTextModePalette.prototype.toRgbaString = function(color) { - return 'rgba(' + color.join(',') + ',1)'; - }; + ImageTextModeSAUCE.prototype.unpackLong = function(data) { + var lng; + lng = (((this.getByteAt(data, 3) << 8) + this.getByteAt(data, 2) << 8) + this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); + if (lng < 0) { + lng += 4294967296; + } + return lng; + }; - return ImageTextModePalette; + ImageTextModeSAUCE.prototype.unpackShort = function(data) { + var shrt; + shrt = (this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); + if (shrt < 0) { + shrt += 65536; + } + return shrt; + }; - })(); + ImageTextModeSAUCE.prototype.getByteAt = function(data, offset) { + return data.charCodeAt(offset) & 0xFF; + }; - this.ImageTextModePaletteVGA = (function(_super) { - __extends(ImageTextModePaletteVGA, _super); + return ImageTextModeSAUCE; - function ImageTextModePaletteVGA(options) { - var k, v; - ImageTextModePaletteVGA.__super__.constructor.apply(this, arguments); - this.colors = [[0x00, 0x00, 0x00], [0x00, 0x00, 0xaa], [0x00, 0xaa, 0x00], [0x00, 0xaa, 0xaa], [0xaa, 0x00, 0x00], [0xaa, 0x00, 0xaa], [0xaa, 0x55, 0x00], [0xaa, 0xaa, 0xaa], [0x55, 0x55, 0x55], [0x55, 0x55, 0xff], [0x55, 0xff, 0x55], [0x55, 0xff, 0xff], [0xff, 0x55, 0x55], [0xff, 0x55, 0xff], [0xff, 0xff, 0x55], [0xff, 0xff, 0xff]]; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; +})(); + +this.ImageTextModePalette = (function() { + function ImageTextModePalette(options) { + var k, v; + this.colors = []; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextModePalette.prototype.toRgbaString = function(color) { + return 'rgba(' + color.join(',') + ',1)'; + }; + + return ImageTextModePalette; + +})(); + +this.ImageTextModePaletteVGA = (function(_super) { + __extends(ImageTextModePaletteVGA, _super); + + function ImageTextModePaletteVGA(options) { + var k, v; + ImageTextModePaletteVGA.__super__.constructor.apply(this, arguments); + this.colors = [[0x00, 0x00, 0x00], [0x00, 0x00, 0xaa], [0x00, 0xaa, 0x00], [0x00, 0xaa, 0xaa], [0xaa, 0x00, 0x00], [0xaa, 0x00, 0xaa], [0xaa, 0x55, 0x00], [0xaa, 0xaa, 0xaa], [0x55, 0x55, 0x55], [0x55, 0x55, 0xff], [0x55, 0xff, 0x55], [0x55, 0xff, 0xff], [0xff, 0x55, 0x55], [0xff, 0x55, 0xff], [0xff, 0xff, 0x55], [0xff, 0xff, 0xff]]; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + return ImageTextModePaletteVGA; + +})(this.ImageTextModePalette); + +this.ImageTextModePaletteANSI = (function(_super) { + __extends(ImageTextModePaletteANSI, _super); + + function ImageTextModePaletteANSI(options) { + var k, v; + ImageTextModePaletteANSI.__super__.constructor.apply(this, arguments); + this.colors = [[0x00, 0x00, 0x00], [0xaa, 0x00, 0x00], [0x00, 0xaa, 0x00], [0xaa, 0x55, 0x00], [0x00, 0x00, 0xaa], [0xaa, 0x00, 0xaa], [0x00, 0xaa, 0xaa], [0xaa, 0xaa, 0xaa], [0x55, 0x55, 0x55], [0xff, 0x55, 0x55], [0x55, 0xff, 0x55], [0xff, 0xff, 0x55], [0x55, 0x55, 0xff], [0xff, 0x55, 0xff], [0x55, 0xff, 0xff], [0xff, 0xff, 0xff]]; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + return ImageTextModePaletteANSI; + +})(this.ImageTextModePalette); + +this.ImageTextModeFont = (function() { + function ImageTextModeFont(options) { + var k, v; + this.chars = []; + this.width = 8; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + return ImageTextModeFont; + +})(); + +this.ImageTextModeFont8x16 = (function(_super) { + __extends(ImageTextModeFont8x16, _super); + + function ImageTextModeFont8x16(options) { + var k, v; + ImageTextModeFont8x16.__super__.constructor.apply(this, arguments); + this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00], [0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00], [0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00], [0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00], [0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x70, 0x00, 0x00], [0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x70, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x38, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x36, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00], [0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x18, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00], [0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x66, 0xce, 0x9a, 0x3f, 0x06, 0x06, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44], [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], [0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00], [0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x6c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x3c, 0x66, 0x0c, 0x18, 0x32, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]]; + this.height = 16; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + return ImageTextModeFont8x16; + +})(this.ImageTextModeFont); + +this.ImageTextModeFont8x8 = (function(_super) { + __extends(ImageTextModeFont8x8, _super); + + function ImageTextModeFont8x8(options) { + var k, v; + ImageTextModeFont8x8.__super__.constructor.apply(this, arguments); + this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e], [0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e], [0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00], [0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00], [0x38, 0x7c, 0x38, 0xfe, 0xfe, 0xd6, 0x10, 0x38], [0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x7c, 0x10, 0x38], [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00], [0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff], [0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00], [0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff], [0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78], [0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18], [0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0], [0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0], [0x18, 0xdb, 0x3c, 0xe7, 0xe7, 0x3c, 0xdb, 0x18], [0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00], [0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00], [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18], [0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00], [0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00], [0x3e, 0x61, 0x3c, 0x66, 0x66, 0x3c, 0x86, 0x7c], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00], [0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff], [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00], [0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00], [0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00], [0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00], [0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00], [0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00], [0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00], [0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00], [0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00], [0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00], [0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00], [0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00], [0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00], [0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00], [0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00], [0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00], [0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30], [0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00], [0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00], [0x38, 0x6c, 0xc6, 0xd6, 0xc6, 0x6c, 0x38, 0x00], [0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00], [0x7c, 0xc6, 0x06, 0x1c, 0x30, 0x66, 0xfe, 0x00], [0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00], [0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00], [0xfe, 0xc0, 0xc0, 0xfc, 0x06, 0xc6, 0x7c, 0x00], [0x38, 0x60, 0xc0, 0xfc, 0xc6, 0xc6, 0x7c, 0x00], [0xfe, 0xc6, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00], [0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0x00], [0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00], [0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00], [0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30], [0x06, 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x06, 0x00], [0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00], [0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00], [0x7c, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x00], [0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00], [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00], [0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00], [0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00], [0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00], [0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00], [0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00], [0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3a, 0x00], [0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00], [0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00], [0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00], [0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00], [0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00], [0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00], [0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], [0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xce, 0x7c, 0x0e], [0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00], [0x3c, 0x66, 0x30, 0x18, 0x0c, 0x66, 0x3c, 0x00], [0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x3c, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00], [0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc6, 0x00], [0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x00], [0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00], [0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00], [0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00], [0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00], [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff], [0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0xe0, 0x60, 0x7c, 0x66, 0x66, 0x66, 0xdc, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc6, 0x7c, 0x00], [0x1c, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x3c, 0x66, 0x60, 0xf8, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], [0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00], [0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x06, 0x00, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c], [0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00], [0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0x00], [0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0], [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e], [0x00, 0x00, 0xdc, 0x76, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x7e, 0xc0, 0x7c, 0x06, 0xfc, 0x00], [0x30, 0x30, 0xfc, 0x30, 0x30, 0x36, 0x1c, 0x00], [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00], [0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc], [0x00, 0x00, 0x7e, 0x4c, 0x18, 0x32, 0x7e, 0x00], [0x0e, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0e, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00], [0x70, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x70, 0x00], [0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00], [0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x0c, 0x78], [0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x0c, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x7c, 0x82, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0xc6, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x30, 0x18, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x00, 0x00, 0x7e, 0xc0, 0xc0, 0x7e, 0x0c, 0x38], [0x7c, 0x82, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0xc6, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x30, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x7c, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00], [0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], [0x38, 0x6c, 0x7c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], [0x18, 0x30, 0xfe, 0xc0, 0xf8, 0xc0, 0xfe, 0x00], [0x00, 0x00, 0x7e, 0x18, 0x7e, 0xd8, 0x7e, 0x00], [0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00], [0x7c, 0x82, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x30, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x78, 0x84, 0x00, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x60, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc], [0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18], [0x38, 0x6c, 0x64, 0xf0, 0x60, 0x66, 0xfc, 0x00], [0x66, 0x66, 0x3c, 0x7e, 0x18, 0x7e, 0x18, 0x18], [0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7], [0x0e, 0x1b, 0x18, 0x3c, 0x18, 0xd8, 0x70, 0x00], [0x18, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00], [0x0c, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x18, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x00], [0x76, 0xdc, 0x00, 0xe6, 0xf6, 0xde, 0xce, 0x00], [0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00], [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00], [0x18, 0x00, 0x18, 0x18, 0x30, 0x63, 0x3e, 0x00], [0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0x00, 0x00], [0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x00, 0x00], [0x63, 0xe6, 0x6c, 0x7e, 0x33, 0x66, 0xcc, 0x0f], [0x63, 0xe6, 0x6c, 0x7a, 0x36, 0x6a, 0xdf, 0x06], [0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x00], [0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00], [0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00], [0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88], [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], [0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36], [0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36], [0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00], [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36], [0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36], [0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36], [0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36], [0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], [0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36], [0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00], [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36], [0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff], [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], [0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00], [0x78, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xcc, 0x00], [0xfe, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00], [0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00], [0xfe, 0xc6, 0x60, 0x30, 0x60, 0xc6, 0xfe, 0x00], [0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0xc0], [0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00], [0x7e, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x7e], [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00], [0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00], [0x0e, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x3c, 0x00], [0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00], [0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0], [0x1e, 0x30, 0x60, 0x7e, 0x60, 0x30, 0x1e, 0x00], [0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00], [0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00], [0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x7e, 0x00], [0x30, 0x18, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00], [0x0c, 0x18, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00], [0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70], [0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00], [0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00], [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00], [0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c], [0x6c, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00], [0x78, 0x0c, 0x18, 0x30, 0x7c, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]]; + this.height = 8; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + return ImageTextModeFont8x8; + +})(this.ImageTextModeFont); + +this.ImageTextModeFontAmiga = (function(_super) { + __extends(ImageTextModeFontAmiga, _super); + + function ImageTextModeFontAmiga(options) { + var k, v; + ImageTextModeFontAmiga.__super__.constructor.apply(this, arguments); + this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x83, 0x83, 0x39, 0x39, 0x21, 0x21, 0x29, 0x29, 0x21, 0x21, 0x3f, 0x3f, 0x87, 0x87, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0xff, 0xff], [0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xff, 0xff], [0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff], [0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x9f, 0x9f, 0x91, 0x91, 0x99, 0x99, 0x99, 0x99, 0xc1, 0xc1, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x9c, 0x9c, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x9c, 0x9c, 0xff, 0xff], [0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x9c, 0x9c, 0x88, 0x88, 0x80, 0x80, 0x94, 0x94, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff], [0x9c, 0x9c, 0x8c, 0x8c, 0x84, 0x84, 0x90, 0x90, 0x98, 0x98, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x91, 0x91, 0xc0, 0xc0, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x8f, 0x8f, 0xc3, 0xc3, 0xf1, 0xf1, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x81, 0x81, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xc3, 0xc3, 0xe7, 0xe7, 0xff, 0xff], [0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x94, 0x94, 0x80, 0x80, 0x88, 0x88, 0x9c, 0x9c, 0xff, 0xff], [0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x3c, 0x3c, 0xff, 0xff], [0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x80, 0x80, 0xf9, 0xf9, 0xf3, 0xf3, 0xe7, 0xe7, 0xcf, 0xcf, 0x9f, 0x9f, 0x80, 0x80, 0xff, 0xff], [0xc3, 0xc3, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xc3, 0xc3, 0xff, 0xff], [0x3f, 0x3f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe7, 0xe7, 0xf3, 0xf3, 0xf9, 0xf9, 0xfc, 0xfc, 0xff, 0xff], [0xc3, 0xc3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xc3, 0xc3, 0xff, 0xff], [0xf7, 0xf7, 0xe3, 0xe3, 0xc9, 0xc9, 0x9c, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00], [0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00], [0x18, 0x18, 0x3e, 0x3e, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0xac, 0xac, 0xd8, 0xd8, 0x36, 0x36, 0x6a, 0x6a, 0xcc, 0xcc, 0x00, 0x00], [0x38, 0x38, 0x6c, 0x6c, 0x68, 0x68, 0x76, 0x76, 0xdc, 0xdc, 0xce, 0xce, 0x7b, 0x7b, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x3c, 0x3c, 0xff, 0xff, 0x3c, 0x3c, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x38, 0x38, 0x78, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x1c, 0x1c, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x3c, 0x3c, 0x6c, 0x6c, 0xcc, 0xcc, 0xfe, 0xfe, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x7c, 0x7c, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x30, 0x30, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7e, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x0c, 0x0c, 0x38, 0x38, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00], [0x7c, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xd6, 0xd6, 0xde, 0xde, 0xc0, 0xc0, 0x78, 0x78, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00], [0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x00, 0x00], [0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x60, 0x60, 0x6e, 0x6e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0xc6, 0xc6, 0xcc, 0xcc, 0xd8, 0xd8, 0xf0, 0xf0, 0xd8, 0xd8, 0xcc, 0xcc, 0xc6, 0xc6, 0x00, 0x00], [0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0xc6, 0xc6, 0xee, 0xee, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0xc6, 0xc6, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x78, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdc, 0xdc, 0x7e, 0x7e, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x70, 0x70, 0x3c, 0x3c, 0x0e, 0x0e, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0xee, 0xee, 0xc6, 0xc6, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0xfe, 0xfe, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0xfe, 0xfe, 0x00, 0x00], [0x3c, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x3c, 0x00, 0x00], [0xc0, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03, 0x00, 0x00], [0x3c, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x3c, 0x00, 0x00], [0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe], [0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x3c, 0x3c], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x78, 0x78], [0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xec, 0xec, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60], [0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x06, 0x06], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x00, 0x00], [0x30, 0x30, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1c, 0x1c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0x6c, 0x6c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x00, 0x00], [0x72, 0x72, 0x9c, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0xc3, 0xc3, 0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0x00, 0x00], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe7, 0xe7, 0xdb, 0xdb, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe0, 0xe0, 0xc3, 0xc3, 0xc3, 0xc3, 0x90, 0x90, 0x83, 0x83, 0x33, 0x33, 0x30, 0x30, 0xff, 0xff], [0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xf3, 0xf3, 0xe7, 0xe7], [0xcf, 0xcf, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x09, 0x09, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff], [0x8e, 0x8e, 0x31, 0x31, 0x19, 0x19, 0x09, 0x09, 0x21, 0x21, 0x31, 0x31, 0x39, 0x39, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x3c, 0x3c, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xff, 0xff, 0x39, 0x39, 0x93, 0x93, 0xc7, 0xc7, 0x93, 0x93, 0x39, 0x39, 0xff, 0xff, 0xff, 0xff], [0xc0, 0xc0, 0x99, 0x99, 0x91, 0x91, 0x81, 0x81, 0x89, 0x89, 0x99, 0x99, 0x03, 0x03, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0xdb, 0xdb, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf9, 0xf9, 0xf7, 0xf7, 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x3f, 0x3f, 0x3f, 0x3f, 0x03, 0x03, 0x39, 0x39, 0x03, 0x03, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x9f, 0x9f], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x80], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x0c, 0x3e, 0x3e, 0x6c, 0x6c, 0x3e, 0x3e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00], [0x1c, 0x1c, 0x36, 0x36, 0x30, 0x30, 0x78, 0x78, 0x30, 0x30, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x42, 0x42, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x7e, 0x81, 0x81, 0x9d, 0x9d, 0xb1, 0xb1, 0x9d, 0x9d, 0x81, 0x81, 0x7e, 0x7e, 0x00, 0x00], [0x1c, 0x1c, 0x24, 0x24, 0x44, 0x44, 0x3c, 0x3c, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00], [0x3e, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x7e, 0x81, 0x81, 0xb9, 0xb9, 0xa5, 0xa5, 0xb9, 0xb9, 0xa5, 0xa5, 0x81, 0x81, 0x7e, 0x7e], [0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00], [0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x0c, 0x0c, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x7f, 0x60, 0x60], [0x3e, 0x3e, 0x7a, 0x7a, 0x7a, 0x7a, 0x3a, 0x3a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30], [0x30, 0x30, 0x70, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x38, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00], [0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x32, 0x32, 0x66, 0x66, 0xcf, 0xcf, 0x02, 0x02], [0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x3e, 0x3e, 0x62, 0x62, 0xc4, 0xc4, 0x0e, 0x0e], [0xc0, 0xc0, 0x23, 0x23, 0x66, 0x66, 0x2c, 0x2c, 0xd9, 0xd9, 0x33, 0x33, 0x67, 0x67, 0x01, 0x01], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x1f, 0x1f, 0x3c, 0x3c, 0x3c, 0x3c, 0x6f, 0x6f, 0x7c, 0x7c, 0xcc, 0xcc, 0xcf, 0xcf, 0x00, 0x00], [0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x0c, 0x0c, 0x18, 0x18], [0x30, 0x30, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0xf6, 0xf6, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00], [0x71, 0x71, 0xce, 0xce, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0xc3, 0xc3, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x3f, 0x3f, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0xfc, 0xfc, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x08, 0x08, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xfc, 0xc6, 0xc6, 0xfc, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x60, 0x60], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x1b, 0x1b, 0x7f, 0x7f, 0xd8, 0xd8, 0x77, 0x77, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x18, 0x18], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x60, 0x60, 0xfc, 0xfc, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x02, 0x02, 0x7c, 0x7c, 0xce, 0xce, 0xd6, 0xd6, 0xe6, 0xe6, 0x7c, 0x7c, 0x80, 0x80], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30]]; + this.height = 16; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + return ImageTextModeFontAmiga; + +})(this.ImageTextModeFont); + +this.ImageTextMode = (function() { + ImageTextMode.VERSION = '0.01'; + + function ImageTextMode(options) { + var k, v; + this.screen = []; + this.palette = new ImageTextModePaletteVGA; + this.font = new ImageTextModeFont8x16; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextMode.prototype.parseUrl = function(url) { + var content, req; + req = new XMLHttpRequest; + req.open('GET', url, false); + req.overrideMimeType('text/plain; charset=x-user-defined'); + req.send(null); + content = req.status === 200 || req.status === 0 ? req.responseText : ''; + return this.parse(content); + }; + + ImageTextMode.prototype.unpackShort = function(data) { + var shrt; + shrt = (this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); + if (shrt < 0) { + shrt += 65536; + } + return shrt; + }; + + ImageTextMode.prototype.unpackLong = function(data) { + var lng; + lng = (((this.getByteAt(data, 0) << 8) + this.getByteAt(data, 1) << 8) + this.getByteAt(data, 2) << 8) + this.getByteAt(data, 3); + if (lng < 0) { + lng += 4294967296; + } + return lng; + }; + + ImageTextMode.prototype.getByteAt = function(data, offset) { + return data.charCodeAt(offset) & 0xFF; + }; + + ImageTextMode.prototype.getWidth = function() { + var max, y, _i, _ref; + max = 0; + for (y = _i = 0, _ref = this.screen.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; y = 0 <= _ref ? ++_i : --_i) { + if ((this.screen[y] != null) && this.screen[y].length > max) { + max = this.screen[y].length; } } + return max; + }; - return ImageTextModePaletteVGA; + ImageTextMode.prototype.getHeight = function() { + return this.screen.length; + }; - })(this.ImageTextModePalette); - - this.ImageTextModePaletteANSI = (function(_super) { - __extends(ImageTextModePaletteANSI, _super); - - function ImageTextModePaletteANSI(options) { - var k, v; - ImageTextModePaletteANSI.__super__.constructor.apply(this, arguments); - this.colors = [[0x00, 0x00, 0x00], [0xaa, 0x00, 0x00], [0x00, 0xaa, 0x00], [0xaa, 0x55, 0x00], [0x00, 0x00, 0xaa], [0xaa, 0x00, 0xaa], [0x00, 0xaa, 0xaa], [0xaa, 0xaa, 0xaa], [0x55, 0x55, 0x55], [0xff, 0x55, 0x55], [0x55, 0xff, 0x55], [0xff, 0xff, 0x55], [0x55, 0x55, 0xff], [0xff, 0x55, 0xff], [0x55, 0xff, 0xff], [0xff, 0xff, 0xff]]; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } + ImageTextMode.prototype.parsePaletteData = function(data) { + var b, colors, g, i, r, _i; + colors = []; + for (i = _i = 0; _i <= 45; i = _i += 3) { + r = this.getByteAt(data, i); + r = r << 2 | r >> 4; + g = this.getByteAt(data, i + 1); + g = g << 2 | g >> 4; + b = this.getByteAt(data, i + 2); + b = b << 2 | b >> 4; + colors.push([r, g, b]); } + return this.palette = new ImageTextModePalette({ + colors: colors + }); + }; - return ImageTextModePaletteANSI; - - })(this.ImageTextModePalette); - - this.ImageTextModeFont = (function() { - function ImageTextModeFont(options) { - var k, v; - this.chars = []; - this.width = 8; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } + ImageTextMode.prototype.parseFontData = function(data, height) { + var chars, chr, i, j, _i, _j, _ref, _ref1; + if (height == null) { + height = 16; } - - return ImageTextModeFont; - - })(); - - this.ImageTextModeFont8x16 = (function(_super) { - __extends(ImageTextModeFont8x16, _super); - - function ImageTextModeFont8x16(options) { - var k, v; - ImageTextModeFont8x16.__super__.constructor.apply(this, arguments); - this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00], [0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00], [0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00], [0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00], [0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x70, 0x00, 0x00], [0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x70, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x38, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x36, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00], [0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x18, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00], [0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x66, 0xce, 0x9a, 0x3f, 0x06, 0x06, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44], [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], [0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00], [0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x6c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x3c, 0x66, 0x0c, 0x18, 0x32, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]]; - this.height = 16; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; + chars = []; + for (i = _i = 0, _ref = data.length / height - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { + chr = []; + for (j = _j = 0, _ref1 = height - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; j = 0 <= _ref1 ? ++_j : --_j) { + chr.push(this.getByteAt(data, i * height + j)); } + chars.push(chr); } + return this.font = new ImageTextModeFont({ + chars: chars, + height: height + }); + }; - return ImageTextModeFont8x16; - - })(this.ImageTextModeFont); - - this.ImageTextModeFont8x8 = (function(_super) { - __extends(ImageTextModeFont8x8, _super); - - function ImageTextModeFont8x8(options) { - var k, v; - ImageTextModeFont8x8.__super__.constructor.apply(this, arguments); - this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e], [0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e], [0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00], [0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00], [0x38, 0x7c, 0x38, 0xfe, 0xfe, 0xd6, 0x10, 0x38], [0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x7c, 0x10, 0x38], [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00], [0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff], [0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00], [0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff], [0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78], [0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18], [0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0], [0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0], [0x18, 0xdb, 0x3c, 0xe7, 0xe7, 0x3c, 0xdb, 0x18], [0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00], [0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00], [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18], [0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00], [0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00], [0x3e, 0x61, 0x3c, 0x66, 0x66, 0x3c, 0x86, 0x7c], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00], [0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff], [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00], [0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00], [0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00], [0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00], [0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00], [0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00], [0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00], [0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00], [0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00], [0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00], [0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00], [0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00], [0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00], [0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00], [0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00], [0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00], [0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30], [0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00], [0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00], [0x38, 0x6c, 0xc6, 0xd6, 0xc6, 0x6c, 0x38, 0x00], [0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00], [0x7c, 0xc6, 0x06, 0x1c, 0x30, 0x66, 0xfe, 0x00], [0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00], [0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00], [0xfe, 0xc0, 0xc0, 0xfc, 0x06, 0xc6, 0x7c, 0x00], [0x38, 0x60, 0xc0, 0xfc, 0xc6, 0xc6, 0x7c, 0x00], [0xfe, 0xc6, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00], [0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0x00], [0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00], [0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00], [0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30], [0x06, 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x06, 0x00], [0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00], [0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00], [0x7c, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x00], [0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00], [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00], [0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00], [0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00], [0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00], [0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00], [0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00], [0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3a, 0x00], [0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00], [0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00], [0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00], [0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00], [0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00], [0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00], [0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], [0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xce, 0x7c, 0x0e], [0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00], [0x3c, 0x66, 0x30, 0x18, 0x0c, 0x66, 0x3c, 0x00], [0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x3c, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00], [0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc6, 0x00], [0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x00], [0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00], [0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00], [0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00], [0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00], [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff], [0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0xe0, 0x60, 0x7c, 0x66, 0x66, 0x66, 0xdc, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc6, 0x7c, 0x00], [0x1c, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x3c, 0x66, 0x60, 0xf8, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], [0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00], [0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x06, 0x00, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c], [0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00], [0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0x00], [0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0], [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e], [0x00, 0x00, 0xdc, 0x76, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x7e, 0xc0, 0x7c, 0x06, 0xfc, 0x00], [0x30, 0x30, 0xfc, 0x30, 0x30, 0x36, 0x1c, 0x00], [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00], [0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc], [0x00, 0x00, 0x7e, 0x4c, 0x18, 0x32, 0x7e, 0x00], [0x0e, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0e, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00], [0x70, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x70, 0x00], [0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00], [0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x0c, 0x78], [0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x0c, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x7c, 0x82, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0xc6, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x30, 0x18, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x00, 0x00, 0x7e, 0xc0, 0xc0, 0x7e, 0x0c, 0x38], [0x7c, 0x82, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0xc6, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x30, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x7c, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00], [0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], [0x38, 0x6c, 0x7c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], [0x18, 0x30, 0xfe, 0xc0, 0xf8, 0xc0, 0xfe, 0x00], [0x00, 0x00, 0x7e, 0x18, 0x7e, 0xd8, 0x7e, 0x00], [0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00], [0x7c, 0x82, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x30, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x78, 0x84, 0x00, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x60, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc], [0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18], [0x38, 0x6c, 0x64, 0xf0, 0x60, 0x66, 0xfc, 0x00], [0x66, 0x66, 0x3c, 0x7e, 0x18, 0x7e, 0x18, 0x18], [0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7], [0x0e, 0x1b, 0x18, 0x3c, 0x18, 0xd8, 0x70, 0x00], [0x18, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00], [0x0c, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x18, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x00], [0x76, 0xdc, 0x00, 0xe6, 0xf6, 0xde, 0xce, 0x00], [0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00], [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00], [0x18, 0x00, 0x18, 0x18, 0x30, 0x63, 0x3e, 0x00], [0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0x00, 0x00], [0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x00, 0x00], [0x63, 0xe6, 0x6c, 0x7e, 0x33, 0x66, 0xcc, 0x0f], [0x63, 0xe6, 0x6c, 0x7a, 0x36, 0x6a, 0xdf, 0x06], [0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x00], [0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00], [0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00], [0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88], [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], [0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36], [0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36], [0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00], [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36], [0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36], [0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36], [0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36], [0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], [0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36], [0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00], [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36], [0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff], [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], [0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00], [0x78, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xcc, 0x00], [0xfe, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00], [0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00], [0xfe, 0xc6, 0x60, 0x30, 0x60, 0xc6, 0xfe, 0x00], [0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0xc0], [0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00], [0x7e, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x7e], [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00], [0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00], [0x0e, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x3c, 0x00], [0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00], [0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0], [0x1e, 0x30, 0x60, 0x7e, 0x60, 0x30, 0x1e, 0x00], [0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00], [0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00], [0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x7e, 0x00], [0x30, 0x18, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00], [0x0c, 0x18, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00], [0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70], [0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00], [0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00], [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00], [0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c], [0x6c, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00], [0x78, 0x0c, 0x18, 0x30, 0x7c, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]]; - this.height = 8; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; + ImageTextMode.prototype.renderCanvas = function(canvasElem) { + var bg, canvas, chr, ctx, cx, cy, fg, h, i, j, line, pixel, px, py, w, _i, _j, _k, _l, _ref, _ref1, _ref2, _ref3; + w = this.getWidth() * this.font.width; + h = this.getHeight() * this.font.height; + canvas = document.createElement('canvas'); + canvas.setAttribute('width', w); + canvas.setAttribute('height', h); + ctx = canvas.getContext('2d'); + for (cy = _i = 0, _ref = this.screen.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; cy = 0 <= _ref ? ++_i : --_i) { + if (this.screen[cy] == null) { + continue; } - } - - return ImageTextModeFont8x8; - - })(this.ImageTextModeFont); - - this.ImageTextModeFontAmiga = (function(_super) { - __extends(ImageTextModeFontAmiga, _super); - - function ImageTextModeFontAmiga(options) { - var k, v; - ImageTextModeFontAmiga.__super__.constructor.apply(this, arguments); - this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x83, 0x83, 0x39, 0x39, 0x21, 0x21, 0x29, 0x29, 0x21, 0x21, 0x3f, 0x3f, 0x87, 0x87, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0xff, 0xff], [0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xff, 0xff], [0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff], [0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x9f, 0x9f, 0x91, 0x91, 0x99, 0x99, 0x99, 0x99, 0xc1, 0xc1, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x9c, 0x9c, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x9c, 0x9c, 0xff, 0xff], [0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x9c, 0x9c, 0x88, 0x88, 0x80, 0x80, 0x94, 0x94, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff], [0x9c, 0x9c, 0x8c, 0x8c, 0x84, 0x84, 0x90, 0x90, 0x98, 0x98, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x91, 0x91, 0xc0, 0xc0, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x8f, 0x8f, 0xc3, 0xc3, 0xf1, 0xf1, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x81, 0x81, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xc3, 0xc3, 0xe7, 0xe7, 0xff, 0xff], [0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x94, 0x94, 0x80, 0x80, 0x88, 0x88, 0x9c, 0x9c, 0xff, 0xff], [0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x3c, 0x3c, 0xff, 0xff], [0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x80, 0x80, 0xf9, 0xf9, 0xf3, 0xf3, 0xe7, 0xe7, 0xcf, 0xcf, 0x9f, 0x9f, 0x80, 0x80, 0xff, 0xff], [0xc3, 0xc3, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xc3, 0xc3, 0xff, 0xff], [0x3f, 0x3f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe7, 0xe7, 0xf3, 0xf3, 0xf9, 0xf9, 0xfc, 0xfc, 0xff, 0xff], [0xc3, 0xc3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xc3, 0xc3, 0xff, 0xff], [0xf7, 0xf7, 0xe3, 0xe3, 0xc9, 0xc9, 0x9c, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00], [0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00], [0x18, 0x18, 0x3e, 0x3e, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0xac, 0xac, 0xd8, 0xd8, 0x36, 0x36, 0x6a, 0x6a, 0xcc, 0xcc, 0x00, 0x00], [0x38, 0x38, 0x6c, 0x6c, 0x68, 0x68, 0x76, 0x76, 0xdc, 0xdc, 0xce, 0xce, 0x7b, 0x7b, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x3c, 0x3c, 0xff, 0xff, 0x3c, 0x3c, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x38, 0x38, 0x78, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x1c, 0x1c, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x3c, 0x3c, 0x6c, 0x6c, 0xcc, 0xcc, 0xfe, 0xfe, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x7c, 0x7c, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x30, 0x30, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7e, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x0c, 0x0c, 0x38, 0x38, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00], [0x7c, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xd6, 0xd6, 0xde, 0xde, 0xc0, 0xc0, 0x78, 0x78, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00], [0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x00, 0x00], [0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x60, 0x60, 0x6e, 0x6e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0xc6, 0xc6, 0xcc, 0xcc, 0xd8, 0xd8, 0xf0, 0xf0, 0xd8, 0xd8, 0xcc, 0xcc, 0xc6, 0xc6, 0x00, 0x00], [0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0xc6, 0xc6, 0xee, 0xee, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0xc6, 0xc6, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x78, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdc, 0xdc, 0x7e, 0x7e, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x70, 0x70, 0x3c, 0x3c, 0x0e, 0x0e, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0xee, 0xee, 0xc6, 0xc6, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0xfe, 0xfe, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0xfe, 0xfe, 0x00, 0x00], [0x3c, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x3c, 0x00, 0x00], [0xc0, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03, 0x00, 0x00], [0x3c, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x3c, 0x00, 0x00], [0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe], [0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x3c, 0x3c], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x78, 0x78], [0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xec, 0xec, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60], [0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x06, 0x06], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x00, 0x00], [0x30, 0x30, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1c, 0x1c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0x6c, 0x6c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x00, 0x00], [0x72, 0x72, 0x9c, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0xc3, 0xc3, 0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0x00, 0x00], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe7, 0xe7, 0xdb, 0xdb, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe0, 0xe0, 0xc3, 0xc3, 0xc3, 0xc3, 0x90, 0x90, 0x83, 0x83, 0x33, 0x33, 0x30, 0x30, 0xff, 0xff], [0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xf3, 0xf3, 0xe7, 0xe7], [0xcf, 0xcf, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x09, 0x09, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff], [0x8e, 0x8e, 0x31, 0x31, 0x19, 0x19, 0x09, 0x09, 0x21, 0x21, 0x31, 0x31, 0x39, 0x39, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x3c, 0x3c, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xff, 0xff, 0x39, 0x39, 0x93, 0x93, 0xc7, 0xc7, 0x93, 0x93, 0x39, 0x39, 0xff, 0xff, 0xff, 0xff], [0xc0, 0xc0, 0x99, 0x99, 0x91, 0x91, 0x81, 0x81, 0x89, 0x89, 0x99, 0x99, 0x03, 0x03, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0xdb, 0xdb, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf9, 0xf9, 0xf7, 0xf7, 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x3f, 0x3f, 0x3f, 0x3f, 0x03, 0x03, 0x39, 0x39, 0x03, 0x03, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x9f, 0x9f], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x80], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x0c, 0x3e, 0x3e, 0x6c, 0x6c, 0x3e, 0x3e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00], [0x1c, 0x1c, 0x36, 0x36, 0x30, 0x30, 0x78, 0x78, 0x30, 0x30, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x42, 0x42, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x7e, 0x81, 0x81, 0x9d, 0x9d, 0xb1, 0xb1, 0x9d, 0x9d, 0x81, 0x81, 0x7e, 0x7e, 0x00, 0x00], [0x1c, 0x1c, 0x24, 0x24, 0x44, 0x44, 0x3c, 0x3c, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00], [0x3e, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x7e, 0x81, 0x81, 0xb9, 0xb9, 0xa5, 0xa5, 0xb9, 0xb9, 0xa5, 0xa5, 0x81, 0x81, 0x7e, 0x7e], [0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00], [0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x0c, 0x0c, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x7f, 0x60, 0x60], [0x3e, 0x3e, 0x7a, 0x7a, 0x7a, 0x7a, 0x3a, 0x3a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30], [0x30, 0x30, 0x70, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x38, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00], [0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x32, 0x32, 0x66, 0x66, 0xcf, 0xcf, 0x02, 0x02], [0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x3e, 0x3e, 0x62, 0x62, 0xc4, 0xc4, 0x0e, 0x0e], [0xc0, 0xc0, 0x23, 0x23, 0x66, 0x66, 0x2c, 0x2c, 0xd9, 0xd9, 0x33, 0x33, 0x67, 0x67, 0x01, 0x01], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x1f, 0x1f, 0x3c, 0x3c, 0x3c, 0x3c, 0x6f, 0x6f, 0x7c, 0x7c, 0xcc, 0xcc, 0xcf, 0xcf, 0x00, 0x00], [0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x0c, 0x0c, 0x18, 0x18], [0x30, 0x30, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0xf6, 0xf6, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00], [0x71, 0x71, 0xce, 0xce, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0xc3, 0xc3, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x3f, 0x3f, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0xfc, 0xfc, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x08, 0x08, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xfc, 0xc6, 0xc6, 0xfc, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x60, 0x60], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x1b, 0x1b, 0x7f, 0x7f, 0xd8, 0xd8, 0x77, 0x77, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x18, 0x18], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x60, 0x60, 0xfc, 0xfc, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x02, 0x02, 0x7c, 0x7c, 0xce, 0xce, 0xd6, 0xd6, 0xe6, 0xe6, 0x7c, 0x7c, 0x80, 0x80], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30]]; - this.height = 16; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - return ImageTextModeFontAmiga; - - })(this.ImageTextModeFont); - - this.ImageTextMode = (function() { - ImageTextMode.VERSION = '0.01'; - - function ImageTextMode(options) { - var k, v; - this.screen = []; - this.palette = new ImageTextModePaletteVGA; - this.font = new ImageTextModeFont8x16; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextMode.prototype.parseUrl = function(url) { - var content, req; - req = new XMLHttpRequest; - req.open('GET', url, false); - req.overrideMimeType('text/plain; charset=x-user-defined'); - req.send(null); - content = req.status === 200 || req.status === 0 ? req.responseText : ''; - return this.parse(content); - }; - - ImageTextMode.prototype.unpackShort = function(data) { - var shrt; - shrt = (this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); - if (shrt < 0) { - shrt += 65536; - } - return shrt; - }; - - ImageTextMode.prototype.unpackLong = function(data) { - var lng; - lng = (((this.getByteAt(data, 0) << 8) + this.getByteAt(data, 1) << 8) + this.getByteAt(data, 2) << 8) + this.getByteAt(data, 3); - if (lng < 0) { - lng += 4294967296; - } - return lng; - }; - - ImageTextMode.prototype.getByteAt = function(data, offset) { - return data.charCodeAt(offset) & 0xFF; - }; - - ImageTextMode.prototype.getWidth = function() { - var max, y, _i, _ref; - max = 0; - for (y = _i = 0, _ref = this.screen.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; y = 0 <= _ref ? ++_i : --_i) { - if ((this.screen[y] != null) && this.screen[y].length > max) { - max = this.screen[y].length; - } - } - return max; - }; - - ImageTextMode.prototype.getHeight = function() { - return this.screen.length; - }; - - ImageTextMode.prototype.parsePaletteData = function(data) { - var b, colors, g, i, r, _i; - colors = []; - for (i = _i = 0; _i <= 45; i = _i += 3) { - r = this.getByteAt(data, i); - r = r << 2 | r >> 4; - g = this.getByteAt(data, i + 1); - g = g << 2 | g >> 4; - b = this.getByteAt(data, i + 2); - b = b << 2 | b >> 4; - colors.push([r, g, b]); - } - return this.palette = new ImageTextModePalette({ - colors: colors - }); - }; - - ImageTextMode.prototype.parseFontData = function(data, height) { - var chars, chr, i, j, _i, _j, _ref, _ref1; - if (height == null) { - height = 16; - } - chars = []; - for (i = _i = 0, _ref = data.length / height - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { - chr = []; - for (j = _j = 0, _ref1 = height - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; j = 0 <= _ref1 ? ++_j : --_j) { - chr.push(this.getByteAt(data, i * height + j)); - } - chars.push(chr); - } - return this.font = new ImageTextModeFont({ - chars: chars, - height: height - }); - }; - - ImageTextMode.prototype.renderCanvas = function(canvasElem) { - var bg, canvas, chr, ctx, cx, cy, fg, h, i, j, line, pixel, px, py, w, _i, _j, _k, _l, _ref, _ref1, _ref2, _ref3; - w = this.getWidth() * this.font.width; - h = this.getHeight() * this.font.height; - canvas = document.createElement('canvas'); - canvas.setAttribute('width', w); - canvas.setAttribute('height', h); - ctx = canvas.getContext('2d'); - for (cy = _i = 0, _ref = this.screen.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; cy = 0 <= _ref ? ++_i : --_i) { - if (this.screen[cy] == null) { + for (cx = _j = 0, _ref1 = this.screen[cy].length - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; cx = 0 <= _ref1 ? ++_j : --_j) { + pixel = this.screen[cy][cx]; + if (pixel == null) { continue; } - for (cx = _j = 0, _ref1 = this.screen[cy].length - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; cx = 0 <= _ref1 ? ++_j : --_j) { - pixel = this.screen[cy][cx]; - if (pixel == null) { - continue; - } - if (pixel.attr != null) { - fg = pixel.attr & 15; - bg = (pixel.attr & 240) >> 4; - } else { - fg = pixel.fg; - bg = pixel.bg; - } - px = cx * this.font.width; - py = cy * this.font.height; - ctx.fillStyle = this.palette.toRgbaString(this.palette.colors[bg]); - ctx.fillRect(px, py, this.font.width, this.font.height); - ctx.fillStyle = this.palette.toRgbaString(this.palette.colors[fg]); - chr = this.font.chars[pixel.ch.charCodeAt(0) & 0xff]; - for (i = _k = 0, _ref2 = this.font.height - 1; 0 <= _ref2 ? _k <= _ref2 : _k >= _ref2; i = 0 <= _ref2 ? ++_k : --_k) { - line = chr[i]; - for (j = _l = 0, _ref3 = this.font.width - 1; 0 <= _ref3 ? _l <= _ref3 : _l >= _ref3; j = 0 <= _ref3 ? ++_l : --_l) { - if (line & (1 << this.font.width - 1 - j)) { - ctx.fillRect(px + j, py + i, 1, 1); - } + if (pixel.attr != null) { + fg = pixel.attr & 15; + bg = (pixel.attr & 240) >> 4; + } else { + fg = pixel.fg; + bg = pixel.bg; + } + px = cx * this.font.width; + py = cy * this.font.height; + ctx.fillStyle = this.palette.toRgbaString(this.palette.colors[bg]); + ctx.fillRect(px, py, this.font.width, this.font.height); + ctx.fillStyle = this.palette.toRgbaString(this.palette.colors[fg]); + chr = this.font.chars[pixel.ch.charCodeAt(0) & 0xff]; + for (i = _k = 0, _ref2 = this.font.height - 1; 0 <= _ref2 ? _k <= _ref2 : _k >= _ref2; i = 0 <= _ref2 ? ++_k : --_k) { + line = chr[i]; + for (j = _l = 0, _ref3 = this.font.width - 1; 0 <= _ref3 ? _l <= _ref3 : _l >= _ref3; j = 0 <= _ref3 ? ++_l : --_l) { + if (line & (1 << this.font.width - 1 - j)) { + ctx.fillRect(px + j, py + i, 1, 1); } } } } - canvasElem.setAttribute('width', w); - canvasElem.setAttribute('height', h); - ctx = canvasElem.getContext('2d'); - return ctx.drawImage(canvas, 0, 0); - }; - - ImageTextMode.prototype.toBinaryArray = function(str) { - var buf, bufView, i, strLen; - buf = new ArrayBuffer(str.length * 2); - bufView = new Uint8Array(buf); - i = 0; - strLen = str.length; - while (i < strLen) { - bufView[i] = str.charCodeAt(i); - i++; - } - return buf; - }; - - return ImageTextMode; - - })(); - - this.ImageTextModeXBin = (function(_super) { - var ATTRIBUTE_COMPRESSION, CHARACTER_COMPRESSION, COMPRESSED, COMPRESSION_COUNTER, COMPRESSION_TYPE, FIVETWELVE_CHARS, FONT, FULL_COMPRESSION, NON_BLINK, NO_COMPRESSION, PALETTE; - - __extends(ImageTextModeXBin, _super); - - PALETTE = 1; - - FONT = 2; - - COMPRESSED = 4; - - NON_BLINK = 8; - - FIVETWELVE_CHARS = 16; - - NO_COMPRESSION = 0; - - CHARACTER_COMPRESSION = 64; - - ATTRIBUTE_COMPRESSION = 128; - - FULL_COMPRESSION = 192; - - COMPRESSION_TYPE = 192; - - COMPRESSION_COUNTER = 63; - - function ImageTextModeXBin(options) { - var k, v; - ImageTextModeXBin.__super__.constructor.apply(this, arguments); - this.header = { - width: 0, - height: 0, - fontisze: 0, - flags: 0 - }; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } } + canvasElem.setAttribute('width', w); + canvasElem.setAttribute('height', h); + ctx = canvasElem.getContext('2d'); + return ctx.drawImage(canvas, 0, 0); + }; - ImageTextModeXBin.prototype.parse = function(content) { - var fontlength, headerData, offset; - this.screen = []; - headerData = content.substr(0, 11); - if (headerData.length === !11 || !headerData.match('^XBIN\x1a')) { - throw new Error('File is not an XBin'); - } - this.header.width = this.unpackShort(headerData.substr(5, 2)); - this.header.height = this.unpackShort(headerData.substr(7, 2)); - this.header.fontsize = this.getByteAt(headerData.substr(9, 1)); - this.header.flags = this.getByteAt(headerData.substr(10, 1)); - offset = 11; - if (this.header.flags & PALETTE) { - this.parsePaletteData(content.substr(offset, 48)); - offset += 48; - } - if (this.header.flags & FONT) { - fontlength = this.header.fontsize; - if (this.header.flags & FIVETWELVE_CHARS) { - fontlength *= 512; - } else { - fontlength *= 256; - } - this.parseFontData(content.substr(offset, fontlength), this.header.fontsize); - offset += fontlength; - } - if (this.header.flags & COMPRESSED) { - return this._parse_compressed(content.substr(offset)); - } else { - return this._parse_uncompressed(content.substr(offset)); - } + ImageTextMode.prototype.toBinaryArray = function(str) { + var buf, bufView, i, strLen; + buf = new ArrayBuffer(str.length * 2); + bufView = new Uint8Array(buf); + i = 0; + strLen = str.length; + while (i < strLen) { + bufView[i] = str.charCodeAt(i); + i++; + } + return buf; + }; + + return ImageTextMode; + +})(); + +this.ImageTextModeXBin = (function(_super) { + var ATTRIBUTE_COMPRESSION, CHARACTER_COMPRESSION, COMPRESSED, COMPRESSION_COUNTER, COMPRESSION_TYPE, FIVETWELVE_CHARS, FONT, FULL_COMPRESSION, NON_BLINK, NO_COMPRESSION, PALETTE; + + __extends(ImageTextModeXBin, _super); + + PALETTE = 1; + + FONT = 2; + + COMPRESSED = 4; + + NON_BLINK = 8; + + FIVETWELVE_CHARS = 16; + + NO_COMPRESSION = 0; + + CHARACTER_COMPRESSION = 64; + + ATTRIBUTE_COMPRESSION = 128; + + FULL_COMPRESSION = 192; + + COMPRESSION_TYPE = 192; + + COMPRESSION_COUNTER = 63; + + function ImageTextModeXBin(options) { + var k, v; + ImageTextModeXBin.__super__.constructor.apply(this, arguments); + this.header = { + width: 0, + height: 0, + fontisze: 0, + flags: 0 }; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } - ImageTextModeXBin.prototype._parse_compressed = function(data) { - var attr, ch, counter, info, type, x, y, _results; - x = 0; - y = 0; - this.screen[y] = []; - data = data.split(''); - _results = []; - while (info = data.shift()) { - info = this.getByteAt(info, 0); - if (info === 26) { - break; - } - type = info & COMPRESSION_TYPE; - counter = (info & COMPRESSION_COUNTER) + 1; - ch = null; - attr = null; - _results.push((function() { - var _results1; - _results1 = []; - while (counter-- > 0) { - switch (type) { - case NO_COMPRESSION: + ImageTextModeXBin.prototype.parse = function(content) { + var fontlength, headerData, offset; + this.screen = []; + headerData = content.substr(0, 11); + if (headerData.length === !11 || !headerData.match('^XBIN\x1a')) { + throw new Error('File is not an XBin'); + } + this.header.width = this.unpackShort(headerData.substr(5, 2)); + this.header.height = this.unpackShort(headerData.substr(7, 2)); + this.header.fontsize = this.getByteAt(headerData.substr(9, 1)); + this.header.flags = this.getByteAt(headerData.substr(10, 1)); + offset = 11; + if (this.header.flags & PALETTE) { + this.parsePaletteData(content.substr(offset, 48)); + offset += 48; + } + if (this.header.flags & FONT) { + fontlength = this.header.fontsize; + if (this.header.flags & FIVETWELVE_CHARS) { + fontlength *= 512; + } else { + fontlength *= 256; + } + this.parseFontData(content.substr(offset, fontlength), this.header.fontsize); + offset += fontlength; + } + if (this.header.flags & COMPRESSED) { + return this._parse_compressed(content.substr(offset)); + } else { + return this._parse_uncompressed(content.substr(offset)); + } + }; + + ImageTextModeXBin.prototype._parse_compressed = function(data) { + var attr, ch, counter, info, type, x, y, _results; + x = 0; + y = 0; + this.screen[y] = []; + data = data.split(''); + _results = []; + while (info = data.shift()) { + info = this.getByteAt(info, 0); + if (info === 26) { + break; + } + type = info & COMPRESSION_TYPE; + counter = (info & COMPRESSION_COUNTER) + 1; + ch = null; + attr = null; + _results.push((function() { + var _results1; + _results1 = []; + while (counter-- > 0) { + switch (type) { + case NO_COMPRESSION: + ch = data.shift(); + attr = data.shift(); + break; + case CHARACTER_COMPRESSION: + if (ch == null) { ch = data.shift(); + } + attr = data.shift(); + break; + case ATTRIBUTE_COMPRESSION: + if (attr == null) { attr = data.shift(); - break; - case CHARACTER_COMPRESSION: - if (ch == null) { - ch = data.shift(); - } - attr = data.shift(); - break; - case ATTRIBUTE_COMPRESSION: - if (attr == null) { - attr = data.shift(); - } + } + ch = data.shift(); + break; + default: + if (ch == null) { ch = data.shift(); - break; - default: - if (ch == null) { - ch = data.shift(); - } - if (attr == null) { - attr = data.shift(); - } + } + if (attr == null) { + attr = data.shift(); + } + } + this.screen[y][x] = { + ch: ch, + attr: this.getByteAt(attr, 0) + }; + x++; + if (x === this.header.width) { + x = 0; + y++; + if (y === this.header.height) { + break; } - this.screen[y][x] = { - ch: ch, - attr: this.getByteAt(attr, 0) - }; - x++; - if (x === this.header.width) { - x = 0; - y++; - if (y === this.header.height) { - break; - } - if (this.screen[y] == null) { - _results1.push(this.screen[y] = []); - } else { - _results1.push(void 0); - } + if (this.screen[y] == null) { + _results1.push(this.screen[y] = []); } else { _results1.push(void 0); } + } else { + _results1.push(void 0); } - return _results1; - }).call(this)); - } - return _results; - }; + } + return _results1; + }).call(this)); + } + return _results; + }; - ImageTextModeXBin.prototype._parse_uncompressed = function(data) { - var attr, ch, i, x, y, _i, _ref, _results; - x = 0; - y = 0; - this.screen[y] = []; - _results = []; - for (i = _i = 0, _ref = data.length - 2; _i <= _ref; i = _i += 2) { - ch = data.substr(i, 1); - if (ch === "\x1a") { + ImageTextModeXBin.prototype._parse_uncompressed = function(data) { + var attr, ch, i, x, y, _i, _ref, _results; + x = 0; + y = 0; + this.screen[y] = []; + _results = []; + for (i = _i = 0, _ref = data.length - 2; _i <= _ref; i = _i += 2) { + ch = data.substr(i, 1); + if (ch === "\x1a") { + break; + } + attr = this.getByteAt(data, i + 1); + this.screen[y][x] = { + 'ch': ch, + 'attr': attr + }; + x++; + if (x === this.header.width) { + x = 0; + y++; + if (y === this.header.height) { break; } - attr = this.getByteAt(data, i + 1); - this.screen[y][x] = { - 'ch': ch, - 'attr': attr - }; - x++; - if (x === this.header.width) { - x = 0; - y++; - if (y === this.header.height) { - break; - } - if (this.screen[y] == null) { - _results.push(this.screen[y] = []); - } else { - _results.push(void 0); - } + if (this.screen[y] == null) { + _results.push(this.screen[y] = []); } else { _results.push(void 0); } - } - return _results; - }; - - ImageTextModeXBin.prototype.getWidth = function() { - return this.header.width; - }; - - ImageTextModeXBin.prototype.getHeight = function() { - return this.header.height; - }; - - return ImageTextModeXBin; - - })(this.ImageTextMode); - - this.ImageTextModeANSI = (function(_super) { - var ANSI_BG, ANSI_BG_INTENSE, ANSI_CSI, ANSI_CUR_DOWN, ANSI_ESC, ANSI_FG, ANSI_FG_INTENSE, ANSI_RESET, ANSI_RETURN, ANSI_SEP, ANSI_TEXT_PROP; - - __extends(ImageTextModeANSI, _super); - - ANSI_ESC = String.fromCharCode(0x1b); - - ANSI_CSI = ANSI_ESC + '['; - - ANSI_TEXT_PROP = 'm'; - - ANSI_RESET = '0'; - - ANSI_FG = '3'; - - ANSI_BG = '4'; - - ANSI_FG_INTENSE = '9'; - - ANSI_BG_INTENSE = '10'; - - ANSI_CUR_DOWN = 'B'; - - ANSI_SEP = ';'; - - ANSI_RETURN = 'A'; - - function ImageTextModeANSI(options) { - var k, v; - ImageTextModeANSI.__super__.constructor.apply(this, arguments); - this.palette = new ImageTextModePaletteANSI; - this.tabstop = 8; - this.linewrap = 80; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; + } else { + _results.push(void 0); } } + return _results; + }; - ImageTextModeANSI.prototype.write = function() { - var attr, content, max_x, pixel, prevattr, x, y, _i, _j, _ref, _ref1; - content = "" + ANSI_CSI + "2J"; - for (y = _i = 0, _ref = this.screen.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; y = 0 <= _ref ? ++_i : --_i) { - if (this.screen[y] == null) { - content += "\n"; - } - if (this.screen[y] == null) { - continue; - } - for (x = _j = 0, _ref1 = this.getWidth() - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; x = 0 <= _ref1 ? ++_j : --_j) { - pixel = this.screen[y][x]; - if (pixel == null) { - pixel = { - ch: ' ', - attr: 7 - }; - } - attr = this.gen_args(pixel.attr); - if (attr !== prevattr) { - content += "" + ANSI_CSI + "0;" + attr + ANSI_TEXT_PROP; - prevattr = attr; - } - content += pixel.ch != null ? pixel.ch : ' '; - max_x = x; - } + ImageTextModeXBin.prototype.getWidth = function() { + return this.header.width; + }; + + ImageTextModeXBin.prototype.getHeight = function() { + return this.header.height; + }; + + return ImageTextModeXBin; + +})(this.ImageTextMode); + +this.ImageTextModeANSI = (function(_super) { + var ANSI_BG, ANSI_BG_INTENSE, ANSI_CSI, ANSI_CUR_DOWN, ANSI_ESC, ANSI_FG, ANSI_FG_INTENSE, ANSI_RESET, ANSI_RETURN, ANSI_SEP, ANSI_TEXT_PROP; + + __extends(ImageTextModeANSI, _super); + + ANSI_ESC = String.fromCharCode(0x1b); + + ANSI_CSI = ANSI_ESC + '['; + + ANSI_TEXT_PROP = 'm'; + + ANSI_RESET = '0'; + + ANSI_FG = '3'; + + ANSI_BG = '4'; + + ANSI_FG_INTENSE = '9'; + + ANSI_BG_INTENSE = '10'; + + ANSI_CUR_DOWN = 'B'; + + ANSI_SEP = ';'; + + ANSI_RETURN = 'A'; + + function ImageTextModeANSI(options) { + var k, v; + ImageTextModeANSI.__super__.constructor.apply(this, arguments); + this.palette = new ImageTextModePaletteANSI; + this.tabstop = 8; + this.linewrap = 80; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextModeANSI.prototype.write = function() { + var attr, content, max_x, pixel, prevattr, x, y, _i, _j, _ref, _ref1; + content = "" + ANSI_CSI + "2J"; + for (y = _i = 0, _ref = this.screen.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; y = 0 <= _ref ? ++_i : --_i) { + if (this.screen[y] == null) { + content += "\n"; } - content += "" + ANSI_CSI + "0m"; - return this.toBinaryArray(content); - }; - - ImageTextModeANSI.prototype.gen_args = function(attr) { - var a, attrs, bg, bl, fg, intense, _i, _len, _ref; - fg = 30 + (attr & 7); - bg = 40 + ((attr & 112) >> 4); - bl = attr & 128 ? 5 : ''; - intense = attr & 8 ? 1 : ''; - _ref = [fg, bg, bl, intense]; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - a = _ref[_i]; - if (a !== '') { - attrs = a; - } + if (this.screen[y] == null) { + continue; } - return [fg, bg, bl, intense].join(";"); - }; + for (x = _j = 0, _ref1 = this.getWidth() - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; x = 0 <= _ref1 ? ++_j : --_j) { + pixel = this.screen[y][x]; + if (pixel == null) { + pixel = { + ch: ' ', + attr: 7 + }; + } + attr = this.gen_args(pixel.attr); + if (attr !== prevattr) { + content += "" + ANSI_CSI + "0;" + attr + ANSI_TEXT_PROP; + prevattr = attr; + } + content += pixel.ch != null ? pixel.ch : ' '; + max_x = x; + } + } + content += "" + ANSI_CSI + "0m"; + return this.toBinaryArray(content); + }; - ImageTextModeANSI.prototype.parse = function(content) { - var arg, args, ch, i, _i, _j, _k, _l, _len, _m, _n, _o, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _results; - this.screen = []; - this.state = 0; - this.x = 0; - this.y = 0; - this.save_x = 0; - this.save_y = 0; - this.attr = 7; - this.argbuf = ''; - content = content.split(''); - _results = []; - while (ch = content.shift()) { - if (this.state === 0) { - switch (ch) { - case "\x1a": - _results.push(this.state = 3); - break; - case "\x1b": - _results.push(this.state = 1); - break; - case "\n": - this.x = 0; - _results.push(this.y++); - break; - case "\r": - break; - case "\t": - i = (this.x + 1) % this.tabstop; - _results.push((function() { - var _results1; - _results1 = []; - while (i-- > 0) { - _results1.push(this.putpixel(' ')); - } - return _results1; - }).call(this)); - break; - default: - _results.push(this.putpixel(ch)); - } - } else if (this.state === 1) { - if (ch !== "[") { - this.putpixel("\x1b"); - this.putpixel("["); - _results.push(this.state = 0); - } else { - _results.push(this.state = 2); - } - } else if (this.state === 2) { - if (ch.match('[A-Za-z]')) { - args = (function() { - var _i, _len, _ref, _results1; - _ref = this.argbuf.split(';'); + ImageTextModeANSI.prototype.gen_args = function(attr) { + var a, attrs, bg, bl, fg, intense, _i, _len, _ref; + fg = 30 + (attr & 7); + bg = 40 + ((attr & 112) >> 4); + bl = attr & 128 ? 5 : ''; + intense = attr & 8 ? 1 : ''; + _ref = [fg, bg, bl, intense]; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + a = _ref[_i]; + if (a !== '') { + attrs = a; + } + } + return [fg, bg, bl, intense].join(";"); + }; + + ImageTextModeANSI.prototype.parse = function(content) { + var arg, args, ch, i, _i, _j, _k, _l, _len, _m, _n, _o, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _results; + this.screen = []; + this.state = 0; + this.x = 0; + this.y = 0; + this.save_x = 0; + this.save_y = 0; + this.attr = 7; + this.argbuf = ''; + content = content.split(''); + _results = []; + while (ch = content.shift()) { + if (this.state === 0) { + switch (ch) { + case "\x1a": + _results.push(this.state = 3); + break; + case "\x1b": + _results.push(this.state = 1); + break; + case "\n": + this.x = 0; + _results.push(this.y++); + break; + case "\r": + break; + case "\t": + i = (this.x + 1) % this.tabstop; + _results.push((function() { + var _results1; _results1 = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - i = _ref[_i]; - _results1.push(parseInt(i)); + while (i-- > 0) { + _results1.push(this.putpixel(' ')); } return _results1; - }).call(this); - switch (ch) { - case "m": - for (_i = 0, _len = args.length; _i < _len; _i++) { - arg = args[_i]; - if (arg === 0) { - this.attr = 7; - } else if (arg === 1) { - this.attr |= 8; - } else if (arg === 5) { - this.attr |= 128; - } else if ((30 <= arg && arg <= 37)) { - this.attr &= 248; - this.attr |= arg - 30; - } else if ((40 <= arg && arg <= 47)) { - this.attr &= 143; - this.attr |= (arg - 40) << 4; - } - } - break; - case "H": - case "f": - this.y = (args[0] || 1) - 1; - this.x = (args[1] || 1) - 1; - if (this.y < 0) { - this.y = 0; - } - if (this.x < 0) { - this.x = 0; - } - break; - case "A": - this.y -= args[0] || 1; - if (this.y < 0) { - this.y = 0; - } - break; - case "B": - this.y += args[0] || 1; - break; - case "C": - this.x += args[0] || 1; - break; - case "D": - this.x -= args[0] || 1; - if (this.x < 0) { - this.x = 0; - } - break; - case "E": - this.y += args[0] || 1; - this.x = 0; - break; - case "F": - this.y -= args[0] || 1; - if (this.y > 0) { - this.y = 0; - } - this.x = 0; - break; - case "G": - this.x = (args[0] || 1) - 1; - break; - case "s": - this.save_x = this.x; - this.save_y = this.y; - break; - case "u": - this.x = this.save_x; - this.y = this.save_y; - break; - case "J": - if (args.length === 0 || args[0] === 0) { - for (i = _j = _ref = this.y + 1, _ref1 = screen.length - 1; _ref <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = _ref <= _ref1 ? ++_j : --_j) { - this.screen[i] = null; - } - for (i = _k = _ref2 = this.x, _ref3 = screen[this.y].length - 1; _ref2 <= _ref3 ? _k <= _ref3 : _k >= _ref3; i = _ref2 <= _ref3 ? ++_k : --_k) { - this.screen[this.y][i] = null; - } - } else if (args[0] === 1) { - for (i = _l = 0, _ref4 = this.y - 1; 0 <= _ref4 ? _l <= _ref4 : _l >= _ref4; i = 0 <= _ref4 ? ++_l : --_l) { - this.screen[i] = null; - } - for (i = _m = 0, _ref5 = this.x; 0 <= _ref5 ? _m <= _ref5 : _m >= _ref5; i = 0 <= _ref5 ? ++_m : --_m) { - this.screen[this.y][i] = null; - } - } else if (args[0] === 2) { - this.x = 0; - this.y = 0; - this.screen = []; - } - break; - case "K": - if (args.length === 0 || args[0] === 0) { - for (i = _n = _ref6 = this.x, _ref7 = this.screen[this.y].length - 1; _ref6 <= _ref7 ? _n <= _ref7 : _n >= _ref7; i = _ref6 <= _ref7 ? ++_n : --_n) { - this.screen[this.y][i] = null; - } - } else if (args[0] === 1) { - for (i = _o = 0, _ref8 = this.x; 0 <= _ref8 ? _o <= _ref8 : _o >= _ref8; i = 0 <= _ref8 ? ++_o : --_o) { - this.screen[this.y][i] = null; - } - } else if (args[0] === 2) { - this.screen[this.y] = null; - } - } - this.argbuf = ''; - _results.push(this.state = 0); - } else { - _results.push(this.argbuf += ch); - } - } else if (this.state === 3) { - break; - } else { + }).call(this)); + break; + default: + _results.push(this.putpixel(ch)); + } + } else if (this.state === 1) { + if (ch !== "[") { + this.putpixel("\x1b"); + this.putpixel("["); _results.push(this.state = 0); + } else { + _results.push(this.state = 2); } - } - return _results; - }; - - ImageTextModeANSI.prototype.putpixel = function(ch) { - if (this.screen[this.y] == null) { - this.screen[this.y] = []; - } - this.screen[this.y][this.x] = { - ch: ch, - attr: this.attr - }; - if (++this.x >= this.linewrap) { - this.x = 0; - return this.y++; - } - }; - - return ImageTextModeANSI; - - })(this.ImageTextMode); - - this.ImageTextModeBin = (function(_super) { - __extends(ImageTextModeBin, _super); - - function ImageTextModeBin(options) { - var k, v; - ImageTextModeBin.__super__.constructor.apply(this, arguments); - this.linewrap = 160; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextModeBin.prototype.parse = function(content) { - var attr, ch, i, x, y, _i, _ref; - x = 0; - y = 0; - this.screen[y] = []; - for (i = _i = 0, _ref = content.length - 2; _i <= _ref; i = _i += 2) { - ch = content.substr(i, 1); - if (ch === "\x1a") { - break; - } - attr = this.getByteAt(content, i + 1); - this.screen[y][x] = { - 'ch': ch, - 'attr': attr - }; - x++; - if (x === this.linewrap) { - x = 0; - y++; - this.screen[y] = []; - } - } - if (this.screen[y].length === 0) { - return this.screen.pop(); - } - }; - - return ImageTextModeBin; - - })(this.ImageTextMode); - - this.ImageTextModeIDF = (function(_super) { - __extends(ImageTextModeIDF, _super); - - function ImageTextModeIDF(options) { - var k, v; - ImageTextModeIDF.__super__.constructor.apply(this, arguments); - this.header = { - x0: 0, - x1: 0, - y0: 0, - y1: 0 - }; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextModeIDF.prototype.parse = function(content) { - var attr, buffer, ch, eodata, headerData, i, info, len, offset, x, y, _i; - headerData = content.substr(0, 12); - if (headerData.length === !12 || !headerData.match('^\x041.4')) { - throw new Error('File is not an IDF'); - } - this.header.x0 = this.unpackShort(headerData.substr(4, 2)); - this.header.y0 = this.unpackShort(headerData.substr(6, 2)); - this.header.x1 = this.unpackShort(headerData.substr(8, 2)); - this.header.y1 = this.unpackShort(headerData.substr(10, 2)); - eodata = content.length - 48 - 4096; - if (content.substr(content.length - 128, 5) === 'SAUCE') { - eodata -= 128; - } - this.parseFontData(content.substr(eodata, 4096)); - this.parsePaletteData(content.substr(eodata + 4096, 48)); - y = 0; - x = 0; - this.screen[y] = []; - offset = 12; - while (offset < eodata) { - buffer = content.substr(offset, 2); - info = this.unpackShort(buffer); - offset += 2; - len = 1; - if (info === 1) { - len = this.unpackShort(content.substr(offset, 2)) & 255; - offset += 2; - buffer = content.substr(offset, 2); - offset += 2; - } - ch = buffer.substr(0, 1); - attr = this.getByteAt(buffer, 1); - for (i = _i = 1; 1 <= len ? _i <= len : _i >= len; i = 1 <= len ? ++_i : --_i) { - this.screen[y][x] = { - 'ch': ch, - 'attr': attr - }; - x++; - if (x > this.header.x1) { - x = 0; - y++; - this.screen[y] = []; - } - } - } - if (this.screen[y].length === 0) { - return this.screen.pop(); - } - }; - - return ImageTextModeIDF; - - })(this.ImageTextMode); - - this.ImageTextModeADF = (function(_super) { - var COLOR_INDEX; - - __extends(ImageTextModeADF, _super); - - COLOR_INDEX = [0, 1, 2, 3, 4, 5, 20, 7, 56, 57, 58, 59, 60, 61, 62, 63]; - - function ImageTextModeADF(options) { - var k, v; - ImageTextModeADF.__super__.constructor.apply(this, arguments); - this.header = { - version: 0 - }; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextModeADF.prototype.parse = function(content) { - var attr, ch, i, x, y, _i, _ref; - this.header.version = this.getByteAt(content, 0); - this.parsePaletteData(content.substr(1, 192)); - this.parseFontData(content.substr(193, 4096)); - x = 0; - y = 0; - this.screen[y] = []; - for (i = _i = 4289, _ref = content.length - 2; _i <= _ref; i = _i += 2) { - ch = content.substr(i, 1); - if (ch === "\x1a") { - break; - } - attr = this.getByteAt(content, i + 1); - this.screen[y][x] = { - 'ch': ch, - 'attr': attr - }; - x++; - if (x === 80) { - x = 0; - y++; - this.screen[y] = []; - } - } - if (this.screen[y].length === 0) { - return this.screen.pop(); - } - }; - - ImageTextModeADF.prototype.parsePaletteData = function(data) { - var b, colors, g, i, j, r, _i, _len; - colors = []; - for (_i = 0, _len = COLOR_INDEX.length; _i < _len; _i++) { - i = COLOR_INDEX[_i]; - j = i * 3; - r = this.getByteAt(data, j); - r = r << 2 | r >> 4; - g = this.getByteAt(data, j + 1); - g = g << 2 | g >> 4; - b = this.getByteAt(data, j + 2); - b = b << 2 | b >> 4; - colors.push([r, g, b]); - } - return this.palette = new ImageTextModePalette({ - colors: colors - }); - }; - - return ImageTextModeADF; - - })(this.ImageTextMode); - - this.ImageTextModeTundra = (function(_super) { - __extends(ImageTextModeTundra, _super); - - function ImageTextModeTundra(options) { - var k, v; - ImageTextModeTundra.__super__.constructor.apply(this, arguments); - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextModeTundra.prototype.parse = function(content) { - var bg, ch, colors, command, fg, palidx, rgb, x, y, _i; - colors = [[0, 0, 0]]; - palidx = 1; - x = 0; - y = 0; - fg = 0; - bg = 0; - this.screen[y] = []; - content = content.substr(8).split(''); - while (command = content.shift()) { - if (command === "\x1a") { - break; - } - command = command.charCodeAt(0); - if (command === 1) { - y = this.unpackLong(content.splice(0, 4).join('')); - x = this.unpackLong(content.splice(0, 4).join('')); - if (this.screen[y] == null) { - this.screen[y] = []; - } - continue; - } - ch = null; - if (command === 2) { - ch = content.shift(); - rgb = this.unpackLong(content.splice(0, 4).join('')); - fg = palidx++; - colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]); - } else if (command === 4) { - ch = content.shift(); - rgb = this.unpackLong(content.splice(0, 4).join('')); - bg = palidx++; - colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]); - } else if (command === 6) { - ch = content.shift(); - fg = palidx++; - bg = palidx++; - for (_i = 0; _i <= 1; _i++) { - rgb = this.unpackLong(content.splice(0, 4).join('')); - colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]); - } - } - if (ch == null) { - ch = String.fromCharCode(command); - } - this.screen[y][x] = { - 'ch': ch, - 'fg': fg, - 'bg': bg - }; - x++; - if (x === 80) { - x = 0; - y++; - this.screen[y] = []; - } - } - if (this.screen[y].length === 0) { - this.screen.pop(); - } - return this.palette = new ImageTextModePalette({ - colors: colors - }); - }; - - return ImageTextModeTundra; - - })(this.ImageTextMode); - - this.ImageTextModePCBoard = (function(_super) { - __extends(ImageTextModePCBoard, _super); - - function ImageTextModePCBoard(options) { - var k, v; - ImageTextModePCBoard.__super__.constructor.apply(this, arguments); - this.tabstop = 8; - this.linewrap = 80; - this.codes = { - POFF: '', - WAIT: '' - }; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextModePCBoard.prototype.parse = function(content) { - var ch, code, i, key, val, _i, _j, _ref, _results; - this.screen = []; - this.state = 0; - this.x = 0; - this.y = 0; - this.attr = 7; - _ref = this.codes; - for (key in _ref) { - val = _ref[key]; - code = new RegExp('@' + key + '@', 'g'); - content.replace(code, val); - } - content = content.split(''); - _results = []; - while (ch = content.shift()) { - if (this.state === 0) { + } else if (this.state === 2) { + if (ch.match('[A-Za-z]')) { + args = (function() { + var _i, _len, _ref, _results1; + _ref = this.argbuf.split(';'); + _results1 = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + i = _ref[_i]; + _results1.push(parseInt(i)); + } + return _results1; + }).call(this); switch (ch) { - case "\x1a": - _results.push(this.state = 2); - break; - case '@': - _results.push(this.state = 1); - break; - case "\n": - this.x = 0; - _results.push(this.y++); - break; - case "\r": - break; - case "\t": - i = (this.x + 1) % this.tabstop; - _results.push((function() { - var _results1; - _results1 = []; - while (i-- > 0) { - _results1.push(this.putpixel(' ')); + case "m": + for (_i = 0, _len = args.length; _i < _len; _i++) { + arg = args[_i]; + if (arg === 0) { + this.attr = 7; + } else if (arg === 1) { + this.attr |= 8; + } else if (arg === 5) { + this.attr |= 128; + } else if ((30 <= arg && arg <= 37)) { + this.attr &= 248; + this.attr |= arg - 30; + } else if ((40 <= arg && arg <= 47)) { + this.attr &= 143; + this.attr |= (arg - 40) << 4; } - return _results1; - }).call(this)); - break; - default: - _results.push(this.putpixel(ch)); - } - } else if (this.state === 1) { - if (ch === 'X') { - this.attr = (parseInt(content.shift(), 16) << 4) + parseInt(content.shift(), 16); - } else if (ch + content.slice(0, 3).join('') === 'CLS@') { - for (_i = 1; _i <= 3; _i++) { - content.shift(); - } - this.screen = []; - } else if (ch + content.slice(0, 3).join('') === 'POS:') { - for (_j = 1; _j <= 3; _j++) { - content.shift(); - } - this.x = content.shift(); - if (content[0] === !'@') { - this.x += content.shift(); - } - this.x--; - content.shift(); - } else { - this.putpixel('@'); - this.putpixel(ch); - } - _results.push(this.state = 0); - } else if (this.state === 2) { - break; - } else { - _results.push(this.state = 0); - } - } - return _results; - }; - - ImageTextModePCBoard.prototype.putpixel = function(ch) { - if (this.screen[this.y] == null) { - this.screen[this.y] = []; - } - this.screen[this.y][this.x] = { - ch: ch, - attr: this.attr - }; - if (++this.x >= this.linewrap) { - this.x = 0; - return this.y++; - } - }; - - return ImageTextModePCBoard; - - })(this.ImageTextMode); - - this.ImageTextModeAVATAR = (function(_super) { - __extends(ImageTextModeAVATAR, _super); - - function ImageTextModeAVATAR(options) { - var k, v; - ImageTextModeAVATAR.__super__.constructor.apply(this, arguments); - this.tabstop = 8; - this.linewrap = 80; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextModeAVATAR.prototype.parse = function(content) { - var c, ch, i, _results; - this.screen = []; - this.x = 0; - this.y = 0; - this.attr = 3; - content = content.split(''); - _results = []; - while (ch = content.shift()) { - if (ch === "\x1a") { - break; - } else if (ch === "\n") { - this.x = 0; - _results.push(this.y++); - } else if (ch === "\r") { - continue; - } else if (ch === "\t") { - i = (this.x + 1) % this.tabstop; - _results.push((function() { - var _results1; - _results1 = []; - while (i-- > 0) { - _results1.push(this.putpixel(' ')); - } - return _results1; - }).call(this)); - } else if (ch.charCodeAt(0) === 12) { - this.screen = []; - this.attr = 3; - _results.push(this.insert = false); - } else if (ch.charCodeAt(0) === 25) { - ch = content.shift(); - i = content.shift().charCodeAt(0); - _results.push((function() { - var _results1; - _results1 = []; - while (i-- > 0) { - _results1.push(this.putpixel(ch)); - } - return _results1; - }).call(this)); - } else if (ch.charCodeAt(0) === 22) { - c = content.shift().charCodeAt(0); - switch (c) { - case 1: - _results.push(this.attr = content.shift().charCodeAt(0) & 0x7f); - break; - case 2: - _results.push(this.attr |= 0x80); - break; - case 3: - this.y--; - if (this.y < 0) { - _results.push(this.y = 0); - } else { - _results.push(void 0); } break; - case 4: - _results.push(this.y++); - break; - case 5: - this.x--; - if (this.x < 0) { - _results.push(this.x = 0); - } else { - _results.push(void 0); - } - break; - case 6: - _results.push(this.x++); - break; - case 7: - _results.push((function() { - var _i, _ref, _ref1, _results1; - _results1 = []; - for (i = _i = _ref = this.x, _ref1 = screen[this.y].length - 1; _ref <= _ref1 ? _i <= _ref1 : _i >= _ref1; i = _ref <= _ref1 ? ++_i : --_i) { - _results1.push(this.screen[this.y][i] = null); - } - return _results1; - }).call(this)); - break; - case 8: - this.y = content.shift().charCodeAt(0) - 1; - this.x = content.shift().charCodeAt(0) - 1; + case "H": + case "f": + this.y = (args[0] || 1) - 1; + this.x = (args[1] || 1) - 1; if (this.y < 0) { this.y = 0; } if (this.x < 0) { - _results.push(this.x = 0); - } else { - _results.push(void 0); + this.x = 0; } break; - default: - _results.push(void 0); + case "A": + this.y -= args[0] || 1; + if (this.y < 0) { + this.y = 0; + } + break; + case "B": + this.y += args[0] || 1; + break; + case "C": + this.x += args[0] || 1; + break; + case "D": + this.x -= args[0] || 1; + if (this.x < 0) { + this.x = 0; + } + break; + case "E": + this.y += args[0] || 1; + this.x = 0; + break; + case "F": + this.y -= args[0] || 1; + if (this.y > 0) { + this.y = 0; + } + this.x = 0; + break; + case "G": + this.x = (args[0] || 1) - 1; + break; + case "s": + this.save_x = this.x; + this.save_y = this.y; + break; + case "u": + this.x = this.save_x; + this.y = this.save_y; + break; + case "J": + if (args.length === 0 || args[0] === 0) { + for (i = _j = _ref = this.y + 1, _ref1 = screen.length - 1; _ref <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = _ref <= _ref1 ? ++_j : --_j) { + this.screen[i] = null; + } + for (i = _k = _ref2 = this.x, _ref3 = screen[this.y].length - 1; _ref2 <= _ref3 ? _k <= _ref3 : _k >= _ref3; i = _ref2 <= _ref3 ? ++_k : --_k) { + this.screen[this.y][i] = null; + } + } else if (args[0] === 1) { + for (i = _l = 0, _ref4 = this.y - 1; 0 <= _ref4 ? _l <= _ref4 : _l >= _ref4; i = 0 <= _ref4 ? ++_l : --_l) { + this.screen[i] = null; + } + for (i = _m = 0, _ref5 = this.x; 0 <= _ref5 ? _m <= _ref5 : _m >= _ref5; i = 0 <= _ref5 ? ++_m : --_m) { + this.screen[this.y][i] = null; + } + } else if (args[0] === 2) { + this.x = 0; + this.y = 0; + this.screen = []; + } + break; + case "K": + if (args.length === 0 || args[0] === 0) { + for (i = _n = _ref6 = this.x, _ref7 = this.screen[this.y].length - 1; _ref6 <= _ref7 ? _n <= _ref7 : _n >= _ref7; i = _ref6 <= _ref7 ? ++_n : --_n) { + this.screen[this.y][i] = null; + } + } else if (args[0] === 1) { + for (i = _o = 0, _ref8 = this.x; 0 <= _ref8 ? _o <= _ref8 : _o >= _ref8; i = 0 <= _ref8 ? ++_o : --_o) { + this.screen[this.y][i] = null; + } + } else if (args[0] === 2) { + this.screen[this.y] = null; + } } + this.argbuf = ''; + _results.push(this.state = 0); } else { - _results.push(this.putpixel(ch)); + _results.push(this.argbuf += ch); + } + } else if (this.state === 3) { + break; + } else { + _results.push(this.state = 0); + } + } + return _results; + }; + + ImageTextModeANSI.prototype.putpixel = function(ch) { + if (this.screen[this.y] == null) { + this.screen[this.y] = []; + } + this.screen[this.y][this.x] = { + ch: ch, + attr: this.attr + }; + if (++this.x >= this.linewrap) { + this.x = 0; + return this.y++; + } + }; + + return ImageTextModeANSI; + +})(this.ImageTextMode); + +this.ImageTextModeBin = (function(_super) { + __extends(ImageTextModeBin, _super); + + function ImageTextModeBin(options) { + var k, v; + ImageTextModeBin.__super__.constructor.apply(this, arguments); + this.linewrap = 160; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextModeBin.prototype.parse = function(content) { + var attr, ch, i, x, y, _i, _ref; + x = 0; + y = 0; + this.screen[y] = []; + for (i = _i = 0, _ref = content.length - 2; _i <= _ref; i = _i += 2) { + ch = content.substr(i, 1); + if (ch === "\x1a") { + break; + } + attr = this.getByteAt(content, i + 1); + this.screen[y][x] = { + 'ch': ch, + 'attr': attr + }; + x++; + if (x === this.linewrap) { + x = 0; + y++; + this.screen[y] = []; + } + } + if (this.screen[y].length === 0) { + return this.screen.pop(); + } + }; + + return ImageTextModeBin; + +})(this.ImageTextMode); + +this.ImageTextModeIDF = (function(_super) { + __extends(ImageTextModeIDF, _super); + + function ImageTextModeIDF(options) { + var k, v; + ImageTextModeIDF.__super__.constructor.apply(this, arguments); + this.header = { + x0: 0, + x1: 0, + y0: 0, + y1: 0 + }; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextModeIDF.prototype.parse = function(content) { + var attr, buffer, ch, eodata, headerData, i, info, len, offset, x, y, _i; + headerData = content.substr(0, 12); + if (headerData.length === !12 || !headerData.match('^\x041.4')) { + throw new Error('File is not an IDF'); + } + this.header.x0 = this.unpackShort(headerData.substr(4, 2)); + this.header.y0 = this.unpackShort(headerData.substr(6, 2)); + this.header.x1 = this.unpackShort(headerData.substr(8, 2)); + this.header.y1 = this.unpackShort(headerData.substr(10, 2)); + eodata = content.length - 48 - 4096; + if (content.substr(content.length - 128, 5) === 'SAUCE') { + eodata -= 128; + } + this.parseFontData(content.substr(eodata, 4096)); + this.parsePaletteData(content.substr(eodata + 4096, 48)); + y = 0; + x = 0; + this.screen[y] = []; + offset = 12; + while (offset < eodata) { + buffer = content.substr(offset, 2); + info = this.unpackShort(buffer); + offset += 2; + len = 1; + if (info === 1) { + len = this.unpackShort(content.substr(offset, 2)) & 255; + offset += 2; + buffer = content.substr(offset, 2); + offset += 2; + } + ch = buffer.substr(0, 1); + attr = this.getByteAt(buffer, 1); + for (i = _i = 1; 1 <= len ? _i <= len : _i >= len; i = 1 <= len ? ++_i : --_i) { + this.screen[y][x] = { + 'ch': ch, + 'attr': attr + }; + x++; + if (x > this.header.x1) { + x = 0; + y++; + this.screen[y] = []; } } - return _results; - }; + } + if (this.screen[y].length === 0) { + return this.screen.pop(); + } + }; - ImageTextModeAVATAR.prototype.putpixel = function(ch) { - if (this.screen[this.y] == null) { - this.screen[this.y] = []; + return ImageTextModeIDF; + +})(this.ImageTextMode); + +this.ImageTextModeADF = (function(_super) { + var COLOR_INDEX; + + __extends(ImageTextModeADF, _super); + + COLOR_INDEX = [0, 1, 2, 3, 4, 5, 20, 7, 56, 57, 58, 59, 60, 61, 62, 63]; + + function ImageTextModeADF(options) { + var k, v; + ImageTextModeADF.__super__.constructor.apply(this, arguments); + this.header = { + version: 0 + }; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextModeADF.prototype.parse = function(content) { + var attr, ch, i, x, y, _i, _ref; + this.header.version = this.getByteAt(content, 0); + this.parsePaletteData(content.substr(1, 192)); + this.parseFontData(content.substr(193, 4096)); + x = 0; + y = 0; + this.screen[y] = []; + for (i = _i = 4289, _ref = content.length - 2; _i <= _ref; i = _i += 2) { + ch = content.substr(i, 1); + if (ch === "\x1a") { + break; } - this.screen[this.y][this.x] = { - ch: ch, - attr: this.attr + attr = this.getByteAt(content, i + 1); + this.screen[y][x] = { + 'ch': ch, + 'attr': attr }; - if (++this.x >= this.linewrap) { - this.x = 0; - return this.y++; + x++; + if (x === 80) { + x = 0; + y++; + this.screen[y] = []; } + } + if (this.screen[y].length === 0) { + return this.screen.pop(); + } + }; + + ImageTextModeADF.prototype.parsePaletteData = function(data) { + var b, colors, g, i, j, r, _i, _len; + colors = []; + for (_i = 0, _len = COLOR_INDEX.length; _i < _len; _i++) { + i = COLOR_INDEX[_i]; + j = i * 3; + r = this.getByteAt(data, j); + r = r << 2 | r >> 4; + g = this.getByteAt(data, j + 1); + g = g << 2 | g >> 4; + b = this.getByteAt(data, j + 2); + b = b << 2 | b >> 4; + colors.push([r, g, b]); + } + return this.palette = new ImageTextModePalette({ + colors: colors + }); + }; + + return ImageTextModeADF; + +})(this.ImageTextMode); + +this.ImageTextModeTundra = (function(_super) { + __extends(ImageTextModeTundra, _super); + + function ImageTextModeTundra(options) { + var k, v; + ImageTextModeTundra.__super__.constructor.apply(this, arguments); + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextModeTundra.prototype.parse = function(content) { + var bg, ch, colors, command, fg, palidx, rgb, x, y, _i; + colors = [[0, 0, 0]]; + palidx = 1; + x = 0; + y = 0; + fg = 0; + bg = 0; + this.screen[y] = []; + content = content.substr(8).split(''); + while (command = content.shift()) { + if (command === "\x1a") { + break; + } + command = command.charCodeAt(0); + if (command === 1) { + y = this.unpackLong(content.splice(0, 4).join('')); + x = this.unpackLong(content.splice(0, 4).join('')); + if (this.screen[y] == null) { + this.screen[y] = []; + } + continue; + } + ch = null; + if (command === 2) { + ch = content.shift(); + rgb = this.unpackLong(content.splice(0, 4).join('')); + fg = palidx++; + colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]); + } else if (command === 4) { + ch = content.shift(); + rgb = this.unpackLong(content.splice(0, 4).join('')); + bg = palidx++; + colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]); + } else if (command === 6) { + ch = content.shift(); + fg = palidx++; + bg = palidx++; + for (_i = 0; _i <= 1; _i++) { + rgb = this.unpackLong(content.splice(0, 4).join('')); + colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]); + } + } + if (ch == null) { + ch = String.fromCharCode(command); + } + this.screen[y][x] = { + 'ch': ch, + 'fg': fg, + 'bg': bg + }; + x++; + if (x === 80) { + x = 0; + y++; + this.screen[y] = []; + } + } + if (this.screen[y].length === 0) { + this.screen.pop(); + } + return this.palette = new ImageTextModePalette({ + colors: colors + }); + }; + + return ImageTextModeTundra; + +})(this.ImageTextMode); + +this.ImageTextModePCBoard = (function(_super) { + __extends(ImageTextModePCBoard, _super); + + function ImageTextModePCBoard(options) { + var k, v; + ImageTextModePCBoard.__super__.constructor.apply(this, arguments); + this.tabstop = 8; + this.linewrap = 80; + this.codes = { + POFF: '', + WAIT: '' }; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } - return ImageTextModeAVATAR; + ImageTextModePCBoard.prototype.parse = function(content) { + var ch, code, i, key, val, _i, _j, _ref, _results; + this.screen = []; + this.state = 0; + this.x = 0; + this.y = 0; + this.attr = 7; + _ref = this.codes; + for (key in _ref) { + val = _ref[key]; + code = new RegExp('@' + key + '@', 'g'); + content.replace(code, val); + } + content = content.split(''); + _results = []; + while (ch = content.shift()) { + if (this.state === 0) { + switch (ch) { + case "\x1a": + _results.push(this.state = 2); + break; + case '@': + _results.push(this.state = 1); + break; + case "\n": + this.x = 0; + _results.push(this.y++); + break; + case "\r": + break; + case "\t": + i = (this.x + 1) % this.tabstop; + _results.push((function() { + var _results1; + _results1 = []; + while (i-- > 0) { + _results1.push(this.putpixel(' ')); + } + return _results1; + }).call(this)); + break; + default: + _results.push(this.putpixel(ch)); + } + } else if (this.state === 1) { + if (ch === 'X') { + this.attr = (parseInt(content.shift(), 16) << 4) + parseInt(content.shift(), 16); + } else if (ch + content.slice(0, 3).join('') === 'CLS@') { + for (_i = 1; _i <= 3; _i++) { + content.shift(); + } + this.screen = []; + } else if (ch + content.slice(0, 3).join('') === 'POS:') { + for (_j = 1; _j <= 3; _j++) { + content.shift(); + } + this.x = content.shift(); + if (content[0] === !'@') { + this.x += content.shift(); + } + this.x--; + content.shift(); + } else { + this.putpixel('@'); + this.putpixel(ch); + } + _results.push(this.state = 0); + } else if (this.state === 2) { + break; + } else { + _results.push(this.state = 0); + } + } + return _results; + }; - })(this.ImageTextMode); + ImageTextModePCBoard.prototype.putpixel = function(ch) { + if (this.screen[this.y] == null) { + this.screen[this.y] = []; + } + this.screen[this.y][this.x] = { + ch: ch, + attr: this.attr + }; + if (++this.x >= this.linewrap) { + this.x = 0; + return this.y++; + } + }; -}).call(this); + return ImageTextModePCBoard; + +})(this.ImageTextMode); + +this.ImageTextModeAVATAR = (function(_super) { + __extends(ImageTextModeAVATAR, _super); + + function ImageTextModeAVATAR(options) { + var k, v; + ImageTextModeAVATAR.__super__.constructor.apply(this, arguments); + this.tabstop = 8; + this.linewrap = 80; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextModeAVATAR.prototype.parse = function(content) { + var c, ch, i, _results; + this.screen = []; + this.x = 0; + this.y = 0; + this.attr = 3; + content = content.split(''); + _results = []; + while (ch = content.shift()) { + if (ch === "\x1a") { + break; + } else if (ch === "\n") { + this.x = 0; + _results.push(this.y++); + } else if (ch === "\r") { + continue; + } else if (ch === "\t") { + i = (this.x + 1) % this.tabstop; + _results.push((function() { + var _results1; + _results1 = []; + while (i-- > 0) { + _results1.push(this.putpixel(' ')); + } + return _results1; + }).call(this)); + } else if (ch.charCodeAt(0) === 12) { + this.screen = []; + this.attr = 3; + _results.push(this.insert = false); + } else if (ch.charCodeAt(0) === 25) { + ch = content.shift(); + i = content.shift().charCodeAt(0); + _results.push((function() { + var _results1; + _results1 = []; + while (i-- > 0) { + _results1.push(this.putpixel(ch)); + } + return _results1; + }).call(this)); + } else if (ch.charCodeAt(0) === 22) { + c = content.shift().charCodeAt(0); + switch (c) { + case 1: + _results.push(this.attr = content.shift().charCodeAt(0) & 0x7f); + break; + case 2: + _results.push(this.attr |= 0x80); + break; + case 3: + this.y--; + if (this.y < 0) { + _results.push(this.y = 0); + } else { + _results.push(void 0); + } + break; + case 4: + _results.push(this.y++); + break; + case 5: + this.x--; + if (this.x < 0) { + _results.push(this.x = 0); + } else { + _results.push(void 0); + } + break; + case 6: + _results.push(this.x++); + break; + case 7: + _results.push((function() { + var _i, _ref, _ref1, _results1; + _results1 = []; + for (i = _i = _ref = this.x, _ref1 = screen[this.y].length - 1; _ref <= _ref1 ? _i <= _ref1 : _i >= _ref1; i = _ref <= _ref1 ? ++_i : --_i) { + _results1.push(this.screen[this.y][i] = null); + } + return _results1; + }).call(this)); + break; + case 8: + this.y = content.shift().charCodeAt(0) - 1; + this.x = content.shift().charCodeAt(0) - 1; + if (this.y < 0) { + this.y = 0; + } + if (this.x < 0) { + _results.push(this.x = 0); + } else { + _results.push(void 0); + } + break; + default: + _results.push(void 0); + } + } else { + _results.push(this.putpixel(ch)); + } + } + return _results; + }; + + ImageTextModeAVATAR.prototype.putpixel = function(ch) { + if (this.screen[this.y] == null) { + this.screen[this.y] = []; + } + this.screen[this.y][this.x] = { + ch: ch, + attr: this.attr + }; + if (++this.x >= this.linewrap) { + this.x = 0; + return this.y++; + } + }; + + return ImageTextModeAVATAR; + +})(this.ImageTextMode); From a6c928396edd5dc1f2487fb1b0756d09c0e77ee8 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Thu, 26 Sep 2013 17:17:06 +0300 Subject: [PATCH 002/108] add the coffeescript file, use to generate the js. --- textmode.coffee | 1650 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1650 insertions(+) create mode 100644 textmode.coffee diff --git a/textmode.coffee b/textmode.coffee new file mode 100644 index 0000000..26bf065 --- /dev/null +++ b/textmode.coffee @@ -0,0 +1,1650 @@ +class @ImageTextModeSAUCE + + parseUrl: ( url ) -> + req = new XMLHttpRequest() + req.open 'GET', url, false + req.overrideMimeType 'text/plain; charset=x-user-defined' + req.send null + content = if req.status is 200 or req.status is 0 then req.responseText else '' + @parse content + + parse: ( content ) -> + sauceMarker = content.length - 128; + return false if content.substr( sauceMarker, 5 ) is not 'SAUCE' + @id = 'SAUCE' + @version = content.substr( sauceMarker + 5, 2 ) + @title = content.substr( sauceMarker + 7, 35 ) + @author = content.substr( sauceMarker + 42, 20 ) + @group = content.substr( sauceMarker + 62, 20 ) + @date = content.substr( sauceMarker + 82, 8 ) + @fileSize = @unpackLong content.substr( sauceMarker + 90, 4 ) + @dataType = @getByteAt content.substr( sauceMarker + 94, 1 ) + @fileType = @getByteAt content.substr( sauceMarker + 95, 1 ) + @tinfo1 = @unpackShort content.substr( sauceMarker + 96, 2 ) + @tinfo2 = @unpackShort content.substr( sauceMarker + 98, 2 ) + @tinfo3 = @unpackShort content.substr( sauceMarker + 100, 2 ) + @tinfo4 = @unpackShort content.substr( sauceMarker + 102, 2 ) + @commentCount = @getByteAt content.substr( sauceMarker + 104, 1 ) + @flags = @getByteAt content.substr( sauceMarker + 105, 1 ) + @filler = content.substr( sauceMarker + 106, 22 ) + + commentMarker = sauceMarker - 5 - @commentCount * 64 + if @commentCount > 0 and content.substr( commentMarker, 5 ) is 'COMNT' + commentMarker += 5 + @comments = [] + i = @commentCount + while i-- > 0 + @comments.push content.substr( commentMarker, 64 ) + commentMarker += 64 + + return true + + unpackLong: ( data ) -> + lng = ((( @getByteAt( data, 3 ) << 8 ) + @getByteAt( data, 2 ) << 8 ) + @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 0 ) + if lng < 0 + lng += 4294967296 + return lng; + + unpackShort: ( data ) -> + shrt = ( @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 0 ) + if shrt < 0 + shrt += 65536 + return shrt + + getByteAt: ( data, offset ) -> + return data.charCodeAt( offset ) & 0xFF + +class @ImageTextModePalette + + constructor: ( options ) -> + @colors = [] + this[k] = v for own k, v of options + + toRgbaString: ( color ) -> + return 'rgba(' + color.join( ',' ) + ',1)'; + +class @ImageTextModePaletteVGA extends @ImageTextModePalette + + constructor: ( options ) -> + super @colors = [ + [ 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xaa ], + [ 0x00, 0xaa, 0x00 ], + [ 0x00, 0xaa, 0xaa ], + [ 0xaa, 0x00, 0x00 ], + [ 0xaa, 0x00, 0xaa ], + [ 0xaa, 0x55, 0x00 ], + [ 0xaa, 0xaa, 0xaa ], + [ 0x55, 0x55, 0x55 ], + [ 0x55, 0x55, 0xff ], + [ 0x55, 0xff, 0x55 ], + [ 0x55, 0xff, 0xff ], + [ 0xff, 0x55, 0x55 ], + [ 0xff, 0x55, 0xff ], + [ 0xff, 0xff, 0x55 ], + [ 0xff, 0xff, 0xff ] + ] + this[k] = v for own k, v of options + +class @ImageTextModePaletteANSI extends @ImageTextModePalette + + constructor: ( options ) -> + super + @colors = [ + [ 0x00, 0x00, 0x00 ], + [ 0xaa, 0x00, 0x00 ], + [ 0x00, 0xaa, 0x00 ], + [ 0xaa, 0x55, 0x00 ], + [ 0x00, 0x00, 0xaa ], + [ 0xaa, 0x00, 0xaa ], + [ 0x00, 0xaa, 0xaa ], + [ 0xaa, 0xaa, 0xaa ], + [ 0x55, 0x55, 0x55 ], + [ 0xff, 0x55, 0x55 ], + [ 0x55, 0xff, 0x55 ], + [ 0xff, 0xff, 0x55 ], + [ 0x55, 0x55, 0xff ], + [ 0xff, 0x55, 0xff ], + [ 0x55, 0xff, 0xff ], + [ 0xff, 0xff, 0xff ] + ] + this[k] = v for own k, v of options + +class @ImageTextModeFont + + constructor: ( options ) -> + @chars = [] + @width = 8 + this[k] = v for own k, v of options + +class @ImageTextModeFont8x16 extends @ImageTextModeFont + + constructor: ( options ) -> + super + @chars = [ + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff ], + [ 0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00 ], + [ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00 ], + [ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00 ], + [ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x70, 0x00, 0x00 ], + [ 0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x70, 0x00, 0x00 ], + [ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x38, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x36, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00 ], + [ 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x18, 0x18, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 ], + [ 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00 ], + [ 0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x66, 0xce, 0x9a, 0x3f, 0x06, 0x06, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44 ], + [ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa ], + [ 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ], + [ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0 ], + [ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f ], + [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x6c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x3c, 0x66, 0x0c, 0x18, 0x32, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ] + ] + @height = 16 + this[k] = v for own k, v of options + +class @ImageTextModeFont8x8 extends @ImageTextModeFont + + constructor: ( options ) -> + super + @chars = [ + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e ], + [ 0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e ], + [ 0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00 ], + [ 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00 ], + [ 0x38, 0x7c, 0x38, 0xfe, 0xfe, 0xd6, 0x10, 0x38 ], + [ 0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x7c, 0x10, 0x38 ], + [ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00 ], + [ 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff ], + [ 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00 ], + [ 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff ], + [ 0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78 ], + [ 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18 ], + [ 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0 ], + [ 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0 ], + [ 0x18, 0xdb, 0x3c, 0xe7, 0xe7, 0x3c, 0xdb, 0x18 ], + [ 0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00 ], + [ 0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00 ], + [ 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18 ], + [ 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00 ], + [ 0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00 ], + [ 0x3e, 0x61, 0x3c, 0x66, 0x66, 0x3c, 0x86, 0x7c ], + [ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00 ], + [ 0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff ], + [ 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00 ], + [ 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00 ], + [ 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00 ], + [ 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00 ], + [ 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00 ], + [ 0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00 ], + [ 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00 ], + [ 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00 ], + [ 0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00 ], + [ 0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00 ], + [ 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00 ], + [ 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00 ], + [ 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00 ], + [ 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30 ], + [ 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00 ], + [ 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00 ], + [ 0x38, 0x6c, 0xc6, 0xd6, 0xc6, 0x6c, 0x38, 0x00 ], + [ 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00 ], + [ 0x7c, 0xc6, 0x06, 0x1c, 0x30, 0x66, 0xfe, 0x00 ], + [ 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00 ], + [ 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00 ], + [ 0xfe, 0xc0, 0xc0, 0xfc, 0x06, 0xc6, 0x7c, 0x00 ], + [ 0x38, 0x60, 0xc0, 0xfc, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0xfe, 0xc6, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00 ], + [ 0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00 ], + [ 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00 ], + [ 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30 ], + [ 0x06, 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x06, 0x00 ], + [ 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00 ], + [ 0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00 ], + [ 0x7c, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x00 ], + [ 0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00 ], + [ 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00 ], + [ 0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00 ], + [ 0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00 ], + [ 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00 ], + [ 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00 ], + [ 0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00 ], + [ 0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3a, 0x00 ], + [ 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00 ], + [ 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00 ], + [ 0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00 ], + [ 0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00 ], + [ 0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00 ], + [ 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00 ], + [ 0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00 ], + [ 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00 ], + [ 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xce, 0x7c, 0x0e ], + [ 0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00 ], + [ 0x3c, 0x66, 0x30, 0x18, 0x0c, 0x66, 0x3c, 0x00 ], + [ 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x3c, 0x00 ], + [ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00 ], + [ 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00 ], + [ 0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc6, 0x00 ], + [ 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x00 ], + [ 0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00 ], + [ 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00 ], + [ 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00 ], + [ 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00 ], + [ 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff ], + [ 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ], + [ 0xe0, 0x60, 0x7c, 0x66, 0x66, 0x66, 0xdc, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc6, 0x7c, 0x00 ], + [ 0x1c, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ], + [ 0x3c, 0x66, 0x60, 0xf8, 0x60, 0x60, 0xf0, 0x00 ], + [ 0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8 ], + [ 0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00 ], + [ 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00 ], + [ 0x06, 0x00, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c ], + [ 0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00 ], + [ 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00 ], + [ 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0x00 ], + [ 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0 ], + [ 0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e ], + [ 0x00, 0x00, 0xdc, 0x76, 0x60, 0x60, 0xf0, 0x00 ], + [ 0x00, 0x00, 0x7e, 0xc0, 0x7c, 0x06, 0xfc, 0x00 ], + [ 0x30, 0x30, 0xfc, 0x30, 0x30, 0x36, 0x1c, 0x00 ], + [ 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00 ], + [ 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc ], + [ 0x00, 0x00, 0x7e, 0x4c, 0x18, 0x32, 0x7e, 0x00 ], + [ 0x0e, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0e, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00 ], + [ 0x70, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x70, 0x00 ], + [ 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00 ], + [ 0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x0c, 0x78 ], + [ 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ], + [ 0x0c, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ], + [ 0x7c, 0x82, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ], + [ 0xc6, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ], + [ 0x30, 0x18, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ], + [ 0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ], + [ 0x00, 0x00, 0x7e, 0xc0, 0xc0, 0x7e, 0x0c, 0x38 ], + [ 0x7c, 0x82, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ], + [ 0xc6, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ], + [ 0x30, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ], + [ 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00 ], + [ 0x7c, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00 ], + [ 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00 ], + [ 0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00 ], + [ 0x38, 0x6c, 0x7c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00 ], + [ 0x18, 0x30, 0xfe, 0xc0, 0xf8, 0xc0, 0xfe, 0x00 ], + [ 0x00, 0x00, 0x7e, 0x18, 0x7e, 0xd8, 0x7e, 0x00 ], + [ 0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00 ], + [ 0x7c, 0x82, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0x30, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0x78, 0x84, 0x00, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ], + [ 0x60, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ], + [ 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc ], + [ 0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x00 ], + [ 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18 ], + [ 0x38, 0x6c, 0x64, 0xf0, 0x60, 0x66, 0xfc, 0x00 ], + [ 0x66, 0x66, 0x3c, 0x7e, 0x18, 0x7e, 0x18, 0x18 ], + [ 0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7 ], + [ 0x0e, 0x1b, 0x18, 0x3c, 0x18, 0xd8, 0x70, 0x00 ], + [ 0x18, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ], + [ 0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00 ], + [ 0x0c, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0x18, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ], + [ 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x00 ], + [ 0x76, 0xdc, 0x00, 0xe6, 0xf6, 0xde, 0xce, 0x00 ], + [ 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00 ], + [ 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00 ], + [ 0x18, 0x00, 0x18, 0x18, 0x30, 0x63, 0x3e, 0x00 ], + [ 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x00, 0x00 ], + [ 0x63, 0xe6, 0x6c, 0x7e, 0x33, 0x66, 0xcc, 0x0f ], + [ 0x63, 0xe6, 0x6c, 0x7a, 0x36, 0x6a, 0xdf, 0x06 ], + [ 0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x00 ], + [ 0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00 ], + [ 0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00 ], + [ 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88 ], + [ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa ], + [ 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18 ], + [ 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18 ], + [ 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00 ], + [ 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18 ], + [ 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18 ], + [ 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00 ], + [ 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36 ], + [ 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00 ], + [ 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18 ], + [ 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36 ], + [ 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18 ], + [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ], + [ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff ], + [ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0 ], + [ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f ], + [ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00 ], + [ 0x78, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xcc, 0x00 ], + [ 0xfe, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00 ], + [ 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00 ], + [ 0xfe, 0xc6, 0x60, 0x30, 0x60, 0xc6, 0xfe, 0x00 ], + [ 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0xc0 ], + [ 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00 ], + [ 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x7e ], + [ 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00 ], + [ 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00 ], + [ 0x0e, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x3c, 0x00 ], + [ 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00 ], + [ 0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0 ], + [ 0x1e, 0x30, 0x60, 0x7e, 0x60, 0x30, 0x1e, 0x00 ], + [ 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00 ], + [ 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00 ], + [ 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x7e, 0x00 ], + [ 0x30, 0x18, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00 ], + [ 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00 ], + [ 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70 ], + [ 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00 ], + [ 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00 ], + [ 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c ], + [ 0x6c, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00 ], + [ 0x78, 0x0c, 0x18, 0x30, 0x7c, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ] + ] + @height = 8 + this[k] = v for own k, v of options + +class @ImageTextModeFontAmiga extends @ImageTextModeFont + + constructor: ( options ) -> + super + @chars = [ + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x83, 0x83, 0x39, 0x39, 0x21, 0x21, 0x29, 0x29, 0x21, 0x21, 0x3f, 0x3f, 0x87, 0x87, 0xff, 0xff ], + [ 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0xff, 0xff ], + [ 0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xff, 0xff ], + [ 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff ], + [ 0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ], + [ 0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff ], + [ 0xc3, 0xc3, 0x99, 0x99, 0x9f, 0x9f, 0x91, 0x91, 0x99, 0x99, 0x99, 0x99, 0xc1, 0xc1, 0xff, 0xff ], + [ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x9c, 0x9c, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x9c, 0x9c, 0xff, 0xff ], + [ 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ], + [ 0x9c, 0x9c, 0x88, 0x88, 0x80, 0x80, 0x94, 0x94, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff ], + [ 0x9c, 0x9c, 0x8c, 0x8c, 0x84, 0x84, 0x90, 0x90, 0x98, 0x98, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff ], + [ 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff ], + [ 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x91, 0x91, 0xc0, 0xc0, 0xff, 0xff ], + [ 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0xc3, 0xc3, 0x99, 0x99, 0x8f, 0x8f, 0xc3, 0xc3, 0xf1, 0xf1, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x81, 0x81, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff ], + [ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xc3, 0xc3, 0xe7, 0xe7, 0xff, 0xff ], + [ 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x94, 0x94, 0x80, 0x80, 0x88, 0x88, 0x9c, 0x9c, 0xff, 0xff ], + [ 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x3c, 0x3c, 0xff, 0xff ], + [ 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff ], + [ 0x80, 0x80, 0xf9, 0xf9, 0xf3, 0xf3, 0xe7, 0xe7, 0xcf, 0xcf, 0x9f, 0x9f, 0x80, 0x80, 0xff, 0xff ], + [ 0xc3, 0xc3, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x3f, 0x3f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe7, 0xe7, 0xf3, 0xf3, 0xf9, 0xf9, 0xfc, 0xfc, 0xff, 0xff ], + [ 0xc3, 0xc3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xf7, 0xf7, 0xe3, 0xe3, 0xc9, 0xc9, 0x9c, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00 ], + [ 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x3e, 0x3e, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x18, 0x18, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0xac, 0xac, 0xd8, 0xd8, 0x36, 0x36, 0x6a, 0x6a, 0xcc, 0xcc, 0x00, 0x00 ], + [ 0x38, 0x38, 0x6c, 0x6c, 0x68, 0x68, 0x76, 0x76, 0xdc, 0xdc, 0xce, 0xce, 0x7b, 0x7b, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x3c, 0x3c, 0xff, 0xff, 0x3c, 0x3c, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x38, 0x38, 0x78, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x1c, 0x1c, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x1c, 0x1c, 0x3c, 0x3c, 0x6c, 0x6c, 0xcc, 0xcc, 0xfe, 0xfe, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x7e, 0x7e, 0x60, 0x60, 0x7c, 0x7c, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x1c, 0x1c, 0x30, 0x30, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x7e, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x0c, 0x0c, 0x38, 0x38, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30 ], + [ 0x00, 0x00, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00 ], + [ 0x7c, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xd6, 0xd6, 0xde, 0xde, 0xc0, 0xc0, 0x78, 0x78, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00 ], + [ 0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x00, 0x00 ], + [ 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00 ], + [ 0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x60, 0x60, 0x6e, 0x6e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0xc6, 0xc6, 0xcc, 0xcc, 0xd8, 0xd8, 0xf0, 0xf0, 0xd8, 0xd8, 0xcc, 0xcc, 0xc6, 0xc6, 0x00, 0x00 ], + [ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0xc6, 0xc6, 0xee, 0xee, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00 ], + [ 0xc6, 0xc6, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00 ], + [ 0x78, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdc, 0xdc, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x70, 0x70, 0x3c, 0x3c, 0x0e, 0x0e, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00 ], + [ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0xee, 0xee, 0xc6, 0xc6, 0x00, 0x00 ], + [ 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00 ], + [ 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0xfe, 0xfe, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0xfe, 0xfe, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0xc0, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe ], + [ 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x06, 0x06, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x1c, 0x1c, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x3c, 0x3c ], + [ 0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x78, 0x78 ], + [ 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xec, 0xec, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x06, 0x06 ], + [ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x00, 0x00 ], + [ 0x30, 0x30, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1c, 0x1c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0x6c, 0x6c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30 ], + [ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x00, 0x00 ], + [ 0x72, 0x72, 0x9c, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0xc3, 0xc3, 0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0x00, 0x00 ], + [ 0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0xe7, 0xe7, 0xdb, 0xdb, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0xe0, 0xe0, 0xc3, 0xc3, 0xc3, 0xc3, 0x90, 0x90, 0x83, 0x83, 0x33, 0x33, 0x30, 0x30, 0xff, 0xff ], + [ 0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xf3, 0xf3, 0xe7, 0xe7 ], + [ 0xcf, 0xcf, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ], + [ 0xf3, 0xf3, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ], + [ 0xe7, 0xe7, 0x99, 0x99, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ], + [ 0x99, 0x99, 0xff, 0xff, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ], + [ 0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x09, 0x09, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff ], + [ 0x8e, 0x8e, 0x31, 0x31, 0x19, 0x19, 0x09, 0x09, 0x21, 0x21, 0x31, 0x31, 0x39, 0x39, 0xff, 0xff ], + [ 0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x3c, 0x3c, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xff, 0xff, 0x39, 0x39, 0x93, 0x93, 0xc7, 0xc7, 0x93, 0x93, 0x39, 0x39, 0xff, 0xff, 0xff, 0xff ], + [ 0xc0, 0xc0, 0x99, 0x99, 0x91, 0x91, 0x81, 0x81, 0x89, 0x89, 0x99, 0x99, 0x03, 0x03, 0xff, 0xff ], + [ 0xcf, 0xcf, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xf3, 0xf3, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xe7, 0xe7, 0xdb, 0xdb, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xf9, 0xf9, 0xf7, 0xf7, 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff ], + [ 0x3f, 0x3f, 0x3f, 0x3f, 0x03, 0x03, 0x39, 0x39, 0x03, 0x03, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff ], + [ 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x9f, 0x9f ], + [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x80 ], + [ 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x00, 0x00, 0x0c, 0x0c, 0x3e, 0x3e, 0x6c, 0x6c, 0x3e, 0x3e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x1c, 0x1c, 0x36, 0x36, 0x30, 0x30, 0x78, 0x78, 0x30, 0x30, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x42, 0x42, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x7e, 0x7e, 0x81, 0x81, 0x9d, 0x9d, 0xb1, 0xb1, 0x9d, 0x9d, 0x81, 0x81, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x1c, 0x1c, 0x24, 0x24, 0x44, 0x44, 0x3c, 0x3c, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00 ], + [ 0x3e, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x7e, 0x7e, 0x81, 0x81, 0xb9, 0xb9, 0xa5, 0xa5, 0xb9, 0xb9, 0xa5, 0xa5, 0x81, 0x81, 0x7e, 0x7e ], + [ 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x0c, 0x0c, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x7f, 0x60, 0x60 ], + [ 0x3e, 0x3e, 0x7a, 0x7a, 0x7a, 0x7a, 0x3a, 0x3a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30 ], + [ 0x30, 0x30, 0x70, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x38, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00 ], + [ 0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x32, 0x32, 0x66, 0x66, 0xcf, 0xcf, 0x02, 0x02 ], + [ 0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x3e, 0x3e, 0x62, 0x62, 0xc4, 0xc4, 0x0e, 0x0e ], + [ 0xc0, 0xc0, 0x23, 0x23, 0x66, 0x66, 0x2c, 0x2c, 0xd9, 0xd9, 0x33, 0x33, 0x67, 0x67, 0x01, 0x01 ], + [ 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x1f, 0x1f, 0x3c, 0x3c, 0x3c, 0x3c, 0x6f, 0x6f, 0x7c, 0x7c, 0xcc, 0xcc, 0xcf, 0xcf, 0x00, 0x00 ], + [ 0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x0c, 0x0c, 0x18, 0x18 ], + [ 0x30, 0x30, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x66, 0x66, 0x00, 0x00, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0xf6, 0xf6, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00 ], + [ 0x71, 0x71, 0xce, 0xce, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0x00, 0x00 ], + [ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0xc3, 0xc3, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x3f, 0x3f, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0xfc, 0xfc, 0x00, 0x00 ], + [ 0x30, 0x30, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x24, 0x24, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x06, 0x06, 0x08, 0x08, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xfc, 0xc6, 0xc6, 0xfc, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x60, 0x60 ], + [ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x1b, 0x1b, 0x7f, 0x7f, 0xd8, 0xd8, 0x77, 0x77, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x18, 0x18 ], + [ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x60, 0x60, 0xfc, 0xfc, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x02, 0x02, 0x7c, 0x7c, 0xce, 0xce, 0xd6, 0xd6, 0xe6, 0xe6, 0x7c, 0x7c, 0x80, 0x80 ], + [ 0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30 ], + [ 0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60 ], + [ 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30 ] + ] + @height = 16 + this[k] = v for own k, v of options + +class @ImageTextMode + + @VERSION = '0.01' + + constructor: ( options ) -> + @screen = [] + @palette = new ImageTextModePaletteVGA + @font = new ImageTextModeFont8x16 + this[k] = v for own k, v of options + + parseUrl: ( url ) -> + req = new XMLHttpRequest + req.open 'GET', url, false + req.overrideMimeType 'text/plain; charset=x-user-defined' + req.send null + content = if req.status is 200 or req.status is 0 then req.responseText else '' + @parse content + + unpackShort: ( data ) -> + shrt = ( @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 0 ) + if shrt < 0 + shrt += 65536 + return shrt + + unpackLong: ( data ) -> + lng = ((( @getByteAt( data, 0 ) << 8 ) + @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 2 ) << 8 ) + @getByteAt( data, 3 ) + if lng < 0 + lng += 4294967296 + return lng; + + getByteAt: ( data, offset ) -> + return data.charCodeAt( offset ) & 0xFF + + getWidth: -> + max = 0 + for y in [ 0 .. @screen.length - 1 ] + max = @screen[ y ].length if @screen[ y ]? && @screen[ y ].length > max + return max + + getHeight: -> + return @screen.length + + parsePaletteData: ( data ) -> + colors = [] + for i in [ 0 .. 45 ] by 3 + r = @getByteAt( data, i ) + r = r << 2 | r >> 4 + g = @getByteAt( data, i + 1 ) + g = g << 2 | g >> 4 + b = @getByteAt( data, i + 2 ) + b = b << 2 | b >> 4 + colors.push [ r, g, b ] + + @palette = new ImageTextModePalette( { colors: colors } ) + + parseFontData: ( data, height = 16 ) -> + chars = [] + for i in [ 0 .. data.length / height - 1 ] + chr = [] + for j in [ 0 .. height - 1 ] + chr.push @getByteAt( data, i * height + j ) + chars.push chr + @font = new ImageTextModeFont( { chars: chars, height: height } ) + + renderCanvas: ( canvasElem ) -> + w = @getWidth() * @font.width + h = @getHeight() * @font.height + + canvas = document.createElement 'canvas' + canvas.setAttribute 'width', w + canvas.setAttribute 'height', h + ctx = canvas.getContext '2d' + + for cy in [ 0 .. @screen.length - 1 ] + continue if !@screen[ cy ]? + for cx in [ 0 .. @screen[ cy ].length - 1 ] + pixel = @screen[ cy ][ cx ] + continue if !pixel? + if pixel.attr? + fg = pixel.attr & 15 + bg = ( pixel.attr & 240 ) >> 4 + else + fg = pixel.fg + bg = pixel.bg + + px = cx * @font.width + py = cy * @font.height + + ctx.fillStyle = @palette.toRgbaString( @palette.colors[ bg ] ) + ctx.fillRect px, py, @font.width, @font.height + + ctx.fillStyle = @palette.toRgbaString( @palette.colors[ fg ] ) + chr = @font.chars[ pixel.ch.charCodeAt( 0 ) & 0xff ] + for i in [ 0 .. @font.height - 1 ] + line = chr[ i ] + for j in [ 0 .. @font.width - 1 ] + if line & ( 1 << @font.width - 1 - j ) + ctx.fillRect px + j, py + i, 1, 1 + + canvasElem.setAttribute 'width', w + canvasElem.setAttribute 'height', h + ctx = canvasElem.getContext '2d' + ctx.drawImage canvas, 0, 0 + + toBinaryArray: (str) -> + buf = new ArrayBuffer(str.length * 2) # 2 bytes for each char + bufView = new Uint8Array(buf) + i = 0 + strLen = str.length + + while i < strLen + bufView[i] = str.charCodeAt(i) + i++ + buf + + + +class @ImageTextModeXBin extends @ImageTextMode + + # Header constants + PALETTE = 1 + FONT = 2 + COMPRESSED = 4 + NON_BLINK = 8 + FIVETWELVE_CHARS = 16 + + # Compression type constants + NO_COMPRESSION = 0 + CHARACTER_COMPRESSION = 64 + ATTRIBUTE_COMPRESSION = 128 + FULL_COMPRESSION = 192 + + # Compression byte constants + COMPRESSION_TYPE = 192 + COMPRESSION_COUNTER = 63 + + constructor: ( options ) -> + super + @header = { width: 0, height: 0, fontisze: 0, flags: 0 } + this[k] = v for own k, v of options + + parse: ( content ) -> + @screen = [] + headerData = content.substr( 0, 11 ) + if headerData.length is not 11 || !headerData.match( '^XBIN\x1a' ) + throw new Error( 'File is not an XBin' ) + + @header.width = @unpackShort( headerData.substr( 5, 2 ) ) + @header.height = @unpackShort( headerData.substr( 7, 2 ) ) + @header.fontsize = @getByteAt( headerData.substr( 9, 1 ) ) + @header.flags = @getByteAt( headerData.substr( 10, 1 ) ) + offset = 11 + + if @header.flags & PALETTE + @parsePaletteData( content.substr( offset, 48 ) ); + offset += 48 + + if @header.flags & FONT + fontlength = @header.fontsize + if @header.flags & FIVETWELVE_CHARS + fontlength *= 512 + else + fontlength *= 256 + @parseFontData( content.substr( offset, fontlength ), @header.fontsize ); + offset += fontlength + + if @header.flags & COMPRESSED + @_parse_compressed( content.substr( offset ) ) + else + @_parse_uncompressed( content.substr( offset ) ) + + _parse_compressed: ( data ) -> + x = 0 + y = 0 + @screen[ y ] = [] + + data = data.split( '' ) + while info = data.shift() + info = @getByteAt( info, 0 ) + break if info == 26 + + type = info & COMPRESSION_TYPE + counter = ( info & COMPRESSION_COUNTER ) + 1 + + ch = null + attr = null + + while counter-- > 0 + switch type + when NO_COMPRESSION + ch = data.shift() + attr = data.shift() + when CHARACTER_COMPRESSION + ch = data.shift() if !ch? + attr = data.shift() + when ATTRIBUTE_COMPRESSION + attr = data.shift() if !attr? + ch = data.shift() + else + ch = data.shift() if !ch? + attr = data.shift() if !attr? + + @screen[ y ][ x ] = { ch: ch, attr: @getByteAt( attr, 0 ) } + + x++ + if x == @header.width + x = 0 + y++ + break if y == @header.height + @screen[ y ] = [] if !@screen[ y ]? + + _parse_uncompressed: ( data ) -> + x = 0 + y = 0 + @screen[ y ] = [] + + for i in [ 0 .. data.length - 2 ] by 2 + ch = data.substr( i, 1 ) + break if ch == "\x1a" + attr = @getByteAt( data, i + 1 ) + @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } + x++ + if x == @header.width + x = 0 + y++ + break if y == @header.height + @screen[ y ] = [] if !@screen[ y ]? + + getWidth: -> + return @header.width + + getHeight: -> + return @header.height + +class @ImageTextModeANSI extends @ImageTextMode + ANSI_ESC = String.fromCharCode(0x1b) + ANSI_CSI = ANSI_ESC + '[' + ANSI_TEXT_PROP = 'm' + ANSI_RESET = '0' + ANSI_FG = '3' + ANSI_BG = '4' + ANSI_FG_INTENSE = '9' + ANSI_BG_INTENSE = '10' + ANSI_CUR_DOWN = 'B' + ANSI_SEP = ';' + ANSI_RETURN = 'A' + + constructor: ( options ) -> + super + @palette = new ImageTextModePaletteANSI + @tabstop = 8 + @linewrap = 80 + this[k] = v for own k, v of options + + write: -> + content = "#{ ANSI_CSI }2J" # initiate document + for y in [0..@screen.length - 1] + content += "\n" if !@screen[y]? + continue if !@screen[y]? + for x in [0..@getWidth() - 1] + pixel = @screen[y][x] + if !pixel? + pixel = { ch: ' ', attr: 7 } + attr = @gen_args(pixel.attr) + if (attr != prevattr) + content += "#{ANSI_CSI}0;#{attr}#{ANSI_TEXT_PROP}" + prevattr = attr + content += if pixel.ch? then pixel.ch else ' ' + max_x = x + #content += "\n" + #content += ANSI_CSI + ANSI_RETURN # go to the next line + content += "#{ ANSI_CSI }0m" + @toBinaryArray(content) + + + gen_args: ( attr ) -> + fg = 30 + ( attr & 7 ) + bg = 40 + ( ( attr & 112 ) >> 4) + bl = if attr & 128 then 5 else '' + intense = if attr & 8 then 1 else '' + attrs = a for a in [fg, bg, bl, intense] when a != '' + return [fg, bg, bl, intense].join(";") + + parse: ( content ) -> + @screen = [] + @state = 0 + @x = 0 + @y = 0 + @save_x = 0 + @save_y = 0 + @attr = 7 + @argbuf = '' + + content = content.split( '' ) + while ch = content.shift() + if @state is 0 + switch ch + when "\x1a" then @state = 3 + when "\x1b" then @state = 1 + when "\n" + @x = 0 + @y++ + when "\r" then break + when "\t" + i = ( @x + 1 ) % @tabstop + @putpixel ' ' while i-- > 0 + else + @putpixel ch + + else if @state is 1 + if ch isnt "[" + @putpixel "\x1b" + @putpixel "[" + @state = 0 + else + @state = 2 + + else if @state is 2 + if ch.match( '[A-Za-z]' ) + args = ( parseInt( i ) for i in @argbuf.split ';' ) + + switch ch + when "m" + for arg in args + if arg is 0 + @attr = 7 + else if arg is 1 + @attr |= 8 + else if arg is 5 + @attr |= 128 + else if 30 <= arg <= 37 + @attr &= 248 + @attr |= ( arg - 30 ) + else if 40 <= arg <= 47 + @attr &= 143 + @attr |= ( arg - 40 ) << 4 + + when "H", "f" + @y = ( args[ 0 ] or 1 ) - 1 + @x = ( args[ 1 ] or 1 ) - 1 + @y = 0 if @y < 0 + @x = 0 if @x < 0 + when "A" + @y -= args[ 0 ] or 1 + @y = 0 if @y < 0 + when "B" + @y += args[ 0 ] or 1 + when "C" + @x += args[ 0 ] or 1 + when "D" + @x -= args[ 0 ] or 1 + @x = 0 if @x < 0 + when "E" + @y += args[ 0 ] or 1 + @x = 0 + when "F" + @y -= args[ 0 ] or 1 + @y = 0 if @y > 0 + @x = 0 + when "G" + @x = ( args[ 0 ] or 1 ) - 1 + when "s" + @save_x = @x + @save_y = @y + when "u" + @x = @save_x + @y = @save_y + when "J" + if args.length is 0 or args[ 0 ] is 0 + @screen[ i ] = null for i in [ @y + 1 .. screen.length - 1 ] + @screen[ @y ][ i ] = null for i in [ @x .. screen[ @y ].length - 1 ] + else if args[ 0 ] is 1 + @screen[ i ] = null for i in [ 0 .. @y - 1 ] + @screen[ @y ][ i ] = null for i in [ 0 .. @x ] + else if args[ 0 ] is 2 + @x = 0 + @y = 0 + @screen = [] + when "K" + if args.length is 0 or args[ 0 ] is 0 + @screen[ @y ][ i ] = null for i in [ @x .. @screen[ @y ].length - 1 ] + else if args[ 0 ] is 1 + @screen[ @y ][ i ] = null for i in [ 0 .. @x ] + else if args[ 0 ] is 2 + @screen[ @y ] = null + + @argbuf = '' + @state = 0 + + else + @argbuf += ch + + else if @state is 3 + break + + else + @state = 0 + + + putpixel: ( ch ) -> + @screen[ @y ] = [] if !@screen[ @y ]? + @screen[ @y ][ @x ] = { ch: ch, attr: @attr } + + if ++@x >= @linewrap + @x = 0 + @y++ + +class @ImageTextModeBin extends @ImageTextMode + + constructor: ( options ) -> + super + @linewrap = 160 + this[k] = v for own k, v of options + + parse: ( content ) -> + x = 0 + y = 0 + @screen[ y ] = [] + + for i in [ 0 .. content.length - 2 ] by 2 + ch = content.substr( i, 1 ) + break if ch == "\x1a" + attr = @getByteAt( content, i + 1 ) + @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } + x++ + if x == @linewrap + x = 0 + y++ + @screen[ y ] = [] + + @screen.pop() if @screen[ y ].length == 0 + +class @ImageTextModeIDF extends @ImageTextMode + + constructor: ( options ) -> + super + @header = { x0: 0, x1: 0, y0: 0, y1: 0 } + this[k] = v for own k, v of options + + parse: ( content ) -> + headerData = content.substr( 0, 12 ) + if headerData.length is not 12 || !headerData.match( '^\x041.4' ) + throw new Error( 'File is not an IDF' ) + + @header.x0 = @unpackShort( headerData.substr( 4, 2 ) ) + @header.y0 = @unpackShort( headerData.substr( 6, 2 ) ) + @header.x1 = @unpackShort( headerData.substr( 8, 2 ) ) + @header.y1 = @unpackShort( headerData.substr( 10, 2 ) ) + + eodata = content.length - 48 - 4096 + + if content.substr( content.length - 128, 5 ) == 'SAUCE' + eodata -= 128 + + @parseFontData( content.substr( eodata, 4096 ) ) + @parsePaletteData( content.substr( eodata + 4096, 48 ) ) + + y = 0 + x = 0 + @screen[ y ] = [] + offset = 12 + + while offset < eodata + buffer = content.substr( offset, 2 ) + info = @unpackShort( buffer ) + offset += 2 + len = 1 + + if info == 1 + len = @unpackShort( content.substr( offset, 2 ) ) & 255 + offset += 2 + buffer = content.substr( offset, 2 ) + offset += 2 + + ch = buffer.substr( 0, 1 ) + attr = @getByteAt( buffer, 1 ) + + for i in [ 1 .. len ] + @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } + x++ + if x > @header.x1 + x = 0 + y++ + @screen[ y ] = [] + + @screen.pop() if @screen[ y ].length == 0 + +class @ImageTextModeADF extends @ImageTextMode + + COLOR_INDEX = [ 0, 1, 2, 3, 4, 5, 20, 7, 56, 57, 58, 59, 60, 61, 62, 63 ] + + constructor: ( options ) -> + super + @header = { version: 0 } + this[k] = v for own k, v of options + + parse: ( content ) -> + @header.version = @getByteAt( content, 0 ) + @parsePaletteData( content.substr( 1, 192 ) ) + @parseFontData( content.substr( 193, 4096 ) ) + + x = 0 + y = 0 + @screen[ y ] = [] + + for i in [ 4289 .. content.length - 2 ] by 2 + ch = content.substr( i, 1 ) + break if ch == "\x1a" + attr = @getByteAt( content, i + 1 ) + @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } + x++ + if x == 80 + x = 0 + y++ + @screen[ y ] = [] + + @screen.pop() if @screen[ y ].length == 0 + + parsePaletteData: ( data ) -> + colors = [] + for i in COLOR_INDEX + j = i * 3 + r = @getByteAt( data, j ) + r = r << 2 | r >> 4 + g = @getByteAt( data, j + 1 ) + g = g << 2 | g >> 4 + b = @getByteAt( data, j + 2 ) + b = b << 2 | b >> 4 + colors.push [ r, g, b ] + + @palette = new ImageTextModePalette( { colors: colors } ) + +class @ImageTextModeTundra extends @ImageTextMode + + constructor: ( options ) -> + super + this[k] = v for own k, v of options + + parse: ( content ) -> + colors = [ [ 0, 0, 0 ] ] + palidx = 1 + x = 0 + y = 0 + fg = 0 + bg = 0 + + @screen[ y ] = [] + content = content.substr( 8 ).split( '' ) + while command = content.shift() + break if command == "\x1a" + command = command.charCodeAt( 0 ) + + if command is 1 + y = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + x = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + @screen[ y ] = [] if !@screen[ y ]? + continue + + ch = null + + if command is 2 + ch = content.shift() + rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + fg = palidx++ + colors.push [ + ( rgb >> 16 ) & 0x000000ff, + ( rgb >> 8 ) & 0x000000ff, + rgb & 0x000000ff + ] + else if command is 4 + ch = content.shift() + rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + bg = palidx++ + colors.push [ + ( rgb >> 16 ) & 0x000000ff, + ( rgb >> 8 ) & 0x000000ff, + rgb & 0x000000ff + ] + else if command is 6 + ch = content.shift() + fg = palidx++ + bg = palidx++ + for [ 0 .. 1 ] + rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + colors.push [ + ( rgb >> 16 ) & 0x000000ff, + ( rgb >> 8 ) & 0x000000ff, + rgb & 0x000000ff + ] + + ch = String.fromCharCode( command ) unless ch? + + @screen[ y ][ x ] = { 'ch': ch, 'fg': fg, 'bg': bg } + x++ + if x == 80 + x = 0 + y++ + @screen[ y ] = [] + + @screen.pop() if @screen[ y ].length == 0 + @palette = new ImageTextModePalette( { colors: colors } ) + +class @ImageTextModePCBoard extends @ImageTextMode + + constructor: ( options ) -> + super + @tabstop = 8 + @linewrap = 80 + @codes = { POFF: '', WAIT: '' } + this[k] = v for own k, v of options + + parse: ( content ) -> + @screen = [] + @state = 0 + @x = 0 + @y = 0 + @attr = 7 + + for key, val of @codes + code = new RegExp '@' + key + '@', 'g' + content.replace code, val + + content = content.split( '' ) + while ch = content.shift() + if @state is 0 + switch ch + when "\x1a" then @state = 2 + when '@' then @state = 1 + when "\n" + @x = 0 + @y++ + when "\r" then break + when "\t" + i = ( @x + 1 ) % @tabstop + @putpixel ' ' while i-- > 0 + else + @putpixel ch + else if @state is 1 + if ch is 'X' + @attr = ( parseInt( content.shift(), 16 ) << 4 ) + parseInt( content.shift(), 16 ) + else if ch + content[ 0..2 ].join( '' ) is 'CLS@' + content.shift() for [ 1 .. 3 ] + @screen = [] + else if ch + content[ 0..2 ].join( '' ) is 'POS:' + content.shift() for [ 1 .. 3 ] + @x = content.shift() + @x += content.shift() if content[ 0 ] is not '@' + @x-- + + content.shift() + else + @putpixel '@' + @putpixel ch + + @state = 0 + else if @state is 2 + break + else + @state = 0 + + putpixel: ( ch ) -> + @screen[ @y ] = [] if !@screen[ @y ]? + @screen[ @y ][ @x ] = { ch: ch, attr: @attr } + + if ++@x >= @linewrap + @x = 0 + @y++ + +class @ImageTextModeAVATAR extends @ImageTextMode + + constructor: ( options ) -> + super + @tabstop = 8 + @linewrap = 80 + this[k] = v for own k, v of options + + parse: ( content ) -> + @screen = [] + @x = 0 + @y = 0 + @attr = 3 + + content = content.split( '' ) + while ch = content.shift() + if ch is "\x1a" + break + else if ch is "\n" + @x = 0 + @y++ + else if ch is "\r" + continue + else if ch is "\t" + i = ( @x + 1 ) % @tabstop + @putpixel ' ' while i-- > 0 + else if ch.charCodeAt( 0 ) is 12 + @screen = [] + @attr = 3 + @insert = false + else if ch.charCodeAt( 0 ) is 25 + ch = content.shift() + i = content.shift().charCodeAt( 0 ) + @putpixel( ch ) while i-- > 0 + else if ch.charCodeAt( 0 ) is 22 + c = content.shift().charCodeAt( 0 ) + switch c + when 1 + @attr = content.shift().charCodeAt( 0 ) & 0x7f + when 2 + @attr |= 0x80 + when 3 + @y-- + @y = 0 if @y < 0 + when 4 + @y++ + when 5 + @x-- + @x = 0 if @x < 0 + when 6 + @x++ + when 7 + @screen[ @y ][ i ] = null for i in [ @x .. screen[ @y ].length - 1 ] + when 8 + @y = content.shift().charCodeAt( 0 ) - 1 + @x = content.shift().charCodeAt( 0 ) - 1 + @y = 0 if @y < 0 + @x = 0 if @x < 0 + else + @putpixel ch + + putpixel: ( ch ) -> + @screen[ @y ] = [] if !@screen[ @y ]? + @screen[ @y ][ @x ] = { ch: ch, attr: @attr } + + if ++@x >= @linewrap + @x = 0 + @y++ From f01c5717f472e622c3584e3e6b1ba63a023a83f4 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Mon, 7 Oct 2013 16:14:30 +0300 Subject: [PATCH 003/108] some cleanup before heading into main render code --- textmode.coffee | 37 +- textmode.js | 2575 ++++++++++++++++++++++++----------------------- 2 files changed, 1311 insertions(+), 1301 deletions(-) diff --git a/textmode.coffee b/textmode.coffee index 26bf065..6da61ff 100644 --- a/textmode.coffee +++ b/textmode.coffee @@ -10,7 +10,7 @@ class @ImageTextModeSAUCE parse: ( content ) -> sauceMarker = content.length - 128; - return false if content.substr( sauceMarker, 5 ) is not 'SAUCE' + return false if content.substr( sauceMarker, 5 ) isnt 'SAUCE' @id = 'SAUCE' @version = content.substr( sauceMarker + 5, 2 ) @title = content.substr( sauceMarker + 7, 35 ) @@ -66,7 +66,8 @@ class @ImageTextModePalette class @ImageTextModePaletteVGA extends @ImageTextModePalette constructor: ( options ) -> - super @colors = [ + super + @colors = [ [ 0x00, 0x00, 0x00 ], [ 0x00, 0x00, 0xaa ], [ 0x00, 0xaa, 0x00 ], @@ -918,12 +919,12 @@ class @ImageTextMode constructor: ( options ) -> @screen = [] - @palette = new ImageTextModePaletteVGA - @font = new ImageTextModeFont8x16 - this[k] = v for own k, v of options + @palette = new ImageTextModePaletteVGA() + @font = new ImageTextModeFont8x16() + @[k] = v for own k, v of options parseUrl: ( url ) -> - req = new XMLHttpRequest + req = new XMLHttpRequest() req.open 'GET', url, false req.overrideMimeType 'text/plain; charset=x-user-defined' req.send null @@ -945,6 +946,8 @@ class @ImageTextMode getByteAt: ( data, offset ) -> return data.charCodeAt( offset ) & 0xFF +# could we replace this with math.max ? + getWidth: -> max = 0 for y in [ 0 .. @screen.length - 1 ] @@ -965,7 +968,7 @@ class @ImageTextMode b = b << 2 | b >> 4 colors.push [ r, g, b ] - @palette = new ImageTextModePalette( { colors: colors } ) + @palette = new ImageTextModePalette( colors: colors ) parseFontData: ( data, height = 16 ) -> chars = [] @@ -973,9 +976,11 @@ class @ImageTextMode chr = [] for j in [ 0 .. height - 1 ] chr.push @getByteAt( data, i * height + j ) - chars.push chr + chars.push chr @font = new ImageTextModeFont( { chars: chars, height: height } ) +# the majority of time is spent in this routine + renderCanvas: ( canvasElem ) -> w = @getWidth() * @font.width h = @getHeight() * @font.height @@ -985,9 +990,9 @@ class @ImageTextMode canvas.setAttribute 'height', h ctx = canvas.getContext '2d' - for cy in [ 0 .. @screen.length - 1 ] + for cy in [ 0 ... @screen.length ] continue if !@screen[ cy ]? - for cx in [ 0 .. @screen[ cy ].length - 1 ] + for cx in [ 0 ... @screen[ cy ].length ] pixel = @screen[ cy ][ cx ] continue if !pixel? if pixel.attr? @@ -1005,9 +1010,9 @@ class @ImageTextMode ctx.fillStyle = @palette.toRgbaString( @palette.colors[ fg ] ) chr = @font.chars[ pixel.ch.charCodeAt( 0 ) & 0xff ] - for i in [ 0 .. @font.height - 1 ] + for i in [ 0 ... @font.height ] line = chr[ i ] - for j in [ 0 .. @font.width - 1 ] + for j in [ 0 ... @font.width ] if line & ( 1 << @font.width - 1 - j ) ctx.fillRect px + j, py + i, 1, 1 @@ -1056,7 +1061,7 @@ class @ImageTextModeXBin extends @ImageTextMode parse: ( content ) -> @screen = [] headerData = content.substr( 0, 11 ) - if headerData.length is not 11 || !headerData.match( '^XBIN\x1a' ) + if headerData.length isnt 11 || !headerData.match( '^XBIN\x1a' ) throw new Error( 'File is not an XBin' ) @header.width = @unpackShort( headerData.substr( 5, 2 ) ) @@ -1353,7 +1358,7 @@ class @ImageTextModeIDF extends @ImageTextMode parse: ( content ) -> headerData = content.substr( 0, 12 ) - if headerData.length is not 12 || !headerData.match( '^\x041.4' ) + if headerData.length isnt 12 || !headerData.match( '^\x041.4' ) throw new Error( 'File is not an IDF' ) @header.x0 = @unpackShort( headerData.substr( 4, 2 ) ) @@ -1558,7 +1563,7 @@ class @ImageTextModePCBoard extends @ImageTextMode else if ch + content[ 0..2 ].join( '' ) is 'POS:' content.shift() for [ 1 .. 3 ] @x = content.shift() - @x += content.shift() if content[ 0 ] is not '@' + @x += content.shift() if content[ 0 ] isnt '@' @x-- content.shift() @@ -1648,3 +1653,5 @@ class @ImageTextModeAVATAR extends @ImageTextMode if ++@x >= @linewrap @x = 0 @y++ + + diff --git a/textmode.js b/textmode.js index 9998fb7..1d7578c 100644 --- a/textmode.js +++ b/textmode.js @@ -1,1369 +1,1372 @@ // Generated by CoffeeScript 1.6.3 -var __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; +(function() { + var __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; -this.ImageTextModeSAUCE = (function() { - function ImageTextModeSAUCE() {} + this.ImageTextModeSAUCE = (function() { + function ImageTextModeSAUCE() {} - ImageTextModeSAUCE.prototype.parseUrl = function(url) { - var content, req; - req = new XMLHttpRequest; - req.open('GET', url, false); - req.overrideMimeType('text/plain; charset=x-user-defined'); - req.send(null); - content = req.status === 200 || req.status === 0 ? req.responseText : ''; - return this.parse(content); - }; + ImageTextModeSAUCE.prototype.parseUrl = function(url) { + var content, req; + req = new XMLHttpRequest(); + req.open('GET', url, false); + req.overrideMimeType('text/plain; charset=x-user-defined'); + req.send(null); + content = req.status === 200 || req.status === 0 ? req.responseText : ''; + return this.parse(content); + }; - ImageTextModeSAUCE.prototype.parse = function(content) { - var commentMarker, i, sauceMarker; - sauceMarker = content.length - 128; - if (content.substr(sauceMarker, 5) === !'SAUCE') { - return false; - } - this.id = 'SAUCE'; - this.version = content.substr(sauceMarker + 5, 2); - this.title = content.substr(sauceMarker + 7, 35); - this.author = content.substr(sauceMarker + 42, 20); - this.group = content.substr(sauceMarker + 62, 20); - this.date = content.substr(sauceMarker + 82, 8); - this.fileSize = this.unpackLong(content.substr(sauceMarker + 90, 4)); - this.dataType = this.getByteAt(content.substr(sauceMarker + 94, 1)); - this.fileType = this.getByteAt(content.substr(sauceMarker + 95, 1)); - this.tinfo1 = this.unpackShort(content.substr(sauceMarker + 96, 2)); - this.tinfo2 = this.unpackShort(content.substr(sauceMarker + 98, 2)); - this.tinfo3 = this.unpackShort(content.substr(sauceMarker + 100, 2)); - this.tinfo4 = this.unpackShort(content.substr(sauceMarker + 102, 2)); - this.commentCount = this.getByteAt(content.substr(sauceMarker + 104, 1)); - this.flags = this.getByteAt(content.substr(sauceMarker + 105, 1)); - this.filler = content.substr(sauceMarker + 106, 22); - commentMarker = sauceMarker - 5 - this.commentCount * 64; - if (this.commentCount > 0 && content.substr(commentMarker, 5) === 'COMNT') { - commentMarker += 5; - this.comments = []; - i = this.commentCount; - while (i-- > 0) { - this.comments.push(content.substr(commentMarker, 64)); - commentMarker += 64; + ImageTextModeSAUCE.prototype.parse = function(content) { + var commentMarker, i, sauceMarker; + sauceMarker = content.length - 128; + if (content.substr(sauceMarker, 5) !== 'SAUCE') { + return false; + } + this.id = 'SAUCE'; + this.version = content.substr(sauceMarker + 5, 2); + this.title = content.substr(sauceMarker + 7, 35); + this.author = content.substr(sauceMarker + 42, 20); + this.group = content.substr(sauceMarker + 62, 20); + this.date = content.substr(sauceMarker + 82, 8); + this.fileSize = this.unpackLong(content.substr(sauceMarker + 90, 4)); + this.dataType = this.getByteAt(content.substr(sauceMarker + 94, 1)); + this.fileType = this.getByteAt(content.substr(sauceMarker + 95, 1)); + this.tinfo1 = this.unpackShort(content.substr(sauceMarker + 96, 2)); + this.tinfo2 = this.unpackShort(content.substr(sauceMarker + 98, 2)); + this.tinfo3 = this.unpackShort(content.substr(sauceMarker + 100, 2)); + this.tinfo4 = this.unpackShort(content.substr(sauceMarker + 102, 2)); + this.commentCount = this.getByteAt(content.substr(sauceMarker + 104, 1)); + this.flags = this.getByteAt(content.substr(sauceMarker + 105, 1)); + this.filler = content.substr(sauceMarker + 106, 22); + commentMarker = sauceMarker - 5 - this.commentCount * 64; + if (this.commentCount > 0 && content.substr(commentMarker, 5) === 'COMNT') { + commentMarker += 5; + this.comments = []; + i = this.commentCount; + while (i-- > 0) { + this.comments.push(content.substr(commentMarker, 64)); + commentMarker += 64; + } + } + return true; + }; + + ImageTextModeSAUCE.prototype.unpackLong = function(data) { + var lng; + lng = (((this.getByteAt(data, 3) << 8) + this.getByteAt(data, 2) << 8) + this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); + if (lng < 0) { + lng += 4294967296; + } + return lng; + }; + + ImageTextModeSAUCE.prototype.unpackShort = function(data) { + var shrt; + shrt = (this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); + if (shrt < 0) { + shrt += 65536; + } + return shrt; + }; + + ImageTextModeSAUCE.prototype.getByteAt = function(data, offset) { + return data.charCodeAt(offset) & 0xFF; + }; + + return ImageTextModeSAUCE; + + })(); + + this.ImageTextModePalette = (function() { + function ImageTextModePalette(options) { + var k, v; + this.colors = []; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; } } - return true; - }; - ImageTextModeSAUCE.prototype.unpackLong = function(data) { - var lng; - lng = (((this.getByteAt(data, 3) << 8) + this.getByteAt(data, 2) << 8) + this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); - if (lng < 0) { - lng += 4294967296; - } - return lng; - }; + ImageTextModePalette.prototype.toRgbaString = function(color) { + return 'rgba(' + color.join(',') + ',1)'; + }; - ImageTextModeSAUCE.prototype.unpackShort = function(data) { - var shrt; - shrt = (this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); - if (shrt < 0) { - shrt += 65536; - } - return shrt; - }; + return ImageTextModePalette; - ImageTextModeSAUCE.prototype.getByteAt = function(data, offset) { - return data.charCodeAt(offset) & 0xFF; - }; + })(); - return ImageTextModeSAUCE; + this.ImageTextModePaletteVGA = (function(_super) { + __extends(ImageTextModePaletteVGA, _super); -})(); - -this.ImageTextModePalette = (function() { - function ImageTextModePalette(options) { - var k, v; - this.colors = []; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextModePalette.prototype.toRgbaString = function(color) { - return 'rgba(' + color.join(',') + ',1)'; - }; - - return ImageTextModePalette; - -})(); - -this.ImageTextModePaletteVGA = (function(_super) { - __extends(ImageTextModePaletteVGA, _super); - - function ImageTextModePaletteVGA(options) { - var k, v; - ImageTextModePaletteVGA.__super__.constructor.apply(this, arguments); - this.colors = [[0x00, 0x00, 0x00], [0x00, 0x00, 0xaa], [0x00, 0xaa, 0x00], [0x00, 0xaa, 0xaa], [0xaa, 0x00, 0x00], [0xaa, 0x00, 0xaa], [0xaa, 0x55, 0x00], [0xaa, 0xaa, 0xaa], [0x55, 0x55, 0x55], [0x55, 0x55, 0xff], [0x55, 0xff, 0x55], [0x55, 0xff, 0xff], [0xff, 0x55, 0x55], [0xff, 0x55, 0xff], [0xff, 0xff, 0x55], [0xff, 0xff, 0xff]]; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - return ImageTextModePaletteVGA; - -})(this.ImageTextModePalette); - -this.ImageTextModePaletteANSI = (function(_super) { - __extends(ImageTextModePaletteANSI, _super); - - function ImageTextModePaletteANSI(options) { - var k, v; - ImageTextModePaletteANSI.__super__.constructor.apply(this, arguments); - this.colors = [[0x00, 0x00, 0x00], [0xaa, 0x00, 0x00], [0x00, 0xaa, 0x00], [0xaa, 0x55, 0x00], [0x00, 0x00, 0xaa], [0xaa, 0x00, 0xaa], [0x00, 0xaa, 0xaa], [0xaa, 0xaa, 0xaa], [0x55, 0x55, 0x55], [0xff, 0x55, 0x55], [0x55, 0xff, 0x55], [0xff, 0xff, 0x55], [0x55, 0x55, 0xff], [0xff, 0x55, 0xff], [0x55, 0xff, 0xff], [0xff, 0xff, 0xff]]; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - return ImageTextModePaletteANSI; - -})(this.ImageTextModePalette); - -this.ImageTextModeFont = (function() { - function ImageTextModeFont(options) { - var k, v; - this.chars = []; - this.width = 8; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - return ImageTextModeFont; - -})(); - -this.ImageTextModeFont8x16 = (function(_super) { - __extends(ImageTextModeFont8x16, _super); - - function ImageTextModeFont8x16(options) { - var k, v; - ImageTextModeFont8x16.__super__.constructor.apply(this, arguments); - this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00], [0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00], [0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00], [0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00], [0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x70, 0x00, 0x00], [0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x70, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x38, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x36, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00], [0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x18, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00], [0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x66, 0xce, 0x9a, 0x3f, 0x06, 0x06, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44], [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], [0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00], [0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x6c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x3c, 0x66, 0x0c, 0x18, 0x32, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]]; - this.height = 16; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - return ImageTextModeFont8x16; - -})(this.ImageTextModeFont); - -this.ImageTextModeFont8x8 = (function(_super) { - __extends(ImageTextModeFont8x8, _super); - - function ImageTextModeFont8x8(options) { - var k, v; - ImageTextModeFont8x8.__super__.constructor.apply(this, arguments); - this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e], [0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e], [0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00], [0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00], [0x38, 0x7c, 0x38, 0xfe, 0xfe, 0xd6, 0x10, 0x38], [0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x7c, 0x10, 0x38], [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00], [0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff], [0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00], [0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff], [0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78], [0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18], [0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0], [0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0], [0x18, 0xdb, 0x3c, 0xe7, 0xe7, 0x3c, 0xdb, 0x18], [0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00], [0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00], [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18], [0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00], [0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00], [0x3e, 0x61, 0x3c, 0x66, 0x66, 0x3c, 0x86, 0x7c], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00], [0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff], [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00], [0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00], [0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00], [0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00], [0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00], [0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00], [0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00], [0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00], [0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00], [0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00], [0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00], [0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00], [0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00], [0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00], [0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00], [0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00], [0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30], [0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00], [0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00], [0x38, 0x6c, 0xc6, 0xd6, 0xc6, 0x6c, 0x38, 0x00], [0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00], [0x7c, 0xc6, 0x06, 0x1c, 0x30, 0x66, 0xfe, 0x00], [0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00], [0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00], [0xfe, 0xc0, 0xc0, 0xfc, 0x06, 0xc6, 0x7c, 0x00], [0x38, 0x60, 0xc0, 0xfc, 0xc6, 0xc6, 0x7c, 0x00], [0xfe, 0xc6, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00], [0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0x00], [0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00], [0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00], [0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30], [0x06, 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x06, 0x00], [0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00], [0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00], [0x7c, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x00], [0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00], [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00], [0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00], [0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00], [0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00], [0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00], [0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00], [0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3a, 0x00], [0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00], [0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00], [0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00], [0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00], [0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00], [0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00], [0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], [0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xce, 0x7c, 0x0e], [0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00], [0x3c, 0x66, 0x30, 0x18, 0x0c, 0x66, 0x3c, 0x00], [0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x3c, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00], [0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc6, 0x00], [0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x00], [0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00], [0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00], [0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00], [0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00], [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff], [0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0xe0, 0x60, 0x7c, 0x66, 0x66, 0x66, 0xdc, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc6, 0x7c, 0x00], [0x1c, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x3c, 0x66, 0x60, 0xf8, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], [0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00], [0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x06, 0x00, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c], [0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00], [0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0x00], [0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0], [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e], [0x00, 0x00, 0xdc, 0x76, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x7e, 0xc0, 0x7c, 0x06, 0xfc, 0x00], [0x30, 0x30, 0xfc, 0x30, 0x30, 0x36, 0x1c, 0x00], [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00], [0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc], [0x00, 0x00, 0x7e, 0x4c, 0x18, 0x32, 0x7e, 0x00], [0x0e, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0e, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00], [0x70, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x70, 0x00], [0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00], [0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x0c, 0x78], [0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x0c, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x7c, 0x82, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0xc6, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x30, 0x18, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x00, 0x00, 0x7e, 0xc0, 0xc0, 0x7e, 0x0c, 0x38], [0x7c, 0x82, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0xc6, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x30, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x7c, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00], [0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], [0x38, 0x6c, 0x7c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], [0x18, 0x30, 0xfe, 0xc0, 0xf8, 0xc0, 0xfe, 0x00], [0x00, 0x00, 0x7e, 0x18, 0x7e, 0xd8, 0x7e, 0x00], [0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00], [0x7c, 0x82, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x30, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x78, 0x84, 0x00, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x60, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc], [0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18], [0x38, 0x6c, 0x64, 0xf0, 0x60, 0x66, 0xfc, 0x00], [0x66, 0x66, 0x3c, 0x7e, 0x18, 0x7e, 0x18, 0x18], [0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7], [0x0e, 0x1b, 0x18, 0x3c, 0x18, 0xd8, 0x70, 0x00], [0x18, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00], [0x0c, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x18, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x00], [0x76, 0xdc, 0x00, 0xe6, 0xf6, 0xde, 0xce, 0x00], [0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00], [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00], [0x18, 0x00, 0x18, 0x18, 0x30, 0x63, 0x3e, 0x00], [0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0x00, 0x00], [0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x00, 0x00], [0x63, 0xe6, 0x6c, 0x7e, 0x33, 0x66, 0xcc, 0x0f], [0x63, 0xe6, 0x6c, 0x7a, 0x36, 0x6a, 0xdf, 0x06], [0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x00], [0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00], [0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00], [0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88], [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], [0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36], [0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36], [0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00], [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36], [0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36], [0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36], [0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36], [0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], [0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36], [0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00], [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36], [0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff], [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], [0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00], [0x78, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xcc, 0x00], [0xfe, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00], [0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00], [0xfe, 0xc6, 0x60, 0x30, 0x60, 0xc6, 0xfe, 0x00], [0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0xc0], [0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00], [0x7e, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x7e], [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00], [0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00], [0x0e, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x3c, 0x00], [0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00], [0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0], [0x1e, 0x30, 0x60, 0x7e, 0x60, 0x30, 0x1e, 0x00], [0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00], [0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00], [0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x7e, 0x00], [0x30, 0x18, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00], [0x0c, 0x18, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00], [0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70], [0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00], [0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00], [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00], [0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c], [0x6c, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00], [0x78, 0x0c, 0x18, 0x30, 0x7c, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]]; - this.height = 8; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - return ImageTextModeFont8x8; - -})(this.ImageTextModeFont); - -this.ImageTextModeFontAmiga = (function(_super) { - __extends(ImageTextModeFontAmiga, _super); - - function ImageTextModeFontAmiga(options) { - var k, v; - ImageTextModeFontAmiga.__super__.constructor.apply(this, arguments); - this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x83, 0x83, 0x39, 0x39, 0x21, 0x21, 0x29, 0x29, 0x21, 0x21, 0x3f, 0x3f, 0x87, 0x87, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0xff, 0xff], [0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xff, 0xff], [0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff], [0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x9f, 0x9f, 0x91, 0x91, 0x99, 0x99, 0x99, 0x99, 0xc1, 0xc1, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x9c, 0x9c, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x9c, 0x9c, 0xff, 0xff], [0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x9c, 0x9c, 0x88, 0x88, 0x80, 0x80, 0x94, 0x94, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff], [0x9c, 0x9c, 0x8c, 0x8c, 0x84, 0x84, 0x90, 0x90, 0x98, 0x98, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x91, 0x91, 0xc0, 0xc0, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x8f, 0x8f, 0xc3, 0xc3, 0xf1, 0xf1, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x81, 0x81, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xc3, 0xc3, 0xe7, 0xe7, 0xff, 0xff], [0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x94, 0x94, 0x80, 0x80, 0x88, 0x88, 0x9c, 0x9c, 0xff, 0xff], [0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x3c, 0x3c, 0xff, 0xff], [0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x80, 0x80, 0xf9, 0xf9, 0xf3, 0xf3, 0xe7, 0xe7, 0xcf, 0xcf, 0x9f, 0x9f, 0x80, 0x80, 0xff, 0xff], [0xc3, 0xc3, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xc3, 0xc3, 0xff, 0xff], [0x3f, 0x3f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe7, 0xe7, 0xf3, 0xf3, 0xf9, 0xf9, 0xfc, 0xfc, 0xff, 0xff], [0xc3, 0xc3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xc3, 0xc3, 0xff, 0xff], [0xf7, 0xf7, 0xe3, 0xe3, 0xc9, 0xc9, 0x9c, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00], [0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00], [0x18, 0x18, 0x3e, 0x3e, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0xac, 0xac, 0xd8, 0xd8, 0x36, 0x36, 0x6a, 0x6a, 0xcc, 0xcc, 0x00, 0x00], [0x38, 0x38, 0x6c, 0x6c, 0x68, 0x68, 0x76, 0x76, 0xdc, 0xdc, 0xce, 0xce, 0x7b, 0x7b, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x3c, 0x3c, 0xff, 0xff, 0x3c, 0x3c, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x38, 0x38, 0x78, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x1c, 0x1c, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x3c, 0x3c, 0x6c, 0x6c, 0xcc, 0xcc, 0xfe, 0xfe, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x7c, 0x7c, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x30, 0x30, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7e, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x0c, 0x0c, 0x38, 0x38, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00], [0x7c, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xd6, 0xd6, 0xde, 0xde, 0xc0, 0xc0, 0x78, 0x78, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00], [0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x00, 0x00], [0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x60, 0x60, 0x6e, 0x6e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0xc6, 0xc6, 0xcc, 0xcc, 0xd8, 0xd8, 0xf0, 0xf0, 0xd8, 0xd8, 0xcc, 0xcc, 0xc6, 0xc6, 0x00, 0x00], [0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0xc6, 0xc6, 0xee, 0xee, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0xc6, 0xc6, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x78, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdc, 0xdc, 0x7e, 0x7e, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x70, 0x70, 0x3c, 0x3c, 0x0e, 0x0e, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0xee, 0xee, 0xc6, 0xc6, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0xfe, 0xfe, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0xfe, 0xfe, 0x00, 0x00], [0x3c, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x3c, 0x00, 0x00], [0xc0, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03, 0x00, 0x00], [0x3c, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x3c, 0x00, 0x00], [0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe], [0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x3c, 0x3c], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x78, 0x78], [0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xec, 0xec, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60], [0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x06, 0x06], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x00, 0x00], [0x30, 0x30, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1c, 0x1c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0x6c, 0x6c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x00, 0x00], [0x72, 0x72, 0x9c, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0xc3, 0xc3, 0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0x00, 0x00], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe7, 0xe7, 0xdb, 0xdb, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe0, 0xe0, 0xc3, 0xc3, 0xc3, 0xc3, 0x90, 0x90, 0x83, 0x83, 0x33, 0x33, 0x30, 0x30, 0xff, 0xff], [0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xf3, 0xf3, 0xe7, 0xe7], [0xcf, 0xcf, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x09, 0x09, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff], [0x8e, 0x8e, 0x31, 0x31, 0x19, 0x19, 0x09, 0x09, 0x21, 0x21, 0x31, 0x31, 0x39, 0x39, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x3c, 0x3c, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xff, 0xff, 0x39, 0x39, 0x93, 0x93, 0xc7, 0xc7, 0x93, 0x93, 0x39, 0x39, 0xff, 0xff, 0xff, 0xff], [0xc0, 0xc0, 0x99, 0x99, 0x91, 0x91, 0x81, 0x81, 0x89, 0x89, 0x99, 0x99, 0x03, 0x03, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0xdb, 0xdb, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf9, 0xf9, 0xf7, 0xf7, 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x3f, 0x3f, 0x3f, 0x3f, 0x03, 0x03, 0x39, 0x39, 0x03, 0x03, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x9f, 0x9f], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x80], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x0c, 0x3e, 0x3e, 0x6c, 0x6c, 0x3e, 0x3e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00], [0x1c, 0x1c, 0x36, 0x36, 0x30, 0x30, 0x78, 0x78, 0x30, 0x30, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x42, 0x42, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x7e, 0x81, 0x81, 0x9d, 0x9d, 0xb1, 0xb1, 0x9d, 0x9d, 0x81, 0x81, 0x7e, 0x7e, 0x00, 0x00], [0x1c, 0x1c, 0x24, 0x24, 0x44, 0x44, 0x3c, 0x3c, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00], [0x3e, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x7e, 0x81, 0x81, 0xb9, 0xb9, 0xa5, 0xa5, 0xb9, 0xb9, 0xa5, 0xa5, 0x81, 0x81, 0x7e, 0x7e], [0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00], [0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x0c, 0x0c, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x7f, 0x60, 0x60], [0x3e, 0x3e, 0x7a, 0x7a, 0x7a, 0x7a, 0x3a, 0x3a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30], [0x30, 0x30, 0x70, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x38, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00], [0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x32, 0x32, 0x66, 0x66, 0xcf, 0xcf, 0x02, 0x02], [0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x3e, 0x3e, 0x62, 0x62, 0xc4, 0xc4, 0x0e, 0x0e], [0xc0, 0xc0, 0x23, 0x23, 0x66, 0x66, 0x2c, 0x2c, 0xd9, 0xd9, 0x33, 0x33, 0x67, 0x67, 0x01, 0x01], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x1f, 0x1f, 0x3c, 0x3c, 0x3c, 0x3c, 0x6f, 0x6f, 0x7c, 0x7c, 0xcc, 0xcc, 0xcf, 0xcf, 0x00, 0x00], [0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x0c, 0x0c, 0x18, 0x18], [0x30, 0x30, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0xf6, 0xf6, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00], [0x71, 0x71, 0xce, 0xce, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0xc3, 0xc3, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x3f, 0x3f, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0xfc, 0xfc, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x08, 0x08, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xfc, 0xc6, 0xc6, 0xfc, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x60, 0x60], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x1b, 0x1b, 0x7f, 0x7f, 0xd8, 0xd8, 0x77, 0x77, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x18, 0x18], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x60, 0x60, 0xfc, 0xfc, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x02, 0x02, 0x7c, 0x7c, 0xce, 0xce, 0xd6, 0xd6, 0xe6, 0xe6, 0x7c, 0x7c, 0x80, 0x80], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30]]; - this.height = 16; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - return ImageTextModeFontAmiga; - -})(this.ImageTextModeFont); - -this.ImageTextMode = (function() { - ImageTextMode.VERSION = '0.01'; - - function ImageTextMode(options) { - var k, v; - this.screen = []; - this.palette = new ImageTextModePaletteVGA; - this.font = new ImageTextModeFont8x16; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextMode.prototype.parseUrl = function(url) { - var content, req; - req = new XMLHttpRequest; - req.open('GET', url, false); - req.overrideMimeType('text/plain; charset=x-user-defined'); - req.send(null); - content = req.status === 200 || req.status === 0 ? req.responseText : ''; - return this.parse(content); - }; - - ImageTextMode.prototype.unpackShort = function(data) { - var shrt; - shrt = (this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); - if (shrt < 0) { - shrt += 65536; - } - return shrt; - }; - - ImageTextMode.prototype.unpackLong = function(data) { - var lng; - lng = (((this.getByteAt(data, 0) << 8) + this.getByteAt(data, 1) << 8) + this.getByteAt(data, 2) << 8) + this.getByteAt(data, 3); - if (lng < 0) { - lng += 4294967296; - } - return lng; - }; - - ImageTextMode.prototype.getByteAt = function(data, offset) { - return data.charCodeAt(offset) & 0xFF; - }; - - ImageTextMode.prototype.getWidth = function() { - var max, y, _i, _ref; - max = 0; - for (y = _i = 0, _ref = this.screen.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; y = 0 <= _ref ? ++_i : --_i) { - if ((this.screen[y] != null) && this.screen[y].length > max) { - max = this.screen[y].length; + function ImageTextModePaletteVGA(options) { + var k, v; + ImageTextModePaletteVGA.__super__.constructor.apply(this, arguments); + this.colors = [[0x00, 0x00, 0x00], [0x00, 0x00, 0xaa], [0x00, 0xaa, 0x00], [0x00, 0xaa, 0xaa], [0xaa, 0x00, 0x00], [0xaa, 0x00, 0xaa], [0xaa, 0x55, 0x00], [0xaa, 0xaa, 0xaa], [0x55, 0x55, 0x55], [0x55, 0x55, 0xff], [0x55, 0xff, 0x55], [0x55, 0xff, 0xff], [0xff, 0x55, 0x55], [0xff, 0x55, 0xff], [0xff, 0xff, 0x55], [0xff, 0xff, 0xff]]; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; } } - return max; - }; - ImageTextMode.prototype.getHeight = function() { - return this.screen.length; - }; + return ImageTextModePaletteVGA; - ImageTextMode.prototype.parsePaletteData = function(data) { - var b, colors, g, i, r, _i; - colors = []; - for (i = _i = 0; _i <= 45; i = _i += 3) { - r = this.getByteAt(data, i); - r = r << 2 | r >> 4; - g = this.getByteAt(data, i + 1); - g = g << 2 | g >> 4; - b = this.getByteAt(data, i + 2); - b = b << 2 | b >> 4; - colors.push([r, g, b]); - } - return this.palette = new ImageTextModePalette({ - colors: colors - }); - }; + })(this.ImageTextModePalette); - ImageTextMode.prototype.parseFontData = function(data, height) { - var chars, chr, i, j, _i, _j, _ref, _ref1; - if (height == null) { - height = 16; - } - chars = []; - for (i = _i = 0, _ref = data.length / height - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { - chr = []; - for (j = _j = 0, _ref1 = height - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; j = 0 <= _ref1 ? ++_j : --_j) { - chr.push(this.getByteAt(data, i * height + j)); + this.ImageTextModePaletteANSI = (function(_super) { + __extends(ImageTextModePaletteANSI, _super); + + function ImageTextModePaletteANSI(options) { + var k, v; + ImageTextModePaletteANSI.__super__.constructor.apply(this, arguments); + this.colors = [[0x00, 0x00, 0x00], [0xaa, 0x00, 0x00], [0x00, 0xaa, 0x00], [0xaa, 0x55, 0x00], [0x00, 0x00, 0xaa], [0xaa, 0x00, 0xaa], [0x00, 0xaa, 0xaa], [0xaa, 0xaa, 0xaa], [0x55, 0x55, 0x55], [0xff, 0x55, 0x55], [0x55, 0xff, 0x55], [0xff, 0xff, 0x55], [0x55, 0x55, 0xff], [0xff, 0x55, 0xff], [0x55, 0xff, 0xff], [0xff, 0xff, 0xff]]; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; } - chars.push(chr); } - return this.font = new ImageTextModeFont({ - chars: chars, - height: height - }); - }; - ImageTextMode.prototype.renderCanvas = function(canvasElem) { - var bg, canvas, chr, ctx, cx, cy, fg, h, i, j, line, pixel, px, py, w, _i, _j, _k, _l, _ref, _ref1, _ref2, _ref3; - w = this.getWidth() * this.font.width; - h = this.getHeight() * this.font.height; - canvas = document.createElement('canvas'); - canvas.setAttribute('width', w); - canvas.setAttribute('height', h); - ctx = canvas.getContext('2d'); - for (cy = _i = 0, _ref = this.screen.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; cy = 0 <= _ref ? ++_i : --_i) { - if (this.screen[cy] == null) { - continue; + return ImageTextModePaletteANSI; + + })(this.ImageTextModePalette); + + this.ImageTextModeFont = (function() { + function ImageTextModeFont(options) { + var k, v; + this.chars = []; + this.width = 8; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; } - for (cx = _j = 0, _ref1 = this.screen[cy].length - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; cx = 0 <= _ref1 ? ++_j : --_j) { - pixel = this.screen[cy][cx]; - if (pixel == null) { + } + + return ImageTextModeFont; + + })(); + + this.ImageTextModeFont8x16 = (function(_super) { + __extends(ImageTextModeFont8x16, _super); + + function ImageTextModeFont8x16(options) { + var k, v; + ImageTextModeFont8x16.__super__.constructor.apply(this, arguments); + this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00], [0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00], [0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00], [0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00], [0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x70, 0x00, 0x00], [0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x70, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x38, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x36, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00], [0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x18, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00], [0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x66, 0xce, 0x9a, 0x3f, 0x06, 0x06, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44], [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], [0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00], [0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x6c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x3c, 0x66, 0x0c, 0x18, 0x32, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]]; + this.height = 16; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + return ImageTextModeFont8x16; + + })(this.ImageTextModeFont); + + this.ImageTextModeFont8x8 = (function(_super) { + __extends(ImageTextModeFont8x8, _super); + + function ImageTextModeFont8x8(options) { + var k, v; + ImageTextModeFont8x8.__super__.constructor.apply(this, arguments); + this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e], [0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e], [0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00], [0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00], [0x38, 0x7c, 0x38, 0xfe, 0xfe, 0xd6, 0x10, 0x38], [0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x7c, 0x10, 0x38], [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00], [0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff], [0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00], [0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff], [0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78], [0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18], [0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0], [0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0], [0x18, 0xdb, 0x3c, 0xe7, 0xe7, 0x3c, 0xdb, 0x18], [0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00], [0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00], [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18], [0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00], [0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00], [0x3e, 0x61, 0x3c, 0x66, 0x66, 0x3c, 0x86, 0x7c], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00], [0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff], [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00], [0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00], [0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00], [0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00], [0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00], [0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00], [0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00], [0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00], [0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00], [0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00], [0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00], [0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00], [0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00], [0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00], [0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00], [0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00], [0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30], [0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00], [0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00], [0x38, 0x6c, 0xc6, 0xd6, 0xc6, 0x6c, 0x38, 0x00], [0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00], [0x7c, 0xc6, 0x06, 0x1c, 0x30, 0x66, 0xfe, 0x00], [0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00], [0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00], [0xfe, 0xc0, 0xc0, 0xfc, 0x06, 0xc6, 0x7c, 0x00], [0x38, 0x60, 0xc0, 0xfc, 0xc6, 0xc6, 0x7c, 0x00], [0xfe, 0xc6, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00], [0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0x00], [0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00], [0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00], [0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30], [0x06, 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x06, 0x00], [0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00], [0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00], [0x7c, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x00], [0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00], [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00], [0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00], [0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00], [0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00], [0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00], [0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00], [0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3a, 0x00], [0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00], [0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00], [0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00], [0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00], [0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00], [0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00], [0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], [0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xce, 0x7c, 0x0e], [0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00], [0x3c, 0x66, 0x30, 0x18, 0x0c, 0x66, 0x3c, 0x00], [0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x3c, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00], [0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc6, 0x00], [0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x00], [0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00], [0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00], [0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00], [0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00], [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff], [0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0xe0, 0x60, 0x7c, 0x66, 0x66, 0x66, 0xdc, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc6, 0x7c, 0x00], [0x1c, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x3c, 0x66, 0x60, 0xf8, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], [0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00], [0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x06, 0x00, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c], [0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00], [0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0x00], [0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0], [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e], [0x00, 0x00, 0xdc, 0x76, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x7e, 0xc0, 0x7c, 0x06, 0xfc, 0x00], [0x30, 0x30, 0xfc, 0x30, 0x30, 0x36, 0x1c, 0x00], [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00], [0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc], [0x00, 0x00, 0x7e, 0x4c, 0x18, 0x32, 0x7e, 0x00], [0x0e, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0e, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00], [0x70, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x70, 0x00], [0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00], [0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x0c, 0x78], [0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x0c, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x7c, 0x82, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0xc6, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x30, 0x18, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x00, 0x00, 0x7e, 0xc0, 0xc0, 0x7e, 0x0c, 0x38], [0x7c, 0x82, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0xc6, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x30, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x7c, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00], [0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], [0x38, 0x6c, 0x7c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], [0x18, 0x30, 0xfe, 0xc0, 0xf8, 0xc0, 0xfe, 0x00], [0x00, 0x00, 0x7e, 0x18, 0x7e, 0xd8, 0x7e, 0x00], [0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00], [0x7c, 0x82, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x30, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x78, 0x84, 0x00, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x60, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc], [0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18], [0x38, 0x6c, 0x64, 0xf0, 0x60, 0x66, 0xfc, 0x00], [0x66, 0x66, 0x3c, 0x7e, 0x18, 0x7e, 0x18, 0x18], [0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7], [0x0e, 0x1b, 0x18, 0x3c, 0x18, 0xd8, 0x70, 0x00], [0x18, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00], [0x0c, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x18, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x00], [0x76, 0xdc, 0x00, 0xe6, 0xf6, 0xde, 0xce, 0x00], [0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00], [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00], [0x18, 0x00, 0x18, 0x18, 0x30, 0x63, 0x3e, 0x00], [0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0x00, 0x00], [0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x00, 0x00], [0x63, 0xe6, 0x6c, 0x7e, 0x33, 0x66, 0xcc, 0x0f], [0x63, 0xe6, 0x6c, 0x7a, 0x36, 0x6a, 0xdf, 0x06], [0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x00], [0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00], [0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00], [0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88], [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], [0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36], [0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36], [0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00], [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36], [0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36], [0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36], [0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36], [0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], [0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36], [0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00], [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36], [0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff], [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], [0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00], [0x78, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xcc, 0x00], [0xfe, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00], [0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00], [0xfe, 0xc6, 0x60, 0x30, 0x60, 0xc6, 0xfe, 0x00], [0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0xc0], [0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00], [0x7e, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x7e], [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00], [0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00], [0x0e, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x3c, 0x00], [0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00], [0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0], [0x1e, 0x30, 0x60, 0x7e, 0x60, 0x30, 0x1e, 0x00], [0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00], [0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00], [0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x7e, 0x00], [0x30, 0x18, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00], [0x0c, 0x18, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00], [0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70], [0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00], [0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00], [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00], [0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c], [0x6c, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00], [0x78, 0x0c, 0x18, 0x30, 0x7c, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]]; + this.height = 8; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + return ImageTextModeFont8x8; + + })(this.ImageTextModeFont); + + this.ImageTextModeFontAmiga = (function(_super) { + __extends(ImageTextModeFontAmiga, _super); + + function ImageTextModeFontAmiga(options) { + var k, v; + ImageTextModeFontAmiga.__super__.constructor.apply(this, arguments); + this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x83, 0x83, 0x39, 0x39, 0x21, 0x21, 0x29, 0x29, 0x21, 0x21, 0x3f, 0x3f, 0x87, 0x87, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0xff, 0xff], [0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xff, 0xff], [0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff], [0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x9f, 0x9f, 0x91, 0x91, 0x99, 0x99, 0x99, 0x99, 0xc1, 0xc1, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x9c, 0x9c, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x9c, 0x9c, 0xff, 0xff], [0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x9c, 0x9c, 0x88, 0x88, 0x80, 0x80, 0x94, 0x94, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff], [0x9c, 0x9c, 0x8c, 0x8c, 0x84, 0x84, 0x90, 0x90, 0x98, 0x98, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x91, 0x91, 0xc0, 0xc0, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x8f, 0x8f, 0xc3, 0xc3, 0xf1, 0xf1, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x81, 0x81, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xc3, 0xc3, 0xe7, 0xe7, 0xff, 0xff], [0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x94, 0x94, 0x80, 0x80, 0x88, 0x88, 0x9c, 0x9c, 0xff, 0xff], [0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x3c, 0x3c, 0xff, 0xff], [0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x80, 0x80, 0xf9, 0xf9, 0xf3, 0xf3, 0xe7, 0xe7, 0xcf, 0xcf, 0x9f, 0x9f, 0x80, 0x80, 0xff, 0xff], [0xc3, 0xc3, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xc3, 0xc3, 0xff, 0xff], [0x3f, 0x3f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe7, 0xe7, 0xf3, 0xf3, 0xf9, 0xf9, 0xfc, 0xfc, 0xff, 0xff], [0xc3, 0xc3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xc3, 0xc3, 0xff, 0xff], [0xf7, 0xf7, 0xe3, 0xe3, 0xc9, 0xc9, 0x9c, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00], [0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00], [0x18, 0x18, 0x3e, 0x3e, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0xac, 0xac, 0xd8, 0xd8, 0x36, 0x36, 0x6a, 0x6a, 0xcc, 0xcc, 0x00, 0x00], [0x38, 0x38, 0x6c, 0x6c, 0x68, 0x68, 0x76, 0x76, 0xdc, 0xdc, 0xce, 0xce, 0x7b, 0x7b, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x3c, 0x3c, 0xff, 0xff, 0x3c, 0x3c, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x38, 0x38, 0x78, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x1c, 0x1c, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x3c, 0x3c, 0x6c, 0x6c, 0xcc, 0xcc, 0xfe, 0xfe, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x7c, 0x7c, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x30, 0x30, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7e, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x0c, 0x0c, 0x38, 0x38, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00], [0x7c, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xd6, 0xd6, 0xde, 0xde, 0xc0, 0xc0, 0x78, 0x78, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00], [0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x00, 0x00], [0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x60, 0x60, 0x6e, 0x6e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0xc6, 0xc6, 0xcc, 0xcc, 0xd8, 0xd8, 0xf0, 0xf0, 0xd8, 0xd8, 0xcc, 0xcc, 0xc6, 0xc6, 0x00, 0x00], [0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0xc6, 0xc6, 0xee, 0xee, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0xc6, 0xc6, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x78, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdc, 0xdc, 0x7e, 0x7e, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x70, 0x70, 0x3c, 0x3c, 0x0e, 0x0e, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0xee, 0xee, 0xc6, 0xc6, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0xfe, 0xfe, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0xfe, 0xfe, 0x00, 0x00], [0x3c, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x3c, 0x00, 0x00], [0xc0, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03, 0x00, 0x00], [0x3c, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x3c, 0x00, 0x00], [0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe], [0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x3c, 0x3c], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x78, 0x78], [0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xec, 0xec, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60], [0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x06, 0x06], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x00, 0x00], [0x30, 0x30, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1c, 0x1c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0x6c, 0x6c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x00, 0x00], [0x72, 0x72, 0x9c, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0xc3, 0xc3, 0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0x00, 0x00], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe7, 0xe7, 0xdb, 0xdb, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe0, 0xe0, 0xc3, 0xc3, 0xc3, 0xc3, 0x90, 0x90, 0x83, 0x83, 0x33, 0x33, 0x30, 0x30, 0xff, 0xff], [0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xf3, 0xf3, 0xe7, 0xe7], [0xcf, 0xcf, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x09, 0x09, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff], [0x8e, 0x8e, 0x31, 0x31, 0x19, 0x19, 0x09, 0x09, 0x21, 0x21, 0x31, 0x31, 0x39, 0x39, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x3c, 0x3c, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xff, 0xff, 0x39, 0x39, 0x93, 0x93, 0xc7, 0xc7, 0x93, 0x93, 0x39, 0x39, 0xff, 0xff, 0xff, 0xff], [0xc0, 0xc0, 0x99, 0x99, 0x91, 0x91, 0x81, 0x81, 0x89, 0x89, 0x99, 0x99, 0x03, 0x03, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0xdb, 0xdb, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf9, 0xf9, 0xf7, 0xf7, 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x3f, 0x3f, 0x3f, 0x3f, 0x03, 0x03, 0x39, 0x39, 0x03, 0x03, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x9f, 0x9f], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x80], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x0c, 0x3e, 0x3e, 0x6c, 0x6c, 0x3e, 0x3e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00], [0x1c, 0x1c, 0x36, 0x36, 0x30, 0x30, 0x78, 0x78, 0x30, 0x30, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x42, 0x42, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x7e, 0x81, 0x81, 0x9d, 0x9d, 0xb1, 0xb1, 0x9d, 0x9d, 0x81, 0x81, 0x7e, 0x7e, 0x00, 0x00], [0x1c, 0x1c, 0x24, 0x24, 0x44, 0x44, 0x3c, 0x3c, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00], [0x3e, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x7e, 0x81, 0x81, 0xb9, 0xb9, 0xa5, 0xa5, 0xb9, 0xb9, 0xa5, 0xa5, 0x81, 0x81, 0x7e, 0x7e], [0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00], [0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x0c, 0x0c, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x7f, 0x60, 0x60], [0x3e, 0x3e, 0x7a, 0x7a, 0x7a, 0x7a, 0x3a, 0x3a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30], [0x30, 0x30, 0x70, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x38, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00], [0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x32, 0x32, 0x66, 0x66, 0xcf, 0xcf, 0x02, 0x02], [0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x3e, 0x3e, 0x62, 0x62, 0xc4, 0xc4, 0x0e, 0x0e], [0xc0, 0xc0, 0x23, 0x23, 0x66, 0x66, 0x2c, 0x2c, 0xd9, 0xd9, 0x33, 0x33, 0x67, 0x67, 0x01, 0x01], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x1f, 0x1f, 0x3c, 0x3c, 0x3c, 0x3c, 0x6f, 0x6f, 0x7c, 0x7c, 0xcc, 0xcc, 0xcf, 0xcf, 0x00, 0x00], [0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x0c, 0x0c, 0x18, 0x18], [0x30, 0x30, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0xf6, 0xf6, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00], [0x71, 0x71, 0xce, 0xce, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0xc3, 0xc3, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x3f, 0x3f, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0xfc, 0xfc, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x08, 0x08, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xfc, 0xc6, 0xc6, 0xfc, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x60, 0x60], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x1b, 0x1b, 0x7f, 0x7f, 0xd8, 0xd8, 0x77, 0x77, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x18, 0x18], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x60, 0x60, 0xfc, 0xfc, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x02, 0x02, 0x7c, 0x7c, 0xce, 0xce, 0xd6, 0xd6, 0xe6, 0xe6, 0x7c, 0x7c, 0x80, 0x80], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30]]; + this.height = 16; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + return ImageTextModeFontAmiga; + + })(this.ImageTextModeFont); + + this.ImageTextMode = (function() { + ImageTextMode.VERSION = '0.01'; + + function ImageTextMode(options) { + var k, v; + this.screen = []; + this.palette = new ImageTextModePaletteVGA(); + this.font = new ImageTextModeFont8x16(); + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextMode.prototype.parseUrl = function(url) { + var content, req; + req = new XMLHttpRequest(); + req.open('GET', url, false); + req.overrideMimeType('text/plain; charset=x-user-defined'); + req.send(null); + content = req.status === 200 || req.status === 0 ? req.responseText : ''; + return this.parse(content); + }; + + ImageTextMode.prototype.unpackShort = function(data) { + var shrt; + shrt = (this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); + if (shrt < 0) { + shrt += 65536; + } + return shrt; + }; + + ImageTextMode.prototype.unpackLong = function(data) { + var lng; + lng = (((this.getByteAt(data, 0) << 8) + this.getByteAt(data, 1) << 8) + this.getByteAt(data, 2) << 8) + this.getByteAt(data, 3); + if (lng < 0) { + lng += 4294967296; + } + return lng; + }; + + ImageTextMode.prototype.getByteAt = function(data, offset) { + return data.charCodeAt(offset) & 0xFF; + }; + + ImageTextMode.prototype.getWidth = function() { + var max, y, _i, _ref; + max = 0; + for (y = _i = 0, _ref = this.screen.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; y = 0 <= _ref ? ++_i : --_i) { + if ((this.screen[y] != null) && this.screen[y].length > max) { + max = this.screen[y].length; + } + } + return max; + }; + + ImageTextMode.prototype.getHeight = function() { + return this.screen.length; + }; + + ImageTextMode.prototype.parsePaletteData = function(data) { + var b, colors, g, i, r, _i; + colors = []; + for (i = _i = 0; _i <= 45; i = _i += 3) { + r = this.getByteAt(data, i); + r = r << 2 | r >> 4; + g = this.getByteAt(data, i + 1); + g = g << 2 | g >> 4; + b = this.getByteAt(data, i + 2); + b = b << 2 | b >> 4; + colors.push([r, g, b]); + } + return this.palette = new ImageTextModePalette({ + colors: colors + }); + }; + + ImageTextMode.prototype.parseFontData = function(data, height) { + var chars, chr, i, j, _i, _j, _ref, _ref1; + if (height == null) { + height = 16; + } + chars = []; + for (i = _i = 0, _ref = data.length / height - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { + chr = []; + for (j = _j = 0, _ref1 = height - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; j = 0 <= _ref1 ? ++_j : --_j) { + chr.push(this.getByteAt(data, i * height + j)); + } + chars.push(chr); + } + return this.font = new ImageTextModeFont({ + chars: chars, + height: height + }); + }; + + ImageTextMode.prototype.renderCanvas = function(canvasElem) { + var bg, canvas, chr, ctx, cx, cy, fg, h, i, j, line, pixel, px, py, w, _i, _j, _k, _l, _ref, _ref1, _ref2, _ref3; + w = this.getWidth() * this.font.width; + h = this.getHeight() * this.font.height; + canvas = document.createElement('canvas'); + canvas.setAttribute('width', w); + canvas.setAttribute('height', h); + ctx = canvas.getContext('2d'); + for (cy = _i = 0, _ref = this.screen.length; 0 <= _ref ? _i < _ref : _i > _ref; cy = 0 <= _ref ? ++_i : --_i) { + if (this.screen[cy] == null) { continue; } - if (pixel.attr != null) { - fg = pixel.attr & 15; - bg = (pixel.attr & 240) >> 4; - } else { - fg = pixel.fg; - bg = pixel.bg; - } - px = cx * this.font.width; - py = cy * this.font.height; - ctx.fillStyle = this.palette.toRgbaString(this.palette.colors[bg]); - ctx.fillRect(px, py, this.font.width, this.font.height); - ctx.fillStyle = this.palette.toRgbaString(this.palette.colors[fg]); - chr = this.font.chars[pixel.ch.charCodeAt(0) & 0xff]; - for (i = _k = 0, _ref2 = this.font.height - 1; 0 <= _ref2 ? _k <= _ref2 : _k >= _ref2; i = 0 <= _ref2 ? ++_k : --_k) { - line = chr[i]; - for (j = _l = 0, _ref3 = this.font.width - 1; 0 <= _ref3 ? _l <= _ref3 : _l >= _ref3; j = 0 <= _ref3 ? ++_l : --_l) { - if (line & (1 << this.font.width - 1 - j)) { - ctx.fillRect(px + j, py + i, 1, 1); + for (cx = _j = 0, _ref1 = this.screen[cy].length; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; cx = 0 <= _ref1 ? ++_j : --_j) { + pixel = this.screen[cy][cx]; + if (pixel == null) { + continue; + } + if (pixel.attr != null) { + fg = pixel.attr & 15; + bg = (pixel.attr & 240) >> 4; + } else { + fg = pixel.fg; + bg = pixel.bg; + } + px = cx * this.font.width; + py = cy * this.font.height; + ctx.fillStyle = this.palette.toRgbaString(this.palette.colors[bg]); + ctx.fillRect(px, py, this.font.width, this.font.height); + ctx.fillStyle = this.palette.toRgbaString(this.palette.colors[fg]); + chr = this.font.chars[pixel.ch.charCodeAt(0) & 0xff]; + for (i = _k = 0, _ref2 = this.font.height; 0 <= _ref2 ? _k < _ref2 : _k > _ref2; i = 0 <= _ref2 ? ++_k : --_k) { + line = chr[i]; + for (j = _l = 0, _ref3 = this.font.width; 0 <= _ref3 ? _l < _ref3 : _l > _ref3; j = 0 <= _ref3 ? ++_l : --_l) { + if (line & (1 << this.font.width - 1 - j)) { + ctx.fillRect(px + j, py + i, 1, 1); + } } } } } - } - canvasElem.setAttribute('width', w); - canvasElem.setAttribute('height', h); - ctx = canvasElem.getContext('2d'); - return ctx.drawImage(canvas, 0, 0); - }; - - ImageTextMode.prototype.toBinaryArray = function(str) { - var buf, bufView, i, strLen; - buf = new ArrayBuffer(str.length * 2); - bufView = new Uint8Array(buf); - i = 0; - strLen = str.length; - while (i < strLen) { - bufView[i] = str.charCodeAt(i); - i++; - } - return buf; - }; - - return ImageTextMode; - -})(); - -this.ImageTextModeXBin = (function(_super) { - var ATTRIBUTE_COMPRESSION, CHARACTER_COMPRESSION, COMPRESSED, COMPRESSION_COUNTER, COMPRESSION_TYPE, FIVETWELVE_CHARS, FONT, FULL_COMPRESSION, NON_BLINK, NO_COMPRESSION, PALETTE; - - __extends(ImageTextModeXBin, _super); - - PALETTE = 1; - - FONT = 2; - - COMPRESSED = 4; - - NON_BLINK = 8; - - FIVETWELVE_CHARS = 16; - - NO_COMPRESSION = 0; - - CHARACTER_COMPRESSION = 64; - - ATTRIBUTE_COMPRESSION = 128; - - FULL_COMPRESSION = 192; - - COMPRESSION_TYPE = 192; - - COMPRESSION_COUNTER = 63; - - function ImageTextModeXBin(options) { - var k, v; - ImageTextModeXBin.__super__.constructor.apply(this, arguments); - this.header = { - width: 0, - height: 0, - fontisze: 0, - flags: 0 + canvasElem.setAttribute('width', w); + canvasElem.setAttribute('height', h); + ctx = canvasElem.getContext('2d'); + return ctx.drawImage(canvas, 0, 0); }; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - ImageTextModeXBin.prototype.parse = function(content) { - var fontlength, headerData, offset; - this.screen = []; - headerData = content.substr(0, 11); - if (headerData.length === !11 || !headerData.match('^XBIN\x1a')) { - throw new Error('File is not an XBin'); + ImageTextMode.prototype.toBinaryArray = function(str) { + var buf, bufView, i, strLen; + buf = new ArrayBuffer(str.length * 2); + bufView = new Uint8Array(buf); + i = 0; + strLen = str.length; + while (i < strLen) { + bufView[i] = str.charCodeAt(i); + i++; + } + return buf; + }; + + return ImageTextMode; + + })(); + + this.ImageTextModeXBin = (function(_super) { + var ATTRIBUTE_COMPRESSION, CHARACTER_COMPRESSION, COMPRESSED, COMPRESSION_COUNTER, COMPRESSION_TYPE, FIVETWELVE_CHARS, FONT, FULL_COMPRESSION, NON_BLINK, NO_COMPRESSION, PALETTE; + + __extends(ImageTextModeXBin, _super); + + PALETTE = 1; + + FONT = 2; + + COMPRESSED = 4; + + NON_BLINK = 8; + + FIVETWELVE_CHARS = 16; + + NO_COMPRESSION = 0; + + CHARACTER_COMPRESSION = 64; + + ATTRIBUTE_COMPRESSION = 128; + + FULL_COMPRESSION = 192; + + COMPRESSION_TYPE = 192; + + COMPRESSION_COUNTER = 63; + + function ImageTextModeXBin(options) { + var k, v; + ImageTextModeXBin.__super__.constructor.apply(this, arguments); + this.header = { + width: 0, + height: 0, + fontisze: 0, + flags: 0 + }; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } } - this.header.width = this.unpackShort(headerData.substr(5, 2)); - this.header.height = this.unpackShort(headerData.substr(7, 2)); - this.header.fontsize = this.getByteAt(headerData.substr(9, 1)); - this.header.flags = this.getByteAt(headerData.substr(10, 1)); - offset = 11; - if (this.header.flags & PALETTE) { - this.parsePaletteData(content.substr(offset, 48)); - offset += 48; - } - if (this.header.flags & FONT) { - fontlength = this.header.fontsize; - if (this.header.flags & FIVETWELVE_CHARS) { - fontlength *= 512; + + ImageTextModeXBin.prototype.parse = function(content) { + var fontlength, headerData, offset; + this.screen = []; + headerData = content.substr(0, 11); + if (headerData.length !== 11 || !headerData.match('^XBIN\x1a')) { + throw new Error('File is not an XBin'); + } + this.header.width = this.unpackShort(headerData.substr(5, 2)); + this.header.height = this.unpackShort(headerData.substr(7, 2)); + this.header.fontsize = this.getByteAt(headerData.substr(9, 1)); + this.header.flags = this.getByteAt(headerData.substr(10, 1)); + offset = 11; + if (this.header.flags & PALETTE) { + this.parsePaletteData(content.substr(offset, 48)); + offset += 48; + } + if (this.header.flags & FONT) { + fontlength = this.header.fontsize; + if (this.header.flags & FIVETWELVE_CHARS) { + fontlength *= 512; + } else { + fontlength *= 256; + } + this.parseFontData(content.substr(offset, fontlength), this.header.fontsize); + offset += fontlength; + } + if (this.header.flags & COMPRESSED) { + return this._parse_compressed(content.substr(offset)); } else { - fontlength *= 256; + return this._parse_uncompressed(content.substr(offset)); } - this.parseFontData(content.substr(offset, fontlength), this.header.fontsize); - offset += fontlength; - } - if (this.header.flags & COMPRESSED) { - return this._parse_compressed(content.substr(offset)); - } else { - return this._parse_uncompressed(content.substr(offset)); - } - }; + }; - ImageTextModeXBin.prototype._parse_compressed = function(data) { - var attr, ch, counter, info, type, x, y, _results; - x = 0; - y = 0; - this.screen[y] = []; - data = data.split(''); - _results = []; - while (info = data.shift()) { - info = this.getByteAt(info, 0); - if (info === 26) { - break; - } - type = info & COMPRESSION_TYPE; - counter = (info & COMPRESSION_COUNTER) + 1; - ch = null; - attr = null; - _results.push((function() { - var _results1; - _results1 = []; - while (counter-- > 0) { - switch (type) { - case NO_COMPRESSION: - ch = data.shift(); - attr = data.shift(); - break; - case CHARACTER_COMPRESSION: - if (ch == null) { + ImageTextModeXBin.prototype._parse_compressed = function(data) { + var attr, ch, counter, info, type, x, y, _results; + x = 0; + y = 0; + this.screen[y] = []; + data = data.split(''); + _results = []; + while (info = data.shift()) { + info = this.getByteAt(info, 0); + if (info === 26) { + break; + } + type = info & COMPRESSION_TYPE; + counter = (info & COMPRESSION_COUNTER) + 1; + ch = null; + attr = null; + _results.push((function() { + var _results1; + _results1 = []; + while (counter-- > 0) { + switch (type) { + case NO_COMPRESSION: ch = data.shift(); - } - attr = data.shift(); - break; - case ATTRIBUTE_COMPRESSION: - if (attr == null) { attr = data.shift(); - } - ch = data.shift(); - break; - default: - if (ch == null) { + break; + case CHARACTER_COMPRESSION: + if (ch == null) { + ch = data.shift(); + } + attr = data.shift(); + break; + case ATTRIBUTE_COMPRESSION: + if (attr == null) { + attr = data.shift(); + } ch = data.shift(); - } - if (attr == null) { - attr = data.shift(); - } - } - this.screen[y][x] = { - ch: ch, - attr: this.getByteAt(attr, 0) - }; - x++; - if (x === this.header.width) { - x = 0; - y++; - if (y === this.header.height) { - break; + break; + default: + if (ch == null) { + ch = data.shift(); + } + if (attr == null) { + attr = data.shift(); + } } - if (this.screen[y] == null) { - _results1.push(this.screen[y] = []); + this.screen[y][x] = { + ch: ch, + attr: this.getByteAt(attr, 0) + }; + x++; + if (x === this.header.width) { + x = 0; + y++; + if (y === this.header.height) { + break; + } + if (this.screen[y] == null) { + _results1.push(this.screen[y] = []); + } else { + _results1.push(void 0); + } } else { _results1.push(void 0); } - } else { - _results1.push(void 0); } - } - return _results1; - }).call(this)); - } - return _results; - }; - - ImageTextModeXBin.prototype._parse_uncompressed = function(data) { - var attr, ch, i, x, y, _i, _ref, _results; - x = 0; - y = 0; - this.screen[y] = []; - _results = []; - for (i = _i = 0, _ref = data.length - 2; _i <= _ref; i = _i += 2) { - ch = data.substr(i, 1); - if (ch === "\x1a") { - break; + return _results1; + }).call(this)); } - attr = this.getByteAt(data, i + 1); - this.screen[y][x] = { - 'ch': ch, - 'attr': attr - }; - x++; - if (x === this.header.width) { - x = 0; - y++; - if (y === this.header.height) { + return _results; + }; + + ImageTextModeXBin.prototype._parse_uncompressed = function(data) { + var attr, ch, i, x, y, _i, _ref, _results; + x = 0; + y = 0; + this.screen[y] = []; + _results = []; + for (i = _i = 0, _ref = data.length - 2; _i <= _ref; i = _i += 2) { + ch = data.substr(i, 1); + if (ch === "\x1a") { break; } - if (this.screen[y] == null) { - _results.push(this.screen[y] = []); - } else { - _results.push(void 0); - } - } else { - _results.push(void 0); - } - } - return _results; - }; - - ImageTextModeXBin.prototype.getWidth = function() { - return this.header.width; - }; - - ImageTextModeXBin.prototype.getHeight = function() { - return this.header.height; - }; - - return ImageTextModeXBin; - -})(this.ImageTextMode); - -this.ImageTextModeANSI = (function(_super) { - var ANSI_BG, ANSI_BG_INTENSE, ANSI_CSI, ANSI_CUR_DOWN, ANSI_ESC, ANSI_FG, ANSI_FG_INTENSE, ANSI_RESET, ANSI_RETURN, ANSI_SEP, ANSI_TEXT_PROP; - - __extends(ImageTextModeANSI, _super); - - ANSI_ESC = String.fromCharCode(0x1b); - - ANSI_CSI = ANSI_ESC + '['; - - ANSI_TEXT_PROP = 'm'; - - ANSI_RESET = '0'; - - ANSI_FG = '3'; - - ANSI_BG = '4'; - - ANSI_FG_INTENSE = '9'; - - ANSI_BG_INTENSE = '10'; - - ANSI_CUR_DOWN = 'B'; - - ANSI_SEP = ';'; - - ANSI_RETURN = 'A'; - - function ImageTextModeANSI(options) { - var k, v; - ImageTextModeANSI.__super__.constructor.apply(this, arguments); - this.palette = new ImageTextModePaletteANSI; - this.tabstop = 8; - this.linewrap = 80; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextModeANSI.prototype.write = function() { - var attr, content, max_x, pixel, prevattr, x, y, _i, _j, _ref, _ref1; - content = "" + ANSI_CSI + "2J"; - for (y = _i = 0, _ref = this.screen.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; y = 0 <= _ref ? ++_i : --_i) { - if (this.screen[y] == null) { - content += "\n"; - } - if (this.screen[y] == null) { - continue; - } - for (x = _j = 0, _ref1 = this.getWidth() - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; x = 0 <= _ref1 ? ++_j : --_j) { - pixel = this.screen[y][x]; - if (pixel == null) { - pixel = { - ch: ' ', - attr: 7 - }; - } - attr = this.gen_args(pixel.attr); - if (attr !== prevattr) { - content += "" + ANSI_CSI + "0;" + attr + ANSI_TEXT_PROP; - prevattr = attr; - } - content += pixel.ch != null ? pixel.ch : ' '; - max_x = x; - } - } - content += "" + ANSI_CSI + "0m"; - return this.toBinaryArray(content); - }; - - ImageTextModeANSI.prototype.gen_args = function(attr) { - var a, attrs, bg, bl, fg, intense, _i, _len, _ref; - fg = 30 + (attr & 7); - bg = 40 + ((attr & 112) >> 4); - bl = attr & 128 ? 5 : ''; - intense = attr & 8 ? 1 : ''; - _ref = [fg, bg, bl, intense]; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - a = _ref[_i]; - if (a !== '') { - attrs = a; - } - } - return [fg, bg, bl, intense].join(";"); - }; - - ImageTextModeANSI.prototype.parse = function(content) { - var arg, args, ch, i, _i, _j, _k, _l, _len, _m, _n, _o, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _results; - this.screen = []; - this.state = 0; - this.x = 0; - this.y = 0; - this.save_x = 0; - this.save_y = 0; - this.attr = 7; - this.argbuf = ''; - content = content.split(''); - _results = []; - while (ch = content.shift()) { - if (this.state === 0) { - switch (ch) { - case "\x1a": - _results.push(this.state = 3); - break; - case "\x1b": - _results.push(this.state = 1); - break; - case "\n": - this.x = 0; - _results.push(this.y++); - break; - case "\r": - break; - case "\t": - i = (this.x + 1) % this.tabstop; - _results.push((function() { - var _results1; - _results1 = []; - while (i-- > 0) { - _results1.push(this.putpixel(' ')); - } - return _results1; - }).call(this)); - break; - default: - _results.push(this.putpixel(ch)); - } - } else if (this.state === 1) { - if (ch !== "[") { - this.putpixel("\x1b"); - this.putpixel("["); - _results.push(this.state = 0); - } else { - _results.push(this.state = 2); - } - } else if (this.state === 2) { - if (ch.match('[A-Za-z]')) { - args = (function() { - var _i, _len, _ref, _results1; - _ref = this.argbuf.split(';'); - _results1 = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - i = _ref[_i]; - _results1.push(parseInt(i)); - } - return _results1; - }).call(this); - switch (ch) { - case "m": - for (_i = 0, _len = args.length; _i < _len; _i++) { - arg = args[_i]; - if (arg === 0) { - this.attr = 7; - } else if (arg === 1) { - this.attr |= 8; - } else if (arg === 5) { - this.attr |= 128; - } else if ((30 <= arg && arg <= 37)) { - this.attr &= 248; - this.attr |= arg - 30; - } else if ((40 <= arg && arg <= 47)) { - this.attr &= 143; - this.attr |= (arg - 40) << 4; - } - } - break; - case "H": - case "f": - this.y = (args[0] || 1) - 1; - this.x = (args[1] || 1) - 1; - if (this.y < 0) { - this.y = 0; - } - if (this.x < 0) { - this.x = 0; - } - break; - case "A": - this.y -= args[0] || 1; - if (this.y < 0) { - this.y = 0; - } - break; - case "B": - this.y += args[0] || 1; - break; - case "C": - this.x += args[0] || 1; - break; - case "D": - this.x -= args[0] || 1; - if (this.x < 0) { - this.x = 0; - } - break; - case "E": - this.y += args[0] || 1; - this.x = 0; - break; - case "F": - this.y -= args[0] || 1; - if (this.y > 0) { - this.y = 0; - } - this.x = 0; - break; - case "G": - this.x = (args[0] || 1) - 1; - break; - case "s": - this.save_x = this.x; - this.save_y = this.y; - break; - case "u": - this.x = this.save_x; - this.y = this.save_y; - break; - case "J": - if (args.length === 0 || args[0] === 0) { - for (i = _j = _ref = this.y + 1, _ref1 = screen.length - 1; _ref <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = _ref <= _ref1 ? ++_j : --_j) { - this.screen[i] = null; - } - for (i = _k = _ref2 = this.x, _ref3 = screen[this.y].length - 1; _ref2 <= _ref3 ? _k <= _ref3 : _k >= _ref3; i = _ref2 <= _ref3 ? ++_k : --_k) { - this.screen[this.y][i] = null; - } - } else if (args[0] === 1) { - for (i = _l = 0, _ref4 = this.y - 1; 0 <= _ref4 ? _l <= _ref4 : _l >= _ref4; i = 0 <= _ref4 ? ++_l : --_l) { - this.screen[i] = null; - } - for (i = _m = 0, _ref5 = this.x; 0 <= _ref5 ? _m <= _ref5 : _m >= _ref5; i = 0 <= _ref5 ? ++_m : --_m) { - this.screen[this.y][i] = null; - } - } else if (args[0] === 2) { - this.x = 0; - this.y = 0; - this.screen = []; - } - break; - case "K": - if (args.length === 0 || args[0] === 0) { - for (i = _n = _ref6 = this.x, _ref7 = this.screen[this.y].length - 1; _ref6 <= _ref7 ? _n <= _ref7 : _n >= _ref7; i = _ref6 <= _ref7 ? ++_n : --_n) { - this.screen[this.y][i] = null; - } - } else if (args[0] === 1) { - for (i = _o = 0, _ref8 = this.x; 0 <= _ref8 ? _o <= _ref8 : _o >= _ref8; i = 0 <= _ref8 ? ++_o : --_o) { - this.screen[this.y][i] = null; - } - } else if (args[0] === 2) { - this.screen[this.y] = null; - } - } - this.argbuf = ''; - _results.push(this.state = 0); - } else { - _results.push(this.argbuf += ch); - } - } else if (this.state === 3) { - break; - } else { - _results.push(this.state = 0); - } - } - return _results; - }; - - ImageTextModeANSI.prototype.putpixel = function(ch) { - if (this.screen[this.y] == null) { - this.screen[this.y] = []; - } - this.screen[this.y][this.x] = { - ch: ch, - attr: this.attr - }; - if (++this.x >= this.linewrap) { - this.x = 0; - return this.y++; - } - }; - - return ImageTextModeANSI; - -})(this.ImageTextMode); - -this.ImageTextModeBin = (function(_super) { - __extends(ImageTextModeBin, _super); - - function ImageTextModeBin(options) { - var k, v; - ImageTextModeBin.__super__.constructor.apply(this, arguments); - this.linewrap = 160; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextModeBin.prototype.parse = function(content) { - var attr, ch, i, x, y, _i, _ref; - x = 0; - y = 0; - this.screen[y] = []; - for (i = _i = 0, _ref = content.length - 2; _i <= _ref; i = _i += 2) { - ch = content.substr(i, 1); - if (ch === "\x1a") { - break; - } - attr = this.getByteAt(content, i + 1); - this.screen[y][x] = { - 'ch': ch, - 'attr': attr - }; - x++; - if (x === this.linewrap) { - x = 0; - y++; - this.screen[y] = []; - } - } - if (this.screen[y].length === 0) { - return this.screen.pop(); - } - }; - - return ImageTextModeBin; - -})(this.ImageTextMode); - -this.ImageTextModeIDF = (function(_super) { - __extends(ImageTextModeIDF, _super); - - function ImageTextModeIDF(options) { - var k, v; - ImageTextModeIDF.__super__.constructor.apply(this, arguments); - this.header = { - x0: 0, - x1: 0, - y0: 0, - y1: 0 - }; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextModeIDF.prototype.parse = function(content) { - var attr, buffer, ch, eodata, headerData, i, info, len, offset, x, y, _i; - headerData = content.substr(0, 12); - if (headerData.length === !12 || !headerData.match('^\x041.4')) { - throw new Error('File is not an IDF'); - } - this.header.x0 = this.unpackShort(headerData.substr(4, 2)); - this.header.y0 = this.unpackShort(headerData.substr(6, 2)); - this.header.x1 = this.unpackShort(headerData.substr(8, 2)); - this.header.y1 = this.unpackShort(headerData.substr(10, 2)); - eodata = content.length - 48 - 4096; - if (content.substr(content.length - 128, 5) === 'SAUCE') { - eodata -= 128; - } - this.parseFontData(content.substr(eodata, 4096)); - this.parsePaletteData(content.substr(eodata + 4096, 48)); - y = 0; - x = 0; - this.screen[y] = []; - offset = 12; - while (offset < eodata) { - buffer = content.substr(offset, 2); - info = this.unpackShort(buffer); - offset += 2; - len = 1; - if (info === 1) { - len = this.unpackShort(content.substr(offset, 2)) & 255; - offset += 2; - buffer = content.substr(offset, 2); - offset += 2; - } - ch = buffer.substr(0, 1); - attr = this.getByteAt(buffer, 1); - for (i = _i = 1; 1 <= len ? _i <= len : _i >= len; i = 1 <= len ? ++_i : --_i) { + attr = this.getByteAt(data, i + 1); this.screen[y][x] = { 'ch': ch, 'attr': attr }; x++; - if (x > this.header.x1) { + if (x === this.header.width) { + x = 0; + y++; + if (y === this.header.height) { + break; + } + if (this.screen[y] == null) { + _results.push(this.screen[y] = []); + } else { + _results.push(void 0); + } + } else { + _results.push(void 0); + } + } + return _results; + }; + + ImageTextModeXBin.prototype.getWidth = function() { + return this.header.width; + }; + + ImageTextModeXBin.prototype.getHeight = function() { + return this.header.height; + }; + + return ImageTextModeXBin; + + })(this.ImageTextMode); + + this.ImageTextModeANSI = (function(_super) { + var ANSI_BG, ANSI_BG_INTENSE, ANSI_CSI, ANSI_CUR_DOWN, ANSI_ESC, ANSI_FG, ANSI_FG_INTENSE, ANSI_RESET, ANSI_RETURN, ANSI_SEP, ANSI_TEXT_PROP; + + __extends(ImageTextModeANSI, _super); + + ANSI_ESC = String.fromCharCode(0x1b); + + ANSI_CSI = ANSI_ESC + '['; + + ANSI_TEXT_PROP = 'm'; + + ANSI_RESET = '0'; + + ANSI_FG = '3'; + + ANSI_BG = '4'; + + ANSI_FG_INTENSE = '9'; + + ANSI_BG_INTENSE = '10'; + + ANSI_CUR_DOWN = 'B'; + + ANSI_SEP = ';'; + + ANSI_RETURN = 'A'; + + function ImageTextModeANSI(options) { + var k, v; + ImageTextModeANSI.__super__.constructor.apply(this, arguments); + this.palette = new ImageTextModePaletteANSI; + this.tabstop = 8; + this.linewrap = 80; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextModeANSI.prototype.write = function() { + var attr, content, max_x, pixel, prevattr, x, y, _i, _j, _ref, _ref1; + content = "" + ANSI_CSI + "2J"; + for (y = _i = 0, _ref = this.screen.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; y = 0 <= _ref ? ++_i : --_i) { + if (this.screen[y] == null) { + content += "\n"; + } + if (this.screen[y] == null) { + continue; + } + for (x = _j = 0, _ref1 = this.getWidth() - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; x = 0 <= _ref1 ? ++_j : --_j) { + pixel = this.screen[y][x]; + if (pixel == null) { + pixel = { + ch: ' ', + attr: 7 + }; + } + attr = this.gen_args(pixel.attr); + if (attr !== prevattr) { + content += "" + ANSI_CSI + "0;" + attr + ANSI_TEXT_PROP; + prevattr = attr; + } + content += pixel.ch != null ? pixel.ch : ' '; + max_x = x; + } + } + content += "" + ANSI_CSI + "0m"; + return this.toBinaryArray(content); + }; + + ImageTextModeANSI.prototype.gen_args = function(attr) { + var a, attrs, bg, bl, fg, intense, _i, _len, _ref; + fg = 30 + (attr & 7); + bg = 40 + ((attr & 112) >> 4); + bl = attr & 128 ? 5 : ''; + intense = attr & 8 ? 1 : ''; + _ref = [fg, bg, bl, intense]; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + a = _ref[_i]; + if (a !== '') { + attrs = a; + } + } + return [fg, bg, bl, intense].join(";"); + }; + + ImageTextModeANSI.prototype.parse = function(content) { + var arg, args, ch, i, _i, _j, _k, _l, _len, _m, _n, _o, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _results; + this.screen = []; + this.state = 0; + this.x = 0; + this.y = 0; + this.save_x = 0; + this.save_y = 0; + this.attr = 7; + this.argbuf = ''; + content = content.split(''); + _results = []; + while (ch = content.shift()) { + if (this.state === 0) { + switch (ch) { + case "\x1a": + _results.push(this.state = 3); + break; + case "\x1b": + _results.push(this.state = 1); + break; + case "\n": + this.x = 0; + _results.push(this.y++); + break; + case "\r": + break; + case "\t": + i = (this.x + 1) % this.tabstop; + _results.push((function() { + var _results1; + _results1 = []; + while (i-- > 0) { + _results1.push(this.putpixel(' ')); + } + return _results1; + }).call(this)); + break; + default: + _results.push(this.putpixel(ch)); + } + } else if (this.state === 1) { + if (ch !== "[") { + this.putpixel("\x1b"); + this.putpixel("["); + _results.push(this.state = 0); + } else { + _results.push(this.state = 2); + } + } else if (this.state === 2) { + if (ch.match('[A-Za-z]')) { + args = (function() { + var _i, _len, _ref, _results1; + _ref = this.argbuf.split(';'); + _results1 = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + i = _ref[_i]; + _results1.push(parseInt(i)); + } + return _results1; + }).call(this); + switch (ch) { + case "m": + for (_i = 0, _len = args.length; _i < _len; _i++) { + arg = args[_i]; + if (arg === 0) { + this.attr = 7; + } else if (arg === 1) { + this.attr |= 8; + } else if (arg === 5) { + this.attr |= 128; + } else if ((30 <= arg && arg <= 37)) { + this.attr &= 248; + this.attr |= arg - 30; + } else if ((40 <= arg && arg <= 47)) { + this.attr &= 143; + this.attr |= (arg - 40) << 4; + } + } + break; + case "H": + case "f": + this.y = (args[0] || 1) - 1; + this.x = (args[1] || 1) - 1; + if (this.y < 0) { + this.y = 0; + } + if (this.x < 0) { + this.x = 0; + } + break; + case "A": + this.y -= args[0] || 1; + if (this.y < 0) { + this.y = 0; + } + break; + case "B": + this.y += args[0] || 1; + break; + case "C": + this.x += args[0] || 1; + break; + case "D": + this.x -= args[0] || 1; + if (this.x < 0) { + this.x = 0; + } + break; + case "E": + this.y += args[0] || 1; + this.x = 0; + break; + case "F": + this.y -= args[0] || 1; + if (this.y > 0) { + this.y = 0; + } + this.x = 0; + break; + case "G": + this.x = (args[0] || 1) - 1; + break; + case "s": + this.save_x = this.x; + this.save_y = this.y; + break; + case "u": + this.x = this.save_x; + this.y = this.save_y; + break; + case "J": + if (args.length === 0 || args[0] === 0) { + for (i = _j = _ref = this.y + 1, _ref1 = screen.length - 1; _ref <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = _ref <= _ref1 ? ++_j : --_j) { + this.screen[i] = null; + } + for (i = _k = _ref2 = this.x, _ref3 = screen[this.y].length - 1; _ref2 <= _ref3 ? _k <= _ref3 : _k >= _ref3; i = _ref2 <= _ref3 ? ++_k : --_k) { + this.screen[this.y][i] = null; + } + } else if (args[0] === 1) { + for (i = _l = 0, _ref4 = this.y - 1; 0 <= _ref4 ? _l <= _ref4 : _l >= _ref4; i = 0 <= _ref4 ? ++_l : --_l) { + this.screen[i] = null; + } + for (i = _m = 0, _ref5 = this.x; 0 <= _ref5 ? _m <= _ref5 : _m >= _ref5; i = 0 <= _ref5 ? ++_m : --_m) { + this.screen[this.y][i] = null; + } + } else if (args[0] === 2) { + this.x = 0; + this.y = 0; + this.screen = []; + } + break; + case "K": + if (args.length === 0 || args[0] === 0) { + for (i = _n = _ref6 = this.x, _ref7 = this.screen[this.y].length - 1; _ref6 <= _ref7 ? _n <= _ref7 : _n >= _ref7; i = _ref6 <= _ref7 ? ++_n : --_n) { + this.screen[this.y][i] = null; + } + } else if (args[0] === 1) { + for (i = _o = 0, _ref8 = this.x; 0 <= _ref8 ? _o <= _ref8 : _o >= _ref8; i = 0 <= _ref8 ? ++_o : --_o) { + this.screen[this.y][i] = null; + } + } else if (args[0] === 2) { + this.screen[this.y] = null; + } + } + this.argbuf = ''; + _results.push(this.state = 0); + } else { + _results.push(this.argbuf += ch); + } + } else if (this.state === 3) { + break; + } else { + _results.push(this.state = 0); + } + } + return _results; + }; + + ImageTextModeANSI.prototype.putpixel = function(ch) { + if (this.screen[this.y] == null) { + this.screen[this.y] = []; + } + this.screen[this.y][this.x] = { + ch: ch, + attr: this.attr + }; + if (++this.x >= this.linewrap) { + this.x = 0; + return this.y++; + } + }; + + return ImageTextModeANSI; + + })(this.ImageTextMode); + + this.ImageTextModeBin = (function(_super) { + __extends(ImageTextModeBin, _super); + + function ImageTextModeBin(options) { + var k, v; + ImageTextModeBin.__super__.constructor.apply(this, arguments); + this.linewrap = 160; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextModeBin.prototype.parse = function(content) { + var attr, ch, i, x, y, _i, _ref; + x = 0; + y = 0; + this.screen[y] = []; + for (i = _i = 0, _ref = content.length - 2; _i <= _ref; i = _i += 2) { + ch = content.substr(i, 1); + if (ch === "\x1a") { + break; + } + attr = this.getByteAt(content, i + 1); + this.screen[y][x] = { + 'ch': ch, + 'attr': attr + }; + x++; + if (x === this.linewrap) { x = 0; y++; this.screen[y] = []; } } - } - if (this.screen[y].length === 0) { - return this.screen.pop(); - } - }; - - return ImageTextModeIDF; - -})(this.ImageTextMode); - -this.ImageTextModeADF = (function(_super) { - var COLOR_INDEX; - - __extends(ImageTextModeADF, _super); - - COLOR_INDEX = [0, 1, 2, 3, 4, 5, 20, 7, 56, 57, 58, 59, 60, 61, 62, 63]; - - function ImageTextModeADF(options) { - var k, v; - ImageTextModeADF.__super__.constructor.apply(this, arguments); - this.header = { - version: 0 + if (this.screen[y].length === 0) { + return this.screen.pop(); + } }; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - ImageTextModeADF.prototype.parse = function(content) { - var attr, ch, i, x, y, _i, _ref; - this.header.version = this.getByteAt(content, 0); - this.parsePaletteData(content.substr(1, 192)); - this.parseFontData(content.substr(193, 4096)); - x = 0; - y = 0; - this.screen[y] = []; - for (i = _i = 4289, _ref = content.length - 2; _i <= _ref; i = _i += 2) { - ch = content.substr(i, 1); - if (ch === "\x1a") { - break; - } - attr = this.getByteAt(content, i + 1); - this.screen[y][x] = { - 'ch': ch, - 'attr': attr + return ImageTextModeBin; + + })(this.ImageTextMode); + + this.ImageTextModeIDF = (function(_super) { + __extends(ImageTextModeIDF, _super); + + function ImageTextModeIDF(options) { + var k, v; + ImageTextModeIDF.__super__.constructor.apply(this, arguments); + this.header = { + x0: 0, + x1: 0, + y0: 0, + y1: 0 }; - x++; - if (x === 80) { - x = 0; - y++; - this.screen[y] = []; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; } } - if (this.screen[y].length === 0) { - return this.screen.pop(); - } - }; - ImageTextModeADF.prototype.parsePaletteData = function(data) { - var b, colors, g, i, j, r, _i, _len; - colors = []; - for (_i = 0, _len = COLOR_INDEX.length; _i < _len; _i++) { - i = COLOR_INDEX[_i]; - j = i * 3; - r = this.getByteAt(data, j); - r = r << 2 | r >> 4; - g = this.getByteAt(data, j + 1); - g = g << 2 | g >> 4; - b = this.getByteAt(data, j + 2); - b = b << 2 | b >> 4; - colors.push([r, g, b]); - } - return this.palette = new ImageTextModePalette({ - colors: colors - }); - }; - - return ImageTextModeADF; - -})(this.ImageTextMode); - -this.ImageTextModeTundra = (function(_super) { - __extends(ImageTextModeTundra, _super); - - function ImageTextModeTundra(options) { - var k, v; - ImageTextModeTundra.__super__.constructor.apply(this, arguments); - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextModeTundra.prototype.parse = function(content) { - var bg, ch, colors, command, fg, palidx, rgb, x, y, _i; - colors = [[0, 0, 0]]; - palidx = 1; - x = 0; - y = 0; - fg = 0; - bg = 0; - this.screen[y] = []; - content = content.substr(8).split(''); - while (command = content.shift()) { - if (command === "\x1a") { - break; + ImageTextModeIDF.prototype.parse = function(content) { + var attr, buffer, ch, eodata, headerData, i, info, len, offset, x, y, _i; + headerData = content.substr(0, 12); + if (headerData.length !== 12 || !headerData.match('^\x041.4')) { + throw new Error('File is not an IDF'); } - command = command.charCodeAt(0); - if (command === 1) { - y = this.unpackLong(content.splice(0, 4).join('')); - x = this.unpackLong(content.splice(0, 4).join('')); - if (this.screen[y] == null) { + this.header.x0 = this.unpackShort(headerData.substr(4, 2)); + this.header.y0 = this.unpackShort(headerData.substr(6, 2)); + this.header.x1 = this.unpackShort(headerData.substr(8, 2)); + this.header.y1 = this.unpackShort(headerData.substr(10, 2)); + eodata = content.length - 48 - 4096; + if (content.substr(content.length - 128, 5) === 'SAUCE') { + eodata -= 128; + } + this.parseFontData(content.substr(eodata, 4096)); + this.parsePaletteData(content.substr(eodata + 4096, 48)); + y = 0; + x = 0; + this.screen[y] = []; + offset = 12; + while (offset < eodata) { + buffer = content.substr(offset, 2); + info = this.unpackShort(buffer); + offset += 2; + len = 1; + if (info === 1) { + len = this.unpackShort(content.substr(offset, 2)) & 255; + offset += 2; + buffer = content.substr(offset, 2); + offset += 2; + } + ch = buffer.substr(0, 1); + attr = this.getByteAt(buffer, 1); + for (i = _i = 1; 1 <= len ? _i <= len : _i >= len; i = 1 <= len ? ++_i : --_i) { + this.screen[y][x] = { + 'ch': ch, + 'attr': attr + }; + x++; + if (x > this.header.x1) { + x = 0; + y++; + this.screen[y] = []; + } + } + } + if (this.screen[y].length === 0) { + return this.screen.pop(); + } + }; + + return ImageTextModeIDF; + + })(this.ImageTextMode); + + this.ImageTextModeADF = (function(_super) { + var COLOR_INDEX; + + __extends(ImageTextModeADF, _super); + + COLOR_INDEX = [0, 1, 2, 3, 4, 5, 20, 7, 56, 57, 58, 59, 60, 61, 62, 63]; + + function ImageTextModeADF(options) { + var k, v; + ImageTextModeADF.__super__.constructor.apply(this, arguments); + this.header = { + version: 0 + }; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextModeADF.prototype.parse = function(content) { + var attr, ch, i, x, y, _i, _ref; + this.header.version = this.getByteAt(content, 0); + this.parsePaletteData(content.substr(1, 192)); + this.parseFontData(content.substr(193, 4096)); + x = 0; + y = 0; + this.screen[y] = []; + for (i = _i = 4289, _ref = content.length - 2; _i <= _ref; i = _i += 2) { + ch = content.substr(i, 1); + if (ch === "\x1a") { + break; + } + attr = this.getByteAt(content, i + 1); + this.screen[y][x] = { + 'ch': ch, + 'attr': attr + }; + x++; + if (x === 80) { + x = 0; + y++; this.screen[y] = []; } - continue; } - ch = null; - if (command === 2) { - ch = content.shift(); - rgb = this.unpackLong(content.splice(0, 4).join('')); - fg = palidx++; - colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]); - } else if (command === 4) { - ch = content.shift(); - rgb = this.unpackLong(content.splice(0, 4).join('')); - bg = palidx++; - colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]); - } else if (command === 6) { - ch = content.shift(); - fg = palidx++; - bg = palidx++; - for (_i = 0; _i <= 1; _i++) { + if (this.screen[y].length === 0) { + return this.screen.pop(); + } + }; + + ImageTextModeADF.prototype.parsePaletteData = function(data) { + var b, colors, g, i, j, r, _i, _len; + colors = []; + for (_i = 0, _len = COLOR_INDEX.length; _i < _len; _i++) { + i = COLOR_INDEX[_i]; + j = i * 3; + r = this.getByteAt(data, j); + r = r << 2 | r >> 4; + g = this.getByteAt(data, j + 1); + g = g << 2 | g >> 4; + b = this.getByteAt(data, j + 2); + b = b << 2 | b >> 4; + colors.push([r, g, b]); + } + return this.palette = new ImageTextModePalette({ + colors: colors + }); + }; + + return ImageTextModeADF; + + })(this.ImageTextMode); + + this.ImageTextModeTundra = (function(_super) { + __extends(ImageTextModeTundra, _super); + + function ImageTextModeTundra(options) { + var k, v; + ImageTextModeTundra.__super__.constructor.apply(this, arguments); + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextModeTundra.prototype.parse = function(content) { + var bg, ch, colors, command, fg, palidx, rgb, x, y, _i; + colors = [[0, 0, 0]]; + palidx = 1; + x = 0; + y = 0; + fg = 0; + bg = 0; + this.screen[y] = []; + content = content.substr(8).split(''); + while (command = content.shift()) { + if (command === "\x1a") { + break; + } + command = command.charCodeAt(0); + if (command === 1) { + y = this.unpackLong(content.splice(0, 4).join('')); + x = this.unpackLong(content.splice(0, 4).join('')); + if (this.screen[y] == null) { + this.screen[y] = []; + } + continue; + } + ch = null; + if (command === 2) { + ch = content.shift(); rgb = this.unpackLong(content.splice(0, 4).join('')); + fg = palidx++; colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]); + } else if (command === 4) { + ch = content.shift(); + rgb = this.unpackLong(content.splice(0, 4).join('')); + bg = palidx++; + colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]); + } else if (command === 6) { + ch = content.shift(); + fg = palidx++; + bg = palidx++; + for (_i = 0; _i <= 1; _i++) { + rgb = this.unpackLong(content.splice(0, 4).join('')); + colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]); + } + } + if (ch == null) { + ch = String.fromCharCode(command); + } + this.screen[y][x] = { + 'ch': ch, + 'fg': fg, + 'bg': bg + }; + x++; + if (x === 80) { + x = 0; + y++; + this.screen[y] = []; } } - if (ch == null) { - ch = String.fromCharCode(command); + if (this.screen[y].length === 0) { + this.screen.pop(); } - this.screen[y][x] = { - 'ch': ch, - 'fg': fg, - 'bg': bg + return this.palette = new ImageTextModePalette({ + colors: colors + }); + }; + + return ImageTextModeTundra; + + })(this.ImageTextMode); + + this.ImageTextModePCBoard = (function(_super) { + __extends(ImageTextModePCBoard, _super); + + function ImageTextModePCBoard(options) { + var k, v; + ImageTextModePCBoard.__super__.constructor.apply(this, arguments); + this.tabstop = 8; + this.linewrap = 80; + this.codes = { + POFF: '', + WAIT: '' }; - x++; - if (x === 80) { - x = 0; - y++; - this.screen[y] = []; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; } } - if (this.screen[y].length === 0) { - this.screen.pop(); - } - return this.palette = new ImageTextModePalette({ - colors: colors - }); - }; - return ImageTextModeTundra; - -})(this.ImageTextMode); - -this.ImageTextModePCBoard = (function(_super) { - __extends(ImageTextModePCBoard, _super); - - function ImageTextModePCBoard(options) { - var k, v; - ImageTextModePCBoard.__super__.constructor.apply(this, arguments); - this.tabstop = 8; - this.linewrap = 80; - this.codes = { - POFF: '', - WAIT: '' - }; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextModePCBoard.prototype.parse = function(content) { - var ch, code, i, key, val, _i, _j, _ref, _results; - this.screen = []; - this.state = 0; - this.x = 0; - this.y = 0; - this.attr = 7; - _ref = this.codes; - for (key in _ref) { - val = _ref[key]; - code = new RegExp('@' + key + '@', 'g'); - content.replace(code, val); - } - content = content.split(''); - _results = []; - while (ch = content.shift()) { - if (this.state === 0) { - switch (ch) { - case "\x1a": - _results.push(this.state = 2); - break; - case '@': - _results.push(this.state = 1); - break; - case "\n": - this.x = 0; - _results.push(this.y++); - break; - case "\r": - break; - case "\t": - i = (this.x + 1) % this.tabstop; - _results.push((function() { - var _results1; - _results1 = []; - while (i-- > 0) { - _results1.push(this.putpixel(' ')); - } - return _results1; - }).call(this)); - break; - default: - _results.push(this.putpixel(ch)); - } - } else if (this.state === 1) { - if (ch === 'X') { - this.attr = (parseInt(content.shift(), 16) << 4) + parseInt(content.shift(), 16); - } else if (ch + content.slice(0, 3).join('') === 'CLS@') { - for (_i = 1; _i <= 3; _i++) { - content.shift(); - } - this.screen = []; - } else if (ch + content.slice(0, 3).join('') === 'POS:') { - for (_j = 1; _j <= 3; _j++) { - content.shift(); - } - this.x = content.shift(); - if (content[0] === !'@') { - this.x += content.shift(); - } - this.x--; - content.shift(); - } else { - this.putpixel('@'); - this.putpixel(ch); - } - _results.push(this.state = 0); - } else if (this.state === 2) { - break; - } else { - _results.push(this.state = 0); - } - } - return _results; - }; - - ImageTextModePCBoard.prototype.putpixel = function(ch) { - if (this.screen[this.y] == null) { - this.screen[this.y] = []; - } - this.screen[this.y][this.x] = { - ch: ch, - attr: this.attr - }; - if (++this.x >= this.linewrap) { + ImageTextModePCBoard.prototype.parse = function(content) { + var ch, code, i, key, val, _i, _j, _ref, _results; + this.screen = []; + this.state = 0; this.x = 0; - return this.y++; - } - }; - - return ImageTextModePCBoard; - -})(this.ImageTextMode); - -this.ImageTextModeAVATAR = (function(_super) { - __extends(ImageTextModeAVATAR, _super); - - function ImageTextModeAVATAR(options) { - var k, v; - ImageTextModeAVATAR.__super__.constructor.apply(this, arguments); - this.tabstop = 8; - this.linewrap = 80; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextModeAVATAR.prototype.parse = function(content) { - var c, ch, i, _results; - this.screen = []; - this.x = 0; - this.y = 0; - this.attr = 3; - content = content.split(''); - _results = []; - while (ch = content.shift()) { - if (ch === "\x1a") { - break; - } else if (ch === "\n") { - this.x = 0; - _results.push(this.y++); - } else if (ch === "\r") { - continue; - } else if (ch === "\t") { - i = (this.x + 1) % this.tabstop; - _results.push((function() { - var _results1; - _results1 = []; - while (i-- > 0) { - _results1.push(this.putpixel(' ')); + this.y = 0; + this.attr = 7; + _ref = this.codes; + for (key in _ref) { + val = _ref[key]; + code = new RegExp('@' + key + '@', 'g'); + content.replace(code, val); + } + content = content.split(''); + _results = []; + while (ch = content.shift()) { + if (this.state === 0) { + switch (ch) { + case "\x1a": + _results.push(this.state = 2); + break; + case '@': + _results.push(this.state = 1); + break; + case "\n": + this.x = 0; + _results.push(this.y++); + break; + case "\r": + break; + case "\t": + i = (this.x + 1) % this.tabstop; + _results.push((function() { + var _results1; + _results1 = []; + while (i-- > 0) { + _results1.push(this.putpixel(' ')); + } + return _results1; + }).call(this)); + break; + default: + _results.push(this.putpixel(ch)); } - return _results1; - }).call(this)); - } else if (ch.charCodeAt(0) === 12) { - this.screen = []; - this.attr = 3; - _results.push(this.insert = false); - } else if (ch.charCodeAt(0) === 25) { - ch = content.shift(); - i = content.shift().charCodeAt(0); - _results.push((function() { - var _results1; - _results1 = []; - while (i-- > 0) { - _results1.push(this.putpixel(ch)); - } - return _results1; - }).call(this)); - } else if (ch.charCodeAt(0) === 22) { - c = content.shift().charCodeAt(0); - switch (c) { - case 1: - _results.push(this.attr = content.shift().charCodeAt(0) & 0x7f); - break; - case 2: - _results.push(this.attr |= 0x80); - break; - case 3: - this.y--; - if (this.y < 0) { - _results.push(this.y = 0); - } else { - _results.push(void 0); + } else if (this.state === 1) { + if (ch === 'X') { + this.attr = (parseInt(content.shift(), 16) << 4) + parseInt(content.shift(), 16); + } else if (ch + content.slice(0, 3).join('') === 'CLS@') { + for (_i = 1; _i <= 3; _i++) { + content.shift(); + } + this.screen = []; + } else if (ch + content.slice(0, 3).join('') === 'POS:') { + for (_j = 1; _j <= 3; _j++) { + content.shift(); + } + this.x = content.shift(); + if (content[0] !== '@') { + this.x += content.shift(); } - break; - case 4: - _results.push(this.y++); - break; - case 5: this.x--; - if (this.x < 0) { - _results.push(this.x = 0); - } else { - _results.push(void 0); - } - break; - case 6: - _results.push(this.x++); - break; - case 7: - _results.push((function() { - var _i, _ref, _ref1, _results1; - _results1 = []; - for (i = _i = _ref = this.x, _ref1 = screen[this.y].length - 1; _ref <= _ref1 ? _i <= _ref1 : _i >= _ref1; i = _ref <= _ref1 ? ++_i : --_i) { - _results1.push(this.screen[this.y][i] = null); - } - return _results1; - }).call(this)); - break; - case 8: - this.y = content.shift().charCodeAt(0) - 1; - this.x = content.shift().charCodeAt(0) - 1; - if (this.y < 0) { - this.y = 0; - } - if (this.x < 0) { - _results.push(this.x = 0); - } else { - _results.push(void 0); - } - break; - default: - _results.push(void 0); + content.shift(); + } else { + this.putpixel('@'); + this.putpixel(ch); + } + _results.push(this.state = 0); + } else if (this.state === 2) { + break; + } else { + _results.push(this.state = 0); } - } else { - _results.push(this.putpixel(ch)); + } + return _results; + }; + + ImageTextModePCBoard.prototype.putpixel = function(ch) { + if (this.screen[this.y] == null) { + this.screen[this.y] = []; + } + this.screen[this.y][this.x] = { + ch: ch, + attr: this.attr + }; + if (++this.x >= this.linewrap) { + this.x = 0; + return this.y++; + } + }; + + return ImageTextModePCBoard; + + })(this.ImageTextMode); + + this.ImageTextModeAVATAR = (function(_super) { + __extends(ImageTextModeAVATAR, _super); + + function ImageTextModeAVATAR(options) { + var k, v; + ImageTextModeAVATAR.__super__.constructor.apply(this, arguments); + this.tabstop = 8; + this.linewrap = 80; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; } } - return _results; - }; - ImageTextModeAVATAR.prototype.putpixel = function(ch) { - if (this.screen[this.y] == null) { - this.screen[this.y] = []; - } - this.screen[this.y][this.x] = { - ch: ch, - attr: this.attr - }; - if (++this.x >= this.linewrap) { + ImageTextModeAVATAR.prototype.parse = function(content) { + var c, ch, i, _results; + this.screen = []; this.x = 0; - return this.y++; - } - }; + this.y = 0; + this.attr = 3; + content = content.split(''); + _results = []; + while (ch = content.shift()) { + if (ch === "\x1a") { + break; + } else if (ch === "\n") { + this.x = 0; + _results.push(this.y++); + } else if (ch === "\r") { + continue; + } else if (ch === "\t") { + i = (this.x + 1) % this.tabstop; + _results.push((function() { + var _results1; + _results1 = []; + while (i-- > 0) { + _results1.push(this.putpixel(' ')); + } + return _results1; + }).call(this)); + } else if (ch.charCodeAt(0) === 12) { + this.screen = []; + this.attr = 3; + _results.push(this.insert = false); + } else if (ch.charCodeAt(0) === 25) { + ch = content.shift(); + i = content.shift().charCodeAt(0); + _results.push((function() { + var _results1; + _results1 = []; + while (i-- > 0) { + _results1.push(this.putpixel(ch)); + } + return _results1; + }).call(this)); + } else if (ch.charCodeAt(0) === 22) { + c = content.shift().charCodeAt(0); + switch (c) { + case 1: + _results.push(this.attr = content.shift().charCodeAt(0) & 0x7f); + break; + case 2: + _results.push(this.attr |= 0x80); + break; + case 3: + this.y--; + if (this.y < 0) { + _results.push(this.y = 0); + } else { + _results.push(void 0); + } + break; + case 4: + _results.push(this.y++); + break; + case 5: + this.x--; + if (this.x < 0) { + _results.push(this.x = 0); + } else { + _results.push(void 0); + } + break; + case 6: + _results.push(this.x++); + break; + case 7: + _results.push((function() { + var _i, _ref, _ref1, _results1; + _results1 = []; + for (i = _i = _ref = this.x, _ref1 = screen[this.y].length - 1; _ref <= _ref1 ? _i <= _ref1 : _i >= _ref1; i = _ref <= _ref1 ? ++_i : --_i) { + _results1.push(this.screen[this.y][i] = null); + } + return _results1; + }).call(this)); + break; + case 8: + this.y = content.shift().charCodeAt(0) - 1; + this.x = content.shift().charCodeAt(0) - 1; + if (this.y < 0) { + this.y = 0; + } + if (this.x < 0) { + _results.push(this.x = 0); + } else { + _results.push(void 0); + } + break; + default: + _results.push(void 0); + } + } else { + _results.push(this.putpixel(ch)); + } + } + return _results; + }; - return ImageTextModeAVATAR; + ImageTextModeAVATAR.prototype.putpixel = function(ch) { + if (this.screen[this.y] == null) { + this.screen[this.y] = []; + } + this.screen[this.y][this.x] = { + ch: ch, + attr: this.attr + }; + if (++this.x >= this.linewrap) { + this.x = 0; + return this.y++; + } + }; -})(this.ImageTextMode); + return ImageTextModeAVATAR; + + })(this.ImageTextMode); + +}).call(this); From b3a77f6a666dc04e763ff01f780e15031290b5a6 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Mon, 7 Oct 2013 18:43:07 +0300 Subject: [PATCH 004/108] slight cleanup / comprehension use --- .jshintrc | 1 + textmode.coffee | 47 +++++++++++++++++++++++------------------- textmode.js | 54 ++++++++++++++++++++++++------------------------- 3 files changed, 54 insertions(+), 48 deletions(-) create mode 100644 .jshintrc diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..55cc1e8 --- /dev/null +++ b/.jshintrc @@ -0,0 +1 @@ +eqnull diff --git a/textmode.coffee b/textmode.coffee index 6da61ff..8cf6101 100644 --- a/textmode.coffee +++ b/textmode.coffee @@ -991,30 +991,35 @@ class @ImageTextMode ctx = canvas.getContext '2d' for cy in [ 0 ... @screen.length ] - continue if !@screen[ cy ]? - for cx in [ 0 ... @screen[ cy ].length ] - pixel = @screen[ cy ][ cx ] - continue if !pixel? - if pixel.attr? - fg = pixel.attr & 15 - bg = ( pixel.attr & 240 ) >> 4 - else - fg = pixel.fg - bg = pixel.bg + if @screen[ cy ]? + for cx in [ 0 ... @screen[ cy ].length ] + pixel = @screen[ cy ][ cx ] + if pixel? + if pixel.attr? + fg = pixel.attr & 15 + bg = ( pixel.attr & 240 ) >> 4 + else + fg = pixel.fg + bg = pixel.bg - px = cx * @font.width - py = cy * @font.height + px = cx * @font.width + py = cy * @font.height - ctx.fillStyle = @palette.toRgbaString( @palette.colors[ bg ] ) - ctx.fillRect px, py, @font.width, @font.height + ctx.fillStyle = @palette.toRgbaString( @palette.colors[ bg ] ) + ctx.fillRect px, py, @font.width, @font.height - ctx.fillStyle = @palette.toRgbaString( @palette.colors[ fg ] ) - chr = @font.chars[ pixel.ch.charCodeAt( 0 ) & 0xff ] - for i in [ 0 ... @font.height ] - line = chr[ i ] - for j in [ 0 ... @font.width ] - if line & ( 1 << @font.width - 1 - j ) - ctx.fillRect px + j, py + i, 1, 1 + ctx.fillStyle = @palette.toRgbaString( @palette.colors[ fg ] ) + chr = @font.chars[ pixel.ch.charCodeAt( 0 ) & 0xff ] + i = 0 + for line in chr + # [ 0 ... @font.height ] +# line = chr[ i ] +# for j in [ 0 ... @font.width ] +# if line & ( 1 << @font.width - 1 - j ) +# ctx.fillRect px + j, py + i, 1, 1 + + ctx.fillRect px + j, py + i, 1, 1 for j in [ 0 ... @font.width ] when line & (1 << @font.width - 1 - j ) + i += 1 canvasElem.setAttribute 'width', w canvasElem.setAttribute 'height', h diff --git a/textmode.js b/textmode.js index 1d7578c..78ebb60 100644 --- a/textmode.js +++ b/textmode.js @@ -304,7 +304,7 @@ }; ImageTextMode.prototype.renderCanvas = function(canvasElem) { - var bg, canvas, chr, ctx, cx, cy, fg, h, i, j, line, pixel, px, py, w, _i, _j, _k, _l, _ref, _ref1, _ref2, _ref3; + var bg, canvas, chr, ctx, cx, cy, fg, h, i, j, line, pixel, px, py, w, _i, _j, _k, _l, _len, _ref, _ref1, _ref2; w = this.getWidth() * this.font.width; h = this.getHeight() * this.font.height; canvas = document.createElement('canvas'); @@ -312,32 +312,32 @@ canvas.setAttribute('height', h); ctx = canvas.getContext('2d'); for (cy = _i = 0, _ref = this.screen.length; 0 <= _ref ? _i < _ref : _i > _ref; cy = 0 <= _ref ? ++_i : --_i) { - if (this.screen[cy] == null) { - continue; - } - for (cx = _j = 0, _ref1 = this.screen[cy].length; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; cx = 0 <= _ref1 ? ++_j : --_j) { - pixel = this.screen[cy][cx]; - if (pixel == null) { - continue; - } - if (pixel.attr != null) { - fg = pixel.attr & 15; - bg = (pixel.attr & 240) >> 4; - } else { - fg = pixel.fg; - bg = pixel.bg; - } - px = cx * this.font.width; - py = cy * this.font.height; - ctx.fillStyle = this.palette.toRgbaString(this.palette.colors[bg]); - ctx.fillRect(px, py, this.font.width, this.font.height); - ctx.fillStyle = this.palette.toRgbaString(this.palette.colors[fg]); - chr = this.font.chars[pixel.ch.charCodeAt(0) & 0xff]; - for (i = _k = 0, _ref2 = this.font.height; 0 <= _ref2 ? _k < _ref2 : _k > _ref2; i = 0 <= _ref2 ? ++_k : --_k) { - line = chr[i]; - for (j = _l = 0, _ref3 = this.font.width; 0 <= _ref3 ? _l < _ref3 : _l > _ref3; j = 0 <= _ref3 ? ++_l : --_l) { - if (line & (1 << this.font.width - 1 - j)) { - ctx.fillRect(px + j, py + i, 1, 1); + if (this.screen[cy] != null) { + for (cx = _j = 0, _ref1 = this.screen[cy].length; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; cx = 0 <= _ref1 ? ++_j : --_j) { + pixel = this.screen[cy][cx]; + if (pixel != null) { + if (pixel.attr != null) { + fg = pixel.attr & 15; + bg = (pixel.attr & 240) >> 4; + } else { + fg = pixel.fg; + bg = pixel.bg; + } + px = cx * this.font.width; + py = cy * this.font.height; + ctx.fillStyle = this.palette.toRgbaString(this.palette.colors[bg]); + ctx.fillRect(px, py, this.font.width, this.font.height); + ctx.fillStyle = this.palette.toRgbaString(this.palette.colors[fg]); + chr = this.font.chars[pixel.ch.charCodeAt(0) & 0xff]; + i = 0; + for (_k = 0, _len = chr.length; _k < _len; _k++) { + line = chr[_k]; + for (j = _l = 0, _ref2 = this.font.width; 0 <= _ref2 ? _l < _ref2 : _l > _ref2; j = 0 <= _ref2 ? ++_l : --_l) { + if (line & (1 << this.font.width - 1 - j)) { + ctx.fillRect(px + j, py + i, 1, 1); + } + } + i += 1; } } } From 956748c90bc47e44c2fd7c2df7f67d5f7d0b829b Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Mon, 7 Oct 2013 20:06:20 +0300 Subject: [PATCH 005/108] height / width 'cleanup' --- textmode.coffee | 7 ++++--- textmode.js | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/textmode.coffee b/textmode.coffee index 8cf6101..9b95793 100644 --- a/textmode.coffee +++ b/textmode.coffee @@ -946,8 +946,8 @@ class @ImageTextMode getByteAt: ( data, offset ) -> return data.charCodeAt( offset ) & 0xFF -# could we replace this with math.max ? - +# could we replace this with math.max ? Not worth it,called once per view +# we COULD, but we'd do some crap like "Math.max.apply(null,blah) and that's not readable" getWidth: -> max = 0 for y in [ 0 .. @screen.length - 1 ] @@ -955,7 +955,7 @@ class @ImageTextMode return max getHeight: -> - return @screen.length + @screen.length parsePaletteData: ( data ) -> colors = [] @@ -994,6 +994,7 @@ class @ImageTextMode if @screen[ cy ]? for cx in [ 0 ... @screen[ cy ].length ] pixel = @screen[ cy ][ cx ] + curfillstyle = null if pixel? if pixel.attr? fg = pixel.attr & 15 diff --git a/textmode.js b/textmode.js index 78ebb60..2fa291d 100644 --- a/textmode.js +++ b/textmode.js @@ -304,7 +304,7 @@ }; ImageTextMode.prototype.renderCanvas = function(canvasElem) { - var bg, canvas, chr, ctx, cx, cy, fg, h, i, j, line, pixel, px, py, w, _i, _j, _k, _l, _len, _ref, _ref1, _ref2; + var bg, canvas, chr, ctx, curfillstyle, cx, cy, fg, h, i, j, line, pixel, px, py, w, _i, _j, _k, _l, _len, _ref, _ref1, _ref2; w = this.getWidth() * this.font.width; h = this.getHeight() * this.font.height; canvas = document.createElement('canvas'); @@ -315,6 +315,7 @@ if (this.screen[cy] != null) { for (cx = _j = 0, _ref1 = this.screen[cy].length; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; cx = 0 <= _ref1 ? ++_j : --_j) { pixel = this.screen[cy][cx]; + curfillstyle = null; if (pixel != null) { if (pixel.attr != null) { fg = pixel.attr & 15; From 4b0ea34fe099cc7b3a77225f312dda401ba75768 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Mon, 7 Oct 2013 20:10:43 +0300 Subject: [PATCH 006/108] note on speed increase --- textmode.coffee | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/textmode.coffee b/textmode.coffee index 9b95793..99ab060 100644 --- a/textmode.coffee +++ b/textmode.coffee @@ -980,6 +980,7 @@ class @ImageTextMode @font = new ImageTextModeFont( { chars: chars, height: height } ) # the majority of time is spent in this routine +# list comprehension seems to speed up from 1.8 seconds to 1.29 seconds from first comprehension / cleanup? renderCanvas: ( canvasElem ) -> w = @getWidth() * @font.width @@ -1013,12 +1014,6 @@ class @ImageTextMode chr = @font.chars[ pixel.ch.charCodeAt( 0 ) & 0xff ] i = 0 for line in chr - # [ 0 ... @font.height ] -# line = chr[ i ] -# for j in [ 0 ... @font.width ] -# if line & ( 1 << @font.width - 1 - j ) -# ctx.fillRect px + j, py + i, 1, 1 - ctx.fillRect px + j, py + i, 1, 1 for j in [ 0 ... @font.width ] when line & (1 << @font.width - 1 - j ) i += 1 From a144756af30f094dcbcfe895388cf0fd6bca07c2 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Tue, 8 Oct 2013 14:21:07 +0300 Subject: [PATCH 007/108] bugfix? - super calls were giving an error. * * ok ONE of them was. The other - no. * swapping them made the other throw the error. * end result was identical whether super used or not. --- textmode.coffee | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/textmode.coffee b/textmode.coffee index 99ab060..a0def4f 100644 --- a/textmode.coffee +++ b/textmode.coffee @@ -63,10 +63,15 @@ class @ImageTextModePalette toRgbaString: ( color ) -> return 'rgba(' + color.join( ',' ) + ',1)'; +# getting a "cannot call super outside an instance method" error here - +# the resulting code produced does not end up using the super/parent bit +# or at least it doesn't produce bugs in the result if it is not here. +# commenting for now. + class @ImageTextModePaletteVGA extends @ImageTextModePalette constructor: ( options ) -> - super +# super @colors = [ [ 0x00, 0x00, 0x00 ], [ 0x00, 0x00, 0xaa ], @@ -90,7 +95,7 @@ class @ImageTextModePaletteVGA extends @ImageTextModePalette class @ImageTextModePaletteANSI extends @ImageTextModePalette constructor: ( options ) -> - super +# super @colors = [ [ 0x00, 0x00, 0x00 ], [ 0xaa, 0x00, 0x00 ], @@ -972,9 +977,9 @@ class @ImageTextMode parseFontData: ( data, height = 16 ) -> chars = [] - for i in [ 0 .. data.length / height - 1 ] + for i in [ 0 ... data.length / height ] chr = [] - for j in [ 0 .. height - 1 ] + for j in [ 0 ... height ] chr.push @getByteAt( data, i * height + j ) chars.push chr @font = new ImageTextModeFont( { chars: chars, height: height } ) From 89816ca1e6e0bcb8e2580d0f970dcaf32d123aec Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Thu, 17 Oct 2013 16:05:13 +0300 Subject: [PATCH 008/108] I believe I have patched the "super" issues. --- textmode.coffee | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/textmode.coffee b/textmode.coffee index a0def4f..a278104 100644 --- a/textmode.coffee +++ b/textmode.coffee @@ -58,7 +58,7 @@ class @ImageTextModePalette constructor: ( options ) -> @colors = [] - this[k] = v for own k, v of options + @[k] = v for own k, v of options toRgbaString: ( color ) -> return 'rgba(' + color.join( ',' ) + ',1)'; @@ -66,12 +66,16 @@ class @ImageTextModePalette # getting a "cannot call super outside an instance method" error here - # the resulting code produced does not end up using the super/parent bit # or at least it doesn't produce bugs in the result if it is not here. -# commenting for now. +# calling the constructor without super works, and with super the difference is +# ImageTextModePaletteVGA.__super__.constructor.apply(this, arguments); +# is placed inside the constructor. I believe the end result, based on how +# this is used, is identical. +# I am not seeing this pattern (the 'super by itself') being used or referenced +# - instead I am seeting very different patterns using super to reference +# complete items. class @ImageTextModePaletteVGA extends @ImageTextModePalette - - constructor: ( options ) -> -# super + constructor: (options) -> @colors = [ [ 0x00, 0x00, 0x00 ], [ 0x00, 0x00, 0xaa ], @@ -90,12 +94,9 @@ class @ImageTextModePaletteVGA extends @ImageTextModePalette [ 0xff, 0xff, 0x55 ], [ 0xff, 0xff, 0xff ] ] - this[k] = v for own k, v of options class @ImageTextModePaletteANSI extends @ImageTextModePalette - - constructor: ( options ) -> -# super + constructor: (options) -> @colors = [ [ 0x00, 0x00, 0x00 ], [ 0xaa, 0x00, 0x00 ], @@ -114,19 +115,17 @@ class @ImageTextModePaletteANSI extends @ImageTextModePalette [ 0x55, 0xff, 0xff ], [ 0xff, 0xff, 0xff ] ] - this[k] = v for own k, v of options class @ImageTextModeFont constructor: ( options ) -> @chars = [] @width = 8 - this[k] = v for own k, v of options + @[k] = v for own k, v of options class @ImageTextModeFont8x16 extends @ImageTextModeFont - constructor: ( options ) -> - super + super @width @chars = [ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], [ 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00 ], @@ -386,12 +385,11 @@ class @ImageTextModeFont8x16 extends @ImageTextModeFont [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ] ] @height = 16 - this[k] = v for own k, v of options + @[k] = v for own k, v of options class @ImageTextModeFont8x8 extends @ImageTextModeFont - constructor: ( options ) -> - super + super width @chars = [ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], [ 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e ], @@ -651,12 +649,11 @@ class @ImageTextModeFont8x8 extends @ImageTextModeFont [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ] ] @height = 8 - this[k] = v for own k, v of options + @[k] = v for own k, v of options class @ImageTextModeFontAmiga extends @ImageTextModeFont - constructor: ( options ) -> - super + super width @chars = [ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], [ 0x83, 0x83, 0x39, 0x39, 0x21, 0x21, 0x29, 0x29, 0x21, 0x21, 0x3f, 0x3f, 0x87, 0x87, 0xff, 0xff ], @@ -916,7 +913,7 @@ class @ImageTextModeFontAmiga extends @ImageTextModeFont [ 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30 ] ] @height = 16 - this[k] = v for own k, v of options + @[k] = v for own k, v of options class @ImageTextMode From c2baa5e28f9e2ecdc812c6d832d42cd810c3c4aa Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Thu, 17 Oct 2013 16:28:54 +0300 Subject: [PATCH 009/108] more list comprehensions --- textmode.coffee | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/textmode.coffee b/textmode.coffee index a278104..927e747 100644 --- a/textmode.coffee +++ b/textmode.coffee @@ -937,16 +937,16 @@ class @ImageTextMode shrt = ( @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 0 ) if shrt < 0 shrt += 65536 - return shrt + shrt unpackLong: ( data ) -> lng = ((( @getByteAt( data, 0 ) << 8 ) + @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 2 ) << 8 ) + @getByteAt( data, 3 ) if lng < 0 lng += 4294967296 - return lng; + lng; getByteAt: ( data, offset ) -> - return data.charCodeAt( offset ) & 0xFF + data.charCodeAt( offset ) & 0xFF # could we replace this with math.max ? Not worth it,called once per view # we COULD, but we'd do some crap like "Math.max.apply(null,blah) and that's not readable" @@ -954,7 +954,7 @@ class @ImageTextMode max = 0 for y in [ 0 .. @screen.length - 1 ] max = @screen[ y ].length if @screen[ y ]? && @screen[ y ].length > max - return max + max getHeight: -> @screen.length @@ -1027,16 +1027,9 @@ class @ImageTextMode toBinaryArray: (str) -> buf = new ArrayBuffer(str.length * 2) # 2 bytes for each char bufView = new Uint8Array(buf) - i = 0 - strLen = str.length - - while i < strLen - bufView[i] = str.charCodeAt(i) - i++ + bufView[i] = str.charCodeAt(i) for i in [0...str.length] buf - - class @ImageTextModeXBin extends @ImageTextMode # Header constants From 3bddd790e6c72ed7cdfca7c666d2141501fb946c Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Thu, 17 Oct 2013 16:34:47 +0300 Subject: [PATCH 010/108] BUGFIX: accidentally set width instead of @width --- textmode.coffee | 236 ++++++++++++++++++++++++------------------------ 1 file changed, 117 insertions(+), 119 deletions(-) diff --git a/textmode.coffee b/textmode.coffee index 927e747..f3a5d1f 100644 --- a/textmode.coffee +++ b/textmode.coffee @@ -117,7 +117,6 @@ class @ImageTextModePaletteANSI extends @ImageTextModePalette ] class @ImageTextModeFont - constructor: ( options ) -> @chars = [] @width = 8 @@ -389,7 +388,7 @@ class @ImageTextModeFont8x16 extends @ImageTextModeFont class @ImageTextModeFont8x8 extends @ImageTextModeFont constructor: ( options ) -> - super width + super @width @chars = [ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], [ 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e ], @@ -653,7 +652,7 @@ class @ImageTextModeFont8x8 extends @ImageTextModeFont class @ImageTextModeFontAmiga extends @ImageTextModeFont constructor: ( options ) -> - super width + super @width @chars = [ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], [ 0x83, 0x83, 0x39, 0x39, 0x21, 0x21, 0x29, 0x29, 0x21, 0x21, 0x3f, 0x3f, 0x87, 0x87, 0xff, 0xff ], @@ -1030,122 +1029,6 @@ class @ImageTextMode bufView[i] = str.charCodeAt(i) for i in [0...str.length] buf -class @ImageTextModeXBin extends @ImageTextMode - - # Header constants - PALETTE = 1 - FONT = 2 - COMPRESSED = 4 - NON_BLINK = 8 - FIVETWELVE_CHARS = 16 - - # Compression type constants - NO_COMPRESSION = 0 - CHARACTER_COMPRESSION = 64 - ATTRIBUTE_COMPRESSION = 128 - FULL_COMPRESSION = 192 - - # Compression byte constants - COMPRESSION_TYPE = 192 - COMPRESSION_COUNTER = 63 - - constructor: ( options ) -> - super - @header = { width: 0, height: 0, fontisze: 0, flags: 0 } - this[k] = v for own k, v of options - - parse: ( content ) -> - @screen = [] - headerData = content.substr( 0, 11 ) - if headerData.length isnt 11 || !headerData.match( '^XBIN\x1a' ) - throw new Error( 'File is not an XBin' ) - - @header.width = @unpackShort( headerData.substr( 5, 2 ) ) - @header.height = @unpackShort( headerData.substr( 7, 2 ) ) - @header.fontsize = @getByteAt( headerData.substr( 9, 1 ) ) - @header.flags = @getByteAt( headerData.substr( 10, 1 ) ) - offset = 11 - - if @header.flags & PALETTE - @parsePaletteData( content.substr( offset, 48 ) ); - offset += 48 - - if @header.flags & FONT - fontlength = @header.fontsize - if @header.flags & FIVETWELVE_CHARS - fontlength *= 512 - else - fontlength *= 256 - @parseFontData( content.substr( offset, fontlength ), @header.fontsize ); - offset += fontlength - - if @header.flags & COMPRESSED - @_parse_compressed( content.substr( offset ) ) - else - @_parse_uncompressed( content.substr( offset ) ) - - _parse_compressed: ( data ) -> - x = 0 - y = 0 - @screen[ y ] = [] - - data = data.split( '' ) - while info = data.shift() - info = @getByteAt( info, 0 ) - break if info == 26 - - type = info & COMPRESSION_TYPE - counter = ( info & COMPRESSION_COUNTER ) + 1 - - ch = null - attr = null - - while counter-- > 0 - switch type - when NO_COMPRESSION - ch = data.shift() - attr = data.shift() - when CHARACTER_COMPRESSION - ch = data.shift() if !ch? - attr = data.shift() - when ATTRIBUTE_COMPRESSION - attr = data.shift() if !attr? - ch = data.shift() - else - ch = data.shift() if !ch? - attr = data.shift() if !attr? - - @screen[ y ][ x ] = { ch: ch, attr: @getByteAt( attr, 0 ) } - - x++ - if x == @header.width - x = 0 - y++ - break if y == @header.height - @screen[ y ] = [] if !@screen[ y ]? - - _parse_uncompressed: ( data ) -> - x = 0 - y = 0 - @screen[ y ] = [] - - for i in [ 0 .. data.length - 2 ] by 2 - ch = data.substr( i, 1 ) - break if ch == "\x1a" - attr = @getByteAt( data, i + 1 ) - @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } - x++ - if x == @header.width - x = 0 - y++ - break if y == @header.height - @screen[ y ] = [] if !@screen[ y ]? - - getWidth: -> - return @header.width - - getHeight: -> - return @header.height class @ImageTextModeANSI extends @ImageTextMode ANSI_ESC = String.fromCharCode(0x1b) @@ -1650,4 +1533,119 @@ class @ImageTextModeAVATAR extends @ImageTextMode @x = 0 @y++ +class @ImageTextModeXBin extends @ImageTextMode + # Header constants + PALETTE = 1 + FONT = 2 + COMPRESSED = 4 + NON_BLINK = 8 + FIVETWELVE_CHARS = 16 + + # Compression type constants + NO_COMPRESSION = 0 + CHARACTER_COMPRESSION = 64 + ATTRIBUTE_COMPRESSION = 128 + FULL_COMPRESSION = 192 + + # Compression byte constants + COMPRESSION_TYPE = 192 + COMPRESSION_COUNTER = 63 + + constructor: ( options ) -> + super + @header = { width: 0, height: 0, fontisze: 0, flags: 0 } + this[k] = v for own k, v of options + + parse: ( content ) -> + @screen = [] + headerData = content.substr( 0, 11 ) + if headerData.length isnt 11 || !headerData.match( '^XBIN\x1a' ) + throw new Error( 'File is not an XBin' ) + + @header.width = @unpackShort( headerData.substr( 5, 2 ) ) + @header.height = @unpackShort( headerData.substr( 7, 2 ) ) + @header.fontsize = @getByteAt( headerData.substr( 9, 1 ) ) + @header.flags = @getByteAt( headerData.substr( 10, 1 ) ) + offset = 11 + + if @header.flags & PALETTE + @parsePaletteData( content.substr( offset, 48 ) ); + offset += 48 + + if @header.flags & FONT + fontlength = @header.fontsize + if @header.flags & FIVETWELVE_CHARS + fontlength *= 512 + else + fontlength *= 256 + @parseFontData( content.substr( offset, fontlength ), @header.fontsize ); + offset += fontlength + + if @header.flags & COMPRESSED + @_parse_compressed( content.substr( offset ) ) + else + @_parse_uncompressed( content.substr( offset ) ) + + _parse_compressed: ( data ) -> + x = 0 + y = 0 + @screen[ y ] = [] + + data = data.split( '' ) + while info = data.shift() + info = @getByteAt( info, 0 ) + break if info == 26 + + type = info & COMPRESSION_TYPE + counter = ( info & COMPRESSION_COUNTER ) + 1 + + ch = null + attr = null + + while counter-- > 0 + switch type + when NO_COMPRESSION + ch = data.shift() + attr = data.shift() + when CHARACTER_COMPRESSION + ch = data.shift() if !ch? + attr = data.shift() + when ATTRIBUTE_COMPRESSION + attr = data.shift() if !attr? + ch = data.shift() + else + ch = data.shift() if !ch? + attr = data.shift() if !attr? + + @screen[ y ][ x ] = { ch: ch, attr: @getByteAt( attr, 0 ) } + + x++ + if x == @header.width + x = 0 + y++ + break if y == @header.height + @screen[ y ] = [] if !@screen[ y ]? + + _parse_uncompressed: ( data ) -> + x = 0 + y = 0 + @screen[ y ] = [] + + for i in [ 0 .. data.length - 2 ] by 2 + ch = data.substr( i, 1 ) + break if ch == "\x1a" + attr = @getByteAt( data, i + 1 ) + @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } + x++ + if x == @header.width + x = 0 + y++ + break if y == @header.height + @screen[ y ] = [] if !@screen[ y ]? + + getWidth: -> + return @header.width + + getHeight: -> + return @header.height From 4e7dae0446bc9f347a07598e4465e312c347ec4f Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Thu, 17 Oct 2013 18:34:49 +0300 Subject: [PATCH 011/108] minor edits (; and some more super stuff) --- textmode.coffee | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/textmode.coffee b/textmode.coffee index f3a5d1f..80944e9 100644 --- a/textmode.coffee +++ b/textmode.coffee @@ -72,7 +72,8 @@ class @ImageTextModePalette # this is used, is identical. # I am not seeing this pattern (the 'super by itself') being used or referenced # - instead I am seeting very different patterns using super to reference -# complete items. +# complete items. (referenced meaning "in books, searches, or coffescript +# documentation") class @ImageTextModePaletteVGA extends @ImageTextModePalette constructor: (options) -> @@ -942,7 +943,7 @@ class @ImageTextMode lng = ((( @getByteAt( data, 0 ) << 8 ) + @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 2 ) << 8 ) + @getByteAt( data, 3 ) if lng < 0 lng += 4294967296 - lng; + lng getByteAt: ( data, offset ) -> data.charCodeAt( offset ) & 0xFF @@ -1044,11 +1045,12 @@ class @ImageTextModeANSI extends @ImageTextMode ANSI_RETURN = 'A' constructor: ( options ) -> - super + super @screen + super @font @palette = new ImageTextModePaletteANSI @tabstop = 8 @linewrap = 80 - this[k] = v for own k, v of options + @[k] = v for own k, v of options write: -> content = "#{ ANSI_CSI }2J" # initiate document From 6f2a1bbfe2a03ce349cb824eb13956b02acf92f8 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Fri, 18 Oct 2013 12:57:49 +0300 Subject: [PATCH 012/108] An ADF (not amiga disk file) format ansi. for tests. --- ARTX-LGO.ADF | Bin 0 -> 10689 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ARTX-LGO.ADF diff --git a/ARTX-LGO.ADF b/ARTX-LGO.ADF new file mode 100644 index 0000000000000000000000000000000000000000..18cbb461a2550def5414d50642a2fba1e49175b2 GIT binary patch literal 10689 zcmd^E-EUOK6(4`>?)9=>(+5kd2EnZosl-aimMYFRTCsu>+PK9n4TN;Jc>TEzNeJbE@L;X``^}lTbMM;ZqpGS%oyp!i zXXczUzwpD*G`#jA=D8tVSv$Y8Z1PBf}#j6;6}F z;z*^4b-w+n@GL@(^@EI1m|U@=?o=+?e@Z!O70p%9ka z<}9AfELgyb+o9nt>x*F+{^dC~P1hUM zQqX7wrCg&f4Ejm030biE7UDFvF!(t_a~r~4xlYckYMElSQ!R?LJeQW1jCM^Q4m!bM zx4yqrs@LuInC^7y^^%L1W7H$Wri}fS!2?rYNOAh+U11{ET!Bbi9)XrXTb+GzH}dbN~GNAe2`e@x(|YTb-}Lk0H0 zk-mHPZs%cO@HGOQ#yXrXG<~UkVC?TSK4kE2+WafaaVZwfxL!ModU3%^G&9D1BW15A3a)}C*~-h z)g0NE>p5M*p+A_Te&b)HW+@*3bXw(c9MIqwCz?*eXyI8FXI-B8+G zRv2y#IHaTchI>^CR8&8}v^+PuaPQtE`IR~rEH8KHkDYnz>frroi9)gTW|$WIS7u$uOogBDC0YF z6pQ$;x@7IsLcBwl^hh2Z9)B5DTW4zlKr~Smk73Htwa@-q5f**5>5rI5!Dw(V7>y{U zKn3@N{>jN?=SOb5|Kn=1!*P4Hr-{j@g@_)N_Qbp`icW&==6{lo_${A(Yt)^t^(Sdl z8eW@psH~U$9(Y(=P@f#Hp4vWX~ zTfXjjOGoQwKPzYVwQtL(P*7P>ceQ)>Oo0WW0_vYsV}XYv8C}b|92(T_Wr}w+;iQN3 z=iQe+F!H`(*S%G*HLx}iVwZ4W3%hL&v_Ua(z>>C z8@bKCb|fiM3BG8J`mI)xc2B_+_OJJ^_P2W1dc$2EI?Y@=THET~==GJO9S=tRwmu(Gnda9pBTuIj^UxaSi)l@7q?20xOi~{B((JHVYY+3lr)NUyG$TJ_(Q`&y zh&?%WJVILu$K|Jq$MLz*v$aOMpv9hr(V%2{Z_Q=cQ|ubB;V`h@Pm6X%z) z(Snnbptbf8b-?Kq6mCCzUV%^7G}NuACg>B7T8E5hO*D1K&I-S-bX`1ge&8{6wK*i+ z(!QAwhy0$$eaPa7CdU^;e&5%z`r}6xd@Hk&akX`8UsLyZy$<*3DxHu}>hq|kQ^N9# z^j=SR1f4gP-_y#h?Ycj@aPWRLH{rVXPu#rj?%I2#@2wvsk<s!B5l3y`DT*AuxJ;2tp))Sh(9@}}hR{pOb{NC#>t~DEBiT~+Rg4a2Phf2}JC=PBH9V3~Z(}yVZwylBv**Bh3h%RcABEgY zc>f~%EA-K9OYhN2t))WK*Y)?9-Z_Z_-x`9ks03(e32m z<-xJRtAmq+{@~fcYlE*39``PLv)+5&6yEcm?-jixUdekEqr=`=?>yGVyca=Dc#{}k z2H!dFiZ_mx8O)C1H;M68yk|7;B-Y2kch1Q8J&L~Q3HQhy`VFh8-==<#{#NSU)I{oy z)GMjusp-^MYBqH-buD$=d((Tz`yI4h^)3R%IG!(ox}xz+cmc+jfq;mJFz~MF^(jys z6Zx;bH}D<@_A8hpvgw2+NAPv}pSE{_YYG~l!eB^aUVGdD<$KqvB zN5FN`JB88VUHm8Eb4JR?IwN^W(=WoVF(9MGlz!7YYNW-duYi70@8o;$!mq^Gjbv}l z^s0^jjLwY<@GRwPpk(CYCBA2L#x(Ct%-`dP2{UI3m~nc&-vEK{UC=%{4@+p5c&Y{- z>hNKYSj#-1&5Z0N#FYDz+xOmvo)dUaV_jxto;ogLe%4sa*?FyV23i;;#zyqgZ{k16 zwgA{K;b-ws?<9~?mk+%)JkM(TnE%YYxK4+fk)@wq3?ze@lP){r-o2#rmRjlebKn{S zM#)&>XYNmHD~N@@k@HHwl9%z{3t!xi)+5%-^g+^l&MV!Pu{MZjCGRG%+oZuKd17;( zl4IT+Q2BUHV7yn|u)dMV(%u=9r6=^5_K7`=ZlL33@w+^q0e;qn37wPU+Ao4Eo`3Wz z(NGgd^cG{s+DE%CV9dBPyZGLHcJ0p8H0!;rqfV~#-p?`iAv1+HF;8PO9gF2zJ(m3B zUfgvG2v|LBJ(|&$&Z5dVq;jGeTb^`E61~)yDIn&lxukt&wfz6S--}L!s?V68oV3sq=a+A<&yKh6@Fs$x!THLpsNZVVBQMISnW(;cwYrRC6=XYA)P;!Ef zW7qiiyPQ|&Ri1RYFYMm@E|YJBYZ{NQX{ltaT8tj;Vdb*lc08eioRR;T_v4Pqe-m93 ze<`gDHt{!A^NxRK&LKDvrPyc%Jx_^BI&+vM4(O+Cy zY%Ye2&24{sWxKf@;)&mF|912C%Iy$O{7(6&R!%ifg?QpO=}$H%S0+O|@q6GuSb5NV a5aNm74gW^-#>$QGhW~u?`IYBG-Tw_dj@Z8d literal 0 HcmV?d00001 From 1efa1906d64119814154c8775e75593c884f859d Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Fri, 18 Oct 2013 12:58:04 +0300 Subject: [PATCH 013/108] insert the ADF into the viewer tests --- list.sahli | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/list.sahli b/list.sahli index 10dd256..ca39d1b 100644 --- a/list.sahli +++ b/list.sahli @@ -28,6 +28,29 @@ "line2": "Mercury", "text": "No tools, just a text editor" }, + { + "file": "ARTX-LGO.ADF", + "name": "Example ADF (not Amiga Disk File)", + "amiga": false, + "width": "80", + "author": "Apathy", + "font": "ansifont", + "color": [ + 200, + 200, + 200, + 255 + ], + "bg": [ + 0, + 0, + 0, + 0 + ], + "line1": "Artx-logo", + "line2": "Apathy", + "text": "From the apathy pack announcing ADF. Again, not Amiga Disk File." + }, { "file": "az0!-revi510n.txt", "name": "Revi510n", From 14b4aae4b37b6813e02adb09e0a1fb25fff91263 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Fri, 18 Oct 2013 13:12:27 +0300 Subject: [PATCH 014/108] further support bits for ANSI types. - not in Sahli yet, don't change in 16col lib without the ability to test! --- list.sahli | 46 +++++++++++++++++++++++----------------------- todo.txt | 14 ++++++++++++++ 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/list.sahli b/list.sahli index ca39d1b..5104e09 100644 --- a/list.sahli +++ b/list.sahli @@ -28,29 +28,6 @@ "line2": "Mercury", "text": "No tools, just a text editor" }, - { - "file": "ARTX-LGO.ADF", - "name": "Example ADF (not Amiga Disk File)", - "amiga": false, - "width": "80", - "author": "Apathy", - "font": "ansifont", - "color": [ - 200, - 200, - 200, - 255 - ], - "bg": [ - 0, - 0, - 0, - 0 - ], - "line1": "Artx-logo", - "line2": "Apathy", - "text": "From the apathy pack announcing ADF. Again, not Amiga Disk File." - }, { "file": "az0!-revi510n.txt", "name": "Revi510n", @@ -119,6 +96,29 @@ "line1": "Revision 2013", "line2": "Blocktronics & Accession", "text": "Pablodraw osX" + }, + { + "file": "ARTX-LGO.ADF", + "name": "Example ADF (not Amiga Disk File)", + "amiga": false, + "width": "80", + "color": [ + 0, + 30, + 30, + 255 + ], + "bg": [ + 240, + 240, + 250, + 255 + ], + "author": "Apathy", + "font": "ansifont", + "line1": "ADF example", + "line2": "...", + "text": "not Amiga disk file" } ] } diff --git a/todo.txt b/todo.txt index 077ede4..26a8214 100644 --- a/todo.txt +++ b/todo.txt @@ -21,3 +21,17 @@ OTHER file parsing - (A) - parse files for 'info' (B) Get with dfox on the partymeister package version + +main renderer: +hook for progress + +Support: +(B) ADF +(B) Tundra +(A) SAUCE +(B) XBIN +(B) Avatar +(B) BIN +(B) IDF +(B) PCBOARD +(A) Amiga ANSI From e8bf58f2c561e8b2d9c4785efee58c0f74d39124 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Fri, 18 Oct 2013 17:27:47 +0300 Subject: [PATCH 015/108] more exaple files. MISSING: PCBoard, Avatar --- 51_DRGN.XB | Bin 0 -> 28283 bytes 51_EMP.XB | Bin 0 -> 35484 bytes MD-XMAS.IDF | Bin 0 -> 12792 bytes US-SADIS.BIN | Bin 0 -> 11009 bytes list.sahli | 338 +++++++++++++++++++++++++++++++++------------------ zv_iniq.tnd | Bin 0 -> 40247 bytes 6 files changed, 221 insertions(+), 117 deletions(-) create mode 100644 51_DRGN.XB create mode 100644 51_EMP.XB create mode 100644 MD-XMAS.IDF create mode 100644 US-SADIS.BIN create mode 100644 zv_iniq.tnd diff --git a/51_DRGN.XB b/51_DRGN.XB new file mode 100644 index 0000000000000000000000000000000000000000..ca77ff8019ec1cc60d9a0e439845039f36feccfc GIT binary patch literal 28283 zcmb_lTZ~=Rc|IQ7=fvaV@r00MAPyX46Ue1uFvbjFViQv*a)J_<5D3WwV`GnT7-GjE zjt!$ByhN({ShWhyb01P#sj8ZXL%~iOr9wceM4ZMP_xt|Ky6kgi zJZ`!dbM{`>|6AXGS!?gJkNNhFU0=U>cjIpx<7+1yjk`xzY+g5V&xcoT`RM9teD z?Onb4#-*!QE#GL&^>NHkjeFPesrfuRF+F|h(xsOtrmcQrdI6m$Vjjh4GNH9s<+$_) z1@Ms4>De7SX0^K%zVY&_ufF_-)!#C9^X6k`a2(SSre|?XPe6d?x8JjU635~9-qiey zPrdjQjsut8I;8~@6TRt6(>-hdlT&ZLce#K0y*E$&M5;%cW4CPUZ@XozIbzMHG4#a5 zf+MCl91Z*@$BVsQ?}bnBknDVSW@@h6ottWR=e2=+k}}PL4jWGiwLHqKp0$}gluoq! zZL5_wlQaDpC^{aeaM?VS4UNACPZRL47FW%2=wOnnAvc!_1+N{yJxE5BXjGc|ETe zFn-(Yn;fHMg70~suD}CpO`9lAfNE%wnPDAgto0bbjoGCEQE>6%#p;yd8>jj92}s*t zfd$Od;;(3adiHhN+w10_jmvYaoSmJ!to8lby-y!|dS>seA+Y?+%zIh?i{0+*7c@^v zBF^N|_~e+@`dh>rlE1$-J2!Xi7=*s1_3zEd5#@D%*YBU_pf+Cjt@ryE&!s%4$760v z`^)?|gy9oibi3y-&bPKlk)ho?5gcr~r=({4*WwW)H3d?MOTPSUt) z$FcT&^w-9lGc#m+cD9PG=DRQepWg;ZnnQE*Z#J6m!U?>7YHr_*=*aj*{ZTeQGvAgF zj`8P?a(v?#ra6`Czu9cSn|Od1bVmDGF#v0?jnTvTXf)pLpXWg+a#S4N<26cD#q(C% zXlVU>Gy%uwE?phno9sjS!vcJMj1Q6S>jzrF1ZV)UJ!}ycko2S` zv(Rk2OPygnHGdkzR1cFNu}%gCab|wX!8*2?IIQ`jRg_~F;^97AL;V@<+-?dZXU;To z{II=3pXl5u>;vudJfcmJpMsy|^}sMa3l&1#H1Tk}!d~D9d7k6td9J%toSx}>0xLtF zXZt+g?aFi+VJMDpJisx}u-KoSf$lwCq43PntqT_}e4q7=#V|_k9<_r9=ugt%Yivd^UPtVP5Yb+=< zesVj|FzTdqauPvk=2Ya9gHd0&m8VO0IQQ4h_N^$g{Oq|C+nejzM7@EV z80~=1duGqf-V<}s?<`6*|KUF`)3^SJLFD$rZNj$CF^C~TV#00Dk9~p>wSMIDM?_jk+igfiki>s_ zNIY~T@od36<{L4Xt(WcH+jDc%I-d)q##Mp#hkrIX^KYg3%rI<4Lsq?V*+ zPf|F@vT!gQKzhD6s;N3*t+dCQUNbxv9zzfIA51!;eoAfF+-Wg|@#=}xJ{-rWkQ$Cw z$HNJi#j~^)eA0#^8NU1+j)v54O?A9FZeurltC^~UNmg-{@ELaWy}25#PGFw+WZNjW z6-Ql@5GH)R7MaRX^_tZ|NER8=S2)yBZDc_QgeKkPL8g|ZzJi411wRp8hK)TCg(R!pblrX?3^>7OU)G zyzm6_tF87^u3>l`MkaU3W@M~g;WOdpFv>IpU&7^A&PhU^;R~M%tKg5F@L-sf(ZoMd zvXjzb(;p8bMfncbuxejDFPy;n4$J|*I*{nUNur~&b7Uc*V~w;2HuMd;F z^ue$j*d7n7QTt$ZKcdDKl^Vvyn?!$LO=nJiKQ41T9FBzN5M>Tl-wQh;&L!|Abku|B zOmPDrdBdnjlKsIZ-J@3n-w(q~_z|rl9CTS>2c)M6rwo6L*sA-XXGSiRA^!YB#$=AK zU@4)ae^}1&sn)_H2_3F7bjA%CS`$7p$ewudn(!6Tz=PGXVw}-%ug?hQ3?EtYl%sQL zS`VyZQW=6hcUj>f)J5Nfr-3=KfMY0)a;u+(=e>uYu}10KV=Iiy zc!gxKK|W~FKQ;?GmmkM8M*`B z%VJ+dLIy3xvhd~D`q3O;_=?SOUvDi^#$R~CdsN@{t3mdnB+-?lBU53M_p;K6#qous ziT4_NP1P?(fmJb8e_7%S-}4&mA%5l^G*ys{C|M0P}0`c&x;1H2f6IPvPU~!{i7gnH=usb{#YYv10Unc9g@g}-; zHVktMF>Tz(z${nFx`tVY$*>0~oJ%=p?Z7&)eOGL4w0b@tgRQUv{Qz-(ZMZS(6Xgh= z6#J5$BTmrDM2AG%q`zQ4co=I$2Wb-Lnd+u$m(HlpHr9hlX|+4-l@{s?@L?c4j5?+n z>1&UY^z=y+)VDM|6_bB4P{nPU~R8$2G~N zx&`XKG_ohw7kxIiUSoGjG7HR&_%M?01hC(W*T#(UqiB^wEs6L{>)`LeHSmc)I(vGq z?-dvqb#=7*8Vb%?f#Y44?E#2z=c_ ziRmn_OGvcTwCn8A{=T2{r_qD!f%4(Lun0clgy+x}&_2$lRq!VkODT0MdQRM>t9Gb*>+ly#I;}auC(i(K z>59+B2QxW?j>^vP8L7n??ZYp?kdE)VE$}7TL$2Drb&?!kJI3eL34zEXzO-M!ijnGd z4H2Gm)VLOG)Sr(p^UL)ZYrI8yc6@DX2YjaA44)t&z7%cfp>-?=h_J*>8!FH!|0RYc za@4M*44=kl*=pVW7)w9JRo^a^~km7-gR672*2o~!$Z zq98uij_>XYbje@c`h?#)67|)3X`XkF1wvpne4%2F$UChc8$L#dTwAzS?T8nUGxH%L z*CaKC-bceL1v@o-#?nxH5?h=lsXUL0Q4TV~O>Q>nEonEpEk9$deiBDyw zT3(?HY`NVH!58-jB|gs?y2z4qM}I<{YnSX}2T}82PtY+LbS)!#X zF5t^-u;f$uao<$!8fU;RYlk8PQo$FhPHXQ_{#1KWzH;jK@QPBs8*2yl62FL1kN9lw z1|FACQFN<_;b&KK)zH=u6 z9XBBxyzHU%WYj|8^uf<{@OIH?^l}CL}p%Gjd8uU)*E#t$y zfqN*n&k|8-KEp@oSdtwmo^8J(`Jwp8gYqeu(Db!0>FMFg&4 zA~O31#v%BO!3>{zY-x>T&yux_@p(D;RLisk?93R$q6KPnp@lK|Zc}j%vpPy2v`5Fr zbHr!yS@1=FsIwT60UN&q)w`^=`iN_n5|t;>v$HsWFI@C!M~jOoM;A35@6X|{i=xAw z2=@Zqr`VnqI0T7f;92$`Q8F!2YZC%odA+cwY?t-#1|-!ntuXp;ov|{{IIMdWy`S(g z6F&7_!ELst7SM)|dTX4G-**KVjDjLw(M8Z3E<#+QhXSj0;-`YH-&RT<9lcudL5z_Ue~ zcz;>L$9D?+DW&b7G!nl;L|AJbiF<)^6}1H%rawg#+egVP5oUA0wNV{iZ~bEaL7QWu z-{Oy$(t69BMFwz$oFpQQ_y+Jenz1Yb%M1{0#Ao3VKIha1`0W0zrGW`@amGJ}HnpA224Xmq&^mq3?GUqqPv0;;I$3E8NJMlQ<;`^$=${!{t`W{WE=} zh|bC$5nDtFC&3?gR5uui-XPC8R-pcZfLDXoZ1HQP2(1cY`OGxzSflhYtTM{H zYqP+W;nDhp%CAtq$oeK;3(wUEU9){Y-876DzGQV4e=&OaFQj+sF(X3;BxF`&dZ}Y& zywiGm(0{2}B>+#}CYz1)Q_mu=@%uOTR-Em- zQrb2+(nOx}=u2zU=oQc64V)FVp4k%F)cbIF7?I$w;53^H(9!N>WJ-KH`+g=v$k>8s z0-{gMRj?=;vgLf46w2prG)6}A_jAgsw9=7sjh+ik*vV*OtK?T{u#AI(kFa0{3Zm&0{fM@FjjelWsFD?X$z%)IKuEZZfmqrnO#KZIP^?L6E>C^ zOJZ}hT}P=Hlr^A;^GQ5f9cq%l47+~|zf!K{Q?!H`zMAG$BJ|O8O+)UY%t`_+^HUu`22(yjDkM`4meS?I1@JHCXQfohC-3 z$BPW&J4@L)6NCEAeL}QXg`{zCdqqIcATtnn+|>mu8$_NgtV+ zqr~{@2JvAAg{_Hp_`KL`3FDYg=v;wQqnkuZmxvkpI61qznnaCwYd=SfQ9_OnZv?Nx zU-3M`u_}|Old)lq^0XNo!GH3UMGnX39^+VKnpx@sUG|LZxP8c+r)H|8%+dAjZM@B3hhL1dgW7K95AFHAz`ZN;b zhL$)U&x5I`b&R8{$J+2f*wR~xztw)%nsiK^VAegXk(im<2*!UnJiHh_AUsWskfkf6 zF(JIDUZZ_Q ziqO+z67G<5J_pajFnkfL0NWao}!VXHtbuSk7c8E?k!)h#= zV4SmNPi^vAPvjZ(55v}=(Kxo~7TP_6H&>aCR?h<;{arVin`LGl9UZ?3I8yDxQ##>{Udv}D;{Syf z;>vW^(e>mP2plDqq$_#e{0q!gpWGWVT9qb6?4MGG?+fu<^9iI~NMA*I9?z^bm2Vcw z9Rn>#*2!o;;`wV6hQ;~A8?~6PCP?{}qq@d9_L1jGaW2Dq#kpxjFt6u2=4o+!d~y|& zMNEl%r|YsjQo|Eb=lZL+x<=j*0`Y0b#`6;R;@p#biEFXkBv47?3v_)7&wgf(~Hh?c2ce!DOa|P?;eQk^^dgblv<(4N8D%&lrxU-JBUjm=* zmGvERYE$0XYr5RwD?>u#?NUi`C3-T8JFB|{a_ClA!_ zE*HPot1(vQy2G zo5O=HX|eOt_-JEUM@P8l!X9Et=Ct-2_!LpbSmaK2RUVwB6fV8ox@UYUm1^Uv-LuD<*-c7foL*( zrtdXjf0QD3i(x$6rbu{4vQ+Y4m7@Ppd}>*aGDB$ItRBO?U&I&hXQO}M&4ut_ju70f zB))5*Bl6g92)>Iu!(WvMogH|_*?15As`v@l2i2y$tLQnD$*)7A9BOtYeiupGTar7i zjs1q=`=?_>q|pROGu@TfYJK>$773mB1w1y&frhd7SI_v9@nP>g1XJPDL+aUwh_Sxn zS1#e+aAW#SAkd9t@4rm#F0J3rPR18nUx7$`dMP$-PNTdp2pdbkrEegzEQ7h_=ogYa z!tktISxM$CQm#71XUyR_K`T6xYqq!I`p_l*%p%k-R#iKz?^F*fcNxM0pYWPJ8C36p zR!b2@w}Ar#MDHg{yu`zCz2Km4sexe6cnS}Pu+yokOHvql-)cbWIfZ{Fb* z{%df2kL)reDvvB*x5M#am9!^zc=D3Jf1_(%u5Uh%Mc!yc4l$~i+pRHh?tFSWUD=y;+-}jCC0NJJ75GAbOGY{!UFH{~^VNbsre+8>~ zF7`IhC6CZd&Y8qO-4WpabQ-G@pBOz9_Nhm}Q=w_t-a)grgl`2n%xq8bVbzT*FVRW5 zE_~?!iXt@2rw?HFOmCnz@W)x;9RMcVxigaJz4b^hV)EJZJk&Q7-RhjN^4dqB#4P1@ zm1}n`{;dK$(~@713pyZ_dkXPejsP9{nE4rzkGqyEahCKU{AH!}YafH0`+f)K0$;R5 zSwZ4XG_q$=h4)_E8Lz1SvYax2POMKnHemj zqp$>~>Ih{=${jtuDkjH#dx8)?!9;Jx9d}GXHtspam?K*3I%jiHd>S>(j}eh& zcWk~YcZ?dJS%O{EensJ<HxkHZ{(~@vJa3I7vl+QKAxWk zk%k+t2c?fw!{_gb7oL!?Ar{NOD`wWmRd>g5d>lV#FkWYt=Ufdt561_eA&_B`gzNiuE=9T8v_RFB6eq_jCiERLCmk&&LqUqSvPNEiZ$2+;)A~$nhfj zl{MVsCstfWCX_KjtHt_irC2vK<+WaB=Vh~&v_BkQ$!3hB%4(dG_BDJ3W*@bThCq4U z2z{gyQOZSZ9GUEGs;^$M9>iUqk5`_#&k_#*pYavwxB_7n%k?K7fIUHpX0aR*GWJOX zTxP8Hu@Yl`Rbr!NF!q2J^Bt&$rn5VwrpXDraJ%X|K9bXNH zGFf`AaLVYI+Sc)ryXqOo5k5!nax1Oj6A5Ls=4j3hX7!~i+C=znD)*}#hnLmQIX;cZ zh;+fY`>e-k-8Gf?yl4Ha60lc!D$ep<{EKnQ*D^k7AIV01boeis+FQNoqgGEV)6O;i z)v;)QRs8*NWrPcR!ykMk>~oiai)~76uq2MVG3-d%(2>LcR8PkAVnWB-aJgEK z)TR%_G3;Kg(CfS5&wPf8QZXck9D9jP$4vMz|f< zpA4CI4r9k-fRB)$eHAS6DN1|_EB0v-Dcq6bU)2xx4YNlR@D`(VZ+-Qj!JcgUNG>Ox zy{EVEb9oow?ISXxiRgS5S{v3lcN(8v09Pp&8C4e)$mx>mw_V~1UqpX>MxL)tyzDz-H(mN+d( zyRR{jj~zaOcQIC3S{*)Aq*RlQpw^#{A=irGdhrcli_Aqk@L4YBJlLDq+>%P|F2L>tMFLE4b-MmX9xzx1t#c1}(n-#<5Z=*OKs-{03c zvVUJ^-;q5B4%z>|#Q(AP`|rE`bNAl;WT(@)=l0KU+59BSpE|e)`SS4ge|*-j^t}Js Z!+V~4`gmvW@y-vQ*|Yc1adc}m{uik8$wvSH literal 0 HcmV?d00001 diff --git a/51_EMP.XB b/51_EMP.XB new file mode 100644 index 0000000000000000000000000000000000000000..62fa90756568ce79e98dedb2c39a09355dad1d38 GIT binary patch literal 35484 zcmeHPOKclgmMyZ#;s8TPo<%o^#Bd5p9AyBHnzkjG3D}k`w<64xXAsTPkiCl{St>=7g?#BGd3j zQ`zjZXV1P#WmSGEyN1dsCyrzkNy*$TKA!zR9nit4+2Yt(QC8=~AHMni`)__w`KS8c zJGZidV@0-*E#k0CRPmZkZ8ABSq4%D!$LUPB1(MwghF2P@gj*wO z5q%18qtR?WeDvsPQ^S?Yte`C%5+3Bs;!V{i;#StOEL}c%GF#bbgXB}Pqc*^J+2`hG za)>u^D0OI~zT{b!NB>Rw>3q6hL;Fdk-y~y{bjjCo%`TG%sac9qTtKR#7Lgp~5yvtg z?I*#V+aMC2JbAKtU(t7h)VECp$?`9u0S(glmolC$J|KO2pbXS_QK8IYvGPLZw~N!a zR&M2{i;4mj&*h$b>OW~Vi=WFl^~Bw&{z&=w$jbavtPQTcKP^@&D=X;qsmy<#6B_Tp#Yk{ljx~};>y0M zP@@SW(D|9lY>qKf@Y~fHlzpxu7!27g+&Rd07}W zv^)&sFYQNk5Gj0YQuEqhBSk{oP`QR7^Bax|X!^8CZ`P+>{owl00L|ZtbowPhGIG*s zkJc#vZp?GY#+*ur&lhO}pxbJAjoY-|`_`k{M1JW<*3=?BVtjN#c(cjul82%0h#c+UC{Av%UCaS{?XQry zQ6E`*{CJ-74dY^EW1~$HdB{;oFCoOzA}~Rp8<+ID@$`yco|NyEFV*MjaQfu(5tSZF z`6nk^^#{HoKFCku?U>iomrNhzLz5wzV{rV%#>R{P*?593rGE9jj~t$Xq#l!okN~{+ z5Z+$-QNEWyiu>q?etGN*F~{L@|Jh3AqOm4Pqccqh3?({FO{d|6a`zp1QX-9^_c>Rd z+GPIn79&rS%;DjGTFDQPq~gVge;T#=sfe@&n#9NoIG-1 z?GJyx;|~yC*zv-b_#)-RN96I7x{fF++P-+O{7;rsUYFBXuHO#i|71C%y(;I#nJ%>N z;ht_C`V`$HNj_9u&ck)0VQi^%efdD&s3J~zU0>((^@EgCUeR|!^TXE*=~1^U+>NIF z`9B*@`&@3z_&HGDDX;RK@?7p`w>;Cc<+i8VamwrZntqOhe_wwiBM!ZqKUGd%Jp8Kk z(LjBtJxNb0DBmDnj{JBLenb<*>|(H}T;IbDyh_07kRA8*R}IVHSozHByMDieg~ z#2p=!MaNe(|HmO?M!N~0=8jKDh4aLr#vcP72?spveN~~pDW$8TYw&37v{YQVXXXE- zH>B?VD)UcaI(v~?ZeQx%5fZzVv4Bxhk$^%Z|yw zgYfb~>x7yFGwbK+ z-Crt|tmNl0iAF<#@{4~==l<8PJ`H)ejd||uL@&J65{SIj+#RF#k`W!RY`Om)zDJ}3 zuL-`1yg6Zxn^(W?PF^-l|vytA4jOq$2mUV!f3( zYWqDG8H%JMcH~Z^9GQ(2aJP%l8;5r(0Z|3IBVp*;31Ca%9rn-1y}}5`W%sFK7U79w*9<;Z-b1lz45zJPl>Qj9Edo*l^}r+~CtWGXToIon%P?Ftcb zy_FE_VkjIvaZcjfEkC^0UQ#8#wa6{@%F{rh)gqa9g^PzvE(h}7|0iVWgjg}#J6h=jb+%?hcEECCKgq= z*0nuf9a&1GQ44d+);i5J=+{{rtuKlip)dB-c4tekHbq>yN9cCNSKN^J9vxLX;2R?A zAT2EWY#Y0tGa&!H6=qtzCoaFhKkgnUp_1|ZApLaYU4it<)$*>!4vrvy3;a~TUuNNU;P?te-B(~8>)MVL` zbcM%5xcIVVDLc|FI#=KLOjHQy0Phkg{pvnjCHZmNsDY7y(6OLJ7+I)wUWqE5b9zf? znxzD))=dnunLtiSMv+w(BzwP$s>S z!p9?pD)T^mkhBw`%Z$N;?M)F_6=-}l=iE+742ZahB5=EC*^vjRL7Mg*nik>1-!Cc0 zYA3?c6cgx+DHj)<_CA76u(cDiWU)SPqVz$;{5_%0CEdbySFbKYgRVham&Fa;7C2lK z9hxJ?pfSq`W4c`TYbU;QBuHN&$TZ?_9DwuU`JU;M;F|L%75gf7*XR4kompLcn%G zQO@zmBuO4^y;RV>UJELT5BN)In--_hmgBi)84=a;2hZ1o?V@Eh)*@GNqN$;J;q-_c z=V4#M)hv`PK?@?};iT_Sw3fVmdi5AJZn`?^Ev0>xrd&AQ9yOGF#0^Rnb+;Z%vQBdy zs^_M6zw3hUF6xS5MH}mVm{$ii>~EA5Nb5t9mDG7qyAUiV#dMvmC9Mv8K^?+7s^u&73?T^zJRqacn8p!Fg zvk@pY0iVLY5q(_IH0cqEd4fL<)Y)c+qg${O2f+6u-CuAmgfTV;NoX0}q!HBZG5pRQ ztvbtkEeO0`fN$*36Ub*k+|(2Wuio8X+EJ1LBbc1^(5#^ftxy!}{OzvnqrsKXbAHk* zr@r_CzKp2}`ZCGAxT4#JwK{VZ@F448l@A#@bb{v+%1wYnjF5U9>oyYk<-31;!P|gC zWgYUNfISGEMpt0bfrP(*#jhFoL!$gZf?QlOtKIQ#z>S_Cu}3gFH*`qt|ue?YpT5!IxSA z1ru5_j3`NG0GxGB4M8`o^#0Sd{=pu|A}%0k6!%E+{%JT^P07J-*USgS zmuO|(4$-uO@o^Nj^~fuRkD~Qg(WV@$ysN71dp!(%x9{Qg$<^cdZhhP9L%B(6_;VvcX#)w*K$yaTmM*ijmD_W^=+f#w)y%&}k)SGKDaYz5;W&qBpSXHNH&cLiUP z%{}ZHV@|)T8GUz&d2@j6n2TDNO#=HHcuIsI#>K}x6E`tOj^Tbt)&$BS&nCRR=zChr z?|$T!wcZ(gZ`@n|7Wlfm*IH`(zhXRRn-r6H%at$;Xb#Yy;Z<>6jD)QWfV0MUY-cLu zdN{0|?drZO_KOnHBc6fUZK8?6cs1ZjF5iy(86iwvL@u<+X!#gP5s#^PXo8 z?*_h*BcA=hdiN}!pqynKmdWF(7=oW2CTy{vYz5!KffpXZ`g+?w@rI5RIMp%*g9*SiQDmi!&`L=_!aQ0@|$?{&ekRT7VxIl9NxYw zM=E$bOTMWW-q&%aLe@9EyOal^MOp60awNy>YOq6qaap$#}})nDnD(q@T6(m@j2MnUgJC2Z{8|dh4_5D z7N3e=h*f~EErXVti!I$9NP@3(ZE3miqaEmC-(eDOah0$(y|Ob04zl#jZ{%pPC2DrU zw~DVp>v2N35_hmAgx@KA-Cc~%bqrQ6H2MNzJWt+crvk{TXX5+>67Q7ltPKY*u@k#y!gmmJX#BT^IQ{Gx zzUxQevpI-hn}a<5I%j;xLSHBaf42AgmbYk(=J!NSON_;r2&ersVc0Uivje-`*Xq@a z)c)>w!q*1AKvo9VJ9qQXUL3pKzeV^;nPW9PPL>?}3J^~gcw~lEPX>Lqi`LP8i^=$U z--YcjC6=&zrT4FftaEI?)A;^-1pf7WguVrz!Oqn*&V%r~1$;wV;jat_;gOg4`%<61 z25~+%d_OdY%yaNLd9!NXHVft~?&ol|vDRC_d6v&L^A@L75G!#?5$7f3-@<2s44`Z~s8dUGxq_W3l})sgOZo%njnV(ohy|7B$wtKZf5 zr|}u=ZWORWs$u*keizK5X=CJ_!}y!W=zA-=8u`Z{nw{}ij&Io<04}yU4~lC{_cRbL z;74ad`3{gHTnTB3ZVB^?RW3`M=23T*^UAm@nIHNvhL;|qooJ8bz$3xG}$>) zow=HGhxhmVwGS({J-%0gF8+@W)<$zY{;IVv`Dt*?!N30PM6)yHmE*f_S@}@hdn-IT z)3aV3=*e$*I3je_`q$^5B_CD%zpFaX#qNf6CH^n*o3A0hA4Uf`i|{(Hp_Df~t z&Le&A2p@lqF#G*2{*PG+|Iw_5-RIx({&N*O90OP%*|BN(=mmIa@?uNolu0s}idG

hmVhGJBB4rFI*s%Npm`g3lZBH; z5VEvxx1;x>-$uW~Rij;HyqBRBvb7m#KpwLT=KRgI-)*EFvj4nI=~t`)kbMQXb^2r* z2>EfA2$DT(tCm(v8jxpOp8?KA)FSTL9pqFHKzV){J(V;u<|XVR2k)}&N~~wid@F%OEqc5{;SAukUxj`Jj#@@GM-1;2>&0o^KaxH zm(mnpRd-xtd20aRT z66i^wCxM;>dJ^bKpeKQz1bPzaNuVczo&2zUkF<-m2YTKoyLcUh0*6hWlh0;=f&MwpoOSDsM*3UO;EIVf+nku3A9= literal 0 HcmV?d00001 diff --git a/MD-XMAS.IDF b/MD-XMAS.IDF new file mode 100644 index 0000000000000000000000000000000000000000..8e70265f3897cb75d51e15f5f451c23fb0cd488c GIT binary patch literal 12792 zcmbVRZERFmdcGbrzW2s=IixM!VVC0DsM@g6ChJYM)U8HwlR&%Cl2DOk+w_j^2QLIoUe4PQyoT`x z>2D26=x++P2Cw3|8J``Nit{f7JMnoL^jm{1=qbfU8Ql*`a;_5^(r&^0E5VDHBg*FB zCE?hC**Mq;ly#8tJ@nUsa$^wtHx^Qx+QNTZ=s~AVf}j#!L|@TKu{HQRjKLvtiMHT5Fz!@(cpo0h%;UC2#;Y>@ADqA&S9kJ@bqcazub#XjX% z7k<2@3LQ6qd!6OAHVF4ipzgs(|X`68tHU9t&0nPbS`uWxN?{s}gxJ z^xF#kW5kKNYoDH^U+59~cMHBB3EIVX>kzZlAMAPF-N$!Z`#|(9L7w_6&6M?!x&g7K zA99{%>{fV(vC=Hs96SLFm_x5ZM@Dd~RCOP*Kk{Ue(0m|MLmE$nS8n zPlNetzr{D=6t%p> zI6orKT7EKL%UAIkK`+k7<{;WhIqFo0&J&1dF1`pYv~mqqJI(Q_n!D8Dx(0$PlnUsXW@0RgK`JLH$oV`h?LWpXNbqb>!IDaV`8b{3Ou;`5cah2Qny_ zNl;*sL?2#H^2ymi%*k*J@fwxbXyx8xbzu#uF7yC26rB6!YOI(vnNE%A9q%gSrbV@R3xaAX7UaLhBUiz3^ywEF6sFL@S|Mk7G|uGLdD9G09<^*IB5SocmJ?xlxiFB}wIAP>6iiVg_Y zgECU2<6deXeFW>Ria_obVNMiEFj-WXgws7 zkn_=zD311+s`&!D#BekQ-rvD&b#;>$;duzF^dvn<50IbrKut+QgwcqZ&lT=8ih*oJ z+=ip;z=Q1Ql*Iw2;Lrn-PgqBN;G0s|5xR@Fgy75fx)y#y-K(?`HTCJjebcwF~jYBM0-teF_A|6!?5!k_QKqsK%F zsV#gIQ9@_iARt zKIF)Ia;m-+y^VGHTWw}U+)hKAS)r7C263UyDi0Bf%F$WOAbK)Cf)RbqaRqj=!f--} zZ;9!4Jw`xqfXn_UvRrj8!*3UD z`+jsh`UEk*j<{%)=qGyQG&GG-sjLs?NG$p0Bv9wFp;pdr@(k!s0ZgYOcM+|r-I4n9 za5M>dDx(rjB)tz|yF+JO)BP_i1^$K7oEEn~vn zXD~en;U`xyODxw#*%@NP{ckZi7)^TPketzsp}U*7+YL`6>dqKy&FYSnu_b&fd|OU+ z%m_P$9{9!S{5uTMh3M|AJvm810PWUAv zvJaA-CCvTUOn}ZI%T8f^Ibd&jl)&?gk)4pJ^S;YFAw90Af8zU$w|VEKUGM{>><4`| z-qf`UyAEI;eQV)}jbJ94KydSm5x7=`+j7pS{$2Nx)fsxDVL{7I4ogKGbsb#?a;Vpsb$F7%F^XVCU4GEVX}q;;w@ks3Y8eZnEpld*Ao zqC`VI2D^~=5&`;-wU|cus@(VgHw@)e4DvY)YNBr!s#T*V=^GEQ!84k%hcQCtfd99- zT5ebF8hZNH#2taFh&n7oF7~?{$nM;mxna4BYArG2hztF#pQ=m9$s9b88_7wobRUzKA@?pd*Sn zRq_7s?*%rrRV|XY6WQZ{1G*);Co(gg1m;Vz$3xi~+7bVg#QCk}HEXN%CmkGaFSU*&kx zH2NS#JSddFf&82o-zQ!bn{>Be4V{ONb>Gk9oeC!*XmPsd&gU-Vj^qaA?$8)P`WSBk z{sBQ{w6Rm>9QrBX^9`*PX!aD4U-fD@rI}l`U{6pDzT}w=&2g_W@8IcbKy!~dQbvyK zOC+GaL;_^zPUlVp9|-0MzOfRV3Wfsq5pVRfr(B9BZyf$`ZY-zXpx&r|`0z*r9wY>Z zfrU5BU`$Xsb2^d8)uX{N=zr5(!*5-?&0FSeqqlwj4mO>{L(d^ZL+oTV4ahseaBe#H zS?)UI<0KagtK#j8xk>T3VtL+8L%5LK2OdXMi1cWB$1Z8qFFF-nO(fSEx>QzH|-i} z^|nc0rV^EF+P=RjJ^sPq@fO5b9F|)zd8i9x=HBMdawh;4{sSSu1)o?z87J^t@4L9+ zYfh+dYUV5Rb>dC_rZ|T8_)*Y&i04lQr3EsTn(z3|^C>N{aRQ4x-U4;J5429N(?)H@ zFNikN_WS!1qgLa1!3hKyzi`ML zbLyzIkl8{Wjlp~#;yWbPA#=21F^9nCd7p?h)xr6cEBsCTL@RDKIJKA^p0`)zoM=_u zNlPu&3tW$Z_O8tnO3l(Mg3{t28A9iIY6o+eNc%+};s(IlZ~dV1h^^Xr9<@6}-C9%K zXgBwaH1`;B#*);hKuvtj8p^sUo}AC2-l81ZLw}{UfM2Ji8k)Ti#4A@N16g(ZWj=>_ zr64aczJcciq@OlisiG>lOR|dYwG`BZwau(XWm!b$bDVaNBxkT_qV^DvdX2PBz}G5? z_4HfJ;!Pyu0ao6C`8c8GK6DXrRqJk=yKzuM-A$-hi|9o?&bCrQ6@EVm$)sUabRK>Z zeKeA^UOjWj+z_r>>sPH`qer?*Yt;&2=m~SNX1#wdPpL5z;ct9n0KOad8hs$5^E5@9f6m=7=UE zBXe&*cyLpKbj`(GW*;SE-Feirj5c>SKIxwi&4|pTJGmHo;rHIK4n(P%3AY0Jo<$Bky&e=G|!l4 z%~R$vJY)3M;QKM5S}o%rVdfd|#pY@Bo;DAHYZWM-mFLq!^St>hq2Tu#^jFJhjd>1K z#3aXBe0c8Df1dZ6ztw*Q|8d>!Z<1cg--yu$f1UiVw}k#n{tME75p$c+f7##R|Gj@d zIAVW2c-CQtJp2#vI?TL`?;d=%<3G6)C-gUf=M_9TF8Qzd-vez{#x|i@ZzYxdKLq7h z%izr0THnC2fq{>P1_t_csc)`2H#astH)qG5SE{4+b}VwNi#mF zcRteDj<#)PO2_>h`Zu7xIDM_66NN&xI9;q-`f_DzX0|>%GgT?ea;|0JvPbKWE?d~b zR6~RMg+igvDeO@k8lJk|U#(XE;oEF7?j7&yD2DjC6I5rOos`c^{0*@!s^c+ zS}G7KMD@t73PyWZy{kO~?o}!ki!QUvOZC$7bbV1rM{lnak7)$2w<8T-N+>iuF~7mvU|MOS#WMVDztZv?^d>sQmJES4e{D3V}zzl7wk7^ zr4=HbXfH(43aN$N#kr#Ow$Q*kPF4a1l~V>U>kUhia^za5pN+T2XkEU{h$&&AqX$@M zHa@-MNWcgw6wVJMoWvOOLeHcO!?~w#;weHM;FH9Xf_?{;8&ZKzL!gxb@uzf zAN5$pH4>@%ZtTnz_24ybiQ1sKRi5K6uF+y$1bzhTTzowb6B82?wTjhmQAeq}yH8SF z7gj>dYq~zuB`uLRexqJTIME#b&c41al%iwVFF3UL zx6th+gw;=Cfs~l&jqonyd9qF$tvsxEbwn*mJp20own1M)OSAZ*3e#(m%IEm<<;(RO zB{wdi8heq2Iwr69!1C9}cQbhBT>cfcT-w|1x`!QXTgTF5zbb0^M3Jl`nif~l8@{pI zwzn4=rex3)^(OV|O?7qA+i+4s*gK8{aQVCxl1d=A^-ZGQaTI}D? zQ9Et|kt?Z7+)r&iErhAt=pe~X?!Z#a{FcTw(iFDocxO$Y={Iv?+`^U1mCDrA%*^cU zty}f_+?*VTx6rZ8ak+Unp1P$3ZtQvG8FHm#^eVHB1L%&>VkLvv1lu z`{&$KSFzsQ*4f$L?}l?tP0h`|Z%kV{jg$5k8XlnP@9*zS8U_|t_-8Bd9=64LcNb#s z_A6*`Y3GW*D_6FtE{~QjU8*yp|1M)Vk2@xs%^##$c8uM&Vcgzx$;;*g*E3^k*xA|E zW{mGQH#bRZM)T1OS{oYmhw5T9=eR~164MZ_k%qK5-DUs%^ZQo*T=m!bJiqeopKv_a z-`QsT<|bXkc#hthot>GPnyOUFWpNC@>bK-hB3=Cyi)xbDeyhlXkm)O5x`12q>@v(DVJrdSFTL65}wv6{Rbs70Jl+Fe+Wq@x3b> z|DOAKEo^XWwm=;N$U{3jh$ty)46lu<@GN$%MkbCH^J_9Xm`c{C%N zN3uAVq=E3Y724+WyEMtLNLr<1O)EEc^wy54Su1dCfKA^Ggto8fOwB$~_F7A#$DEh! zGd3>C*fJ&b92fi86xY&sI&f#78_P3eubuC7@wejyU-c;@{=IF#QwHk>=6hqac*!K= zpKUO^p;a zJGkuF<@uE>SM2#KJ5pbI-39`VyZk{ekb|C$!z|4UYq%5>o;2$w=TYC@jYA> z!T;bF?R&Cf9d(z-~5bY98cPGaHsDF@b44vfd}}7$6|IDvvuNcF%A~#;eqb| E0O&X2IRF3v literal 0 HcmV?d00001 diff --git a/US-SADIS.BIN b/US-SADIS.BIN new file mode 100644 index 0000000000000000000000000000000000000000..385aed58a9832d40a11c08dd42a710cf4be6d5a0 GIT binary patch literal 11009 zcmdU#OOF)E6@|-PvNEMw)ZVM|4toRRRiRo~ZDu4}BQ%S)#hNh~T0(&6#_o|9?VnWC z-^t9%|KWw@^W77Xky-sh0yCIUz9Mei$GPX;%&wW$(JGC$Dr0rjSF58|$KmMf!UuM|h!SN*cNY~)E>HJA9(R{N@1_6$8a zR(YG&KE{)_?k{eV>y<6m_LVh`-=}JIi9=e9(y?pvm*~|m9brJh2QF^6Z66w zAz1zWqQbXc)EA{SsYM5<_EthKdby4E$?%jgifOAPr8c13I@g7IDG zPWiP?{F~y_t1FqKkuChjTIA|#$ zB;0~m5g)$e1y_1zuvGZqtMto9VJd`npcT9rau7`QoIM0bvwrHap2C)SbY(3%V8Km! zGLHfq`9UlZ0r^W_$kXmp-9Ge6#$6-rz=9FXJ-c92IuMaIifcyfH7uNZ78oi<@WE=o z>F4rHJlqFCS7Tj2a@2+`ZM6=tbd~-#TC$tQe3qe^QjATtvr+TFM&9J5>g|2w`jD+8j`EbMCTvMpib@!2*QN!_980p4b0q8(huELq z<-sh;B#Q&Px69pPx5&};6|9a9LB`ZC!-v3>sHqHN=SXrq%rVT~!eG2(hu*HKZ+BFi z7?}5Oh2Itr#JOgni00tO)e@|a$A409+6q19g=DT*S>g?J-8*4GrILQVh2)Pqs3O!J zXEbz8`br>ov0_X-FbX+SVp(9Rim~P8N<$s$qD}i!ZKdAsd`11pw)0z9J>kQ^PC6ef z>GZ~PR;M2MX%BMhd(CFI*a}Zo@f>7@CEQGSUfoH)l~=J(xc^iB4cLdQ_>3awFRev&SFea50(jUJWgEX$_w17W%-qsU%&XAC6| zBKAtLYBstfY>RH0>UzK`ms{KIBN?)0WStaU8uJ!+5fgen>J_5A&k_xZ}1 z4#My?uNV6;hC{wa){t=A>V3+;&I7{OM_Sr~qx;yGJ0Dkkrw^ESj$Ya#3%29EItSmK zwcX}}P}B@KX`XYx>4LFn!#gntq%~Su(Ls$QTtQBF3q$$=v2{b_Ibv}&<0l=xvMjy) zS`heT{EU=(?Yv)mWjkjKNPQ=sF9I52U(*%j)MPhy+ z(uyx7r$r`Pf`6dg3ccXZ+A<|S89%hxdnDRAI2-uIzF?p61;0kpZ6K&@Za{LiW;Y#^ zJbX|zec%iGr+#5O%c0S6Z&g>etDHwq!_IVPe%ja6y>b&(AxlD7QG%OnQkA9Z^PYTF zoT`+N7PqhkG9aEMe4Qyv?Zqsz9Faw>sD33kmIc4eS-&xg9^|N8IG9H#-(2JH01Q{_ zeGPi-wv^taLp1aoWpU_Eena7rGB2E*GqNBY#Ram}+;fz=kA1qP=!nxXlOgzvU2{2l zjqn2>V=q~uRr&`U(Ls$yWMnvN!1IiQ@A=D?VN}R7TE{ZTA;IP)qXaLkXF{ zF8o4<+2)?vg*365z2&?Ick!Iz-a#J-7Ab18(p?xt7`?LJ#R{wL{(%~3#5#DPfpsBA zypnJ97MjLwi_vk1tml}>6~9Y?AKCKRb$*rC1;5AjyZVXtPDjrCc(%-qy@K!M?|Zlj zR*v1MnQNLWBWe_V8N=)$`>9N?7!hYd_y}cCG1_?MZxBT*q|x9UA``g`D>?tHn)|Gc z;~L)^7d+#@8+}KUoitNqXL?hVr^7pcB^=K3JjO08gqE8f)u_rac_4x!BYYomBDzRSEyObsSuJ@=?0 zI}7{ed3rbQea^)cIeZ;vQY<-VQ%$3%s;TxDich~2jAopYg^_T1H7X0{XvA(f|viG{XkC6;~ z_?2=%{6Ld>f%HsP+nV1SK>}HGvg|s5LwQ?4 z_REhIH7o?Lv%HGg+{KX)(i+5bRURC=YxD>$F}bUzJFL}_qmMDpBNgWzUJKO4SpF89 zYWiB9{9j>iL-MMp+qvh!jyk+9HrRH9)<7-e>TKy!(Wc+f^$a=qibnf;Lq}&7f3srA~1EfHcioaXa?GlH2ZPbR~CP)f71Dp)}Bk^wa)LV zd-ZYkr24M9ulYY!$JK8>IoEe*4@O--GIn?C`1}$th0)Xc?}5>I^`?4X{k3|j^V{l7 zSQ@*>LhOl-H$v~lfZdnC?DNO_xiy{%t*6zq;NOb@v2UxNhMAK<^_6h@UR?V_^+R=1 z{ZWkj^#1a>WBEDs{Y~}yPFS3%F5e2v)8N^;?pEUE>-w42UaFSQbbTR7s{3uoA6MTB z&y(uUlKeS5|2k~`>g4z@kG^~G;Ne|3KP_SN&%@w;=$o*{eukLUNl lKmGB|*~|NnPM>=BHxC~^eDJ#m-~8*hv)M0yF}vg6e*x0u{R%0+AOt=L|*u=yV2qYp2aS31$5;779BajnvAraC+bS!n_?p6RN z#wMZSgv7a%Yf+V|RQVwlr}p0HkMKhtlgh*1=j?wWkA8_ezwaAk%sJLMM|hX^>9yvX zmodKajWNfZYpt!ffA#4nA9?CC_docmqx@Xj9sS_PKe@a;`pN(J>1KUp$Gtl^5$g^5qS{?o2fBVDLrTx+MhyT(ZL17*OuOx64u8w~2{O7aE_ORcpn)Mkv z2n2twY)X+$8?7U>DBf{aRG*q$l0UvYF!^bkdA1y*{PcHQ` z`#O2|;mTgh9R1OM`Tl{n=&ZJ=D-BoZMM<1pTF>LWu-VgfRYby2d6TMl7EDp=;%=z( z@^*K5rBTg>OB*BI;?U)TFD7ZyKp_**O9WYJZ+)*&^9E?P_#Zs?@mY6I?~tIZy0*-RJ$^i--wnuL-W+yes@V(^?hXJZ&IFWu zTJOLbc{J$upm4>3MB70-i-!=2Xvn%diPoXVhUT)56f-1oF>JK!ClZ8OX)&8<4s9`V zWE4+<=!Ma@ft5j}iU}ZMuTFQnKtTW;h6lae-G3sI%$4-=r9vJx=ybhCIY!+d4r-l} z?DkVa9cJ-AYio6ve{JO|#19EfrNgaL?$ zLxD8qR>~v_rFLLKt&vQ2<-YL*<<1w|vsW^-j# z0<7`*JtjZw!!O_~0y3TK#DgF#gV4kmG(43tJ%t$wkY=51UlT&5-$`|!ym9sQX$-N+ zF`6<{`OT^q4^k`(OY002NV<3yrr^WogWpc$qHY_&i5wnzq6b^+I|~ zwC_wE1ljFjfxrp-gIBO3S%4Tx0?baex@b|hlknlEJvPnA)W;nNF$XnihvRI4HYr04 zW5C_X>Yz|~?}z@PBE;+XewI^(6o16h$g08$&k=5-Sv9T1JGtMD2 zun*?6)&ea|ppJN$J)P2NR-1|@L=LQn{j^KQ05L7#L_m1n(6c#k;x6Er_ME#XD2;hc z#KI^1dUx2a)++=6Cpi^YYR(VOvI91(1lA65@IItr9yqA!mPsrpf|kUnUqO^Uw~hcY zWt|Af#|xH|!fIB8!Spljv7glyD-v5pGOAgu^+a*I_i819XlcRhf1;zrbe3xz^+?+# z>olSy8aW(vTc2*lqBrpUBr`%1Pp1!~xF+^PbJg|6NE%D3O6ZwLP_R!>-h#Zs9rb+3mLtH?cHgM$gmlHl^jT72M{9X{# zt`qa(A=e~w$d%`$I}!YmAdYl|N&%4KaQI}Ve!}yOd@mtuf>cFUGz$reVe_1?>5Afj zE{-Q|QY3ZS?UgxqA~is^2PT3E#Eb(cg#+`AJkj}%$`;e;VbTT&7;vk(AZ&v++dx5z zeKv@aAe>4`WmJ%b24I0PGh(H?O8s9HB3xJHI=_-rQ=ppA43-2MMI+C{7RQNgQUxXG z6Jh1?o$Uj%i#P>PUX><28Z{<<+udQ^f@$+FQf^1^)5``nz?$xt@sGYk`_+Lw%}x-2 zMpm*E`m^)Ux2JFk&tb-n$^L1M@Z$PHB=xO zeRHf(6&b2bA_*6Tg~nsStYqX?2;vvFZ{POOiT-MUyq?sIvla6+v@L4{7vn60iH%2k z=N0#qf;}KpL-b1!i)EZ15;#S;!Ip%LoNn$f#?odQ%Nvxbvms2d0;z2v#b4ntI#ybi z;Aria&2vqf0ein$3$8cw&2X5L0`s2pl7SAmL8icPB8NMl*5W7_tO&qRLCjP9aO9}$ z3^J`+Cbk#$%1BUS`wE_#5~BbstqBb>P_z$?+0VFuO~97$G?b}WzB>Sd4Owx&L0+!U zxH+#)wvj?aR7bzWJQ)I7_E=RA!Qc+-6aG$uY2U+%Ng%pHpxd{fT2e7L;bf7w^1UO> zi$3ZJ@j~leB(^CF^`P9s@YC+{kF@(NOwt}=X|hKuP&hQK##R=st}A;pi_|G35>n)(0mqLgmvj`x?JM+V07fBTV%((02?? zveE}6j#c{G)RJK}cyQO#drU8TWhPuv_h(g|kYbC3x$UyRfGpH{6Hs(YAAA^%V_e>A zll_*l_+V&_#FgYX10*)P7HYQ@QK%T80w^1|=4Q48e|589X;%?4I;&gEwyC|D+~5uR zNou3hu8e6dIgJRQ>HwA8*6J%)EAWhqQ8PS2Jb%0OUWlPJGdK*SIM%`zeWv?~wIJGp z-HufNq9uUy0_ngEL8Ll-PIEriAd!U)oVyoH^k;8Pf&$mXlo}sK{V{1EFvq2r2}OU& z&izaXdYc&_&=m_+b}mdKCpi}}3iyaDW`I!rvwW`v$Omvl(X%5S*tNC!6qn3>?c$12 zJ_)L~?a7JZMPRV69s9KIB1SB0AWDps!)W`Dp}zb4-jM9k{5T`~s==wPp5Dp#h@J#XL}8V@mg-c9$}zXel&2DT zTXN!~Kl*z0@s8*N^I;wJ#%9vkE6l^k;XDHbCneQKh8~Q+bU?Zw#AyHIzkmPNv?S#p^;0_698&oYgtDJ|KkHqt z>3|NGVvZczrn5MvagBbxg@gHqH*P5xzK2u;m4p_`@?oMt8J#5nT`KcdQiI+Em?#)? zRFvklvdu#ExvIG)ZGrB&_nC|cPf*W7(t=4CO*}|ii5~bbnxT>OXF&dfv8q!C2o%5l zR{+ElF%LbrItjI4S5h{cj`A7-tIvvAXb1f zQZakCq#gMXn1%oZW(iZYV|?{YS#=^F%CS3cXO=tI#IbTi%K@A2Kru|ENbb|Ag%+>{ z7{lAeCOaaRVHZ-{!?uDjVSAkQp|5F#wlbY@kA1dq1vKH{_HVzm*=UW#Cr-mUbcHJa z^`oCuzuBdX7J({MH@CQ<;Oz1&5Nrobgxegk+6Ay|?$deC= zs1c1!l>O1~z4rrXj}DSlKuBOdGL8TkT~ofEF_&g_;yzHE3iMA;VnFsnb|YI+i2qT> ziqQWqAqhrkfE>+S+-<#8^=^cDj6R@7!4bhvv2exrC}t{d)iAE?Ex03U=;9y;#dJf3 zOv?&e#$;#(QIx7q-zF#$l`uBCiL6$Qf$G{;$YXH2nBdK}%Hp^rF=yedsQ8>c;eb`~ zw92GW7RK;c+$HdZ&0gFTrGj}-Xrsl7WQldmoR!kBDg&Yf=|IVPDlxKq9nDGT41C;6(5){)=++G_7DYkIlkMzT z`M)}heP)h&re4Spz}Ra&>?Gq-4!g-jpj3PU1)lu!uLMjg{0puVzIB>|ftWbKKe~ty zE{GKlxH|ejKm2+!DbX@aTO~7qQ`i|%?i8wsSz>{md+G|FNC^vcss`*d@o|(4d{_ey z!7oBGiF)QkOSIVrc(&h`o6HS{sBnMSWV8}c*X;y?rK0}4$zPu z*84rrzgQv7jdXoDh{M3aM4Ph#qDe|VaV2Fqs78RK9ediU3R7?pKz(IwrM|V(4)6TuO;|#JzysJx#5q~BOFnKW50>V%x z{8w`ZVmIDQ)};8h`XvJr2H{DNFiFG9np)JYKo$%MRAZX?omdasf_sWmRzaaMgU3;~ z^hdW66|58Y)#?;2YnTxy>lP-pPMVP-DsD4{N}I$jdU0ipDeDOIU!^FmlW`z8QzlZq z+7ZJNx$cZ)M;mbPXWD~Zj&Toc(jJ4NRD)_bESjxKv$cX50fh06(vOGOBOyfDuvgIL8ba;<33oE+H*2$_NAPleLz{7Z@SdK&l&4JJKh0c{Ff% zes*n+MT&RZ$PNE1m_Lttm?KP~!e2HXvE~l_aep=rrjvFB@wZnn7 zdU!&;VjDd|!aq_-8Ge@1Ll$x*@+_=)#mc5f8Pjh>6A3l)06B&1@&sLK!KCxM`Ieo+HfgA~P-0*VsKNV<8Bn>% zXC#y*t|>RB&{RLB3eWIN7(hA71EN*RZdN_&s)K65>RvQ*#p;u3_D$uqES2nSPVU_CB zINRol^RNm*rYiT?o&GdtyWNCV*$c3zOX|oCt&M?}vlY%`9!FftlnYB=&&=z?1n>*E z3y6x&?{`mjU24Nx#kt*X11$8QMOAWkfrf`n1OvdjnJ5ch5MET4sc;t(edq<;^sGl# z2+Wj|B0!<)4U+JBhgvzi`PH0iQhqERA{84jFdTc2fw-ptThY_6(s$%A8i9BSv_#xh z>vp}&Jq-n<$eTl%as7ePxt*HT2VOQ*Hbp7XRsr1-l+mornTAA@LkdwLfNdDSGn6zOEfxb?i|tDP@)Ck5mo3o ze5BT9u9OB};u~RoDqw~Stko1`K}7Gn(N&5~W`#vSO>Knq2Xuf75jf>|;8bjh^V}Gxb_l7mQqIb!?uDa1@=OqFW{5fQ)FF~)G-5bKyQ(@m z2TrA+RBHE)5lo*}-$72TRjWD~Y=Q59yz?{p;2L2UO+hw-e;zw}WOg`02G8tRed;LS z8Xu%exa-+UCXGzHhS3Y#$Elr5BNg3ixZRC=NyaC3Qst9SEM2i%~u^0=DAbBSD>P_sKG~JL2EDrn4{G(>Hk$dvYM6va$HS2@r*7W#I%`uXz#ingqck=~>9J_#twcA&wf*ltQ} z@l}SH3e8EQXpDv;{nDf(q<|fEi39}eQY+sR;8sNoEkZ;RYFQvOVy})PU9efwW?j&PyN_w&^z370LR&R=a^bo3g8>9FlqT$3L+ws`A!E6WP;AGow*~V*>~NL{Nybk*SEW z#G6!uTp$!FsU87dMl-w`?F-4P;cu$=Am3L_Ub(W$?#RXi3M(@%za`kD&`d5ZMo;T& z)eNwDSbC|1o<-mj=1jTSCAQSrs6=`+z{^z)N(Ou}584Y%gAYr3=5jUD@s((n`?-$A zAmAG*y8PylOs_M9)cwKSJ#8g+(qYDCheYv6w80C)Mrn(9{v@0vtXZ<;b2)YTD8Uz5 z=KVM^f3BCc5>?fQ_+AP_8ElmHCrM@Mrubi zCccQv#lm=~AhbKIg#(6}KxiQ0ZEk{T$%X(MAv-d^H>LG&5A+Bku^PdlM(rc+G z3oX@DJvkj}2Al}YvDSB}-9MD1_)LqYr~Z+#HuQ1CD{=fME>fmF1FGrzfk|ultq%PoAUQlY7hAS%B7}b?tqo!vK@(do%&uWx+l!>u!mAzk+;3WV7fokKx)Q~w62JM7p8>QeO zm{$m1X=sRdCJne}y!b$JNm5Qe7?G)huZI6m1({{gYCI%6<8W26;hKEBK6b`wQ4A<9 zBviOVBgSY-G@H(#OuBTQNSpFH_McZxfEn<+W21X3I z%5}nwYkn+6`qm?^1Cpu}Y;Ta%&uyeUCRSO_iS7iz*?p<%r-{ya{;+zfIa4Oc!zYJn zjsRtH-i}P99uzXMK|-3t6rrJyNRwQN`h{%ZTB3U%s~d=hB}S%Khcw^!Nb#c|Kg+^+ z0|+#&geF47pt+~u0-~PvJf|_hk!D!wShzX`4nF5=0}D(XEtMOwk{-Jv`5@Ows9VaJ zL^4N|KRf_9$)uzt+UQYi{*e@uWuy%Do7+krsH+r$kA4w=*(AIgSj}-I6sS65*>|$ulpp&B17l4Wi5_2ZT-C0oRXfQ*Nw>k2wx-i>Xr;wxgcy& zcszYSA?D$l;aqL!R`7(VG(|MJLD>YKK~YR+dBva!EJnyHDHvyzWxKUfqq;syCy~R+ zLh&RY&}dDYDATEUB;*%L(x;ef9M{a01NpHH6Tg3;vH8Sr)jX_26rfdN9s98LMskt@ z+547-9y{719ts|v{}5}vklHCpXN*`D@;28DC{6i4CaMWf;XXVWE}%;2t*^^YS#QL-}~_n zM325Et6~mB5xAzXlLSm|j{Rrd8AlSyTl~X*D3jC10jkV&LU;CSIyCxj=jjwFusbj+#c$;t_bWTDc;obArYup(^R`WsJURO`lwIVZ+orz<0Gdv#6L zzaRq4NP^p$1xnU~q<|_{9Rv+gyi*-?%84#TOhVENAlb*TGpHQ;0%9asTHeblat6=6 z07l=Uy#2L{>!;!=>B_wH0vF$g0zjOu-$>E`F9*G<%fq-7&Dz z5*cxUb{KmMPUJ%;>86{a3*s?0g6!)d9)_nT&tt{C2vCy}NLwTeo^nP2>w-70=8Ge>jZ)6$h%gL zA?6)tAqhZI@35Wc66B#eNs3fe%ePxq9lhgJcjhYGM(mtTrclfH}3Tl!2Q5F^UC?^8J@c*Ss1{WLIN}YoeTlA?oo%{QK;* zINX7JXhd&jsHT~+shuD1oxOmb& zW+&ld!S-}FugmnvfvhPejo73;rlO3U+fY3Y3VGX$9*{#s@*+VwQHCB?cS>?04Yj## z7|L-hj_*W;|r<_K^uOi^azHLQ{|`zL|}muMX1hCU?^MY zX==iwAGb*`d7(631B#{CSbD`nngWA1K%6bLt_o-3FJ-a)@C4G|6~#PzV-j!lB)dUP z`NHEyCOKw6g`@yKQ0Jdnfb-uXCx?fs#jYS!k6^U<`y z#84<_0x?ii0#Q&7v&=F*@}Br2MOJKKl`#_YSurVNE|U|RnjLU$AvxEa#LR@1X(aA* z1zYGciMs*5vP*mZdalAI-&*j{15T$h14;+Bj!Bd$W;j>?D7g8miSIf6i=2NbEm6TZ zXJ^_12eBjKTWk}zHQ4wGjs=@pS{X+F0#m^`CMvI_vNW;tqCTjnj4)APm7wM2Sn=om z$%mJ zw3OlJ)WmaUP}2%@9LFZj+fsCLS1_ z%$z_@_h0gm&OpVxsLHT_g$PIq0w-EL`~Vz@7y2(p`hj&$ zv(!WTHH$WXY}u=`ZEB41J1-M4SR&BA%=ccN1*n|CL=7c^wC9gCgP<*3DzwH1ksgWR znHc*;@uKmi%?sH2ENDT3oEs-<6QK5ZMaGawINH3c9i%}D68B+;X@E@@kR9WW|1QfFjmS^_{9!IDPp`vIOBp}5gz2?2+41- zj&)^b?Lix-Vj__CbL{fEvzYF)6@esusoTOwOcjn4?AAnbI%MOqdg4WUgcT_#5g4Gt zbfj^LXo#=z*`3pys6(Y%LB;?c6s?Z51IF?S_Vj)5wtt(Z=+?GcMT5|O#7j7!nG8Jz zXR3>75(quD-aKrSuQnURSXGLaIZjU2ZDFHd(guPNVcU$)k2;LRC-Ugn>g@YBOj)rx z!E=QR#mp-NOZzwd_3L_kZzj2{m#z{Zl1 zu*2w%X}``;T3u^OiEzRu_9TPy9SpBG0;rLSYUYW#98b}fw~Ql^jiB;&_vX8iLIm>Y zH3?aTq+P}hg7-F$BOfJ<;M&Ih zP<)*UT}*;W8_JQ0zaBOaHAxu&bhQaC+&F|>{8csCSYqClnUFm~1@}hCLn?k~e`Zwt zZyF{ulYuitv$XdDZX!ig(WkMrF-(Jhjqee@1x6XA0*-Junr}RHs@fZQVPm|`4pvfR zYzL$v)tPn1+puTp8&>8bG1*?I{_Y88kj;UN@UY*F@S`jbBbQV`hGB800+wK55<8XD zWFOetj`$mj@v9zPsk(VU9OdICLgKISeJl8x3t=)XMMd-2z6ke=#m?MKG7joUlu%o{ zgF4IXw))oFm|Q>EYZE@zWr6}YO4WgXH#T;l`b|wM)41*lJAo%|Xo4Tplu>c6hCS6M z2>@bgMh}CA$HodfUnGx(__?>r!x>Vkv}tJAmY?_vA1$#_NYk2pV9;E-ixgEA-H}1h z>F;gJCFX&@PPGrTK@vNu*|7m4kae)qCkm8l89%G z^Tft$a>QE@T6~( z#FKPz42e*btUE;W1~3g$(4fKSH+(De!{G`MzyGEIkq{L}CJPWEtwEMIS=H0x9MH2$ z9Jeqy5b-85L*x`pM%&QR64&wS>xhzJlK zf!hbeGjsz*P1Mb}3Djt=?Si(|(E>!X^Rz!Ro*p%svBKdanVc@%2TZNdCU(6zhadEp z7g|mUj9G|}wVYdvn*IaPU|b3fEn(%zlq6it7$>V!Xao7CRfZJ&aPq)>UGF5*uI-(s zgSfi|ip&=>0URNp>R2N9L=F3;)9@?xJSU^1{0wfQ7M<~zksGEd<5w5pv{wfdi@d%8G3Vb_ zI2@7RRTb!&nnpbF{f_WK6Kw2;TKCn#KYh-u62qfz&M;G{uFcSN7S@X^o^+b({Rf3b z^a1c7Q5eo4uzMdICT#8HNWn(MK%t|vjcMK?vtrFsTJr`v&PUpkMiyouA7G*Pqb zXl?~sUb#IBMfKyFK;yJo=Wk#q+?#cNdlfD;!2Hs)dx~^r@(kvlA>q6h`)WL|jtHlV zA95G18gu9JrTNkYQ&)4=33EpouGRxmxhx%cI=7UbkK;Ad3_M0?aJWFm=Z_-(b9{dx z0fN9NP^EVQCa~pBLffeWh@5!NY^c!b98aD+>>dnasEGXwHys{_2aJ%o^8+u#Prd&{ zL?0w(iO|MsY|_-lN9o|8ZAG03i25lQ<#ZE+V+4EMR9>fVKts8f5eXoIVVcO>q;x@0 z?Lty_sMjA0m`3fpI1o$|Sh_K!VoPR{tmT~{IzMA%@eucjK?|$~MsqARiP)QW)ca;V z`$q$Lr!s=zOL}u`0Cgf-e3S3%f-H4l8Dj&~jvM&NZvHZLIa5 zqJG1zNAxXe#P9?y4Xt+kUrHqX6GdHDils^BPfPFEo~)$e^L$?)s~`K7&fi%7AF9RX zT(k6q!n@~CW~z%!ZFXhJB4+R>I-FAz-j|drEx9aJlRQu1KSgb%(IXor%@b&;ed}(Mee{O+qW0?;rgGRQi9v`#*Igu=qz!wJ$|=%q6AWM#bPa``7!FwoQ*pq<~{f ztpsTcNgh#mKsx9lFh02ssG9Fj`Z_N6v|*B@O&sC_;x&~&N=Z&RLf{ht5ckRIStY7h zma^;+AyCo$yI2b(O>^-BvDdeY5V<9&}nh7gia5jNVo~!97ivG=0HMJ+W!V$ zy~!pD!%r{HRrVfEH1%Z=hZ%gdKb2~#&iff7ueS`e5psHT4Rt?5A%WInl`mUd`Nou! zouX-aU~W()gI3ZSlwpv3NGGT2n11P73p9%8Fd4>CqO@T*+nZ13nQTIQX$wXsH zCkmjEvPx+juCkRd87?T|gs6y^?oQQ=0<`CNJet6 zGFdtn5K9w=y4@rFN{0HMac+9G!gY2q$5$4CN&$ni!h}KPAVm9iq!}63sgr!N_ydTrP$rib^)CT445Mcz9W8Y)43A$1}Hv35b$+8IQH8 zQSdcH+?C}q@X?Vt%;<44fyy^$bFf!(YfU*xD~<+&9%y0qIkYv=uDQTJ12S6gE&`vI zIFuQgmX76&6d-1JGF%f=Tzb&jN%*(X`c1Te1zjU;KhRYs0!%_V?{!F`RZJlownO2Y zgVjgcD=gJ&DZ(LIzS`iGEvjqWRAC|~Cm*&zr`C%mJ(?spjFKEq((g}V)}W_4pYX4q~07f)A&gIiH&_4YV~aC$|Vs3|czvyg{Tco{c59Hojhp}S7;M3+f0jKI=8w3Q?dU;@EEs0JPZ$EPFsBqs zU~~EkgU;eM7CT2~yOD9EnHSHawm?_UmghKq{?onrG|4n~$QRDiX&VBfs`QX@qsu0S zJyXB*MWuRXU;#u+0^pgD4PHl7vMCkIMGpu53J{&VIT7n=c5vp~#%wFLKulUA;}Di0$Tq^`0Mksy7;tCNDW= zG$6}cig8+^o`aD88Q`GFIW(fgX8=#g-{In?l8R%pJ7+Fo95d`l z>za8I_?-A7V)Z3ibRSmX=KItweOa~~#E)tb`H8qleQw%mCWvS&hZN-QB&`usP8mP! z6P61zkB+WIO~aLw z`i1&QaHlb$WC|1t3Nva=5Hmu6W2L%M(vT*BN+Cuv-UHq8GXuI=c$sr9Tkd;w_o)~= zHw{(t$VFTxT&87}d>|zi6@+ZWqKq@7TILb%BzWqnomEcLz{@oa|O7;c7UD$9U?`dQTS-Z-0yLJx~Nati8_lt0Yi>zam)G`Y?2$6RBDIHxZO3 zo7+Mvs9SA69e8?es1Y7%)6z-xN*$y~^HRybiOGn5zlu?3q(DC;n>MFXa+M=CjAQVY zDG-rnYbGtaw2w=^zsL8_<;2HfZKgKU#`L8@LRM;3!(R@lnEnt*WAG1`$Mt(+#s_~C z@N2Xh?nBr>KE@}2sqP-kY17q%Bs@PQ-G|e%kc`wMF4I#|uqha{mz8K*DJ}9#K>pFV z-mjUUO1Z%n`s9jgNv^-oSO1H3wbujBy5wV>s5c5A;*>DNL(VzcG!<&gJ%LH&wWH*4 zbQN~f)1}ghf}}nYWHvA=m1K7Xfbl4+L@mVak9yiXRjFWS;|HcgO^Fhb*%wmPz>4O> z?WRPOPAC?elM}q)bEzIW2VL+t0MKF%IHbvM^L;J#8K6O2019CAmm-qj%oLZ3>1G8r z0$YHkXY9`~0cv8NmE46kG_p_3E7u!6=hV+=G@z$YW%MM0gcxlicIig6y5dvnJdo<} zkE_$b^G78taXBa&R8G3KzGB$w@r!|%To<*V27fi8e>@2xr?QS&derRoG0HSm+&9&w zx6Y*IJZ5M2UlL=#oP{>gE7OXXdwHu+ojw$Euq4*$$HHyu^jAVd9uQlgrJ9e2ZuUwk z=XgT7SK2awSA)7oH8wXg%K1j{?@;p%=}p5!XS6Eg=U#cbUy{Uk9@YfSmUIr^97`2` z&j1U$W!ogz3UI_cxxw7!c2#L$rl3N(J)H=`mgvODLP>f&wlMQSfh7%nu&%#LomY*c zJAlM$+4@#N9jVeeKw_;CO7OJXK(d}*I!i2WZq(jU#)n!>gAe!B6u)GwSd?(2P+PJt zY=vDTm9s8fQgW0v1CN%?o;L*OK^^LMFr?-W_+E*}?sfQjpi>B;OPWY#+UO1!A0+l; zyI`Met`2@FB&gH7{nMRpAG2Crc(AjtStXtXqk%?)bW<;P66SVj8Hrig05_rr$Sm4v zxPQR+jj=D%AFe&be^zQ@=9aa_N8?bh*)YtOu}x_SNC-#ET?bM>98 zx4yOd=1VWU@V%9;J%8hwTgT6>ZXLgH?fBN}=JAccdwfG3{gY^Zd~NmO@y(mhJb%1;;p$DsUfs94as144 z(d$2T3-zy~E0^w+`LC`%^W;~qhNc$q+3PQU`e&~r9$&ll9yR)B zZoblh-}&aVjQ6eM7mx3I;hFDUf63bG`bX&H=*a&o^xs$YOMh(mzIpY#=^Uprpi|KK;S-YRH9jE}Fb{^nPYZ@g&z)vWdMFLde)|I+<^ zRs&yuQJ~$te*N0L2!^(IUtN9c`nQkYH!9wf29{iE_|R0~UyUAh^l4wX?S}taSE3>g zb#!$5=;fro?3;y?qRgK#J>oKvF*5oM+7C&hIZ|O-t*P233IkGCg{Ir_ge(Gr@_c0RDfKq+9 z^3>B$F(0aP3q+d8u|g*QWEG9c#S$iES-Yua5xPI-`%%V7NmdM!kZ6^qF35hKK4O!c zj*&CFSG-3SmF=obk#dYl_@_dvc3v{Zp<4!)9RKbW1ejq(kjRD|LBLOL3FNXRkOx~Q5?oZ=gR2<==GU(RhAE^|A|^i{r|}Kqd9-`$@r~=he)Z(^HIU%&p4F8*h}_oEsf{I%;Z i-F4%5r3mrT^MuhCuiyIC@r`f3M0~v=Cy!`N!2bUM7LMKk literal 0 HcmV?d00001 From d633e2e31fb8d56afd559a239cefe624df41a032 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Fri, 18 Oct 2013 17:43:54 +0300 Subject: [PATCH 016/108] 'faster' version, some lint fixes, notes... --- textmode.coffee | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/textmode.coffee b/textmode.coffee index 80944e9..4949775 100644 --- a/textmode.coffee +++ b/textmode.coffee @@ -1030,8 +1030,19 @@ class @ImageTextMode bufView[i] = str.charCodeAt(i) for i in [0...str.length] buf +# tests show the resulting code is not altered for results or for the logic +# but this makes the linter happy. (coffeescript's own I guess.) +# (the constructor right after the class def, before locals) class @ImageTextModeANSI extends @ImageTextMode + constructor: ( options ) -> + super @screen + super @font + @palette = new ImageTextModePaletteANSI + @tabstop = 8 + @linewrap = 80 + @[k] = v for own k, v of options + ANSI_ESC = String.fromCharCode(0x1b) ANSI_CSI = ANSI_ESC + '[' ANSI_TEXT_PROP = 'm' @@ -1044,20 +1055,16 @@ class @ImageTextModeANSI extends @ImageTextMode ANSI_SEP = ';' ANSI_RETURN = 'A' - constructor: ( options ) -> - super @screen - super @font - @palette = new ImageTextModePaletteANSI - @tabstop = 8 - @linewrap = 80 - @[k] = v for own k, v of options +# not going to mess with this for now, as I think it is the 'write' code +# for the actual ansi editor. That would be bad to mess up. +# did redo the for loops to read nicer tho. write: -> content = "#{ ANSI_CSI }2J" # initiate document - for y in [0..@screen.length - 1] + for y in [0...@screen.length] content += "\n" if !@screen[y]? continue if !@screen[y]? - for x in [0..@getWidth() - 1] + for x in [0...@getWidth()] pixel = @screen[y][x] if !pixel? pixel = { ch: ' ', attr: 7 } @@ -1067,17 +1074,17 @@ class @ImageTextModeANSI extends @ImageTextMode prevattr = attr content += if pixel.ch? then pixel.ch else ' ' max_x = x - #content += "\n" - #content += ANSI_CSI + ANSI_RETURN # go to the next line content += "#{ ANSI_CSI }0m" @toBinaryArray(content) - gen_args: ( attr ) -> fg = 30 + ( attr & 7 ) bg = 40 + ( ( attr & 112 ) >> 4) bl = if attr & 128 then 5 else '' intense = if attr & 8 then 1 else '' + +# um why do we make this attrs variable and not use it? + attrs = a for a in [fg, bg, bl, intense] when a != '' return [fg, bg, bl, intense].join(";") @@ -1419,7 +1426,7 @@ class @ImageTextModePCBoard extends @ImageTextMode for key, val of @codes code = new RegExp '@' + key + '@', 'g' content.replace code, val - + content = content.split( '' ) while ch = content.shift() if @state is 0 @@ -1434,7 +1441,7 @@ class @ImageTextModePCBoard extends @ImageTextMode i = ( @x + 1 ) % @tabstop @putpixel ' ' while i-- > 0 else - @putpixel ch + @putpixel ch else if @state is 1 if ch is 'X' @attr = ( parseInt( content.shift(), 16 ) << 4 ) + parseInt( content.shift(), 16 ) @@ -1446,7 +1453,7 @@ class @ImageTextModePCBoard extends @ImageTextMode @x = content.shift() @x += content.shift() if content[ 0 ] isnt '@' @x-- - + content.shift() else @putpixel '@' From 929245b9d619352707df92bf500136bb69975672 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Tue, 31 Dec 2013 15:22:57 +0200 Subject: [PATCH 017/108] unsure what these 2 are. --- sahli.js | 1 + textmode.js | 442 +++++++++++++++++++++++++--------------------------- 2 files changed, 214 insertions(+), 229 deletions(-) diff --git a/sahli.js b/sahli.js index 34f0093..1d61bdc 100644 --- a/sahli.js +++ b/sahli.js @@ -71,6 +71,7 @@ var Sahli = function() { } else { this.image = new ImageTextModeANSI(); + this.SAUCE = new ImageTextModeSAUCE(); this.image.parseUrl(picdata.file); this.image.renderCanvas(canv); pdiv.append(canv); diff --git a/textmode.js b/textmode.js index 2fa291d..0ad98c9 100644 --- a/textmode.js +++ b/textmode.js @@ -100,14 +100,7 @@ __extends(ImageTextModePaletteVGA, _super); function ImageTextModePaletteVGA(options) { - var k, v; - ImageTextModePaletteVGA.__super__.constructor.apply(this, arguments); this.colors = [[0x00, 0x00, 0x00], [0x00, 0x00, 0xaa], [0x00, 0xaa, 0x00], [0x00, 0xaa, 0xaa], [0xaa, 0x00, 0x00], [0xaa, 0x00, 0xaa], [0xaa, 0x55, 0x00], [0xaa, 0xaa, 0xaa], [0x55, 0x55, 0x55], [0x55, 0x55, 0xff], [0x55, 0xff, 0x55], [0x55, 0xff, 0xff], [0xff, 0x55, 0x55], [0xff, 0x55, 0xff], [0xff, 0xff, 0x55], [0xff, 0xff, 0xff]]; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } } return ImageTextModePaletteVGA; @@ -118,14 +111,7 @@ __extends(ImageTextModePaletteANSI, _super); function ImageTextModePaletteANSI(options) { - var k, v; - ImageTextModePaletteANSI.__super__.constructor.apply(this, arguments); this.colors = [[0x00, 0x00, 0x00], [0xaa, 0x00, 0x00], [0x00, 0xaa, 0x00], [0xaa, 0x55, 0x00], [0x00, 0x00, 0xaa], [0xaa, 0x00, 0xaa], [0x00, 0xaa, 0xaa], [0xaa, 0xaa, 0xaa], [0x55, 0x55, 0x55], [0xff, 0x55, 0x55], [0x55, 0xff, 0x55], [0xff, 0xff, 0x55], [0x55, 0x55, 0xff], [0xff, 0x55, 0xff], [0x55, 0xff, 0xff], [0xff, 0xff, 0xff]]; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } } return ImageTextModePaletteANSI; @@ -153,7 +139,7 @@ function ImageTextModeFont8x16(options) { var k, v; - ImageTextModeFont8x16.__super__.constructor.apply(this, arguments); + ImageTextModeFont8x16.__super__.constructor.call(this, this.width); this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00], [0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00], [0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00], [0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00], [0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x70, 0x00, 0x00], [0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x70, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x38, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x36, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00], [0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x18, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00], [0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x66, 0xce, 0x9a, 0x3f, 0x06, 0x06, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44], [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], [0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00], [0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x6c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x3c, 0x66, 0x0c, 0x18, 0x32, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]]; this.height = 16; for (k in options) { @@ -172,7 +158,7 @@ function ImageTextModeFont8x8(options) { var k, v; - ImageTextModeFont8x8.__super__.constructor.apply(this, arguments); + ImageTextModeFont8x8.__super__.constructor.call(this, this.width); this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e], [0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e], [0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00], [0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00], [0x38, 0x7c, 0x38, 0xfe, 0xfe, 0xd6, 0x10, 0x38], [0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x7c, 0x10, 0x38], [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00], [0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff], [0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00], [0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff], [0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78], [0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18], [0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0], [0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0], [0x18, 0xdb, 0x3c, 0xe7, 0xe7, 0x3c, 0xdb, 0x18], [0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00], [0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00], [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18], [0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00], [0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00], [0x3e, 0x61, 0x3c, 0x66, 0x66, 0x3c, 0x86, 0x7c], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00], [0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff], [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00], [0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00], [0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00], [0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00], [0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00], [0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00], [0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00], [0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00], [0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00], [0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00], [0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00], [0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00], [0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00], [0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00], [0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00], [0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00], [0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30], [0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00], [0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00], [0x38, 0x6c, 0xc6, 0xd6, 0xc6, 0x6c, 0x38, 0x00], [0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00], [0x7c, 0xc6, 0x06, 0x1c, 0x30, 0x66, 0xfe, 0x00], [0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00], [0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00], [0xfe, 0xc0, 0xc0, 0xfc, 0x06, 0xc6, 0x7c, 0x00], [0x38, 0x60, 0xc0, 0xfc, 0xc6, 0xc6, 0x7c, 0x00], [0xfe, 0xc6, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00], [0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0x00], [0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00], [0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00], [0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30], [0x06, 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x06, 0x00], [0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00], [0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00], [0x7c, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x00], [0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00], [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00], [0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00], [0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00], [0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00], [0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00], [0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00], [0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3a, 0x00], [0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00], [0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00], [0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00], [0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00], [0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00], [0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00], [0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], [0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xce, 0x7c, 0x0e], [0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00], [0x3c, 0x66, 0x30, 0x18, 0x0c, 0x66, 0x3c, 0x00], [0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x3c, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00], [0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc6, 0x00], [0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x00], [0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00], [0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00], [0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00], [0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00], [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff], [0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0xe0, 0x60, 0x7c, 0x66, 0x66, 0x66, 0xdc, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc6, 0x7c, 0x00], [0x1c, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x3c, 0x66, 0x60, 0xf8, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], [0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00], [0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x06, 0x00, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c], [0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00], [0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0x00], [0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0], [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e], [0x00, 0x00, 0xdc, 0x76, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x7e, 0xc0, 0x7c, 0x06, 0xfc, 0x00], [0x30, 0x30, 0xfc, 0x30, 0x30, 0x36, 0x1c, 0x00], [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00], [0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc], [0x00, 0x00, 0x7e, 0x4c, 0x18, 0x32, 0x7e, 0x00], [0x0e, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0e, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00], [0x70, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x70, 0x00], [0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00], [0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x0c, 0x78], [0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x0c, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x7c, 0x82, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0xc6, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x30, 0x18, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x00, 0x00, 0x7e, 0xc0, 0xc0, 0x7e, 0x0c, 0x38], [0x7c, 0x82, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0xc6, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x30, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x7c, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00], [0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], [0x38, 0x6c, 0x7c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], [0x18, 0x30, 0xfe, 0xc0, 0xf8, 0xc0, 0xfe, 0x00], [0x00, 0x00, 0x7e, 0x18, 0x7e, 0xd8, 0x7e, 0x00], [0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00], [0x7c, 0x82, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x30, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x78, 0x84, 0x00, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x60, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc], [0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18], [0x38, 0x6c, 0x64, 0xf0, 0x60, 0x66, 0xfc, 0x00], [0x66, 0x66, 0x3c, 0x7e, 0x18, 0x7e, 0x18, 0x18], [0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7], [0x0e, 0x1b, 0x18, 0x3c, 0x18, 0xd8, 0x70, 0x00], [0x18, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00], [0x0c, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x18, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x00], [0x76, 0xdc, 0x00, 0xe6, 0xf6, 0xde, 0xce, 0x00], [0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00], [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00], [0x18, 0x00, 0x18, 0x18, 0x30, 0x63, 0x3e, 0x00], [0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0x00, 0x00], [0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x00, 0x00], [0x63, 0xe6, 0x6c, 0x7e, 0x33, 0x66, 0xcc, 0x0f], [0x63, 0xe6, 0x6c, 0x7a, 0x36, 0x6a, 0xdf, 0x06], [0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x00], [0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00], [0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00], [0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88], [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], [0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36], [0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36], [0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00], [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36], [0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36], [0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36], [0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36], [0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], [0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36], [0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00], [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36], [0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff], [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], [0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00], [0x78, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xcc, 0x00], [0xfe, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00], [0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00], [0xfe, 0xc6, 0x60, 0x30, 0x60, 0xc6, 0xfe, 0x00], [0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0xc0], [0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00], [0x7e, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x7e], [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00], [0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00], [0x0e, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x3c, 0x00], [0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00], [0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0], [0x1e, 0x30, 0x60, 0x7e, 0x60, 0x30, 0x1e, 0x00], [0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00], [0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00], [0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x7e, 0x00], [0x30, 0x18, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00], [0x0c, 0x18, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00], [0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70], [0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00], [0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00], [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00], [0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c], [0x6c, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00], [0x78, 0x0c, 0x18, 0x30, 0x7c, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]]; this.height = 8; for (k in options) { @@ -191,7 +177,7 @@ function ImageTextModeFontAmiga(options) { var k, v; - ImageTextModeFontAmiga.__super__.constructor.apply(this, arguments); + ImageTextModeFontAmiga.__super__.constructor.call(this, this.width); this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x83, 0x83, 0x39, 0x39, 0x21, 0x21, 0x29, 0x29, 0x21, 0x21, 0x3f, 0x3f, 0x87, 0x87, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0xff, 0xff], [0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xff, 0xff], [0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff], [0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x9f, 0x9f, 0x91, 0x91, 0x99, 0x99, 0x99, 0x99, 0xc1, 0xc1, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x9c, 0x9c, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x9c, 0x9c, 0xff, 0xff], [0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x9c, 0x9c, 0x88, 0x88, 0x80, 0x80, 0x94, 0x94, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff], [0x9c, 0x9c, 0x8c, 0x8c, 0x84, 0x84, 0x90, 0x90, 0x98, 0x98, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x91, 0x91, 0xc0, 0xc0, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x8f, 0x8f, 0xc3, 0xc3, 0xf1, 0xf1, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x81, 0x81, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xc3, 0xc3, 0xe7, 0xe7, 0xff, 0xff], [0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x94, 0x94, 0x80, 0x80, 0x88, 0x88, 0x9c, 0x9c, 0xff, 0xff], [0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x3c, 0x3c, 0xff, 0xff], [0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x80, 0x80, 0xf9, 0xf9, 0xf3, 0xf3, 0xe7, 0xe7, 0xcf, 0xcf, 0x9f, 0x9f, 0x80, 0x80, 0xff, 0xff], [0xc3, 0xc3, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xc3, 0xc3, 0xff, 0xff], [0x3f, 0x3f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe7, 0xe7, 0xf3, 0xf3, 0xf9, 0xf9, 0xfc, 0xfc, 0xff, 0xff], [0xc3, 0xc3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xc3, 0xc3, 0xff, 0xff], [0xf7, 0xf7, 0xe3, 0xe3, 0xc9, 0xc9, 0x9c, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00], [0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00], [0x18, 0x18, 0x3e, 0x3e, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0xac, 0xac, 0xd8, 0xd8, 0x36, 0x36, 0x6a, 0x6a, 0xcc, 0xcc, 0x00, 0x00], [0x38, 0x38, 0x6c, 0x6c, 0x68, 0x68, 0x76, 0x76, 0xdc, 0xdc, 0xce, 0xce, 0x7b, 0x7b, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x3c, 0x3c, 0xff, 0xff, 0x3c, 0x3c, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x38, 0x38, 0x78, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x1c, 0x1c, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x3c, 0x3c, 0x6c, 0x6c, 0xcc, 0xcc, 0xfe, 0xfe, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x7c, 0x7c, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x30, 0x30, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7e, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x0c, 0x0c, 0x38, 0x38, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00], [0x7c, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xd6, 0xd6, 0xde, 0xde, 0xc0, 0xc0, 0x78, 0x78, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00], [0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x00, 0x00], [0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x60, 0x60, 0x6e, 0x6e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0xc6, 0xc6, 0xcc, 0xcc, 0xd8, 0xd8, 0xf0, 0xf0, 0xd8, 0xd8, 0xcc, 0xcc, 0xc6, 0xc6, 0x00, 0x00], [0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0xc6, 0xc6, 0xee, 0xee, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0xc6, 0xc6, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x78, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdc, 0xdc, 0x7e, 0x7e, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x70, 0x70, 0x3c, 0x3c, 0x0e, 0x0e, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0xee, 0xee, 0xc6, 0xc6, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0xfe, 0xfe, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0xfe, 0xfe, 0x00, 0x00], [0x3c, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x3c, 0x00, 0x00], [0xc0, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03, 0x00, 0x00], [0x3c, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x3c, 0x00, 0x00], [0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe], [0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x3c, 0x3c], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x78, 0x78], [0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xec, 0xec, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60], [0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x06, 0x06], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x00, 0x00], [0x30, 0x30, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1c, 0x1c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0x6c, 0x6c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x00, 0x00], [0x72, 0x72, 0x9c, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0xc3, 0xc3, 0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0x00, 0x00], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe7, 0xe7, 0xdb, 0xdb, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe0, 0xe0, 0xc3, 0xc3, 0xc3, 0xc3, 0x90, 0x90, 0x83, 0x83, 0x33, 0x33, 0x30, 0x30, 0xff, 0xff], [0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xf3, 0xf3, 0xe7, 0xe7], [0xcf, 0xcf, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x09, 0x09, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff], [0x8e, 0x8e, 0x31, 0x31, 0x19, 0x19, 0x09, 0x09, 0x21, 0x21, 0x31, 0x31, 0x39, 0x39, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x3c, 0x3c, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xff, 0xff, 0x39, 0x39, 0x93, 0x93, 0xc7, 0xc7, 0x93, 0x93, 0x39, 0x39, 0xff, 0xff, 0xff, 0xff], [0xc0, 0xc0, 0x99, 0x99, 0x91, 0x91, 0x81, 0x81, 0x89, 0x89, 0x99, 0x99, 0x03, 0x03, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0xdb, 0xdb, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf9, 0xf9, 0xf7, 0xf7, 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x3f, 0x3f, 0x3f, 0x3f, 0x03, 0x03, 0x39, 0x39, 0x03, 0x03, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x9f, 0x9f], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x80], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x0c, 0x3e, 0x3e, 0x6c, 0x6c, 0x3e, 0x3e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00], [0x1c, 0x1c, 0x36, 0x36, 0x30, 0x30, 0x78, 0x78, 0x30, 0x30, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x42, 0x42, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x7e, 0x81, 0x81, 0x9d, 0x9d, 0xb1, 0xb1, 0x9d, 0x9d, 0x81, 0x81, 0x7e, 0x7e, 0x00, 0x00], [0x1c, 0x1c, 0x24, 0x24, 0x44, 0x44, 0x3c, 0x3c, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00], [0x3e, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x7e, 0x81, 0x81, 0xb9, 0xb9, 0xa5, 0xa5, 0xb9, 0xb9, 0xa5, 0xa5, 0x81, 0x81, 0x7e, 0x7e], [0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00], [0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x0c, 0x0c, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x7f, 0x60, 0x60], [0x3e, 0x3e, 0x7a, 0x7a, 0x7a, 0x7a, 0x3a, 0x3a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30], [0x30, 0x30, 0x70, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x38, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00], [0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x32, 0x32, 0x66, 0x66, 0xcf, 0xcf, 0x02, 0x02], [0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x3e, 0x3e, 0x62, 0x62, 0xc4, 0xc4, 0x0e, 0x0e], [0xc0, 0xc0, 0x23, 0x23, 0x66, 0x66, 0x2c, 0x2c, 0xd9, 0xd9, 0x33, 0x33, 0x67, 0x67, 0x01, 0x01], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x1f, 0x1f, 0x3c, 0x3c, 0x3c, 0x3c, 0x6f, 0x6f, 0x7c, 0x7c, 0xcc, 0xcc, 0xcf, 0xcf, 0x00, 0x00], [0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x0c, 0x0c, 0x18, 0x18], [0x30, 0x30, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0xf6, 0xf6, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00], [0x71, 0x71, 0xce, 0xce, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0xc3, 0xc3, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x3f, 0x3f, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0xfc, 0xfc, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x08, 0x08, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xfc, 0xc6, 0xc6, 0xfc, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x60, 0x60], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x1b, 0x1b, 0x7f, 0x7f, 0xd8, 0xd8, 0x77, 0x77, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x18, 0x18], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x60, 0x60, 0xfc, 0xfc, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x02, 0x02, 0x7c, 0x7c, 0xce, 0xce, 0xd6, 0xd6, 0xe6, 0xe6, 0x7c, 0x7c, 0x80, 0x80], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30]]; this.height = 16; for (k in options) { @@ -285,14 +271,14 @@ }; ImageTextMode.prototype.parseFontData = function(data, height) { - var chars, chr, i, j, _i, _j, _ref, _ref1; + var chars, chr, i, j, _i, _j, _ref; if (height == null) { height = 16; } chars = []; - for (i = _i = 0, _ref = data.length / height - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { + for (i = _i = 0, _ref = data.length / height; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { chr = []; - for (j = _j = 0, _ref1 = height - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; j = 0 <= _ref1 ? ++_j : --_j) { + for (j = _j = 0; 0 <= height ? _j < height : _j > height; j = 0 <= height ? ++_j : --_j) { chr.push(this.getByteAt(data, i * height + j)); } chars.push(chr); @@ -351,14 +337,11 @@ }; ImageTextMode.prototype.toBinaryArray = function(str) { - var buf, bufView, i, strLen; + var buf, bufView, i, _i, _ref; buf = new ArrayBuffer(str.length * 2); bufView = new Uint8Array(buf); - i = 0; - strLen = str.length; - while (i < strLen) { + for (i = _i = 0, _ref = str.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { bufView[i] = str.charCodeAt(i); - i++; } return buf; }; @@ -367,42 +350,18 @@ })(); - this.ImageTextModeXBin = (function(_super) { - var ATTRIBUTE_COMPRESSION, CHARACTER_COMPRESSION, COMPRESSED, COMPRESSION_COUNTER, COMPRESSION_TYPE, FIVETWELVE_CHARS, FONT, FULL_COMPRESSION, NON_BLINK, NO_COMPRESSION, PALETTE; + this.ImageTextModeANSI = (function(_super) { + var ANSI_BG, ANSI_BG_INTENSE, ANSI_CSI, ANSI_CUR_DOWN, ANSI_ESC, ANSI_FG, ANSI_FG_INTENSE, ANSI_RESET, ANSI_RETURN, ANSI_SEP, ANSI_TEXT_PROP; - __extends(ImageTextModeXBin, _super); + __extends(ImageTextModeANSI, _super); - PALETTE = 1; - - FONT = 2; - - COMPRESSED = 4; - - NON_BLINK = 8; - - FIVETWELVE_CHARS = 16; - - NO_COMPRESSION = 0; - - CHARACTER_COMPRESSION = 64; - - ATTRIBUTE_COMPRESSION = 128; - - FULL_COMPRESSION = 192; - - COMPRESSION_TYPE = 192; - - COMPRESSION_COUNTER = 63; - - function ImageTextModeXBin(options) { + function ImageTextModeANSI(options) { var k, v; - ImageTextModeXBin.__super__.constructor.apply(this, arguments); - this.header = { - width: 0, - height: 0, - fontisze: 0, - flags: 0 - }; + ImageTextModeANSI.__super__.constructor.call(this, this.screen); + ImageTextModeANSI.__super__.constructor.call(this, this.font); + this.palette = new ImageTextModePaletteANSI; + this.tabstop = 8; + this.linewrap = 80; for (k in options) { if (!__hasProp.call(options, k)) continue; v = options[k]; @@ -410,162 +369,6 @@ } } - ImageTextModeXBin.prototype.parse = function(content) { - var fontlength, headerData, offset; - this.screen = []; - headerData = content.substr(0, 11); - if (headerData.length !== 11 || !headerData.match('^XBIN\x1a')) { - throw new Error('File is not an XBin'); - } - this.header.width = this.unpackShort(headerData.substr(5, 2)); - this.header.height = this.unpackShort(headerData.substr(7, 2)); - this.header.fontsize = this.getByteAt(headerData.substr(9, 1)); - this.header.flags = this.getByteAt(headerData.substr(10, 1)); - offset = 11; - if (this.header.flags & PALETTE) { - this.parsePaletteData(content.substr(offset, 48)); - offset += 48; - } - if (this.header.flags & FONT) { - fontlength = this.header.fontsize; - if (this.header.flags & FIVETWELVE_CHARS) { - fontlength *= 512; - } else { - fontlength *= 256; - } - this.parseFontData(content.substr(offset, fontlength), this.header.fontsize); - offset += fontlength; - } - if (this.header.flags & COMPRESSED) { - return this._parse_compressed(content.substr(offset)); - } else { - return this._parse_uncompressed(content.substr(offset)); - } - }; - - ImageTextModeXBin.prototype._parse_compressed = function(data) { - var attr, ch, counter, info, type, x, y, _results; - x = 0; - y = 0; - this.screen[y] = []; - data = data.split(''); - _results = []; - while (info = data.shift()) { - info = this.getByteAt(info, 0); - if (info === 26) { - break; - } - type = info & COMPRESSION_TYPE; - counter = (info & COMPRESSION_COUNTER) + 1; - ch = null; - attr = null; - _results.push((function() { - var _results1; - _results1 = []; - while (counter-- > 0) { - switch (type) { - case NO_COMPRESSION: - ch = data.shift(); - attr = data.shift(); - break; - case CHARACTER_COMPRESSION: - if (ch == null) { - ch = data.shift(); - } - attr = data.shift(); - break; - case ATTRIBUTE_COMPRESSION: - if (attr == null) { - attr = data.shift(); - } - ch = data.shift(); - break; - default: - if (ch == null) { - ch = data.shift(); - } - if (attr == null) { - attr = data.shift(); - } - } - this.screen[y][x] = { - ch: ch, - attr: this.getByteAt(attr, 0) - }; - x++; - if (x === this.header.width) { - x = 0; - y++; - if (y === this.header.height) { - break; - } - if (this.screen[y] == null) { - _results1.push(this.screen[y] = []); - } else { - _results1.push(void 0); - } - } else { - _results1.push(void 0); - } - } - return _results1; - }).call(this)); - } - return _results; - }; - - ImageTextModeXBin.prototype._parse_uncompressed = function(data) { - var attr, ch, i, x, y, _i, _ref, _results; - x = 0; - y = 0; - this.screen[y] = []; - _results = []; - for (i = _i = 0, _ref = data.length - 2; _i <= _ref; i = _i += 2) { - ch = data.substr(i, 1); - if (ch === "\x1a") { - break; - } - attr = this.getByteAt(data, i + 1); - this.screen[y][x] = { - 'ch': ch, - 'attr': attr - }; - x++; - if (x === this.header.width) { - x = 0; - y++; - if (y === this.header.height) { - break; - } - if (this.screen[y] == null) { - _results.push(this.screen[y] = []); - } else { - _results.push(void 0); - } - } else { - _results.push(void 0); - } - } - return _results; - }; - - ImageTextModeXBin.prototype.getWidth = function() { - return this.header.width; - }; - - ImageTextModeXBin.prototype.getHeight = function() { - return this.header.height; - }; - - return ImageTextModeXBin; - - })(this.ImageTextMode); - - this.ImageTextModeANSI = (function(_super) { - var ANSI_BG, ANSI_BG_INTENSE, ANSI_CSI, ANSI_CUR_DOWN, ANSI_ESC, ANSI_FG, ANSI_FG_INTENSE, ANSI_RESET, ANSI_RETURN, ANSI_SEP, ANSI_TEXT_PROP; - - __extends(ImageTextModeANSI, _super); - ANSI_ESC = String.fromCharCode(0x1b); ANSI_CSI = ANSI_ESC + '['; @@ -588,30 +391,17 @@ ANSI_RETURN = 'A'; - function ImageTextModeANSI(options) { - var k, v; - ImageTextModeANSI.__super__.constructor.apply(this, arguments); - this.palette = new ImageTextModePaletteANSI; - this.tabstop = 8; - this.linewrap = 80; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - ImageTextModeANSI.prototype.write = function() { var attr, content, max_x, pixel, prevattr, x, y, _i, _j, _ref, _ref1; content = "" + ANSI_CSI + "2J"; - for (y = _i = 0, _ref = this.screen.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; y = 0 <= _ref ? ++_i : --_i) { + for (y = _i = 0, _ref = this.screen.length; 0 <= _ref ? _i < _ref : _i > _ref; y = 0 <= _ref ? ++_i : --_i) { if (this.screen[y] == null) { content += "\n"; } if (this.screen[y] == null) { continue; } - for (x = _j = 0, _ref1 = this.getWidth() - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; x = 0 <= _ref1 ? ++_j : --_j) { + for (x = _j = 0, _ref1 = this.getWidth(); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; x = 0 <= _ref1 ? ++_j : --_j) { pixel = this.screen[y][x]; if (pixel == null) { pixel = { @@ -1370,4 +1160,198 @@ })(this.ImageTextMode); + this.ImageTextModeXBin = (function(_super) { + var ATTRIBUTE_COMPRESSION, CHARACTER_COMPRESSION, COMPRESSED, COMPRESSION_COUNTER, COMPRESSION_TYPE, FIVETWELVE_CHARS, FONT, FULL_COMPRESSION, NON_BLINK, NO_COMPRESSION, PALETTE; + + __extends(ImageTextModeXBin, _super); + + PALETTE = 1; + + FONT = 2; + + COMPRESSED = 4; + + NON_BLINK = 8; + + FIVETWELVE_CHARS = 16; + + NO_COMPRESSION = 0; + + CHARACTER_COMPRESSION = 64; + + ATTRIBUTE_COMPRESSION = 128; + + FULL_COMPRESSION = 192; + + COMPRESSION_TYPE = 192; + + COMPRESSION_COUNTER = 63; + + function ImageTextModeXBin(options) { + var k, v; + ImageTextModeXBin.__super__.constructor.apply(this, arguments); + this.header = { + width: 0, + height: 0, + fontisze: 0, + flags: 0 + }; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextModeXBin.prototype.parse = function(content) { + var fontlength, headerData, offset; + this.screen = []; + headerData = content.substr(0, 11); + if (headerData.length !== 11 || !headerData.match('^XBIN\x1a')) { + throw new Error('File is not an XBin'); + } + this.header.width = this.unpackShort(headerData.substr(5, 2)); + this.header.height = this.unpackShort(headerData.substr(7, 2)); + this.header.fontsize = this.getByteAt(headerData.substr(9, 1)); + this.header.flags = this.getByteAt(headerData.substr(10, 1)); + offset = 11; + if (this.header.flags & PALETTE) { + this.parsePaletteData(content.substr(offset, 48)); + offset += 48; + } + if (this.header.flags & FONT) { + fontlength = this.header.fontsize; + if (this.header.flags & FIVETWELVE_CHARS) { + fontlength *= 512; + } else { + fontlength *= 256; + } + this.parseFontData(content.substr(offset, fontlength), this.header.fontsize); + offset += fontlength; + } + if (this.header.flags & COMPRESSED) { + return this._parse_compressed(content.substr(offset)); + } else { + return this._parse_uncompressed(content.substr(offset)); + } + }; + + ImageTextModeXBin.prototype._parse_compressed = function(data) { + var attr, ch, counter, info, type, x, y, _results; + x = 0; + y = 0; + this.screen[y] = []; + data = data.split(''); + _results = []; + while (info = data.shift()) { + info = this.getByteAt(info, 0); + if (info === 26) { + break; + } + type = info & COMPRESSION_TYPE; + counter = (info & COMPRESSION_COUNTER) + 1; + ch = null; + attr = null; + _results.push((function() { + var _results1; + _results1 = []; + while (counter-- > 0) { + switch (type) { + case NO_COMPRESSION: + ch = data.shift(); + attr = data.shift(); + break; + case CHARACTER_COMPRESSION: + if (ch == null) { + ch = data.shift(); + } + attr = data.shift(); + break; + case ATTRIBUTE_COMPRESSION: + if (attr == null) { + attr = data.shift(); + } + ch = data.shift(); + break; + default: + if (ch == null) { + ch = data.shift(); + } + if (attr == null) { + attr = data.shift(); + } + } + this.screen[y][x] = { + ch: ch, + attr: this.getByteAt(attr, 0) + }; + x++; + if (x === this.header.width) { + x = 0; + y++; + if (y === this.header.height) { + break; + } + if (this.screen[y] == null) { + _results1.push(this.screen[y] = []); + } else { + _results1.push(void 0); + } + } else { + _results1.push(void 0); + } + } + return _results1; + }).call(this)); + } + return _results; + }; + + ImageTextModeXBin.prototype._parse_uncompressed = function(data) { + var attr, ch, i, x, y, _i, _ref, _results; + x = 0; + y = 0; + this.screen[y] = []; + _results = []; + for (i = _i = 0, _ref = data.length - 2; _i <= _ref; i = _i += 2) { + ch = data.substr(i, 1); + if (ch === "\x1a") { + break; + } + attr = this.getByteAt(data, i + 1); + this.screen[y][x] = { + 'ch': ch, + 'attr': attr + }; + x++; + if (x === this.header.width) { + x = 0; + y++; + if (y === this.header.height) { + break; + } + if (this.screen[y] == null) { + _results.push(this.screen[y] = []); + } else { + _results.push(void 0); + } + } else { + _results.push(void 0); + } + } + return _results; + }; + + ImageTextModeXBin.prototype.getWidth = function() { + return this.header.width; + }; + + ImageTextModeXBin.prototype.getHeight = function() { + return this.header.height; + }; + + return ImageTextModeXBin; + + })(this.ImageTextMode); + }).call(this); From 5e1b2ab1252cc170e6a269373ebe5077e1aaad08 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Mon, 24 Mar 2014 16:56:34 +0200 Subject: [PATCH 018/108] new version - new coffeescript. --- textmode.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/textmode.js b/textmode.js index 0ad98c9..ec03ea9 100644 --- a/textmode.js +++ b/textmode.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.7.1 (function() { var __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; From 5263470bfba738928133f7907254e5cf63fb0a70 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Mon, 24 Mar 2014 16:58:05 +0200 Subject: [PATCH 019/108] re-order of priorities for getting ready for Revision. --- todo.txt | 60 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/todo.txt b/todo.txt index 26a8214..f037617 100644 --- a/todo.txt +++ b/todo.txt @@ -1,37 +1,37 @@ -Sahli todo (programmer's day 2013 - Churchy La Femme reminds us that Friday -the 13th comes on Friday this month) +(C) separate to individual renderers @16colors +(C) load to array/picture, render from picture @16colors +(C) speed up rendering more? @16colors -(A) Fix Amiga mode rendering via sixteencolors lib -(B) Add fonts - mOsOul -(B) Add fonts - microknight -(B) Add p0t - fonts-nOodle -(B) Add fonts - Amiga 500 -(B) Add fonts - Amiga 1200 (replace or compare w/16colors version) +(A) remove the SAUCE lines at bottom, return ANSI object for render @SAUCE +(B) load SAUCE into 'info' lines (should be done at prep) @SAUCE +(A) Study 16colors site - how does IT remove sauce info? -SAUCE file parsing - -(A) remove the SAUCE lines at bottom, return ANSI object for render -(B) load SAUCE into 'info' lines (should be done at prep) +(A) remove their lines like SAUCE, return ANSI object for render @OTHER +(B) load other-info into 'info' (done at prep) @OTHER -OTHER file parsing - -(A) remove their lines like SAUCE, return ANSI object for render -(B) load other-info into 'info' (done at prep) +(A) Create Editor - Standalone @EDITOR +(A) - create interface @EDITOR +(A) - parse files for 'info' @EDITOR @SAUCE -(A) Create Editor - Standalone -(A) - create interface -(A) - parse files for 'info' +x 2014-03-24 (B) Get with dfox on the partymeister package version +(B) implement package import from partymeister @PARTYMEISTER -(B) Get with dfox on the partymeister package version +(C) hook for progress @progress @PARTYMEISTER -main renderer: -hook for progress +(B) ADF @OTHER +(B) Tundra @OTHER +(A) SAUCE @SAUCE +(B) XBIN @OTHER +(B) Avatar @OTHER +(B) BIN @OTHER +(B) IDF @OTHER +(B) PCBOARD @OTHER +(A) Amiga ANSI @OTHER + +(C) Fix Amiga mode rendering via sixteencolors lib @16colors +(C) Add fonts - mOsOul @Fonts @16colors +(C) Add fonts - microknight @16colors +(C) Add p0t - fonts-nOodle @16colors +(C) Add fonts - Amiga 500 @16colors +(C) Add fonts - Amiga 1200 (replace or compare w/16colors version) @16colors -Support: -(B) ADF -(B) Tundra -(A) SAUCE -(B) XBIN -(B) Avatar -(B) BIN -(B) IDF -(B) PCBOARD -(A) Amiga ANSI From 10e8940807f5e292b915b7fe9946e1531ba87a76 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Sat, 5 Apr 2014 11:32:27 +0300 Subject: [PATCH 020/108] changes to todo --- done.txt | 0 report.txt | 0 todo.txt | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 done.txt create mode 100644 report.txt diff --git a/done.txt b/done.txt new file mode 100644 index 0000000..e69de29 diff --git a/report.txt b/report.txt new file mode 100644 index 0000000..e69de29 diff --git a/todo.txt b/todo.txt index f037617..6545d00 100644 --- a/todo.txt +++ b/todo.txt @@ -4,7 +4,7 @@ (A) remove the SAUCE lines at bottom, return ANSI object for render @SAUCE (B) load SAUCE into 'info' lines (should be done at prep) @SAUCE -(A) Study 16colors site - how does IT remove sauce info? +x 2014-04-05 (A) Study 16colors site - how does IT remove sauce info? It DOESN'T. FUCK. (A) remove their lines like SAUCE, return ANSI object for render @OTHER (B) load other-info into 'info' (done at prep) @OTHER From 49d411a3d13e0a2a902bd3a253b88363372b1d43 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Sat, 5 Apr 2014 13:30:28 +0300 Subject: [PATCH 021/108] split classes into files for better understanding - also for excluding some things in the build, as I may not need to support PCBoard at revision. Actually, I don't. Later I can add that support, but for now, I need the Revision bits working. --- 16col/adf.coffee | 44 ++ 16col/ansi.coffee | 179 +++++ 16col/avatar.coffee | 68 ++ 16col/bin.coffee | 25 + 16col/fonts.coffee | 797 +++++++++++++++++++++ 16col/idf.coffee | 55 ++ 16col/imgtxtmode.coffee | 115 +++ 16col/pallette.coffee | 62 ++ 16col/pcboard.coffee | 67 ++ 16col/sauce.coffee | 56 ++ 16col/tundra.coffee | 70 ++ 16col/xbin.coffee | 117 +++ Cakefile | 47 ++ textmode.coffee | 1497 ++++++++++++++++++++------------------- todo.txt | 1 + 15 files changed, 2454 insertions(+), 746 deletions(-) create mode 100644 16col/adf.coffee create mode 100644 16col/ansi.coffee create mode 100644 16col/avatar.coffee create mode 100644 16col/bin.coffee create mode 100644 16col/fonts.coffee create mode 100644 16col/idf.coffee create mode 100644 16col/imgtxtmode.coffee create mode 100644 16col/pallette.coffee create mode 100644 16col/pcboard.coffee create mode 100644 16col/sauce.coffee create mode 100644 16col/tundra.coffee create mode 100644 16col/xbin.coffee create mode 100644 Cakefile diff --git a/16col/adf.coffee b/16col/adf.coffee new file mode 100644 index 0000000..937295b --- /dev/null +++ b/16col/adf.coffee @@ -0,0 +1,44 @@ +class @ImageTextModeADF extends @ImageTextMode + + COLOR_INDEX = [ 0, 1, 2, 3, 4, 5, 20, 7, 56, 57, 58, 59, 60, 61, 62, 63 ] + + constructor: ( options ) -> + super + @header = { version: 0 } + this[k] = v for own k, v of options + + parse: ( content ) -> + @header.version = @getByteAt( content, 0 ) + @parsePaletteData( content.substr( 1, 192 ) ) + @parseFontData( content.substr( 193, 4096 ) ) + + x = 0 + y = 0 + @screen[ y ] = [] + + for i in [ 4289 .. content.length - 2 ] by 2 + ch = content.substr( i, 1 ) + break if ch == "\x1a" + attr = @getByteAt( content, i + 1 ) + @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } + x++ + if x == 80 + x = 0 + y++ + @screen[ y ] = [] + + @screen.pop() if @screen[ y ].length == 0 + + parsePaletteData: ( data ) -> + colors = [] + for i in COLOR_INDEX + j = i * 3 + r = @getByteAt( data, j ) + r = r << 2 | r >> 4 + g = @getByteAt( data, j + 1 ) + g = g << 2 | g >> 4 + b = @getByteAt( data, j + 2 ) + b = b << 2 | b >> 4 + colors.push [ r, g, b ] + + @palette = new ImageTextModePalette( { colors: colors } ) diff --git a/16col/ansi.coffee b/16col/ansi.coffee new file mode 100644 index 0000000..bd479b6 --- /dev/null +++ b/16col/ansi.coffee @@ -0,0 +1,179 @@ + +class @ImageTextModeANSI extends @ImageTextMode + constructor: ( options ) -> + super @screen + super @font + @palette = new ImageTextModePaletteANSI + @tabstop = 8 + @linewrap = 80 + @[k] = v for own k, v of options + + ANSI_ESC = String.fromCharCode(0x1b) + ANSI_CSI = ANSI_ESC + '[' + ANSI_TEXT_PROP = 'm' + ANSI_RESET = '0' + ANSI_FG = '3' + ANSI_BG = '4' + ANSI_FG_INTENSE = '9' + ANSI_BG_INTENSE = '10' + ANSI_CUR_DOWN = 'B' + ANSI_SEP = ';' + ANSI_RETURN = 'A' + +# not going to mess with this for now, as I think it is the 'write' code +# for the actual ansi editor. That would be bad to mess up. +# did redo the for loops to read nicer tho. + + write: -> + content = "#{ ANSI_CSI }2J" # initiate document + for y in [0...@screen.length] + content += "\n" if !@screen[y]? + continue if !@screen[y]? + for x in [0...@getWidth()] + pixel = @screen[y][x] + if !pixel? + pixel = { ch: ' ', attr: 7 } + attr = @gen_args(pixel.attr) + if (attr != prevattr) + content += "#{ANSI_CSI}0;#{attr}#{ANSI_TEXT_PROP}" + prevattr = attr + content += if pixel.ch? then pixel.ch else ' ' + max_x = x + content += "#{ ANSI_CSI }0m" + @toBinaryArray(content) + + gen_args: ( attr ) -> + fg = 30 + ( attr & 7 ) + bg = 40 + ( ( attr & 112 ) >> 4) + bl = if attr & 128 then 5 else '' + intense = if attr & 8 then 1 else '' + +# um why do we make this attrs variable and not use it? + + attrs = a for a in [fg, bg, bl, intense] when a != '' + return [fg, bg, bl, intense].join(";") + + parse: ( content ) -> + @screen = [] + @state = 0 + @x = 0 + @y = 0 + @save_x = 0 + @save_y = 0 + @attr = 7 + @argbuf = '' + + content = content.split( '' ) + while ch = content.shift() + if @state is 0 + switch ch + when "\x1a" then @state = 3 + when "\x1b" then @state = 1 + when "\n" + @x = 0 + @y++ + when "\r" then break + when "\t" + i = ( @x + 1 ) % @tabstop + @putpixel ' ' while i-- > 0 + else + @putpixel ch + + else if @state is 1 + if ch isnt "[" + @putpixel "\x1b" + @putpixel "[" + @state = 0 + else + @state = 2 + + else if @state is 2 + if ch.match( '[A-Za-z]' ) + args = ( parseInt( i ) for i in @argbuf.split ';' ) + + switch ch + when "m" + for arg in args + if arg is 0 + @attr = 7 + else if arg is 1 + @attr |= 8 + else if arg is 5 + @attr |= 128 + else if 30 <= arg <= 37 + @attr &= 248 + @attr |= ( arg - 30 ) + else if 40 <= arg <= 47 + @attr &= 143 + @attr |= ( arg - 40 ) << 4 + + when "H", "f" + @y = ( args[ 0 ] or 1 ) - 1 + @x = ( args[ 1 ] or 1 ) - 1 + @y = 0 if @y < 0 + @x = 0 if @x < 0 + when "A" + @y -= args[ 0 ] or 1 + @y = 0 if @y < 0 + when "B" + @y += args[ 0 ] or 1 + when "C" + @x += args[ 0 ] or 1 + when "D" + @x -= args[ 0 ] or 1 + @x = 0 if @x < 0 + when "E" + @y += args[ 0 ] or 1 + @x = 0 + when "F" + @y -= args[ 0 ] or 1 + @y = 0 if @y > 0 + @x = 0 + when "G" + @x = ( args[ 0 ] or 1 ) - 1 + when "s" + @save_x = @x + @save_y = @y + when "u" + @x = @save_x + @y = @save_y + when "J" + if args.length is 0 or args[ 0 ] is 0 + @screen[ i ] = null for i in [ @y + 1 .. screen.length - 1 ] + @screen[ @y ][ i ] = null for i in [ @x .. screen[ @y ].length - 1 ] + else if args[ 0 ] is 1 + @screen[ i ] = null for i in [ 0 .. @y - 1 ] + @screen[ @y ][ i ] = null for i in [ 0 .. @x ] + else if args[ 0 ] is 2 + @x = 0 + @y = 0 + @screen = [] + when "K" + if args.length is 0 or args[ 0 ] is 0 + @screen[ @y ][ i ] = null for i in [ @x .. @screen[ @y ].length - 1 ] + else if args[ 0 ] is 1 + @screen[ @y ][ i ] = null for i in [ 0 .. @x ] + else if args[ 0 ] is 2 + @screen[ @y ] = null + + @argbuf = '' + @state = 0 + + else + @argbuf += ch + + else if @state is 3 + break + + else + @state = 0 + + + putpixel: ( ch ) -> + @screen[ @y ] = [] if !@screen[ @y ]? + @screen[ @y ][ @x ] = { ch: ch, attr: @attr } + + if ++@x >= @linewrap + @x = 0 + @y++ + diff --git a/16col/avatar.coffee b/16col/avatar.coffee new file mode 100644 index 0000000..e47568e --- /dev/null +++ b/16col/avatar.coffee @@ -0,0 +1,68 @@ +class @ImageTextModeAVATAR extends @ImageTextMode + + constructor: ( options ) -> + super + @tabstop = 8 + @linewrap = 80 + this[k] = v for own k, v of options + + parse: ( content ) -> + @screen = [] + @x = 0 + @y = 0 + @attr = 3 + + content = content.split( '' ) + while ch = content.shift() + if ch is "\x1a" + break + else if ch is "\n" + @x = 0 + @y++ + else if ch is "\r" + continue + else if ch is "\t" + i = ( @x + 1 ) % @tabstop + @putpixel ' ' while i-- > 0 + else if ch.charCodeAt( 0 ) is 12 + @screen = [] + @attr = 3 + @insert = false + else if ch.charCodeAt( 0 ) is 25 + ch = content.shift() + i = content.shift().charCodeAt( 0 ) + @putpixel( ch ) while i-- > 0 + else if ch.charCodeAt( 0 ) is 22 + c = content.shift().charCodeAt( 0 ) + switch c + when 1 + @attr = content.shift().charCodeAt( 0 ) & 0x7f + when 2 + @attr |= 0x80 + when 3 + @y-- + @y = 0 if @y < 0 + when 4 + @y++ + when 5 + @x-- + @x = 0 if @x < 0 + when 6 + @x++ + when 7 + @screen[ @y ][ i ] = null for i in [ @x .. screen[ @y ].length - 1 ] + when 8 + @y = content.shift().charCodeAt( 0 ) - 1 + @x = content.shift().charCodeAt( 0 ) - 1 + @y = 0 if @y < 0 + @x = 0 if @x < 0 + else + @putpixel ch + + putpixel: ( ch ) -> + @screen[ @y ] = [] if !@screen[ @y ]? + @screen[ @y ][ @x ] = { ch: ch, attr: @attr } + + if ++@x >= @linewrap + @x = 0 + @y++ diff --git a/16col/bin.coffee b/16col/bin.coffee new file mode 100644 index 0000000..e81e515 --- /dev/null +++ b/16col/bin.coffee @@ -0,0 +1,25 @@ +class @ImageTextModeBin extends @ImageTextMode + + constructor: ( options ) -> + super + @linewrap = 160 + this[k] = v for own k, v of options + + parse: ( content ) -> + x = 0 + y = 0 + @screen[ y ] = [] + + for i in [ 0 .. content.length - 2 ] by 2 + ch = content.substr( i, 1 ) + break if ch == "\x1a" + attr = @getByteAt( content, i + 1 ) + @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } + x++ + if x == @linewrap + x = 0 + y++ + @screen[ y ] = [] + + @screen.pop() if @screen[ y ].length == 0 + diff --git a/16col/fonts.coffee b/16col/fonts.coffee new file mode 100644 index 0000000..d7c4206 --- /dev/null +++ b/16col/fonts.coffee @@ -0,0 +1,797 @@ +class @ImageTextModeFont + constructor: ( options ) -> + @chars = [] + @width = 8 + @[k] = v for own k, v of options + +class @ImageTextModeFont8x16 extends @ImageTextModeFont + constructor: ( options ) -> + super @width + @chars = [ + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff ], + [ 0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00 ], + [ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00 ], + [ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00 ], + [ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x70, 0x00, 0x00 ], + [ 0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x70, 0x00, 0x00 ], + [ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x38, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x36, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00 ], + [ 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x18, 0x18, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 ], + [ 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00 ], + [ 0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x66, 0xce, 0x9a, 0x3f, 0x06, 0x06, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44 ], + [ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa ], + [ 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ], + [ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0 ], + [ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f ], + [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x6c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x3c, 0x66, 0x0c, 0x18, 0x32, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ] + ] + @height = 16 + @[k] = v for own k, v of options + +class @ImageTextModeFont8x8 extends @ImageTextModeFont + constructor: ( options ) -> + super @width + @chars = [ + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e ], + [ 0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e ], + [ 0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00 ], + [ 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00 ], + [ 0x38, 0x7c, 0x38, 0xfe, 0xfe, 0xd6, 0x10, 0x38 ], + [ 0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x7c, 0x10, 0x38 ], + [ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00 ], + [ 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff ], + [ 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00 ], + [ 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff ], + [ 0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78 ], + [ 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18 ], + [ 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0 ], + [ 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0 ], + [ 0x18, 0xdb, 0x3c, 0xe7, 0xe7, 0x3c, 0xdb, 0x18 ], + [ 0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00 ], + [ 0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00 ], + [ 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18 ], + [ 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00 ], + [ 0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00 ], + [ 0x3e, 0x61, 0x3c, 0x66, 0x66, 0x3c, 0x86, 0x7c ], + [ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00 ], + [ 0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff ], + [ 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00 ], + [ 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00 ], + [ 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00 ], + [ 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00 ], + [ 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00 ], + [ 0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00 ], + [ 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00 ], + [ 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00 ], + [ 0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00 ], + [ 0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00 ], + [ 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00 ], + [ 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00 ], + [ 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00 ], + [ 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30 ], + [ 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00 ], + [ 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00 ], + [ 0x38, 0x6c, 0xc6, 0xd6, 0xc6, 0x6c, 0x38, 0x00 ], + [ 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00 ], + [ 0x7c, 0xc6, 0x06, 0x1c, 0x30, 0x66, 0xfe, 0x00 ], + [ 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00 ], + [ 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00 ], + [ 0xfe, 0xc0, 0xc0, 0xfc, 0x06, 0xc6, 0x7c, 0x00 ], + [ 0x38, 0x60, 0xc0, 0xfc, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0xfe, 0xc6, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00 ], + [ 0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00 ], + [ 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00 ], + [ 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30 ], + [ 0x06, 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x06, 0x00 ], + [ 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00 ], + [ 0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00 ], + [ 0x7c, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x00 ], + [ 0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00 ], + [ 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00 ], + [ 0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00 ], + [ 0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00 ], + [ 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00 ], + [ 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00 ], + [ 0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00 ], + [ 0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3a, 0x00 ], + [ 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00 ], + [ 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00 ], + [ 0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00 ], + [ 0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00 ], + [ 0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00 ], + [ 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00 ], + [ 0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00 ], + [ 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00 ], + [ 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xce, 0x7c, 0x0e ], + [ 0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00 ], + [ 0x3c, 0x66, 0x30, 0x18, 0x0c, 0x66, 0x3c, 0x00 ], + [ 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x3c, 0x00 ], + [ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00 ], + [ 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00 ], + [ 0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc6, 0x00 ], + [ 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x00 ], + [ 0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00 ], + [ 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00 ], + [ 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00 ], + [ 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00 ], + [ 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff ], + [ 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ], + [ 0xe0, 0x60, 0x7c, 0x66, 0x66, 0x66, 0xdc, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc6, 0x7c, 0x00 ], + [ 0x1c, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ], + [ 0x3c, 0x66, 0x60, 0xf8, 0x60, 0x60, 0xf0, 0x00 ], + [ 0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8 ], + [ 0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00 ], + [ 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00 ], + [ 0x06, 0x00, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c ], + [ 0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00 ], + [ 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00 ], + [ 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0x00 ], + [ 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x00 ], + [ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0 ], + [ 0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e ], + [ 0x00, 0x00, 0xdc, 0x76, 0x60, 0x60, 0xf0, 0x00 ], + [ 0x00, 0x00, 0x7e, 0xc0, 0x7c, 0x06, 0xfc, 0x00 ], + [ 0x30, 0x30, 0xfc, 0x30, 0x30, 0x36, 0x1c, 0x00 ], + [ 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00 ], + [ 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc ], + [ 0x00, 0x00, 0x7e, 0x4c, 0x18, 0x32, 0x7e, 0x00 ], + [ 0x0e, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0e, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00 ], + [ 0x70, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x70, 0x00 ], + [ 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00 ], + [ 0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x0c, 0x78 ], + [ 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ], + [ 0x0c, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ], + [ 0x7c, 0x82, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ], + [ 0xc6, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ], + [ 0x30, 0x18, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ], + [ 0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ], + [ 0x00, 0x00, 0x7e, 0xc0, 0xc0, 0x7e, 0x0c, 0x38 ], + [ 0x7c, 0x82, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ], + [ 0xc6, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ], + [ 0x30, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ], + [ 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00 ], + [ 0x7c, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00 ], + [ 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00 ], + [ 0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00 ], + [ 0x38, 0x6c, 0x7c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00 ], + [ 0x18, 0x30, 0xfe, 0xc0, 0xf8, 0xc0, 0xfe, 0x00 ], + [ 0x00, 0x00, 0x7e, 0x18, 0x7e, 0xd8, 0x7e, 0x00 ], + [ 0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00 ], + [ 0x7c, 0x82, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0x30, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0x78, 0x84, 0x00, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ], + [ 0x60, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ], + [ 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc ], + [ 0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x00 ], + [ 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18 ], + [ 0x38, 0x6c, 0x64, 0xf0, 0x60, 0x66, 0xfc, 0x00 ], + [ 0x66, 0x66, 0x3c, 0x7e, 0x18, 0x7e, 0x18, 0x18 ], + [ 0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7 ], + [ 0x0e, 0x1b, 0x18, 0x3c, 0x18, 0xd8, 0x70, 0x00 ], + [ 0x18, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ], + [ 0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00 ], + [ 0x0c, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ], + [ 0x18, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ], + [ 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x00 ], + [ 0x76, 0xdc, 0x00, 0xe6, 0xf6, 0xde, 0xce, 0x00 ], + [ 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00 ], + [ 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00 ], + [ 0x18, 0x00, 0x18, 0x18, 0x30, 0x63, 0x3e, 0x00 ], + [ 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x00, 0x00 ], + [ 0x63, 0xe6, 0x6c, 0x7e, 0x33, 0x66, 0xcc, 0x0f ], + [ 0x63, 0xe6, 0x6c, 0x7a, 0x36, 0x6a, 0xdf, 0x06 ], + [ 0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x00 ], + [ 0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00 ], + [ 0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00 ], + [ 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88 ], + [ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa ], + [ 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18 ], + [ 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18 ], + [ 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00 ], + [ 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18 ], + [ 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18 ], + [ 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36 ], + [ 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00 ], + [ 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36 ], + [ 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00 ], + [ 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18 ], + [ 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36 ], + [ 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36 ], + [ 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18 ], + [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ], + [ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff ], + [ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0 ], + [ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f ], + [ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00 ], + [ 0x78, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xcc, 0x00 ], + [ 0xfe, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00 ], + [ 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00 ], + [ 0xfe, 0xc6, 0x60, 0x30, 0x60, 0xc6, 0xfe, 0x00 ], + [ 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0xc0 ], + [ 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00 ], + [ 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x7e ], + [ 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00 ], + [ 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00 ], + [ 0x0e, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x3c, 0x00 ], + [ 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00 ], + [ 0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0 ], + [ 0x1e, 0x30, 0x60, 0x7e, 0x60, 0x30, 0x1e, 0x00 ], + [ 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00 ], + [ 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00 ], + [ 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x7e, 0x00 ], + [ 0x30, 0x18, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00 ], + [ 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00 ], + [ 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70 ], + [ 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00 ], + [ 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00 ], + [ 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c ], + [ 0x6c, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00 ], + [ 0x78, 0x0c, 0x18, 0x30, 0x7c, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ] + ] + @height = 8 + @[k] = v for own k, v of options + +class @ImageTextModeFontAmiga extends @ImageTextModeFont + constructor: ( options ) -> + super @width + @chars = [ + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x83, 0x83, 0x39, 0x39, 0x21, 0x21, 0x29, 0x29, 0x21, 0x21, 0x3f, 0x3f, 0x87, 0x87, 0xff, 0xff ], + [ 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0xff, 0xff ], + [ 0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xff, 0xff ], + [ 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff ], + [ 0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ], + [ 0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff ], + [ 0xc3, 0xc3, 0x99, 0x99, 0x9f, 0x9f, 0x91, 0x91, 0x99, 0x99, 0x99, 0x99, 0xc1, 0xc1, 0xff, 0xff ], + [ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x9c, 0x9c, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x9c, 0x9c, 0xff, 0xff ], + [ 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ], + [ 0x9c, 0x9c, 0x88, 0x88, 0x80, 0x80, 0x94, 0x94, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff ], + [ 0x9c, 0x9c, 0x8c, 0x8c, 0x84, 0x84, 0x90, 0x90, 0x98, 0x98, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff ], + [ 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff ], + [ 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x91, 0x91, 0xc0, 0xc0, 0xff, 0xff ], + [ 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0xc3, 0xc3, 0x99, 0x99, 0x8f, 0x8f, 0xc3, 0xc3, 0xf1, 0xf1, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x81, 0x81, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff ], + [ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xc3, 0xc3, 0xe7, 0xe7, 0xff, 0xff ], + [ 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x94, 0x94, 0x80, 0x80, 0x88, 0x88, 0x9c, 0x9c, 0xff, 0xff ], + [ 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x3c, 0x3c, 0xff, 0xff ], + [ 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff ], + [ 0x80, 0x80, 0xf9, 0xf9, 0xf3, 0xf3, 0xe7, 0xe7, 0xcf, 0xcf, 0x9f, 0x9f, 0x80, 0x80, 0xff, 0xff ], + [ 0xc3, 0xc3, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x3f, 0x3f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe7, 0xe7, 0xf3, 0xf3, 0xf9, 0xf9, 0xfc, 0xfc, 0xff, 0xff ], + [ 0xc3, 0xc3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xf7, 0xf7, 0xe3, 0xe3, 0xc9, 0xc9, 0x9c, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00 ], + [ 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x3e, 0x3e, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x18, 0x18, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0xac, 0xac, 0xd8, 0xd8, 0x36, 0x36, 0x6a, 0x6a, 0xcc, 0xcc, 0x00, 0x00 ], + [ 0x38, 0x38, 0x6c, 0x6c, 0x68, 0x68, 0x76, 0x76, 0xdc, 0xdc, 0xce, 0xce, 0x7b, 0x7b, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x3c, 0x3c, 0xff, 0xff, 0x3c, 0x3c, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x38, 0x38, 0x78, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x1c, 0x1c, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x1c, 0x1c, 0x3c, 0x3c, 0x6c, 0x6c, 0xcc, 0xcc, 0xfe, 0xfe, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x7e, 0x7e, 0x60, 0x60, 0x7c, 0x7c, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x1c, 0x1c, 0x30, 0x30, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x7e, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x0c, 0x0c, 0x38, 0x38, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30 ], + [ 0x00, 0x00, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00 ], + [ 0x7c, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xd6, 0xd6, 0xde, 0xde, 0xc0, 0xc0, 0x78, 0x78, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00 ], + [ 0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x00, 0x00 ], + [ 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00 ], + [ 0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x60, 0x60, 0x6e, 0x6e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0xc6, 0xc6, 0xcc, 0xcc, 0xd8, 0xd8, 0xf0, 0xf0, 0xd8, 0xd8, 0xcc, 0xcc, 0xc6, 0xc6, 0x00, 0x00 ], + [ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0xc6, 0xc6, 0xee, 0xee, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00 ], + [ 0xc6, 0xc6, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00 ], + [ 0x78, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdc, 0xdc, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x70, 0x70, 0x3c, 0x3c, 0x0e, 0x0e, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00 ], + [ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0xee, 0xee, 0xc6, 0xc6, 0x00, 0x00 ], + [ 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00 ], + [ 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0xfe, 0xfe, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0xfe, 0xfe, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0xc0, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe ], + [ 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x06, 0x06, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x1c, 0x1c, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x3c, 0x3c ], + [ 0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x78, 0x78 ], + [ 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xec, 0xec, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x06, 0x06 ], + [ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x00, 0x00 ], + [ 0x30, 0x30, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1c, 0x1c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0x6c, 0x6c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30 ], + [ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x00, 0x00 ], + [ 0x72, 0x72, 0x9c, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0xc3, 0xc3, 0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0x00, 0x00 ], + [ 0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0xe7, 0xe7, 0xdb, 0xdb, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ], + [ 0xe0, 0xe0, 0xc3, 0xc3, 0xc3, 0xc3, 0x90, 0x90, 0x83, 0x83, 0x33, 0x33, 0x30, 0x30, 0xff, 0xff ], + [ 0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xf3, 0xf3, 0xe7, 0xe7 ], + [ 0xcf, 0xcf, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ], + [ 0xf3, 0xf3, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ], + [ 0xe7, 0xe7, 0x99, 0x99, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ], + [ 0x99, 0x99, 0xff, 0xff, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ], + [ 0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x09, 0x09, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff ], + [ 0x8e, 0x8e, 0x31, 0x31, 0x19, 0x19, 0x09, 0x09, 0x21, 0x21, 0x31, 0x31, 0x39, 0x39, 0xff, 0xff ], + [ 0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x3c, 0x3c, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xff, 0xff, 0x39, 0x39, 0x93, 0x93, 0xc7, 0xc7, 0x93, 0x93, 0x39, 0x39, 0xff, 0xff, 0xff, 0xff ], + [ 0xc0, 0xc0, 0x99, 0x99, 0x91, 0x91, 0x81, 0x81, 0x89, 0x89, 0x99, 0x99, 0x03, 0x03, 0xff, 0xff ], + [ 0xcf, 0xcf, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xf3, 0xf3, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xe7, 0xe7, 0xdb, 0xdb, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ], + [ 0xf9, 0xf9, 0xf7, 0xf7, 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff ], + [ 0x3f, 0x3f, 0x3f, 0x3f, 0x03, 0x03, 0x39, 0x39, 0x03, 0x03, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff ], + [ 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x9f, 0x9f ], + [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x80 ], + [ 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x00, 0x00, 0x0c, 0x0c, 0x3e, 0x3e, 0x6c, 0x6c, 0x3e, 0x3e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x1c, 0x1c, 0x36, 0x36, 0x30, 0x30, 0x78, 0x78, 0x30, 0x30, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x42, 0x42, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x7e, 0x7e, 0x81, 0x81, 0x9d, 0x9d, 0xb1, 0xb1, 0x9d, 0x9d, 0x81, 0x81, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x1c, 0x1c, 0x24, 0x24, 0x44, 0x44, 0x3c, 0x3c, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00 ], + [ 0x3e, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x7e, 0x7e, 0x81, 0x81, 0xb9, 0xb9, 0xa5, 0xa5, 0xb9, 0xb9, 0xa5, 0xa5, 0x81, 0x81, 0x7e, 0x7e ], + [ 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x0c, 0x0c, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x7f, 0x60, 0x60 ], + [ 0x3e, 0x3e, 0x7a, 0x7a, 0x7a, 0x7a, 0x3a, 0x3a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30 ], + [ 0x30, 0x30, 0x70, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], + [ 0x38, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00 ], + [ 0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x32, 0x32, 0x66, 0x66, 0xcf, 0xcf, 0x02, 0x02 ], + [ 0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x3e, 0x3e, 0x62, 0x62, 0xc4, 0xc4, 0x0e, 0x0e ], + [ 0xc0, 0xc0, 0x23, 0x23, 0x66, 0x66, 0x2c, 0x2c, 0xd9, 0xd9, 0x33, 0x33, 0x67, 0x67, 0x01, 0x01 ], + [ 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x1f, 0x1f, 0x3c, 0x3c, 0x3c, 0x3c, 0x6f, 0x6f, 0x7c, 0x7c, 0xcc, 0xcc, 0xcf, 0xcf, 0x00, 0x00 ], + [ 0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x0c, 0x0c, 0x18, 0x18 ], + [ 0x30, 0x30, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x66, 0x66, 0x00, 0x00, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ], + [ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0xf6, 0xf6, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00 ], + [ 0x71, 0x71, 0xce, 0xce, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0x00, 0x00 ], + [ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0xc3, 0xc3, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ], + [ 0x3f, 0x3f, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0xfc, 0xfc, 0x00, 0x00 ], + [ 0x30, 0x30, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x24, 0x24, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x06, 0x06, 0x08, 0x08, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ], + [ 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xfc, 0xc6, 0xc6, 0xfc, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00 ], + [ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x60, 0x60 ], + [ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x1b, 0x1b, 0x7f, 0x7f, 0xd8, 0xd8, 0x77, 0x77, 0x00, 0x00 ], + [ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x18, 0x18 ], + [ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ], + [ 0x60, 0x60, 0xfc, 0xfc, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ], + [ 0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ], + [ 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0x02, 0x02, 0x7c, 0x7c, 0xce, 0xce, 0xd6, 0xd6, 0xe6, 0xe6, 0x7c, 0x7c, 0x80, 0x80 ], + [ 0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ], + [ 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30 ], + [ 0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60 ], + [ 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30 ] + ] + @height = 16 + @[k] = v for own k, v of options diff --git a/16col/idf.coffee b/16col/idf.coffee new file mode 100644 index 0000000..0ee5ead --- /dev/null +++ b/16col/idf.coffee @@ -0,0 +1,55 @@ +class @ImageTextModeIDF extends @ImageTextMode + + constructor: ( options ) -> + super + @header = { x0: 0, x1: 0, y0: 0, y1: 0 } + this[k] = v for own k, v of options + + parse: ( content ) -> + headerData = content.substr( 0, 12 ) + if headerData.length isnt 12 || !headerData.match( '^\x041.4' ) + throw new Error( 'File is not an IDF' ) + + @header.x0 = @unpackShort( headerData.substr( 4, 2 ) ) + @header.y0 = @unpackShort( headerData.substr( 6, 2 ) ) + @header.x1 = @unpackShort( headerData.substr( 8, 2 ) ) + @header.y1 = @unpackShort( headerData.substr( 10, 2 ) ) + + eodata = content.length - 48 - 4096 + + if content.substr( content.length - 128, 5 ) == 'SAUCE' + eodata -= 128 + + @parseFontData( content.substr( eodata, 4096 ) ) + @parsePaletteData( content.substr( eodata + 4096, 48 ) ) + + y = 0 + x = 0 + @screen[ y ] = [] + offset = 12 + + while offset < eodata + buffer = content.substr( offset, 2 ) + info = @unpackShort( buffer ) + offset += 2 + len = 1 + + if info == 1 + len = @unpackShort( content.substr( offset, 2 ) ) & 255 + offset += 2 + buffer = content.substr( offset, 2 ) + offset += 2 + + ch = buffer.substr( 0, 1 ) + attr = @getByteAt( buffer, 1 ) + + for i in [ 1 .. len ] + @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } + x++ + if x > @header.x1 + x = 0 + y++ + @screen[ y ] = [] + + @screen.pop() if @screen[ y ].length == 0 + diff --git a/16col/imgtxtmode.coffee b/16col/imgtxtmode.coffee new file mode 100644 index 0000000..c109dc0 --- /dev/null +++ b/16col/imgtxtmode.coffee @@ -0,0 +1,115 @@ +class @ImageTextMode + + @VERSION = '0.01' + + constructor: ( options ) -> + @screen = [] + @palette = new ImageTextModePaletteVGA() + @font = new ImageTextModeFont8x16() + @[k] = v for own k, v of options + + parseUrl: ( url ) -> + req = new XMLHttpRequest() + req.open 'GET', url, false + req.overrideMimeType 'text/plain; charset=x-user-defined' + req.send null + content = if req.status is 200 or req.status is 0 then req.responseText else '' + @parse content + + unpackShort: ( data ) -> + shrt = ( @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 0 ) + if shrt < 0 + shrt += 65536 + shrt + + unpackLong: ( data ) -> + lng = ((( @getByteAt( data, 0 ) << 8 ) + @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 2 ) << 8 ) + @getByteAt( data, 3 ) + if lng < 0 + lng += 4294967296 + lng + + getByteAt: ( data, offset ) -> + data.charCodeAt( offset ) & 0xFF + +# could we replace this with math.max ? Not worth it,called once per view +# we COULD, but we'd do some crap like "Math.max.apply(null,blah) and that's not readable" + getWidth: -> + max = 0 + for y in [ 0 .. @screen.length - 1 ] + max = @screen[ y ].length if @screen[ y ]? && @screen[ y ].length > max + max + + getHeight: -> + @screen.length + + parsePaletteData: ( data ) -> + colors = [] + for i in [ 0 .. 45 ] by 3 + r = @getByteAt( data, i ) + r = r << 2 | r >> 4 + g = @getByteAt( data, i + 1 ) + g = g << 2 | g >> 4 + b = @getByteAt( data, i + 2 ) + b = b << 2 | b >> 4 + colors.push [ r, g, b ] + + @palette = new ImageTextModePalette( colors: colors ) + + parseFontData: ( data, height = 16 ) -> + chars = [] + for i in [ 0 ... data.length / height ] + chr = [] + for j in [ 0 ... height ] + chr.push @getByteAt( data, i * height + j ) + chars.push chr + @font = new ImageTextModeFont( { chars: chars, height: height } ) + +# the majority of time is spent in this routine +# list comprehension seems to speed up from 1.8 seconds to 1.29 seconds from first comprehension / cleanup? + + renderCanvas: ( canvasElem ) -> + w = @getWidth() * @font.width + h = @getHeight() * @font.height + + canvas = document.createElement 'canvas' + canvas.setAttribute 'width', w + canvas.setAttribute 'height', h + ctx = canvas.getContext '2d' + + for cy in [ 0 ... @screen.length ] + if @screen[ cy ]? + for cx in [ 0 ... @screen[ cy ].length ] + pixel = @screen[ cy ][ cx ] + curfillstyle = null + if pixel? + if pixel.attr? + fg = pixel.attr & 15 + bg = ( pixel.attr & 240 ) >> 4 + else + fg = pixel.fg + bg = pixel.bg + + px = cx * @font.width + py = cy * @font.height + + ctx.fillStyle = @palette.toRgbaString( @palette.colors[ bg ] ) + ctx.fillRect px, py, @font.width, @font.height + + ctx.fillStyle = @palette.toRgbaString( @palette.colors[ fg ] ) + chr = @font.chars[ pixel.ch.charCodeAt( 0 ) & 0xff ] + i = 0 + for line in chr + ctx.fillRect px + j, py + i, 1, 1 for j in [ 0 ... @font.width ] when line & (1 << @font.width - 1 - j ) + i += 1 + + canvasElem.setAttribute 'width', w + canvasElem.setAttribute 'height', h + ctx = canvasElem.getContext '2d' + ctx.drawImage canvas, 0, 0 + + toBinaryArray: (str) -> + buf = new ArrayBuffer(str.length * 2) # 2 bytes for each char + bufView = new Uint8Array(buf) + bufView[i] = str.charCodeAt(i) for i in [0...str.length] + buf + diff --git a/16col/pallette.coffee b/16col/pallette.coffee new file mode 100644 index 0000000..f3d738d --- /dev/null +++ b/16col/pallette.coffee @@ -0,0 +1,62 @@ +class @ImageTextModePalette + + constructor: ( options ) -> + @colors = [] + @[k] = v for own k, v of options + + toRgbaString: ( color ) -> + return 'rgba(' + color.join( ',' ) + ',1)'; + +# getting a "cannot call super outside an instance method" error here - +# the resulting code produced does not end up using the super/parent bit +# or at least it doesn't produce bugs in the result if it is not here. +# calling the constructor without super works, and with super the difference is +# ImageTextModePaletteVGA.__super__.constructor.apply(this, arguments); +# is placed inside the constructor. I believe the end result, based on how +# this is used, is identical. +# I am not seeing this pattern (the 'super by itself') being used or referenced +# - instead I am seeting very different patterns using super to reference +# complete items. (referenced meaning "in books, searches, or coffescript +# documentation") + +class @ImageTextModePaletteVGA extends @ImageTextModePalette + constructor: (options) -> + @colors = [ + [ 0x00, 0x00, 0x00 ], + [ 0x00, 0x00, 0xaa ], + [ 0x00, 0xaa, 0x00 ], + [ 0x00, 0xaa, 0xaa ], + [ 0xaa, 0x00, 0x00 ], + [ 0xaa, 0x00, 0xaa ], + [ 0xaa, 0x55, 0x00 ], + [ 0xaa, 0xaa, 0xaa ], + [ 0x55, 0x55, 0x55 ], + [ 0x55, 0x55, 0xff ], + [ 0x55, 0xff, 0x55 ], + [ 0x55, 0xff, 0xff ], + [ 0xff, 0x55, 0x55 ], + [ 0xff, 0x55, 0xff ], + [ 0xff, 0xff, 0x55 ], + [ 0xff, 0xff, 0xff ] + ] + +class @ImageTextModePaletteANSI extends @ImageTextModePalette + constructor: (options) -> + @colors = [ + [ 0x00, 0x00, 0x00 ], + [ 0xaa, 0x00, 0x00 ], + [ 0x00, 0xaa, 0x00 ], + [ 0xaa, 0x55, 0x00 ], + [ 0x00, 0x00, 0xaa ], + [ 0xaa, 0x00, 0xaa ], + [ 0x00, 0xaa, 0xaa ], + [ 0xaa, 0xaa, 0xaa ], + [ 0x55, 0x55, 0x55 ], + [ 0xff, 0x55, 0x55 ], + [ 0x55, 0xff, 0x55 ], + [ 0xff, 0xff, 0x55 ], + [ 0x55, 0x55, 0xff ], + [ 0xff, 0x55, 0xff ], + [ 0x55, 0xff, 0xff ], + [ 0xff, 0xff, 0xff ] + ] \ No newline at end of file diff --git a/16col/pcboard.coffee b/16col/pcboard.coffee new file mode 100644 index 0000000..e1e370d --- /dev/null +++ b/16col/pcboard.coffee @@ -0,0 +1,67 @@ + +class @ImageTextModePCBoard extends @ImageTextMode + + constructor: ( options ) -> + super + @tabstop = 8 + @linewrap = 80 + @codes = { POFF: '', WAIT: '' } + this[k] = v for own k, v of options + + parse: ( content ) -> + @screen = [] + @state = 0 + @x = 0 + @y = 0 + @attr = 7 + + for key, val of @codes + code = new RegExp '@' + key + '@', 'g' + content.replace code, val + + content = content.split( '' ) + while ch = content.shift() + if @state is 0 + switch ch + when "\x1a" then @state = 2 + when '@' then @state = 1 + when "\n" + @x = 0 + @y++ + when "\r" then break + when "\t" + i = ( @x + 1 ) % @tabstop + @putpixel ' ' while i-- > 0 + else + @putpixel ch + else if @state is 1 + if ch is 'X' + @attr = ( parseInt( content.shift(), 16 ) << 4 ) + parseInt( content.shift(), 16 ) + else if ch + content[ 0..2 ].join( '' ) is 'CLS@' + content.shift() for [ 1 .. 3 ] + @screen = [] + else if ch + content[ 0..2 ].join( '' ) is 'POS:' + content.shift() for [ 1 .. 3 ] + @x = content.shift() + @x += content.shift() if content[ 0 ] isnt '@' + @x-- + + content.shift() + else + @putpixel '@' + @putpixel ch + + @state = 0 + else if @state is 2 + break + else + @state = 0 + + putpixel: ( ch ) -> + @screen[ @y ] = [] if !@screen[ @y ]? + @screen[ @y ][ @x ] = { ch: ch, attr: @attr } + + if ++@x >= @linewrap + @x = 0 + @y++ + diff --git a/16col/sauce.coffee b/16col/sauce.coffee new file mode 100644 index 0000000..dad1590 --- /dev/null +++ b/16col/sauce.coffee @@ -0,0 +1,56 @@ +class @ImageTextModeSAUCE + + parseUrl: ( url ) -> + req = new XMLHttpRequest() + req.open 'GET', url, false + req.overrideMimeType 'text/plain; charset=x-user-defined' + req.send null + content = if req.status is 200 or req.status is 0 then req.responseText else '' + @parse content + + parse: ( content ) -> + sauceMarker = content.length - 128; + return false if content.substr( sauceMarker, 5 ) isnt 'SAUCE' + @id = 'SAUCE' + @version = content.substr( sauceMarker + 5, 2 ) + @title = content.substr( sauceMarker + 7, 35 ) + @author = content.substr( sauceMarker + 42, 20 ) + @group = content.substr( sauceMarker + 62, 20 ) + @date = content.substr( sauceMarker + 82, 8 ) + @fileSize = @unpackLong content.substr( sauceMarker + 90, 4 ) + @dataType = @getByteAt content.substr( sauceMarker + 94, 1 ) + @fileType = @getByteAt content.substr( sauceMarker + 95, 1 ) + @tinfo1 = @unpackShort content.substr( sauceMarker + 96, 2 ) + @tinfo2 = @unpackShort content.substr( sauceMarker + 98, 2 ) + @tinfo3 = @unpackShort content.substr( sauceMarker + 100, 2 ) + @tinfo4 = @unpackShort content.substr( sauceMarker + 102, 2 ) + @commentCount = @getByteAt content.substr( sauceMarker + 104, 1 ) + @flags = @getByteAt content.substr( sauceMarker + 105, 1 ) + @filler = content.substr( sauceMarker + 106, 22 ) + + commentMarker = sauceMarker - 5 - @commentCount * 64 + if @commentCount > 0 and content.substr( commentMarker, 5 ) is 'COMNT' + commentMarker += 5 + @comments = [] + i = @commentCount + while i-- > 0 + @comments.push content.substr( commentMarker, 64 ) + commentMarker += 64 + + return true + + unpackLong: ( data ) -> + lng = ((( @getByteAt( data, 3 ) << 8 ) + @getByteAt( data, 2 ) << 8 ) + @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 0 ) + if lng < 0 + lng += 4294967296 + return lng; + + unpackShort: ( data ) -> + shrt = ( @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 0 ) + if shrt < 0 + shrt += 65536 + return shrt + + getByteAt: ( data, offset ) -> + return data.charCodeAt( offset ) & 0xFF + diff --git a/16col/tundra.coffee b/16col/tundra.coffee new file mode 100644 index 0000000..b1960b7 --- /dev/null +++ b/16col/tundra.coffee @@ -0,0 +1,70 @@ + +class @ImageTextModeTundra extends @ImageTextMode + + constructor: ( options ) -> + super + this[k] = v for own k, v of options + + parse: ( content ) -> + colors = [ [ 0, 0, 0 ] ] + palidx = 1 + x = 0 + y = 0 + fg = 0 + bg = 0 + + @screen[ y ] = [] + content = content.substr( 8 ).split( '' ) + while command = content.shift() + break if command == "\x1a" + command = command.charCodeAt( 0 ) + + if command is 1 + y = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + x = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + @screen[ y ] = [] if !@screen[ y ]? + continue + + ch = null + + if command is 2 + ch = content.shift() + rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + fg = palidx++ + colors.push [ + ( rgb >> 16 ) & 0x000000ff, + ( rgb >> 8 ) & 0x000000ff, + rgb & 0x000000ff + ] + else if command is 4 + ch = content.shift() + rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + bg = palidx++ + colors.push [ + ( rgb >> 16 ) & 0x000000ff, + ( rgb >> 8 ) & 0x000000ff, + rgb & 0x000000ff + ] + else if command is 6 + ch = content.shift() + fg = palidx++ + bg = palidx++ + for [ 0 .. 1 ] + rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + colors.push [ + ( rgb >> 16 ) & 0x000000ff, + ( rgb >> 8 ) & 0x000000ff, + rgb & 0x000000ff + ] + + ch = String.fromCharCode( command ) unless ch? + + @screen[ y ][ x ] = { 'ch': ch, 'fg': fg, 'bg': bg } + x++ + if x == 80 + x = 0 + y++ + @screen[ y ] = [] + + @screen.pop() if @screen[ y ].length == 0 + @palette = new ImageTextModePalette( { colors: colors } ) diff --git a/16col/xbin.coffee b/16col/xbin.coffee new file mode 100644 index 0000000..4faa076 --- /dev/null +++ b/16col/xbin.coffee @@ -0,0 +1,117 @@ + +class @ImageTextModeXBin extends @ImageTextMode + + # Header constants + PALETTE = 1 + FONT = 2 + COMPRESSED = 4 + NON_BLINK = 8 + FIVETWELVE_CHARS = 16 + + # Compression type constants + NO_COMPRESSION = 0 + CHARACTER_COMPRESSION = 64 + ATTRIBUTE_COMPRESSION = 128 + FULL_COMPRESSION = 192 + + # Compression byte constants + COMPRESSION_TYPE = 192 + COMPRESSION_COUNTER = 63 + + constructor: ( options ) -> + super + @header = { width: 0, height: 0, fontisze: 0, flags: 0 } + this[k] = v for own k, v of options + + parse: ( content ) -> + @screen = [] + headerData = content.substr( 0, 11 ) + if headerData.length isnt 11 || !headerData.match( '^XBIN\x1a' ) + throw new Error( 'File is not an XBin' ) + + @header.width = @unpackShort( headerData.substr( 5, 2 ) ) + @header.height = @unpackShort( headerData.substr( 7, 2 ) ) + @header.fontsize = @getByteAt( headerData.substr( 9, 1 ) ) + @header.flags = @getByteAt( headerData.substr( 10, 1 ) ) + offset = 11 + + if @header.flags & PALETTE + @parsePaletteData( content.substr( offset, 48 ) ); + offset += 48 + + if @header.flags & FONT + fontlength = @header.fontsize + if @header.flags & FIVETWELVE_CHARS + fontlength *= 512 + else + fontlength *= 256 + @parseFontData( content.substr( offset, fontlength ), @header.fontsize ); + offset += fontlength + + if @header.flags & COMPRESSED + @_parse_compressed( content.substr( offset ) ) + else + @_parse_uncompressed( content.substr( offset ) ) + + _parse_compressed: ( data ) -> + x = 0 + y = 0 + @screen[ y ] = [] + + data = data.split( '' ) + while info = data.shift() + info = @getByteAt( info, 0 ) + break if info == 26 + + type = info & COMPRESSION_TYPE + counter = ( info & COMPRESSION_COUNTER ) + 1 + + ch = null + attr = null + + while counter-- > 0 + switch type + when NO_COMPRESSION + ch = data.shift() + attr = data.shift() + when CHARACTER_COMPRESSION + ch = data.shift() if !ch? + attr = data.shift() + when ATTRIBUTE_COMPRESSION + attr = data.shift() if !attr? + ch = data.shift() + else + ch = data.shift() if !ch? + attr = data.shift() if !attr? + + @screen[ y ][ x ] = { ch: ch, attr: @getByteAt( attr, 0 ) } + + x++ + if x == @header.width + x = 0 + y++ + break if y == @header.height + @screen[ y ] = [] if !@screen[ y ]? + + _parse_uncompressed: ( data ) -> + x = 0 + y = 0 + @screen[ y ] = [] + + for i in [ 0 .. data.length - 2 ] by 2 + ch = data.substr( i, 1 ) + break if ch == "\x1a" + attr = @getByteAt( data, i + 1 ) + @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } + x++ + if x == @header.width + x = 0 + y++ + break if y == @header.height + @screen[ y ] = [] if !@screen[ y ]? + + getWidth: -> + return @header.width + + getHeight: -> + return @header.height diff --git a/Cakefile b/Cakefile new file mode 100644 index 0000000..b49d866 --- /dev/null +++ b/Cakefile @@ -0,0 +1,47 @@ +fs = require 'fs' +option '-o', '--output [dir]', 'dir for compiled code' + +task 'watch', 'watch current dir', (options) -> + {spawn} = require 'child_process' + args = ['-w','-c'] + if options.output + args = args.concat ['./'] + + process.chdir __originalDirname + coffee = spawn 'coffee', args + coffee.stderr.on 'data', (data) -> + process.stderr.write data.toString() + coffee.stdout.on 'data', (data) -> + console.log data.toString() + +source = [ + '16col/imgtxtmode.coffee', + '16col/ansi.coffee', + '16col/bin.coffee', + '16col/idf.coffee', + '16col/adf.coffee', + '16col/sauce.coffee', + '16col/tundra.coffee', + '16col/pcboard.coffee', + '16col/avatar.coffee', + '16col/xbin.coffee', + '16col/pallette.coffee', + '16col/fonts.coffee' +] + +task 'build', 'Build merged file for production', (options) -> + {exec} = require 'child_process' + content = [] + + for file, index in source then do (file, index) -> + fs.readFile file, 'utf8', (err, fileContents) -> + throw err if err + content[index] = fileContents + if index == source.length - 1 + coffee = content.join('\n') + fs.writeFile 'textmode.coffee', coffee, 'utf8', (err) -> + throw err if err + command = 'coffee --compile textmode.coffee' + exec command, (err, stdout, stderr) -> + throw err if err + console.log stdout + stderr \ No newline at end of file diff --git a/textmode.coffee b/textmode.coffee index 4949775..2d62724 100644 --- a/textmode.coffee +++ b/textmode.coffee @@ -1,3 +1,426 @@ +class @ImageTextMode + + @VERSION = '0.01' + + constructor: ( options ) -> + @screen = [] + @palette = new ImageTextModePaletteVGA() + @font = new ImageTextModeFont8x16() + @[k] = v for own k, v of options + + parseUrl: ( url ) -> + req = new XMLHttpRequest() + req.open 'GET', url, false + req.overrideMimeType 'text/plain; charset=x-user-defined' + req.send null + content = if req.status is 200 or req.status is 0 then req.responseText else '' + @parse content + + unpackShort: ( data ) -> + shrt = ( @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 0 ) + if shrt < 0 + shrt += 65536 + shrt + + unpackLong: ( data ) -> + lng = ((( @getByteAt( data, 0 ) << 8 ) + @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 2 ) << 8 ) + @getByteAt( data, 3 ) + if lng < 0 + lng += 4294967296 + lng + + getByteAt: ( data, offset ) -> + data.charCodeAt( offset ) & 0xFF + +# could we replace this with math.max ? Not worth it,called once per view +# we COULD, but we'd do some crap like "Math.max.apply(null,blah) and that's not readable" + getWidth: -> + max = 0 + for y in [ 0 .. @screen.length - 1 ] + max = @screen[ y ].length if @screen[ y ]? && @screen[ y ].length > max + max + + getHeight: -> + @screen.length + + parsePaletteData: ( data ) -> + colors = [] + for i in [ 0 .. 45 ] by 3 + r = @getByteAt( data, i ) + r = r << 2 | r >> 4 + g = @getByteAt( data, i + 1 ) + g = g << 2 | g >> 4 + b = @getByteAt( data, i + 2 ) + b = b << 2 | b >> 4 + colors.push [ r, g, b ] + + @palette = new ImageTextModePalette( colors: colors ) + + parseFontData: ( data, height = 16 ) -> + chars = [] + for i in [ 0 ... data.length / height ] + chr = [] + for j in [ 0 ... height ] + chr.push @getByteAt( data, i * height + j ) + chars.push chr + @font = new ImageTextModeFont( { chars: chars, height: height } ) + +# the majority of time is spent in this routine +# list comprehension seems to speed up from 1.8 seconds to 1.29 seconds from first comprehension / cleanup? + + renderCanvas: ( canvasElem ) -> + w = @getWidth() * @font.width + h = @getHeight() * @font.height + + canvas = document.createElement 'canvas' + canvas.setAttribute 'width', w + canvas.setAttribute 'height', h + ctx = canvas.getContext '2d' + + for cy in [ 0 ... @screen.length ] + if @screen[ cy ]? + for cx in [ 0 ... @screen[ cy ].length ] + pixel = @screen[ cy ][ cx ] + curfillstyle = null + if pixel? + if pixel.attr? + fg = pixel.attr & 15 + bg = ( pixel.attr & 240 ) >> 4 + else + fg = pixel.fg + bg = pixel.bg + + px = cx * @font.width + py = cy * @font.height + + ctx.fillStyle = @palette.toRgbaString( @palette.colors[ bg ] ) + ctx.fillRect px, py, @font.width, @font.height + + ctx.fillStyle = @palette.toRgbaString( @palette.colors[ fg ] ) + chr = @font.chars[ pixel.ch.charCodeAt( 0 ) & 0xff ] + i = 0 + for line in chr + ctx.fillRect px + j, py + i, 1, 1 for j in [ 0 ... @font.width ] when line & (1 << @font.width - 1 - j ) + i += 1 + + canvasElem.setAttribute 'width', w + canvasElem.setAttribute 'height', h + ctx = canvasElem.getContext '2d' + ctx.drawImage canvas, 0, 0 + + toBinaryArray: (str) -> + buf = new ArrayBuffer(str.length * 2) # 2 bytes for each char + bufView = new Uint8Array(buf) + bufView[i] = str.charCodeAt(i) for i in [0...str.length] + buf + + + +class @ImageTextModeANSI extends @ImageTextMode + constructor: ( options ) -> + super @screen + super @font + @palette = new ImageTextModePaletteANSI + @tabstop = 8 + @linewrap = 80 + @[k] = v for own k, v of options + + ANSI_ESC = String.fromCharCode(0x1b) + ANSI_CSI = ANSI_ESC + '[' + ANSI_TEXT_PROP = 'm' + ANSI_RESET = '0' + ANSI_FG = '3' + ANSI_BG = '4' + ANSI_FG_INTENSE = '9' + ANSI_BG_INTENSE = '10' + ANSI_CUR_DOWN = 'B' + ANSI_SEP = ';' + ANSI_RETURN = 'A' + +# not going to mess with this for now, as I think it is the 'write' code +# for the actual ansi editor. That would be bad to mess up. +# did redo the for loops to read nicer tho. + + write: -> + content = "#{ ANSI_CSI }2J" # initiate document + for y in [0...@screen.length] + content += "\n" if !@screen[y]? + continue if !@screen[y]? + for x in [0...@getWidth()] + pixel = @screen[y][x] + if !pixel? + pixel = { ch: ' ', attr: 7 } + attr = @gen_args(pixel.attr) + if (attr != prevattr) + content += "#{ANSI_CSI}0;#{attr}#{ANSI_TEXT_PROP}" + prevattr = attr + content += if pixel.ch? then pixel.ch else ' ' + max_x = x + content += "#{ ANSI_CSI }0m" + @toBinaryArray(content) + + gen_args: ( attr ) -> + fg = 30 + ( attr & 7 ) + bg = 40 + ( ( attr & 112 ) >> 4) + bl = if attr & 128 then 5 else '' + intense = if attr & 8 then 1 else '' + +# um why do we make this attrs variable and not use it? + + attrs = a for a in [fg, bg, bl, intense] when a != '' + return [fg, bg, bl, intense].join(";") + + parse: ( content ) -> + @screen = [] + @state = 0 + @x = 0 + @y = 0 + @save_x = 0 + @save_y = 0 + @attr = 7 + @argbuf = '' + + content = content.split( '' ) + while ch = content.shift() + if @state is 0 + switch ch + when "\x1a" then @state = 3 + when "\x1b" then @state = 1 + when "\n" + @x = 0 + @y++ + when "\r" then break + when "\t" + i = ( @x + 1 ) % @tabstop + @putpixel ' ' while i-- > 0 + else + @putpixel ch + + else if @state is 1 + if ch isnt "[" + @putpixel "\x1b" + @putpixel "[" + @state = 0 + else + @state = 2 + + else if @state is 2 + if ch.match( '[A-Za-z]' ) + args = ( parseInt( i ) for i in @argbuf.split ';' ) + + switch ch + when "m" + for arg in args + if arg is 0 + @attr = 7 + else if arg is 1 + @attr |= 8 + else if arg is 5 + @attr |= 128 + else if 30 <= arg <= 37 + @attr &= 248 + @attr |= ( arg - 30 ) + else if 40 <= arg <= 47 + @attr &= 143 + @attr |= ( arg - 40 ) << 4 + + when "H", "f" + @y = ( args[ 0 ] or 1 ) - 1 + @x = ( args[ 1 ] or 1 ) - 1 + @y = 0 if @y < 0 + @x = 0 if @x < 0 + when "A" + @y -= args[ 0 ] or 1 + @y = 0 if @y < 0 + when "B" + @y += args[ 0 ] or 1 + when "C" + @x += args[ 0 ] or 1 + when "D" + @x -= args[ 0 ] or 1 + @x = 0 if @x < 0 + when "E" + @y += args[ 0 ] or 1 + @x = 0 + when "F" + @y -= args[ 0 ] or 1 + @y = 0 if @y > 0 + @x = 0 + when "G" + @x = ( args[ 0 ] or 1 ) - 1 + when "s" + @save_x = @x + @save_y = @y + when "u" + @x = @save_x + @y = @save_y + when "J" + if args.length is 0 or args[ 0 ] is 0 + @screen[ i ] = null for i in [ @y + 1 .. screen.length - 1 ] + @screen[ @y ][ i ] = null for i in [ @x .. screen[ @y ].length - 1 ] + else if args[ 0 ] is 1 + @screen[ i ] = null for i in [ 0 .. @y - 1 ] + @screen[ @y ][ i ] = null for i in [ 0 .. @x ] + else if args[ 0 ] is 2 + @x = 0 + @y = 0 + @screen = [] + when "K" + if args.length is 0 or args[ 0 ] is 0 + @screen[ @y ][ i ] = null for i in [ @x .. @screen[ @y ].length - 1 ] + else if args[ 0 ] is 1 + @screen[ @y ][ i ] = null for i in [ 0 .. @x ] + else if args[ 0 ] is 2 + @screen[ @y ] = null + + @argbuf = '' + @state = 0 + + else + @argbuf += ch + + else if @state is 3 + break + + else + @state = 0 + + + putpixel: ( ch ) -> + @screen[ @y ] = [] if !@screen[ @y ]? + @screen[ @y ][ @x ] = { ch: ch, attr: @attr } + + if ++@x >= @linewrap + @x = 0 + @y++ + + +class @ImageTextModeBin extends @ImageTextMode + + constructor: ( options ) -> + super + @linewrap = 160 + this[k] = v for own k, v of options + + parse: ( content ) -> + x = 0 + y = 0 + @screen[ y ] = [] + + for i in [ 0 .. content.length - 2 ] by 2 + ch = content.substr( i, 1 ) + break if ch == "\x1a" + attr = @getByteAt( content, i + 1 ) + @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } + x++ + if x == @linewrap + x = 0 + y++ + @screen[ y ] = [] + + @screen.pop() if @screen[ y ].length == 0 + + +class @ImageTextModeIDF extends @ImageTextMode + + constructor: ( options ) -> + super + @header = { x0: 0, x1: 0, y0: 0, y1: 0 } + this[k] = v for own k, v of options + + parse: ( content ) -> + headerData = content.substr( 0, 12 ) + if headerData.length isnt 12 || !headerData.match( '^\x041.4' ) + throw new Error( 'File is not an IDF' ) + + @header.x0 = @unpackShort( headerData.substr( 4, 2 ) ) + @header.y0 = @unpackShort( headerData.substr( 6, 2 ) ) + @header.x1 = @unpackShort( headerData.substr( 8, 2 ) ) + @header.y1 = @unpackShort( headerData.substr( 10, 2 ) ) + + eodata = content.length - 48 - 4096 + + if content.substr( content.length - 128, 5 ) == 'SAUCE' + eodata -= 128 + + @parseFontData( content.substr( eodata, 4096 ) ) + @parsePaletteData( content.substr( eodata + 4096, 48 ) ) + + y = 0 + x = 0 + @screen[ y ] = [] + offset = 12 + + while offset < eodata + buffer = content.substr( offset, 2 ) + info = @unpackShort( buffer ) + offset += 2 + len = 1 + + if info == 1 + len = @unpackShort( content.substr( offset, 2 ) ) & 255 + offset += 2 + buffer = content.substr( offset, 2 ) + offset += 2 + + ch = buffer.substr( 0, 1 ) + attr = @getByteAt( buffer, 1 ) + + for i in [ 1 .. len ] + @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } + x++ + if x > @header.x1 + x = 0 + y++ + @screen[ y ] = [] + + @screen.pop() if @screen[ y ].length == 0 + + +class @ImageTextModeADF extends @ImageTextMode + + COLOR_INDEX = [ 0, 1, 2, 3, 4, 5, 20, 7, 56, 57, 58, 59, 60, 61, 62, 63 ] + + constructor: ( options ) -> + super + @header = { version: 0 } + this[k] = v for own k, v of options + + parse: ( content ) -> + @header.version = @getByteAt( content, 0 ) + @parsePaletteData( content.substr( 1, 192 ) ) + @parseFontData( content.substr( 193, 4096 ) ) + + x = 0 + y = 0 + @screen[ y ] = [] + + for i in [ 4289 .. content.length - 2 ] by 2 + ch = content.substr( i, 1 ) + break if ch == "\x1a" + attr = @getByteAt( content, i + 1 ) + @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } + x++ + if x == 80 + x = 0 + y++ + @screen[ y ] = [] + + @screen.pop() if @screen[ y ].length == 0 + + parsePaletteData: ( data ) -> + colors = [] + for i in COLOR_INDEX + j = i * 3 + r = @getByteAt( data, j ) + r = r << 2 | r >> 4 + g = @getByteAt( data, j + 1 ) + g = g << 2 | g >> 4 + b = @getByteAt( data, j + 2 ) + b = b << 2 | b >> 4 + colors.push [ r, g, b ] + + @palette = new ImageTextModePalette( { colors: colors } ) + class @ImageTextModeSAUCE parseUrl: ( url ) -> @@ -54,6 +477,333 @@ class @ImageTextModeSAUCE getByteAt: ( data, offset ) -> return data.charCodeAt( offset ) & 0xFF + + +class @ImageTextModeTundra extends @ImageTextMode + + constructor: ( options ) -> + super + this[k] = v for own k, v of options + + parse: ( content ) -> + colors = [ [ 0, 0, 0 ] ] + palidx = 1 + x = 0 + y = 0 + fg = 0 + bg = 0 + + @screen[ y ] = [] + content = content.substr( 8 ).split( '' ) + while command = content.shift() + break if command == "\x1a" + command = command.charCodeAt( 0 ) + + if command is 1 + y = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + x = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + @screen[ y ] = [] if !@screen[ y ]? + continue + + ch = null + + if command is 2 + ch = content.shift() + rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + fg = palidx++ + colors.push [ + ( rgb >> 16 ) & 0x000000ff, + ( rgb >> 8 ) & 0x000000ff, + rgb & 0x000000ff + ] + else if command is 4 + ch = content.shift() + rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + bg = palidx++ + colors.push [ + ( rgb >> 16 ) & 0x000000ff, + ( rgb >> 8 ) & 0x000000ff, + rgb & 0x000000ff + ] + else if command is 6 + ch = content.shift() + fg = palidx++ + bg = palidx++ + for [ 0 .. 1 ] + rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) ) + colors.push [ + ( rgb >> 16 ) & 0x000000ff, + ( rgb >> 8 ) & 0x000000ff, + rgb & 0x000000ff + ] + + ch = String.fromCharCode( command ) unless ch? + + @screen[ y ][ x ] = { 'ch': ch, 'fg': fg, 'bg': bg } + x++ + if x == 80 + x = 0 + y++ + @screen[ y ] = [] + + @screen.pop() if @screen[ y ].length == 0 + @palette = new ImageTextModePalette( { colors: colors } ) + + +class @ImageTextModePCBoard extends @ImageTextMode + + constructor: ( options ) -> + super + @tabstop = 8 + @linewrap = 80 + @codes = { POFF: '', WAIT: '' } + this[k] = v for own k, v of options + + parse: ( content ) -> + @screen = [] + @state = 0 + @x = 0 + @y = 0 + @attr = 7 + + for key, val of @codes + code = new RegExp '@' + key + '@', 'g' + content.replace code, val + + content = content.split( '' ) + while ch = content.shift() + if @state is 0 + switch ch + when "\x1a" then @state = 2 + when '@' then @state = 1 + when "\n" + @x = 0 + @y++ + when "\r" then break + when "\t" + i = ( @x + 1 ) % @tabstop + @putpixel ' ' while i-- > 0 + else + @putpixel ch + else if @state is 1 + if ch is 'X' + @attr = ( parseInt( content.shift(), 16 ) << 4 ) + parseInt( content.shift(), 16 ) + else if ch + content[ 0..2 ].join( '' ) is 'CLS@' + content.shift() for [ 1 .. 3 ] + @screen = [] + else if ch + content[ 0..2 ].join( '' ) is 'POS:' + content.shift() for [ 1 .. 3 ] + @x = content.shift() + @x += content.shift() if content[ 0 ] isnt '@' + @x-- + + content.shift() + else + @putpixel '@' + @putpixel ch + + @state = 0 + else if @state is 2 + break + else + @state = 0 + + putpixel: ( ch ) -> + @screen[ @y ] = [] if !@screen[ @y ]? + @screen[ @y ][ @x ] = { ch: ch, attr: @attr } + + if ++@x >= @linewrap + @x = 0 + @y++ + + +class @ImageTextModeAVATAR extends @ImageTextMode + + constructor: ( options ) -> + super + @tabstop = 8 + @linewrap = 80 + this[k] = v for own k, v of options + + parse: ( content ) -> + @screen = [] + @x = 0 + @y = 0 + @attr = 3 + + content = content.split( '' ) + while ch = content.shift() + if ch is "\x1a" + break + else if ch is "\n" + @x = 0 + @y++ + else if ch is "\r" + continue + else if ch is "\t" + i = ( @x + 1 ) % @tabstop + @putpixel ' ' while i-- > 0 + else if ch.charCodeAt( 0 ) is 12 + @screen = [] + @attr = 3 + @insert = false + else if ch.charCodeAt( 0 ) is 25 + ch = content.shift() + i = content.shift().charCodeAt( 0 ) + @putpixel( ch ) while i-- > 0 + else if ch.charCodeAt( 0 ) is 22 + c = content.shift().charCodeAt( 0 ) + switch c + when 1 + @attr = content.shift().charCodeAt( 0 ) & 0x7f + when 2 + @attr |= 0x80 + when 3 + @y-- + @y = 0 if @y < 0 + when 4 + @y++ + when 5 + @x-- + @x = 0 if @x < 0 + when 6 + @x++ + when 7 + @screen[ @y ][ i ] = null for i in [ @x .. screen[ @y ].length - 1 ] + when 8 + @y = content.shift().charCodeAt( 0 ) - 1 + @x = content.shift().charCodeAt( 0 ) - 1 + @y = 0 if @y < 0 + @x = 0 if @x < 0 + else + @putpixel ch + + putpixel: ( ch ) -> + @screen[ @y ] = [] if !@screen[ @y ]? + @screen[ @y ][ @x ] = { ch: ch, attr: @attr } + + if ++@x >= @linewrap + @x = 0 + @y++ + + +class @ImageTextModeXBin extends @ImageTextMode + + # Header constants + PALETTE = 1 + FONT = 2 + COMPRESSED = 4 + NON_BLINK = 8 + FIVETWELVE_CHARS = 16 + + # Compression type constants + NO_COMPRESSION = 0 + CHARACTER_COMPRESSION = 64 + ATTRIBUTE_COMPRESSION = 128 + FULL_COMPRESSION = 192 + + # Compression byte constants + COMPRESSION_TYPE = 192 + COMPRESSION_COUNTER = 63 + + constructor: ( options ) -> + super + @header = { width: 0, height: 0, fontisze: 0, flags: 0 } + this[k] = v for own k, v of options + + parse: ( content ) -> + @screen = [] + headerData = content.substr( 0, 11 ) + if headerData.length isnt 11 || !headerData.match( '^XBIN\x1a' ) + throw new Error( 'File is not an XBin' ) + + @header.width = @unpackShort( headerData.substr( 5, 2 ) ) + @header.height = @unpackShort( headerData.substr( 7, 2 ) ) + @header.fontsize = @getByteAt( headerData.substr( 9, 1 ) ) + @header.flags = @getByteAt( headerData.substr( 10, 1 ) ) + offset = 11 + + if @header.flags & PALETTE + @parsePaletteData( content.substr( offset, 48 ) ); + offset += 48 + + if @header.flags & FONT + fontlength = @header.fontsize + if @header.flags & FIVETWELVE_CHARS + fontlength *= 512 + else + fontlength *= 256 + @parseFontData( content.substr( offset, fontlength ), @header.fontsize ); + offset += fontlength + + if @header.flags & COMPRESSED + @_parse_compressed( content.substr( offset ) ) + else + @_parse_uncompressed( content.substr( offset ) ) + + _parse_compressed: ( data ) -> + x = 0 + y = 0 + @screen[ y ] = [] + + data = data.split( '' ) + while info = data.shift() + info = @getByteAt( info, 0 ) + break if info == 26 + + type = info & COMPRESSION_TYPE + counter = ( info & COMPRESSION_COUNTER ) + 1 + + ch = null + attr = null + + while counter-- > 0 + switch type + when NO_COMPRESSION + ch = data.shift() + attr = data.shift() + when CHARACTER_COMPRESSION + ch = data.shift() if !ch? + attr = data.shift() + when ATTRIBUTE_COMPRESSION + attr = data.shift() if !attr? + ch = data.shift() + else + ch = data.shift() if !ch? + attr = data.shift() if !attr? + + @screen[ y ][ x ] = { ch: ch, attr: @getByteAt( attr, 0 ) } + + x++ + if x == @header.width + x = 0 + y++ + break if y == @header.height + @screen[ y ] = [] if !@screen[ y ]? + + _parse_uncompressed: ( data ) -> + x = 0 + y = 0 + @screen[ y ] = [] + + for i in [ 0 .. data.length - 2 ] by 2 + ch = data.substr( i, 1 ) + break if ch == "\x1a" + attr = @getByteAt( data, i + 1 ) + @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } + x++ + if x == @header.width + x = 0 + y++ + break if y == @header.height + @screen[ y ] = [] if !@screen[ y ]? + + getWidth: -> + return @header.width + + getHeight: -> + return @header.height + class @ImageTextModePalette constructor: ( options ) -> @@ -116,7 +866,6 @@ class @ImageTextModePaletteANSI extends @ImageTextModePalette [ 0x55, 0xff, 0xff ], [ 0xff, 0xff, 0xff ] ] - class @ImageTextModeFont constructor: ( options ) -> @chars = [] @@ -652,7 +1401,7 @@ class @ImageTextModeFont8x8 extends @ImageTextModeFont @[k] = v for own k, v of options class @ImageTextModeFontAmiga extends @ImageTextModeFont - constructor: ( options ) -> + constructor: ( options ) -> super @width @chars = [ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], @@ -914,747 +1663,3 @@ class @ImageTextModeFontAmiga extends @ImageTextModeFont ] @height = 16 @[k] = v for own k, v of options - -class @ImageTextMode - - @VERSION = '0.01' - - constructor: ( options ) -> - @screen = [] - @palette = new ImageTextModePaletteVGA() - @font = new ImageTextModeFont8x16() - @[k] = v for own k, v of options - - parseUrl: ( url ) -> - req = new XMLHttpRequest() - req.open 'GET', url, false - req.overrideMimeType 'text/plain; charset=x-user-defined' - req.send null - content = if req.status is 200 or req.status is 0 then req.responseText else '' - @parse content - - unpackShort: ( data ) -> - shrt = ( @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 0 ) - if shrt < 0 - shrt += 65536 - shrt - - unpackLong: ( data ) -> - lng = ((( @getByteAt( data, 0 ) << 8 ) + @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 2 ) << 8 ) + @getByteAt( data, 3 ) - if lng < 0 - lng += 4294967296 - lng - - getByteAt: ( data, offset ) -> - data.charCodeAt( offset ) & 0xFF - -# could we replace this with math.max ? Not worth it,called once per view -# we COULD, but we'd do some crap like "Math.max.apply(null,blah) and that's not readable" - getWidth: -> - max = 0 - for y in [ 0 .. @screen.length - 1 ] - max = @screen[ y ].length if @screen[ y ]? && @screen[ y ].length > max - max - - getHeight: -> - @screen.length - - parsePaletteData: ( data ) -> - colors = [] - for i in [ 0 .. 45 ] by 3 - r = @getByteAt( data, i ) - r = r << 2 | r >> 4 - g = @getByteAt( data, i + 1 ) - g = g << 2 | g >> 4 - b = @getByteAt( data, i + 2 ) - b = b << 2 | b >> 4 - colors.push [ r, g, b ] - - @palette = new ImageTextModePalette( colors: colors ) - - parseFontData: ( data, height = 16 ) -> - chars = [] - for i in [ 0 ... data.length / height ] - chr = [] - for j in [ 0 ... height ] - chr.push @getByteAt( data, i * height + j ) - chars.push chr - @font = new ImageTextModeFont( { chars: chars, height: height } ) - -# the majority of time is spent in this routine -# list comprehension seems to speed up from 1.8 seconds to 1.29 seconds from first comprehension / cleanup? - - renderCanvas: ( canvasElem ) -> - w = @getWidth() * @font.width - h = @getHeight() * @font.height - - canvas = document.createElement 'canvas' - canvas.setAttribute 'width', w - canvas.setAttribute 'height', h - ctx = canvas.getContext '2d' - - for cy in [ 0 ... @screen.length ] - if @screen[ cy ]? - for cx in [ 0 ... @screen[ cy ].length ] - pixel = @screen[ cy ][ cx ] - curfillstyle = null - if pixel? - if pixel.attr? - fg = pixel.attr & 15 - bg = ( pixel.attr & 240 ) >> 4 - else - fg = pixel.fg - bg = pixel.bg - - px = cx * @font.width - py = cy * @font.height - - ctx.fillStyle = @palette.toRgbaString( @palette.colors[ bg ] ) - ctx.fillRect px, py, @font.width, @font.height - - ctx.fillStyle = @palette.toRgbaString( @palette.colors[ fg ] ) - chr = @font.chars[ pixel.ch.charCodeAt( 0 ) & 0xff ] - i = 0 - for line in chr - ctx.fillRect px + j, py + i, 1, 1 for j in [ 0 ... @font.width ] when line & (1 << @font.width - 1 - j ) - i += 1 - - canvasElem.setAttribute 'width', w - canvasElem.setAttribute 'height', h - ctx = canvasElem.getContext '2d' - ctx.drawImage canvas, 0, 0 - - toBinaryArray: (str) -> - buf = new ArrayBuffer(str.length * 2) # 2 bytes for each char - bufView = new Uint8Array(buf) - bufView[i] = str.charCodeAt(i) for i in [0...str.length] - buf - -# tests show the resulting code is not altered for results or for the logic -# but this makes the linter happy. (coffeescript's own I guess.) -# (the constructor right after the class def, before locals) - -class @ImageTextModeANSI extends @ImageTextMode - constructor: ( options ) -> - super @screen - super @font - @palette = new ImageTextModePaletteANSI - @tabstop = 8 - @linewrap = 80 - @[k] = v for own k, v of options - - ANSI_ESC = String.fromCharCode(0x1b) - ANSI_CSI = ANSI_ESC + '[' - ANSI_TEXT_PROP = 'm' - ANSI_RESET = '0' - ANSI_FG = '3' - ANSI_BG = '4' - ANSI_FG_INTENSE = '9' - ANSI_BG_INTENSE = '10' - ANSI_CUR_DOWN = 'B' - ANSI_SEP = ';' - ANSI_RETURN = 'A' - -# not going to mess with this for now, as I think it is the 'write' code -# for the actual ansi editor. That would be bad to mess up. -# did redo the for loops to read nicer tho. - - write: -> - content = "#{ ANSI_CSI }2J" # initiate document - for y in [0...@screen.length] - content += "\n" if !@screen[y]? - continue if !@screen[y]? - for x in [0...@getWidth()] - pixel = @screen[y][x] - if !pixel? - pixel = { ch: ' ', attr: 7 } - attr = @gen_args(pixel.attr) - if (attr != prevattr) - content += "#{ANSI_CSI}0;#{attr}#{ANSI_TEXT_PROP}" - prevattr = attr - content += if pixel.ch? then pixel.ch else ' ' - max_x = x - content += "#{ ANSI_CSI }0m" - @toBinaryArray(content) - - gen_args: ( attr ) -> - fg = 30 + ( attr & 7 ) - bg = 40 + ( ( attr & 112 ) >> 4) - bl = if attr & 128 then 5 else '' - intense = if attr & 8 then 1 else '' - -# um why do we make this attrs variable and not use it? - - attrs = a for a in [fg, bg, bl, intense] when a != '' - return [fg, bg, bl, intense].join(";") - - parse: ( content ) -> - @screen = [] - @state = 0 - @x = 0 - @y = 0 - @save_x = 0 - @save_y = 0 - @attr = 7 - @argbuf = '' - - content = content.split( '' ) - while ch = content.shift() - if @state is 0 - switch ch - when "\x1a" then @state = 3 - when "\x1b" then @state = 1 - when "\n" - @x = 0 - @y++ - when "\r" then break - when "\t" - i = ( @x + 1 ) % @tabstop - @putpixel ' ' while i-- > 0 - else - @putpixel ch - - else if @state is 1 - if ch isnt "[" - @putpixel "\x1b" - @putpixel "[" - @state = 0 - else - @state = 2 - - else if @state is 2 - if ch.match( '[A-Za-z]' ) - args = ( parseInt( i ) for i in @argbuf.split ';' ) - - switch ch - when "m" - for arg in args - if arg is 0 - @attr = 7 - else if arg is 1 - @attr |= 8 - else if arg is 5 - @attr |= 128 - else if 30 <= arg <= 37 - @attr &= 248 - @attr |= ( arg - 30 ) - else if 40 <= arg <= 47 - @attr &= 143 - @attr |= ( arg - 40 ) << 4 - - when "H", "f" - @y = ( args[ 0 ] or 1 ) - 1 - @x = ( args[ 1 ] or 1 ) - 1 - @y = 0 if @y < 0 - @x = 0 if @x < 0 - when "A" - @y -= args[ 0 ] or 1 - @y = 0 if @y < 0 - when "B" - @y += args[ 0 ] or 1 - when "C" - @x += args[ 0 ] or 1 - when "D" - @x -= args[ 0 ] or 1 - @x = 0 if @x < 0 - when "E" - @y += args[ 0 ] or 1 - @x = 0 - when "F" - @y -= args[ 0 ] or 1 - @y = 0 if @y > 0 - @x = 0 - when "G" - @x = ( args[ 0 ] or 1 ) - 1 - when "s" - @save_x = @x - @save_y = @y - when "u" - @x = @save_x - @y = @save_y - when "J" - if args.length is 0 or args[ 0 ] is 0 - @screen[ i ] = null for i in [ @y + 1 .. screen.length - 1 ] - @screen[ @y ][ i ] = null for i in [ @x .. screen[ @y ].length - 1 ] - else if args[ 0 ] is 1 - @screen[ i ] = null for i in [ 0 .. @y - 1 ] - @screen[ @y ][ i ] = null for i in [ 0 .. @x ] - else if args[ 0 ] is 2 - @x = 0 - @y = 0 - @screen = [] - when "K" - if args.length is 0 or args[ 0 ] is 0 - @screen[ @y ][ i ] = null for i in [ @x .. @screen[ @y ].length - 1 ] - else if args[ 0 ] is 1 - @screen[ @y ][ i ] = null for i in [ 0 .. @x ] - else if args[ 0 ] is 2 - @screen[ @y ] = null - - @argbuf = '' - @state = 0 - - else - @argbuf += ch - - else if @state is 3 - break - - else - @state = 0 - - - putpixel: ( ch ) -> - @screen[ @y ] = [] if !@screen[ @y ]? - @screen[ @y ][ @x ] = { ch: ch, attr: @attr } - - if ++@x >= @linewrap - @x = 0 - @y++ - -class @ImageTextModeBin extends @ImageTextMode - - constructor: ( options ) -> - super - @linewrap = 160 - this[k] = v for own k, v of options - - parse: ( content ) -> - x = 0 - y = 0 - @screen[ y ] = [] - - for i in [ 0 .. content.length - 2 ] by 2 - ch = content.substr( i, 1 ) - break if ch == "\x1a" - attr = @getByteAt( content, i + 1 ) - @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } - x++ - if x == @linewrap - x = 0 - y++ - @screen[ y ] = [] - - @screen.pop() if @screen[ y ].length == 0 - -class @ImageTextModeIDF extends @ImageTextMode - - constructor: ( options ) -> - super - @header = { x0: 0, x1: 0, y0: 0, y1: 0 } - this[k] = v for own k, v of options - - parse: ( content ) -> - headerData = content.substr( 0, 12 ) - if headerData.length isnt 12 || !headerData.match( '^\x041.4' ) - throw new Error( 'File is not an IDF' ) - - @header.x0 = @unpackShort( headerData.substr( 4, 2 ) ) - @header.y0 = @unpackShort( headerData.substr( 6, 2 ) ) - @header.x1 = @unpackShort( headerData.substr( 8, 2 ) ) - @header.y1 = @unpackShort( headerData.substr( 10, 2 ) ) - - eodata = content.length - 48 - 4096 - - if content.substr( content.length - 128, 5 ) == 'SAUCE' - eodata -= 128 - - @parseFontData( content.substr( eodata, 4096 ) ) - @parsePaletteData( content.substr( eodata + 4096, 48 ) ) - - y = 0 - x = 0 - @screen[ y ] = [] - offset = 12 - - while offset < eodata - buffer = content.substr( offset, 2 ) - info = @unpackShort( buffer ) - offset += 2 - len = 1 - - if info == 1 - len = @unpackShort( content.substr( offset, 2 ) ) & 255 - offset += 2 - buffer = content.substr( offset, 2 ) - offset += 2 - - ch = buffer.substr( 0, 1 ) - attr = @getByteAt( buffer, 1 ) - - for i in [ 1 .. len ] - @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } - x++ - if x > @header.x1 - x = 0 - y++ - @screen[ y ] = [] - - @screen.pop() if @screen[ y ].length == 0 - -class @ImageTextModeADF extends @ImageTextMode - - COLOR_INDEX = [ 0, 1, 2, 3, 4, 5, 20, 7, 56, 57, 58, 59, 60, 61, 62, 63 ] - - constructor: ( options ) -> - super - @header = { version: 0 } - this[k] = v for own k, v of options - - parse: ( content ) -> - @header.version = @getByteAt( content, 0 ) - @parsePaletteData( content.substr( 1, 192 ) ) - @parseFontData( content.substr( 193, 4096 ) ) - - x = 0 - y = 0 - @screen[ y ] = [] - - for i in [ 4289 .. content.length - 2 ] by 2 - ch = content.substr( i, 1 ) - break if ch == "\x1a" - attr = @getByteAt( content, i + 1 ) - @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } - x++ - if x == 80 - x = 0 - y++ - @screen[ y ] = [] - - @screen.pop() if @screen[ y ].length == 0 - - parsePaletteData: ( data ) -> - colors = [] - for i in COLOR_INDEX - j = i * 3 - r = @getByteAt( data, j ) - r = r << 2 | r >> 4 - g = @getByteAt( data, j + 1 ) - g = g << 2 | g >> 4 - b = @getByteAt( data, j + 2 ) - b = b << 2 | b >> 4 - colors.push [ r, g, b ] - - @palette = new ImageTextModePalette( { colors: colors } ) - -class @ImageTextModeTundra extends @ImageTextMode - - constructor: ( options ) -> - super - this[k] = v for own k, v of options - - parse: ( content ) -> - colors = [ [ 0, 0, 0 ] ] - palidx = 1 - x = 0 - y = 0 - fg = 0 - bg = 0 - - @screen[ y ] = [] - content = content.substr( 8 ).split( '' ) - while command = content.shift() - break if command == "\x1a" - command = command.charCodeAt( 0 ) - - if command is 1 - y = @unpackLong( content.splice( 0, 4 ).join( '' ) ) - x = @unpackLong( content.splice( 0, 4 ).join( '' ) ) - @screen[ y ] = [] if !@screen[ y ]? - continue - - ch = null - - if command is 2 - ch = content.shift() - rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) ) - fg = palidx++ - colors.push [ - ( rgb >> 16 ) & 0x000000ff, - ( rgb >> 8 ) & 0x000000ff, - rgb & 0x000000ff - ] - else if command is 4 - ch = content.shift() - rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) ) - bg = palidx++ - colors.push [ - ( rgb >> 16 ) & 0x000000ff, - ( rgb >> 8 ) & 0x000000ff, - rgb & 0x000000ff - ] - else if command is 6 - ch = content.shift() - fg = palidx++ - bg = palidx++ - for [ 0 .. 1 ] - rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) ) - colors.push [ - ( rgb >> 16 ) & 0x000000ff, - ( rgb >> 8 ) & 0x000000ff, - rgb & 0x000000ff - ] - - ch = String.fromCharCode( command ) unless ch? - - @screen[ y ][ x ] = { 'ch': ch, 'fg': fg, 'bg': bg } - x++ - if x == 80 - x = 0 - y++ - @screen[ y ] = [] - - @screen.pop() if @screen[ y ].length == 0 - @palette = new ImageTextModePalette( { colors: colors } ) - -class @ImageTextModePCBoard extends @ImageTextMode - - constructor: ( options ) -> - super - @tabstop = 8 - @linewrap = 80 - @codes = { POFF: '', WAIT: '' } - this[k] = v for own k, v of options - - parse: ( content ) -> - @screen = [] - @state = 0 - @x = 0 - @y = 0 - @attr = 7 - - for key, val of @codes - code = new RegExp '@' + key + '@', 'g' - content.replace code, val - - content = content.split( '' ) - while ch = content.shift() - if @state is 0 - switch ch - when "\x1a" then @state = 2 - when '@' then @state = 1 - when "\n" - @x = 0 - @y++ - when "\r" then break - when "\t" - i = ( @x + 1 ) % @tabstop - @putpixel ' ' while i-- > 0 - else - @putpixel ch - else if @state is 1 - if ch is 'X' - @attr = ( parseInt( content.shift(), 16 ) << 4 ) + parseInt( content.shift(), 16 ) - else if ch + content[ 0..2 ].join( '' ) is 'CLS@' - content.shift() for [ 1 .. 3 ] - @screen = [] - else if ch + content[ 0..2 ].join( '' ) is 'POS:' - content.shift() for [ 1 .. 3 ] - @x = content.shift() - @x += content.shift() if content[ 0 ] isnt '@' - @x-- - - content.shift() - else - @putpixel '@' - @putpixel ch - - @state = 0 - else if @state is 2 - break - else - @state = 0 - - putpixel: ( ch ) -> - @screen[ @y ] = [] if !@screen[ @y ]? - @screen[ @y ][ @x ] = { ch: ch, attr: @attr } - - if ++@x >= @linewrap - @x = 0 - @y++ - -class @ImageTextModeAVATAR extends @ImageTextMode - - constructor: ( options ) -> - super - @tabstop = 8 - @linewrap = 80 - this[k] = v for own k, v of options - - parse: ( content ) -> - @screen = [] - @x = 0 - @y = 0 - @attr = 3 - - content = content.split( '' ) - while ch = content.shift() - if ch is "\x1a" - break - else if ch is "\n" - @x = 0 - @y++ - else if ch is "\r" - continue - else if ch is "\t" - i = ( @x + 1 ) % @tabstop - @putpixel ' ' while i-- > 0 - else if ch.charCodeAt( 0 ) is 12 - @screen = [] - @attr = 3 - @insert = false - else if ch.charCodeAt( 0 ) is 25 - ch = content.shift() - i = content.shift().charCodeAt( 0 ) - @putpixel( ch ) while i-- > 0 - else if ch.charCodeAt( 0 ) is 22 - c = content.shift().charCodeAt( 0 ) - switch c - when 1 - @attr = content.shift().charCodeAt( 0 ) & 0x7f - when 2 - @attr |= 0x80 - when 3 - @y-- - @y = 0 if @y < 0 - when 4 - @y++ - when 5 - @x-- - @x = 0 if @x < 0 - when 6 - @x++ - when 7 - @screen[ @y ][ i ] = null for i in [ @x .. screen[ @y ].length - 1 ] - when 8 - @y = content.shift().charCodeAt( 0 ) - 1 - @x = content.shift().charCodeAt( 0 ) - 1 - @y = 0 if @y < 0 - @x = 0 if @x < 0 - else - @putpixel ch - - putpixel: ( ch ) -> - @screen[ @y ] = [] if !@screen[ @y ]? - @screen[ @y ][ @x ] = { ch: ch, attr: @attr } - - if ++@x >= @linewrap - @x = 0 - @y++ - -class @ImageTextModeXBin extends @ImageTextMode - - # Header constants - PALETTE = 1 - FONT = 2 - COMPRESSED = 4 - NON_BLINK = 8 - FIVETWELVE_CHARS = 16 - - # Compression type constants - NO_COMPRESSION = 0 - CHARACTER_COMPRESSION = 64 - ATTRIBUTE_COMPRESSION = 128 - FULL_COMPRESSION = 192 - - # Compression byte constants - COMPRESSION_TYPE = 192 - COMPRESSION_COUNTER = 63 - - constructor: ( options ) -> - super - @header = { width: 0, height: 0, fontisze: 0, flags: 0 } - this[k] = v for own k, v of options - - parse: ( content ) -> - @screen = [] - headerData = content.substr( 0, 11 ) - if headerData.length isnt 11 || !headerData.match( '^XBIN\x1a' ) - throw new Error( 'File is not an XBin' ) - - @header.width = @unpackShort( headerData.substr( 5, 2 ) ) - @header.height = @unpackShort( headerData.substr( 7, 2 ) ) - @header.fontsize = @getByteAt( headerData.substr( 9, 1 ) ) - @header.flags = @getByteAt( headerData.substr( 10, 1 ) ) - offset = 11 - - if @header.flags & PALETTE - @parsePaletteData( content.substr( offset, 48 ) ); - offset += 48 - - if @header.flags & FONT - fontlength = @header.fontsize - if @header.flags & FIVETWELVE_CHARS - fontlength *= 512 - else - fontlength *= 256 - @parseFontData( content.substr( offset, fontlength ), @header.fontsize ); - offset += fontlength - - if @header.flags & COMPRESSED - @_parse_compressed( content.substr( offset ) ) - else - @_parse_uncompressed( content.substr( offset ) ) - - _parse_compressed: ( data ) -> - x = 0 - y = 0 - @screen[ y ] = [] - - data = data.split( '' ) - while info = data.shift() - info = @getByteAt( info, 0 ) - break if info == 26 - - type = info & COMPRESSION_TYPE - counter = ( info & COMPRESSION_COUNTER ) + 1 - - ch = null - attr = null - - while counter-- > 0 - switch type - when NO_COMPRESSION - ch = data.shift() - attr = data.shift() - when CHARACTER_COMPRESSION - ch = data.shift() if !ch? - attr = data.shift() - when ATTRIBUTE_COMPRESSION - attr = data.shift() if !attr? - ch = data.shift() - else - ch = data.shift() if !ch? - attr = data.shift() if !attr? - - @screen[ y ][ x ] = { ch: ch, attr: @getByteAt( attr, 0 ) } - - x++ - if x == @header.width - x = 0 - y++ - break if y == @header.height - @screen[ y ] = [] if !@screen[ y ]? - - _parse_uncompressed: ( data ) -> - x = 0 - y = 0 - @screen[ y ] = [] - - for i in [ 0 .. data.length - 2 ] by 2 - ch = data.substr( i, 1 ) - break if ch == "\x1a" - attr = @getByteAt( data, i + 1 ) - @screen[ y ][ x ] = { 'ch': ch, 'attr': attr } - x++ - if x == @header.width - x = 0 - y++ - break if y == @header.height - @screen[ y ] = [] if !@screen[ y ]? - - getWidth: -> - return @header.width - - getHeight: -> - return @header.height diff --git a/todo.txt b/todo.txt index 6545d00..49cfec6 100644 --- a/todo.txt +++ b/todo.txt @@ -5,6 +5,7 @@ (A) remove the SAUCE lines at bottom, return ANSI object for render @SAUCE (B) load SAUCE into 'info' lines (should be done at prep) @SAUCE x 2014-04-05 (A) Study 16colors site - how does IT remove sauce info? It DOESN'T. FUCK. +(A) Split coffeescript into files, use cake. (A) remove their lines like SAUCE, return ANSI object for render @OTHER (B) load other-info into 'info' (done at prep) @OTHER From 4a924db56c8d286047a3f4cdac082ea3467f03d6 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Sat, 5 Apr 2014 13:31:30 +0300 Subject: [PATCH 022/108] resulting (untested) new textmode - from build. --- textmode.js | 376 ++++++++++++++++++++++++++-------------------------- 1 file changed, 188 insertions(+), 188 deletions(-) diff --git a/textmode.js b/textmode.js index ec03ea9..5c0246a 100644 --- a/textmode.js +++ b/textmode.js @@ -3,194 +3,6 @@ var __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; - this.ImageTextModeSAUCE = (function() { - function ImageTextModeSAUCE() {} - - ImageTextModeSAUCE.prototype.parseUrl = function(url) { - var content, req; - req = new XMLHttpRequest(); - req.open('GET', url, false); - req.overrideMimeType('text/plain; charset=x-user-defined'); - req.send(null); - content = req.status === 200 || req.status === 0 ? req.responseText : ''; - return this.parse(content); - }; - - ImageTextModeSAUCE.prototype.parse = function(content) { - var commentMarker, i, sauceMarker; - sauceMarker = content.length - 128; - if (content.substr(sauceMarker, 5) !== 'SAUCE') { - return false; - } - this.id = 'SAUCE'; - this.version = content.substr(sauceMarker + 5, 2); - this.title = content.substr(sauceMarker + 7, 35); - this.author = content.substr(sauceMarker + 42, 20); - this.group = content.substr(sauceMarker + 62, 20); - this.date = content.substr(sauceMarker + 82, 8); - this.fileSize = this.unpackLong(content.substr(sauceMarker + 90, 4)); - this.dataType = this.getByteAt(content.substr(sauceMarker + 94, 1)); - this.fileType = this.getByteAt(content.substr(sauceMarker + 95, 1)); - this.tinfo1 = this.unpackShort(content.substr(sauceMarker + 96, 2)); - this.tinfo2 = this.unpackShort(content.substr(sauceMarker + 98, 2)); - this.tinfo3 = this.unpackShort(content.substr(sauceMarker + 100, 2)); - this.tinfo4 = this.unpackShort(content.substr(sauceMarker + 102, 2)); - this.commentCount = this.getByteAt(content.substr(sauceMarker + 104, 1)); - this.flags = this.getByteAt(content.substr(sauceMarker + 105, 1)); - this.filler = content.substr(sauceMarker + 106, 22); - commentMarker = sauceMarker - 5 - this.commentCount * 64; - if (this.commentCount > 0 && content.substr(commentMarker, 5) === 'COMNT') { - commentMarker += 5; - this.comments = []; - i = this.commentCount; - while (i-- > 0) { - this.comments.push(content.substr(commentMarker, 64)); - commentMarker += 64; - } - } - return true; - }; - - ImageTextModeSAUCE.prototype.unpackLong = function(data) { - var lng; - lng = (((this.getByteAt(data, 3) << 8) + this.getByteAt(data, 2) << 8) + this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); - if (lng < 0) { - lng += 4294967296; - } - return lng; - }; - - ImageTextModeSAUCE.prototype.unpackShort = function(data) { - var shrt; - shrt = (this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); - if (shrt < 0) { - shrt += 65536; - } - return shrt; - }; - - ImageTextModeSAUCE.prototype.getByteAt = function(data, offset) { - return data.charCodeAt(offset) & 0xFF; - }; - - return ImageTextModeSAUCE; - - })(); - - this.ImageTextModePalette = (function() { - function ImageTextModePalette(options) { - var k, v; - this.colors = []; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - ImageTextModePalette.prototype.toRgbaString = function(color) { - return 'rgba(' + color.join(',') + ',1)'; - }; - - return ImageTextModePalette; - - })(); - - this.ImageTextModePaletteVGA = (function(_super) { - __extends(ImageTextModePaletteVGA, _super); - - function ImageTextModePaletteVGA(options) { - this.colors = [[0x00, 0x00, 0x00], [0x00, 0x00, 0xaa], [0x00, 0xaa, 0x00], [0x00, 0xaa, 0xaa], [0xaa, 0x00, 0x00], [0xaa, 0x00, 0xaa], [0xaa, 0x55, 0x00], [0xaa, 0xaa, 0xaa], [0x55, 0x55, 0x55], [0x55, 0x55, 0xff], [0x55, 0xff, 0x55], [0x55, 0xff, 0xff], [0xff, 0x55, 0x55], [0xff, 0x55, 0xff], [0xff, 0xff, 0x55], [0xff, 0xff, 0xff]]; - } - - return ImageTextModePaletteVGA; - - })(this.ImageTextModePalette); - - this.ImageTextModePaletteANSI = (function(_super) { - __extends(ImageTextModePaletteANSI, _super); - - function ImageTextModePaletteANSI(options) { - this.colors = [[0x00, 0x00, 0x00], [0xaa, 0x00, 0x00], [0x00, 0xaa, 0x00], [0xaa, 0x55, 0x00], [0x00, 0x00, 0xaa], [0xaa, 0x00, 0xaa], [0x00, 0xaa, 0xaa], [0xaa, 0xaa, 0xaa], [0x55, 0x55, 0x55], [0xff, 0x55, 0x55], [0x55, 0xff, 0x55], [0xff, 0xff, 0x55], [0x55, 0x55, 0xff], [0xff, 0x55, 0xff], [0x55, 0xff, 0xff], [0xff, 0xff, 0xff]]; - } - - return ImageTextModePaletteANSI; - - })(this.ImageTextModePalette); - - this.ImageTextModeFont = (function() { - function ImageTextModeFont(options) { - var k, v; - this.chars = []; - this.width = 8; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - return ImageTextModeFont; - - })(); - - this.ImageTextModeFont8x16 = (function(_super) { - __extends(ImageTextModeFont8x16, _super); - - function ImageTextModeFont8x16(options) { - var k, v; - ImageTextModeFont8x16.__super__.constructor.call(this, this.width); - this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00], [0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00], [0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00], [0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00], [0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x70, 0x00, 0x00], [0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x70, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x38, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x36, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00], [0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x18, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00], [0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x66, 0xce, 0x9a, 0x3f, 0x06, 0x06, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44], [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], [0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00], [0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x6c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x3c, 0x66, 0x0c, 0x18, 0x32, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]]; - this.height = 16; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - return ImageTextModeFont8x16; - - })(this.ImageTextModeFont); - - this.ImageTextModeFont8x8 = (function(_super) { - __extends(ImageTextModeFont8x8, _super); - - function ImageTextModeFont8x8(options) { - var k, v; - ImageTextModeFont8x8.__super__.constructor.call(this, this.width); - this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e], [0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e], [0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00], [0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00], [0x38, 0x7c, 0x38, 0xfe, 0xfe, 0xd6, 0x10, 0x38], [0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x7c, 0x10, 0x38], [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00], [0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff], [0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00], [0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff], [0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78], [0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18], [0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0], [0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0], [0x18, 0xdb, 0x3c, 0xe7, 0xe7, 0x3c, 0xdb, 0x18], [0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00], [0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00], [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18], [0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00], [0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00], [0x3e, 0x61, 0x3c, 0x66, 0x66, 0x3c, 0x86, 0x7c], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00], [0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff], [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00], [0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00], [0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00], [0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00], [0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00], [0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00], [0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00], [0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00], [0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00], [0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00], [0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00], [0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00], [0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00], [0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00], [0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00], [0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00], [0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30], [0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00], [0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00], [0x38, 0x6c, 0xc6, 0xd6, 0xc6, 0x6c, 0x38, 0x00], [0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00], [0x7c, 0xc6, 0x06, 0x1c, 0x30, 0x66, 0xfe, 0x00], [0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00], [0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00], [0xfe, 0xc0, 0xc0, 0xfc, 0x06, 0xc6, 0x7c, 0x00], [0x38, 0x60, 0xc0, 0xfc, 0xc6, 0xc6, 0x7c, 0x00], [0xfe, 0xc6, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00], [0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0x00], [0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00], [0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00], [0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30], [0x06, 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x06, 0x00], [0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00], [0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00], [0x7c, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x00], [0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00], [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00], [0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00], [0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00], [0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00], [0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00], [0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00], [0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3a, 0x00], [0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00], [0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00], [0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00], [0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00], [0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00], [0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00], [0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], [0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xce, 0x7c, 0x0e], [0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00], [0x3c, 0x66, 0x30, 0x18, 0x0c, 0x66, 0x3c, 0x00], [0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x3c, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00], [0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc6, 0x00], [0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x00], [0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00], [0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00], [0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00], [0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00], [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff], [0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0xe0, 0x60, 0x7c, 0x66, 0x66, 0x66, 0xdc, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc6, 0x7c, 0x00], [0x1c, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x3c, 0x66, 0x60, 0xf8, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], [0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00], [0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x06, 0x00, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c], [0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00], [0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0x00], [0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0], [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e], [0x00, 0x00, 0xdc, 0x76, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x7e, 0xc0, 0x7c, 0x06, 0xfc, 0x00], [0x30, 0x30, 0xfc, 0x30, 0x30, 0x36, 0x1c, 0x00], [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00], [0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc], [0x00, 0x00, 0x7e, 0x4c, 0x18, 0x32, 0x7e, 0x00], [0x0e, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0e, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00], [0x70, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x70, 0x00], [0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00], [0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x0c, 0x78], [0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x0c, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x7c, 0x82, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0xc6, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x30, 0x18, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x00, 0x00, 0x7e, 0xc0, 0xc0, 0x7e, 0x0c, 0x38], [0x7c, 0x82, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0xc6, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x30, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x7c, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00], [0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], [0x38, 0x6c, 0x7c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], [0x18, 0x30, 0xfe, 0xc0, 0xf8, 0xc0, 0xfe, 0x00], [0x00, 0x00, 0x7e, 0x18, 0x7e, 0xd8, 0x7e, 0x00], [0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00], [0x7c, 0x82, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x30, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x78, 0x84, 0x00, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x60, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc], [0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18], [0x38, 0x6c, 0x64, 0xf0, 0x60, 0x66, 0xfc, 0x00], [0x66, 0x66, 0x3c, 0x7e, 0x18, 0x7e, 0x18, 0x18], [0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7], [0x0e, 0x1b, 0x18, 0x3c, 0x18, 0xd8, 0x70, 0x00], [0x18, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00], [0x0c, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x18, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x00], [0x76, 0xdc, 0x00, 0xe6, 0xf6, 0xde, 0xce, 0x00], [0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00], [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00], [0x18, 0x00, 0x18, 0x18, 0x30, 0x63, 0x3e, 0x00], [0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0x00, 0x00], [0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x00, 0x00], [0x63, 0xe6, 0x6c, 0x7e, 0x33, 0x66, 0xcc, 0x0f], [0x63, 0xe6, 0x6c, 0x7a, 0x36, 0x6a, 0xdf, 0x06], [0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x00], [0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00], [0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00], [0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88], [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], [0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36], [0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36], [0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00], [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36], [0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36], [0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36], [0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36], [0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], [0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36], [0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00], [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36], [0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff], [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], [0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00], [0x78, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xcc, 0x00], [0xfe, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00], [0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00], [0xfe, 0xc6, 0x60, 0x30, 0x60, 0xc6, 0xfe, 0x00], [0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0xc0], [0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00], [0x7e, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x7e], [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00], [0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00], [0x0e, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x3c, 0x00], [0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00], [0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0], [0x1e, 0x30, 0x60, 0x7e, 0x60, 0x30, 0x1e, 0x00], [0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00], [0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00], [0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x7e, 0x00], [0x30, 0x18, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00], [0x0c, 0x18, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00], [0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70], [0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00], [0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00], [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00], [0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c], [0x6c, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00], [0x78, 0x0c, 0x18, 0x30, 0x7c, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]]; - this.height = 8; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - return ImageTextModeFont8x8; - - })(this.ImageTextModeFont); - - this.ImageTextModeFontAmiga = (function(_super) { - __extends(ImageTextModeFontAmiga, _super); - - function ImageTextModeFontAmiga(options) { - var k, v; - ImageTextModeFontAmiga.__super__.constructor.call(this, this.width); - this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x83, 0x83, 0x39, 0x39, 0x21, 0x21, 0x29, 0x29, 0x21, 0x21, 0x3f, 0x3f, 0x87, 0x87, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0xff, 0xff], [0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xff, 0xff], [0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff], [0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x9f, 0x9f, 0x91, 0x91, 0x99, 0x99, 0x99, 0x99, 0xc1, 0xc1, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x9c, 0x9c, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x9c, 0x9c, 0xff, 0xff], [0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x9c, 0x9c, 0x88, 0x88, 0x80, 0x80, 0x94, 0x94, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff], [0x9c, 0x9c, 0x8c, 0x8c, 0x84, 0x84, 0x90, 0x90, 0x98, 0x98, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x91, 0x91, 0xc0, 0xc0, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x8f, 0x8f, 0xc3, 0xc3, 0xf1, 0xf1, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x81, 0x81, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xc3, 0xc3, 0xe7, 0xe7, 0xff, 0xff], [0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x94, 0x94, 0x80, 0x80, 0x88, 0x88, 0x9c, 0x9c, 0xff, 0xff], [0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x3c, 0x3c, 0xff, 0xff], [0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x80, 0x80, 0xf9, 0xf9, 0xf3, 0xf3, 0xe7, 0xe7, 0xcf, 0xcf, 0x9f, 0x9f, 0x80, 0x80, 0xff, 0xff], [0xc3, 0xc3, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xc3, 0xc3, 0xff, 0xff], [0x3f, 0x3f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe7, 0xe7, 0xf3, 0xf3, 0xf9, 0xf9, 0xfc, 0xfc, 0xff, 0xff], [0xc3, 0xc3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xc3, 0xc3, 0xff, 0xff], [0xf7, 0xf7, 0xe3, 0xe3, 0xc9, 0xc9, 0x9c, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00], [0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00], [0x18, 0x18, 0x3e, 0x3e, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0xac, 0xac, 0xd8, 0xd8, 0x36, 0x36, 0x6a, 0x6a, 0xcc, 0xcc, 0x00, 0x00], [0x38, 0x38, 0x6c, 0x6c, 0x68, 0x68, 0x76, 0x76, 0xdc, 0xdc, 0xce, 0xce, 0x7b, 0x7b, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x3c, 0x3c, 0xff, 0xff, 0x3c, 0x3c, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x38, 0x38, 0x78, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x1c, 0x1c, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x3c, 0x3c, 0x6c, 0x6c, 0xcc, 0xcc, 0xfe, 0xfe, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x7c, 0x7c, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x30, 0x30, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7e, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x0c, 0x0c, 0x38, 0x38, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00], [0x7c, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xd6, 0xd6, 0xde, 0xde, 0xc0, 0xc0, 0x78, 0x78, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00], [0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x00, 0x00], [0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x60, 0x60, 0x6e, 0x6e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0xc6, 0xc6, 0xcc, 0xcc, 0xd8, 0xd8, 0xf0, 0xf0, 0xd8, 0xd8, 0xcc, 0xcc, 0xc6, 0xc6, 0x00, 0x00], [0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0xc6, 0xc6, 0xee, 0xee, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0xc6, 0xc6, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x78, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdc, 0xdc, 0x7e, 0x7e, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x70, 0x70, 0x3c, 0x3c, 0x0e, 0x0e, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0xee, 0xee, 0xc6, 0xc6, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0xfe, 0xfe, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0xfe, 0xfe, 0x00, 0x00], [0x3c, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x3c, 0x00, 0x00], [0xc0, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03, 0x00, 0x00], [0x3c, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x3c, 0x00, 0x00], [0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe], [0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x3c, 0x3c], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x78, 0x78], [0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xec, 0xec, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60], [0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x06, 0x06], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x00, 0x00], [0x30, 0x30, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1c, 0x1c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0x6c, 0x6c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x00, 0x00], [0x72, 0x72, 0x9c, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0xc3, 0xc3, 0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0x00, 0x00], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe7, 0xe7, 0xdb, 0xdb, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe0, 0xe0, 0xc3, 0xc3, 0xc3, 0xc3, 0x90, 0x90, 0x83, 0x83, 0x33, 0x33, 0x30, 0x30, 0xff, 0xff], [0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xf3, 0xf3, 0xe7, 0xe7], [0xcf, 0xcf, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x09, 0x09, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff], [0x8e, 0x8e, 0x31, 0x31, 0x19, 0x19, 0x09, 0x09, 0x21, 0x21, 0x31, 0x31, 0x39, 0x39, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x3c, 0x3c, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xff, 0xff, 0x39, 0x39, 0x93, 0x93, 0xc7, 0xc7, 0x93, 0x93, 0x39, 0x39, 0xff, 0xff, 0xff, 0xff], [0xc0, 0xc0, 0x99, 0x99, 0x91, 0x91, 0x81, 0x81, 0x89, 0x89, 0x99, 0x99, 0x03, 0x03, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0xdb, 0xdb, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf9, 0xf9, 0xf7, 0xf7, 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x3f, 0x3f, 0x3f, 0x3f, 0x03, 0x03, 0x39, 0x39, 0x03, 0x03, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x9f, 0x9f], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x80], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x0c, 0x3e, 0x3e, 0x6c, 0x6c, 0x3e, 0x3e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00], [0x1c, 0x1c, 0x36, 0x36, 0x30, 0x30, 0x78, 0x78, 0x30, 0x30, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x42, 0x42, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x7e, 0x81, 0x81, 0x9d, 0x9d, 0xb1, 0xb1, 0x9d, 0x9d, 0x81, 0x81, 0x7e, 0x7e, 0x00, 0x00], [0x1c, 0x1c, 0x24, 0x24, 0x44, 0x44, 0x3c, 0x3c, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00], [0x3e, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x7e, 0x81, 0x81, 0xb9, 0xb9, 0xa5, 0xa5, 0xb9, 0xb9, 0xa5, 0xa5, 0x81, 0x81, 0x7e, 0x7e], [0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00], [0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x0c, 0x0c, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x7f, 0x60, 0x60], [0x3e, 0x3e, 0x7a, 0x7a, 0x7a, 0x7a, 0x3a, 0x3a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30], [0x30, 0x30, 0x70, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x38, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00], [0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x32, 0x32, 0x66, 0x66, 0xcf, 0xcf, 0x02, 0x02], [0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x3e, 0x3e, 0x62, 0x62, 0xc4, 0xc4, 0x0e, 0x0e], [0xc0, 0xc0, 0x23, 0x23, 0x66, 0x66, 0x2c, 0x2c, 0xd9, 0xd9, 0x33, 0x33, 0x67, 0x67, 0x01, 0x01], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x1f, 0x1f, 0x3c, 0x3c, 0x3c, 0x3c, 0x6f, 0x6f, 0x7c, 0x7c, 0xcc, 0xcc, 0xcf, 0xcf, 0x00, 0x00], [0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x0c, 0x0c, 0x18, 0x18], [0x30, 0x30, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0xf6, 0xf6, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00], [0x71, 0x71, 0xce, 0xce, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0xc3, 0xc3, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x3f, 0x3f, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0xfc, 0xfc, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x08, 0x08, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xfc, 0xc6, 0xc6, 0xfc, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x60, 0x60], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x1b, 0x1b, 0x7f, 0x7f, 0xd8, 0xd8, 0x77, 0x77, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x18, 0x18], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x60, 0x60, 0xfc, 0xfc, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x02, 0x02, 0x7c, 0x7c, 0xce, 0xce, 0xd6, 0xd6, 0xe6, 0xe6, 0x7c, 0x7c, 0x80, 0x80], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30]]; - this.height = 16; - for (k in options) { - if (!__hasProp.call(options, k)) continue; - v = options[k]; - this[k] = v; - } - } - - return ImageTextModeFontAmiga; - - })(this.ImageTextModeFont); - this.ImageTextMode = (function() { ImageTextMode.VERSION = '0.01'; @@ -827,6 +639,80 @@ })(this.ImageTextMode); + this.ImageTextModeSAUCE = (function() { + function ImageTextModeSAUCE() {} + + ImageTextModeSAUCE.prototype.parseUrl = function(url) { + var content, req; + req = new XMLHttpRequest(); + req.open('GET', url, false); + req.overrideMimeType('text/plain; charset=x-user-defined'); + req.send(null); + content = req.status === 200 || req.status === 0 ? req.responseText : ''; + return this.parse(content); + }; + + ImageTextModeSAUCE.prototype.parse = function(content) { + var commentMarker, i, sauceMarker; + sauceMarker = content.length - 128; + if (content.substr(sauceMarker, 5) !== 'SAUCE') { + return false; + } + this.id = 'SAUCE'; + this.version = content.substr(sauceMarker + 5, 2); + this.title = content.substr(sauceMarker + 7, 35); + this.author = content.substr(sauceMarker + 42, 20); + this.group = content.substr(sauceMarker + 62, 20); + this.date = content.substr(sauceMarker + 82, 8); + this.fileSize = this.unpackLong(content.substr(sauceMarker + 90, 4)); + this.dataType = this.getByteAt(content.substr(sauceMarker + 94, 1)); + this.fileType = this.getByteAt(content.substr(sauceMarker + 95, 1)); + this.tinfo1 = this.unpackShort(content.substr(sauceMarker + 96, 2)); + this.tinfo2 = this.unpackShort(content.substr(sauceMarker + 98, 2)); + this.tinfo3 = this.unpackShort(content.substr(sauceMarker + 100, 2)); + this.tinfo4 = this.unpackShort(content.substr(sauceMarker + 102, 2)); + this.commentCount = this.getByteAt(content.substr(sauceMarker + 104, 1)); + this.flags = this.getByteAt(content.substr(sauceMarker + 105, 1)); + this.filler = content.substr(sauceMarker + 106, 22); + commentMarker = sauceMarker - 5 - this.commentCount * 64; + if (this.commentCount > 0 && content.substr(commentMarker, 5) === 'COMNT') { + commentMarker += 5; + this.comments = []; + i = this.commentCount; + while (i-- > 0) { + this.comments.push(content.substr(commentMarker, 64)); + commentMarker += 64; + } + } + return true; + }; + + ImageTextModeSAUCE.prototype.unpackLong = function(data) { + var lng; + lng = (((this.getByteAt(data, 3) << 8) + this.getByteAt(data, 2) << 8) + this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); + if (lng < 0) { + lng += 4294967296; + } + return lng; + }; + + ImageTextModeSAUCE.prototype.unpackShort = function(data) { + var shrt; + shrt = (this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0); + if (shrt < 0) { + shrt += 65536; + } + return shrt; + }; + + ImageTextModeSAUCE.prototype.getByteAt = function(data, offset) { + return data.charCodeAt(offset) & 0xFF; + }; + + return ImageTextModeSAUCE; + + })(); + this.ImageTextModeTundra = (function(_super) { __extends(ImageTextModeTundra, _super); @@ -1354,4 +1240,118 @@ })(this.ImageTextMode); + this.ImageTextModePalette = (function() { + function ImageTextModePalette(options) { + var k, v; + this.colors = []; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + ImageTextModePalette.prototype.toRgbaString = function(color) { + return 'rgba(' + color.join(',') + ',1)'; + }; + + return ImageTextModePalette; + + })(); + + this.ImageTextModePaletteVGA = (function(_super) { + __extends(ImageTextModePaletteVGA, _super); + + function ImageTextModePaletteVGA(options) { + this.colors = [[0x00, 0x00, 0x00], [0x00, 0x00, 0xaa], [0x00, 0xaa, 0x00], [0x00, 0xaa, 0xaa], [0xaa, 0x00, 0x00], [0xaa, 0x00, 0xaa], [0xaa, 0x55, 0x00], [0xaa, 0xaa, 0xaa], [0x55, 0x55, 0x55], [0x55, 0x55, 0xff], [0x55, 0xff, 0x55], [0x55, 0xff, 0xff], [0xff, 0x55, 0x55], [0xff, 0x55, 0xff], [0xff, 0xff, 0x55], [0xff, 0xff, 0xff]]; + } + + return ImageTextModePaletteVGA; + + })(this.ImageTextModePalette); + + this.ImageTextModePaletteANSI = (function(_super) { + __extends(ImageTextModePaletteANSI, _super); + + function ImageTextModePaletteANSI(options) { + this.colors = [[0x00, 0x00, 0x00], [0xaa, 0x00, 0x00], [0x00, 0xaa, 0x00], [0xaa, 0x55, 0x00], [0x00, 0x00, 0xaa], [0xaa, 0x00, 0xaa], [0x00, 0xaa, 0xaa], [0xaa, 0xaa, 0xaa], [0x55, 0x55, 0x55], [0xff, 0x55, 0x55], [0x55, 0xff, 0x55], [0xff, 0xff, 0x55], [0x55, 0x55, 0xff], [0xff, 0x55, 0xff], [0x55, 0xff, 0xff], [0xff, 0xff, 0xff]]; + } + + return ImageTextModePaletteANSI; + + })(this.ImageTextModePalette); + + this.ImageTextModeFont = (function() { + function ImageTextModeFont(options) { + var k, v; + this.chars = []; + this.width = 8; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + return ImageTextModeFont; + + })(); + + this.ImageTextModeFont8x16 = (function(_super) { + __extends(ImageTextModeFont8x16, _super); + + function ImageTextModeFont8x16(options) { + var k, v; + ImageTextModeFont8x16.__super__.constructor.call(this, this.width); + this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00], [0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00], [0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00], [0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00], [0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00], [0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00], [0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x70, 0x00, 0x00], [0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x70, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x38, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x36, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00], [0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x18, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00], [0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x66, 0xce, 0x9a, 0x3f, 0x06, 0x06, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44], [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], [0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00], [0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x6c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x3c, 0x66, 0x0c, 0x18, 0x32, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]]; + this.height = 16; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + return ImageTextModeFont8x16; + + })(this.ImageTextModeFont); + + this.ImageTextModeFont8x8 = (function(_super) { + __extends(ImageTextModeFont8x8, _super); + + function ImageTextModeFont8x8(options) { + var k, v; + ImageTextModeFont8x8.__super__.constructor.call(this, this.width); + this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e], [0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e], [0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00], [0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00], [0x38, 0x7c, 0x38, 0xfe, 0xfe, 0xd6, 0x10, 0x38], [0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x7c, 0x10, 0x38], [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00], [0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff], [0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00], [0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff], [0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78], [0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18], [0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0], [0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0], [0x18, 0xdb, 0x3c, 0xe7, 0xe7, 0x3c, 0xdb, 0x18], [0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00], [0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00], [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18], [0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00], [0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00], [0x3e, 0x61, 0x3c, 0x66, 0x66, 0x3c, 0x86, 0x7c], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00], [0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff], [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00], [0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00], [0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00], [0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00], [0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00], [0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00], [0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00], [0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00], [0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00], [0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00], [0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00], [0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00], [0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00], [0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00], [0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00], [0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00], [0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30], [0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00], [0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00], [0x38, 0x6c, 0xc6, 0xd6, 0xc6, 0x6c, 0x38, 0x00], [0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00], [0x7c, 0xc6, 0x06, 0x1c, 0x30, 0x66, 0xfe, 0x00], [0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00], [0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00], [0xfe, 0xc0, 0xc0, 0xfc, 0x06, 0xc6, 0x7c, 0x00], [0x38, 0x60, 0xc0, 0xfc, 0xc6, 0xc6, 0x7c, 0x00], [0xfe, 0xc6, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00], [0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0x00], [0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00], [0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00], [0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30], [0x06, 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x06, 0x00], [0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00], [0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00], [0x7c, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x00], [0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00], [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00], [0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00], [0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00], [0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00], [0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00], [0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00], [0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3a, 0x00], [0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00], [0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00], [0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00], [0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00], [0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00], [0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00], [0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], [0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xce, 0x7c, 0x0e], [0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00], [0x3c, 0x66, 0x30, 0x18, 0x0c, 0x66, 0x3c, 0x00], [0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x3c, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00], [0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc6, 0x00], [0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x00], [0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00], [0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00], [0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00], [0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00], [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff], [0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0xe0, 0x60, 0x7c, 0x66, 0x66, 0x66, 0xdc, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc6, 0x7c, 0x00], [0x1c, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x3c, 0x66, 0x60, 0xf8, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], [0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00], [0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x06, 0x00, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c], [0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00], [0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0x00], [0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x00], [0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0], [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e], [0x00, 0x00, 0xdc, 0x76, 0x60, 0x60, 0xf0, 0x00], [0x00, 0x00, 0x7e, 0xc0, 0x7c, 0x06, 0xfc, 0x00], [0x30, 0x30, 0xfc, 0x30, 0x30, 0x36, 0x1c, 0x00], [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00], [0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc], [0x00, 0x00, 0x7e, 0x4c, 0x18, 0x32, 0x7e, 0x00], [0x0e, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0e, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00], [0x70, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x70, 0x00], [0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00], [0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x0c, 0x78], [0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x0c, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x7c, 0x82, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0xc6, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x30, 0x18, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x00, 0x00, 0x7e, 0xc0, 0xc0, 0x7e, 0x0c, 0x38], [0x7c, 0x82, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0xc6, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x30, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00], [0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x7c, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], [0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00], [0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], [0x38, 0x6c, 0x7c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], [0x18, 0x30, 0xfe, 0xc0, 0xf8, 0xc0, 0xfe, 0x00], [0x00, 0x00, 0x7e, 0x18, 0x7e, 0xd8, 0x7e, 0x00], [0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00], [0x7c, 0x82, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x30, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x78, 0x84, 0x00, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x60, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc], [0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x00], [0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18], [0x38, 0x6c, 0x64, 0xf0, 0x60, 0x66, 0xfc, 0x00], [0x66, 0x66, 0x3c, 0x7e, 0x18, 0x7e, 0x18, 0x18], [0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7], [0x0e, 0x1b, 0x18, 0x3c, 0x18, 0xd8, 0x70, 0x00], [0x18, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], [0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00], [0x0c, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00], [0x18, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], [0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x00], [0x76, 0xdc, 0x00, 0xe6, 0xf6, 0xde, 0xce, 0x00], [0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00], [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00], [0x18, 0x00, 0x18, 0x18, 0x30, 0x63, 0x3e, 0x00], [0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0x00, 0x00], [0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x00, 0x00], [0x63, 0xe6, 0x6c, 0x7e, 0x33, 0x66, 0xcc, 0x0f], [0x63, 0xe6, 0x6c, 0x7a, 0x36, 0x6a, 0xdf, 0x06], [0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x00], [0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00], [0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00], [0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88], [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], [0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36], [0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36], [0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], [0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], [0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36], [0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00], [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36], [0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36], [0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36], [0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36], [0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], [0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36], [0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], [0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00], [0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00], [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], [0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36], [0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36], [0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff], [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], [0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00], [0x78, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xcc, 0x00], [0xfe, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00], [0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00], [0xfe, 0xc6, 0x60, 0x30, 0x60, 0xc6, 0xfe, 0x00], [0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00], [0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0xc0], [0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00], [0x7e, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x7e], [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00], [0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00], [0x0e, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x3c, 0x00], [0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00], [0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0], [0x1e, 0x30, 0x60, 0x7e, 0x60, 0x30, 0x1e, 0x00], [0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00], [0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00], [0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x7e, 0x00], [0x30, 0x18, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00], [0x0c, 0x18, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00], [0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18], [0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70], [0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00], [0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00], [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00], [0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c], [0x6c, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00], [0x78, 0x0c, 0x18, 0x30, 0x7c, 0x00, 0x00, 0x00], [0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]]; + this.height = 8; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + return ImageTextModeFont8x8; + + })(this.ImageTextModeFont); + + this.ImageTextModeFontAmiga = (function(_super) { + __extends(ImageTextModeFontAmiga, _super); + + function ImageTextModeFontAmiga(options) { + var k, v; + ImageTextModeFontAmiga.__super__.constructor.call(this, this.width); + this.chars = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x83, 0x83, 0x39, 0x39, 0x21, 0x21, 0x29, 0x29, 0x21, 0x21, 0x3f, 0x3f, 0x87, 0x87, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0xff, 0xff], [0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xff, 0xff], [0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff], [0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x9f, 0x9f, 0x91, 0x91, 0x99, 0x99, 0x99, 0x99, 0xc1, 0xc1, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x9c, 0x9c, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x9c, 0x9c, 0xff, 0xff], [0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x9c, 0x9c, 0x88, 0x88, 0x80, 0x80, 0x94, 0x94, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff], [0x9c, 0x9c, 0x8c, 0x8c, 0x84, 0x84, 0x90, 0x90, 0x98, 0x98, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x91, 0x91, 0xc0, 0xc0, 0xff, 0xff], [0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x8f, 0x8f, 0xc3, 0xc3, 0xf1, 0xf1, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x81, 0x81, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xc3, 0xc3, 0xe7, 0xe7, 0xff, 0xff], [0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x94, 0x94, 0x80, 0x80, 0x88, 0x88, 0x9c, 0x9c, 0xff, 0xff], [0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x3c, 0x3c, 0xff, 0xff], [0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x80, 0x80, 0xf9, 0xf9, 0xf3, 0xf3, 0xe7, 0xe7, 0xcf, 0xcf, 0x9f, 0x9f, 0x80, 0x80, 0xff, 0xff], [0xc3, 0xc3, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xc3, 0xc3, 0xff, 0xff], [0x3f, 0x3f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe7, 0xe7, 0xf3, 0xf3, 0xf9, 0xf9, 0xfc, 0xfc, 0xff, 0xff], [0xc3, 0xc3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xc3, 0xc3, 0xff, 0xff], [0xf7, 0xf7, 0xe3, 0xe3, 0xc9, 0xc9, 0x9c, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00], [0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00], [0x18, 0x18, 0x3e, 0x3e, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0xac, 0xac, 0xd8, 0xd8, 0x36, 0x36, 0x6a, 0x6a, 0xcc, 0xcc, 0x00, 0x00], [0x38, 0x38, 0x6c, 0x6c, 0x68, 0x68, 0x76, 0x76, 0xdc, 0xdc, 0xce, 0xce, 0x7b, 0x7b, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x3c, 0x3c, 0xff, 0xff, 0x3c, 0x3c, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x38, 0x38, 0x78, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x1c, 0x1c, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x3c, 0x3c, 0x6c, 0x6c, 0xcc, 0xcc, 0xfe, 0xfe, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x7c, 0x7c, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x30, 0x30, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7e, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x0c, 0x0c, 0x38, 0x38, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00], [0x7c, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xd6, 0xd6, 0xde, 0xde, 0xc0, 0xc0, 0x78, 0x78, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00], [0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x00, 0x00], [0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x60, 0x60, 0x6e, 0x6e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0xc6, 0xc6, 0xcc, 0xcc, 0xd8, 0xd8, 0xf0, 0xf0, 0xd8, 0xd8, 0xcc, 0xcc, 0xc6, 0xc6, 0x00, 0x00], [0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0xc6, 0xc6, 0xee, 0xee, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0xc6, 0xc6, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x78, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdc, 0xdc, 0x7e, 0x7e, 0x00, 0x00], [0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x70, 0x70, 0x3c, 0x3c, 0x0e, 0x0e, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00], [0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0xee, 0xee, 0xc6, 0xc6, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0xfe, 0xfe, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0xfe, 0xfe, 0x00, 0x00], [0x3c, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x3c, 0x00, 0x00], [0xc0, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03, 0x00, 0x00], [0x3c, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x3c, 0x00, 0x00], [0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe], [0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x1c, 0x1c, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x3c, 0x3c], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x78, 0x78], [0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xec, 0xec, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60], [0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x06, 0x06], [0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x00, 0x00], [0x30, 0x30, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1c, 0x1c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0x6c, 0x6c, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x00, 0x00], [0x72, 0x72, 0x9c, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0xc3, 0xc3, 0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0x00, 0x00], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe7, 0xe7, 0xdb, 0xdb, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff], [0xe0, 0xe0, 0xc3, 0xc3, 0xc3, 0xc3, 0x90, 0x90, 0x83, 0x83, 0x33, 0x33, 0x30, 0x30, 0xff, 0xff], [0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xf3, 0xf3, 0xe7, 0xe7], [0xcf, 0xcf, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff], [0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x09, 0x09, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff], [0x8e, 0x8e, 0x31, 0x31, 0x19, 0x19, 0x09, 0x09, 0x21, 0x21, 0x31, 0x31, 0x39, 0x39, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x3c, 0x3c, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xff, 0xff, 0x39, 0x39, 0x93, 0x93, 0xc7, 0xc7, 0x93, 0x93, 0x39, 0x39, 0xff, 0xff, 0xff, 0xff], [0xc0, 0xc0, 0x99, 0x99, 0x91, 0x91, 0x81, 0x81, 0x89, 0x89, 0x99, 0x99, 0x03, 0x03, 0xff, 0xff], [0xcf, 0xcf, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf3, 0xf3, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xe7, 0xe7, 0xdb, 0xdb, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff], [0xf9, 0xf9, 0xf7, 0xf7, 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff], [0x3f, 0x3f, 0x3f, 0x3f, 0x03, 0x03, 0x39, 0x39, 0x03, 0x03, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff], [0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x9f, 0x9f], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x80], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x00, 0x00, 0x0c, 0x0c, 0x3e, 0x3e, 0x6c, 0x6c, 0x3e, 0x3e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00], [0x1c, 0x1c, 0x36, 0x36, 0x30, 0x30, 0x78, 0x78, 0x30, 0x30, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00], [0x42, 0x42, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x7e, 0x81, 0x81, 0x9d, 0x9d, 0xb1, 0xb1, 0x9d, 0x9d, 0x81, 0x81, 0x7e, 0x7e, 0x00, 0x00], [0x1c, 0x1c, 0x24, 0x24, 0x44, 0x44, 0x3c, 0x3c, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00], [0x3e, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x7e, 0x7e, 0x81, 0x81, 0xb9, 0xb9, 0xa5, 0xa5, 0xb9, 0xb9, 0xa5, 0xa5, 0x81, 0x81, 0x7e, 0x7e], [0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00], [0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x0c, 0x0c, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x7f, 0x60, 0x60], [0x3e, 0x3e, 0x7a, 0x7a, 0x7a, 0x7a, 0x3a, 0x3a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30], [0x30, 0x30, 0x70, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x38, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00], [0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x32, 0x32, 0x66, 0x66, 0xcf, 0xcf, 0x02, 0x02], [0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x3e, 0x3e, 0x62, 0x62, 0xc4, 0xc4, 0x0e, 0x0e], [0xc0, 0xc0, 0x23, 0x23, 0x66, 0x66, 0x2c, 0x2c, 0xd9, 0xd9, 0x33, 0x33, 0x67, 0x67, 0x01, 0x01], [0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x1f, 0x1f, 0x3c, 0x3c, 0x3c, 0x3c, 0x6f, 0x6f, 0x7c, 0x7c, 0xcc, 0xcc, 0xcf, 0xcf, 0x00, 0x00], [0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x0c, 0x0c, 0x18, 0x18], [0x30, 0x30, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00], [0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0xf6, 0xf6, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00], [0x71, 0x71, 0xce, 0xce, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0xc3, 0xc3, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00], [0x3f, 0x3f, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0xfc, 0xfc, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x06, 0x06, 0x08, 0x08, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], [0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xfc, 0xc6, 0xc6, 0xfc, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00], [0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x60, 0x60], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x1b, 0x1b, 0x7f, 0x7f, 0xd8, 0xd8, 0x77, 0x77, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x18, 0x18], [0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00], [0x60, 0x60, 0xfc, 0xfc, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00], [0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x02, 0x02, 0x7c, 0x7c, 0xce, 0xce, 0xd6, 0xd6, 0xe6, 0xe6, 0x7c, 0x7c, 0x80, 0x80], [0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00], [0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30], [0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60], [0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30]]; + this.height = 16; + for (k in options) { + if (!__hasProp.call(options, k)) continue; + v = options[k]; + this[k] = v; + } + } + + return ImageTextModeFontAmiga; + + })(this.ImageTextModeFont); + }).call(this); From 720f312bff0a65d987a58bfefa016ab2b8c8fb9e Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Sat, 5 Apr 2014 16:16:30 +0300 Subject: [PATCH 023/108] Initial start of editor (and some basic crappage.) --- editor/sahliedit.litcoffee | 25 +++++++++++++++++++++++++ editor/sahlieditor.html | 16 ++++++++++++++++ todo.txt | 2 +- 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 editor/sahliedit.litcoffee create mode 100644 editor/sahlieditor.html diff --git a/editor/sahliedit.litcoffee b/editor/sahliedit.litcoffee new file mode 100644 index 0000000..a4f3ec3 --- /dev/null +++ b/editor/sahliedit.litcoffee @@ -0,0 +1,25 @@ +Sahli Editor +============ + +Editor for Sahli files. + +- open existing file +- create new item + * get filename from dir + * insert SAUCE data if available + * use SAUCE data to find font + * allow Amiga choices + * colorpicker +- edit existing item +- copy/clone +- move items around +- output to screen (copy into file) + * run from node - save filename dialog + +== Create Initial crappage +We need to make a screen that has a few things in it for starters +Title, load existing, and new file options. + +Silliness for checking that this works. + $(-> $("h1").hide().slideDown(500)) + diff --git a/editor/sahlieditor.html b/editor/sahlieditor.html new file mode 100644 index 0000000..406e28b --- /dev/null +++ b/editor/sahlieditor.html @@ -0,0 +1,16 @@ + + + Sahli Editor + + + + + + +

Sahli Editor

+
+

form would go here

+
+ + + \ No newline at end of file diff --git a/todo.txt b/todo.txt index 49cfec6..8347329 100644 --- a/todo.txt +++ b/todo.txt @@ -5,7 +5,7 @@ (A) remove the SAUCE lines at bottom, return ANSI object for render @SAUCE (B) load SAUCE into 'info' lines (should be done at prep) @SAUCE x 2014-04-05 (A) Study 16colors site - how does IT remove sauce info? It DOESN'T. FUCK. -(A) Split coffeescript into files, use cake. +x 2014-04-05 (A) Split coffeescript into files, use cake. (A) remove their lines like SAUCE, return ANSI object for render @OTHER (B) load other-info into 'info' (done at prep) @OTHER From 085adf6f03b2275b477e3b64df1fae977b082a8b Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Sun, 6 Apr 2014 15:08:32 +0300 Subject: [PATCH 024/108] buttons. - took too much time trying to get the better coffeescript bundle to do something sane. --- editor/sahliedit.litcoffee | 12 ++++++++++++ editor/sahlieditor.html | 5 ++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/editor/sahliedit.litcoffee b/editor/sahliedit.litcoffee index a4f3ec3..3158a51 100644 --- a/editor/sahliedit.litcoffee +++ b/editor/sahliedit.litcoffee @@ -11,8 +11,11 @@ Editor for Sahli files. * allow Amiga choices * colorpicker - edit existing item +- remove item +- clear whole file - copy/clone - move items around +- sort items - output to screen (copy into file) * run from node - save filename dialog @@ -23,3 +26,12 @@ Title, load existing, and new file options. Silliness for checking that this works. $(-> $("h1").hide().slideDown(500)) +Create a split button to choose between the New and Load functionalities +(As we aren't going to ever load a file _and_ do a new file.) +(If someone wants to do that, they can restart with F5 or something.) + + $(-> $("#newsahli").button { disabled: false} ) + $(-> $("#loadsahli").button { disabled: false} ) + + + \ No newline at end of file diff --git a/editor/sahlieditor.html b/editor/sahlieditor.html index 406e28b..c52a2bb 100644 --- a/editor/sahlieditor.html +++ b/editor/sahlieditor.html @@ -9,7 +9,10 @@

Sahli Editor

-

form would go here

+
+ + +
From 5a01b475c16db7a3785a9fe515b7944d5b75e3a0 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Tue, 8 Apr 2014 16:43:18 +0300 Subject: [PATCH 025/108] Kiitos Gargaj - does not end --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 87c1858..6796a87 100644 --- a/index.html +++ b/index.html @@ -43,7 +43,7 @@

OH MY GOD BECKY LOOK AT HER BUTT IT IS SO BIG!

filename width - font + font

From 97f304d6e1cab3fa43d0d0da86e14ca82cba5818 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Mon, 14 Apr 2014 12:26:52 +0300 Subject: [PATCH 026/108] h7 reminded me of thumbnails --- todo.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/todo.txt b/todo.txt index 8347329..826d917 100644 --- a/todo.txt +++ b/todo.txt @@ -10,6 +10,8 @@ x 2014-04-05 (A) Split coffeescript into files, use cake. (A) remove their lines like SAUCE, return ANSI object for render @OTHER (B) load other-info into 'info' (done at prep) @OTHER +(B) THUMBNAILS - for returning to partymeister + (A) Create Editor - Standalone @EDITOR (A) - create interface @EDITOR (A) - parse files for 'info' @EDITOR @SAUCE From 4ae2a68fec6be3f4407001c32e769c0d43157529 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Mon, 14 Apr 2014 13:47:01 +0300 Subject: [PATCH 027/108] Things I worked on before the openssl issue took me away --- editor/sahliedit.litcoffee | 56 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/editor/sahliedit.litcoffee b/editor/sahliedit.litcoffee index 3158a51..f7da78c 100644 --- a/editor/sahliedit.litcoffee +++ b/editor/sahliedit.litcoffee @@ -30,8 +30,58 @@ Create a split button to choose between the New and Load functionalities (As we aren't going to ever load a file _and_ do a new file.) (If someone wants to do that, they can restart with F5 or something.) - $(-> $("#newsahli").button { disabled: false} ) - $(-> $("#loadsahli").button { disabled: false} ) + $(-> + $("#newsahli") + .button { disabled: false} + .click -> newsahli 'new' + ) + + $(-> + $("#loadsahli") + .button { disabled: false} + .click -> alert "heyoh!" + ) - \ No newline at end of file +The sahli file definition format is as follows: +"file" - the actual filename on disk, "name" - the title of the piece, +the boolean 'amiga' indicates if it is ansi or ascii (True = ascii), +width is the width (widest point of the file), author the author of the piece, +the color and bg items define the color for amiga ascii, and the font +defines the font similarly. For PC ansi, this should be 'ansifont.' +The three remaining lines are informational and optional. + +The slide format is currently unused, but consists of a background picture, +a html template, and a css file. + + class Sahli + constructor: -> + filedef = { + "file": "", + "name": "", + "amiga": true, + "width": "", + "author": "", + "font": "Propaz", + "color": [ 0,0,0,0 ], + "bg": [ 0,0,0,0 ], + "line1": "", + "line2": "", + "text": "" + } + slidesdef = { + "background": "", + "template": "", + "css": "" + } + blank = { + "slides": slidesdef, + "filedef": [ filedef ] + } + + dumpjson = (obj) -> + JSON.stringify(obj) + + newsahli = -> + sahli = new Sahli + alert dumpjson this.sahli \ No newline at end of file From ec7acc5c3b43e5f0e70ae2a677e9cbb2a6982c01 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Mon, 14 Apr 2014 14:25:37 +0300 Subject: [PATCH 028/108] New Sahli object creation --- editor/sahliedit.litcoffee | 49 +++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/editor/sahliedit.litcoffee b/editor/sahliedit.litcoffee index f7da78c..91f6a53 100644 --- a/editor/sahliedit.litcoffee +++ b/editor/sahliedit.litcoffee @@ -55,33 +55,34 @@ The slide format is currently unused, but consists of a background picture, a html template, and a css file. class Sahli - constructor: -> - filedef = { - "file": "", - "name": "", - "amiga": true, - "width": "", - "author": "", - "font": "Propaz", - "color": [ 0,0,0,0 ], - "bg": [ 0,0,0,0 ], - "line1": "", - "line2": "", - "text": "" - } - slidesdef = { - "background": "", - "template": "", - "css": "" - } - blank = { - "slides": slidesdef, - "filedef": [ filedef ] - } + constructor: -> + @filedef = { + "file": "", + "name": "", + "amiga": true, + "width": "", + "author": "", + "font": "Propaz", + "color": [ 0,0,0,0 ], + "bg": [ 0,0,0,0 ], + "line1": "", + "line2": "", + "text": "" + } + @slidesdef = { + "background": "", + "template": "", + "css": "" + } + @blank = { + "slides": @slidesdef, + "filedef": [ @filedef ] + } dumpjson = (obj) -> JSON.stringify(obj) newsahli = -> sahli = new Sahli - alert dumpjson this.sahli \ No newline at end of file + alert dumpjson sahli + From de82467f771fc9e1d55375864844ef2dabcbdd45 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Mon, 14 Apr 2014 20:09:27 +0300 Subject: [PATCH 029/108] basic form - needs some more changes but basics are there. --- editor/sahliedit.css | 17 ++++++ editor/sahliedit.litcoffee | 43 +++++++++++++-- editor/sahlieditor.html | 106 ++++++++++++++++++++++++++++++++----- 3 files changed, 151 insertions(+), 15 deletions(-) create mode 100644 editor/sahliedit.css diff --git a/editor/sahliedit.css b/editor/sahliedit.css new file mode 100644 index 0000000..3712a3d --- /dev/null +++ b/editor/sahliedit.css @@ -0,0 +1,17 @@ +label, input, textarea{ + display: block; +} + +input, textarea { + width: 90%; +} + +textarea { + height: 8em; +} + +.colorbox { + border: 0; + padding: 0; + height: 2em; +} diff --git a/editor/sahliedit.litcoffee b/editor/sahliedit.litcoffee index 91f6a53..20bdd41 100644 --- a/editor/sahliedit.litcoffee +++ b/editor/sahliedit.litcoffee @@ -24,23 +24,38 @@ We need to make a screen that has a few things in it for starters Title, load existing, and new file options. Silliness for checking that this works. + $(-> $("h1").hide().slideDown(500)) Create a split button to choose between the New and Load functionalities (As we aren't going to ever load a file _and_ do a new file.) (If someone wants to do that, they can restart with F5 or something.) +Also hide the hidden things. $(-> $("#newsahli") .button { disabled: false} - .click -> newsahli 'new' - ) + .click -> + newsahli 'new' + $("#formica").dialog { + width:'800', + modal: false, + title:'Line Item', buttons: [{ + text: "OK", + click: -> + $(@).dialog "close" + }] } + ) $(-> $("#loadsahli") .button { disabled: false} .click -> alert "heyoh!" ) + $(-> + $(".hidden").hide() + $(".45box").css {width:'45%',float:'left'} + ) The sahli file definition format is as follows: @@ -79,10 +94,32 @@ a html template, and a css file. "filedef": [ @filedef ] } + loader: -> + alert "loader" + + editor: (data) -> + + alert dumpjson data + + + + + + +A Helper function to dump json out of an object as text: + dumpjson = (obj) -> JSON.stringify(obj) +When clicking 'New' we want to make a brand new Sahli, and then clear out +the buttons and create the editor bit as blank. + newsahli = -> sahli = new Sahli - alert dumpjson sahli + $('#buttonbox').hide() + sahli.data = sahli.blank + sahli.editor sahli.data.filedef + + + diff --git a/editor/sahlieditor.html b/editor/sahlieditor.html index c52a2bb..aedee7d 100644 --- a/editor/sahlieditor.html +++ b/editor/sahlieditor.html @@ -1,19 +1,101 @@ - Sahli Editor - - - - + Sahli Editor + + + + + -

Sahli Editor

-
-
- - -
-
+

Sahli Editor

+
+
+ + +
+
+ \ No newline at end of file From 139764f4f874efd272416af941f2a75a5031db94 Mon Sep 17 00:00:00 2001 From: Howland Owl Date: Tue, 15 Apr 2014 14:07:52 +0300 Subject: [PATCH 030/108] Ansi/Ascii toggle button, form display cleanup --- editor/sahliedit.css | 9 +++++++++ editor/sahliedit.litcoffee | 20 +++++++++++--------- editor/sahlieditor.html | 10 +++++----- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/editor/sahliedit.css b/editor/sahliedit.css index 3712a3d..d129bcf 100644 --- a/editor/sahliedit.css +++ b/editor/sahliedit.css @@ -15,3 +15,12 @@ textarea { padding: 0; height: 2em; } + +pre { + font-family: 'TopazPlus a500a1000a2000','mOsOul',Monaco,monospace; + font-size: 16; +} + +label { + font-size: 10; +} \ No newline at end of file diff --git a/editor/sahliedit.litcoffee b/editor/sahliedit.litcoffee index 20bdd41..6742fc4 100644 --- a/editor/sahliedit.litcoffee +++ b/editor/sahliedit.litcoffee @@ -54,9 +54,17 @@ Also hide the hidden things. ) $(-> $(".hidden").hide() + $("#amiga").button {icons: {primary:"ui-icon-gear"}} + .click -> + stuff = $(@).children() + if @.value == "1" + stuff[1].textContent = 'Ansi' + @.value = "0" + else + stuff[1].textContent = 'Ascii' + @.value = "1" $(".45box").css {width:'45%',float:'left'} - ) - + ) The sahli file definition format is as follows: "file" - the actual filename on disk, "name" - the title of the piece, @@ -98,13 +106,7 @@ a html template, and a css file. alert "loader" editor: (data) -> - - alert dumpjson data - - - - - + q = data A Helper function to dump json out of an object as text: diff --git a/editor/sahlieditor.html b/editor/sahlieditor.html index aedee7d..66c1ef8 100644 --- a/editor/sahlieditor.html +++ b/editor/sahlieditor.html @@ -17,11 +17,11 @@