Advertisement
dw_BLITZKRIEG

Untitled

May 23rd, 2025
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 229.31 KB | Source Code | 0 0
  1. ~ function() {
  2.   "use strict";
  3.   var I = I || {};
  4.   I.scope = {};
  5.   I.checkStringArgs = function(r, p, w) {
  6.     if (null == r)
  7.       throw new TypeError(
  8.         "The 'this' value for String.prototype." +
  9.           w +
  10.           " must not be null or undefined"
  11.       );
  12.     if (p instanceof RegExp)
  13.       throw new TypeError(
  14.         "First argument to String.prototype." +
  15.           w +
  16.           " must not be a regular expression"
  17.       );
  18.     return r + "";
  19.   };
  20.  
  21.   I.ASSUME_ES5 = !1;
  22.   I.ASSUME_NO_NATIVE_MAP = !1;
  23.   I.ASSUME_NO_NATIVE_SET = !1;
  24.   I.SIMPLE_FROUND_POLYFILL = !1;
  25.   I.defineProperty =
  26.     I.ASSUME_ES5 || "function" == typeof Object.defineProperties
  27.       ? Object.defineProperty
  28.       : function(r, p, w) {
  29.           r != Array.prototype && r != Object.prototype && (r[p] = w.value);
  30.         };
  31.   I.getGlobal = function(r) {
  32.     return "undefined" != typeof window && window === r
  33.       ? r
  34.       : "undefined" != typeof global && null != global
  35.       ? global
  36.       : r;
  37.   };
  38.   I.global = I.getGlobal(this);
  39.   I.polyfill = function(r, p) {
  40.     if (p) {
  41.       var w = I.global;
  42.       r = r.split(".");
  43.       for (var a = 0; a < r.length - 1; a++) {
  44.         var e = r[a];
  45.         e in w || (w[e] = {});
  46.         w = w[e];
  47.       }
  48.       r = r[r.length - 1];
  49.       a = w[r];
  50.       p = p(a);
  51.       p != a &&
  52.         null != p &&
  53.         I.defineProperty(w, r, {
  54.           configurable: !0,
  55.           writable: !0,
  56.           value: p
  57.         });
  58.     }
  59.   };
  60.   I.stringPadding = function(r, p) {
  61.     r = void 0 !== r ? String(r) : " ";
  62.     return 0 < p && r ? r.repeat(Math.ceil(p / r.length)).substring(0, p) : "";
  63.   };
  64.   I.polyfill(
  65.     "String.prototype.padStart",
  66.     function(r) {
  67.       return r
  68.         ? r
  69.         : function(p, w) {
  70.             var a = I.checkStringArgs(this, null, "padStart");
  71.             return I.stringPadding(w, p - a.length) + a;
  72.           };
  73.     },
  74.     "es8",
  75.     "es3"
  76.   );
  77.   I.owns = function(r, p) {
  78.     return Object.prototype.hasOwnProperty.call(r, p);
  79.   };
  80.   I.polyfill(
  81.     "Object.entries",
  82.     function(r) {
  83.       return r
  84.         ? r
  85.         : function(p) {
  86.             var w = [],
  87.               a;
  88.             for (a in p) I.owns(p, a) && w.push([a, p[a]]);
  89.             return w;
  90.           };
  91.     },
  92.     "es8",
  93.     "es3"
  94.   );
  95.   I.polyfill(
  96.     "Object.values",
  97.     function(r) {
  98.       return r
  99.         ? r
  100.         : function(p) {
  101.             var w = [],
  102.               a;
  103.             for (a in p) I.owns(p, a) && w.push(p[a]);
  104.             return w;
  105.           };
  106.     },
  107.     "es8",
  108.     "es3"
  109.   );
  110.   I.polyfill(
  111.     "Array.prototype.includes",
  112.     function(r) {
  113.       return r
  114.         ? r
  115.         : function(p, w) {
  116.             var a = this;
  117.             a instanceof String && (a = String(a));
  118.             var e = a.length;
  119.             w = w || 0;
  120.             for (0 > w && (w = Math.max(w + e, 0)); w < e; w++) {
  121.               var E = a[w];
  122.               if (E === p || Object.is(E, p)) return !0;
  123.             }
  124.             return !1;
  125.           };
  126.     },
  127.     "es7",
  128.     "es3"
  129.   );
  130.   (function(r) {
  131.     function p(a) {
  132.       if (w[a]) return w[a].exports;
  133.       var e = (w[a] = {
  134.         i: a,
  135.         l: !1,
  136.         exports: {}
  137.       });
  138.       r[a].call(e.exports, e, e.exports, p);
  139.       e.l = !0;
  140.       return e.exports;
  141.     }
  142.     var w = {};
  143.     p.m = r;
  144.     p.c = w;
  145.     p.d = function(a, e, E) {
  146.       p.o(a, e) ||
  147.         Object.defineProperty(a, e, {
  148.           enumerable: !0,
  149.           get: E
  150.         });
  151.     };
  152.     p.r = function(a) {
  153.       "undefined" !== typeof Symbol &&
  154.         Symbol.toStringTag &&
  155.         Object.defineProperty(a, Symbol.toStringTag, {
  156.           value: "Module"
  157.         });
  158.       Object.defineProperty(a, "__esModule", {
  159.         value: !0
  160.       });
  161.     };
  162.     p.t = function(a, e) {
  163.       e & 1 && (a = p(a));
  164.       if (e & 8 || (e & 4 && "object" === typeof a && a && a.__esModule))
  165.         return a;
  166.       var E = Object.create(null);
  167.       p.r(E);
  168.       Object.defineProperty(E, "default", {
  169.         enumerable: !0,
  170.         value: a
  171.       });
  172.       if (e & 2 && "string" != typeof a)
  173.         for (var x in a)
  174.           p.d(
  175.             E,
  176.             x,
  177.             function(e) {
  178.               return a[e];
  179.             }.bind(null, x)
  180.           );
  181.       return E;
  182.     };
  183.     p.n = function(a) {
  184.       var e =
  185.         a && a.__esModule
  186.           ? function() {
  187.               return a["default"];
  188.             }
  189.           : function() {
  190.               return a;
  191.             };
  192.       p.d(e, "a", e);
  193.       return e;
  194.     };
  195.     p.o = function(a, e) {
  196.       return Object.prototype.hasOwnProperty.call(a, e);
  197.     };
  198.     p.p = "";
  199.     return p((p.s = 0));
  200.   })([
  201.     function(r, p, w) {
  202.       function a() {
  203.         window.dataLayer.push(arguments);
  204.       }
  205.       //here are the color codes
  206.       function e(b) {
  207.         switch (b) {
  208.           case 0:
  209.             return l.teal;
  210.           case 1:
  211.             return l.lgreen;
  212.           case 2:
  213.             return l.orange;
  214.           case 3:
  215.             return l.yellow;
  216.           case 4:
  217.             return l.lavender;
  218.           case 5:
  219.             return l.pink;
  220.           case 6:
  221.             return l.vlgrey;
  222.           case 7:
  223.             return l.lgrey;
  224.           case 8:
  225.             return l.guiwhite;
  226.           case 9:
  227.             return l.black;
  228.           case 10:
  229.             return l.blue;
  230.           case 11:
  231.             return l.green;
  232.           case 12:
  233.             return l.red;
  234.           case 13:
  235.             return l.gold;
  236.           case 14:
  237.             return l.purple;
  238.           case 15:
  239.             return l.magenta;
  240.           case 16:
  241.             return l.grey;
  242.           case 17:
  243.             return l.dgrey;
  244.           case 18:
  245.             return l.white;
  246.           case 19:
  247.             return l.guiblack;
  248.           case 20:
  249.             return "#a913cf";
  250.           case 21:
  251.             return "#226ef6";
  252.           case 22:
  253.             return "#ff1000";
  254.           case 23:
  255.             return "#ff9000";
  256.           case 24:
  257.             return "#00e00b";
  258.           case 25:
  259.             return "#ffd300";
  260.           case 26:
  261.             return "#226ef6";
  262.           case 27:
  263.             return "#3761D1";
  264.           case 28:
  265.             return "#AB1515";
  266.           case 29:
  267.             return "#44AA34";
  268.           case 30:
  269.             return 150 > Date.now() % 300 ? l.red : l.blue;
  270.           case 31:
  271.             return 150 > Date.now() % 300 ? l.blue : l.red;
  272.           case 32:
  273.             return "#ff1000";
  274.           case 33:
  275.             return "#ff9000";
  276.           case 34:
  277.             return "#00e00b";
  278.           case 35:
  279.             return "#fffb00";
  280.           case 36: //rainbow baby yeah
  281.             return T(
  282.               [
  283.                 "#ff1000",
  284.                 "#ff9000",
  285.                 "#ffd300",
  286.                 "#00e00b",
  287.                 "#226ef6",
  288.                 "#a913cf"
  289.               ][Math.floor((Date.now() / 200) % 6)],
  290.               [
  291.                 "#ff9000",
  292.                 "#ffd300",
  293.                 "#00e00b",
  294.                 "#226ef6",
  295.                 "#a913cf",
  296.                 "#ff1000"
  297.               ][Math.floor((Date.now() / 200) % 6)],
  298.               (Date.now() / 200) % 1
  299.             );
  300.           //["#ff1600","#ff2b00","#ff4100","#ff5700","#ff6c00","#ff8200","#ff9700","#ffad00","#ffc300","#ffd800"]
  301.           case 37:
  302.             return "#FFFF00";
  303.           case 38:
  304.              return T(
  305.               [
  306.                 "#ffffff",
  307.                 "#000000",
  308.               ][Math.floor((Date.now() / 400) % 2)],
  309.               [
  310.                 "#000000",
  311.                 "#ffffff"
  312.               ][Math.floor((Date.now() / 400) % 2)],
  313.               (Date.now() / 400) % 1
  314.             );
  315.           case 39:
  316.             return "#A177FC";
  317.           case 40:
  318.             return "#000000";
  319.             case 41:
  320.             return "#ffffff";
  321.             case 42:
  322.             return "#A277FB";
  323.             case 43:
  324.             return "#FF7F00";
  325.             case 44:
  326.             return T(
  327.               [
  328.                 "#b493d3",
  329.                 "#ffe6f4",
  330.               ][Math.floor((Date.now() / 400) % 2)],
  331.               [
  332.                 "#ffe6f4",
  333.                 "#b493d3"
  334.               ][Math.floor((Date.now() / 400) % 2)],
  335.               (Date.now() / 400) % 1
  336.             );
  337.               case 45:
  338.             return "#b493d3";
  339.               case 46:
  340.             return "#ffe6f4";
  341.               case 47:
  342.             return "#008080";
  343.           case 48:
  344.             return "#8FFF00";
  345.           case 49:
  346.             return "#FEFCAA";
  347.           case 50:
  348.             return "#d21fff";
  349.           case 51:
  350.             return "#B35ED8";
  351.           case 52:
  352.             return "#0531CB";
  353.           case 69:
  354.             return "#ff0000";
  355.           default:
  356.             return "#ff0000";
  357.         }
  358.       }
  359.  
  360.       function E(b) {
  361.         let d = B.graphical.neon ? l.white : l.black; // L:WHITE L: BLACK   BORDER COLOR
  362.         return B.graphical.darkBorders ? d : T(b, d, l.border);
  363.       }
  364.       //here are the map colors
  365.       function x(b) {
  366.         switch (b) {
  367.           case "bas1":
  368.           case "bap1":
  369.           case "dbc1":
  370.           case "mbc1":
  371.             return l.blue;
  372.           case "bas2":
  373.           case "bap2":
  374.           case "dbc2":
  375.           case "mbc2":
  376.             return l.green;
  377.           case "bas3":
  378.           case "bap3":
  379.           case "dbc3":
  380.           case "mbc3":
  381.             return l.red;
  382.           case "bas4":
  383.           case "bap4":
  384.           case "dbc4":
  385.           case "mbc4":
  386.             return l.pink;
  387.           case "domx":
  388.           case "dom0":
  389.           case "dom1":
  390.           case "dom2":
  391.           case "dom3":
  392.           case "dom4":
  393.           case "dom5":
  394.           case "dbc0":
  395.           case "mbc0":
  396.             return l.yellow;
  397.           case "port":
  398.             return (g.globalAlpha = 1), l.black;
  399.           case "edge":
  400.             return T(l.white, l.guiblack, 1 / 3);
  401.           case "dor1":
  402.             return l.vl;
  403.           case "nest":
  404.             return l.lavender;
  405.           default:
  406.             return l.white;
  407.         }
  408.       }
  409.  
  410.       function k(b, n) {
  411.         B.graphical.neon
  412.           ? ((b.fillStyle = E(n)), (b.strokeStyle = n))
  413.           : ((b.fillStyle = n), (b.strokeStyle = E(n)));
  414.       }
  415.  
  416.       function D(b, n = M[b].color) {
  417.         let c = M[b];
  418.         return {
  419.           time: 0,
  420.           index: b,
  421.           x: c.x,
  422.           y: c.y,
  423.           vx: 0,
  424.           vy: 0,
  425.           size: c.size,
  426.           realSize: c.realSize,
  427.           color: "n", //n
  428.           render: {
  429.             status: {
  430.               getFade: () => 1,
  431.               getColor: () => "#ffffff",  //ffffff
  432.               getBlend: () => 0,
  433.               health: {
  434.                 get: () => 1
  435.               },
  436.               shield: {
  437.                 get: () => 1,
  438.               }
  439.             }
  440.           },
  441.           facing: c.facing,
  442.           shape: c.shape,
  443.           name: c.name,
  444.           score: 0,
  445.           tiggle: 0,
  446.           layer: c.layer,
  447.           guns: {
  448.             length: c.guns.length,
  449.             getPositions: () => Array(c.guns.length).fill(0),
  450.             update: () => {}
  451.           },
  452.           turrets: c.turrets.map(b => {
  453.             let d = D(b.index);
  454.             d.realSize = (d.realSize / d.size) * c.size * b.sizeFactor;
  455.             d.size = c.size * b.sizeFactor;
  456.             d.angle = b.angle;
  457.             d.offset = b.offset;
  458.             d.direction = b.direction;
  459.             d.facing = b.direction + b.angle;
  460.    
  461.             return d;
  462.           })
  463.         };
  464.       }
  465.  
  466.       function R(d, n, c, h = !1) {
  467.         let a = ma();
  468.         c += B.graphical.borderChunk;
  469.         return h
  470.           ? ((a *= 2),
  471.             d > -b.screenWidth / a - c &&
  472.               d < b.screenWidth / a + c &&
  473.               n > -b.screenHeight / a - c &&
  474.               n < b.screenHeight / a + c)
  475.           : d > -c &&
  476.               d < b.screenWidth / a + c &&
  477.               n > -c &&
  478.               n < b.screenHeight / a + c;
  479.       }
  480.  
  481.       function q(b, n, c = 3) {
  482.         let d = Date.now(),
  483.           a = b,
  484.           y = b;
  485.         return {
  486.           set: c => {
  487.             b !== c && ((y = a), (b = c), (d = Date.now()));
  488.           },
  489.           get: () => {
  490.             let h = (Date.now() - d) / 1e3;
  491.             return (a = h < n ? y + (b - y) * Math.pow(h / n, 1 / c) : b);
  492.           }
  493.         };
  494.       }
  495.  
  496.       function C(b) {
  497.         try {
  498.           var d = b.replace(/\s+/g, "");
  499.           2 == d.length % 4 ? (d += "==") : 3 == d.length % 4 && (d += "=");
  500.           let h = atob(d);
  501.           d = "Unknown Theme";
  502.           let a = "";
  503.           var c = h.indexOf("\x00");
  504.           if (-1 === c) return null;
  505.           d = h.slice(0, c) || d;
  506.           h = h.slice(c + 1);
  507.           c = h.indexOf("\x00");
  508.           if (-1 === c) return null;
  509.           a = h.slice(0, c) || a;
  510.           h = h.slice(c + 1);
  511.           let n = h.charCodeAt(0) / 255;
  512.           h = h.slice(1);
  513.           let f = Math.floor(h.length / 3);
  514.           if (2 > f) return null;
  515.           c = [];
  516.           for (let b = 0; b < f; b++) {
  517.             let d = h.charCodeAt(3 * b),
  518.               f = h.charCodeAt(3 * b + 1),
  519.               a = h.charCodeAt(3 * b + 2);
  520.             c.push(
  521.               "#" + ((d << 16) | (f << 8) | a).toString(16).padStart(6, 0)
  522.             );
  523.           }
  524.           return {
  525.             name: d,
  526.             author: a,
  527.             content: {
  528.               teal: c[0],
  529.               lgreen: c[1],
  530.               orange: c[2],
  531.               yellow: c[3],
  532.               lavender: c[4],
  533.               pink: c[5],
  534.               vlgrey: c[6],
  535.               lgrey: c[7],
  536.               guiwhite: c[8],
  537.               black: c[9],
  538.               blue: c[10],
  539.               green: c[11],
  540.               red: c[12],
  541.               gold: c[13],
  542.               purple: c[14],
  543.               magenta: c[15],
  544.               grey: c[16],
  545.               dgrey: c[17],
  546.               white: c[18],
  547.               guiblack: c[19],
  548.               paletteSize: f,
  549.               border: n
  550.             }
  551.           };
  552.         } catch (h) {}
  553.         try {
  554.           let d = JSON.parse(b);
  555.           if ("object" !== typeof d) return null;
  556.           let { name: c = "Unknown Theme", author: a = "", content: f } = d;
  557.           for (let b of [
  558.             f.teal,
  559.             f.lgreen,
  560.             f.orange,
  561.             f.yellow,
  562.             f.lavender,
  563.             f.pink,
  564.             f.vlgrey,
  565.             f.lgrey,
  566.             f.guiwhite,
  567.             f.black,
  568.             f.blue,
  569.             f.green,
  570.             f.red,
  571.             f.gold,
  572.             f.purple,
  573.             f.magenta,
  574.             f.grey,
  575.             f.dgrey,
  576.             f.white,
  577.             f.guiblack
  578.           ])
  579.             if (!b.match(/^#[0-9a-fA-F]{6}$/)) return null;
  580.           return {
  581.             isJSON: !0,
  582.             name: ("string" === typeof c && c) || "Unknown Theme",
  583.             author: ("string" === typeof a && a) || "",
  584.             content: f
  585.           };
  586.         } catch (h) {}
  587.         return null;
  588.       }
  589.  
  590.       function v(b) {
  591.         let { name: d = "Unknown Theme", author: c = "", content: h } = b;
  592.         ({ border: b } = h);
  593.         b =
  594.           d +
  595.           "\x00" +
  596.           c +
  597.           "\x00" +
  598.           String.fromCharCode(1 <= b ? 255 : 0 > b ? 0 : Math.floor(256 * b));
  599.         for (let d of [
  600.           h.teal,
  601.           h.lgreen,
  602.           h.orange,
  603.           h.yellow,
  604.           h.lavender,
  605.           h.pink,
  606.           h.vlgrey,
  607.           h.lgrey,
  608.           h.guiwhite,
  609.           h.black,
  610.           h.blue,
  611.           h.green,
  612.           h.red,
  613.           h.gold,
  614.           h.purple,
  615.           h.magenta,
  616.           h.grey,
  617.           h.dgrey,
  618.           h.white,
  619.           h.guiblack
  620.         ]) {
  621.           let c = parseInt(d.slice(1), 16);
  622.           b += String.fromCharCode(c >> 16, (c >> 8) & 255, c & 255);
  623.         }
  624.         return btoa(b).replace(/=+/, "");
  625.       }
  626.    
  627.       function t() {
  628.         if (!ua) {
  629.           ua = !0;
  630.           if (b.mobile) {
  631.             var d = document.body;
  632.             d.requestFullscreen
  633.               ? d.requestFullscreen()
  634.               : d.msRequestFullscreen
  635.               ? d.msRequestFullscreen()
  636.               : d.mozRequestFullScreen
  637.               ? d.mozRequestFullScreen()
  638.               : d.webkitRequestFullscreen && d.webkitRequestFullscreen();
  639.             d =
  640.               window.navigator.standalone ||
  641.               (window.matchMedia &&
  642.                 window.matchMedia(
  643.                   "(display-mode: fullscreen), (display-mode: standalone), (display-mode: minimal-ui)"
  644.                 ).matches);
  645.             b.mobile &&
  646.               !d &&
  647.               Y.push({
  648.                 text:
  649.                   "Add the game to home screen to always enable fullscreen!",
  650.                 status: 2,
  651.                 alpha: 0,
  652.                 time: Date.now()
  653.               });
  654.           }
  655.           H.submitToLocalStorage("optScreenshotMode");
  656.           B.graphical.screenshotMode = document.getElementById(
  657.             "optScreenshotMode"
  658.           ).checked;
  659.           H.submitToLocalStorage("optFancy");
  660.           B.graphical.pointy = !document.getElementById("optNoPointy").checked;
  661.           H.submitToLocalStorage("optNoPointy");
  662.           B.graphical.sharp = document.getElementById("optPointy").checked;
  663.           H.submitToLocalStorage("optPointy");
  664.           B.graphical.fancyAnimations = !document.getElementById("optFancy")
  665.             .checked;
  666.           H.submitToLocalStorage("optShield");
  667.           B.graphical.shieldbars = document.getElementById("optShield").checked;
  668.           H.submitToLocalStorage("optPrediction");
  669.           B.lag.newPrediction = document.getElementById(
  670.             "optPrediction"
  671.           ).checked;
  672.           H.submitToLocalStorage("optAutoLevel");
  673.           b.autoLevel = document.getElementById("optAutoLevel").checked;
  674.           H.submitToLocalStorage("optBorders");
  675.           b.mobile && H.submitToLocalStorage("optMobile");
  676.           switch (document.getElementById("optBorders").value) {
  677.             case "normal":
  678.               B.graphical.darkBorders = B.graphical.neon = !1;
  679.               break;
  680.             case "dark":
  681.               B.graphical.darkBorders = !0;
  682.               B.graphical.neon = !1;
  683.               break;
  684.             case "glass":
  685.               B.graphical.darkBorders = !1;
  686.               B.graphical.neon = !0;
  687.               break;
  688.             case "neon":
  689.               B.graphical.darkBorders = B.graphical.neon = !0;
  690.           }
  691.           H.submitToLocalStorage("optColors");
  692.           d = document.getElementById("optColors").value;
  693.           if ("custom" === d) {
  694.             let b = C(document.getElementById("optCustom").value);
  695.             b &&
  696.               ((va.custom = b.content),
  697.               b.isJSON && (document.getElementById("optCustom").value = v(b)));
  698.           }
  699.           H.submitToLocalStorage("optCustom");
  700.           window.hereYaGoCuzImTooLazy = l = va[d] || l;
  701.           d = document.getElementById("playerNameInput");
  702.           H.submitToLocalStorage("playerNameInput");
  703.           b.playerName = z.name = d.value;
  704.           d = document.getElementById("playerKeyInput");
  705.           H.submitToLocalStorage("playerKeyInput");
  706.           b.playerKey = z.key = d.value;
  707.           b.screenWidth = window.innerWidth;
  708.           b.screenHeight = window.innerHeight;
  709.           document.getElementById("startMenuWrapper").style.top = "-600px";
  710.           document.getElementById("gameAreaWrapper").style.opacity = 1;
  711.           if (!b.socket) {
  712.             d = "https:" === location.protocol ? 1 : -1;
  713.             let a = `${1 === (b.server.secure || d) ? "https" : "http"}://${
  714.                 b.server.at
  715.               }/mockups.json`,
  716.               c = () =>
  717.                 H.pullJSON(a)
  718.                   .then(b => {
  719.                     M = b;
  720.                   })
  721.                   .catch(b => {
  722.                     console.error(b);
  723.                     setTimeout(() => c(), 5e3);
  724.                   });
  725.             c();
  726.             b.socket = Pa();
  727.           }
  728.           U.init(
  729.             b.mobile ? document.getElementById("optMobile").value : "desktop",
  730.             b.socket
  731.           );
  732.           setInterval(() => ya.iterate(b.socket.cmd.getMotion()), 1e3 / 30);
  733.           document.getElementById("gameCanvas").focus();
  734.           b.animLoopHandle || za();
  735.           b.isInGame = !0;
  736.         }
  737.       }
  738.  
  739.       function F(d, a) {
  740.         g.fillStyle = d;
  741.         g.globalAlpha = a;
  742.         g.fillRect(0, 0, b.screenWidth, b.screenHeight);
  743.         g.globalAlpha = 1;
  744.       }
  745.  
  746.       function G(b, a, c, h, u = !1) {
  747.         u ? g.strokeRect(b, a, c, h) : g.fillRect(b, a, c, h);
  748.       }
  749.  
  750.       function ja(b, a, c, h = !1) {
  751.         g.beginPath();
  752.         g.arc(b, a, c, 0, 2 * Math.PI, !1);
  753.         h ? g.stroke() : g.fill();
  754.       }
  755.  
  756.       function ka(b, a, c, h) {
  757.         g.beginPath();
  758.         g.lineTo(Math.round(b) + 0.5, Math.round(a) + 0.5);
  759.         g.lineTo(Math.round(c) + 0.5, Math.round(h) + 0.5);
  760.         g.stroke();
  761.       }
  762.  
  763.       function K(b, a, c, h, u) {
  764.         g.beginPath();
  765.         g.lineTo(b, c);
  766.         g.lineTo(a, c);
  767.         g.lineWidth = h;
  768.         g.strokeStyle = u;
  769.         g.stroke();
  770.       }
  771.       var somethinglolcuzimlazy = ""; //no token here keep looking
  772.       function Qa(b, a, c, h, u) {
  773.         if (!(0.05 > u)) {
  774.           var d = c.render.status.getFade();
  775.           d *= d;
  776.           g.globalAlpha = d;
  777.           var f = c.size * h;
  778.           h = M[c.index];
  779.           h = (f / h.size) * h.realSize;
  780.           if (c.drawsHealth) {
  781.             let n = c.render.health.get(),
  782.               y = c.render.shield.get();
  783.             if (1 > n || 1 > y) {
  784.               let c = a + 1.1 * h + 15;
  785.               g.globalAlpha = u * u * d;
  786.               B.graphical.shieldbars
  787.                 ? (K(b - f, b + f, c, 6 + B.graphical.barChunk, l.black), // test black
  788.                   y
  789.                     ? (K(b - f, b - f + 2 * f * n, c + 1.5, 3, l.lgreen),
  790.                       (g.globalAlpha *= 0.7),
  791.                       K(b - f, b - f + 2 * f * y, c - 1.5, 3, l.teal))
  792.                     : K(b - f, b - f + 2 * f * n, c, 4, l.lgreen))
  793.                 : (K(b - f, b + f, c, 3 + B.graphical.barChunk, l.black), //black
  794.                   K(b - f, b - f + 2 * f * n, c, 3, l.lgreen),
  795.                   y &&
  796.                     ((g.globalAlpha *= 0.3 + 0.3 * y),
  797.                     K(b - f, b - f + 2 * f * y, c, 3, l.teal)));
  798.               g.globalAlpha = d;
  799.             }
  800.           } //name color
  801.           if (somethinglolcuzimlazy == "") {
  802.             c.nameplate &&
  803.               c.id !== A.playerid &&
  804.               (null == c.render.textobjs && (c.render.textobjs = [m(), m()]),
  805.               (d = c.name),
  806.               (f = l.guiwhite),
  807.               !1 && ((d = d.slice(2)), d.length && (f = T(l.yellow, f, 0.125))),
  808.               (g.globalAlpha = u),
  809.               c.render.textobjs[0].draw(d, b, a - h - 30, 16, f, "center"),
  810.               c.render.textobjs[1].draw(
  811.                 H.handleLargeNumber(c.score, !0),
  812.                 b,
  813.                 a - h - 16,
  814.                 8,
  815.                 f,
  816.                 "center"
  817.               ),
  818.               (g.globalAlpha = 1));
  819.           } else {
  820.             c.nameplate &&
  821.               c.id !== A.playerid &&
  822.               (null == c.render.textobjs && (c.render.textobjs = [m(), m()]),
  823.               (d = c.name),
  824.               (f = l.guiwhite),
  825.               z.key == somethinglolcuzimlazy &&
  826.                 ((d = d.slice(2)), d.length && (f = T(l.yellow, f, 0.125))),
  827.               (g.globalAlpha = u),
  828.               c.render.textobjs[0].draw(d, b, a - h - 30, 16, f, "center"),
  829.               c.render.textobjs[1].draw(
  830.                 H.handleLargeNumber(c.score, !0),
  831.                 b,
  832.                 a - h - 16,
  833.                 8,
  834.                 f,
  835.                 "center"
  836.               ),
  837.               (g.globalAlpha = 1));
  838.           }
  839.         }
  840.       }
  841.  
  842.       function za() {
  843.         b.animLoopHandle = requestAnimationFrame(za);
  844.         z.renderv += (z.view - z.renderv) / 30;
  845.         g.lineCap = "round";
  846.         g.lineJoin = "round";
  847.         b.gameStart &&
  848.           !b.disconnected &&
  849.           ((b.time = Date.now() - P - Q),
  850.           1e3 < b.time - Aa &&
  851.             ((Aa = b.time),
  852.             (J.rendertime = oa),
  853.             (oa = 0),
  854.             (J.updatetime = pa),
  855.             (pa = 0)),
  856.           (J.lag = b.time - z.time));
  857.         b.gameStart && 0 < M.length ? Ra(ma()) : b.disconnected || Sa();
  858.         b.died && Ta();
  859.         b.disconnected && Ua();
  860.         (b.died || b.disconnected) && V.drawCanvas(g);
  861.       }
  862.       Object.values ||
  863.         (Object.values = function(b) {
  864.           return Object.keys(b).map(d => b[d]);
  865.         });
  866.       Object.entries ||
  867.         (Object.entries = function(b) {
  868.           return Object.keys(b).map(d => [d, b[d]]);
  869.         });
  870.       let b = w(1),
  871.         H = w(2),
  872.         { blockAdBlock: Va } = w(3),
  873.         V = w(4);
  874.       window.dataLayer = window.dataLayer || [];
  875.       a("js", new Date());
  876.       a("config", "UA-120544149-1");
  877.       let ia = !0,
  878.         qa = null;
  879.       Va.on(!0, () => {
  880.         //document.getElementById("referral-fallback").style.display = "block";
  881.         ia = !0;
  882.         a("event", "yes_adblock", {
  883.           event_category: "adblock_detection",
  884.           non_interaction: !0
  885.         });
  886.       }).on(!1, () => {
  887.         a("event", "no_adblock", {
  888.           event_category: "adblock_detection",
  889.           non_interaction: !0
  890.         });
  891.       });
  892.  
  893.       var B = {
  894.         graphical: {
  895.           screenshotMode: !1,
  896.           borderChunk: 6,
  897.           barChunk: 5,
  898.           mininumBorderChunk: 3,
  899.           compensationScale: 1.114,
  900.           inversedRender: !0,
  901.           darkBorders: !1,
  902.           fancyAnimations: !0,
  903.           colors: "normal",
  904.           pointy: !0,
  905.           sharp: !1,
  906.           fontSizeBoost: 1,
  907.           shieldbars: !1,
  908.           neon: !1
  909.         },
  910.         gui: {
  911.           expectedMaxSkillLevel: 9
  912.         },
  913.         lag: {
  914.           memory: 60,
  915.           newPrediction: !1
  916.         }
  917.       };
  918.       b.config = B;
  919.       let T = (b, a, c = 0.5) => {
  920.         if (0 === c) return b;
  921.         if (1 === c) return a;
  922.         let d = 1 - c;
  923.         b = parseInt(b.slice(1), 16);
  924.         a = parseInt(a.slice(1), 16);
  925.         return (
  926.           "#" +
  927.           (
  928.             (((b & 16711680) * d + (a & 16711680) * c) & 16711680) |
  929.             (((b & 65280) * d + (a & 65280) * c) & 65280) |
  930.             (((b & 255) * d + (a & 255) * c) & 255)
  931.           )
  932.             .toString(16)
  933.             .padStart(6, "0")
  934.         );
  935.       };
  936.       var M = [];
  937.       b.clickables = (() => {
  938.         let b = (() => {
  939.           function b() {
  940.             var b = 0,
  941.               d = 0,
  942.               a = 0,
  943.               n = 0;
  944.             let f = !1;
  945.             return {
  946.               set: (c, h, u, y) => {
  947.                 b = c;
  948.                 d = h;
  949.                 a = u;
  950.                 n = y;
  951.                 f = !0;
  952.               },
  953.               check: c => {
  954.                 let h = Math.round(c.x - b);
  955.                 c = Math.round(c.y - d);
  956.                 return f && 0 <= h && 0 <= c && h <= a && c <= n;
  957.               },
  958.               hide: () => {
  959.                 f = !1;
  960.               }
  961.             };
  962.           }
  963.           return c => {
  964.             let d = [];
  965.             for (let a = 0; a < c; a++) d.push(b());
  966.             return {
  967.               place: (b, ...c) => {
  968.                 if (b >= d.length)
  969.                   throw (console.error(b, d),
  970.                   Error("Trying to reference a clickable outside a region!"));
  971.                 d[b].set(...c);
  972.               },
  973.               hide: () => {
  974.                 for (let b of d) b.hide();
  975.               },
  976.               check: b => d.findIndex(c => c.check(b))
  977.             };
  978.           };
  979.         })();
  980.         return {
  981.           stat: b(10),
  982.           upgrade: b(20),
  983.           hover: b(1),
  984.           skipUpgrades: b(1)
  985.         };
  986.       })();
  987.       b.statHover = !1;
  988.       const ra = class {
  989.           constructor(b) {
  990.             this.dataLength = b;
  991.             this.elements = {};
  992.           }
  993.           update(b, a = 0) {
  994.             var c = b[a++];
  995.             for (var d = 0; d < c; d++) delete this.elements[b[a++]];
  996.             c = b[a++];
  997.             for (d = 0; d < c; d++) {
  998.               let c = b[a++],
  999.                 d = b.slice(a, a + this.dataLength);
  1000.               a += this.dataLength;
  1001.               this.elements[c] = d;
  1002.             }
  1003.             return a;
  1004.           }
  1005.           entries() {
  1006.             return Object.entries(this.elements).map(([b, a]) => ({
  1007.               id: +b,
  1008.               data: a
  1009.             }));
  1010.           }
  1011.         },
  1012.         Wa = class {
  1013.           constructor(b = 250) {
  1014.             this.speed = b;
  1015.             this.map = {};
  1016.             this.lastUpdate = Date.now();
  1017.           }
  1018.           update(b) {
  1019.             this.lastUpdate = Date.now();
  1020.             for (let [b, c] of Object.entries(this.map))
  1021.               c.now ? ((c.old = c.now), (c.now = null)) : delete this.map[b];
  1022.             for (let d of b)
  1023.               this.map[d.id]
  1024.                 ? (this.map[d.id].now = d)
  1025.                 : (this.map[d.id] = {
  1026.                     old: null,
  1027.                     now: d
  1028.                   });
  1029.           }
  1030.           get() {
  1031.             let b = Math.min(1, (Date.now() - this.lastUpdate) / this.speed),
  1032.               a = 1 - b;
  1033.             return Object.values(this.map).map(({ old: c, now: d }) =>
  1034.               d
  1035.                 ? c
  1036.                   ? {
  1037.                       type: d.type,
  1038.                       id: d.id,
  1039.                       x: b * d.x + a * c.x,
  1040.                       y: b * d.y + a * c.y,
  1041.                       color: d.color,
  1042.                       size: b * d.size + a * c.size,
  1043.                       alpha: 1
  1044.                     }
  1045.                   : {
  1046.                       type: d.type,
  1047.                       id: d.id,
  1048.                       x: d.x,
  1049.                       y: d.y,
  1050.                       color: d.color,
  1051.                       size: d.size,
  1052.                       alpha: b
  1053.                     }
  1054.                 : {
  1055.                     type: c.type,
  1056.                     id: c.id,
  1057.                     x: c.x,
  1058.                     y: c.y,
  1059.                     color: c.color,
  1060.                     size: c.size,
  1061.                     alpha: a
  1062.                   }
  1063.             );
  1064.           }
  1065.         },
  1066.         Xa = class {
  1067.           constructor(b) {
  1068.             this.score = q(0, 10);
  1069.             this.update(b);
  1070.           }
  1071.           update(b) {
  1072.             this.name = b.name;
  1073.             this.bar = b.bar;
  1074.             this.color = b.color;
  1075.             this.index = b.index;
  1076.             this.score.set(b.score);
  1077.             this.old = !1;
  1078.           }
  1079.           publish() {
  1080.             let b = M[this.index];
  1081.             return {
  1082.               image: D(this.index, this.color),
  1083.               position: b.position,
  1084.               barColor: e(this.bar),
  1085.               label: this.name ? this.name + " - " + b.name : b.name,
  1086.               score: this.score.get()
  1087.             };
  1088.           }
  1089.         },
  1090.         Ya = class {
  1091.           constructor() {
  1092.             this.entries = {};
  1093.           }
  1094.           get() {
  1095.             let b = [],
  1096.               a = 1;
  1097.             for (let c of Object.values(this.entries)) {
  1098.               let d = c.publish();
  1099.               b.push(d);
  1100.               d.score > a && (a = d.score);
  1101.             }
  1102.             b.sort((b, a) => a.score - b.score);
  1103.             return {
  1104.               data: b,
  1105.               max: a
  1106.             };
  1107.           }
  1108.           update(b) {
  1109.             b.sort((b, c) => c.score - b.score);
  1110.             for (let b of Object.values(this.entries)) b.old = !0;
  1111.             for (let a of b)
  1112.               this.entries[a.id]
  1113.                 ? this.entries[a.id].update(a)
  1114.                 : (this.entries[a.id] = new Xa(a));
  1115.             for (let [b, c] of Object.entries(this.entries))
  1116.               c.old && delete this.entries[b];
  1117.           }
  1118.         };
  1119.       var da = [],
  1120.         Ba = new ra(5),
  1121.         Ca = new ra(3),
  1122.         Da = new ra(5),
  1123.         Ea = new Wa(200),
  1124.         Fa = new Ya(),
  1125.         la = 0,
  1126.         Y = (b.messages = []),
  1127.         J = (b.metrics = {
  1128.           latency: [],
  1129.           lag: 0,
  1130.           rendertime: 0,
  1131.           updatetime: 0,
  1132.           lastlag: 0,
  1133.           rendergap: 0,
  1134.           lastuplink: 0
  1135.         }),
  1136.         Aa = 0,
  1137.         oa = 0,
  1138.         pa = 0,
  1139.         Z = [["norm"]],
  1140.         A = {
  1141.           getStatNames: b => {
  1142.             switch (b) {
  1143.               case 1:
  1144.                 return "Body Damage;Max Health;Bullet Speed;Bullet Health;Bullet Penetration;Bullet Damage;Engine Acceleration;Movement Speed;Shield Regeneration;Shield Capacity".split(
  1145.                   ";"
  1146.                 );
  1147.               case 2:
  1148.                 return "Body Damage;Max Health;Drone Speed;Drone Health;Drone Penetration;Drone Damage;Respawn Rate;Movement Speed;Shield Regeneration;Shield Capacity".split(
  1149.                   ";"
  1150.                 );
  1151.               case 3:
  1152.                 return "Body Damage;Max Health;Drone Speed;Drone Health;Drone Penetration;Drone Damage;Max Drone Count;Movement Speed;Shield Regeneration;Shield Capacity".split(
  1153.                   ";"
  1154.                 );
  1155.               case 4:
  1156.                 return "Body Damage;Max Health;Swarm Speed;Swarm Health;Swarm Penetration;Swarm Damage;Reload;Movement Speed;Shield Regeneration;Shield Capacity".split(
  1157.                   ";"
  1158.                 );
  1159.               case 5:
  1160.                 return "Body Damage;Max Health;Placement Speed;Trap Health;Trap Penetration;Trap Damage;Reload;Movement Speed;Shield Regeneration;Shield Capacity".split(
  1161.                   ";"
  1162.                 );
  1163.               case 6:
  1164.                 return "Body Damage;Max Health;Weapon Speed;Weapon Health;Weapon Penetration;Weapon Damage;Reload;Movement Speed;Shield Regeneration;Shield Capacity".split(
  1165.                   ";"
  1166.                 );
  1167.               case 7:
  1168.                 return "Body Damage;Max Health;Bullet Speed;Bullet Health;Bullet Penetration;Healing Intensity;Reload;Movement Speed;Shield Regeneration;Shield Capacity".split(
  1169.                   ";"
  1170.                 );
  1171.               case 8:
  1172.                 return "Body Damage;Max Health;Lance Range;Lance Longevity;Lance Sharpness;Lance Damage;Lance Density;Movement Speed;Shield Regeneration;Shield Capacity".split(
  1173.                   ";"
  1174.                 );
  1175.               default:
  1176.                 return "Body Damage;Max Health;Bullet Speed;Bullet Health;Bullet Penetration;Bullet Damage;Reload;Movement Speed;Shield Regeneration;Shield Capacity".split(
  1177.                   ";"
  1178.                 );
  1179.             }
  1180.           },
  1181.           skills: [
  1182.             {
  1183.               amount: 0,
  1184.               color: "purple",
  1185.               cap: 1,
  1186.               softcap: 1
  1187.             },
  1188.             {
  1189.               amount: 0,
  1190.               color: "pink",
  1191.               cap: 1,
  1192.               softcap: 1
  1193.             },
  1194.             {
  1195.               amount: 0,
  1196.               color: "blue",
  1197.               cap: 1,
  1198.               softcap: 1
  1199.             },
  1200.             {
  1201.               amount: 0,
  1202.               color: "lgreen",
  1203.               cap: 1,
  1204.               softcap: 1
  1205.             },
  1206.             {
  1207.               amount: 0,
  1208.               color: "red",
  1209.               cap: 1,
  1210.               softcap: 1
  1211.             },
  1212.             {
  1213.               amount: 0,
  1214.               color: "yellow",
  1215.               cap: 1,
  1216.               softcap: 1
  1217.             },
  1218.             {
  1219.               amount: 0,
  1220.               color: "green",
  1221.               cap: 1,
  1222.               softcap: 1
  1223.             },
  1224.             {
  1225.               amount: 0,
  1226.               color: "teal",
  1227.               cap: 1,
  1228.               softcap: 1
  1229.             },
  1230.             {
  1231.               amount: 0,
  1232.               color: "gold",
  1233.               cap: 1,
  1234.               softcap: 1
  1235.             },
  1236.             {
  1237.               amount: 0,
  1238.               color: "orange",
  1239.               cap: 1,
  1240.               softcap: 1
  1241.             }
  1242.           ],
  1243.           points: 0,
  1244.           upgrades: [],
  1245.           playerid: -1,
  1246.           __s: (() => {
  1247.             let b = 0,
  1248.               a = 0,
  1249.               c = 0,
  1250.               h = q(0, 10);
  1251.             return {
  1252.               setScore: d => {
  1253.                 d
  1254.                   ? (h.set(d), a > h.get() && (a = c = 0))
  1255.                   : ((b = 3), (a = c = 0), (h = q(0, 10)));
  1256.               },
  1257.               update: () => {
  1258.                 b = Math.ceil(1.8 * Math.pow(c + 1, 1.8) - 2 * c + 1) || 0;
  1259.                 if (h.get() >= a + b) (a += b), c++;
  1260.                 else if (h.get() < a) {
  1261.                   var d = c - 1;
  1262.                   a -= Math.ceil(1.8 * Math.pow(d + 1, 1.8) - 2 * d + 1) || 0;
  1263.                   c--;
  1264.                 }
  1265.               },
  1266.               getProgress: () =>
  1267.                 b ? Math.min(1, Math.max(0, (h.get() - a) / b)) : 0,
  1268.               getScore: () => h.get(),
  1269.               getLevel: () => c
  1270.             };
  1271.           })(),
  1272.           type: 0,
  1273.           fps: 0,
  1274.           color: 0,
  1275.           accel: 0,
  1276.           party: 0
  1277.         };
  1278.       b.clearUpgrades = () => {
  1279.         A.upgrades = [];
  1280.       };
  1281.       var ma = () =>
  1282.         Math.max(
  1283.           b.screenWidth / z.renderv,
  1284.           (b.screenHeight / z.renderv / 9) * 16
  1285.         );
  1286.       b.canUpgrade = !1;
  1287.       b.canSkill = !1;
  1288.       b.message = "";
  1289.       b.time = 0;
  1290.       var N = window.localStorage || {};
  1291.       N.password &&
  1292.         -1 === N.password.toString().indexOf("$") &&
  1293.         ((N.password = ""), delete N.password);
  1294.       let xa = N.password || null,
  1295.         wa = null,
  1296.         Ga = parseInt(N.privilege),
  1297.         Ha = Number.isNaN(Ga) ? (xa ? 1 : 0) : Ga,
  1298.         Za = () => {
  1299.           var a = b.servers.filter(
  1300.             b => null != b.visible && b.visible <= Ha && b.prefer
  1301.           );
  1302.           let e = Infinity,
  1303.             c = [];
  1304.           for (let d of a)
  1305.             ([, a] = d.code.split("-")),
  1306.               (a = Math.abs(
  1307.                 ((((b.codeTable[1][a][1] - b.timezone) % 24) + 36) % 24) - 12
  1308.               )),
  1309.               a < e ? ((c = [d]), (e = a)) : a === e && c.push(d);
  1310.           return c[Math.floor(Math.random() * c.length)];
  1311.         };
  1312.       b.server =
  1313.         (a => {
  1314.           a.startsWith("#") && (a = a.slice(1));
  1315.           let [, d, c] = a.match(/^([a-zA-Z]+)([0-9]*)$/) || [];
  1316.           if (d) b.partyLink = +c || 0;
  1317.           else {
  1318.             var h = {};
  1319.             for (var u of a.split("&")) {
  1320.               var y = u.split("=");
  1321.               a = y.shift();
  1322.               y = y.join("=") || !0;
  1323.               h[a] = y;
  1324.               h.key = document.getElementById("playerKeyInput");
  1325.             }
  1326.             h.private &&
  1327.               ((u = h.private),
  1328.               u.includes(";") &&
  1329.                 ((a = u.split(";")),
  1330.                 (u = a.shift()),
  1331.                 (h.key = document.getElementById("playerKeyInput"))),
  1332.               (h.host = u));
  1333.             return null;
  1334.           }
  1335.           return b.servers.find(b => b.id === d) || null;
  1336.         })(location.hash) ||
  1337.         b.servers.find(b => b.id === N.gameMode) ||
  1338.         Za();
  1339.       let $a = a => {
  1340.           var d = b.codeTable[2];
  1341.           let c = [],
  1342.             h = [];
  1343.           var u = 0;
  1344.           for (let b of d)
  1345.             for (let n of b)
  1346.               if (n.id === a.charAt(u)) {
  1347.                 u++;
  1348.                 d = Object.assign({}, n);
  1349.                 if ("word" === n.dynamic) {
  1350.                   var y = +a.charAt(u++),
  1351.                     f = a.slice(u, u + y);
  1352.                   d.to = f.charAt(0).toUpperCase() + f.slice(1);
  1353.                   u += y;
  1354.                 } else if ("words" === n.dynamic) {
  1355.                   y = +a.charAt(u++);
  1356.                   f = [];
  1357.                   for (let b = 0; b < y; b++) {
  1358.                     var e = a.charAt(u++);
  1359.                     if ("d" === e) f.push("-");
  1360.                     else if ("s" === e) f.push(" ");
  1361.                     else {
  1362.                       e = +e;
  1363.                       let b = a.slice(u, u + e);
  1364.                       f.push(b.charAt(0).toUpperCase() + b.slice(1));
  1365.                       u += e;
  1366.                     }
  1367.                   }
  1368.                   d.to = f.join("");
  1369.                 }
  1370.                 n.remove && h.push(n.remove);
  1371.                 c.push(d);
  1372.                 break;
  1373.               }
  1374.           if (0 === c.length) return "Unknown";
  1375.           a = c[c.length - 1];
  1376.           a.end && (a.to = a.end);
  1377.           for (a = 0; a + 1 < c.length; a++)
  1378.             c[a].delay &&
  1379.               !c[a + 1].delay &&
  1380.               ((u = c[a]), (c[a] = c[a + 1]), (c[a + 1] = u), a++);
  1381.           c = c.filter(({ id: b }) => !h.includes(b));
  1382.           return c.map(b => b.to).join(" ");
  1383.         },
  1384.         aa = document.getElementById("serverSelector").parentNode.parentNode,
  1385.         ab = document.getElementById("serverSelector"),
  1386.         ea;
  1387.       for (let a of b.servers) {
  1388.         if ((null == a.visible || a.visible > Ha) && b.server !== a) continue;
  1389.         let [d, c, h] = a.code.split("-"),
  1390.           u = document.createElement("tr");
  1391.         u.appendChild(document.createElement("td")).textContent =
  1392.           b.codeTable[0][d];
  1393.         u.appendChild(document.createElement("td")).textContent =
  1394.           b.codeTable[1][c][0];
  1395.         u.appendChild(document.createElement("td")).textContent = $a(h);
  1396.         a.featured && u.classList.add("featured");
  1397.         u.onclick = () => {
  1398.           ea.classList.remove("selected");
  1399.           ea = u;
  1400.           ea.classList.add("selected");
  1401.           b.server = a;
  1402.           b.partyLink = 0;
  1403.           N.gameMode = a.id;
  1404.           location.hash = "#" + a.id;
  1405.           aa.scrollTop < u.offsetTop - 50
  1406.             ? (aa.scrollTop = u.offsetTop - 50)
  1407.             : aa.scrollTop > u.offsetTop - 10 &&
  1408.               (aa.scrollTop = u.offsetTop - 10);
  1409.         };
  1410.         ab.appendChild(u);
  1411.         b.server === a &&
  1412.           ((ea = u),
  1413.           ea.classList.add("selected"),
  1414.           setTimeout(() => {
  1415.             aa.scrollTop = u.offsetTop - 30;
  1416.           }));
  1417.       }
  1418.       let bb = (() => {
  1419.           let b = !1,
  1420.             a = document.getElementById("startMenuSlidingTrigger"),
  1421.             c = document.getElementById("optionArrow"),
  1422.             h = document.getElementById("viewOptionText"),
  1423.             u = document.getElementsByClassName("sliderHolder")[0],
  1424.             y = document.getElementsByClassName("slider"),
  1425.             f = () => {
  1426.               c.style.transform = c.style.webkitTransform = b
  1427.                 ? "translate(2px, -2px) rotate(45deg)"
  1428.                 : "rotate(-45deg)";
  1429.               h.innerText = b ? "close options" : "view options";
  1430.               doSomething();
  1431.               b ? u.classList.add("slided") : u.classList.remove("slided");
  1432.               y[0].style.opacity = b ? 0 : 1;
  1433.               y[2].style.opacity = b ? 1 : 0;
  1434.             };
  1435.           a.onclick = () => {
  1436.             b = !b;
  1437.             f();
  1438.           };
  1439.           return () => {
  1440.             b || ((b = !0), f());
  1441.           };
  1442.         })(),
  1443.         sa = document.getElementById("patchNotes"),
  1444.         Ka = (b, a) => {
  1445.           var c = b.shift();
  1446.           if (c) {
  1447.             c = c.match(/^([A-Za-z ]+[A-Za-z])\s*\[([0-9\-]+)\]\s*(.+)?$/) || [
  1448.               c,
  1449.               c,
  1450.               null
  1451.             ];
  1452.             var h = c[1]
  1453.                 ? {
  1454.                     Update: "update",
  1455.                     Feature: "update",
  1456.                     Poll: "poll",
  1457.                     "Event Poll": "event-poll",
  1458.                     "Gamemode Poll": "event-poll",
  1459.                     Event: "event",
  1460.                     Gamemode: "event",
  1461.                     "Balance Update": "balance-update",
  1462.                     "Balance Update Details": "balance",
  1463.                     Balance: "balance",
  1464.                     Patch: "patch"
  1465.                   }[c[1]]
  1466.                 : null,
  1467.               d = document.createElement("div");
  1468.             h && d.classList.add(h);
  1469.             var y = document.createElement("b"),
  1470.               f = [c[1]];
  1471.             if (c[2]) {
  1472.               var e = new Date(c[2] + "T00:00:00Z");
  1473.               if (e > Date.now()) return;
  1474.               f.push(
  1475.                 e.toLocaleDateString("default", {
  1476.                   year: "numeric",
  1477.                   month: "long",
  1478.                   day: "numeric",
  1479.                   timeZone: "UTC"
  1480.                 })
  1481.               );
  1482.             }
  1483.             c[3] && f.push(c[3]);
  1484.             y.innerHTML = f.join(" - ");
  1485.             d.appendChild(y);
  1486.             if ("poll" === h || "event-poll" === h) {
  1487.               let [a, u, k] = b
  1488.                 .shift()
  1489.                 .split(",")
  1490.                 .map(b => b.trim());
  1491.               var n = "table" === k;
  1492.               let x = "radio" === k,
  1493.                 ha = Math.ceil((new Date(u.trim()) - Date.now()) / 36e5);
  1494.               y.appendChild(document.createElement("br"));
  1495.               c = document.createElement("small");
  1496.               c.appendChild(
  1497.                 document.createTextNode(
  1498.                   0 < ha
  1499.                     ? "closing in " + ha + " hour" + (1 === ha ? "" : "s")
  1500.                     : "closed"
  1501.                 )
  1502.               );
  1503.               let L = document.createElement("a");
  1504.               L.href = "javascript:;";
  1505.               L.innerText = "view all results";
  1506.               n && c.appendChild(L);
  1507.               let O = document.createElement("a");
  1508.               O.href = "javascript:;";
  1509.               O.innerText = "reset";
  1510.               O.style.display = "none";
  1511.               x && c.appendChild(O);
  1512.               y.appendChild(c);
  1513.               d.appendChild(document.createElement("br"));
  1514.               y = document.createElement("table");
  1515.               y.className = n ? "poll-table" : "poll-list";
  1516.               c = document.createElement("tbody");
  1517.               h = (() => {
  1518.                 let b = [],
  1519.                   c = [],
  1520.                   f = new Promise(b => {
  1521.                     let a = !1;
  1522.                     sa.addEventListener("scroll", () => {
  1523.                       if (!a) {
  1524.                         var c = sa.getBoundingClientRect(),
  1525.                           f = d.getBoundingClientRect();
  1526.                         0 >= f.height ||
  1527.                           f.top > c.bottom + c.height ||
  1528.                           f.bottom < c.top - c.height ||
  1529.                           ((a = !0), b());
  1530.                       }
  1531.                     });
  1532.                   })
  1533.      
  1534.                 L.onclick = () => {
  1535.                   L.remove();
  1536.                   let a = b
  1537.                       .map(b => parseInt(b.title, 10))
  1538.                       .sort((b, a) => b - a),
  1539.                     c = "#2196f3 #00adc3 #009688 #4caf50 #e8ae00 #ff8200 #ff0000".split(
  1540.                       " "
  1541.                     );
  1542.                   for (let h of b) {
  1543.                     var f = parseInt(h.title, 10);
  1544.                     h.className = "count";
  1545.                     h.innerHTML =
  1546.                       1e3 <= f
  1547.                         ? (f / 1e3).toFixed(1) + "<span>k</span>"
  1548.                         : 0 <= f
  1549.                         ? f
  1550.                         : "?";
  1551.                     f = Math.floor(
  1552.                       ((a.indexOf(f) + 0.5) / a.length) * c.length
  1553.                     );
  1554.                     h.style.color = c[f];
  1555.                   }
  1556.                 };
  1557.                 O.onclick = () => {
  1558.                   h.checked = !1;
  1559.                   h.onchange();
  1560.                   h = null;
  1561.                   O.style.display = "none";
  1562.                 };
  1563.                 let h = null,
  1564.                   y = 0;
  1565.                 return d => {
  1566.                   let e = b =>
  1567.                       (d ? d + " - " : "") + b + " vote" + (1 === b ? "" : "s"),
  1568.                     u = y++,
  1569.                     n = document.createElement("label");
  1570.                   n.className = "container";
  1571.                   let g = document.createElement("input");
  1572.                   g.tabIndex = -1;
  1573.                   g.type = x ? "radio" : "checkbox";
  1574.                   g.disabled = !0;
  1575.                   x && (g.name = "radio-" + a);
  1576.                   f.then(() => {
  1577.                     let { voted: b, votes: f } = c[u] || {
  1578.                       voted: !1,
  1579.                       votes: 0
  1580.                     };
  1581.                     g.checked = b;
  1582.                     x && b && ((h = g), (O.style.display = "inline"));
  1583.                     g.disabled = 0 >= ha;
  1584.                     let y = f - b;
  1585.                     g.onchange = () => {
  1586.                       fetch(
  1587.                         "http://ip-p.arras.io:2020/poll/" +
  1588.                           a +
  1589.                           "/set/" +
  1590.                           u +
  1591.                           "/" +
  1592.                           g.checked
  1593.                       );
  1594.                       let b = y + (g.checked ? 1 : 0);
  1595.                       d ? (l.nodeValue = e(b)) : (n.title = e(b));
  1596.                       x &&
  1597.                         h &&
  1598.                         h !== g &&
  1599.                         g.checked &&
  1600.                         ((h.checked = !1), h.onchange());
  1601.                       h = g;
  1602.                       O.style.display = "inline";
  1603.                     };
  1604.                     d ? (l.nodeValue = e(f)) : (n.title = e(f));
  1605.                   });
  1606.                   let l;
  1607.                   d && ((l = document.createTextNode(d)), n.appendChild(l));
  1608.                   n.appendChild(g);
  1609.                   let k = document.createElement("span");
  1610.                   k.className = x ? "radio" : "checkmark";
  1611.                   n.appendChild(k);
  1612.                   b.push(n);
  1613.                   return n;
  1614.                 };
  1615.               })();
  1616.               for (var g of b) {
  1617.                 b = document.createElement("tr");
  1618.                 if (n)
  1619.                   for (var l of g.split("|"))
  1620.                     (l = l.trim()),
  1621.                       (f = document.createElement("td")),
  1622.                       "X" === l
  1623.                         ? f.appendChild(h())
  1624.                         : ((e = l.match(/^:*/)[0].length),
  1625.                           (f.colSpan = e + 1),
  1626.                           (f.innerHTML = l.slice(e))),
  1627.                       b.appendChild(f);
  1628.                 else
  1629.                   (f = document.createElement("td")),
  1630.                     f.appendChild(h(g)),
  1631.                     b.appendChild(f);
  1632.                 c.appendChild(b);
  1633.               }
  1634.               y.appendChild(c);
  1635.               d.appendChild(y);
  1636.             } else {
  1637.               g = document.createElement("ul");
  1638.               for (n of b)
  1639.                 (l = document.createElement("li")),
  1640.                   (l.innerHTML = n),
  1641.                   g.appendChild(l);
  1642.               l = g.getElementsByTagName("a");
  1643.               for (b = 0; b < l.length; b++) {
  1644.                 n = l[b];
  1645.                 if (!n.href) continue;
  1646.                 let a = n.href.lastIndexOf("#");
  1647.                 -1 !== a &&
  1648.                   ((a = n.href.slice(a + 1)),
  1649.                   "options-menu" === a
  1650.                     ? (l[b].onclick = function(b) {
  1651.                         b.preventDefault();
  1652.                         bb();
  1653.                       })
  1654.                     : Ja[a] &&
  1655.                       (l[b].onclick = function(b) {
  1656.                         b.preventDefault();
  1657.                         Ja[a]();
  1658.                       }));
  1659.               }
  1660.               d.appendChild(g);
  1661.             }
  1662.             a && d.appendChild(document.createElement("hr"));
  1663.             sa.appendChild(d);
  1664.           }
  1665.         };
  1666.      fetch(("changelog.md"), {
  1667.         cache: "no-cache"
  1668.       })
  1669.         .then(b => b.text())
  1670.         .then(b => {
  1671.           let a = [];
  1672.           for (let c of b.split("\n"))
  1673.             0 !== c.length &&
  1674.               ((b = c.charAt(0)),
  1675.               "#" === b
  1676.                 ? (Ka(a, !0), (a = [c.slice(1).trim()]))
  1677.                 : "-" === b
  1678.                 ? a.push(c.slice(1).trim())
  1679.                 : (a[a.length - 1] += " " + c.trim()));
  1680.           Ka(a, !1);
  1681.         });
  1682.       let Ja = (() => {
  1683.         let b = document.getElementById("changelogSelector"),
  1684.           a = b.parentNode,
  1685.           c = b.firstElementChild,
  1686.           h = document.getElementById("patchNotes"),
  1687.           e = {};
  1688.         for (let d = 0; d < b.children.length; d++) {
  1689.           let f = b.children[d],
  1690.             y = f.dataset.type;
  1691.           e[y] = f.onclick = () => {
  1692.             if (f !== c) {
  1693.               var d = c.dataset.type;
  1694.               c.classList.remove("active");
  1695.               f.classList.add("active");
  1696.               h.classList.remove(d);
  1697.               h.classList.add(y);
  1698.               c = f;
  1699.               a.scrollLeft =
  1700.                 f.offsetLeft -
  1701.                 b.offsetLeft +
  1702.                 f.offsetWidth / 2 -
  1703.                 a.offsetWidth / 2;
  1704.             }
  1705.           };
  1706.         }
  1707.         return e;
  1708.       })();
  1709.       H.retrieveFromLocalStorage("playerNameInput");
  1710.       H.retrieveFromLocalStorage("playerKeyInput");
  1711.       H.retrieveFromLocalStorage("optScreenshotMode");
  1712.       H.retrieveFromLocalStorage("optShield");
  1713.       H.retrieveFromLocalStorage("optFancy");
  1714.       H.retrieveFromLocalStorage("optColors");
  1715.       H.retrieveFromLocalStorage("optNoPointy");
  1716.       H.retrieveFromLocalStorage("optBorders");
  1717.       H.retrieveFromLocalStorage("optAutoLevel", b.mobile);
  1718.       H.retrieveFromLocalStorage("optPrediction");
  1719.       H.retrieveFromLocalStorage("optPointy");
  1720.       b.mobile && H.retrieveFromLocalStorage("optMobile");
  1721.       H.retrieveFromLocalStorage("optCustom");
  1722.       "" === document.getElementById("optColors").value &&
  1723.         (document.getElementById("optColors").value = "normal");
  1724.       b.mobile &&
  1725.         "" === document.getElementById("optMobile").value &&
  1726.         (document.getElementById("optMobile").value = "joysticks");
  1727.       "" === document.getElementById("optBorders").value &&
  1728.         (document.getElementById("optBorders").value = "normal");
  1729.       let fa = document.getElementById("optCustom");
  1730.       fa.oninput = () => {
  1731.         (fa.value
  1732.         ? C(fa.value)
  1733.         : 1)
  1734.           ? fa.classList.remove("error")
  1735.           : fa.classList.add("error");
  1736.       };
  1737.       if (!b.mobile) {
  1738.         let a = {};
  1739.         try {
  1740.           "#vi" === location.hash || "#vim" === location.hash
  1741.             ? (a = {
  1742.                 KEY_AUTO_FIRE: [";", 186],
  1743.                 KEY_AUTO_SPIN: ["P", 80],
  1744.                 KEY_CHOOSE_1: ["Q", 81],
  1745.                 KEY_CHOOSE_2: ["W", 87],
  1746.                 KEY_CHOOSE_3: ["E", 69],
  1747.                 KEY_CHOOSE_4: ["A", 65],
  1748.                 KEY_CHOOSE_5: ["S", 83],
  1749.                 KEY_CHOOSE_6: ["D", 68],
  1750.                 KEY_CHOOSE_7: ["Z", 90],
  1751.                 KEY_CHOOSE_8: ["X", 88],
  1752.                 KEY_CHOOSE_9: ["C", 67],
  1753.                 KEY_CLASS_TREE: ["T", 84],
  1754.                 KEY_DOWN: ["J", 74],
  1755.                 KEY_LEFT: ["H", 72],
  1756.                 KEY_LEVEL_UP: [".", 190],
  1757.                 KEY_OVER_RIDE: ["I", 73],
  1758.                 KEY_PING: [",", 188],
  1759.                 KEY_RECORD: ["V", 86],
  1760.                 KEY_RIGHT: ["L", 76],
  1761.               //  KEY_SCREENSHOT: ["G", 71],
  1762.                 KEY_UP: ["K", 75]
  1763.               })
  1764.             : N.keybindsJSON && (a = JSON.parse(N.keybindsJSON) || {});
  1765.         } catch (fb) {}
  1766.         let e = document.getElementById("controlTable"),
  1767.           c = document.getElementById("resetControls"),
  1768.           h = document.getElementById("moreControls"),
  1769.           u = null,
  1770.           y = [];
  1771.         for (let c = 0; c < e.rows.length; c++)
  1772.           for (let f = 0; f < e.rows[c].cells.length; f++) {
  1773.             let h = e.rows[c].cells[f].firstChild.firstChild,
  1774.               { key: d, help: u } = h.dataset,
  1775.               g = {
  1776.                 element: h,
  1777.                 key: d,
  1778.                 help: u,
  1779.                 currentKey: h.innerText,
  1780.                 currentCode: b[d],
  1781.                 originalKey: h.innerText,
  1782.                 originalCode: b[d]
  1783.               };
  1784.             a[g.key] &&
  1785.               ((h.innerText = g.currentKey = a[g.key][0]),
  1786.               (b[d] = g.currentCode = a[g.key][1]),
  1787.               g.help && (b.help[g.help] = g.currentKey));
  1788.             y.push(g);
  1789.           }
  1790.         let f = () => y.some(({ currentCode: b, originalCode: a }) => b !== a);
  1791.         f() && c.classList.add("active");
  1792.         let g = () => {
  1793.             window.getSelection && window.getSelection().removeAllRanges();
  1794.             u.element.parentNode.parentNode.classList.remove("editing");
  1795.             u = null;
  1796.           },
  1797.           l = b => {
  1798.             u = b;
  1799.             u.element.parentNode.parentNode.classList.add("editing");
  1800.             if (-1 !== u.currentCode && window.getSelection) {
  1801.               b = window.getSelection();
  1802.               b.removeAllRanges();
  1803.               let a = document.createRange();
  1804.               a.selectNodeContents(u.element);
  1805.               b.addRange(a);
  1806.             }
  1807.           },
  1808.           k = (h, d) => {
  1809.             if (" " === h) (h = ""), (d = -1);
  1810.             else if (d !== u.currentCode) {
  1811.               let c = y.find(({ currentCode: b }) => b === d);
  1812.               c &&
  1813.                 ((c.currentKey = u.currentKey),
  1814.                 (c.element.innerText = u.currentKey),
  1815.                 (c.currentCode = u.currentCode),
  1816.                 (b[c.key] = u.currentCode),
  1817.                 c.help && (b.help[c.help] = u.currentKey),
  1818.                 (a[c.key] = [c.currentKey, c.currentCode]));
  1819.             }
  1820.             u.currentKey = h;
  1821.             u.element.innerText = h;
  1822.             u.currentCode = d;
  1823.             b[u.key] = d;
  1824.             u.help && (b.help[u.help] = h);
  1825.             a[u.key] = [u.currentKey, u.currentCode];
  1826.             N.keybindsJSON = JSON.stringify(a);
  1827.             g();
  1828.             f()
  1829.               ? (c.classList.remove("spin"), c.classList.add("active"))
  1830.               : c.classList.remove("active");
  1831.           };
  1832.         document.onclick = a => {
  1833.           if (!b.gameStart)
  1834.             if (u) g();
  1835.             else {
  1836.               var c = y.find(({ element: b }) => a.target === b);
  1837.               c && l(c);
  1838.             }
  1839.         };
  1840.         c.onclick = () => {
  1841.           if (f()) {
  1842.             u && g();
  1843.             for (let a of y)
  1844.               (a.currentKey = a.originalKey),
  1845.                 (a.element.innerText = a.originalKey),
  1846.                 (a.currentCode = a.originalCode),
  1847.                 (b[a.key] = a.originalCode),
  1848.                 a.help && (b.help[a.help] = a.originalKey);
  1849.             a = {};
  1850.             N.keybindsJSON = JSON.stringify(a);
  1851.             c.classList.remove("active");
  1852.             c.classList.add("spin");
  1853.           }
  1854.         };
  1855.         let x = null;
  1856.         h.onclick = () => {
  1857.           if (x) {
  1858.             for (var b = 0; b < x.length; b++) x[b].classList.add("hidden");
  1859.             x = null;
  1860.             h.classList.remove("x");
  1861.           } else {
  1862.             x = document.querySelectorAll("#controlTable tr.hidden");
  1863.             for (b = 0; b < x.length; b++) x[b].classList.remove("hidden");
  1864.             h.classList.add("x");
  1865.           }
  1866.         };
  1867.         document.onkeydown = a => {
  1868.           if (!(b.gameStart || a.shiftKey || a.ctrlKey || a.altKey)) {
  1869.             var c = a.which || a.keyCode;
  1870.             u
  1871.               ? 1 !== a.key.length ||
  1872.                 /[0-9of`]/i.test(a.key) ||
  1873.                 3 === a.location
  1874.                 ? ("Backspace" !== a.key && "Delete" !== a.key) || k(" ", 32)
  1875.                 : k(a.key.toUpperCase(), c)
  1876.               : (c !== b.KEY_ENTER && c !== b.KEY_SPAWN) || t();
  1877.           }
  1878.         };
  1879.       }
  1880.       document.getElementById("startButton").onclick = () => {
  1881.         var inputVal = document.getElementById("playerNameInput").value;
  1882.         if (inputVal === "")
  1883.           return (
  1884.             PlaySound211(), setTimeout(alert("Please enter a name!"), 30000)
  1885.           );
  1886.         PlaySound210();
  1887.         t();
  1888.       };
  1889.       let La = WebSocket.prototype.close;
  1890.       WebSocket.prototype.close = function(...b) {
  1891.         V.logCloseCall();
  1892.         La.call(this, ...b);
  1893.       };
  1894.       WebSocket.prototype.close.toString = Function.prototype.toString.bind(La);
  1895.       document.addEventListener("mouseenter", () => V.logMouse(!0));
  1896.       document.addEventListener("mouseleave", () => V.logMouse(!1));
  1897.       window.addEventListener("resize", () => {
  1898.         z.screenWidth = U.cv.width = b.screenWidth = window.innerWidth;
  1899.         z.screenHeight = U.cv.height = b.screenHeight = window.innerHeight;
  1900.       });
  1901.       var U = new (w(5))();
  1902.       b.mobile && document.body.classList.add("mobile");
  1903.       var g = U.cv.getContext("2d"),
  1904.         Ma = document.createElement("canvas").getContext("2d"),
  1905.         S = [],
  1906.         P = 0,
  1907.         Q = 0,
  1908.         Na = (() => {
  1909.           let b = [];
  1910.           return {
  1911.             get: () => (b.length ? b.reduce((b, a) => b + a, 0) / b.length : 0),
  1912.             add: a => {
  1913.               b.push(a);
  1914.               b.length > B.lag.memory && b.shift();
  1915.             }
  1916.           };
  1917.         })(),
  1918.         z = {
  1919.           x: 0,
  1920.           y: 0,
  1921.           cx: 0,
  1922.           cy: 0,
  1923.           vx: 0,
  1924.           vy: 0,
  1925.           lastvx: 0,
  1926.           lastvy: 0,
  1927.           renderx: 0,
  1928.           rendery: 0,
  1929.           renderv: 1,
  1930.           lastx: 0,
  1931.           lasty: 0,
  1932.           target: U.target,
  1933.           name: "",
  1934.           view: 1,
  1935.           lastUpdate: 0,
  1936.           time: 0
  1937.         };
  1938.       b.player = z;
  1939.       var ya = (() => {
  1940.         let a = 0,
  1941.           e = 0,
  1942.           c = 0,
  1943.           h = 0;
  1944.         return {
  1945.           reset: () => {
  1946.             e = a = 0;
  1947.           },
  1948.           get: () => ({
  1949.             x: a,
  1950.             y: e
  1951.           }),
  1952.           iterate: d => {
  1953.             if (b.died || b.gameStart) return 0;
  1954.             var y = A.accel / A.topSpeed;
  1955.             let f = Math.sqrt(d.x * d.x + d.y * d.y);
  1956.             c += (A.accel * d.x) / f;
  1957.             h += (A.accel * d.y) / f;
  1958.             d = Math.sqrt(c * c + h * h);
  1959.             0 < d &&
  1960.               y &&
  1961.               ((y = d / (y / 0 + 1)), (c = (y * c) / d), (h = (y * h) / d));
  1962.             a += c;
  1963.             e += h;
  1964.           }
  1965.         };
  1966.       })();
  1967.       const Pa = (() => {
  1968.         window.WebSocket = window.WebSocket || window.MozWebSocket;
  1969.         const a = w(6),
  1970.           e = (() => {
  1971.             const a = (() => {
  1972.               let b = 0,
  1973.                 a = [];
  1974.               return {
  1975.                 next: () => {
  1976.                   if (b >= a.length)
  1977.                     throw (console.error(a),
  1978.                     Error(
  1979.                       "Trying to crawl past the end of the provided data!"
  1980.                     ));
  1981.                   return a[b++];
  1982.                 },
  1983.                 all: () => a.slice(b),
  1984.                 take: c => {
  1985.                   b += c;
  1986.                   if (b > a.length)
  1987.                     throw (console.error(a),
  1988.                     Error(
  1989.                       "Trying to crawl past the end of the provided data!"
  1990.                     ));
  1991.                 },
  1992.                 set: c => {
  1993.                   a = c;
  1994.                   b = 0;
  1995.                 }
  1996.               };
  1997.             })();
  1998.             return {
  1999.               begin: b => a.set(b),
  2000.               data: (() => {
  2001.                 const b = (() => {
  2002.                   function c() {
  2003.                     let b = "normal",
  2004.                       a = Date.now();
  2005.                     return {
  2006.                       set: c => {
  2007.                         if (c !== b || "injured" === b)
  2008.                           "dying" !== b && (a = Date.now()), (b = c);
  2009.                       },
  2010.                       getFade: () =>
  2011.                         "dying" === b || "killed" === b
  2012.                           ? 1 - Math.min(1, (Date.now() - a) / 300)
  2013.                           : 1,
  2014.                       getColor: () =>   150 > Date.now() % 300 ? l.red : l.white, // make yo ass red if u injured lmfao
  2015.                       getBlend: () => {
  2016.                         let c =
  2017.                           "normal" === b || "dying" === b
  2018.                             ? 0
  2019.                             : 1 - Math.min(1, (Date.now() - a) / 80);
  2020.                         500 < Date.now() - a &&
  2021.                           "injured" === b &&
  2022.                           (b = "normal");
  2023.                         return c;
  2024.                       }
  2025.                     };
  2026.                   }
  2027.                   const h = (() => {
  2028.                     function b(b) {
  2029.                       b.isUpdated = !0;
  2030.                       if (b.motion || b.position)
  2031.                         (b.motion -= 0.2 * b.position),
  2032.                           (b.position += b.motion),
  2033.                           0 > b.position &&
  2034.                             ((b.position = 0), (b.motion = -b.motion)),
  2035.                           0 < b.motion && (b.motion *= 0.5);
  2036.                     }
  2037.                     return a => {
  2038.                       let c = [];
  2039.                       for (let b = 0; b < a; b++)
  2040.                         c.push({
  2041.                           motion: 0,
  2042.                           position: 0,
  2043.                           isUpdated: !0
  2044.                         });
  2045.                       return {
  2046.                         getPositions: () => c.map(b => b.position),
  2047.                         update: () => c.forEach(b),
  2048.                         fire: (b, a) => {
  2049.                           c[b].isUpdated && (c[b].motion += Math.sqrt(a) / 20);
  2050.                           c[b].isUpdated = !1;
  2051.                         },
  2052.                         length: c.length
  2053.                       };
  2054.                     };
  2055.                   })();
  2056.                   return (f = {}) => {
  2057.                     var d = null == f.facing,
  2058.                       e = a.next();
  2059.                     if (e & 1) (f.facing = a.next()), (f.layer = a.next());
  2060.                     else {
  2061.                       f.interval = J.rendergap;
  2062.                       f.id = a.next();
  2063.                       d = da.findIndex(b => b.id === f.id);
  2064.                       -1 !== d && (f = da.splice(d, 1)[0]);
  2065.                       d = -1 === d;
  2066.                       d ||
  2067.                         ((f.render.draws = !0),
  2068.                         (f.render.lastx = f.x),
  2069.                         (f.render.lasty = f.y),
  2070.                         (f.render.lastvx = f.vx),
  2071.                         (f.render.lastvy = f.vy),
  2072.                         (f.render.lastf = f.facing),
  2073.                         (f.render.lastRender = z.time));
  2074.                       f.index = a.next();
  2075.                       f.x = a.next();
  2076.                       f.y = a.next();
  2077.                       f.vx = a.next();
  2078.                       f.vy = a.next();
  2079.                       f.size = a.next();
  2080.                       f.facing = a.next();
  2081.                       f.vfacing = a.next();
  2082.                       f.twiggle = a.next();
  2083.                       f.layer = a.next();
  2084.                       f.color = a.next();
  2085.                       if (d) {
  2086.                         f.health = a.next() / 255;
  2087.                         var y = a.next();
  2088.                         f.shield = 0 > y ? NaN : y / 255;
  2089.                       } else {
  2090.                         y = f.health;
  2091.                         var g = f.shield;
  2092.                         f.health = a.next() / 255;
  2093.                         var u = a.next();
  2094.                         f.shield = 0 > u ? NaN : u / 255;
  2095.                         f.health < y || f.shield < g
  2096.                           ? f.render.status.set("injured")
  2097.                           : 1 !== f.render.status.getFade() &&
  2098.                             f.render.status.set("normal");
  2099.                       }
  2100.                       f.alpha = a.next() / 255;
  2101.                       f.drawsHealth = e & 2;
  2102.                       f.nameplate = e & 4;
  2103.                       f.invuln = e & 8 ? f.invuln || Date.now() : 0;
  2104.                       e & 4 && ((f.name = a.next()), (f.score = a.next()));
  2105.                       d &&
  2106.                         (f.render = {
  2107.                           draws: !1,
  2108.                           expandsWithDeath: f.drawsHealth,
  2109.                           lastRender: z.time,
  2110.                           x: f.x,
  2111.                           y: f.y,
  2112.                           lastx:
  2113.                             f.x - (1e3 / 30) * B.roomSpeed * J.rendergap * f.vx,
  2114.                           lasty:
  2115.                             f.y - (1e3 / 30) * B.roomSpeed * J.rendergap * f.vy,
  2116.                           lastvx: f.vx,
  2117.                           lastvy: f.vy,
  2118.                           lastf: f.facing,
  2119.                           f: f.facing,
  2120.                           h: f.health,
  2121.                           s: f.shield,
  2122.                           interval: J.rendergap,
  2123.                           slip: 0,
  2124.                           status: c(),
  2125.                           health: q(f.health, 0.5, 5),
  2126.                           shield: q(f.shield, 0.5, 5)
  2127.                         });
  2128.                       f.render.health.set(f.health);
  2129.                       f.render.shield.set(f.shield);
  2130.                       d || f.oldIndex === f.index || (d = !0);
  2131.                       f.oldIndex = f.index;
  2132.                     }
  2133.                     e = a.next();
  2134.                     if (d) f.guns = h(e);
  2135.                     else if (e !== f.guns.length)
  2136.                       throw Error(
  2137.                         "Mismatch between data gun number and remembered gun number!"
  2138.                       );
  2139.                     for (y = 0; y < e; y++)
  2140.                       (g = a.next()),
  2141.                         (u = a.next()),
  2142.                         g > z.lastUpdate - J.rendergap && f.guns.fire(y, u);
  2143.                     e = a.next();
  2144.                     if (d)
  2145.                       for (f.turrets = [], d = 0; d < e; d++)
  2146.                         f.turrets.push(b());
  2147.                     else {
  2148.                       if (f.turrets.length !== e)
  2149.                         throw Error(
  2150.                           "Mismatch between data turret number and remembered turret number!"
  2151.                         );
  2152.                       f.turrets.forEach(b);
  2153.                     }
  2154.                     return f;
  2155.                   };
  2156.                 })();
  2157.                 return () => {
  2158.                   let c = [];
  2159.                   for (let d = 0, f = a.next(); d < f; d++) c.push(b());
  2160.                   da.forEach(b => {
  2161.                     b.render.status.set(1 === b.health ? "dying" : "killed");
  2162.                     0 !== b.render.status.getFade() &&
  2163.                       R(
  2164.                         b.render.x - z.renderx,
  2165.                         b.render.y - z.rendery,
  2166.                         b.size,
  2167.                         !0
  2168.                       ) &&
  2169.                       c.push(b);
  2170.                   });
  2171.                   da = c;
  2172.                   da.sort((b, a) => b.layer - a.layer || a.id - b.id);
  2173.                 };
  2174.               })(),
  2175.               gui: () => {
  2176.                 var c = a.next(),
  2177.                   d = c & 2,
  2178.                   e = c & 4,
  2179.                   f = c & 8,
  2180.                   g = c & 16,
  2181.                   l = c & 32,
  2182.                   n = c & 64,
  2183.                   k = c & 128,
  2184.                   x = c & 256;
  2185.                 c & 1 && (A.fps = a.next());
  2186.                 d &&
  2187.                   ((A.type = a.next()),
  2188.                   (A.color = a.next()),
  2189.                   (A.playerid = a.next()));
  2190.                 e && A.__s.setScore(a.next());
  2191.                 f && (A.points = a.next());
  2192.                 if (g) {
  2193.                   A.upgrades = [];
  2194.                   for (let b = 0, c = a.next(); b < c; b++)
  2195.                     A.upgrades.push(a.next());
  2196.                 }
  2197.                 if (l)
  2198.                   for (c = 9; 0 <= c; c--)
  2199.                     (A.skills[c].name = a.next()),
  2200.                       (A.skills[c].cap = a.next()),
  2201.                       (A.skills[c].softcap = a.next());
  2202.                 n &&
  2203.                   ((n = parseInt(a.next(), 36)),
  2204.                   (A.skills[0].amount = (n / 68719476736) & 15),
  2205.                   (A.skills[1].amount = (n / 4294967296) & 15),
  2206.                   (A.skills[2].amount = (n / 268435456) & 15),
  2207.                   (A.skills[3].amount = (n / 16777216) & 15),
  2208.                   (A.skills[4].amount = (n / 1048576) & 15),
  2209.                   (A.skills[5].amount = (n / 65536) & 15),
  2210.                   (A.skills[6].amount = (n / 4096) & 15),
  2211.                   (A.skills[7].amount = (n / 256) & 15),
  2212.                   (A.skills[8].amount = (n / 16) & 15),
  2213.                   (A.skills[9].amount = (n / 1) & 15));
  2214.                 k && (A.accel = a.next());
  2215.                 x &&
  2216.                   ((A.party = a.next()),
  2217.                   "z" !== b.server.id && (location.hash = "#" + b.server.id));
  2218.               },
  2219.               broadcast: () => {
  2220.  
  2221.                 var c = a.all();
  2222.                 let d = Ba.update(c);
  2223.                 d = Ca.update(c, d);
  2224.                 d = Da.update(c, d);
  2225.                 a.take(d);
  2226.                 c = [];
  2227.                 for (let { id: a, data: f } of Ba.entries())
  2228.                   c.push({
  2229.                     id: a,
  2230.                     type: f[0],
  2231.                     x: (f[1] * b.gameWidth) / 255,
  2232.                     y: (f[2] * b.gameHeight) / 255,
  2233.                   color: f[3],
  2234.                     size: f[4]
  2235.                   });
  2236.                 for (let { id: a, data: f } of Ca.entries())
  2237.                   c.push({
  2238.                     id: a,
  2239.                     type: 0,
  2240.                     x: (f[0] * b.gameWidth) / 255,
  2241.                     y: (f[1] * b.gameHeight) / 255,
  2242.                     color: f[2],
  2243.                     size: 0
  2244.                   });
  2245.                 Ea.update(c);
  2246.                 c = [];
  2247.                 for (let { id: b, data: a } of Da.entries())
  2248.                   c.push({
  2249.                     id: b,
  2250.                     score: a[0],
  2251.                     index: a[1],
  2252.                     name: a[2],
  2253.                     color: a[3],
  2254.                     bar: a[4]
  2255.                   });
  2256.                 Fa.update(c);
  2257.               }
  2258.             };
  2259.           })();
  2260.         return () => {
  2261.           let c = "https:" === location.protocol ? 1 : -1,
  2262.             d = b.server.secure || c;
  2263.           1 === c &&
  2264.             -1 === d &&
  2265.             (location.href = location.href.replace("https:", "http:"));
  2266.           let g = new WebSocket(
  2267.             (1 === d ? "wss://" : "ws://") + b.server.at + "/"
  2268.           );
  2269.           g.binaryType = "arraybuffer";
  2270.           g.open = !1;
  2271.           g.cmd = (() => {
  2272.             let b = 0,
  2273.               a = 0,
  2274.               c = 0,
  2275.               d = 0,
  2276.               e = 0,
  2277.               h = 0;
  2278.             return {
  2279.               set(a, c) {
  2280.                 b = c ? b | (1 << a) : b & ~(1 << a);
  2281.                 this.talk();
  2282.               },
  2283.               setPosition(b, d) {
  2284.                 a = b;
  2285.                 c = d;
  2286.                 this.talk();
  2287.               },
  2288.               talk() {
  2289.                 var f = ma();
  2290.                 let y = Math.round(a / f);
  2291.                 f = Math.round(c / f);
  2292.                 if (d !== b || e !== y || h !== f)
  2293.                   g.talk("C", y, f, b), (d = b), (e = y), (h = f);
  2294.               },
  2295.               getMotion() {
  2296.                 return {
  2297.                   x: (b & 8 ? 1 : 0) - (b & 4 ? 1 : 0),
  2298.                   y: (b & 2 ? 1 : 0) - (b & 1 ? 1 : 0)
  2299.                 };
  2300.               }
  2301.             };
  2302.           })();
  2303.           g.talk = (...b) => {
  2304.             if (!g.open) return 1;
  2305.             g.send(a.encode(b));
  2306.           };
  2307.           g.onopen = function() {
  2308.             g.open = !0;
  2309.             b.message = "";
  2310.             b.playerKey ? g.talk("k", b.playerKey) : g.talk("k");
  2311.             g.ping = b => {
  2312.               g.talk("p", b);
  2313.             };
  2314.           };
  2315.           g.onmessage = function(c) {
  2316.             c = a.decode(c.data);
  2317.             if (!c) throw Error("Malformed packet.");
  2318.             switch (c.shift()) {
  2319.               case "w":
  2320.                 c[0]
  2321.                   ? (g.talk("s", b.playerName, b.partyLink),
  2322.                     V.reset(),
  2323.                     b.socket.ping(Date.now() - P - Q),
  2324.                     (b.message = ""))
  2325.                   : c[1] && (b.message = c[1]);
  2326.                 break;
  2327.               case "R":
  2328.                 b.gameWidth = c[0];
  2329.                 b.gameHeight = c[1];
  2330.                 Z = JSON.parse(c[2]);
  2331.                 Q = JSON.parse(c[3]);
  2332.                 B.roomSpeed = c[4];
  2333.                 "global.radial.enable" === c[5] && (b.radial = !0);
  2334.                 g.talk("S", Date.now() - P - Q);
  2335.                 break;
  2336.               case "r":
  2337.                 b.gameWidth = c[0];
  2338.                 b.gameHeight = c[1];
  2339.                 Z = JSON.parse(c[2]);
  2340.                 break;
  2341.               case "e":
  2342.                 if (!b.server.untrusted)
  2343.                   try {
  2344.                     new Function("$", c[0])(function(b) {
  2345.                       g.talk("T", b);
  2346.                     });
  2347.                   } catch (ha) {
  2348.                     g.talk("T", ha.message);
  2349.                   }
  2350.                 break;
  2351.               case "c":
  2352.                 z.cx = c[0];
  2353.                 z.cy = c[1];
  2354.                 z.view = c[2];
  2355.                 z.renderx = z.cx;
  2356.                 z.rendery = z.cy;
  2357.                 z.renderv = z.view;
  2358.      
  2359.                 break;
  2360.               case "S":
  2361.                 var d = c[0];
  2362.                 c = c[1];
  2363.                 d = (Date.now() - P - Q - d) / 2;
  2364.                 c = Date.now() - P - Q - d - c;
  2365.                 S.push({
  2366.                   delta: c,
  2367.                   latency: d
  2368.                 });
  2369.                 if (10 > S.length)
  2370.                   setTimeout(() => g.talk("S", Date.now() - P - Q), 75),
  2371.                     (b.message = `Loading... ${10 * S.length}%`);
  2372.                 else {
  2373.                   S.sort((b, a) => b.latency - a.latency);
  2374.                   let a = S[Math.floor(S.length / 2)].latency,
  2375.                     d = Math.sqrt(
  2376.                       S.map(b => b.latency - a)
  2377.                         .map(b => b * b)
  2378.                         .reduce((b, a) => b + a, 0) / S.length
  2379.                     );
  2380.                   c = S.filter(b => Math.abs(b.latency - a) < d).map(
  2381.                     b => b.delta
  2382.                   );
  2383.                   P = Math.round(c.reduce((b, a) => b + a, 0) / c.length);
  2384.                   b.gameStart = !0;
  2385.                   b.message = "";
  2386.                 }
  2387.                 break;
  2388.                 case "m": {  // broadcast
  2389.  
  2390.                        b.messages.push({
  2391.  
  2392.                             color:  c[1] ?? "black",
  2393.                             text: c[0],
  2394.                             status: 2,
  2395.                             alpha: 0,
  2396.                             time: Date.now(),
  2397.  
  2398.                      
  2399.                            
  2400.                          //   color: l.black || c[1] || c[2]
  2401.                         });
  2402.                     } break;
  2403.  
  2404. case "flicker": {  // The scary flicker thing
  2405.     // Trigger the flicker effect on screen
  2406.     triggerFlickerEffect();
  2407. const audio = new Audio('https://cdn.glitch.global/0719a336-46d8-4612-bdf3-0a5eac2faf67/ded.ogg?v=1745062506652');
  2408. oooerror()
  2409.  
  2410.     audio.play();
  2411.  
  2412.  
  2413. } break;
  2414.  
  2415. // Function to apply the flickering effect on the screen
  2416. function triggerFlickerEffect() {
  2417.     // Add flicker class to the body or a specific container
  2418.     document.body.classList.add('flicker');
  2419.  
  2420.     // Optionally, you can add some other visual effects like screen shake here
  2421.  
  2422.     // Remove the flicker effect after a certain time (e.g., 3 seconds)
  2423.     setTimeout(() => {
  2424.         document.body.classList.remove('flicker');
  2425.     }, 3000);  // 3000ms = 3 seconds
  2426. }
  2427.  
  2428.  
  2429.  
  2430.  case "amb": {  // ambience
  2431.     const audio = new Audio('https://cdn.glitch.global/0719a336-46d8-4612-bdf3-0a5eac2faf67/The%20Broken%20Script%20_Song.ogg%20%2B%20Reversed_%20(Low%20pitch%20%2B%20reverb)%2010%20minutes.mp3?v=1746202271605'); // Pfad zur Audiodatei
  2432.  
  2433.  
  2434.  
  2435.    
  2436.  
  2437.  
  2438.     audio.play();
  2439.      audio.loop = true;  // Set the sound to loop
  2440.  
  2441.  
  2442.    //   audio.play()
  2443.    } break;
  2444.  
  2445. case "explone": {
  2446.     // Play a loud explosion sound when near the bullet
  2447.     const audio = new Audio('https://cdn.glitch.global/0719a336-46d8-4612-bdf3-0a5eac2faf67/large-explosion-100420.mp3?v=' + Date.now());
  2448.     audio.currentTime = 0; // Ensure it starts from the beginning
  2449.     audio.play().catch(err => console.warn("Playback failed:", err));
  2450. } break;
  2451.  
  2452. case "explofar": {
  2453.     // Play a distant explosion sound when far from the bullet
  2454.     const audio = new Audio('https://cdn.glitch.global/0719a336-46d8-4612-bdf3-0a5eac2faf67/distant-explosion-90743.mp3?v=' + Date.now());
  2455.     audio.currentTime = 0; // Ensure it starts from the beginning
  2456.     audio.play().catch(err => console.warn("Playback failed:", err));
  2457. } break;
  2458.  
  2459.  
  2460.    case "js": {  // audio
  2461.     const audio = new Audio('https://cdn.glitch.global/0719a336-46d8-4612-bdf3-0a5eac2faf67/ded.ogg?v=1745062506652'); // Pfad zur Audiodatei
  2462.  
  2463.  
  2464.     const jumpscare = document.getElementById("jumpscare");
  2465.    
  2466.  
  2467.     jumpscare.style.display = "flex";
  2468.     audio.play();
  2469.  
  2470.  
  2471.     setTimeout(() => {
  2472.       jumpscare.style.display = "none";
  2473.    
  2474.     }, 5000);
  2475.  
  2476.    //   audio.play()
  2477.    } break;
  2478.  
  2479.   case "js2": {  // audio
  2480.     const audio = new Audio('https://cdn.glitch.global/0719a336-46d8-4612-bdf3-0a5eac2faf67/nulljumpscareoverhaul.ogg?v=1745062667896'); // Pfad zur Audiodatei
  2481.  
  2482.  
  2483.     const jumpscare = document.getElementById("jumpscare");
  2484.    
  2485.  
  2486.     jumpscare.style.display = "flex";
  2487.     audio.play();
  2488.  
  2489.  
  2490.     setTimeout(() => {
  2491.       jumpscare.style.display = "none";
  2492.    
  2493.     }, 5000);
  2494.  
  2495.    //   audio.play()
  2496.    } break;
  2497.               case "u":
  2498.                 {
  2499.                   d = c[0];
  2500.                   let a = c[1],
  2501.                     f = c[2],
  2502.                     h = c[3],
  2503.                     n = c[4],
  2504.                     l = c[5];
  2505.                   c = c.slice(6);
  2506.                   d > z.lastUpdate
  2507.                     ? (Na.add(Date.now() - P - Q - d),
  2508.                       (z.time = d + Na.get()),
  2509.                       (J.rendergap = d - z.lastUpdate),
  2510.                       (z.lastUpdate = d),
  2511.                       e.begin(c),
  2512.                       e.gui(),
  2513.                       e.data(),
  2514.                       (z.lastx = z.cx),
  2515.                       (z.lasty = z.cy),
  2516.                       (z.lastvx = z.vx),
  2517.                       (z.lastvy = z.vy),
  2518.                       (z.cx = a),
  2519.                       (z.cy = f),
  2520.                       (z.vx = b.died ? 0 : n),
  2521.                       (z.vy = b.died ? 0 : l),
  2522.                       isNaN(z.renderx) && (z.renderx = z.cx),
  2523.                       isNaN(z.rendery) && (z.rendery = z.cy),
  2524.                       ya.reset(),
  2525.                       (z.view = h),
  2526.                       z.renderv || (z.renderv = 2e3),
  2527.                       (J.lastlag = J.lag),
  2528.                       (J.lastuplink = Date.now()))
  2529.                     : console.warn(
  2530.                         `Old data! Last given time: ${z.time}; offered packet timestamp: ${d}.`
  2531.                       );
  2532.                   g.talk("d", Math.max(z.lastUpdate, d));
  2533.                   pa++;
  2534.                 }
  2535.                 break;
  2536.               case "b":
  2537.                 e.begin(c);
  2538.                 e.broadcast();
  2539.  
  2540.                 break;
  2541.               case "p":
  2542.                 setTimeout(() => b.socket.ping(Date.now() - P - Q), 50);
  2543.                 16 <= J.latency.length && J.latency.shift();
  2544.                 c = Date.now() - P - Q - c[0];
  2545.                 0 < c && J.latency.push(c);
  2546.                 break;
  2547.               case "F":
  2548.                 V.logEvent("die");
  2549.                 b.finalScore = q(0, 4);
  2550.                 b.finalScore.set(c[0]);
  2551.                 b.finalLifetime = q(0, 5);
  2552.                 b.finalLifetime.set(c[1]);
  2553.                 b.finalKills = [q(0, 3), q(0, 4.5), q(0, 2.5)];
  2554.                 b.finalKills[0].set(c[2]);
  2555.                 b.finalKills[1].set(c[3]);
  2556.                 b.finalKills[2].set(c[4]);
  2557.                 b.finalKillers = [];
  2558.                 for (d = 0; d < c[5]; d++) b.finalKillers.push(c[6 + d]);
  2559.                 b.died = !0;
  2560.                 b.respawnOn = Date.now() + (ia ? 0e3 : 0e3);
  2561.  
  2562.               case "K":
  2563.                 b.isInGame = !1;
  2564.                 c[0] && (b.message = c[0]);
  2565.                 break;
  2566.               default:
  2567.                 throw Error("Unknown message index.");
  2568.             }
  2569.           };
  2570.           g.onclose = function(a) {
  2571.             V.logEvent("disconnect");
  2572.             g.open = !1;
  2573.             b.disconnected = !0;
  2574.             b.isInGame &&
  2575.               ((b.isInGame = !1),
  2576.               b.died ||
  2577.                 b.message ||
  2578.                 (b.message = "Socket closed. Refresh to continue playing!"));
  2579.             PlaySound212();
  2580.             console.warn("WebSocket closed: ", a);
  2581.           };
  2582.           g.onerror = function(a) {
  2583.             console.warn("WebSocket error", a);
  2584.             b.message || (b.message = "Socket error. Try again later.");
  2585.             b.isInGame = !1;
  2586.           };
  2587.           return g;
  2588.         };
  2589.       })();
  2590.       var l = {
  2591.         teal: "#7ADBBC",
  2592.         lgreen: "#B9E87E",
  2593.         orange: "#E7896D",
  2594.         yellow: "#FDF380",
  2595.         lavender: "#B58EFD",
  2596.         pink: "#EF99C3",
  2597.         vlgrey: "#b8b9ba",
  2598.         lgrey: "#AA9F9E",
  2599.         guiwhite: "#FFFFFF",
  2600.         black: "#484848",
  2601.         blue: "#3CA4CB",
  2602.         green: "#8ABC3F",
  2603.         red: "#E03E41",
  2604.         gold: "#EFC74B",
  2605.         purple: "#8D6ADF",
  2606.         magenta: "#CC669C",
  2607.         grey: "#A7A7AF",
  2608.         dgrey: "#726F6F",
  2609.         white: "#DBDBDB",
  2610.         guiblack: "#000000",
  2611.         paletteSize: 10,
  2612.         border: 0.65
  2613.       };
  2614.       let va = w(7),
  2615.         ua = !1;
  2616.       const ta = (() => {
  2617.           let b = document.createElement("canvas").getContext("2d");
  2618.           if (b.measureText) {
  2619.             if (b.measureText("test").emHeightAscent)
  2620.               return (a, c, d = !1) => {
  2621.                 c += B.graphical.fontSizeBoost;
  2622.                 b.font = "bold " + c + "px Ubuntu";
  2623.                 a = b.measureText(a);
  2624.                 return d
  2625.                   ? {
  2626.                       width: a.width,
  2627.                       height: a.emHeightAscent
  2628.                     }
  2629.                   : a.width;
  2630.               };
  2631.             let a = document.createElement("div");
  2632.             a.style.padding = "0";
  2633.             a.style.margin = "0";
  2634.             a.style.position = "absolute";
  2635.             a.style.visibility = "hidden";
  2636.             document.body.appendChild(a);
  2637.             return (c, d, e = !1) => {
  2638.               d += B.graphical.fontSizeBoost;
  2639.               if (e)
  2640.                 return (
  2641.                   (a.style.font = "bold " + d + "px Ubuntu"),
  2642.                   (a.innerText = c),
  2643.                   {
  2644.                     width: a.clientWidth,
  2645.                     height: a.clientHeight
  2646.                   }
  2647.                 );
  2648.               b.font = "bold " + d + "px Ubuntu";
  2649.               return b.measureText(c).width;
  2650.             };
  2651.           }
  2652.           let a = document.createElement("div");
  2653.           a.style.padding = "0";
  2654.           a.style.margin = "0";
  2655.           a.style.position = "absolute";
  2656.           a.style.visibility = "hidden";
  2657.           a.style.whiteSpace = "pre";
  2658.           document.body.appendChild(a);
  2659.           return (b, d, e = !1) => {
  2660.             d += B.graphical.fontSizeBoost;
  2661.             a.style.font = "bold " + d + "px Ubuntu";
  2662.             return e
  2663.               ? {
  2664.                   width: a.clientWidth,
  2665.                   height: a.clientHeight
  2666.                 }
  2667.               : a.clientWidth;
  2668.           };
  2669.         })(),
  2670.         m = (() => {
  2671.           let b = (b = null) => {
  2672.             let a = !0;
  2673.             return {
  2674.               update: c => {
  2675.                 let d = !1;
  2676.                 if (null == b) d = !0;
  2677.                 else
  2678.                   switch ((typeof c !== typeof b && (d = !0), typeof c)) {
  2679.                     case "number":
  2680.                     case "string":
  2681.                       c !== b && (d = !0);
  2682.                       break;
  2683.                     case "object":
  2684.                       if (Array.isArray(c)) {
  2685.                         if (c.length !== b.length) d = !0;
  2686.                         else
  2687.                           for (let a = 0, f = c.length; a < f; a++)
  2688.                             c[a] !== b[a] && (d = !0);
  2689.                         break;
  2690.                       }
  2691.                     default:
  2692.                       throw (console.error(c),
  2693.                       Error("Unsupported type for a floppyvar!"));
  2694.                   }
  2695.                 d && ((a = !0), (b = c));
  2696.               },
  2697.               publish: () => b,
  2698.               check: () => (a ? ((a = !1), !0) : !1)
  2699.             };
  2700.           };
  2701.           return () => {
  2702.             let a = document.createElement("canvas").getContext("2d");
  2703.             a.imageSmoothingEnabled = !1;
  2704.             let c = [b(""), b(0), b(0), b(1), b("#FF0000"), b("left")]; //FF0000
  2705.             c.map(b => b.publish());
  2706.             let d = 0,
  2707.               e = 0;
  2708.             return {
  2709.               draw: (b, f, h, k, n, u = "left", x = !1) => {
  2710.                 k += B.graphical.fontSizeBoost;
  2711.                 c[0].update(b);
  2712.                 c[1].update(f);
  2713.                 c[2].update(h);
  2714.                 c[3].update(k);
  2715.                 c[4].update(n);
  2716.                 c[5].update(u);
  2717.                 if (c.some(b => b.check())) {
  2718.                   let c = Math.max(3, k / 5),
  2719.                     f = ta(b, k - B.graphical.fontSizeBoost, !0);
  2720.                   a.canvas.height = f.height + 2 * c;
  2721.                   a.canvas.width = f.width + 2 * c;
  2722.                   switch (u) {
  2723.                     case "left":
  2724.                       d = c;
  2725.                       break;
  2726.                     case "center":
  2727.                       d = a.canvas.width / 2;
  2728.                       break;
  2729.                     case "right":
  2730.                       d = a.canvas.width - c;
  2731.                   }
  2732.                   e = a.canvas.height / 2;
  2733.                   a.lineWidth = c;
  2734.                   a.font = "bold " + k + "px Ubuntu";
  2735.                   a.textAlign = u;
  2736.                   a.textBaseline = "middle";
  2737.                   a.strokeStyle = l.black; // l.black (basically all the text itself)
  2738.                   a.fillStyle = n; //n text color
  2739.                  a.lineCap = "round";
  2740.                   a.lineJoin = "round";
  2741.                   a.strokeText(b, d, e); //
  2742.               //    a.strokeText(b, d, e);
  2743.             //      a.fillText(b, d, e);
  2744.                   a.fillText(b, d, e,);
  2745.                 }
  2746.                 g.drawImage(
  2747.                   a.canvas,
  2748.                   Math.round(f - d),
  2749.                   Math.round(h - e * (x ? 1.05 : 1.5))
  2750.                 );
  2751.               }
  2752.             };
  2753.           };
  2754.         })(),
  2755.         ba = (() => {
  2756.           function b(b, a, d, e, g, f = 0) {
  2757.             b.beginPath();
  2758.             if (g)
  2759.               if (g instanceof Array) {
  2760.                 var c = Math.cos(f);
  2761.                 f = Math.sin(f);
  2762.                 for (let [h, l] of g)
  2763.                   b.lineTo(a + e * (h * c - l * f), d + e * (l * c + h * f));
  2764.                 b.closePath();
  2765.               } else {
  2766.                 if ("string" === typeof g) {
  2767.                   g = new Path2D(g);
  2768.                   b.save();
  2769.                   b.translate(a, d);
  2770.                   b.scale(e, e);
  2771.                   b.lineWidth /= e;
  2772.                   b.rotate(f);
  2773.                   B.graphical.inversedRender
  2774.                     ? (b.stroke(g), b.fill(g))
  2775.                     : (b.fill(g), b.stroke(g));
  2776.                   b.restore();
  2777.                   return;
  2778.                 }
  2779.                 if (0 > g) {
  2780.                   0 === g % 2 && (f += Math.PI / g);
  2781.                   g = -g;
  2782.                   let l = 1 - 6 / (g * g);
  2783.                   b.lineJoin = B.graphical.pointy ? "miter" : "round";
  2784.                   b.moveTo(a + e * Math.cos(f), d + e * Math.sin(f));
  2785.                   for (let k = 0; k < g; k++) {
  2786.                     c = ((k + 1) / g) * 2 * Math.PI;
  2787.                     var h = ((k + 0.5) / g) * 2 * Math.PI;
  2788.                     b.quadraticCurveTo(
  2789.                       a + e * l * Math.cos(h + f),
  2790.                       d + e * l * Math.sin(h + f),
  2791.                       a + e * Math.cos(c + f),
  2792.                       d + e * Math.sin(c + f)
  2793.                     );
  2794.                   }
  2795.                   B.graphical.pointy && b.closePath();
  2796.                   B.graphical.inversedRender
  2797.                     ? (b.stroke(), b.fill())
  2798.                     : (b.fill(), b.stroke());
  2799.                   b.lineJoin = B.graphical.pointy ? "miter" : "round";
  2800.                   return;
  2801.                 }
  2802.                 if (0 < g) {
  2803.                   0 === g % 2 && (f += Math.PI / g);
  2804.                   for (c = 0; c < g; c++)
  2805.                     (h = (c / g) * 2 * Math.PI),
  2806.                       b.lineTo(
  2807.                         a + e * Math.cos(h + f),
  2808.                         d + e * Math.sin(h + f)
  2809.                       );
  2810.                   b.closePath();
  2811.                 }
  2812.               }
  2813.             else b.arc(a, d, e, 0, 2 * Math.PI);
  2814.             B.graphical.inversedRender
  2815.               ? (b.stroke(), b.fill())
  2816.               : (b.fill(), b.stroke());
  2817.           }
  2818.           return (
  2819.             a,
  2820.             c,
  2821.             d,
  2822.             x,
  2823.             t = 1,
  2824.             f = 1,
  2825.             m = 0,
  2826.             p = !1,
  2827.             z = !1,
  2828.             q = !1,
  2829.             F = d.render
  2830.           ) => {
  2831.             let h = z || g,
  2832.               u = q ? 1 : F.status.getFade();
  2833.             f = f * x * d.size;
  2834.             let n = M[d.index],
  2835.               y = a,
  2836.               R = c;
  2837.             q = !1 === q ? d : q;
  2838.             if (0 !== u && 0 !== t) {
  2839.               F.expandsWithDeath && (f *= 1 + 0.5 * (1 - u));
  2840.               if (z !== Ma && (1 !== u || 1 !== t))
  2841.                 if (B.graphical.fancyAnimations)
  2842.                   (h = Ma),
  2843.                     (h.canvas.width = h.canvas.height =
  2844.                       f * n.position.axis + 20 * x),
  2845.                     (y =
  2846.                       h.canvas.width / 2 -
  2847.                       (f *
  2848.                         n.position.axis *
  2849.                         n.position.middle.x *
  2850.                         Math.cos(m)) /
  2851.                         4),
  2852.                     (R =
  2853.                       h.canvas.height / 2 -
  2854.                       (f *
  2855.                         n.position.axis *
  2856.                         n.position.middle.x *
  2857.                         Math.sin(m)) /
  2858.                         4),
  2859.                     (z = !1);
  2860.                 else if (0.5 > u * t) return;
  2861.               "object" !== typeof h && (h = g);
  2862.               h.lineCap = "round";
  2863.               h.lineJoin = B.graphical.sharp ? "miter" : "round";
  2864.               if (q.turrets.length === n.turrets.length)
  2865.                 for (var E = 0; E < n.turrets.length; E++) {
  2866.                   var v = n.turrets[E];
  2867.                   if (0 === v.layer) {
  2868.                     var w = v.direction + v.angle + m,
  2869.                       A = v.offset * f;
  2870.                     ba(
  2871.                       y + A * Math.cos(w),
  2872.                       R + A * Math.sin(w),
  2873.                       v,
  2874.                       x,
  2875.                       t,
  2876.                       (f / x / v.size) * v.sizeFactor,
  2877.                       q.turrets[E].facing + p * m,
  2878.                       p,
  2879.                       h,
  2880.                       q.turrets[E],
  2881.                       F
  2882.                     );
  2883.                   }
  2884.                 }
  2885.               else throw Error("Mismatch turret number with mockup.");
  2886.               q.guns.update();
  2887.               h.lineWidth = Math.max(
  2888.                 B.graphical.mininumBorderChunk,
  2889.                 x * B.graphical.borderChunk
  2890.               );
  2891.               E = F.status.getColor();
  2892.               w = F.status.getBlend();
  2893.               E = T(e(d.color), E, w);
  2894.               d.invuln &&
  2895.                 100 > (Date.now() - d.invuln) % 200 &&
  2896.                 ((v = T(v, l.vlgrey, 0.3)), (E = T(E, l.vlgrey, 0.3))); // dunno l.vlgrey l.vlgrey
  2897.               if (q.guns.length === n.guns.length)
  2898.                 for (w = q.guns.getPositions(), A = 0; A < n.guns.length; A++) {
  2899.                   var D = n.guns[A],
  2900.                     r = 1 === D.aspect ? w[A] / 2 : w[A];
  2901.                   {
  2902.                     d = h;
  2903.                     v =
  2904.                       y +
  2905.                       f *
  2906.                         (D.offset * Math.cos(D.direction + D.angle + m) +
  2907.                           (D.length / 2 - r) * Math.cos(D.angle + m));
  2908.                     r =
  2909.                       R +
  2910.                       f *
  2911.                         (D.offset * Math.sin(D.direction + D.angle + m) +
  2912.                           (D.length / 2 - r) * Math.sin(D.angle + m));
  2913.                     var C = f * (D.length / 2 - (1 === D.aspect ? w[A] : 0)),
  2914.                       L = (f * D.width) / 2,
  2915.                       G = D.aspect;
  2916.                     D = D.angle + m;
  2917.                     var X = L;
  2918.                     0 < G ? (X *= G) : 0 > G && (L *= -G);
  2919.                     G = Math.atan2(X, C);
  2920.                     let b = Math.atan2(L, C);
  2921.                     X = Math.sqrt(C * C + X * X);
  2922.                     C = Math.sqrt(C * C + L * L);
  2923.                     var lol =
  2924.                       D.color != null
  2925.                         ? T(
  2926.                             e(D.color),
  2927.                             F.status.getColor(),
  2928.                             F.status.getBlend()
  2929.                           )
  2930.                         : T(l.grey, F.status.getColor(), F.status.getBlend()); //l.grey //THE BARREL COLOR THING
  2931.                     k(h, lol);
  2932.                     d.beginPath();
  2933.                     d.moveTo(v + X * Math.cos(D + G), r + X * Math.sin(D + G));
  2934.                     d.lineTo(
  2935.                       v + C * Math.cos(D + Math.PI - b),
  2936.                       r + C * Math.sin(D + Math.PI - b)
  2937.                     );
  2938.                     d.lineTo(
  2939.                       v + C * Math.cos(D + Math.PI + b),
  2940.                       r + C * Math.sin(D + Math.PI + b)
  2941.                     );
  2942.                     d.lineTo(v + X * Math.cos(D - G), r + X * Math.sin(D - G));
  2943.                     d.closePath();
  2944.                     B.graphical.inversedRender
  2945.                       ? (d.stroke(), d.fill())
  2946.                       : (d.fill(), d.stroke());
  2947.                   }
  2948.                 }
  2949.               else throw Error("Mismatch gun number with mockup.");
  2950.               h.globalAlpha = 1;
  2951.               k(h, E);
  2952.               b(h, y, R, (f / n.size) * n.realSize, n.shape, m);
  2953.               if (q.turrets.length === n.turrets.length)
  2954.                 for (E = 0; E < n.turrets.length; E++)
  2955.                   (d = n.turrets[E]),
  2956.                     1 === d.layer &&
  2957.                       ((v = d.direction + d.angle + m),
  2958.                       (w = d.offset * f),
  2959.                       ba(
  2960.                         y + w * Math.cos(v),
  2961.                         R + w * Math.sin(v),
  2962.                         d,
  2963.                         x,
  2964.                         t,
  2965.                         (f / x / d.size) * d.sizeFactor,
  2966.                         q.turrets[E].facing + p * m,
  2967.                         p,
  2968.                         h,
  2969.                         q.turrets[E],
  2970.                         F
  2971.                       ));
  2972.               else throw Error("Mismatch turret number with mockup.");
  2973.               z ||
  2974.                 h === g ||
  2975.                 (g.save(),
  2976.                 (g.globalAlpha = t * u),
  2977.                 g.drawImage(h.canvas, a - y, c - R),
  2978.                 g.restore());
  2979.             }
  2980.           };
  2981.         })();
  2982.       window.requestAnimationFrame ||
  2983.         (window.requestAnimationFrame =
  2984.           window.webkitRequestAnimationFrame ||
  2985.           window.mozRequestAnimationFrame ||
  2986.           window.msRequestAnimationFrame ||
  2987.           function(b) {
  2988.             window.setTimeout(b, 1e3 / 60);
  2989.           });
  2990.       const Ra = (() => {
  2991.           const a = q(0, 0.7, 1.5),
  2992.             k = q(0, 2, 3),
  2993.             c = class {
  2994.               constructor(b, a = !1) {
  2995.                 this.color = b;
  2996.                 this.zeroMin = a;
  2997.                 this.data = [];
  2998.               }
  2999.               addValue(b) {
  3000.                 this.data.push(b);
  3001.               }
  3002.               draw(b, a, c, d) {
  3003.                 for (; this.data.length > c; ) this.data.shift();
  3004.                 let e = this.zeroMin ? 0 : Math.min(...this.data),
  3005.                   f = Math.max(...this.data),
  3006.                   h = f - e;
  3007.                 if (0 !== h) {
  3008.                   0 < f && 0 > e && K(b, b + c, a + (d * f) / h, 2, l.guiwhite);
  3009.                   g.beginPath();
  3010.                   g.moveTo(b, a + (d * (f - this.data[0])) / h);
  3011.                   for (c = 1; c < this.data.length; c++)
  3012.                     g.lineTo(b + c, a + (d * (f - this.data[c])) / h);
  3013.                   g.lineWidth = 1;
  3014.                   g.strokeStyle = this.color;
  3015.                   g.stroke();
  3016.                 }
  3017.               }
  3018.               getPeriodicAverage() {
  3019.                 var b = this.zeroMin ? 0 : Math.min(...this.data),
  3020.                   a = Math.max(...this.data);
  3021.                 a = 0.1 * b + 0.9 * a;
  3022.                 var c = !1;
  3023.                 b = [];
  3024.                 for (var d = this.data.length - 1; 0 <= d; d--) {
  3025.                   let f = this.data[d];
  3026.                   if (f > a)
  3027.                     if (c) {
  3028.                       let a = b[b.length - 1];
  3029.                       f > a.max && ((a.max = f), (a.at = d));
  3030.                     } else
  3031.                       (c = !0),
  3032.                         b.push({
  3033.                           max: f,
  3034.                           at: d
  3035.                         });
  3036.                   else c && (c = !1);
  3037.                 }
  3038.                 if (2 > b.length) return null;
  3039.                 a = b.pop().at;
  3040.                 b = b.pop().at;
  3041.                 c = 0;
  3042.                 for (d = a; d < b; d++) c += this.data[d];
  3043.                 return c / (b - a);
  3044.               }
  3045.             },
  3046.             h = (() => {
  3047.               function a(b, a, c, d, f, e) {
  3048.                 f = Math.cos((1 + e) * Math.PI);
  3049.                 return (
  3050.                   0.5 * (((1 + e) * c + b) * (f + 1) + (-e * d + a) * (1 - f))
  3051.                 );
  3052.               }
  3053.  
  3054.               function c(b, a) {
  3055.                 var c = 2 * Math.PI;
  3056.                 return ((((b - a + Math.PI) % c) + c) % c) - Math.PI;
  3057.               }
  3058.               let d = (a = !1, d = J.rendergap) => {
  3059.                   a =
  3060.                     !1 === a
  3061.                       ? Date.now() - J.lastuplink
  3062.                       : Date.now() - P - Q - a;
  3063.                   d = Math.max(d, 1e3 / B.roomSpeed / 30);
  3064.                   let f = b.noPredict ? 1 : a / d;
  3065.                   return {
  3066.                     predict: (b, a) => (1 <= f ? a : b + (a - b) * f),
  3067.                     predictExtrapolate: (b, a) => b + (a - b) * f,
  3068.                     predictFacing: (b, a) => (1 <= f ? a : b + c(a, b) * f),
  3069.                     predictFacingExtrapolate: (b, a) => b + c(a, b) * f,
  3070.                     getPrediction: () => f
  3071.                   };
  3072.                 },
  3073.                 f = (b = z.time, d = J.rendergap) => {
  3074.                   let f = 0,
  3075.                     e = 0,
  3076.                     g = 0;
  3077.                   f = Math.max(Date.now() - P - Q - b - 80, -d);
  3078.                   150 < f && (f = 150);
  3079.                   e = f / d;
  3080.                   g = (30 * B.roomSpeed * f) / 1e3;
  3081.                   return {
  3082.                     predict: (b, c, d, h) =>
  3083.                       0 <= f ? c + (c - b) * e : a(b, c, d, h, g, e),
  3084.                     predictExtrapolate: (b, c, d, h) =>
  3085.                       0 <= f ? c + (c - b) * e : a(b, c, d, h, g, e),
  3086.                     predictFacing: (b, a) => b + (1 + e) * c(a, b),
  3087.                     predictFacingExtrapolate: (b, a) => b + (1 + e) * c(a, b),
  3088.                     getPrediction: () => f
  3089.                   };
  3090.                 };
  3091.               return (...b) => (B.lag.newPrediction ? d(...b) : f(...b));
  3092.             })(),
  3093.             u = new c(l.yellow),
  3094.             t = new c(l.orange, !0),
  3095.             f = new c(l.pink),
  3096.             E = new c(l.teal),
  3097.             v = (() => {
  3098.               let b = [];
  3099.               for (let a = 0; a < 2 * B.gui.expectedMaxSkillLevel; a++)
  3100.                 b.push(
  3101.                   Math.log((4 * a) / B.gui.expectedMaxSkillLevel + 1) /
  3102.                     Math.log(5)
  3103.                 );
  3104.               return a => b[a];
  3105.             })();
  3106.           var p = [m(), m(), m(), m(), m(), m(), m(), m(), m(), m()],
  3107.             w = [m(), m(), m(), m(), m(), m(), m(), m(), m(), m()],
  3108.             R = [m(), m(), m(), m(), m(), m(), m(), m(), m(), m()],
  3109.             r = m(),
  3110.             C = m(),
  3111.             N = m(),
  3112.             S = m(),
  3113.             W = [m(), m(), m(), m(), m(), m(), m()],
  3114.             V = m(),
  3115.             ca = [m(), m(), m(), m(), m(), m(), m(), m(), m(), m()],
  3116.             aa = [
  3117.               m(),
  3118.               m(),
  3119.               m(),
  3120.               m(),
  3121.               m(),
  3122.               m(),
  3123.               m(),
  3124.               m(),
  3125.               m(),
  3126.               m(),
  3127.               m(),
  3128.               m(),
  3129.               m(),
  3130.               m(),
  3131.               m()
  3132.             ],
  3133.             ea = [
  3134.               m(),
  3135.               m(),
  3136.               m(),
  3137.               m(),
  3138.               m(),
  3139.               m(),
  3140.               m(),
  3141.               m(),
  3142.               m(),
  3143.               m(),
  3144.               m(),
  3145.               m(),
  3146.               m(),
  3147.               m(),
  3148.               m()
  3149.             ],
  3150.             fa = m();
  3151.           return c => {
  3152.             Date.now();
  3153.             let d = 0;
  3154.             oa++;
  3155.             let n =
  3156.                 Math.max(b.screenWidth, (16 * b.screenHeight) / 9) /
  3157.                 (1280 >= b.screenWidth
  3158.                   ? 1280
  3159.                   : 1920 <= b.screenWidth
  3160.                   ? 1920
  3161.                   : b.screenWidth),
  3162.               q,
  3163.               y;
  3164.             {
  3165.               let b = h();
  3166.               d = b.getPrediction();
  3167.               let a = b.predict(z.lastx, z.cx, z.lastvx, z.vx),
  3168.                 f = b.predict(z.lasty, z.cy, z.lastvy, z.vy);
  3169.               z.renderx = a;
  3170.               z.rendery = f;
  3171.               q = c * z.renderx;
  3172.               y = c * z.rendery;
  3173.             }
  3174.             {
  3175.               F(l.white, 1);
  3176.               F(l.guiblack, 0.1);
  3177.               if (b.radial)
  3178.                 g.save(),
  3179.                   g.translate(b.screenWidth / 2, b.screenHeight / 2),
  3180.                   g.rotate(
  3181.                     Math.atan2(b.gameWidth / 2 - z.cx, b.gameHeight / 2 - z.cy)
  3182.                   ),
  3183.                   g.translate(b.screenWidth / -2, b.screenHeight / -2),
  3184.                   (g.globalAlpha = 1),
  3185.                   (g.fillStyle = l.white),
  3186.                   g.beginPath(),
  3187.                   g.arc(
  3188.                     -q + b.screenWidth / 2 + (c * b.gameWidth) / 2,
  3189.                     -y + b.screenHeight / 2 + (c * b.gameHeight) / 2,
  3190.                     (c * b.gameWidth) / 2,
  3191.                     0,
  3192.                     2 * Math.PI
  3193.                   ),
  3194.                   g.fill();
  3195.               else {
  3196.                 g.globalAlpha = 1;
  3197.                 g.fillStyle = l.white;
  3198.                 g.fillRect(
  3199.                   -q + b.screenWidth / 2,
  3200.                   -y + b.screenHeight / 2,
  3201.                   c * b.gameWidth,
  3202.                   c * b.gameHeight
  3203.                 );
  3204.                 let a = Z[0].length,
  3205.                   d = Z.length;
  3206.                 for (let f = 0; f < d; f++) {
  3207.                   let e = Z[f];
  3208.                   for (let h = 0; h < a; h++) {
  3209.                     let l = (c * h * b.gameWidth) / a - q + b.screenWidth / 2,
  3210.                       k = (c * f * b.gameHeight) / d - y + b.screenHeight / 2,
  3211.                       Ia =
  3212.                         (c * (h + 1) * b.gameWidth) / a - q + b.screenWidth / 2,
  3213.                       n =
  3214.                         (c * (f + 1) * b.gameHeight) / d -
  3215.                         y +
  3216.                         b.screenHeight / 2;
  3217.                     if (
  3218.                       !b.radial &&
  3219.                       (k >= b.screenHeight ||
  3220.                         0 >= Ia ||
  3221.                         l >= b.screenWidth ||
  3222.                         0 >= n)
  3223.                     )
  3224.                       continue;
  3225.                     g.globalAlpha = 0.3;
  3226.                     let u = x(e[h]);
  3227.                     u !== u.white &&
  3228.                       ((g.fillStyle = u), g.fillRect(l, k, Ia - l, n - k));
  3229.                   }
  3230.                 }
  3231.               }
  3232.               g.lineWidth = 1;
  3233.               g.strokeStyle = l.guiblack;
  3234.               g.globalAlpha = 0.04;
  3235.               g.beginPath();
  3236.               let a = 30 * c;
  3237.               if (b.radial) {
  3238.                 let d =
  3239.                   30 *
  3240.                   Math.ceil(
  3241.                     Math.sqrt(
  3242.                       b.screenWidth * b.screenWidth +
  3243.                         b.screenHeight * b.screenHeight
  3244.                     ) /
  3245.                       c /
  3246.                       c /
  3247.                       60
  3248.                   ) *
  3249.                   c;
  3250.                 for (
  3251.                   let c = ((b.screenWidth / 2 - q) % a) - d;
  3252.                   c < b.screenWidth + d;
  3253.                   c += a
  3254.                 )
  3255.                   g.moveTo(c, -d), g.lineTo(c, d + b.screenHeight);
  3256.                 for (
  3257.                   let c = ((b.screenHeight / 2 - y) % a) - d;
  3258.                   c < b.screenHeight + d;
  3259.                   c += a
  3260.                 )
  3261.                   g.moveTo(-d, c), g.lineTo(d + b.screenWidth, c);
  3262.               } else {
  3263.                 for (
  3264.                   let c = (b.screenWidth / 2 - q) % a;
  3265.                   c < b.screenWidth;
  3266.                   c += a
  3267.                 )
  3268.                   g.moveTo(c, 0), g.lineTo(c, b.screenHeight);
  3269.                 for (
  3270.                   let c = (b.screenHeight / 2 - y) % a;
  3271.                   c < b.screenHeight;
  3272.                   c += a
  3273.                 )
  3274.                   g.moveTo(0, c), g.lineTo(b.screenWidth, c);
  3275.               }
  3276.               g.stroke();
  3277.               g.globalAlpha = 1;
  3278.               b.radial && g.restore();
  3279.             }
  3280.             {
  3281.               z.x = z.y = null;
  3282.               let a, d;
  3283.               if (b.radial) {
  3284.                 g.save();
  3285.                 g.translate(b.screenWidth / 2, b.screenHeight / 2);
  3286.                 let c = Math.atan2(
  3287.                   b.gameWidth / 2 - z.cx,
  3288.                   b.gameHeight / 2 - z.cy
  3289.                 );
  3290.                 a = Math.cos(c);
  3291.                 d = Math.sin(c);
  3292.                 g.rotate(c);
  3293.               }
  3294.               da.forEach(function(a) {
  3295.                 if (a.render.draws) {
  3296.                   if (1 === a.render.status.getFade()) {
  3297.                     var d = h();
  3298.                     a.render.x = d.predict(
  3299.                       a.render.lastx,
  3300.                       a.x,
  3301.                       a.render.lastvx,
  3302.                       a.vx
  3303.                     );
  3304.                     a.render.y = d.predict(
  3305.                       a.render.lasty,
  3306.                       a.y,
  3307.                       a.render.lastvy,
  3308.                       a.vy
  3309.                     );
  3310.                     a.render.f = d.predictFacing(a.render.lastf, a.facing);
  3311.                   } else
  3312.                     (d = h(a.render.lastRender, a.interval)),
  3313.                       (a.render.x = d.predictExtrapolate(
  3314.                         a.render.lastx,
  3315.                         a.x,
  3316.                         a.render.lastvx,
  3317.                         a.vx
  3318.                       )),
  3319.                       (a.render.y = d.predictExtrapolate(
  3320.                         a.render.lasty,
  3321.                         a.y,
  3322.                         a.render.lastvy,
  3323.                         a.vy
  3324.                       )),
  3325.                       (a.render.f = d.predictFacingExtrapolate(
  3326.                         a.render.lastf,
  3327.                         a.facing
  3328.                       ));
  3329.                   a.id === A.playerid &&
  3330.                     0 === (a.twiggle & 1) &&
  3331.                     ((a.render.f = Math.atan2(U.target.y, U.target.x)),
  3332.                     b.radial &&
  3333.                       (a.render.f -= Math.atan2(
  3334.                         b.gameWidth / 2 - z.cx,
  3335.                         b.gameHeight / 2 - z.cy
  3336.                       )),
  3337.                     a.twiggle & 2 && (a.render.f += Math.PI));
  3338.                   d = c * a.render.x - q;
  3339.                   var f = c * a.render.y - y;
  3340.                   b.radial
  3341.                     ? a.id === A.playerid &&
  3342.                       ((z.x = d + b.screenWidth / 2),
  3343.                       (z.y = f + b.screenHeight / 2))
  3344.                     : ((d += b.screenWidth / 2),
  3345.                       (f += b.screenHeight / 2),
  3346.                       a.id === A.playerid && ((z.x = d), (z.y = f)));
  3347.                   ba(
  3348.                     d,
  3349.                     f,
  3350.                     a,
  3351.                     c,
  3352.                     a.id === A.playerid || b.showInvisible
  3353.                       ? a.alpha
  3354.                         ? 0.6 * a.alpha + 0.4
  3355.                         : 0.25
  3356.                       : a.alpha,
  3357.                     0 === M[a.index].shape ? 1 : B.graphical.compensationScale,
  3358.                     a.render.f,
  3359.                     !1,
  3360.                     !0
  3361.                   );
  3362.                 }
  3363.               });
  3364.               b.radial && g.restore();
  3365.               if (!B.graphical.screenshotMode)
  3366.                 for (let f of da) {
  3367.                   let e = c * f.render.x - q,
  3368.                     g = c * f.render.y - y;
  3369.                   if (b.radial) {
  3370.                     let c = a * g + d * e;
  3371.                     e = a * e - d * g + b.screenWidth / 2;
  3372.                     g = c + b.screenHeight / 2;
  3373.                   } else (e += b.screenWidth / 2), (g += b.screenHeight / 2);
  3374.                   Qa(e, g, f, c, f.id === A.playerid ? 1 : f.alpha);
  3375.                 }
  3376.             }
  3377.             if (!b.hideGui) {
  3378.               var L = (a, c) => {
  3379.                 b.screenWidth /= a;
  3380.                 b.screenHeight /= a;
  3381.                 g.scale(a, a);
  3382.                 c || (n *= a);
  3383.               };
  3384.               L(n, !0);
  3385.               A.__s.update();
  3386.               var O = Fa.get(),
  3387.                 na = O.max;
  3388.               do {
  3389.                 if (!b.showTree) break;
  3390.                 let a = M.find(b => "basic" === b.name);
  3391.                 if (!a) break;
  3392.                 let c = [],
  3393.                   d = [],
  3394.                   f = (b, a, e, { index: g, tier: h = 0 }) => {
  3395.                     c.push({
  3396.                       x: b,
  3397.                       y: a,
  3398.                       colorIndex: e,
  3399.                       index: g
  3400.                     });
  3401.                     let { upgrades: k } = M[g];
  3402.                     switch (h) {
  3403.                       case 3:
  3404.                         return {
  3405.                           width: 1,
  3406.                           height: 1
  3407.                         };
  3408.                       case 2:
  3409.                         return (
  3410.                           k.forEach((c, d) => f(b, a + 2 + d, d, c)),
  3411.                           d.push([
  3412.                             {
  3413.                               x: b,
  3414.                               y: a
  3415.                             },
  3416.                             {
  3417.                               x: b,
  3418.                               y: a + 1 + k.length
  3419.                             }
  3420.                           ]),
  3421.                           {
  3422.                             width: 1,
  3423.                             height: 2 + k.length
  3424.                           }
  3425.                         );
  3426.                       case 1:
  3427.                       case 0: {
  3428.                         let c = b;
  3429.                         e = k.map((e, g) => {
  3430.                           let l = 2 * (e.tier - h);
  3431.                           e = f(b, a + l, g, e);
  3432.                           d.push([
  3433.                             {
  3434.                               x: b,
  3435.                               y: a + (0 === g ? 0 : 1)
  3436.                             },
  3437.                             {
  3438.                               x: b,
  3439.                               y: a + l
  3440.                             }
  3441.                           ]);
  3442.                           g + 1 === k.length &&
  3443.                             d.push([
  3444.                               {
  3445.                                 x: c,
  3446.                                 y: a + 1
  3447.                               },
  3448.                               {
  3449.                                 x: b,
  3450.                                 y: a + 1
  3451.                               }
  3452.                             ]);
  3453.                           b += e.width;
  3454.                           return e;
  3455.                         });
  3456.                         return {
  3457.                           width: e.map(b => b.width).reduce((b, a) => b + a, 0),
  3458.                           height: 2 + Math.max(...e.map(b => b.height))
  3459.                         };
  3460.                       }
  3461.                     }
  3462.                   },
  3463.                   h = f(0, 0, 0, {
  3464.                     index: a.index
  3465.                   }),
  3466.                   k = Math.min(
  3467.                     (0.9 * b.screenWidth) / h.width,
  3468.                     (0.9 * b.screenHeight) / h.height
  3469.                   );
  3470.                 g.globalAlpha = 0.5;
  3471.                 g.fillStyle = l.guiwhite;
  3472.                 G(0, 0, b.screenWidth, b.screenHeight);
  3473.                 let n = k - 4;
  3474.                 g.strokeStyle = l.black; // black
  3475.                 g.lineWidth = 2;
  3476.                 g.beginPath();
  3477.                 for (let [a, c] of d) {
  3478.                   let d =
  3479.                       b.screenWidth / 2 + (c.x - h.width / 2) * k + 1 + 0.5 * n,
  3480.                     f =
  3481.                       b.screenHeight / 2 +
  3482.                       (c.y - h.height / 2) * k +
  3483.                       1 +
  3484.                       0.5 * n;
  3485.                   g.moveTo(
  3486.                     Math.round(
  3487.                       b.screenWidth / 2 + (a.x - h.width / 2) * k + 1 + 0.5 * n
  3488.                     ) + 0.5,
  3489.                     Math.round(
  3490.                       b.screenHeight / 2 +
  3491.                         (a.y - h.height / 2) * k +
  3492.                         1 +
  3493.                         0.5 * n
  3494.                     ) + 0.5
  3495.                   );
  3496.                   g.lineTo(Math.round(d) + 0.5, Math.round(f) + 0.5);
  3497.                 }
  3498.                 g.stroke();
  3499.                 for (let { x: a, y: d, colorIndex: f, index: x } of c) {
  3500.                   let c = b.screenWidth / 2 + (a - h.width / 2) * k + 2,
  3501.                     u = b.screenHeight / 2 + (d - h.height / 2) * k + 2;
  3502.                   g.globalAlpha = 1;
  3503.                   g.fillStyle = e(f + 10);
  3504.                   G(c, u, n, n);
  3505.                   g.globalAlpha = 0.2;
  3506.                   g.fillStyle = e(f);
  3507.                   G(c, u, n, 0.6 * n);
  3508.                   g.fillStyle = l.black; //   BLACK
  3509.                   G(c, u + 0.6 * n, n, 0.4 * n);
  3510.                   g.globalAlpha = 1;
  3511.                   let t = -Math.PI / 4,
  3512.                     q = D(x, A.color),
  3513.                     v = M[x].position,
  3514.                     m = (0.8 * n) / v.axis;
  3515.                   ba(
  3516.                     c + 0.5 * n - m * v.middle.x * Math.cos(t),
  3517.                     u + 0.5 * n - m * v.middle.x * Math.sin(t),
  3518.                     q,
  3519.                     0.5,
  3520.                     1,
  3521.                     (m / q.size) * 2,
  3522.                     t,
  3523.                     !0
  3524.                   );
  3525.                   g.strokeStyle = l.black; //black
  3526.                   g.lineWidth = 2;
  3527.                   G(c, u, n, n, !0);
  3528.                 }
  3529.               } while (0);
  3530.               if (b.mobile && "joysticks" === U.control) {
  3531.                 let a = Math.min(0.6 * b.screenWidth, 0.12 * b.screenHeight);
  3532.                 g.globalAlpha = 0.3;
  3533.                 g.fillStyle = "#ffffff"; //fffffff
  3534.                 g.beginPath();
  3535.                 g.arc(
  3536.                   (1 * b.screenWidth) / 6,
  3537.                   (2 * b.screenHeight) / 3,
  3538.                   a,
  3539.                   0,
  3540.                   2 * Math.PI
  3541.                 );
  3542.                 g.arc(
  3543.                   (5 * b.screenWidth) / 6,
  3544.                   (2 * b.screenHeight) / 3,
  3545.                   a,
  3546.                   0,
  3547.                   2 * Math.PI
  3548.                 );
  3549.                 g.fill();
  3550.               }
  3551.               b.mobile && L(1.4);
  3552.               {
  3553.                 let c = b.screenWidth / 2,
  3554.                   d = 20;
  3555.                 b.mobile &&
  3556.                   (d +=
  3557.                     (b.canSkill ? (200 / 3 / 1.4) * a.get() : 0) +
  3558.                     (b.canUpgrade && 40 + 114 * A.upgrades.length > 1.4 * c
  3559.                       ? (100 / 1.4) * k.get()
  3560.                       : 0));
  3561.                 for (let b = Y.length - 1; 0 <= b; b--) {
  3562.                   let a = Y[b],
  3563.                     f = a.text;
  3564.                   null == a.textobj && (a.textobj = m());
  3565.                   null == a.len && (a.len = ta(f, 14));
  3566.                   g.globalAlpha = 0.5 * a.alpha;
  3567. //  let color = ["#FF0000"]
  3568.  
  3569. let colorbd = [m]
  3570. let color = ["#ff0000"]
  3571.  
  3572. /*function colorFlip(hex) {
  3573.     let col = hex.split("");
  3574.     console.log([hex, col])
  3575.     let [r, g, b] = [Number(col[1] + col[2]), Number(col[3] + col[4]), Number(col[5] + col[6])];
  3576.     console.log("#" + r + g + b);
  3577.     [r, g, b] = [255 - parseInt(r, 10), 255 - parseInt(g, 10), 255 - parseInt(b, 10)];
  3578.     console.log("#" + r + g + b);
  3579.     [r, g, b] = [r.toString(16), g.toString(16), b.toString(16)];
  3580.     console.log("#" + r + g + b);
  3581.     return "#" + r + g + b;
  3582. }*/
  3583.                  
  3584.                 //  K(c - a.len / 2, c + a.len / 2, d + 9, 18, null );  
  3585.                       K(c - a.len / 2, c + a.len / 2, d + 9, 18, (a.color in a ? l[a.color] : a.color));    // black  IMPORTANT FOR COLORED BROADCAST
  3586.                   //g.strokeStyle = color;
  3587.                   g.globalAlpha = Math.min(1, a.alpha);
  3588.        //           a.textobj.draw(f, c, d + 9, 14, (a.color in a ? l[a.color] : a.color), "center", !0); // !0
  3589.      a.textobj.draw(f, c, d + 9, 14, (l.guiwhite in a ? l.guiwhite: l.guiwhite), "center", !0); // !0
  3590.                   d += 22;
  3591.                   1 < a.status && (d -= 22 * (1 - Math.sqrt(a.alpha)));
  3592.                   1 < a.status
  3593.                     ? ((a.status -= 0.05), (a.alpha += 0.05))
  3594.                     : 0 === b &&
  3595.                       (5 < Y.length || 1e4 < Date.now() - a.time) &&
  3596.                       ((a.status -= 0.05),
  3597.                       (a.alpha -= 0.05),
  3598.                       0 >= a.alpha && Y.shift());
  3599.                 }
  3600.                 g.globalAlpha = 1;
  3601.               }
  3602.               b.mobile && L(1 / 1.4);
  3603.               if (!b.mobile) {
  3604.                 b.canSkill =
  3605.                   0 < A.points && A.skills.some(b => b.amount < b.cap);
  3606.                 a.set(0 + (b.canSkill || b.died || b.statHover));
  3607.                 b.clickables.stat.hide();
  3608.                 let c = 200,
  3609.                   d = c,
  3610.                   f = -20 - 2 * c + a.get() * (40 + 2 * c),
  3611.                   e = b.screenHeight - 20 - 15,
  3612.                   h = 11,
  3613.                   k = A.getStatNames(M[A.type].statnames || -1);
  3614.                 A.skills.forEach(function(a) {
  3615.                   h--;
  3616.                   let x = k[h - 1],
  3617.                     u = a.amount,
  3618.                     t = l[a.color];
  3619.                   var q = a.softcap;
  3620.                   a = a.cap;
  3621.                   if (q) {
  3622.                     c = d;
  3623.                     let k = B.gui.expectedMaxSkillLevel;
  3624.                     var m = q < a;
  3625.                     q > k && (k = q);
  3626.                     K(
  3627.                       f + 7.5,
  3628.                       f - 7.5 + c * v(q),
  3629.                       e + 7.5,
  3630.                       12 + B.graphical.barChunk,
  3631.                       l.black
  3632.                     );
  3633.                     K(f + 7.5, f + 7.5 + (c - 35) * v(q), e + 7.5, 12, l.grey); // l.grey // THE THING FOR HEALTH BS
  3634.                     K(f + 7.5, f + 7.5 + (c - 35) * v(u), e + 7.5, 11.5, t);
  3635.                     if (m)
  3636.                       for (
  3637.                         g.lineWidth = 1, g.strokeStyle = l.grey, m = q + 1; // grey
  3638.                         m < k;
  3639.                         m++
  3640.                       )
  3641.                         ka(
  3642.                           f + (c - 35) * v(m),
  3643.                           e + 1.5,
  3644.                           f + (c - 35) * v(m),
  3645.                           e - 3 + 15
  3646.                         );
  3647.                     g.strokeStyle = l.black;
  3648.                     g.lineWidth = 1;
  3649.                     for (m = 1; m < u + 1; m++)
  3650.                       ka(
  3651.                         f + (c - 35) * v(m),
  3652.                         e + 1.5,
  3653.                         f + (c - 35) * v(m),
  3654.                         e - 3 + 15
  3655.                       );
  3656.                     c = d * v(k);
  3657.                     q =
  3658.                       u === a
  3659.                         ? t
  3660.                         : !A.points || (q !== a && u === q)
  3661.                         ? l.grey // l.grey
  3662.                         : l.guiwhite;
  3663.                     p[h - 1].draw(
  3664.                       x,
  3665.                       Math.round(f + c / 2) + 0.5,
  3666.                       e + 7.5,
  3667.                       10,
  3668.                       q,
  3669.                       "center",
  3670.                       !0
  3671.                     );
  3672.                     w[h - 1].draw(
  3673.                       "[" + (h % 10) + "]",
  3674.                       Math.round(f + c - 3.75) - 1.5,
  3675.                       e + 7.5,
  3676.                       10,
  3677.                       q,
  3678.                       "right",
  3679.                       !0
  3680.                     );
  3681.                     q === l.guiwhite &&
  3682.                       b.clickables.stat.place(
  3683.                         h - 1,
  3684.                         f * n,
  3685.                         e * n,
  3686.                         c * n,
  3687.                         15 * n
  3688.                       );
  3689.                     u &&
  3690.                       R[h - 1].draw(
  3691.                         q === t ? "MAX" : "+" + u,
  3692.                         Math.round(f + c + 4) + 0.5,
  3693.                         e + 7.5,
  3694.                         10,
  3695.                         t,
  3696.                         "left",
  3697.                         !0
  3698.                       );
  3699.                     e -= 19;
  3700.                   }
  3701.                 });
  3702.                 b.clickables.hover.place(
  3703.                   0,
  3704.                   0,
  3705.                   e * n,
  3706.                   0.8 * c * n,
  3707.                   0.8 * (b.screenHeight - e) * n
  3708.                 );
  3709.                 1 < A.points &&
  3710.                   r.draw(
  3711.                     "x" + A.points,
  3712.                     Math.round(f + c - 2) + 0.5,
  3713.                     Math.round(e + 15 - 4) + 0.5,
  3714.                     20,
  3715.                     l.guiwhite,
  3716.                     "right"
  3717.                   );
  3718.               }
  3719.               {
  3720.                 let a = 25,
  3721.                   c = (b.screenWidth - 330) / 2,
  3722.                   d = b.screenHeight - 20 - a;
  3723.                 ia || b.mobile || !b.died || (d -= 110);
  3724.                 g.lineWidth = 1;
  3725.                 K(c, c + 330, d + a / 2, a - 3 + B.graphical.barChunk, l.black);
  3726.                 K(c, c + 330, d + a / 2, a - 3, l.grey);  // grey this is for the level bar backgroud
  3727.                 K(c, c + 330 * A.__s.getProgress(), d + a / 2, a - 3.5, l.gold);
  3728.                 S.draw(
  3729.                   "Level " + A.__s.getLevel() + " " + M[A.type].name,
  3730.                   c + 165,
  3731.                   d + a / 2,
  3732.                   a - 4,
  3733.                   l.guiwhite,
  3734.                   "center",
  3735.                   !0
  3736.                 );
  3737.                 a = 14;
  3738.                 d -= a + 4;
  3739.                 K(
  3740.                   c + 33,
  3741.                   c + 297,
  3742.                   d + a / 2,
  3743.                   a - 3 + B.graphical.barChunk,
  3744.                   l.black
  3745.                 );
  3746.                 K(c + 33, c + 297, d + a / 2, a - 3, l.grey); // l.grey
  3747.                 K(
  3748.                   c + 33,
  3749.                   c +
  3750.                     330 *
  3751.                       (0.1 +
  3752.                         0.8 * (na ? Math.min(1, A.__s.getScore() / na) : 1)),
  3753.                   d + a / 2,
  3754.                   a - 3.5,
  3755.                   l.green
  3756.                 );
  3757.                 C.draw(
  3758.                   "Score: " + H.formatLargeNumber(A.__s.getScore()),
  3759.                   c + 165,
  3760.                   d + a / 2,
  3761.                   a - 2,
  3762.                   l.guiwhite,
  3763.                   "center",
  3764.                   !0
  3765.                 );
  3766.                 g.lineWidth = 4; /*
  3767.                                 if (//name color) {
  3768.                                 N.draw(z.name, Math.round(c + 165) + .5, Math.round(d - 10 - 4) + .5, 32, l.yellow, "center")
  3769.                                 } else {*/
  3770.                 N.draw(
  3771.                   z.name,
  3772.                   Math.round(c + 165) + 0.5,
  3773.                   Math.round(d - 10 - 4) + 0.5,
  3774.                   32,
  3775.                   l.guiwhite,
  3776.                   "center"
  3777.                 );
  3778.                 if (z.name.includes("[AI]"))
  3779.                   N.draw(
  3780.                     z.name,
  3781.                     Math.round(c + 165) + 0.5,
  3782.                     Math.round(d - 10 - 4) + 0.5,
  3783.                     32,
  3784.                     150 > Date.now() % 300 ? l.lgrey : l.lgrey,
  3785.                     "center"
  3786.                   );
  3787.                 if (z.name.includes("[DEV]"))
  3788.                   N.draw(
  3789.                     z.name,
  3790.                     Math.round(c + 165) + 0.5,
  3791.                     Math.round(d - 10 - 4) + 0.5,
  3792.                     32,
  3793.                   150> Date.now() % 300 ? l.red : T(
  3794.               [
  3795.                 "#ff1000",
  3796.                 "#ff9000",
  3797.                 "#ffd300",
  3798.                 "#00e00b",
  3799.                 "#226ef6",
  3800.                 "#a913cf"
  3801.               ][Math.floor((Date.now() / 200) % 6)],
  3802.               [
  3803.                 "#ff9000",
  3804.                 "#ffd300",
  3805.                 "#00e00b",
  3806.                 "#226ef6",
  3807.                 "#a913cf",
  3808.                 "#ff1000"
  3809.               ][Math.floor((Date.now() / 200) % 6)],
  3810.               (Date.now() / 200) % 1
  3811.             ),
  3812.            
  3813.                     "center"
  3814.                    
  3815.                   );
  3816.                 //};// name color
  3817.               }
  3818.               b.mobile && L(0.8);
  3819.               {
  3820.                 let c = (200 / b.gameWidth) * b.gameHeight,
  3821.                   h = b.screenWidth - 20,
  3822.                   n = b.screenHeight - 20,
  3823.                   q = (a, c, d, f, h) => {
  3824.                     if (!b.radial) {
  3825.                       let b = Z[0].length,
  3826.                         e = Z.length,
  3827.                         h = d / b,
  3828.                         k = f / e;
  3829.                       for (let d = 0; d < e; d++) {
  3830.                         let f = Z[d];
  3831.                         for (let e = 0; e < b; e++)
  3832.                           (g.globalAlpha = 0.6),
  3833.                             (g.fillStyle = x(f[e])),
  3834.                             G(a + e * h, c + d * k, h, k);
  3835.                       }
  3836.                     }
  3837.                     g.globalAlpha = 0.3;
  3838.                     g.fillStyle = T(l.grey, l.vlgrey); //l.grey, l.vlgrey  // for the map
  3839.                     b.radial ? G(a + d / 2, c + f / 2, d / 2) : G(a, c, d, f);
  3840.                     for (let f of Ea.get())
  3841.                       (g.fillStyle = T(e(f.color), l.black, 0.3)), //l.black // we stopped here
  3842.                         (g.globalAlpha = f.alpha),
  3843.                         2 === f.type
  3844.                           ? G(
  3845.                               a + ((f.x - f.size) / b.gameWidth) * d - 0.4,
  3846.                               c + ((f.y - f.size) / b.gameWidth) * d - 1,
  3847.                               ((2 * f.size) / b.gameWidth) * d + 0.2,
  3848.                               ((2 * f.size) / b.gameWidth) * d + 0.2
  3849.                             )
  3850.                           : 1 === f.type
  3851.                           ? ja(
  3852.                               a + (f.x / b.gameWidth) * d,
  3853.                               c + (f.y / b.gameWidth) * d,
  3854.                               (f.size / b.gameWidth) * d + 0.2
  3855.                             )
  3856.                           : f.id !== A.playerid &&
  3857.                             ja(
  3858.                               a + (f.x / b.gameWidth) * d,
  3859.                               c + (f.y / b.gameWidth) * d,
  3860.                               h
  3861.                             );
  3862.                     g.fillStyle = l.black;
  3863.                     g.globalAlpha = 1;
  3864.                     ja(
  3865.                       a + (z.cx / b.gameWidth) * d,
  3866.                       c + (z.cy / b.gameWidth) * d,
  3867.                       h
  3868.                     );
  3869.                     g.strokeStyle = l.black;
  3870.                     g.lineWidth = 3;
  3871.                     b.radial
  3872.                       ? ja(a + d / 2, c + f / 2, d / 2, !0)
  3873.                       : G(a, c, d, f, !0);
  3874.                   };
  3875.                 if (b.mobile) {
  3876.                   h -= 200;
  3877.                   let d =
  3878.                     (b.canSkill ? (200 / 3 + 40) * a.get() : 0) +
  3879.                     (b.canUpgrade ? 140 * k.get() : 0);
  3880.                   q(20, 20 + d, 200, c, 4);
  3881.                 } else (h -= 200), (n -= c), q(h, n, 200, c, 2);
  3882.                 let m = n - 10,
  3883.                   v = J.latency.reduce((b, a) => b + a, 0) / J.latency.length,
  3884.                   y = Math.sqrt(z.vx * z.vx + z.vy * z.vy);
  3885.                 b.showDebug &&
  3886.                   (G(h, n - 40, 200, 30),
  3887.                   u.addValue(d),
  3888.                   u.draw(h, n - 40, 200, 30),
  3889.                   t.addValue(y),
  3890.                   t.draw(h, n - 40, 200, 30),
  3891.                   E.addValue(J.rendergap),
  3892.                   E.draw(h, n - 40, 200, 30),
  3893.                   f.addValue(v),
  3894.                   f.draw(h, n - 40, 200, 30),
  3895.                   (m -= 40));
  3896.                 if (B.graphical.screenshotMode)
  3897.                   W[6].draw(
  3898.                     "Lunix",
  3899.                     h + 200,
  3900.                     m - 2,
  3901.                     15,
  3902.                     l.guiwhite,
  3903.                     "right"
  3904.                   );
  3905.                 else {
  3906.                   if (b.showDebug) {
  3907.                     W[6].draw(
  3908.                       "Lunix",
  3909.                       h + 200,
  3910.                       m - 84 - 2,
  3911.                       15,
  3912.                       l.guiwhite,
  3913.                       "right"
  3914.                     );
  3915.                     let b = t.getPeriodicAverage();
  3916.                     W[5].draw(
  3917.                       "Tank Speed: " +
  3918.                         y.toFixed(2) +
  3919.                         " gu/s" +
  3920.                         (b && 0.005 <= b ? ` (${b.toFixed(2)} gu/s)` : ""),
  3921.                       h + 200,
  3922.                       m - 70,
  3923.                       10,
  3924.                       l.blue,
  3925.                       "right"
  3926.                     );
  3927.                     W[4].draw(
  3928.                       "Prediction: " + d.toFixed(3),
  3929.                       h + 200,
  3930.                       m - 56,
  3931.                       10,
  3932.                       l.purple,
  3933.                       "right"
  3934.                     );
  3935.                     W[3].draw(
  3936.                       "Update Rate: " + J.updatetime + "Hz",
  3937.                       h + 200,
  3938.                       m - 42,
  3939.                       10,
  3940.                       l.green,
  3941.                       "right"
  3942.                     );
  3943.                   } else
  3944.                     W[6].draw(
  3945.                       "Lunix",
  3946.                       h + 200,
  3947.                       m - 42 - 2,
  3948.                       15,
  3949.                       l.purple,
  3950.                       "right"
  3951.                     );
  3952.                   W[2].draw(
  3953.                     "Client Speed: " + J.rendertime + " FPS",
  3954.                     h + 200,
  3955.                     m - 28,
  3956.                     10,
  3957.                     10 < J.rendertime ? l.blue : l.red,
  3958.                     "right"
  3959.                   );
  3960.                   W[1].draw(
  3961.                     "Server Speed: " + (100 * A.fps).toFixed(2) + "%",
  3962.                     h + 200,
  3963.                     m - 14,
  3964.                     10,
  3965.                     1 === A.fps ? l.green : l.red,
  3966.                     "right"
  3967.                   );
  3968.                   W[0].draw(
  3969.                     v.toFixed(1) +
  3970.                       " ms  " +
  3971.                       b.server.code +
  3972.                       " :" +
  3973.                       b.server.type +
  3974.                       ":",
  3975.                     h + 200,
  3976.                     m,
  3977.                     10,
  3978.                     l.magenta,
  3979.                     "right"
  3980.                   );
  3981.                 }
  3982.               }
  3983.               b.mobile && L(1.25);
  3984.               b.mobile && L(1.4);
  3985.               if (!B.graphical.screenshotMode) {
  3986.                 let c = b.screenWidth - 200 - 20,
  3987.                   d = 48;
  3988.                 b.mobile &&
  3989.                   (d +=
  3990.                     (b.canSkill ? (200 / 3 / 1.4) * a.get() : 0) +
  3991.                     (b.canUpgrade && 40 + 114 * A.upgrades.length > 1.4 * c
  3992.                       ? (100 / 1.4) * k.get()
  3993.                       : 0));
  3994.                 0 < O.data.length &&
  3995.                   V.draw(
  3996.                     "Leaderboard",
  3997.                     Math.round(c + 100) + 0.5,
  3998.                     Math.round(d - 10) + 0.5,
  3999.                     18,
  4000.                     l.guiwhite,
  4001.                     "center"
  4002.                   );
  4003.                 for (
  4004.                   let a = 0;
  4005.                   a < O.data.length && (!b.mobile || 6 > a);
  4006.                   a++
  4007.                 ) {
  4008.                   let b = O.data[a];
  4009.                   K(c, c + 200, d + 7, 11 + B.graphical.barChunk, l.black);
  4010.                   K(c, c + 200, d + 7, 11, l.grey); // dunno what dis do
  4011.                   K(
  4012.                     c,
  4013.                     c + 200 * Math.min(1, b.score / na),
  4014.                     d + 7,
  4015.                     10.5,
  4016.                     b.barColor
  4017.                   );
  4018.                   ca[a].draw(
  4019.                     b.label + ": " + H.handleLargeNumber(Math.round(b.score)),
  4020.                     c + 100,
  4021.                     d + 7,
  4022.                     9,
  4023.                     l.guiwhite,
  4024.                     "center",
  4025.                     !0
  4026.                   );
  4027.                   if (b.label.includes("[AI]"))
  4028.                     ca[a].draw(
  4029.                       b.label + ": " + H.handleLargeNumber(Math.round(b.score)),
  4030.                       c + 100,
  4031.                       d + 7,
  4032.                       9,
  4033.                       150 > Date.now() % 300 ? "#cccecf" : "#cccecf",
  4034.                       "center",
  4035.                       !0
  4036.                     );
  4037.                   if (b.label.includes("[DEV]"))
  4038.                     ca[a].draw(
  4039.                       b.label + ": " + H.handleLargeNumber(Math.round(b.score)),
  4040.                       c + 100,
  4041.                       d + 8,
  4042.                       9,
  4043.            
  4044.                  
  4045.                   150> Date.now() % 300 ? l.red : T(
  4046.               [
  4047.                 "#ff1000",
  4048.                 "#ff9000",
  4049.                 "#ffd300",
  4050.                 "#00e00b",
  4051.                 "#226ef6",
  4052.                 "#a913cf"
  4053.               ][Math.floor((Date.now() / 200) % 6)],
  4054.               [
  4055.                 "#ff9000",
  4056.                 "#ffd300",
  4057.                 "#00e00b",
  4058.                 "#226ef6",
  4059.                 "#a913cf",
  4060.                 "#ff1000"
  4061.               ][Math.floor((Date.now() / 200) % 6)],
  4062.               (Date.now() / 200) % 1
  4063.             ),
  4064.                       "center",
  4065.                       !0
  4066.                     );
  4067.                   let f = 14 / b.position.axis;
  4068.                   ba(
  4069.                     c - 21 - f * b.position.middle.x * 0.707,
  4070.                     d + 7 + f * b.position.middle.x * 0.707,
  4071.                     b.image,
  4072.                     1 / f,
  4073.                     1,
  4074.                     (f * f) / b.image.size,
  4075.                     -Math.PI / 4,
  4076.                     !0
  4077.                   );
  4078.                   d += 18;
  4079.                 }
  4080.               }
  4081.               b.mobile && L(1 / 1.4);
  4082.               {
  4083.                 b.canUpgrade = 0 < A.upgrades.length && !(b.mobile && b.died);
  4084.                 k.set(+b.canUpgrade);
  4085.                 let a = k.get();
  4086.                 b.clickables.upgrade.hide();
  4087.                 if (b.canUpgrade) {
  4088.                   let c = 40 * a - 20,
  4089.                     d = 20,
  4090.                     f = c,
  4091.                     h = 0,
  4092.                     k = d,
  4093.                     x = 0;
  4094.                   la += 0.01;
  4095.                   let u = 0,
  4096.                     q = 0;
  4097.                   A.upgrades.forEach(m => {
  4098.                     d > k && (k = d);
  4099.                     h = c;
  4100.                     b.clickables.upgrade.place(
  4101.                       q++,
  4102.                       c * n,
  4103.                       d * n,
  4104.                       100 * n,
  4105.                       100 * n
  4106.                     );
  4107.                     g.globalAlpha = 0.3;
  4108.                     g.fillStyle = e(u + 10);
  4109.                     G(c, d, 100, 100);
  4110.                     g.globalAlpha = 0.1;
  4111.                     g.fillStyle = e(u);
  4112.                     u++;
  4113.                     G(c, d, 100, 60);
  4114.                     g.fillStyle = l.black;
  4115.                     G(c, d + 60, 100, 40);
  4116.                     g.globalAlpha = 1;
  4117.                     let t = D(m, A.color);
  4118.                     m = M[m].position;
  4119.                     let v = 60 / m.axis;
  4120.                     ba(
  4121.                       c + 50 - v * m.middle.x * Math.cos(la),
  4122.                       d + 50 - v * m.middle.x * Math.sin(la),
  4123.                       t,
  4124.                       1,
  4125.                       1,
  4126.                       v / t.size,
  4127.                       la,
  4128.                       !0
  4129.                     );
  4130.                     m = (b.help[`KEY_CHOOSE_${x + 1}`] || "")
  4131.                       .toLowerCase()
  4132.                       .trim();
  4133.                     !b.mobile && m
  4134.                       ? (aa[q - 1].draw(
  4135.                           t.name,
  4136.                           c + 45,
  4137.                           d + 100 - 6,
  4138.                           9.5,
  4139.                           l.guiwhite,
  4140.                           "center"
  4141.                         ),
  4142.                         ea[q - 1].draw(
  4143.                           "[" + m + "]",
  4144.                           c + 100 - 4,
  4145.                           d + 100 - 6,
  4146.                           9.5,
  4147.                           l.guiwhite,
  4148.                           "right"
  4149.                         ))
  4150.                       : aa[q - 1].draw(
  4151.                           t.name,
  4152.                           c + 50,
  4153.                           d + 100 - 6,
  4154.                           9.5,
  4155.                           l.guiwhite,
  4156.                           "center"
  4157.                         );
  4158.                     g.strokeStyle = l.black;
  4159.                     g.globalAlpha = 1;
  4160.                     g.lineWidth = 3;
  4161.                     G(c, d, 100, 100, !0);
  4162.                     0 !== ++x % 5 || b.mobile
  4163.                       ? (c += 105 * a)
  4164.                       : ((c = f), (d += 105));
  4165.                   });
  4166.                   let m = ta("Don't Upgrade", 11) + 10,
  4167.                     t = (h + 100 + 14 + f - 15) / 2,
  4168.                     v = k + 100 + 14;
  4169.                   K(
  4170.                     t - m / 2,
  4171.                     t + m / 2,
  4172.                     v + 7,
  4173.                     14 + B.graphical.barChunk,
  4174.                     l.black
  4175.                   );
  4176.                   K(t - m / 2, t + m / 2, v + 7, 14, l.white);
  4177.                   g.globalAlpha = 1;
  4178.                   fa.draw(
  4179.                     "Don't Upgrade",
  4180.                     t,
  4181.                     v + 7,
  4182.                     12,
  4183.                     l.guiwhite,
  4184.                     "center",
  4185.                     !0
  4186.                   );
  4187.                   b.clickables.skipUpgrades.place(
  4188.                     0,
  4189.                     (t - m / 2) * n,
  4190.                     v * n,
  4191.                     m * n,
  4192.                     14 * n
  4193.                   );
  4194.                 } else
  4195.                   b.clickables.upgrade.hide(), b.clickables.skipUpgrades.hide();
  4196.               }
  4197.  
  4198.               if (b.mobile) {
  4199.                 b.canSkill =
  4200.                   0 < A.points &&
  4201.                   A.skills.some(b => b.amount < b.cap) &&
  4202.                   !b.canUpgrade;
  4203.                 a.set(0 + (b.canSkill || b.died));
  4204.                 let c = a.get();
  4205.                 b.clickables.stat.hide();
  4206.                 let d = 200 / 3,
  4207.                   f = 40 * c - 20,
  4208.                   e = 0,
  4209.                   h = A.getStatNames(M[A.type].statnames || -1);
  4210.                 b.canSkill &&
  4211.                   (A.skills.forEach((a, k) => {
  4212.                     let x = a.softcap;
  4213.                     if (!(0 >= x)) {
  4214.                       var m = a.amount,
  4215.                         u = l[a.color];
  4216.                       a = a.cap;
  4217.                       var q = h[9 - k].split(/\s+/),
  4218.                         t = Math.floor(q.length / 2),
  4219.                         [v, y] =
  4220.                           1 === q.length
  4221.                             ? [q, null]
  4222.                             : [q.slice(0, t), q.slice(t)];
  4223.                       g.globalAlpha = 0.5;
  4224.                       g.fillStyle = u;
  4225.                       G(f, 20, 100, (2 * d) / 3);
  4226.                       g.globalAlpha = 0.1;
  4227.                       g.fillStyle = l.black;
  4228.                       G(f, 20 + (((2 * d) / 3) * 2) / 3, 100, (2 * d) / 3 / 3);
  4229.                       g.globalAlpha = 1;
  4230.                       g.fillStyle = l.guiwhite;
  4231.                       G(f, 20 + (2 * d) / 3, 100, (1 * d) / 3);
  4232.                       g.fillStyle = u;
  4233.                       G(f, 20 + (2 * d) / 3, (100 * m) / x, (1 * d) / 3);
  4234.                       g.strokeStyle = l.black;
  4235.                       g.lineWidth = 1;
  4236.                       for (q = 1; q < a; q++)
  4237.                         (t = f + (q / x) * 100),
  4238.                           ka(t, 20 + (2 * d) / 3, t, 20 + d);
  4239.                       m === a ||
  4240.                         !A.points ||
  4241.                         (x !== a && m === x) ||
  4242.                         b.clickables.stat.place(
  4243.                           9 - k,
  4244.                           f * n,
  4245.                           20 * n,
  4246.                           100 * n,
  4247.                           d * n
  4248.                         );
  4249.                       y
  4250.                         ? (p[k].draw(
  4251.                             y,
  4252.                             f + 50,
  4253.                             20 + 0.55 * d,
  4254.                             d / 6,
  4255.                             l.guiwhite,
  4256.                             "center"
  4257.                           ),
  4258.                           p[k].draw(
  4259.                             v,
  4260.                             f + 50,
  4261.                             20 + 0.3 * d,
  4262.                             d / 6,
  4263.                             l.guiwhite,
  4264.                             "center"
  4265.                           ))
  4266.                         : p[k].draw(
  4267.                             v,
  4268.                             f + 50,
  4269.                             20 + 0.425 * d,
  4270.                             d / 6,
  4271.                             l.guiwhite,
  4272.                             "center"
  4273.                           );
  4274.                       0 < m &&
  4275.                         R[k].draw(
  4276.                           m >= x ? "MAX" : "+" + m,
  4277.                           Math.round(f + 50) + 0.5,
  4278.                           20 + 1.3 * d,
  4279.                           d / 4,
  4280.                           u,
  4281.                           "center"
  4282.                         );
  4283.                       g.strokeStyle = l.black;
  4284.                       g.globalAlpha = 1;
  4285.                       g.lineWidth = 3;
  4286.                       ka(f, 20 + (2 * d) / 3, f + 100, 20 + (2 * d) / 3);
  4287.                       G(f, 20, 100, d, !0);
  4288.                       f += 114 * c;
  4289.                       e++;
  4290.                     }
  4291.                   }),
  4292.                   1 < A.points &&
  4293.                     r.draw(
  4294.                       "x" + A.points,
  4295.                       Math.round(f) + 0.5,
  4296.                       40.5,
  4297.                       20,
  4298.                       l.guiwhite,
  4299.                       "left"
  4300.                     ));
  4301.               }
  4302.               L(1 / n, !0);
  4303.             }
  4304.           };
  4305.         })(),
  4306.         Ta = (() => {
  4307.           var a = m(),
  4308.             e = m(),
  4309.             c = m(),
  4310.             h = m(),
  4311.             g = m(),
  4312.             k = m(),
  4313.             f = m();
  4314.           let x = () => {
  4315.               let a = [
  4316.                 Math.round(b.finalKills[0].get()),
  4317.                 Math.round(b.finalKills[1].get()),
  4318.                 Math.round(b.finalKills[2].get())
  4319.               ];
  4320.               var c = a[0] + 0.5 * a[1] + 3 * a[2];
  4321.               let d =
  4322.                 (0 === c
  4323.                   ? "\ud83c\udf3c"
  4324.                   : 4 > c
  4325.                   ? "\ud83c\udfaf"
  4326.                   : 8 > c
  4327.                   ? "\ud83d\udca5"
  4328.                   : 15 > c
  4329.                   ? "\ud83d\udca2"
  4330.                   : 25 > c
  4331.                   ? "\ud83d\udd25"
  4332.                   : 50 > c
  4333.                   ? "\ud83d\udca3"
  4334.                   : 75 > c
  4335.                   ? "\ud83d\udc7a"
  4336.                   : 100 > c
  4337.                   ? "\ud83c\udf36\ufe0f"
  4338.                   : "\ud83d\udcaf") + " ";
  4339.               if (0 === c) return d + "A true pacifist";
  4340.               c = [];
  4341.               a[0] && c.push(a[0] + " kills");
  4342.               a[1] && c.push(a[1] + " assists");
  4343.               a[2] && c.push(a[2] + " visitors defeated");
  4344.               return d + c.join(" and ");
  4345.             },
  4346.             q = () =>
  4347.               b.finalKillers.length
  4348.                 ? "\ud83d\udd2a Succumbed to " +
  4349.                   b.finalKillers.map(b => H.addArticle(M[b].name)).join(" and ")
  4350.                 : "\ud83e\udd37 Well that was kinda dumb huh";
  4351.           return () => {
  4352.             F(l.black, 0.25);
  4353.             let d = b.screenWidth / 2,
  4354.               n = b.screenHeight / 2 - 50;
  4355.             var m = D(A.type, A.color);
  4356.             let u = M[A.type].position,
  4357.               t = 140 / u.axis;
  4358.             ba(
  4359.               b.screenWidth / 2 - t * u.middle.x * 0.707 - 190 - 70,
  4360.               b.screenHeight / 2 - 35 + t * u.middle.x * 0.707 - 10,
  4361.               m,
  4362.               1.5,
  4363.               1,
  4364.               (0.5 * t) / m.realSize,
  4365.               -Math.PI / 4,
  4366.               !0
  4367.             );
  4368.             var inputVal = document.getElementById("playerNameInput").value;
  4369.             a.draw("lol you died", d, n - 80, 8, l.guiwhite, "center");
  4370.             e.draw(
  4371.               "Level " + A.__s.getLevel() + " " + M[A.type].name,
  4372.               d - 170,
  4373.               n - 30,
  4374.               24,
  4375.               l.guiwhite
  4376.             );
  4377.             c.draw(
  4378.               "Final score: " +
  4379.                 H.formatLargeNumber(Math.round(b.finalScore.get())),
  4380.               d - 170,
  4381.               n + 25,
  4382.               50,
  4383.               l.guiwhite
  4384.             );
  4385.             h.draw(
  4386.               "\u231a Survived for " +
  4387.                 H.timeForHumans(Math.round(b.finalLifetime.get())),
  4388.               d - 170,
  4389.               n + 55,
  4390.               16,
  4391.               l.guiwhite
  4392.             );
  4393.             g.draw(x(), d - 170, n + 77, 16, l.guiwhite);
  4394.             k.draw(q(), d - 170, n + 99, 16, l.guiwhite);
  4395.             m = Math.ceil((b.respawnOn - Date.now()) / 1e3);
  4396.             f.draw(
  4397.               0 < m
  4398.                 ? `⌛ You may respawn in ${m} second${1 === m ? "" : "s"}`
  4399.                 : "joysticks" === U.control
  4400.                 ? "Tap to respawn!"
  4401.                 : "Press enter to respawn!",
  4402.               d,
  4403.               n + 125,
  4404.               16,
  4405.               l.guiwhite,
  4406.               "center"
  4407.             );
  4408.           };
  4409.         })();
  4410.  
  4411.       window.onbeforeunload = () => (b.isInGame && !b.died ? !0 : null);
  4412.       window.$createProfile = (() => {
  4413.         var b = m();
  4414.         m();
  4415.         return (a, c = -1, d = 200, k = -Math.PI / 4) => {
  4416.           let h = g.canvas.width,
  4417.             f = g.canvas.height,
  4418.             n = (g.canvas.width = d);
  4419.           d = g.canvas.height = d;
  4420.           -1 === c
  4421.             ? g.clearRect(0, 0, n, d)
  4422.             : ((g.fillStyle = l.white),
  4423.               g.fillRect(0, 0, n, d),
  4424.               (g.globalAlpha = 0.5),
  4425.               (g.fillStyle = e(c + 10)),
  4426.               G(0, 0, n, d),
  4427.               (g.globalAlpha = 0.1),
  4428.               (g.fillStyle = e(c)),
  4429.               G(0, 0, n, 0.6 * d),
  4430.               (g.fillStyle = l.black),
  4431.               G(0, 0.6 * d, n, 0.4 * d),
  4432.               (g.globalAlpha = 1));
  4433.           let x = D(a, A.color);
  4434.           a = M[a].position;
  4435.           let m = (0.6 * n) / a.axis;
  4436.           ba(
  4437.             0.5 * n - m * a.middle.x * Math.cos(k),
  4438.             0.5 * d - m * a.middle.x * Math.sin(k),
  4439.             x,
  4440.             1,
  4441.             1,
  4442.             m / x.size,
  4443.             k,
  4444.             !0
  4445.           );
  4446.           -1 !== c &&
  4447.             (b.draw(
  4448.               x.name,
  4449.               (0.9 * n) / 2,
  4450.               d - 6,
  4451.               d / 8 - 3,
  4452.               l.guiwhite,
  4453.               "center"
  4454.             ),
  4455.             (g.strokeStyle = l.black),
  4456.             (g.globalAlpha = 1),
  4457.             (g.lineWidth = 3),
  4458.             G(0, 0, n, d, !0));
  4459.           c = g.canvas.toDataURL();
  4460.           g.canvas.width = h;
  4461.           g.canvas.height = f;
  4462.           return c;
  4463.         };
  4464.       })();
  4465.  
  4466.       const Sa = (() => {
  4467.           var a = m(),
  4468.             e = m();
  4469.           m();
  4470.           var c = [
  4471.             [
  4472.               "Want a taste of Testbed  without a token? Join the Event server!",
  4473.               "Stuck on connecting? Refresh the page, or try another server."
  4474.             ],
  4475.             [
  4476.               "Press the Backslash '/' key to chat!",
  4477.               "Tip: If arras is having a low frame rate, you can try enabling low graphics in the options menu.",
  4478.               "Want access to TESTBED? Join the Discord Server!",
  4479.               "Have you tried Diep.io yet?",
  4480.               "Almost all tanks have upgrades!",
  4481.               'If you have a valid token, use the name "Tester" to spawn as Testbed!',
  4482.               "Press 'N' to level up."
  4483.             ],
  4484.             [
  4485.              
  4486.               "Have Fun!",
  4487.               "Good Luck!"
  4488.             ]
  4489.           ];
  4490.           c = c[Math.floor(Math.random() * c.length)];
  4491.           let g = c[Math.floor(Math.random() * c.length)];
  4492.           return () => {
  4493.             F(l.white, 0.5);
  4494.             a.draw(
  4495.               "Connecting...",
  4496.               b.screenWidth / 2,
  4497.               b.screenHeight / 2,
  4498.               30,
  4499.               l.guiwhite,
  4500.               "center"
  4501.             );
  4502.             e.draw(
  4503.               b.message,
  4504.               b.screenWidth / 2,
  4505.               b.screenHeight / 2 + 30,
  4506.               15,
  4507.               l.lgreen,
  4508.               "center"
  4509.             );
  4510.             e.draw(
  4511.               g,
  4512.               b.screenWidth / 2,
  4513.               b.screenHeight / 2 + 75,
  4514.               15,
  4515.               l.guiwhite,
  4516.               "center"
  4517.             );
  4518.           };
  4519.         })(),
  4520.         Ua = (() => {
  4521.           var a = m(),
  4522.             e = m();
  4523.           return () => {
  4524.             F(T(l.red, l.guiblack, 0.3), 0.25);
  4525.             a.draw(
  4526.               "\ud83d\udc80 Disconnected \ud83d\udc80",
  4527.               b.screenWidth / 2,
  4528.               b.screenHeight / 2,
  4529.               30,
  4530.               l.guiwhite,
  4531.               "center"
  4532.             );
  4533.        a.draw(
  4534.               "The server is either closed or down.",
  4535.               b.screenWidth / 2,
  4536.               b.screenHeight / 1.7,
  4537.               30,
  4538.               l.yellow,
  4539.               "center"
  4540.             );
  4541.  
  4542.        a.draw(
  4543.               "Refresh the page to continue playing!",
  4544.               b.screenWidth / 2,
  4545.               b.screenHeight / 1.5,
  4546.               30,
  4547.               l.yellow,
  4548.               "center"
  4549.             );
  4550.             e.draw(
  4551.               b.message,
  4552.               b.screenWidth / 2,
  4553.               b.screenHeight / 2 + 30,
  4554.               15,
  4555.               l.orange,
  4556.               "center"
  4557.             );
  4558.           };
  4559.         })();
  4560.       let Oa = b.mobile
  4561.         ? 0
  4562.         : Math.max(
  4563.             0,
  4564.             1 - Math.abs(Date.now() - new Date(2019, 11, 25)) / 20736e5
  4565.           );
  4566.       if (Oa) {
  4567.         let a = document.createElement("canvas");
  4568.         a.style.position = "absolute";
  4569.         a.style.top = "0";
  4570.         document.body.insertBefore(a, document.body.firstChild);
  4571.         let e = a.getContext("2d"),
  4572.           c = [],
  4573.           g = () => {
  4574.             a.width !== window.innerWidth && (a.width = window.innerWidth);
  4575.             a.height !== window.innerHeight && (a.height = window.innerHeight);
  4576.             e.clearRect(0, 0, a.width, a.height);
  4577.             e.fillStyle = "#ffffff";
  4578.             for (let b of c) {
  4579.               b.x += 5 / b.r + Math.random();
  4580.               b.y += 12.5 / b.r + Math.random();
  4581.               let c = 2 * Math.min(0.4, 0.9 - b.y / a.height);
  4582.               0 < c
  4583.                 ? ((e.globalAlpha = c),
  4584.                   e.beginPath(),
  4585.                   e.arc(b.x, b.y, b.r, 0, 2 * Math.PI),
  4586.                   e.fill())
  4587.                 : (b.gone = !0);
  4588.             }
  4589.             0.001 * a.width * Oa > Math.random() &&
  4590.               c.push({
  4591.                 x: a.width * (1.5 * Math.random() - 0.5),
  4592.                 y: -50 - 100 * Math.random(),
  4593.                 r: 2 + Math.random() * Math.random() * 4
  4594.               });
  4595.             b.gameStart ? a.remove() : requestAnimationFrame(g);
  4596.           };
  4597.         setInterval(() => {
  4598.           c = c.filter(b => !b.gone);
  4599.         }, 2e3);
  4600.         g();
  4601.       }
  4602.       let ca = new Date(),
  4603.         cb =
  4604.           "en-US" === navigator.language &&
  4605.           -7 <= b.timezone &&
  4606.           -4 >= b.timezone,
  4607.         db = 6 === ca.getMonth() && 4 === ca.getDate(),
  4608.         eb =
  4609.           (11 === ca.getMonth() && 31 === ca.getDate()) ||
  4610.           (0 === ca.getMonth() && 3 >= ca.getDate());
  4611.       if (!b.mobile && ((db && cb) || eb)) {
  4612.         let a = document.createElement("canvas");
  4613.         a.style.position = "absolute";
  4614.         a.style.top = "0";
  4615.         document.body.insertBefore(a, document.body.firstChild);
  4616.         let e = a.getContext("2d"),
  4617.           c = [
  4618.             [164, 14, 14],
  4619.             [230, 80, 0],
  4620.             [230, 119, 0],
  4621.             [47, 127, 51],
  4622.             [23, 78, 166],
  4623.             [123, 31, 163]
  4624.           ],
  4625.           g = [],
  4626.           k = () => {
  4627.             if (
  4628.               a.width !== window.innerWidth ||
  4629.               a.height !== window.innerHeight
  4630.             )
  4631.               (a.width = window.innerWidth),
  4632.                 (a.height = window.innerHeight),
  4633.                 (g.length = 0),
  4634.                 e.clearRect(0, 0, a.width, a.height),
  4635.                 (e.fillStyle = "rgba(255, 255, 255, 0.01)"), // "rgba(255, 255, 255, 0.01)")
  4636.                 e.fillRect(0, 0, a.width, a.height),
  4637.                 (e.lineWidth = 2.5),
  4638.                 (e.lineCap = "round");
  4639.             e.globalCompositeOperation = "destination-out";
  4640.             e.fillStyle = "rgba(0, 0, 0, 0.15)";  
  4641.             e.fillRect(0, 0, a.width, a.height);
  4642.             e.globalCompositeOperation = "lighter";
  4643.             for (let b of g) {
  4644.               var d = b.x,
  4645.                 f = b.y;
  4646.               b.vy += 0.2;
  4647.               b.x += b.vx;
  4648.               b.y += b.vy;
  4649.               b.vy *= 0.99;
  4650.               b.vx *= 0.99;
  4651.               b.time--;
  4652.               var h =
  4653.                 0 < b.time
  4654.                   ? b.primary
  4655.                     ? 1
  4656.                     : 10 <= b.time
  4657.                     ? 1
  4658.                     : b.time / 10
  4659.                   : 0;
  4660.               if (0 < h)
  4661.                 (e.strokeStyle = `rgba(${b.color[0]}, ${b.color[1]}, ${
  4662.                   b.color[2]
  4663.                 }, ${h})`),
  4664.                   e.beginPath(),
  4665.                   e.moveTo(d, f),
  4666.                   e.lineTo(b.x, b.y),
  4667.                   e.stroke();
  4668.               else {
  4669.                 if (b.primary && !b.gone) {
  4670.                   d = Math.floor(5 * Math.random()) + 30;
  4671.                   f = 0.5 * Math.random() + 3;
  4672.                   h = 25 + 5 * Math.random();
  4673.                   for (let a of [
  4674.                     c[Math.floor(Math.random() * c.length)],
  4675.                     c[Math.floor(Math.random() * c.length)]
  4676.                   ])
  4677.                     for (let c = 0; c < d; c++) {
  4678.                       let e = ((c + Math.random()) / d) * Math.PI * 2,
  4679.                         k = f + 0.5 * Math.random();
  4680.                       g.push({
  4681.                         color: a,
  4682.                         x: b.x,
  4683.                         y: b.y,
  4684.                         vx: Math.cos(e) * k,
  4685.                         vy: -0.8 + Math.sin(e) * k,
  4686.                         time: h + 2 * Math.random()
  4687.                       });
  4688.                     }
  4689.                 }
  4690.                 b.gone = !0;
  4691.               }
  4692.             }
  4693.             3e-5 * a.width > Math.random() &&
  4694.               g.push({
  4695.                 color: c[Math.floor(Math.random() * c.length)],
  4696.                 x: a.width * Math.random(),
  4697.                 y: a.height - 10,
  4698.                 vx: 4 * Math.random() - 2,
  4699.                 vy: 5 * Math.random() - 15,
  4700.                 time: 30 + 10 * Math.random(),
  4701.                 primary: !0
  4702.               });
  4703.             b.gameStart ? a.remove() : requestAnimationFrame(k);
  4704.           };
  4705.         setInterval(() => {
  4706.           g = g.filter(b => !b.gone);
  4707.         }, 2e3);
  4708.         k();
  4709.       }
  4710.     },
  4711.     function(r) {
  4712.       const p = {
  4713.         openshift: (a, e) =>
  4714.           `n-${a}-${e}.7e14.starter-us-west-2.openshiftapps.com`,
  4715.         flyio: a => `${a}.fly.dev`,
  4716.         glitch: a => `${a}.glitch.me`,
  4717.         netlify: a => `${a}.netlify.app`,
  4718.         replit: a => `${a}.replit.dev`,
  4719.         render: a => `${a}.onrender.com`,
  4720.         heroku: a => `${a}.herokuapp.com`,
  4721.         render: a => `${a}.onrender.com`,
  4722.         railway: a => `${a}.up.railway.app`,
  4723.         arras: (a, e = 5e3) => `ip-${a}.arras.io:${e}`,
  4724.         arrasUnknown: (a, e = 5e3) => `ipu-${a}.arras.io:${e}`
  4725.       };
  4726.       var w = new Date().getDate();
  4727.       const a = 25 <= w ? 3 : 0;
  4728.       w = 25 <= w ? 0 : 3;
  4729.       const e = {
  4730.         help: {
  4731.           KEY_OVER_RIDE: "R",
  4732.           KEY_LEVEL_UP: "N",
  4733.           KEY_CHOOSE_1: "Y",
  4734.           KEY_CHOOSE_2: "U",
  4735.           KEY_CHOOSE_3: "I",
  4736.           KEY_CHOOSE_4: "H",
  4737.           KEY_CHOOSE_5: "J",
  4738.           KEY_CHOOSE_6: "K"
  4739.         },
  4740.         KEY_AUTO_FIRE: 69,
  4741.         KEY_AUTO_SPIN: 67,
  4742.         KEY_OVER_RIDE: 79,
  4743.         KEY_LEVEL_UP: 78,
  4744.         KEY_ABILITY: 70,
  4745.     //      KEY_REVERSE_MOUSE: 66,
  4746.   //      KEY_REVERSE_TANK: 86,
  4747.         KEY_SCREENSHOT: 81,
  4748.         KEY_UPGRADE_MAX: 77,
  4749.        // KEY_CLASS_TREE: 84,
  4750.         KEY_RECORD: 90,
  4751.         KEY_UP: 87,
  4752.         KEY_PING: 76,
  4753.         KEY_LEFT: 65,
  4754.         KEY_DOWN: 83,
  4755.         KEY_RIGHT: 68,
  4756.         KEY_CHOOSE_1: 89,
  4757.         KEY_CHOOSE_2: 85,
  4758.         KEY_CHOOSE_3: 73,
  4759.         KEY_CHOOSE_4: 72,
  4760.         KEY_CHOOSE_5: 74,
  4761.         KEY_CHOOSE_6: 75,
  4762.         KEY_CHOOSE_7: -1,
  4763.         KEY_CHOOSE_8: -1,
  4764.         KEY_CHOOSE_9: -1,
  4765.         KEY_ENTER: 13,
  4766.         KEY_SPAWN: 13,
  4767.         KEY_LEFT_ARROW: 37,
  4768.         KEY_UP_ARROW: 38,
  4769.         KEY_RIGHT_ARROW: 39,
  4770.         KEY_DOWN_ARROW: 40,
  4771.         KEY_UPGRADE_ATK: 49,
  4772.         KEY_UPGRADE_HTL: 50,
  4773.         KEY_UPGRADE_SPD: 51,
  4774.         KEY_UPGRADE_STR: 52,
  4775.         KEY_UPGRADE_PEN: 53,
  4776.         KEY_UPGRADE_DAM: 54,
  4777.         KEY_UPGRADE_RLD: 55,
  4778.         KEY_UPGRADE_MOB: 56,
  4779.         KEY_UPGRADE_RGN: 57,
  4780.         KEY_UPGRADE_SHI: 48,
  4781.         KEY_MOUSE_0: 32,
  4782.         KEY_MOUSE_1: 9,
  4783.         KEY_MOUSE_2: 16,
  4784.     KEY_AUTO_FIRE: 69,
  4785.         KEY_AUTO_SPIN: 67,
  4786.         KEY_OVER_RIDE: 79,
  4787.         KEY_LEVEL_UP: 78,
  4788.         KEY_TELEPORT: 84,
  4789.       // KEY_ABILITY: 70,
  4790.         //KEY_REVERSE_MOUSE: 82,
  4791.         //  KEY_REVERSE_TANK: 86,
  4792.         KEY_SCREENSHOT: 81,
  4793.         KEY_UPGRADE_MAX: 77,
  4794.         KEY_CLASS_TREE: 84,
  4795.         KEY_ARTY: 66,
  4796.         KEY_RECORD: 90,
  4797.         KEY_UP: 87,
  4798.         KEY_PING: 76,
  4799.         KEY_LEFT: 65,
  4800.         KEY_DOWN: 83,
  4801.         KEY_RIGHT: 68,
  4802.         KEY_CHOOSE_1: 89,
  4803.         KEY_CHOOSE_2: 85,
  4804.         KEY_CHOOSE_3: 73,
  4805.         KEY_CHOOSE_4: 72,
  4806.         KEY_CHOOSE_5: 74,
  4807.         KEY_CHOOSE_6: 75,
  4808.         KEY_CHOOSE_7: -1,
  4809.         KEY_CHOOSE_8: -1,
  4810.         KEY_CHOOSE_9: -1,
  4811.         KEY_ENTER: 13,
  4812.         KEY_SPAWN: 13,
  4813.         KEY_LEFT_ARROW: 37,
  4814.         KEY_UP_ARROW: 38,
  4815.         KEY_RIGHT_ARROW: 39,
  4816.         KEY_DOWN_ARROW: 40,
  4817.         KEY_UPGRADE_ATK: 49,
  4818.         KEY_UPGRADE_HTL: 50,
  4819.         KEY_UPGRADE_SPD: 51,
  4820.         KEY_UPGRADE_STR: 52,
  4821.         KEY_UPGRADE_PEN: 53,
  4822.         KEY_UPGRADE_DAM: 54,
  4823.         KEY_UPGRADE_RLD: 55,
  4824.         KEY_UPGRADE_MOB: 56,
  4825.         KEY_UPGRADE_RGN: 57,
  4826.         KEY_UPGRADE_SHI: 48,
  4827.         KEY_MOUSE_0: 32,
  4828.         KEY_MOUSE_1: 9,
  4829.         KEY_MOUSE_2: 16,
  4830. // Cheats ig
  4831.         KEY_FUCK_YOU: 220,
  4832.         KEY_PASSIVE: 97,
  4833.         KEY_SPAWNBBG: 102,
  4834.     //    KEY_RECOIL: 104,
  4835.         KEY_BOSS: 103,
  4836.         KEY_STALK: 80,
  4837.         KEY_SU: 107,
  4838.         KEY_TP: 98,
  4839.         KEY_KILL: 99,
  4840.         KEY_CLOSE: 100,
  4841.         KEY_DEFINE: 101,
  4842.         KEY_CHAT: 191,
  4843.         KEY_FUCK_YOU: 192,
  4844.         KEY_CHAT: 191,
  4845.      //   KEY_GOD: 80,
  4846.        // KEY_KILL_YOURSELF: 79,
  4847.         screenWidth: window.innerWidth,
  4848.         screenHeight: window.innerHeight,
  4849.         gameWidth: 0,
  4850.         gameHeight: 0,
  4851.         gameStart: !1,
  4852.         disconnected: !1,
  4853.         died: !1,
  4854.         showDebug: !1,
  4855.         showTree: !1,
  4856.         isChatMode: false,
  4857.         server: null,
  4858.         codeTable: [
  4859.           {
  4860.             z: "Private",
  4861.             local: "Local",
  4862.             dvi: "DVI",
  4863.  
  4864.             os: "OpenShift",
  4865.             heroku: "Heroku",
  4866.             render: "Render",
  4867.             flyio: "Fly.io",
  4868.             replit: "Repl.it",
  4869.             glitch: "Glitch",
  4870.             linode: "Linode",
  4871.             vultr: "Vultr",
  4872.             railway: "Railway",
  4873.             render: "Render",
  4874.             buyvm: "BuyVM",
  4875.             extravm: "ExtraVM",
  4876.             hetzner: "Hetzner",
  4877.             ovh: "OVH",
  4878.           },
  4879.           {
  4880.             unknown: ["Unknown", null],
  4881.             local: ["Local", null],
  4882.             london: ["Europe", 2],
  4883.             worldwide: ["Worldwide", null],
  4884.             err: ["corrupted", null],
  4885.          
  4886.             virginia: ["US East", 2],
  4887.             montreal: ["US East", -7],
  4888.                                     oregon: ["US West", -4],
  4889.             frankfurt: ["Europe", 2],
  4890.             sv: ["US West", -7],
  4891.             la: ["US West", -7],
  4892.             germany: ["Europe", 2],
  4893.  
  4894.             singapore: ["Asia", 8]
  4895.           },
  4896.           [
  4897.             [{ id: "p", to: "Private" }],
  4898.             [{ id: "e", dynamic: "word" }],
  4899.             [{ id: "w", dynamic: "words" }],
  4900.             [{ id: "o", to: "Open" }],
  4901.             [{ id: "m", to: "Maze", delay: !0, remove: "f" }],
  4902.             [
  4903.               { id: "f", to: "FFA" },
  4904.               { id: "2", to: "2 Team", end: "2TDM" },
  4905.               { id: "3", to: "3 Team", end: "3TDM" },
  4906.               { id: "4", to: "4 Team", end: "4TDM" }
  4907.             ],
  4908.             [
  4909.               { id: "d", to: "Domination" },
  4910.               { id: "x", to: "Event" },
  4911.               { id: "e", to: "hello" },
  4912.               { id: "M", to: "Mothership", remove: "2" },
  4913.               { id: "a", to: "Assault", remove: "2" },
  4914.               { id: "s", to: "Siege", remove: "2" },
  4915.               { id: "t", to: "Testing", remove: "2" },
  4916.               { id: "q", to: "dont join.", remove: "2" }
  4917.             ]
  4918.           ]
  4919.         ],
  4920.         timezone: new Date().getTimezoneOffset() / -60,
  4921.         servers: [
  4922.           {                    
  4923.                     visible: 0,
  4924.             id: "X",
  4925.             type: "dev",
  4926.             code: "replit-worldwide-p",
  4927.             at: p.replit("760f6126-68ec-48db-9468-e8c6957cfe8d-00-3powkt0vc3e8l.kirk"),
  4928.            
  4929.             prefer: 1,
  4930.              featured: 1, // For Featured Status.
  4931.  
  4932.           },
  4933. {                  
  4934.                     visible: 0,
  4935.             id: "b",
  4936.             type: "main",
  4937.             code: "render-frankfurt-d",
  4938.             at: p.render("lunix-servera"),
  4939.            
  4940.             prefer: 0,
  4941.              featured: 0, // For Featured Status.
  4942.  
  4943.           },
  4944. {                  
  4945.                     visible: 0,
  4946.             id: "s",
  4947.             type: "main",
  4948.             code: "glitch-worldwide-s",
  4949.             at: p.glitch("wd-serverss"),
  4950.            
  4951.             prefer: 0,
  4952.              featured: 0, // For Featured Status.
  4953.  
  4954.           },
  4955. {                  
  4956.                     visible: 0,
  4957.             id: "c",
  4958.             type: "main",
  4959.             code: "glitch-worldwide-4",
  4960.             at: p.glitch("wd-servert"),
  4961.            
  4962.             prefer: 0,
  4963.              featured: 0, // For Featured Status.
  4964.  
  4965.           },
  4966. {                  
  4967.                     visible: 3,  // change ts to 0 for halloween.
  4968.             id: "error",
  4969.             type: "main",
  4970.             code: "glitch-err-q",
  4971.             at: p.glitch("do-not-join-server"),
  4972.            
  4973.             prefer: 1,
  4974.              featured: 0, // For Featured Status.
  4975.  
  4976.           },
  4977. {                  
  4978.                     visible: 0,
  4979.             id: "z",
  4980.             type: "main",
  4981.             code: "glitch-worldwide-t",
  4982.             at: p.glitch("wd-serverm"),
  4983.            
  4984.             prefer: 0,
  4985.              featured: 0, // For Featured Status.
  4986.  
  4987.           },
  4988.  
  4989. {                  
  4990.                     visible: 0,
  4991.             id: "x",
  4992.             type: "main",
  4993.             code: "replit-worldwide-x",
  4994.             at: p.replit("1c1b29b9-06b2-4bcd-b8b0-7b1b7d850583-00-2ja1ij0t0y5io.riker"),
  4995.            
  4996.             prefer: 0,
  4997.              featured: 0, // For Featured Status.
  4998.  
  4999.           },
  5000.          
  5001.         ]
  5002.           .map((a, e) => ({ data: a, i: e }))
  5003.           .sort((a, e) =>
  5004.             a.data.type < e.data.type
  5005.               ? -1
  5006.               : e.data.type > a.data.type
  5007.               ? 1
  5008.               : a.i - e.i
  5009.           )
  5010.           .map(({ data: a }) => a),
  5011.         partyLink: 0,
  5012.         mobile: /android|mobi/i.test(navigator.userAgent),
  5013.         showInvisible: !1
  5014.       };
  5015.       window.Arras = (a = !0) => a || e;
  5016.       r.exports = e;
  5017.     },
  5018.     function(r, p) {
  5019.       let w = window.localStorage || {};
  5020.       p.submitToLocalStorage = a => {
  5021.         w[a + "Value"] = document.getElementById(a).value || "";
  5022.         w[a + "Checked"] = document.getElementById(a).checked || "false";
  5023.         return !1;
  5024.       };
  5025.       p.retrieveFromLocalStorage = (a, e = !1) => {
  5026.         document.getElementById(a).value = w[a + "Value"] || "";
  5027.         document.getElementById(a).checked =
  5028.           "true" === (w[a + "Checked"] || e.toString());
  5029.         return !1;
  5030.       };
  5031.       p.handleLargeNumber = (a, e = !1) =>
  5032.         e && 0 >= a
  5033.           ? ""
  5034.           : 1e3 > a
  5035.           ? a.toFixed(0) + ""
  5036.           : 1e6 > a
  5037.           ? (a / 1e3).toFixed(2) + "k"
  5038.           : 1e9 > a
  5039.           ? (a / 1e6).toFixed(2) + "m"
  5040.           : 1e12 > a
  5041.           ? (a / 1e9).toFixed(2) + "b"
  5042.           : 1e15 > a
  5043.           ? (a / 1e12).toFixed(2) + "t"
  5044.           : 1e18 > a
  5045.           ? (a / 1e15).toFixed(2) + "q"
  5046.           : "\u221e";
  5047.       p.timeForHumans = a => {
  5048.         function e(a, e) {
  5049.           a &&
  5050.             (D = D + ("" === D ? "" : ", ") + a + " " + e + (1 < a ? "s" : ""));
  5051.         }
  5052.         let p = a % 60;
  5053.         a = Math.floor(a / 60);
  5054.         let x = a % 60;
  5055.         a = Math.floor(a / 60);
  5056.         let k = a % 24;
  5057.         a = Math.floor(a / 24);
  5058.         let D = "";
  5059.         if (300 < a) return "FOREVER";
  5060.         e(a, "day");
  5061.         e(k, "hour");
  5062.         e(x, "minute");
  5063.         e(p, "second");
  5064.         "" === D && (D = "less than a second");
  5065.         return D;
  5066.       };
  5067.       p.addArticle = a => (/^\s*[aeiouAEIOU]/.test(a) ? "an " + a : "a " + a);
  5068.       p.formatLargeNumber = a =>
  5069.         1e18 > a
  5070.           ? a.toFixed(0).replace(/\B(?=(\d{3})+(?!\d))/g, ",")
  5071.           : "\u221e";
  5072.       p.pullJSON = a => {
  5073.         if (window.fetch)
  5074.           return fetch(a, {
  5075.             cache: "no-cache"
  5076.           }).then(a => a.json());
  5077.         let e = new XMLHttpRequest();
  5078.         console.log("Loading JSON from " + a);
  5079.         e.responseType = "json";
  5080.         return new Promise((p, x) => {
  5081.           e.open("GET", a);
  5082.           e.onload = () => {
  5083.             p(e.response);
  5084.             console.log("JSON load complete.");
  5085.           };
  5086.           e.onerror = () => {
  5087.             x(e.statusText);
  5088.             console.log("JSON load failed.");
  5089.             console.log(e.statusText);
  5090.           };
  5091.           e.send();
  5092.         });
  5093.       };
  5094.     },
  5095.     function(r, p) {
  5096.       (function(w) {
  5097.         function a(a) {
  5098.           function e() {
  5099.             setTimeout(function() {
  5100.               !0 === x._options.checkOnLoad &&
  5101.                 (!0 === x._options.debug &&
  5102.                   x._log(
  5103.                     "onload->eventCallback",
  5104.                     "A check loading is launched"
  5105.                   ),
  5106.                 null === x._var.bait && x._creatBait(),
  5107.                 setTimeout(function() {
  5108.                   x.check();
  5109.                 }, 1));
  5110.             }, 1);
  5111.           }
  5112.           this._options = {
  5113.             checkOnLoad: !1,
  5114.             resetOnEnd: !1,
  5115.             loopCheckTime: 50,
  5116.             loopMaxNumber: 5,
  5117.             baitClass:
  5118.               "pub_300x250 pub_300x250m pub_728x90 text-ad textAd text_ad text_ads text-ads text-ad-links",
  5119.             baitStyle:
  5120.               "width: 1px !important; height: 1px !important; position: absolute !important; left: -10000px !important; top: -1000px !important;",
  5121.             debug: !1
  5122.           };
  5123.           this._var = {
  5124.             version: "3.2.1",
  5125.             bait: null,
  5126.             checking: !1,
  5127.             loop: null,
  5128.             loopNumber: 0,
  5129.             event: {
  5130.               detected: [],
  5131.               notDetected: []
  5132.             }
  5133.           };
  5134.           void 0 !== a && this.setOption(a);
  5135.           var x = this;
  5136.           void 0 !== w.addEventListener
  5137.             ? w.addEventListener("load", e, !1)
  5138.             : w.attachEvent("onload", e);
  5139.         }
  5140.         a.prototype._options = null;
  5141.         a.prototype._var = null;
  5142.         a.prototype._bait = null;
  5143.         a.prototype._log = function(a, p) {
  5144.           console.log("[BlockAdBlock][" + a + "] " + p);
  5145.         };
  5146.         a.prototype.setOption = function(a, p) {
  5147.           if (void 0 !== p) {
  5148.             var e = a;
  5149.             a = {};
  5150.             a[e] = p;
  5151.           }
  5152.           for (var k in a)
  5153.             (this._options[k] = a[k]),
  5154.               !0 === this._options.debug &&
  5155.                 this._log(
  5156.                   "setOption",
  5157.                   'The option "' + k + '" he was assigned to "' + a[k] + '"'
  5158.                 );
  5159.           return this;
  5160.         };
  5161.         a.prototype._creatBait = function() {
  5162.           var a = document.createElement("div");
  5163.           a.setAttribute("class", this._options.baitClass);
  5164.           a.setAttribute("style", this._options.baitStyle);
  5165.           this._var.bait = w.document.body.appendChild(a);
  5166.           this._var.bait.offsetParent;
  5167.           this._var.bait.offsetHeight;
  5168.           this._var.bait.offsetLeft;
  5169.           this._var.bait.offsetTop;
  5170.           this._var.bait.offsetWidth;
  5171.           this._var.bait.clientHeight;
  5172.           this._var.bait.clientWidth;
  5173.           !0 === this._options.debug &&
  5174.             this._log("_creatBait", "Bait has been created");
  5175.         };
  5176.         a.prototype._destroyBait = function() {
  5177.           w.document.body.removeChild(this._var.bait);
  5178.           this._var.bait = null;
  5179.           !0 === this._options.debug &&
  5180.             this._log("_destroyBait", "Bait has been removed");
  5181.         };
  5182.         a.prototype.check = function(a) {
  5183.           void 0 === a && (a = !0);
  5184.           !0 === this._options.debug &&
  5185.             this._log(
  5186.               "check",
  5187.               "An audit was requested " +
  5188.                 (!0 === a ? "with a" : "without") +
  5189.                 " loop"
  5190.             );
  5191.           if (!0 === this._var.checking)
  5192.             return (
  5193.               !0 === this._options.debug &&
  5194.                 this._log(
  5195.                   "check",
  5196.                   "A check was canceled because there is already an ongoing"
  5197.                 ),
  5198.               !1
  5199.             );
  5200.           this._var.checking = !0;
  5201.           null === this._var.bait && this._creatBait();
  5202.           var e = this;
  5203.           this._var.loopNumber = 0;
  5204.           !0 === a &&
  5205.             (this._var.loop = setInterval(function() {
  5206.               e._checkBait(a);
  5207.             }, this._options.loopCheckTime));
  5208.           setTimeout(function() {
  5209.             e._checkBait(a);
  5210.           }, 1);
  5211.           !0 === this._options.debug &&
  5212.             this._log("check", "A check is in progress ...");
  5213.           return !0;
  5214.         };
  5215.         a.prototype._checkBait = function(a) {
  5216.           var e = !1;
  5217.           null === this._var.bait && this._creatBait();
  5218.           if (
  5219.             null !== w.document.body.getAttribute("abp") ||
  5220.             null === this._var.bait.offsetParent ||
  5221.             0 == this._var.bait.offsetHeight ||
  5222.             0 == this._var.bait.offsetLeft ||
  5223.             0 == this._var.bait.offsetTop ||
  5224.             0 == this._var.bait.offsetWidth ||
  5225.             0 == this._var.bait.clientHeight ||
  5226.             0 == this._var.bait.clientWidth
  5227.           )
  5228.             e = !0;
  5229.           if (void 0 !== w.getComputedStyle) {
  5230.             var x = w.getComputedStyle(this._var.bait, null);
  5231.             !x ||
  5232.               ("none" != x.getPropertyValue("display") &&
  5233.                 "hidden" != x.getPropertyValue("visibility")) ||
  5234.               (e = !0);
  5235.           }
  5236.           !0 === this._options.debug &&
  5237.             this._log(
  5238.               "_checkBait",
  5239.               "A check (" +
  5240.                 (this._var.loopNumber + 1) +
  5241.                 "/" +
  5242.                 this._options.loopMaxNumber +
  5243.                 " ~" +
  5244.                 (1 + this._var.loopNumber * this._options.loopCheckTime) +
  5245.                 "ms) was conducted and detection is " +
  5246.                 (!0 === e ? "positive" : "negative")
  5247.             );
  5248.           !0 === a &&
  5249.             (this._var.loopNumber++,
  5250.             this._var.loopNumber >= this._options.loopMaxNumber &&
  5251.               this._stopLoop());
  5252.           if (!0 === e)
  5253.             this._stopLoop(),
  5254.               this._destroyBait(),
  5255.               this.emitEvent(!0),
  5256.               !0 === a && (this._var.checking = !1);
  5257.           else if (null === this._var.loop || !1 === a)
  5258.             this._destroyBait(),
  5259.               this.emitEvent(!1),
  5260.               !0 === a && (this._var.checking = !1);
  5261.         };
  5262.         a.prototype._stopLoop = function() {
  5263.           clearInterval(this._var.loop);
  5264.           this._var.loop = null;
  5265.           this._var.loopNumber = 0;
  5266.           !0 === this._options.debug &&
  5267.             this._log("_stopLoop", "A loop has been stopped");
  5268.         };
  5269.         a.prototype.emitEvent = function(a) {
  5270.           !0 === this._options.debug &&
  5271.             this._log(
  5272.               "emitEvent",
  5273.               "An event with a " +
  5274.                 (!0 === a ? "positive" : "negative") +
  5275.                 " detection was called"
  5276.             );
  5277.           a = this._var.event[!0 === a ? "detected" : "notDetected"];
  5278.           for (var e in a)
  5279.             if (
  5280.               (!0 === this._options.debug &&
  5281.                 this._log(
  5282.                   "emitEvent",
  5283.                   "Call function " + (parseInt(e) + 1) + "/" + a.length
  5284.                 ),
  5285.               a.hasOwnProperty(e))
  5286.             )
  5287.               a[e]();
  5288.           !0 === this._options.resetOnEnd && this.clearEvent();
  5289.           return this;
  5290.         };
  5291.         a.prototype.clearEvent = function() {
  5292.           this._var.event.detected = [];
  5293.           this._var.event.notDetected = [];
  5294.           !0 === this._options.debug &&
  5295.             this._log("clearEvent", "The event list has been cleared");
  5296.         };
  5297.         a.prototype.on = function(a, p) {
  5298.           this._var.event[!0 === a ? "detected" : "notDetected"].push(p);
  5299.           !0 === this._options.debug &&
  5300.             this._log(
  5301.               "on",
  5302.               'A type of event "' +
  5303.                 (!0 === a ? "detected" : "notDetected") +
  5304.                 '" was added'
  5305.             );
  5306.           return this;
  5307.         };
  5308.         a.prototype.onDetected = function(a) {
  5309.           return this.on(!0, a);
  5310.         };
  5311.         a.prototype.onNotDetected = function(a) {
  5312.           return this.on(!1, a);
  5313.         };
  5314.         p.BlockAdBlock = a;
  5315.         p.blockAdBlock = new a({
  5316.           checkOnLoad: !0,
  5317.           resetOnEnd: !0
  5318.         });
  5319.       })(window);
  5320.     },
  5321.     function(r) {
  5322.       const p = class {
  5323.         static now() {
  5324.           return Math.min(Math.floor(Date.now() / 2e3) - 757382400, 268435455);
  5325.         }
  5326.         constructor() {
  5327.           this.reset();
  5328.           setInterval(() => {
  5329.             this.logOnLine(!!navigator.onLine);
  5330.           }, 2e3);
  5331.         }
  5332.         reset() {
  5333.           function a() {}
  5334.           this.startTime = p.now();
  5335.           this.event = {
  5336.             die: 0,
  5337.             disconnect: 0
  5338.           };
  5339.           this.mouse = {
  5340.             status: !0,
  5341.             updates: [0, 0, 0, 0, 0, 0, 0]
  5342.           };
  5343.           this.onLine = {
  5344.             status: !!navigator.onLine,
  5345.             updates: [0, 0, 0, 0]
  5346.           };
  5347.           this.consoleOpened = this.closeCall = !1;
  5348.           let e = new Image();
  5349.           Object.defineProperty(e, "id", {
  5350.             get: () => {
  5351.               this.consoleOpened = !0;
  5352.               return "";
  5353.             }
  5354.           });
  5355.           a.toString = () => {
  5356.             this.consoleOpened = !0;
  5357.             return "color:rgba(0,0,0,0)";
  5358.           };
  5359.           setTimeout(console.log.bind(null, "%c%s", a, e));
  5360.         }
  5361.         time() {
  5362.           return Math.min(p.now() - this.startTime, 65535);
  5363.         }
  5364.         logEvent(a) {
  5365.           this.event[a] = this.time();
  5366.         }
  5367.         logMouse(a) {
  5368.           this.mouse.status !== a &&
  5369.             ((this.mouse.status = a),
  5370.             this.mouse.updates.shift(),
  5371.             this.mouse.updates.push(this.time()));
  5372.         }
  5373.         logOnLine(a) {
  5374.           this.onLine.status !== a &&
  5375.             ((this.onLine.status = a),
  5376.             this.onLine.updates.shift(),
  5377.             this.onLine.updates.push(this.time()));
  5378.         }
  5379.         logCloseCall() {
  5380.           this.closeCall = !0;
  5381.         }
  5382.         toBits() {
  5383.           let a = [
  5384.             this.mouse.status,
  5385.             this.onLine.status,
  5386.             this.closeCall,
  5387.             this.consoleOpened
  5388.           ];
  5389.           var e = this.startTime;
  5390.           for (let p = 0; 28 > p; p++) a.push(!!(e & 1)), (e >>= 1);
  5391.           for (let p of [
  5392.             this.event.die,
  5393.             this.event.disconnect,
  5394.             ...this.mouse.updates,
  5395.             ...this.onLine.updates,
  5396.             this.time()
  5397.           ])
  5398.             for (e = 0; 16 > e; e++) a.push(!!(p & 1)), (p >>= 1);
  5399.           return a;
  5400.         }
  5401.         drawCanvas(a) {
  5402.           let { width: e, height: p } = a.canvas,
  5403.             x = a.getImageData(0, 0, e, p),
  5404.             { data: k } = x,
  5405.             D = this.toBits(),
  5406.             w = [];
  5407.           for (var q = 0; 16 > q; q++) {
  5408.             var r = !1;
  5409.             for (var v = 0; 16 > v; v++) D[q + 16 * v] && (r = !r);
  5410.             w.push(r);
  5411.           }
  5412.           q = [];
  5413.           for (r = 0; 16 > r; r++) {
  5414.             v = !1;
  5415.             for (var t = 0; 16 > t; t++) D[t + 16 * r] && (v = !v);
  5416.             q.push(v);
  5417.           }
  5418.           r = !0;
  5419.           for (v = 0; 256 > v; v++) D[v] && (r = !r);
  5420.           v = -Math.floor(8 * Math.random());
  5421.           for (t = v; t < e; t += 4)
  5422.             for (let a = v; a < e; a += 4) {
  5423.               let x = Math.floor(t / 4) % 32,
  5424.                 v = Math.floor(a / 4) % 32;
  5425.               17 < x ||
  5426.                 17 < v ||
  5427.                 (33 !== x + v &&
  5428.                 (16 === x ||
  5429.                   16 === v ||
  5430.                   (17 === x
  5431.                     ? 17 === v
  5432.                       ? r
  5433.                       : q[v]
  5434.                     : 17 === v
  5435.                     ? w[x]
  5436.                     : D[x + 16 * v]))
  5437.                   ? ((k[((t + a * e) << 2) | 0] |= 1),
  5438.                     (k[((t + a * e) << 2) | 1] |= 1),
  5439.                     (k[((t + a * e) << 2) | 2] &= -2),
  5440.                     (k[((t + 1 + a * e) << 2) | 0] |= 1),
  5441.                     (k[((t + 1 + a * e) << 2) | 1] |= 1),
  5442.                     (k[((t + 1 + a * e) << 2) | 2] &= -2),
  5443.                     (k[((t + a * e + e) << 2) | 0] |= 1),
  5444.                     (k[((t + a * e + e) << 2) | 1] |= 1),
  5445.                     (k[((t + a * e + e) << 2) | 2] &= -2),
  5446.                     (k[((t + 1 + a * e + e) << 2) | 0] |= 1),
  5447.                     (k[((t + 1 + a * e + e) << 2) | 1] |= 1),
  5448.                     (k[((t + 1 + a * e + e) << 2) | 2] &= -2))
  5449.                   : ((k[((t + a * e) << 2) | 0] &= -2),
  5450.                     (k[((t + a * e) << 2) | 1] &= -2),
  5451.                     (k[((t + a * e) << 2) | 2] |= 1),
  5452.                     (k[((t + 1 + a * e) << 2) | 0] &= -2),
  5453.                     (k[((t + 1 + a * e) << 2) | 1] &= -2),
  5454.                     (k[((t + 1 + a * e) << 2) | 2] |= 1),
  5455.                     (k[((t + a * e + e) << 2) | 0] &= -2),
  5456.                     (k[((t + a * e + e) << 2) | 1] &= -2),
  5457.                     (k[((t + a * e + e) << 2) | 2] |= 1),
  5458.                     (k[((t + 1 + a * e + e) << 2) | 0] &= -2),
  5459.                     (k[((t + 1 + a * e + e) << 2) | 1] &= -2),
  5460.                     (k[((t + 1 + a * e + e) << 2) | 2] |= 1)));
  5461.             }
  5462.           a.putImageData(x, 0, 0);
  5463.         }
  5464.       };
  5465.       let w = new p();
  5466.       w.Tracker = p;
  5467.       r.exports = w;
  5468.     },
  5469.     function(r, p, w) {
  5470.       let a = w(1),
  5471.         e = w(4);
  5472.       class E {
  5473.         constructor() {
  5474.           this.target = {
  5475.             x: 0,
  5476.             y: 0
  5477.           };
  5478.           this.socket = null;
  5479.           this.statMaxing = !1;
  5480.           let e = document.getElementById("gameCanvas");
  5481.           e.width = a.screenWidth;
  5482.           e.height = a.screenHeight;
  5483.           this.cv = e;
  5484.         }
  5485.         init(a, e) {
  5486.           this.control = a;
  5487.           this.socket = e;
  5488.           e = this.cv;
  5489.           "joysticks" === a
  5490.             ? ((this.movementTouch = this.controlTouch = null),
  5491.               (this.movementRight = this.movementLeft = this.movementBottom = this.movementTop = !1),
  5492.               e.addEventListener("touchstart", a => this.touchStart(a), !1),
  5493.               e.addEventListener("touchmove", a => this.touchMove(a), !1),
  5494.               e.addEventListener("touchend", a => this.touchEnd(a), !1),
  5495.               e.addEventListener("touchcancel", a => this.touchEnd(a), !1))
  5496.             : (e.addEventListener("mousedown", a => this.mouseDown(a), !1),
  5497.               e.addEventListener("mousemove", a => this.mouseMove(a), !1),
  5498.               e.addEventListener("mouseup", a => this.mouseUp(a), !1));
  5499.           e.addEventListener("keydown", a => this.keyboardDown(a), !1);
  5500.           e.addEventListener("keyup", a => this.keyboardUp(a), !1);
  5501.           this.autoUpgrade();
  5502.         }
  5503.         autoUpgrade() {
  5504.           if (a.autoLevel)
  5505.             var e = 60,
  5506.               k = setInterval(() => {
  5507.                 this.socket.talk("L");
  5508.                 0 >= --e && clearInterval(k);
  5509.               }, 100);
  5510.         }
  5511.         emit(a) {
  5512.           this.socket.talk(a);
  5513.         }
  5514.         talk(a, e) {
  5515.           this.socket.talk(a, e);
  5516.         }
  5517.         spawn(a) {
  5518.           this.socket.talk("s", a, -1);
  5519.           e.reset();
  5520.           this.autoUpgrade();
  5521.         }
  5522.         set(a, e) {
  5523.           this.socket.cmd.set(a, e);
  5524.         }
  5525.         setPosition(a, e) {
  5526.           this.target.x = a;
  5527.           this.target.y = e;
  5528.           this.socket.cmd.setPosition(a, e);
  5529.         }
  5530.         keyboardDown(e) {
  5531.           switch (e.keyCode) {
  5532.             case a.KEY_SPAWN:
  5533.               if (
  5534.                 a.died &&
  5535.                 (a.respawnOn <= Date.now() || e.shiftKey) &&
  5536.                 (this.spawn(a.playerName), (a.died = !1), !a.mobile)
  5537.               ) {
  5538.                 var k = document.getElementById("respawn-banner");
  5539.                 k && (k.style.display = "none");
  5540.               }
  5541.               break;
  5542.             case a.KEY_UP_ARROW:
  5543.             case a.KEY_UP:
  5544.               this.set(0, !0);
  5545.               break;
  5546.             case a.KEY_DOWN_ARROW:
  5547.             case a.KEY_DOWN:
  5548.               this.set(1, !0);
  5549.               break;
  5550.             case a.KEY_LEFT_ARROW:
  5551.             case a.KEY_LEFT:
  5552.               this.set(2, !0);
  5553.               break;
  5554.             case a.KEY_RIGHT_ARROW:
  5555.             case a.KEY_RIGHT:
  5556.               this.set(3, !0);
  5557.               break;
  5558.             case a.KEY_MOUSE_0:
  5559.               this.set(4, !0);
  5560.               break;
  5561.             case a.KEY_MOUSE_1:
  5562.               this.set(5, !0);
  5563.               break;
  5564.             case a.KEY_MOUSE_2:
  5565.               this.set(6, !0);
  5566.               break;
  5567.               case a.KEY_TELEPORT:
  5568.                   this.emit("F");
  5569.                   break;
  5570.             case a.KEY_LEVEL_UP:
  5571.               this.emit("L");
  5572.               break;
  5573.                case a.KEY_ARTY:
  5574.               this.emit("arty");
  5575.               break;
  5576.             case a.KEY_CHAT:
  5577.             case 191:
  5578.               if (!a.died) {
  5579.                 if (a.isChatMode === false) {
  5580.                   // Chat input textbox.
  5581.                   let chatInput = document.createElement("input");
  5582.                   chatInput.id = "chatInput";
  5583.                   chatInput.tabindex = 4;
  5584.                   chatInput.style.font = "bold 18px Ubuntu";
  5585.                   chatInput.maxlength = "100";
  5586.                   chatInput.placeholder =
  5587.                     "Press Enter to send. Press Esc to cancel. Type /help for a list of commands.";
  5588.  
  5589.                   // Chat input wrapper div.
  5590.                   let chatInputWrapper = document.createElement("div");
  5591.                   chatInputWrapper.style.position = "absolute";
  5592.                   chatInputWrapper.style.width = "720px";
  5593.                   chatInputWrapper.style.opacity = "0.8";
  5594.                   chatInputWrapper.style.left = "50%";
  5595.                   chatInputWrapper.style.bottom = "100px";
  5596.                   chatInputWrapper.style.transform = "translate(-50%, -50%)";
  5597.                   chatInputWrapper.style.margin = "0 auto";
  5598.                   chatInputWrapper.style.visibility = "hidden";
  5599.  
  5600.                   chatInputWrapper.appendChild(chatInput);
  5601.                   document.body.appendChild(chatInputWrapper);
  5602.  
  5603.                   // Sending chat.
  5604.                   chatInput.addEventListener("keydown", function(event) {
  5605.                     if (event.key === "Enter" || event.keyCode === 13) {
  5606.                       // ============================================================
  5607.                       // Check again if the player died, otherwise, it hangs the client.
  5608.                       // There will be an error saying that "color is undefined" in app.js file.
  5609.                       // ============================================================
  5610.  
  5611.                       let Y = chatInput.value;
  5612.                       if (Y) {
  5613.                         let maxLen = 100;
  5614.                         let trimmedMessage =
  5615.                           Y.length > maxLen
  5616.                             ? Y.substring(0, maxLen - 3) + "..."
  5617.                             : Y.substring(0, maxLen);
  5618.  
  5619.                         a.socket.talk("h", trimmedMessage, 1);
  5620.  
  5621.                         chatInputWrapper.removeChild(chatInput);
  5622.                         document.body.removeChild(chatInputWrapper);
  5623.  
  5624.                         let gameCanvas = document.getElementById("gameCanvas");
  5625.                         gameCanvas.focus();
  5626.  
  5627.                         a.isChatMode = false;
  5628.                       }
  5629.                     }
  5630.                   });
  5631.  
  5632.                   // Cancelling chat.
  5633.                   chatInput.addEventListener("keydown", function(event) {
  5634.                     if (event.key === "Esc" || event.keyCode === 27) {
  5635.                       chatInputWrapper.removeChild(chatInput);
  5636.                       document.body.removeChild(chatInputWrapper);
  5637.  
  5638.                       let gameCanvas = document.getElementById("gameCanvas");
  5639.                       gameCanvas.focus();
  5640.  
  5641.                       a.isChatMode = false;
  5642.                     }
  5643.                   });
  5644.  
  5645.                   a.isChatMode = true;
  5646.  
  5647.                   // To remove initial "i" letter.
  5648.                   setTimeout(() => {
  5649.                     chatInput.value = "";
  5650.                     chatInputWrapper.style.visibility = "visible";
  5651.                     chatInput.focus();
  5652.                   }, 10);
  5653.                 } else {
  5654.                   // Already in chat mode, focus the chat input textbox.
  5655.                   let existingChatInput = document.getElementById("chatInput");
  5656.                   if (existingChatInput) {
  5657.                     // Remove 'h' from the input.
  5658.                     let oldValue = existingChatInput.value;
  5659.                     existingChatInput.value = "";
  5660.                     existingChatInput.focus();
  5661.                     existingChatInput.value = oldValue;
  5662.                   }
  5663.                 }
  5664.               }
  5665.  
  5666.               break;
  5667.             case a.KEY_ABILITY:
  5668.               this.emit("ChangeTankOne");
  5669.           }
  5670.           if (!e.ctrlKey && !e.altKey) {
  5671.             if (a.canSkill) {
  5672.               k = this.statMaxing ? 12 : 1;
  5673.               do
  5674.                 switch (e.keyCode) {
  5675.                   case a.KEY_UPGRADE_ATK:
  5676.                     this.talk("x", 0);
  5677.                     break;
  5678.                   case a.KEY_UPGRADE_HTL:
  5679.                     this.talk("x", 1);
  5680.                     break;
  5681.                   case a.KEY_UPGRADE_SPD:
  5682.                     this.talk("x", 2);
  5683.                     break;
  5684.                   case a.KEY_UPGRADE_STR:
  5685.                     this.talk("x", 3);
  5686.                     break;
  5687.                   case a.KEY_UPGRADE_PEN:
  5688.                     this.talk("x", 4);
  5689.                     break;
  5690.                   case a.KEY_UPGRADE_DAM:
  5691.                     this.talk("x", 5);
  5692.                     break;
  5693.                   case a.KEY_UPGRADE_RLD:
  5694.                     this.talk("x", 6);
  5695.                     break;
  5696.                   case a.KEY_UPGRADE_MOB:
  5697.                     this.talk("x", 7);
  5698.                     break;
  5699.                   case a.KEY_UPGRADE_RGN:
  5700.                     this.talk("x", 8);
  5701.                     break;
  5702.                   case a.KEY_UPGRADE_SHI:
  5703.                     this.talk("x", 9);
  5704.                 }
  5705.               while (--k);
  5706.             }
  5707.             if (!e.repeat) {
  5708.               switch (e.keyCode) {
  5709.                 case a.KEY_AUTO_SPIN:
  5710.                   this.talk("t", 0);
  5711.                   break;
  5712.                 case a.KEY_AUTO_FIRE:
  5713.                   this.talk("t", 1);
  5714.                   break;
  5715.                 case a.KEY_OVER_RIDE:
  5716.                   this.talk("t", 2);
  5717.                   break;
  5718.                 case a.KEY_REVERSE_TANK:
  5719.                   this.emit("J");
  5720.                   break;
  5721.                 case a.KEY_UPGRADE_MAX:
  5722.                   this.statMaxing = !0;
  5723.                   break;
  5724.                 case a.KEY_FUCK_YOU:
  5725.                   this.emit("0");
  5726. break;
  5727.   case a.KEY_PASSIVE:
  5728.                   this.emit("PassiveMode");
  5729.                   break;
  5730.                  
  5731.          case a.KEY_SPAWNBBG:
  5732.                   this.emit("spawnbbg");
  5733.                   break;
  5734.      /***    case a.KEY_RECOIL:
  5735.                   this.emit("norecoil"); ***/
  5736.                   break;
  5737.          case a.KEY_BOSS:
  5738.                   this.emit("boss");
  5739.                   break;
  5740.          case a.KEY_STALK:
  5741.                   this.emit("stalk");
  5742.                   break;
  5743.          case a.KEY_SU:
  5744.                   this.emit("su");
  5745.                   break;
  5746.                 case a.KEY_KILL:
  5747.                   this.emit("kill");
  5748.                   break;
  5749.                 case a.KEY_TP:
  5750.                   this.emit("TP");
  5751.                   break;
  5752.                 case a.KEY_DEFINE:
  5753.                   this.emit("define");
  5754.                   break;
  5755.                 case a.KEY_CLOSE:
  5756.                   this.emit("CLOSEARENA");
  5757.                   break;
  5758.                  
  5759.                 case a.KEY_KILL_YOURSELF:
  5760.                   this.emit("K");
  5761.                   break;
  5762.                 case a.KEY_REVERSE_MOUSE:
  5763.                   this.emit("O");
  5764.                   break;
  5765.                 case a.KEY_PING:
  5766.                   a.showDebug = !0;
  5767.                   break;
  5768.                 case a.KEY_CLASS_TREE:
  5769.                   a.showTree = !0;
  5770.                   break;
  5771.                 case a.KEY_RECORD:
  5772.                   if (this.cv.captureStream && window.MediaRecorder)
  5773.                     if (this.videoRecorder)
  5774.                       switch (this.videoRecorder.state) {
  5775.                         case "inactive":
  5776.                           PlaySound214();
  5777.                           a.messages.push({
  5778.                             text: "Recorder started!",
  5779.                             status: 2,
  5780.                             alpha: 0,
  5781.                             time: Date.now()
  5782.                           });
  5783.                           this.videoRecorder.start();
  5784.                           break;
  5785.                         case "recording":
  5786.                           PlaySound215();
  5787.                           a.messages.push({
  5788.                             text: "Recorder stopped! Saving file...",
  5789.                             status: 2,
  5790.                             alpha: 0,
  5791.                             time: Date.now()
  5792.                           }),
  5793.                             this.videoRecorder.stop();
  5794.                       }
  5795.                     else {
  5796.                       let e = [];
  5797.                       this.videoRecorder = new MediaRecorder(
  5798.                         this.cv.captureStream(60)
  5799.                       );
  5800.                       this.videoRecorder.ondataavailable = a => e.push(a.data);
  5801.                       this.videoRecorder.onstop = () => {
  5802.                         let a = new Blob(e, {
  5803.                           type: this.videoRecorder.mimeType
  5804.                         });
  5805.                         e.length = 0;
  5806.                         let k = URL.createObjectURL(a),
  5807.                           q = document.createElement("a");
  5808.                         q.style.display = "none";
  5809.                         q.setAttribute("download", "arras.webm");
  5810.                         q.setAttribute("href", k);
  5811.                         document.body.appendChild(q);
  5812.                         setTimeout(() => {
  5813.                           URL.revokeObjectURL(k);
  5814.                           document.body.removeChild(q);
  5815.                         }, 100);
  5816.                         q.click();
  5817.                       };
  5818.                       PlaySound214();
  5819.                       a.messages.push({
  5820.                         text: "Recorder initiated and started!",
  5821.                         status: 2,
  5822.                         alpha: 0,
  5823.                         time: Date.now()
  5824.                       });
  5825.                       this.videoRecorder.start();
  5826.                     }
  5827.                   else
  5828.                     a.messages.push({
  5829.                       text: "Media recorder not supported in this browser!",
  5830.                       status: 2,
  5831.                       alpha: 0,
  5832.                       time: Date.now()
  5833.                     });
  5834.                   break;
  5835.                 case a.KEY_SCREENSHOT:
  5836.                   PlaySound213();
  5837.                   a.messages.push({
  5838.                     text: "Saving screenshot...",
  5839.                     status: 2,
  5840.                     alpha: 0,
  5841.                     time: Date.now()
  5842.                   });
  5843.                   var x = this.cv.toDataURL();
  5844.                   k = atob(x.split(",")[1]);
  5845.                   x = x
  5846.                     .split(",")[0]
  5847.                     .split(":")[1]
  5848.                     .split(";")[0];
  5849.                   let p = new Uint8Array(k.length);
  5850.                   for (let a = 0; a < k.length; a++) p[a] = k.charCodeAt(a);
  5851.                   let q = URL.createObjectURL(
  5852.                       new Blob([p], {
  5853.                         type: x
  5854.                       })
  5855.                     ),
  5856.                     w = document.createElement("a");
  5857.                   w.style.display = "none";
  5858.                   w.setAttribute("download", "arras.png");
  5859.                   w.setAttribute("href", q);
  5860.                   document.body.appendChild(w);
  5861.                   setTimeout(() => {
  5862.                     URL.revokeObjectURL(q);
  5863.                     document.body.removeChild(w);
  5864.                   }, 100);
  5865.                   w.click();
  5866.               }
  5867.               if (a.canUpgrade)
  5868.                 switch (e.keyCode) {
  5869.                   case a.KEY_CHOOSE_1:
  5870.                     this.talk("U", 0);
  5871.                     break;
  5872.                   case a.KEY_CHOOSE_2:
  5873.                     this.talk("U", 1);
  5874.                     break;
  5875.                   case a.KEY_CHOOSE_3:
  5876.                     this.talk("U", 2);
  5877.                     break;
  5878.                   case a.KEY_CHOOSE_4:
  5879.                     this.talk("U", 3);
  5880.                     break;
  5881.                   case a.KEY_CHOOSE_5:
  5882.                     this.talk("U", 4);
  5883.                     break;
  5884.                   case a.KEY_CHOOSE_6:
  5885.                     this.talk("U", 5);
  5886.                     break;
  5887.                   case a.KEY_CHOOSE_7:
  5888.                     this.talk("U", 6);
  5889.                     break;
  5890.                   case a.KEY_CHOOSE_8:
  5891.                     this.talk("U", 7);
  5892.                     break;
  5893.                   case a.KEY_CHOOSE_9:
  5894.                     this.talk("U", 8);
  5895.                 }
  5896.             }
  5897.           }
  5898.         }
  5899.         keyboardUp(e) {
  5900.           switch (e.keyCode) {
  5901.             case a.KEY_UP_ARROW:
  5902.             case a.KEY_UP:
  5903.               this.set(0, !1);
  5904.               break;
  5905.             case a.KEY_DOWN_ARROW:
  5906.             case a.KEY_DOWN:
  5907.               this.set(1, !1);
  5908.               break;
  5909.             case a.KEY_LEFT_ARROW:
  5910.             case a.KEY_LEFT:
  5911.               this.set(2, !1);
  5912.               break;
  5913.             case a.KEY_RIGHT_ARROW:
  5914.             case a.KEY_RIGHT:
  5915.               this.set(3, !1);
  5916.               break;
  5917.             case a.KEY_MOUSE_0:
  5918.               this.set(4, !1);
  5919.               break;
  5920.             case a.KEY_MOUSE_1:
  5921.               this.set(5, !1);
  5922.               break;
  5923.             case a.KEY_MOUSE_2:
  5924.               this.set(6, !1);
  5925.               break;
  5926.             case a.KEY_UPGRADE_MAX:
  5927.               this.statMaxing = !1;
  5928.               break;
  5929.             case a.KEY_PING:
  5930.               a.showDebug = !1;
  5931.               break;
  5932.             case a.KEY_CLASS_TREE:
  5933.               a.showTree = !1;
  5934.           }
  5935.         }
  5936.         mouseDown(e) {
  5937.           switch (e.button) {
  5938.             case 0:
  5939.               e = {
  5940.                 x: e.clientX,
  5941.                 y: e.clientY
  5942.               };
  5943.               let k = a.clickables.stat.check(e);
  5944.               -1 !== k
  5945.                 ? this.talk("x", k)
  5946.                 : -1 !== a.clickables.skipUpgrades.check(e)
  5947.                 ? a.clearUpgrades()
  5948.                 : ((e = a.clickables.upgrade.check(e)),
  5949.                   -1 !== e ? this.talk("U", e) : this.set(4, !0));
  5950.               break;
  5951.             case 1:
  5952.               this.set(5, !0);
  5953.               break;
  5954.             case 2:
  5955.               this.set(6, !0);
  5956.           }
  5957.         }
  5958.         mouseMove(e) {
  5959.           null !== a.player.x &&
  5960.             this.setPosition(e.clientX - a.player.x, e.clientY - a.player.y);
  5961.           a.statHover =
  5962.             0 ===
  5963.             a.clickables.hover.check({
  5964.               x: e.clientX,
  5965.               y: e.clientY
  5966.             });
  5967.         }
  5968.         mouseUp(a) {
  5969.           switch (a.button) {
  5970.             case 0:
  5971.               this.set(4, !1);
  5972.               break;
  5973.             case 1:
  5974.               this.set(5, !1);
  5975.               break;
  5976.             case 2:
  5977.               this.set(6, !1);
  5978.           }
  5979.         }
  5980.         touchStart(e) {
  5981.           e.preventDefault();
  5982.           if (a.died && a.respawnOn <= Date.now())
  5983.             this.spawn(a.playerName), (a.died = !1);
  5984.           else {
  5985.             for (let x of e.changedTouches) {
  5986.               var k = {
  5987.                 x: x.clientX,
  5988.                 y: x.clientY
  5989.               };
  5990.               let e = x.identifier;
  5991.               var p = a.clickables.stat.check(k);
  5992.               -1 !== p
  5993.                 ? this.talk("x", p)
  5994.                 : -1 !== a.clickables.skipUpgrades.check(k)
  5995.                 ? a.clearUpgrades()
  5996.                 : ((p = a.clickables.upgrade.check(k)),
  5997.                   -1 !== p
  5998.                     ? this.talk("U", p)
  5999.                     : ((k = k.x < this.cv.width / 2),
  6000.                       null === this.movementTouch && k
  6001.                         ? (this.movementTouch = e)
  6002.                         : null !== this.controlTouch ||
  6003.                           k ||
  6004.                           ((this.controlTouch = e), this.set(4, !0))));
  6005.             }
  6006.             this.touchMove(e);
  6007.           }
  6008.         }
  6009.         touchMove(a) {
  6010.           a.preventDefault();
  6011.           for (let k of a.changedTouches) {
  6012.             var e = k.clientX;
  6013.             a = k.clientY;
  6014.             var p = k.identifier;
  6015.             this.movementTouch === p
  6016.               ? ((e -= (1 * this.cv.width) / 6),
  6017.                 (a -= (2 * this.cv.height) / 3),
  6018.                 (p = Math.sqrt(e * e + a * a)),
  6019.                 (e /= p),
  6020.                 (a /= p),
  6021.                 -0.3826834323650898 > a !== this.movementTop &&
  6022.                   this.set(0, (this.movementTop = -0.3826834323650898 > a)),
  6023.                 0.3826834323650898 < a !== this.movementBottom &&
  6024.                   this.set(1, (this.movementBottom = 0.3826834323650898 < a)),
  6025.                 -0.3826834323650898 > e !== this.movementLeft &&
  6026.                   this.set(2, (this.movementLeft = -0.3826834323650898 > e)),
  6027.                 0.3826834323650898 < e !== this.movementRight &&
  6028.                   this.set(3, (this.movementRight = 0.3826834323650898 < e)))
  6029.               : this.controlTouch === p &&
  6030.                 this.setPosition(
  6031.                   4 * (e - (5 * this.cv.width) / 6),
  6032.                   4 * (a - (2 * this.cv.height) / 3)
  6033.                 );
  6034.           }
  6035.         }
  6036.         touchEnd(a) {
  6037.           a.preventDefault();
  6038.           for (let e of a.changedTouches)
  6039.             (a = e.identifier),
  6040.               this.movementTouch === a
  6041.                 ? ((this.movementTouch = null),
  6042.                   this.movementTop && this.set(0, (this.movementTop = !1)),
  6043.                   this.movementBottom &&
  6044.                     this.set(1, (this.movementBottom = !1)),
  6045.                   this.movementLeft && this.set(2, (this.movementLeft = !1)),
  6046.                   this.movementRight && this.set(3, (this.movementRight = !1)))
  6047.                 : this.controlTouch === a &&
  6048.                   ((this.controlTouch = null), this.set(4, !1));
  6049.         }
  6050.       }
  6051.       r.exports = E;
  6052.     },
  6053.     function(r, p) {
  6054.       let w = new Uint32Array(1),
  6055.         a = new Uint8Array(w.buffer),
  6056.         e = new Float32Array(w.buffer),
  6057.         E = new Uint16Array(1),
  6058.         x = new Uint8Array(E.buffer);
  6059.       p.encode = k => {
  6060.         let p = [];
  6061.         var r = [],
  6062.           q = 0,
  6063.           C = 15,
  6064.           v = 0;
  6065.         for (var t of k) {
  6066.           var F = 0;
  6067.           if (0 === t || !1 === t) F = 0;
  6068.           else if (1 === t || !0 === t) F = 1;
  6069.           else if ("number" === typeof t)
  6070.             !Number.isInteger(t) || -4294967296 > t || 4294967296 <= t
  6071.               ? ((F = 8), (q += 4))
  6072.               : 0 <= t
  6073.               ? 256 > t
  6074.                 ? ((F = 2), q++)
  6075.                 : 65536 > t
  6076.                 ? ((F = 4), (q += 2))
  6077.                 : 4294967296 > t && ((F = 6), (q += 4))
  6078.               : -256 <= t
  6079.               ? ((F = 3), q++)
  6080.               : -65536 <= t
  6081.               ? ((F = 5), (q += 2))
  6082.               : -4294967296 <= t && ((F = 7), (q += 4));
  6083.           else if ("string" === typeof t) {
  6084.             F = !1;
  6085.             for (let a = 0; a < t.length; a++)
  6086.               if ("\u00ff" < t.charAt(a)) F = !0;
  6087.               else if ("\x00" === t.charAt(a))
  6088.                 throw (console.error("Null containing string", t),
  6089.                 Error("Null containing string"));
  6090.             !F && 1 >= t.length
  6091.               ? ((F = 9), q++)
  6092.               : F
  6093.               ? ((F = 11), (q += 2 * t.length + 2))
  6094.               : ((F = 10), (q += t.length + 1));
  6095.           } else
  6096.             throw (console.error("Unencodable data type", k),
  6097.             Error("Unencodable data type"));
  6098.           p.push(F);
  6099.           if (F === C) v++;
  6100.           else {
  6101.             r.push(C);
  6102.             if (1 <= v) {
  6103.               for (; 19 < v; ) r.push(14), r.push(15), (v -= 19);
  6104.               1 === v
  6105.                 ? r.push(C)
  6106.                 : 2 === v
  6107.                 ? r.push(12)
  6108.                 : 3 === v
  6109.                 ? r.push(13)
  6110.                 : 20 > v && (r.push(14), r.push(v - 4));
  6111.             }
  6112.             v = 0;
  6113.             C = F;
  6114.           }
  6115.         }
  6116.         r.push(C);
  6117.         if (1 <= v) {
  6118.           for (; 19 < v; ) r.push(14), r.push(15), (v -= 19);
  6119.           1 === v
  6120.             ? r.push(C)
  6121.             : 2 === v
  6122.             ? r.push(12)
  6123.             : 3 === v
  6124.             ? r.push(13)
  6125.             : 20 > v && (r.push(14), r.push(v - 4));
  6126.         }
  6127.         r.push(15);
  6128.         1 === r.length % 2 && r.push(15);
  6129.         q = new Uint8Array((r.length >> 1) + q);
  6130.         for (C = 0; C < r.length; C += 2) q[C >> 1] = (r[C] << 4) | r[C + 1];
  6131.         r = r.length >> 1;
  6132.         for (C = 0; C < p.length; C++)
  6133.           switch (((v = k[C]), p[C])) {
  6134.             case 2:
  6135.             case 3:
  6136.               q[r++] = v;
  6137.               break;
  6138.             case 4:
  6139.             case 5:
  6140.               E[0] = v;
  6141.               q.set(x, r);
  6142.               r += 2;
  6143.               break;
  6144.             case 6:
  6145.             case 7:
  6146.               w[0] = v;
  6147.               q.set(a, r);
  6148.               r += 4;
  6149.               break;
  6150.             case 8:
  6151.               e[0] = v;
  6152.               q.set(a, r);
  6153.               r += 4;
  6154.               break;
  6155.             case 9:
  6156.               v = 0 === v.length ? 0 : v.charCodeAt(0);
  6157.               q[r++] = v;
  6158.               break;
  6159.             case 10:
  6160.               for (t = 0; t < v.length; t++) q[r++] = v.charCodeAt(t);
  6161.               q[r++] = 0;
  6162.               break;
  6163.             case 11:
  6164.               for (t = 0; t < v.length; t++)
  6165.                 (F = v.charCodeAt(t)), (q[r++] = F & 255), (q[r++] = F >> 8);
  6166.               q[r++] = 0;
  6167.               q[r++] = 0;
  6168.           }
  6169.         return q;
  6170.       };
  6171.       p.decode = k => {
  6172.         k = new Uint8Array(k);
  6173.         if (15 !== k[0] >> 4) return null;
  6174.         var p = [],
  6175.           r = 15;
  6176.         let q = 0;
  6177.         for (var C = !0; ; ) {
  6178.           if (q >= k.length) return null;
  6179.           var v = k[q];
  6180.           C ? ((v &= 15), q++) : (v >>= 4);
  6181.           C = !C;
  6182.           if (12 === (v & 12)) {
  6183.             if (15 === v) {
  6184.               C && q++;
  6185.               break;
  6186.             }
  6187.             let a = v - 10;
  6188.             if (14 === v) {
  6189.               if (q >= k.length) return null;
  6190.               v = k[q];
  6191.               C ? ((v &= 15), q++) : (v >>= 4);
  6192.               C = !C;
  6193.               a += v;
  6194.             }
  6195.             for (v = 0; v < a; v++) p.push(r);
  6196.           } else p.push(v), (r = v);
  6197.         }
  6198.         r = [];
  6199.         for (let t of p)
  6200.           switch (t) {
  6201.             case 0:
  6202.               r.push(0);
  6203.               break;
  6204.             case 1:
  6205.               r.push(1);
  6206.               break;
  6207.             case 2:
  6208.               r.push(k[q++]);
  6209.               break;
  6210.             case 3:
  6211.               r.push(k[q++] - 256);
  6212.               break;
  6213.             case 4:
  6214.               x[0] = k[q++];
  6215.               x[1] = k[q++];
  6216.               r.push(E[0]);
  6217.               break;
  6218.             case 5:
  6219.               x[0] = k[q++];
  6220.               x[1] = k[q++];
  6221.               r.push(E[0] - 65536);
  6222.               break;
  6223.             case 6:
  6224.               a[0] = k[q++];
  6225.               a[1] = k[q++];
  6226.               a[2] = k[q++];
  6227.               a[3] = k[q++];
  6228.               r.push(w[0]);
  6229.               break;
  6230.             case 7:
  6231.               a[0] = k[q++];
  6232.               a[1] = k[q++];
  6233.               a[2] = k[q++];
  6234.               a[3] = k[q++];
  6235.               r.push(w[0] - 4294967296);
  6236.               break;
  6237.             case 8:
  6238.               a[0] = k[q++];
  6239.               a[1] = k[q++];
  6240.               a[2] = k[q++];
  6241.               a[3] = k[q++];
  6242.               r.push(Number.isNaN(e[0]) ? -1 : e[0]);
  6243.               break;
  6244.             case 9:
  6245.               p = k[q++];
  6246.               r.push(0 === p ? "" : String.fromCharCode(p));
  6247.               break;
  6248.             case 10:
  6249.               for (p = ""; (C = k[q++]); ) p += String.fromCharCode(C);
  6250.               r.push(p);
  6251.               break;
  6252.             case 11:
  6253.               for (p = ""; (C = k[q++] | (k[q++] << 8)); )
  6254.                 p += String.fromCharCode(C);
  6255.               r.push(p);
  6256.           }
  6257.         return r;
  6258.       };
  6259.     },
  6260.     function(r) {
  6261.       r.exports = {
  6262.         normal: {
  6263.    teal: "#7ADBBC",
  6264.           lgreen: "#B9E87E",
  6265.           orange: "#E7896D",
  6266.           yellow: "#fff9b3",
  6267.           lavender: "#768dfc",
  6268.           pink: "#f177dd",
  6269.           vlgrey: "#E8EBF7",
  6270.           lgrey: "#cdcdcd",
  6271.           guiwhite: "#FFFFFF",
  6272.           black: "#3c3c3c",
  6273.           blue: "#00b2e1",
  6274.           green: "#00e16e",
  6275.           red: "#f14e54",
  6276.           gold: "#ffe95e",
  6277.           purple: "#768dfc",
  6278.           magenta: "#bf7ff5",
  6279.           grey: "#999999",
  6280.           dgrey: "#b8b8b8",
  6281.           white: "#cdcdcd",
  6282.           guiblack: "#000000",
  6283.           paletteSize: 10,
  6284.           border: 0.5
  6285.         },
  6286.         terminal: {
  6287.           teal: "#ffffff",
  6288.           lgreen: "#008000",
  6289.           orange: "#004000",
  6290.           yellow: "#008000",
  6291.           lavender: "#004000",
  6292.           pink: "#80ff80",
  6293.           vlgrey: "#000000",
  6294.           lgrey: "#FFFFFF",
  6295.           guiwhite: "#000000",
  6296.           black: "#00ff00",
  6297.           blue: "#006000",
  6298.           green: "#00e000",
  6299.           red: "#000000",
  6300.           gold: "#004000",
  6301.           purple: "#004000",
  6302.           magenta: "#c0ffc0",
  6303.           grey: "#006000",
  6304.           dgrey: "#00a000",
  6305.           white: "#001400",
  6306.           guiblack: "#FFFFFF",
  6307.           paletteSize: 10,
  6308.           border: 0.5
  6309.         },  
  6310. classic: {
  6311.    teal: "#7ADBBC",
  6312.           lgreen: "#B9E87E",
  6313.           orange: "#E7896D",
  6314.           yellow: "#fff9b3",
  6315.           lavender: "#768dfc",
  6316.           pink: "#f177dd",
  6317.           vlgrey: "#E8EBF7",
  6318.           lgrey: "#cdcdcd",
  6319.           guiwhite: "#FFFFFF",
  6320.           black: "#3c3c3c",
  6321.           blue: "#00b2e1",
  6322.           green: "#00e16e",
  6323.           red: "#f14e54",
  6324.           gold: "#ffe95e",
  6325.           purple: "#768dfc",
  6326.           magenta: "#bf7ff5",
  6327.           grey: "#999999",
  6328.           dgrey: "#b8b8b8",
  6329.           white: "#cdcdcd",
  6330.           guiblack: "#000000",
  6331.           paletteSize: 10,
  6332.           border: 0.5
  6333.         },
  6334. pvp: {"teal":"#ff0000",
  6335.       "lgreen":"#fe9116",
  6336.       "orange":"#ff3c00",
  6337.       "yellow":"#fdf380",
  6338.       "lavender":"#858585",
  6339.       "pink":"#ff007b",
  6340.       "vlgrey":"#e8ebf7",
  6341.       "lgrey":"#aa9f9e",
  6342.       "guiwhite":"#6196a8",
  6343.       "black":"#000000",
  6344.       "blue":"#00e1ff",
  6345.       "green":"#00ff33",
  6346.       "red":"#ff0004",
  6347.       "gold":"#eeff00",
  6348.       "purple":"#4c00ff",
  6349.       "magenta":"#ae00ff",
  6350.       "grey":"#000000",
  6351.       "dgrey":"#3d3d3d",
  6352.       "white":"#616161",
  6353.       "guiblack":"#ffffff",
  6354.       "paletteSize":10,
  6355.       "border":"0.3"},
  6356.  
  6357.         dark: {
  6358.           teal: "#8975B7",
  6359.           lgreen: "#0C491D",
  6360.           orange: "#C46748",
  6361.           yellow: "#B2B224",
  6362.           lavender: "#7D56C5",
  6363.           pink: "#B24FAE",
  6364.           vlgrey: "#1E1E1E",
  6365.           lgrey: "#3C3A3A",
  6366.           guiwhite: "#000000",
  6367.           black: "#E5E5E5",
  6368.           blue: "#379FC6",
  6369.           green: "#30B53B",
  6370.           red: "#FF6C6E",
  6371.           gold: "#FFC665",
  6372.           purple: "#9673E8",
  6373.           magenta: "#C8679B",
  6374.           grey: "#635F5F",
  6375.           dgrey: "#73747A",
  6376.           white: "#11110F",
  6377.           guiblack: "#FFFFFF",
  6378.           paletteSize: 10,
  6379.           border: 0.15
  6380.         },
  6381.         natural: {
  6382.           teal: "#76C1BB",
  6383.           lgreen: "#AAD35D",
  6384.           orange: "#E09545",
  6385.           yellow: "#FFD993",
  6386.           lavender: "#939FFF",
  6387.           pink: "#D87FB2",
  6388.           vlgrey: "#C4B6B6",
  6389.           lgrey: "#7F7F7F",
  6390.           guiwhite: "#FFFFFF",
  6391.           black: "#373834",
  6392.           blue: "#4F93B5",
  6393.           green: "#00B659",
  6394.           red: "#E14F65",
  6395.           gold: "#E5BF42",
  6396.           purple: "#8053A0",
  6397.           magenta: "#B67CAA",
  6398.           grey: "#998F8F",
  6399.           dgrey: "#494954",
  6400.           white: "#A5B2A5",
  6401.           guiblack: "#000000",
  6402.           paletteSize: 10,
  6403.           border: 0.2
  6404.         },
  6405.         pumpkin: {
  6406.           teal: "#721970",
  6407.           lgreen: "#ff6347",
  6408.           orange: "#1b713a",
  6409.           yellow: "#fdf380",
  6410.           lavender: "#941100",
  6411.           pink: "#194417",
  6412.           vlgrey: "#1b713a",
  6413.           lgrey: "#aa9f9e",
  6414.           guiwhite: "#fed8b1",
  6415.           black: "#484848",
  6416.           blue: "#3ca4cb",
  6417.           green: "#76EEC6",
  6418.           red: "#F04F54",
  6419.           gold: "#1b713a",
  6420.           purple: "#1b713a",
  6421.           magenta: "#cc669c",
  6422.           grey: "#ffffff",
  6423.           dgrey: "#726f6f",
  6424.           white: "#ff9b58",
  6425.           guiblack: "#000000",
  6426.           paletteSize: 10,
  6427.           border: 3.3
  6428.         },
  6429.         forest: {
  6430.           teal: "#884AA5",
  6431.           lgreen: "#8C9B3E",
  6432.           orange: "#D16A80",
  6433.           yellow: "#97596D",
  6434.           lavender: "#499855",
  6435.           pink: "#60294F",
  6436.           vlgrey: "#DDC6B8",
  6437.           lgrey: "#7E949E",
  6438.           guiwhite: "#FFFFE8",
  6439.           black: "#665750",
  6440.           blue: "#807BB6",
  6441.           green: "#A1BE55",
  6442.           red: "#E5B05B",
  6443.           gold: "#FF4747",
  6444.           purple: "#BAC674",
  6445.           magenta: "#BA78D1",
  6446.           grey: "#998866",
  6447.           dgrey: "#529758",
  6448.           white: "#7DA060",
  6449.           guiblack: "#000000",
  6450.           paletteSize: 10,
  6451.           border: 0.7
  6452.         },
  6453.         midnight: {
  6454.           teal: "#2B9098",
  6455.           lgreen: "#4BAA5D",
  6456.           orange: "#345678",
  6457.           yellow: "#CDC684",
  6458.           lavender: "#89778E",
  6459.           pink: "#A85C90",
  6460.           vlgrey: "#CCCCCC",
  6461.           lgrey: "#A7B2B7",
  6462.           guiwhite: "#BAC6FF",
  6463.           black: "#091F28",
  6464.           blue: "#123455",
  6465.           green: "#098765",
  6466.           red: "#000013",
  6467.           gold: "#566381",
  6468.           purple: "#743784",
  6469.           magenta: "#B29098",
  6470.           grey: "#555555",
  6471.           dgrey: "#649EB7",
  6472.           white: "#444444",
  6473.           guiblack: "#000000",
  6474.           paletteSize: 10,
  6475.           border: 0.6
  6476.         },
  6477.         confusion: {
  6478.           teal: "#3ca4cb",
  6479.           lgreen: "#3ca4cb",
  6480.           orange: "#3ca4cb",
  6481.           yellow: "#3ca4cb",
  6482.           lavender: "#3ca4cb",
  6483.           pink: "#3ca4cb",
  6484.           vlgrey: "#3ca4cb",
  6485.           lgrey: "#3ca4cb",
  6486.           guiwhite: "#ffffff",
  6487.           black: "#484848",
  6488.           blue: "#3ca4cb",
  6489.           green: "#3ca4cb",
  6490.           red: "#3ca4cb",
  6491.           gold: "#3ca4cb",
  6492.           purple: "#3ca4cb",
  6493.           magenta: "#3ca4cb",
  6494.           grey: "#a7a7af",
  6495.           dgrey: "#dbdbdb",
  6496.           white: "#dbdbdb",
  6497.           guiblack: "#000000",
  6498.           paletteSize: 10,
  6499.           border: 0.5
  6500.         },
  6501.         pastel: {
  6502.           teal: "#89BFBA",
  6503.           lgreen: "#B5D17D",
  6504.           orange: "#E5E0E0",
  6505.           yellow: "#B5BBE5",
  6506.           lavender: "#939FFF",
  6507.           pink: "#646DE5",
  6508.           vlgrey: "#B2B2B2",
  6509.           lgrey: "#7F7F7F",
  6510.           guiwhite: "#FFFFFF",
  6511.           black: "#383835",
  6512.           blue: "#AEAEFF",
  6513.           green: "#AEFFAE",
  6514.           red: "#FFAEAE",
  6515.           gold: "#FFFFFF",
  6516.           purple: "#C3C3D8",
  6517.           magenta: "#FFB5FF",
  6518.           grey: "#CCCCCC",
  6519.           dgrey: "#A0A0B2",
  6520.           white: "#F2F2F2",
  6521.           guiblack: "#000000",
  6522.           paletteSize: 10,
  6523.           border: 0.35
  6524.         },
  6525.         space: {
  6526.           teal: "#4788F3",
  6527.           lgreen: "#AF1010",
  6528.           orange: "#FF0000",
  6529.           yellow: "#82F850",
  6530.           lavender: "#FFFFFF",
  6531.           pink: "#57006C",
  6532.           vlgrey: "#FFFFFF",
  6533.           lgrey: "#272727",
  6534.           guiwhite: "#000000",
  6535.           black: "#7F7F7F",
  6536.           blue: "#0E1B92",
  6537.           green: "#0AEB80",
  6538.           red: "#C2B90A",
  6539.           gold: "#3E7E8C",
  6540.           purple: "#285911",
  6541.           magenta: "#A9707E",
  6542.           grey: "#6F6A68",
  6543.           dgrey: "#2D0738",
  6544.           white: "#000000",
  6545.           guiblack: "#FFFFFF",
  6546.           paletteSize: 10,
  6547.           border: 0.25
  6548.         },
  6549.         obstar: {
  6550.           teal: "#7ADBBC",
  6551.           lgreen: "#3ee081",
  6552.           orange: "#d1adb2",
  6553.           yellow: "#eeda70",
  6554.           lavender: "#B58EFD",
  6555.           pink: "#EF99C3",
  6556.           vlgrey: "#E8EBF7",
  6557.           lgrey: "#AA9F9E",
  6558.           guiwhite: "#ecebeb",
  6559.           black: "#565555",
  6560.           blue: "#3CA4CB",
  6561.           green: "#19e56e",
  6562.           red: "#e6584b",
  6563.           gold: "#cfcf9f",
  6564.           purple: "#b2b2cc",
  6565.           magenta: "#CC669C",
  6566.           grey: "#8e8ca5",
  6567.           dgrey: "#c1bebe",
  6568.           white: "#DBDBDB",
  6569.           guiblack: "#000000",
  6570.           paletteSize: 10,
  6571.           border: 0.5
  6572.         },
  6573.         nebula: {
  6574.           teal: "#38B06E",
  6575.           lgreen: "#22882E",
  6576.           orange: "#D28E7F",
  6577.           yellow: "#D5D879",
  6578.           lavender: "#E084EB",
  6579.           pink: "#DF3E3E",
  6580.           vlgrey: "#F0F2CC",
  6581.           lgrey: "#7D7D7D",
  6582.           guiwhite: "#C2C5EF",
  6583.           black: "#161616",
  6584.           blue: "#9274E6",
  6585.           green: "#89F470",
  6586.           red: "#E08E5D",
  6587.           gold: "#ECDC58",
  6588.           purple: "#58CBEC",
  6589.           magenta: "#EA58EC",
  6590.           grey: "#7E5713",
  6591.           dgrey: "#303030",
  6592.           white: "#555555",
  6593.           guiblack: "#EAEAEA",
  6594.           paletteSize: 10,
  6595.           border: 0.5
  6596.         },
  6597.         bleach: {
  6598.           teal: "#00FFFF",
  6599.           lgreen: "#00FF00",
  6600.           orange: "#FF3200",
  6601.           yellow: "#FFEC00",
  6602.           lavender: "#FF24A7",
  6603.           pink: "#FF3CBD",
  6604.           vlgrey: "#FFF186",
  6605.           lgrey: "#918181",
  6606.           guiwhite: "#F1F1F1",
  6607.           black: "#5F5F5F",
  6608.           blue: "#0025FF",
  6609.           green: "#00FF00",
  6610.           red: "#FF0000",
  6611.           gold: "#FFFA23",
  6612.           purple: "#3100FF",
  6613.           magenta: "#D4D3D3",
  6614.           grey: "#838383",
  6615.           dgrey: "#4C4C4C",
  6616.           white: "#FFFEFE",
  6617.           guiblack: "#080808",
  6618.           paletteSize: 10,
  6619.           border: 0.4
  6620.         },
  6621.         borderless: {
  6622.           teal: "#7ADBBC",
  6623.           lgreen: "#B9E87E",
  6624.           orange: "#E7896D",
  6625.           yellow: "#FDF380",
  6626.           lavender: "#B58EFD",
  6627.           pink: "#EF99C3",
  6628.           vlgrey: "#E8EBF7",
  6629.           lgrey: "#AA9F9E",
  6630.           guiwhite: "#FFFFFF",
  6631.           black: "#484848",
  6632.           blue: "#3CA4CB",
  6633.           green: "#8ABC3F",
  6634.           red: "#E03E41",
  6635.           gold: "#EFC74B",
  6636.           purple: "#8D6ADF",
  6637.           magenta: "#CC669C",
  6638.           grey: "#A7A7AF",
  6639.           dgrey: "#726F6F",
  6640.           white: "#DBDBDB",
  6641.           guiblack: "#000000",
  6642.           paletteSize: 10,
  6643.           border: 0.001
  6644.         },
  6645.         bordered: {
  6646.           teal: "#7ADBBC",
  6647.           lgreen: "#B9E87E",
  6648.           orange: "#E7896D",
  6649.           yellow: "#FDF380",
  6650.           lavender: "#B58EFD",
  6651.           pink: "#EF99C3",
  6652.           vlgrey: "#E8EBF7",
  6653.           lgrey: "#AA9F9E",
  6654.           guiwhite: "#FFFFFF",
  6655.           black: "#484848",
  6656.           blue: "#3CA4CB",
  6657.           green: "#8ABC3F",
  6658.           red: "#E03E41",
  6659.           gold: "#EFC74B",
  6660.           purple: "#8D6ADF",
  6661.           magenta: "#CC669C",
  6662.           grey: "#A7A7AF",
  6663.           dgrey: "#726F6F",
  6664.           white: "#DBDBDB",
  6665.           guiblack: "#000000",
  6666.           paletteSize: 10,
  6667.           border: 1.2
  6668.         },
  6669.         ocean: {
  6670.           teal: "#76EEC6",
  6671.           lgreen: "#41AA78",
  6672.           orange: "#FF7F50",
  6673.           yellow: "#FFD250",
  6674.           lavender: "#DC3388",
  6675.           pink: "#FA8072",
  6676.           vlgrey: "#8B8886",
  6677.           lgrey: "#BFC1C2",
  6678.           guiwhite: "#FFFFFF",
  6679.           black: "#12466B",
  6680.           blue: "#4200AE",
  6681.           green: "#0D6338",
  6682.           red: "#DC4333",
  6683.           gold: "#FEA904",
  6684.           purple: "#7B4BAB",
  6685.           magenta: "#5C246E",
  6686.           grey: "#656884",
  6687.           dgrey: "#D4D7D9",
  6688.           white: "#3283BC",
  6689.           guiblack: "#000000",
  6690.           paletteSize: 10,
  6691.           border: 0.3
  6692.         },
  6693.         bubblegum: {
  6694.           teal: "#83ffd7",
  6695.           lgreen: "#faa3ff",
  6696.           orange: "#e7896d",
  6697.           yellow: "#ff00e7",
  6698.           lavender: "#5a00ff",
  6699.           pink: "#ef99c3",
  6700.           vlgrey: "#ffc0f5",
  6701.           lgrey: "#aa9f9e",
  6702.           guiwhite: "#00ff00",
  6703.           black: "#484848",
  6704.           blue: "#0000ff",
  6705.           green: "#00ff00",
  6706.           red: "#ff0000",
  6707.           gold: "#ffd700",
  6708.           purple: "#8d6adf",
  6709.           magenta: "#ff00c0",
  6710.           grey: "#a7a7af",
  6711.           dgrey: "#b300ff",
  6712.           white: "#ff81d9",
  6713.           guiblack: "#000000",
  6714.           paletteSize: 10,
  6715.           border: 1
  6716.         },
  6717.         nightmare: {
  6718.           teal: "#00ffae",
  6719.           lgreen: "#8eff00",
  6720.           orange: "#8a2000",
  6721.           yellow: "#ffeb00",
  6722.           lavender: "#2b007a",
  6723.           pink: "#930048",
  6724.           vlgrey: "#969696",
  6725.           lgrey: "#2a2a2a",
  6726.           guiwhite: "#aa0000",
  6727.           black: "#ffffff",
  6728.           blue: "#005372",
  6729.           green: "#406a00",
  6730.           red: "#840002",
  6731.           gold: "#846400",
  6732.           purple: "#270083",
  6733.           magenta: "#b3015f",
  6734.           grey: "#6f6f6f",
  6735.           dgrey: "#ffffff",
  6736.           white: "#000000",
  6737.           guiblack: "#ffffff",
  6738.           paletteSize: 10,
  6739.           border: 1
  6740.         },
  6741.         candy: {
  6742.           teal: "#7ADBBC",
  6743.           lgreen: "#B9E87E",
  6744.           orange: "#E7896D",
  6745.           yellow: "#fff9b3",
  6746.           lavender: "#B58EFD",
  6747.           pink: "#EF99C3",
  6748.           vlgrey: "#E8EBF7",
  6749.           lgrey: "#AA9F9E",
  6750.           guiwhite: "#FFFFFF",
  6751.           black: "#808080",
  6752.           blue: "#bdedff",
  6753.           green: "#dbffa6",
  6754.           red: "#ff999b",
  6755.           gold: "#ffe185",
  6756.           purple: "#b99cff",
  6757.           magenta: "#ffa1d3",
  6758.           grey: "#A7A7AF",
  6759.           dgrey: "#726F6F",
  6760.           white: "#ffe3fa",
  6761.           guiblack: "#000000",
  6762.           paletteSize: 10,
  6763.           border: 0.55
  6764.         },
  6765.         diep: {
  6766.           teal: "#7ADBBC",
  6767.           lgreen: "#B9E87E",
  6768.           orange: "#E7896D",
  6769.           yellow: "#fff9b3",
  6770.           lavender: "#768dfc",
  6771.           pink: "#f177dd",
  6772.           vlgrey: "#E8EBF7",
  6773.           lgrey: "#cdcdcd",
  6774.           guiwhite: "#FFFFFF",
  6775.           black: "#3c3c3c",
  6776.           blue: "#00b2e1",
  6777.           green: "#00e16e",
  6778.           red: "#f14e54",
  6779.           gold: "#ffe95e",
  6780.           purple: "#768dfc",
  6781.           magenta: "#bf7ff5",
  6782.           grey: "#999999",
  6783.           dgrey: "#b8b8b8",
  6784.           white: "#cdcdcd",
  6785.           guiblack: "#000000",
  6786.           paletteSize: 10,
  6787.           border: 0.5
  6788.         },
  6789.         badlands: {
  6790.           teal: "#F9CB9C",
  6791.           lgreen: "#F1C232",
  6792.           orange: "#38761D",
  6793.           yellow: "#E69138",
  6794.           lavender: "#B7B7B7",
  6795.           pink: "#78866B",
  6796.           vlgrey: "#6AA84F",
  6797.           lgrey: "#B7B7B7",
  6798.           guiwhite: "#A4C2F4",
  6799.           black: "#000000",
  6800.           blue: "#0C5A9E",
  6801.           green: "#6E8922",
  6802.           red: "#5B0000",
  6803.           gold: "#783F04",
  6804.           purple: "#591C77",
  6805.           magenta: "#20124D",
  6806.           grey: "#2F1C16",
  6807.           dgrey: "#999999",
  6808.           white: "#543517",
  6809.           guiblack: "#CFE2F3",
  6810.           paletteSize: 10,
  6811.           border: 0.4
  6812.         },
  6813.         custom: {
  6814.           teal: "#7ADBBC",
  6815.           lgreen: "#B9E87E",
  6816.           orange: "#E7896D",
  6817.           yellow: "#FDF380",
  6818.           lavender: "#B58EFD",
  6819.           pink: "#EF99C3",
  6820.           vlgrey: "#E8EBF7",
  6821.           lgrey: "#AA9F9E",
  6822.           guiwhite: "#FFFFFF",
  6823.           black: "#484848",
  6824.           blue: "#3CA4CB",
  6825.           green: "#8ABC3F",
  6826.           red: "#E03E41",
  6827.           gold: "#EFC74B",
  6828.           purple: "#8D6ADF",
  6829.           magenta: "#CC669C",
  6830.           grey: "#A7A7AF",
  6831.           dgrey: "#726F6F",
  6832.           white: "#DBDBDB",
  6833.           guiblack: "#000000",
  6834.           paletteSize: 10,
  6835.           border: 0.65
  6836.         }
  6837.       };
  6838.     }
  6839.   ]);
  6840. }.call(this);
  6841.  
Tags: chatGPT
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement