diff --git a/apps/spaceclock/app.js b/apps/spaceclock/app.js new file mode 100644 index 000000000..2b9676c3b --- /dev/null +++ b/apps/spaceclock/app.js @@ -0,0 +1,237 @@ +Graphics.prototype.setFontDigitalNumbersRegular = function(scale) { + // Actual height 32 (31 - 0) + this.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///D5///w+///+Pv///z4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAHAAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4cAAAOHAAAHjwAAB48AAA+P4AAP//wA////v////8///8AD/+8AAG+PAAAPjwAAD48AAA+PAAAPj2AAD//8AD///z/////f///wA///AAB/jwAAD48AAA8OAAAPDgAADgwAAA4MAAAAAAAAAAAAAAAAAAAAAAAD//gAAf/wAAT/7AAG/84ABwAeAB///////////////8eAHgAHgB4AP//////////HgB4ABwAe/4YADP/EAAH/wAAD/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAD4AAAA+Af8APgf8AD4f8AAAf8AAAf8AAAf8AAAf8AAAf8AAAf8OAAf8HwAf8B8AP8AfAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//3//P/8//t/+H/7v/J/99/jn8fAB8APwAfAH8AD4D/AAfA/sAH4f3gA+Pj8AH3x/AA/4AAAH+AAAB/AAAAPgAAAH8AAAD/gAAB/4AAA+eAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/9//5//P/7f/h/97/wP+/AAAAfwAAAH8AAAB+AAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAwAAAAeAAAAPwAAAH8AAAB/f4B/Pv/B/93/4f/j//P/4//3//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAcAAAA/8AAAP/AAAD7gAAB/sAAA//wAAHf4AAA/8AAAO/AAAD/wAAA/8AAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAAAAeAAAAHgAAAB4AAAH/wAAD//AAAf/gAAD/wAAAHgAAAB4AAAAeAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/wAAB/wAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAAB4AAAAeAAAAHgAAAB4AAAAeAAAAHgAAAB4AAAAeAAAAHgAAAB4AAAAMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/AAAH/AAAH/AAAH/AAAH/AAAH/AAAH/AAAH/AAAH/AAAH/AAAH/AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//3//P/8//t/+H/zv/A/98AAH8/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH9/wP++/+H/3f/j/+P/9//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8D/gP/h/8H/4//j//f/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//wAAP/7AAJ/84AHP/fAB5/PwAeAH8AHgB/AB4AfwAeAH8AHgB/AB4AfwAeAH8AHgB/f94APv/sAB3/6AAD//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAgADgAcAB8AHgA/AB4AfwAeAH8AHgB/AB4AfwAeAH8AHgB/AB4AfwAeAH9/3v++/83/3f/r/+P/9//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8AAD//AAAf/oAAD/3AAAAB4AAAAeAAAAHgAAAB4AAAAeAAAAHgAAAB4AAAAeAAAAHgAAf97/gP/t/8H/6//j//f/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8AAD//AADf/oAA7/3AAfAB4APwAeAH8AHgB/AB4AfwAeAH8AHgB/AB4AfwAeAH8AHgB/AB7/vgAN/9wAC//gAAf/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//3//P/8//t/+n/zv/c/98AHn8/AB4AfwAeAH8AHgB/AB4AfwAeAH8AHgB/AB4AfwAeAH8AHv++AA3/3AAL/+AAB//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAOAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAAD3/A/w7/wf/N/+P/4//3//AAB//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/9//z//P/7f/p/87/3P/fAB5/PwAeAH8AHgB/AB4AfwAeAH8AHgB/AB4AfwAeAH8AHgB/f97/vv/t/93/6//j//f/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//wAAP/8AAN/+gADv/cAA8AHgAPAB4ADwAeAA8AHgAPAB4ADwAeAA8AHgAPAB4ADwAeAA9/3v+O/+3/zf/r/+P/9//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB4AAHweAAB8HgAAfB4AAHweAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4P4AAfH/gAHx/gAB8fgAAfHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAG4AAABuAAAA7wAAAe+AAAPvgAAD78AAB+/gAA/n8AAPw/AAH4P4AD+B/AA/APwAPgB8AD4AfAA8ADwAOAAcADAAHAAwAAwAIAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYYAAAOOAAADzwAAA88AAAPPAAADzwAAA88AAAPPAAADzwAAA88AAAPPAAADzwAAA88AAAPPAAADjgAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAEADAADAA4ABwAOAA8ADwAPAA+AHwAPwD8AD8A/AA/gfgAH8P4AA/H8AAH5+AAB+/gAAPvwAAB74AAAO8AAADvAAAAbgAAACwAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAAAADwAAAA8AB/8vAAP/fwAN/n8AHPx/AB4ALwAeAA8AHgAPAB4ADwAeAA7/3AAN/+gAC//wAAP/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/9//z//P/7f/p/87/3P/PAB5/DwAeAA8AHgAPAB4ADwAeAA8AHgAPAB4ADwAeAA8AHgAPf97/jv/t/83/6//j//f/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//3//P/8//t/+n/zv/c/98AHn8/AB4AfwAeAH8AHgB/AB4AfwAeAH8AHgB/AB4AfwAeAH9/3v++/+3/3f/r/+P/9//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//3//n/4//u/8H/33+A/78AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH4AAAA8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/9//z//P/7f/h/87/wP/fAAB/PwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/f8D/vv/h/93/4//j//f/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/9//5/+P/7v/N/99/nv+/AB4AfwAeAH8AHgB/AB4AfwAeAH8AHgB/AB4AfwAeAH8AHgB+ABwAPAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//3//n/4//u/+3/z//e/48AHgAPAB4ADwAeAA8AHgAPAB4ADwAeAA8AHgAPAB4ADwAeAA4AHAAMAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/9//z//P/7f/p/87/3P/fAB5/PwAeAH8AHgB/AB4AfwAeAH8AHgB/AB4AfwAeAH8AHgB/AB7/vgAN/9wAC//gAAf/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//f/8//z/+H/6f/A/9z/wAAefwAAHgAAAB4AAAAeAAAAHgAAAB4AAAAeAAAAHgAAAB4AAH/e/4D/7f/B/+v/4//3//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8D/gf/h/8P/8//j//f/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAADgAAAB4AAAAeAAAAHj/wP+Z/+H/y//z/+P/9//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//3//H/6//g/83/wH+e/4AAHAAAAEyAAADAwAABwOAAA8DwAAfA+AAPwPwAP4B+AH4APwD8AB+B+AAPwfAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//f/8f/j/+j/wf/Yf4D/uAAAAHgAAAB4AAAAeAAAAHgAAAB4AAAAeAAAAHgAAAB4AAAAeAAAADgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD3/v/++/x//H/8P/h/+B/wPwAAAB+AAAAPgAAAB8AAAAPAAAAAwAAAA8AAAAfAAAAHwAAAD4AAAB8AAAA+AAAAf/gf8P/8P/j//n/89/7//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/+//x//H/4P/g/8B/wH+AAAAAAH+AAAAf4AAAB/AAAAP8AAAA/wAAAD+AAAAf4AAAB/gAAAH8AAAA/gAAAAAAf8D/wP/h/+H/8//z//v/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//f/8//z/+3/4f/O/8D/3wAAfz8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAf3/A/77/4f/d/+P/4//3//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/9//z//P/7f/p/+7/3P/PAB5/DwAeAA8AHgAPAB4ADwAeAA8AHgAPAB4ADwAeAA8AHgAPf94ADv/MAA3/6AAD//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//3//P/8//t/+H/zv/A/98AAH8/AAAAfwAAAH8AAAH/AAAD/wAAB/8AAA//AAAffwAADn9/wP++/+H/3f/j/+P/9//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//f/8//z/+3/6f/u/9z/zwAefw8AHgAPAB6ADwAewA8AHuAPAB7wDwAe+A8AHvwPAB5+D3/ePw7/zB+N/+gPw//wAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8AAD//AADf/oAA7/3AAfAB4APwAeAH8AHgB/AB4AfwAeAH8AHgB/AB4AfwAeAH8AHgB/AB7/vgAN/9wAC//gAAf/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAA4AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA//wP+P/+H/z//z/+//9///AAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/9//z//P/4f/h/8j/wP/YAAB/OAAAAHgAAAB4AAAAeAAAAHgAAAB4AAAAeAAAAHgAAAB4f8D/uP/h/9n/4//r//f/8AAAAAAAAAAAAAAAAAAAAAAAAAAD/gAAAP+AAAA/4AAAD/gAAAP+AAAA/4AAAD/gAAAP+AAAA/4AAAD/gAAAP+AAAA/wAAAAAAAAAAAAAB/wAAB/wAAB/wAAB/wAAB/wAAB/wAAB/wAAB/wAAB/wAAB/wAAB/wAAA/wAAAAAAAAAAAAAAf/4AAn/+/94//H++H/g//g/wH/wAAAH4AAAB8AAAA+AAAAPAAAAHgAAAAwAAAAeAAAAHwAAAA+AAAAPwAAAB+AAAAPgf+D98P/x/vn/+/97//v/uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAD+H8AB/A/gA/gD+AfwAfwfwAD+P4AAf38AAD/+AAAP/AAAB/AAAA/4AAAf/AAAP/4AAH8/AAD8H8AD+A/gB/AH8A/gA/gfwAH8PwAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAfh/AAP4P4AP4B/AP8AP4H8AB/H8AAP/+AAB/+AAAP+AAAB/AAAB/AAAB/AAAA/gAAA/gAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8MAAD+TgAB/M8AA/nPgA/jz4Afw8+AP4PPgH4Dz4H8A8+D+APPh/ADz4/AA88/gAHOfwAAzP4AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//3//n/8//t/+H/3v/A/78AAAB/AAAAfwAAAH4AAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAAD/gAAAP+AAAA/4AAAD/gAAAP+AAAA/4AAAD/gAAAP+AAAA/4AAAD/gAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAAAAHgAAAD8AAAB/AAAAf3+Afz7/wf/d/+H/4//z/+P/9//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"), 32, atob("GhoaGhoaGhoaGhoaAxoDGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho="), 32+(scale<<8)+(1<<16)); + return this; +}; +Graphics.prototype.setFontDigitalNumbersSmall = function(scale) { + // Actual height 16 (15 - 0) + this.setFontCustom(atob("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"), 32, atob("DQ0NDQ0NDQ0NDQ0NAg0CDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0="), 16+(scale<<8)+(1<<16)); + return this; +}; + +Graphics.prototype.setFontArkitechLight = function(scale) { + // Actual height 10 (10 - 1) + this.setFontCustom(atob("AAAAAAAAAAAAAAP0AAAAAAMAMAMAAAEgPwPwEgPwEgEgAAAAGEPEJEf+f+JEf+JEJsI4AAAAOAKAKEKMO4HgG8ckQkAkA8AYAAAAG4PsJEJEJEJEJEJEJEJEJ8BABAAAMAAAAAP8f+QCQCAAAAQCQCf+H4AAEAPAfAfAPAAAAABABAH4H4BABAAAAAAGAEAABABABABABABAAAAAAEAEAAAGAcBwHAcAQAAAH4OcIEIEIEIEIEIEIEIEMMH4DwIAIAP8H8AAAAGcO0IkIkIkIkIkJkJEJEJEPEAAAAMMNMJEJEJEJEJEJEJEJEJEP8AAAAAgBgDgGgMgIgAgAgAgAgP8P8AAPYLMJEJEJEJEJEJEJEJEJEJ8AAAAP8JMJEJEJEJEJEJEJEJEJEN8AAAAIEIEIMIIIYIQIgJgJALAOAAAAAP8JEJEJEJEJEJEJEJEJEJEP8AAAAPMJMJEJEJEJEJEJEJEJEJEP8AAAABEAAAABGBEAAAABACgCgEQEQIIAAAACQCQCQCQCQCQAAAAMYEQGwCgDgBAAAOAMAIAI0J0JAJAJAJAPAHAAAP4IIP4MYMYMYMYMYP4IYP4AAAAH8NAJAJAJAJAJAJAJANAH8AAAAP8JEJEJEJEJEJEJEJEJsO4AAAAH4OYIEIEIEIEIEIEIEIEIEAAP8IEIEIEIEIEIEIEIEMMH4AAAAH4FYJEJEJEJEJEJEJEJEJEAAAAH8NAJAJAJAJAJAJAJAJAIAAAH4OYIEIEIEIEJEJEJEBMB4AAAAP8BABABABABABABABAP8P8AAP8AAAAAwAYAEAEAEAEAEAEAMP4PwAAP8BABABABABABABABgO8OcAAAAP4AYAEAEAEAEAEAEAEAEAEAAP8IAMAHABwAcAEAcBwHAMAIAP8AAAAP8IAMAGADABgAwAYAMAEP8AAAAH4OcIEIEIEIEIEIEIEIEIEMMH4BgAAP8IgIgIgIgIgIgIgIgIgPgHAAAH4OcIEIEIEIEIEIEIEIEIEMMH8BkAAP8IgIgIgIgIgIgIgIwI4PsHEAACAPEJEJEJEJEJEJEJEJEJ8A4AAIAIAIAIAIAP8IAIAIAIAIAAAP4AcAEAEAEAEAEAEAMP4PwAAIAMAGADgAwAYAMAcAwBgDAOAIAIAAAP4AcAEAEAEAEAEAMP4P4AMAEAEAEAEAEAMP4AAAAOcGwBABABABABABADgO8McAAPADgAgAgAgA8AgAgBgPAOAAAIcIUI0IkIkJkJEJELEKEOEAAAAf+QCQCAAQAYAGABgAcAGACAAQCf+f+AA"), 32, atob("BQUECQwODgMGBgYIAwgDBw4FDg4NDg4NDg4DBAgIBwwNDQ0MDQ0MDQwDDA0MDw0PDQ8ODAwNDhQMDA0FBwU="), 12+(scale<<8)+(1<<16)); + return this; +}; + +var nasa = require("heatshrink").decompress(atob("jEUwcCpMkyQBBqQFCAQOJAgQIEAgclAYUipdkBoWlkVJiVZkofDiVIyVZkmypMmAwIIDy1JyVEBAmTsmQiQKB/1bvnPlP8yQIB3/Z/0P5t8BAWz9s/yfbnoIC6VLtua5ctBANAIgMsiRcCGoVJkYCBsmUBAVIOAYIBMQNBBAekOgUJBA0gQw6YJVQwA=")); + +var runner = require("heatshrink").decompress(atob("kEgwINKhwDCj4DKB4UH+ADBh/4mAOB/wDBjn/BgM5//gAYPxAYMz+HAgEDAwIfBAYYKBEYIDGjoPCnlwGQU4GQPwAYMP8ADBAAIDXAAo")); + +var calendar = require("heatshrink").decompress(atob("j0ZwMAv////7BQU4AYVgAQMBwADBgwKCjgDCDAIABBw0Yg0xx1gjHGnOAocIowODwkwwlnBwWcscY8wODAYQOB4EBBwIsBmOMBwlwAQMDLIX4A==")); + +var heartImageData = require("heatshrink").decompress(atob("//z/4CD4EPAQgOBAQXggEfAQXwgEDAQX4EIN4AQN8AQMMAQMPGAkDwAGEsAFEjAFEgwFEgIYkjgFEh4SEgZmBDwf8RAoSEv5zBAAU//wFDj6MCFQX/QYUAg6iBGAYFBGQUBAoIyDAoIyDv4FBGQU/AoIyCGALICGAQABGQIwCGQQwCGQQwCGQYFDGQIwCGQQwCGQQwDAAPPAogiD")); + +var colorPaletteActive = new Uint16Array([g.toColor(1,0,0), g.toColor(1,1,1)]); +var colorPaletteInactiveLightBg = new Uint16Array([g.toColor(0,0,0), g.toColor(1,0,1)]); +var colorPaletteInactiveDarkBg = new Uint16Array([g.toColor(1,1,1), g.toColor(1,0,1)]); + +var light = require("heatshrink").decompress(atob("iEQwIEB8EBAIPAgYBBwABBg/gAIILBgOAAIUAgQBCAAY")); + +var planet = require("heatshrink").decompress(atob("5F9wZC/AH4A/AH4AugMkyVJkmAIv4AEI4JKCAQJG/AAUCJQ0kyBJ/JROSpAgVhIcEJUcSJRACBwAdQgIcJJVp7QWRKYjJRlJDZsEDJQCCkBKePBjjNbpQcRJUOSoAaJDJzjgJR7jJI54CCpBLdGCDGGghKSpMgJUkAgLjMhJHREogAbGYxWLVigCFyBKhpAMFPZECJS2SJTbXFaggACIQp7BiRKXOYwAVJRhZFyEEI6r9HJUoABBwWAI64CCkBKaQIhKKbYT0FASyWbEIdIB5UJkEJJTeAJTSGCJRgABI7ICCyBKagQhDCCACZcLZKuoBKahIhCkDxOJW0BEIYPKI7YCCpDhbEIeABpEEJT1JJTY8DyBYMATkgJbYhDJX4AGiRKKgJKgkhKbgQhCoALGhJKhwBLbEIVIJVOQJTY/DKpJK8gIhCkBKoyRKbgAhDBAkCJX8Agi3HJUlAJbhsHiRK/IQohDJUlIJTkAEIxK/AAcJEgToGJX8BEgUgJUxzDADYkDJX4AHEgWQJX4AGiQkCAggChkBKegQkCoAEDJX4ABgwkCpEAJX4AFgIkCgEJJUckJT8AN4ZPDJX4ACggkCwBK/AA0SEgOQgBK/AAsCE4RPDJX4ADE4VIAgYCfwBKhgInCgEJJX4AFE4UgJ4ZK/R4ICBE4cEJX5KDkEAiQnByBPDJX8JEYQqCoECJX5KDSIIDByVIJ4ZK/SIUBFQUgAgZK/SIUEFQUAJX5KDSIMAFQTnBJX5KDSIMCFoUAiRK/EwaRBFoTnBJX4pEgEBc4YLFJXyRBc4hK/FIgIBc4cEJX4pEgESc4YEDJXEBFJDnDgRK/AQgJEUhBK8pEAc4hK/AQgLBAwWQghK/AQkAiTnDAgYCTJMBKLO4LnDgRK/AQkAhIGCkAEDJSeQJcAvKoAMECJZKLDwRKppINBAwR9BJScgCoNIJVZ6BiScDAgZKSNIRKqwEAAwR9BJScENIYAdEQYCJgEBGwYEDJSZpBJVVAUomAChoCDFAL2CyCWeGR6cEG4QXPgQXDJVckGQlIAgZKOgC0EJVbEBHIkJJRtIFAQSDJTrLPgEBTghKRC4cgJVg1BgicEChjZEMQgAbgRKOPIQ8EC5hKEC4eAJVh5BCQkAhL1LYA6tBADZKQFwJFEaAhKMMQZKtZwRRFLhQqIdQoAWZBYCGCgKKEfZBKHFQZKukBFEpAaIwAqGgIbEADIfDAR47BIojoEJRQPEJV2SoAVEbAIOFFZEEK5YASJSbcBGoZRBgDvFABBfEADI0EAR4+BiQGDWYgrKDYZKvY4TbGJRhfDVQIAZJSh8BSAbOCgTsBABMCfggAZZQgCQPgKuEQZz1EADJqDASRjGkBKrD4gCSwAYFAwIAKhJcQABofDAScAgLqGABIREJTQxFASNIDQLqGFRqnMABxKWIYUCcZxKEyBKaghKWIYT8FcZDAFJTTHFASaxHJVLHFJShmGagxKFUhAATJSxAEBgtIE4jvFBYoAWEQoCQRJRXEXoxKcgBKUkAcGDCBKcFyJ8KRgxKnFyACBDhLjHVx4AWhJKPwAcKghKsgDEcWhxKegESFxdADhzjNJT7jLbpYAGJVguJDihKtADpKIkBJ/AAMCJX6YQpBF/AH4A/AH4Au")); + +const APP_NAME = "spaceclock"; +const HEADER_LINE_Y = 25; +const HEADER_TEXT_X = 5; +const HEADER_TEXT_Y = 7; +const MAIN_IMAGE_X = 13; +const MAIN_IMAGE_Y = 70; +const BATTERY_IMAGE_X = 112; +const BATTERY_IMAGE_Y = 4; +const BATTERY_CIRCLE_X = 120; +const BATTERY_CIRCLE_Y = 11; +const BATTERY_CIRCLE_RAD = 10; +const BATTERY_TEXT_X = 134; +const BATTERY_TEXT_Y = 5; +const TIME_X = 0; +const TIME_Y = 33; +const DATE_X = 12; +const DATE_Y = 125; +const WEEKDAY_X = 130; +const WEEKDAY_Y = 30; +const TEMPERATURE_X = 130; +const TEMPERATURE_Y = 50; +const HEART_IMAGE_X = 137; +const HEART_IMAGE_Y = 71; +const HEART_RATE_X = 127; +const HEART_RATE_Y = 99; +const FOOTER_LINE_Y = 150; +const FOOTER_TEXT_LEFT_X = 5; +const FOOTER_TEXT_RIGHT_X = 105; +const FOOTER_TEXT_Y = 160; +const FOOTER_IMAGE_X = 75; +const FOOTER_IMAGE_Y = 154; +const RUNNER_IMAGE_X = 90; +const RUNNER_IMAGE_Y = 117; +const STEPS_TEXT_X = 130; +const STEPS_TEXT_Y = 128; + + +const isDarkBg = g.getBgColor() === 0; +const weekdays = ["SUN","MON","TUE","WED","THU","FRI","SAT"]; + +const drawHeader = () => { + g.setFontArkitechLight(1); + g.drawString("ASTEROID", HEADER_TEXT_X, HEADER_TEXT_Y); + g.drawLine(0,HEADER_LINE_Y, g.getWidth(),HEADER_LINE_Y); +}; + +const drawMainImage = ()=>{ + g.drawImage(planet,MAIN_IMAGE_X, MAIN_IMAGE_Y,{scale:0.4}); +}; + +const drawBattery = ()=>{ + const battery = Math.round(E.getBattery()); + g.drawImage(light,BATTERY_IMAGE_X, BATTERY_IMAGE_Y); + g.drawCircle(BATTERY_CIRCLE_X,BATTERY_CIRCLE_Y,BATTERY_CIRCLE_RAD); + g.setFontDigitalNumbersSmall(1); + g.drawString(battery,BATTERY_TEXT_X,BATTERY_TEXT_Y); +}; + +const drawTime = ()=>{ + const date = new Date(); + const month = date.getMonth()+1; + const day = date.getDate(); + const hour = date.getHours(); + const minute = date.getMinutes(); + const weekdayInt = date.getDay(); + + // Time + g.setFontDigitalNumbersRegular(1); + g.drawString( ("0" + hour).substr(-2), TIME_X, TIME_Y); + g.drawString(":",TIME_X + 43,TIME_Y); + g.drawString(("0" + minute).substr(-2),TIME_X + 60,TIME_Y); + + // Date + g.setFontDigitalNumbersSmall(1); + g.drawString(("0" + day).substr(-2) + "-" + ("0" + month).substr(-2), DATE_X, DATE_Y); + + // Weekday + g.setFontDigitalNumbersSmall(1); + g.drawString(weekdays[weekdayInt], WEEKDAY_X, WEEKDAY_Y); +}; + +const drawHeart = (isHRMOn) =>{ + var palette; + + if (isHRMOn){ + palette = colorPaletteActive; + } else { + palette = isDarkBg ? colorPaletteInactiveDarkBg : colorPaletteInactiveLightBg; + } + + var heart = { + width : 50, height : 43, bpp : 1, + buffer : heartImageData, + palette: palette, + transparent: 1 + }; + + g.drawImage(heart, HEART_IMAGE_X, HEART_IMAGE_Y,{scale:0.5}); + +}; + +const drawSteps = () => { + var steps = Bangle.getHealthStatus("day").steps; + const stepsRaw = Math.round(steps/1000); + const decimal = stepsRaw >=10 ? 0 : 1; + steps =stepsRaw.toFixed(decimal) + "K"; + console.log(steps); + g.setFontDigitalNumbersSmall(1); + g.drawString(steps, STEPS_TEXT_X, STEPS_TEXT_Y); + g.drawImage(runner, RUNNER_IMAGE_X, RUNNER_IMAGE_Y,{scale:0.9}); + +}; + +const drawFooter = ()=>{ + g.drawLine(0, FOOTER_LINE_Y, g.getWidth(), FOOTER_LINE_Y); + g.setFontArkitechLight(1); + g.drawString("SPACE", FOOTER_TEXT_LEFT_X, FOOTER_TEXT_Y); + g.drawString("RESIST", FOOTER_TEXT_RIGHT_X,FOOTER_TEXT_Y); + g.drawImage(nasa, FOOTER_IMAGE_X, FOOTER_IMAGE_Y); +}; + +const drawTemp = () => { + Bangle.getPressure().then((measure) => { + if (measure){ + g.clearRect(TEMPERATURE_X, TEMPERATURE_Y - 2,TEMPERATURE_X + 40, TEMPERATURE_Y+18); + const temp = Math.round(measure.temperature); + g.setFontDigitalNumbersSmall(1); + g.drawString(temp + "C", TEMPERATURE_X, TEMPERATURE_Y); + }}).catch((reason) => { + console.log("Error in getPressure(): " + reason); + }); +}; + +const drawHeartRate =(hrm, isOn)=>{ + const x = ((hrm < 100) || !hrm) ? HEART_RATE_X + 8 : HEART_RATE_X; + const measure = hrm ? hrm : "--"; + g.clearRect(HEART_RATE_X, HEART_RATE_Y - 5, HEART_RATE_X + 42, HEART_RATE_Y + 18); + g.setFontDigitalNumbersSmall(1); + g.drawString(measure, x, HEART_RATE_Y); +}; + +var drawTimeout; +const queueDraw = () => { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); +}; + +const clearIntervals = () => { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; +}; + +const draw = ()=>{ + queueDraw(); + + g.clear(1); + const whiteOrBlack = isDarkBg? 1 : 0; + g.setColor(whiteOrBlack, whiteOrBlack, whiteOrBlack); + + drawHeader(); + drawMainImage(); + drawFooter(); + drawHeart(Bangle.isHRMOn()); + drawHeartRate(null, Bangle.isHRMOn()); + drawTime(); + drawBattery(); + drawSteps(); + drawTemp(); +}; + +Bangle.on('HRM',(hrm)=>{ + drawHeartRate(hrm.bpm, Bangle.isHRMOn()); +}); + +Bangle.on('touch',(button, xy)=>{ + // Toggle Heartrate + if (xy.x > 127 && xy.x < 167 && xy.y >71 && xy.y < 119) { + Bangle.setHRMPower(!Bangle.isHRMOn(),APP_NAME ); + console.log("Setting HRM to: " + Bangle.isHRMOn()); + drawHeart(Bangle.isHRMOn()); + } +}); + +Bangle.on("lcdPower", (on) => { + if (on) { + draw(); + } else { + clearIntervals(); + } +}); + +Bangle.on("lock", (locked) => { + clearIntervals(); + draw(); +}); + +Bangle.setUI({mode:"clock"}); +Bangle.setBarometerPower(true, APP_NAME); +Bangle.setHRMPower(true,APP_NAME); + +draw();