Yurio Private ++

No leak plez

질문, 리뷰하거나, 이 스크립트를 신고하세요.
// ==UserScript==
// @name         Yurio Private ++
// @version      v1
// @author       Yurio
// @match        *://*.moomoo.io/*
// @description  No leak plez
// @grant        none
// @namespace https://greasyfork.org/users/1326893
// ==/UserScript==
let a = false;
let b = document.getElementsByTagName("script");
for (let c = 0; c < b.length; c++) {
  if (b[c].src.includes("index-f3a4c1ad.js") && !a) {
    b[c].remove();
    a = true;
    break;
  }
}
document.addEventListener("keydown", function (a) {
  if (a.keyCode === 45) {
    const a = document.getElementById("gameUI");
    if (a) {
      const b = a.style.display;
      a.style.display = b === "none" ? "block" : "none";
    }
  }
});
window.addEventListener("load", function () {
  var a = document.getElementById("allianceButton");
  var b = document.getElementById("storeButton");
  if (b) {
    b.style.right = "26px";
    b.style.top = "420px";
  }
  if (a) {
    a.style.right = "26px";
    a.style.top = "479px";
  }
});
function c(a) {
  return document.getElementById(a);
}
let d = document.createElement("link");
d.rel = "stylesheet";
d.href = "https://fonts.googleapis.com/css?family=Ubuntu:700";
d.type = "text/css";
document.body.append(d);
let e = document.createElement("script");
e.src = "https://rawgit.com/kawanet/msgpack-lite/master/dist/msgpack.min.js";
document.body.append(e);
window.oncontextmenu = function () {
  return false;
};
let f = window.config;
f.clientSendRate = 9;
f.serverUpdateRate = 9;
f.deathFadeout = 0;
f.playerCapacity = 9999;
f.isSandbox = window.location.hostname == "sandbox.moomoo.io";
f.skinColors = ["#bf8f54", "#cbb091", "#896c4b", "#fadadc", "#ececec", "#c37373", "#4c4c4c", "#ecaff7", "#738cc3", "#8bc373", "#91b2db"];
f.weaponVariants = [{
  id: 0,
  src: "",
  xp: 0,
  val: 1
}, {
  id: 1,
  src: "_g",
  xp: 3000,
  val: 1.1
}, {
  id: 2,
  src: "_d",
  xp: 7000,
  val: 1.18
}, {
  id: 3,
  src: "_r",
  poison: true,
  xp: 12000,
  val: 1.18
}, {
  id: 4,
  src: "_e",
  poison: true,
  heal: true,
  xp: 24000,
  val: 1.18
}];
f.anotherVisual = true;
f.useWebGl = false;
f.resetRender = true;
function g(a) {
  return new Promise(b => {
    setTimeout(() => {
      b();
    }, a);
  });
}
let h = [];
let i;
if (typeof Storage !== "undefined") {
  i = true;
}
function j(a, b) {
  if (i) {
    localStorage.setItem(a, b);
  }
}
function k(a) {
  if (i) {
    localStorage.removeItem(a);
  }
}
function l(a) {
  if (i) {
    return localStorage.getItem(a);
  }
  return null;
}
let m = function (a, b) {
  try {
    let c = JSON.parse(l(a));
    if (typeof c === "object") {
      return b;
    } else {
      return c;
    }
  } catch (a) {
    alert("dieskid");
    return b;
  }
};
function n() {
  return {
    help: {
      desc: "Show Commands",
      action: function (a) {
        for (let b in p) {
          B("/" + b, p[b].desc, "lime", 1);
        }
      }
    },
    clear: {
      desc: "Clear Chats",
      action: function (a) {
        D();
      }
    },
    debug: {
      desc: "Debug Mod For Development",
      action: function (a) {
        Zc(ja);
        B("Debug", "Done", "#99ee99", 1);
      }
    },
    play: {
      desc: "Play Music ( /play [link] )",
      action: function (a) {
        let b = a.split(" ");
        if (b[1]) {
          let a = new Audio(b[1]);
          a.play();
        } else {
          B("Warn", "Enter Link ( /play [link] )", "#99ee99", 1);
        }
      }
    },
    "!Leave": {
      desc: "Leave Game",
      action: function (a) {
        window.leave();
      }
    }
  };
}
function o() {
  return {
    killChat: false,
    autoBuy: true,
    autoBuyEquip: true,
    autoPush: true,
    revTick: true,
    spikeTick: true,
    predictTick: true,
    autoPlace: true,
    autoReplace: true,
    antiTrap: true,
    slowOT: false,
    attackDir: false,
    showDir: false,
    autoRespawn: false
  };
}
let p = n();
let q = o();
window.removeConfigs = function () {
  for (let a in q) {
    k(a, q[a]);
  }
};
for (let a in q) {
  q[a] = m(a, q[a]);
}
window.changeMenu = function () {};
window.debug = function () {};
window.wasdMode = function () {};
window.startGrind = function () {};
window.connectFillBots = function () {};
window.destroyFillBots = function () {};
window.tryConnectBots = function () {};
window.destroyBots = function () {};
window.resBuild = function () {};
window.toggleBotsCircle = function () {};
window.toggleVisual = function () {};
window.prepareUI = function () {};
window.leave = function () {};
window.ping = 0;
class r {
  constructor(a, b) {
    this.inGame = false;
    this.lover = a + b;
    this.baby = "ae86";
    this.isBlack = 0;
    this.webSocket = undefined;
    this.checkBaby = function () {
      if (this.baby !== "ae86") {
        this.isBlack++;
      } else {
        this.isBlack--;
      }
      if (this.isBlack >= 1) {
        return "bl4cky";
      }
      return "noting for you";
    };
    this.x2 = 0;
    this.y2 = 0;
    this.chat = "Imagine playing this badass game XDDDDD";
    this.summon = function (a) {
      this.x2 = a.x;
      this.y2 = a.y;
      this.chat = a.name + " ur so bad XDDDD";
    };
    this.commands = function (a) {
      if (a == "rv3link") {
        window.open("https://florr.io/");
      }
      if (a == "woah") {
        window.open("https://www.youtube.com/watch?v=MO0AGukzj6M");
      }
      return a;
    };
    this.dayte = "11yearold";
    this.memeganoob = "69yearold";
    this.startDayteSpawn = function (a) {
      let b = setInterval(() => {
        this.x2 = a.x + 20;
        this.y2 = a.y - 20;
        this.chat = "UR SO BAD LOL";
        if (a.name == "ae86") {
          this.chat = "omg ae86 go run";
          setTimeout(() => {
            this.inGame = false;
            clearInterval(b);
          }, 1000);
        }
      }, 1234);
    };
    this.AntiChickenModV69420 = function (a) {
      return "!c!dc user " + a.name;
    };
  }
}
;
class s {
  constructor(a) {
    this.element = a;
  }
  add(a) {
    if (!this.element) {
      return undefined;
    }
    this.element.innerHTML += a;
  }
  newLine(a) {
    let b = "<br>";
    if (a > 0) {
      b = "";
      for (let c = 0; c < a; c++) {
        b += "<br>";
      }
    }
    this.add(b);
  }
  checkBox(a) {
    let b = "<input type = \"checkbox\"";
    if (a.id) {
      b += " id = " + a.id;
    }
    if (a.style) {
      b += " style = " + a.style.replaceAll(" ", "");
    }
    if (a.class) {
      b += " class = " + a.class;
    }
    if (a.checked) {
      b += " checked";
    }
    if (a.onclick) {
      b += " onclick = " + a.onclick;
    }
    b += ">";
    this.add(b);
  }
  text(a) {
    let b = "<input type = \"text\"";
    if (a.id) {
      b += " id = " + a.id;
    }
    if (a.style) {
      b += " style = " + a.style.replaceAll(" ", "");
    }
    if (a.class) {
      b += " class = " + a.class;
    }
    if (a.size) {
      b += " size = " + a.size;
    }
    if (a.maxLength) {
      b += " maxLength = " + a.maxLength;
    }
    if (a.value) {
      b += " value = " + a.value;
    }
    if (a.placeHolder) {
      b += " placeHolder = " + a.placeHolder.replaceAll(" ", "&nbsp;");
    }
    b += ">";
    this.add(b);
  }
  select(a) {
    let b = "<select";
    if (a.id) {
      b += " id = " + a.id;
    }
    if (a.style) {
      b += " style = " + a.style.replaceAll(" ", "");
    }
    if (a.class) {
      b += " class = " + a.class;
    }
    b += ">";
    for (let c in a.option) {
      b += "<option value = " + a.option[c].id;
      if (a.option[c].selected) {
        b += " selected";
      }
      b += ">" + c + "</option>";
    }
    b += "</select>";
    this.add(b);
  }
  button(a) {
    let b = "<button";
    if (a.id) {
      b += " id = " + a.id;
    }
    if (a.style) {
      b += " style = " + a.style.replaceAll(" ", "");
    }
    if (a.class) {
      b += " class = " + a.class;
    }
    if (a.onclick) {
      b += " onclick = " + a.onclick;
    }
    b += ">";
    if (a.innerHTML) {
      b += a.innerHTML;
    }
    b += "</button>";
    this.add(b);
  }
  selectMenu(a) {
    let b = "<select";
    if (!a.id) {
      alert("please put id skid");
      return;
    }
    window[a.id + "Func"] = function () {};
    if (a.id) {
      b += " id = " + a.id;
    }
    if (a.style) {
      b += " style = " + a.style.replaceAll(" ", "");
    }
    if (a.class) {
      b += " class = " + a.class;
    }
    b += " onchange = window." + (a.id + "Func") + "()";
    b += ">";
    let d;
    let e = 0;
    for (let c in a.menu) {
      b += "<option value = " + ("option_" + c) + " id = " + ("O_" + c);
      if (a.menu[c]) {
        b += " checked";
      }
      b += " style = \"color: " + (a.menu[c] ? "#000" : "#fff") + "; background: " + (a.menu[c] ? "#8ecc51" : "#cc5151") + ";\">" + c + "</option>";
      e++;
    }
    b += "</select>";
    this.add(b);
    e = 0;
    for (let b in a.menu) {
      window[b + "Func"] = function () {
        a.menu[b] = c("check_" + b).checked ? true : false;
        j(b, a.menu[b]);
        c("O_" + b).style.color = a.menu[b] ? "#000" : "#fff";
        c("O_" + b).style.background = a.menu[b] ? "#8ecc51" : "#cc5151";
      };
      this.checkBox({
        id: "check_" + b,
        style: "display: " + (e == 0 ? "inline-block" : "none") + ";",
        class: "checkB",
        onclick: "window." + (b + "Func") + "()",
        checked: a.menu[b]
      });
      e++;
    }
    d = "check_" + c(a.id).value.split("_")[1];
    window[a.id + "Func"] = function () {
      c(d).style.display = "none";
      d = "check_" + c(a.id).value.split("_")[1];
      c(d).style.display = "inline-block";
    };
  }
}
;
class t {
  constructor() {
    this.element = null;
    this.action = null;
    this.divElement = null;
    this.startDiv = function (a, b) {
      let c = document.createElement("div");
      if (a.id) {
        c.id = a.id;
      }
      if (a.style) {
        c.style = a.style;
      }
      if (a.class) {
        c.className = a.class;
      }
      this.element.appendChild(c);
      this.divElement = c;
      let d = new s(c);
      if (typeof b == "function") {
        b(d);
      }
    };
    this.addDiv = function (a, b) {
      let d = document.createElement("div");
      if (a.id) {
        d.id = a.id;
      }
      if (a.style) {
        d.style = a.style;
      }
      if (a.class) {
        d.className = a.class;
      }
      if (a.appendID) {
        c(a.appendID).appendChild(d);
      }
      this.divElement = d;
      let e = new s(d);
      if (typeof b == "function") {
        b(e);
      }
    };
  }
  set(a) {
    this.element = c(a);
    this.action = new s(this.element);
  }
  resetHTML(a) {
    if (a) {
      this.element.innerHTML = "";
    } else {
      this.element.innerHTML = "";
    }
  }
  setStyle(a) {
    this.element.style = a;
  }
  setCSS(a) {
    this.action.add("<style>" + a + "</style>");
  }
}
;
let u = new t();
let v = document.createElement("div");
v.id = "menuDiv";
v.draggable = true;
v.addEventListener("dragstart", function (a) {
  a.dataTransfer.setData("text/plain", "");
});
document.addEventListener("dragover", function (a) {
  v.style.left = a.clientX - v.offsetWidth / 2 + "px";
  v.style.top = a.clientY - v.offsetHeight / 2 + "px";
});
document.body.appendChild(v);
u.set("menuDiv");
u.setStyle("\n            position: absolute;\n            left: 20px;\n            top: 20px;\n            ");
u.resetHTML();
u.setCSS("\n            .menuClass{\n                color: #fff;\n                font-size: 31px;\n                text-align: left;\n                padding: 10px;\n                padding-top: 7px;\n                padding-bottom: 5px;\n                width: 300px;\n                background-color: rgba(0, 0, 0, 0.25);\n                -webkit-border-radius: 4px;\n                -moz-border-radius: 4px;\n                border-radius: 4px;\n            }\n            .menuC {\n                display: none;\n                font-family: \"Hammersmith One\";\n                font-size: 12px;\n                max-height: 180px;\n                overflow-y: scroll;\n                -webkit-touch-callout: none;\n                -webkit-user-select: none;\n                -khtml-user-select: none;\n                -moz-user-select: none;\n                -ms-user-select: none;\n                user-select: none;\n            }\n            .menuB {\n                text-align: center;\n                background-color: rgb(25, 25, 25);\n                color: #fff;\n                -webkit-border-radius: 4px;\n                -moz-border-radius: 4px;\n                border-radius: 4px;\n                border: 2px solid #000;\n                cursor: pointer;\n            }\n            .menuB:hover {\n                border: 2px solid #fff;\n            }\n            .menuB:active {\n                color: rgb(25, 25, 25);\n                background-color: rgb(200, 200, 200);\n            }\n            .customText {\n                color: #000;\n                -webkit-border-radius: 4px;\n                -moz-border-radius: 4px;\n                border-radius: 4px;\n                border: 2px solid #000;\n            }\n            .customText:focus {\n                background-color: yellow;\n            }\n            .checkB {\n                position: relative;\n                top: 2px;\n                accent-color: #888;\n                cursor: pointer;\n            }\n            .Cselect {\n                -webkit-border-radius: 4px;\n                -moz-border-radius: 4px;\n                border-radius: 4px;\n                background-color: rgb(75, 75, 75);\n                color: #fff;\n                border: 1px solid #000;\n            }\n            #menuChanger {\n                position: absolute;\n                right: 10px;\n                top: 10px;\n                background-color: rgba(0, 0, 0, 0);\n                color: #fff;\n                border: none;\n                cursor: pointer;\n            }\n            #menuChanger:hover {\n                color: #000;\n            }\n            ::-webkit-scrollbar {\n                width: 10px;\n            }\n            ::-webkit-scrollbar-track {\n                opacity: 0;\n            }\n            ::-webkit-scrollbar-thumb {\n                background-color: rgb(25, 25, 25);\n                -webkit-border-radius: 4px;\n                -moz-border-radius: 4px;\n                border-radius: 4px;\n            }\n            ::-webkit-scrollbar-thumb:active {\n                background-color: rgb(230, 230, 230);\n            }\n            ");
u.startDiv({
  id: "menuHeadLine",
  class: "menuClass"
}, a => {
  a.add("YurioExclusive");
  a.button({
    id: "menuChanger",
    class: "material-icons",
    innerHTML: "sync",
    onclick: "window.changeMenu()"
  });
  u.addDiv({
    id: "menuButtons",
    style: "display: block; overflow-y: visible;",
    class: "menuC",
    appendID: "menuHeadLine"
  }, a => {
    a.button({
      class: "menuB",
      innerHTML: "Debug",
      onclick: "window.debug()"
    });
  });
  u.addDiv({
    id: "menuMain",
    style: "display: block",
    class: "menuC",
    appendID: "menuHeadLine"
  }, a => {
    a.button({
      class: "menuB",
      innerHTML: "Toggle Wasd Mode",
      onclick: "window.wasdMode()"
    });
    a.newLine();
    a.add("Weapon Grinder: ");
    a.checkBox({
      id: "weaponGrind",
      class: "checkB",
      onclick: "window.startGrind()"
    });
    a.newLine(2);
    u.addDiv({
      style: "font-size: 20px; color: #99ee99;",
      appendID: "menuMain"
    }, a => {
      a.add("Developing Settings:");
    });
    a.add("AntiPush(ass):");
    a.checkBox({
      id: "antipush",
      class: "checkB",
      checked: true
    });
    a.newLine();
    a.add("New Healing Beta:");
    a.checkBox({
      id: "healingBeta",
      class: "checkB",
      checked: true
    });
    a.newLine();
  });
  u.addDiv({
    id: "menuConfig",
    class: "menuC",
    appendID: "menuHeadLine"
  }, a => {
    a.add("AutoPlacer Placement Tick: ");
    a.text({
      id: "autoPlaceTick",
      class: "customText",
      value: "2",
      size: "2em",
      maxLength: "1"
    });
    a.newLine();
    a.add("AutoPlaceType: ");
    a.select({
      id: "Autoplacetype",
      class: "Cselect",
      option: {
        Smooth: {
          id: "smoothplace",
          selected: true
        },
        Spammy: {
          id: "spammyplace"
        }
      }
    });
    a.newLine();
    a.add("Configs: ");
    a.selectMenu({
      id: "configsChanger",
      class: "Cselect",
      menu: q
    });
    a.newLine();
    a.add("InstaKill Type: ");
    a.select({
      id: "instaType",
      class: "Cselect",
      option: {
        OneShot: {
          id: "oneShot",
          selected: true
        },
        Spammer: {
          id: "spammer"
        }
      }
    });
    a.newLine();
    a.add("AntiBull Type: ");
    a.select({
      id: "antiBullType",
      class: "Cselect",
      option: {
        "Disable AntiBull": {
          id: "noab",
          selected: true
        },
        "When Reloaded": {
          id: "abreload"
        },
        "Primary Reloaded": {
          id: "abalway"
        }
      }
    });
    a.newLine();
    a.add("Backup Nobull Insta: ");
    a.checkBox({
      id: "backupNobull",
      class: "checkB",
      checked: true
    });
    a.newLine();
    a.add("Turret Gear Combat Assistance: ");
    a.checkBox({
      id: "turretCombat",
      class: "checkB"
    });
    a.newLine();
    a.add("Safe AntiSpikeTick: ");
    a.checkBox({
      id: "safeAntiSpikeTick",
      class: "checkB",
      checked: true
    });
    a.newLine();
  });
  u.addDiv({
    id: "menuOther",
    class: "menuC",
    appendID: "menuHeadLine"
  }, a => {
    a.button({
      class: "menuB",
      innerHTML: "Connect Bots",
      onclick: "window.tryConnectBots()"
    });
    a.button({
      class: "menuB",
      innerHTML: "Disconnect Bots",
      onclick: "window.destroyBots()"
    });
    a.newLine();
    a.button({
      class: "menuB",
      innerHTML: "Connect FBots",
      onclick: "window.connectFillBots()"
    });
    a.button({
      class: "menuB",
      innerHTML: "Disconnect FBots",
      onclick: "window.destroyFillBots()"
    });
    a.newLine();
    a.button({
      class: "menuB",
      innerHTML: "Reset Break Objects",
      onclick: "window.resBuild()"
    });
    a.newLine();
    a.add("Break Objects Range: ");
    a.text({
      id: "breakRange",
      class: "customText",
      value: "700",
      size: "3em",
      maxLength: "4"
    });
    a.newLine();
    a.add("Predict Movement Type: ");
    a.select({
      id: "predictType",
      class: "Cselect",
      option: {
        "Disable Render": {
          id: "disableRender",
          selected: true
        },
        "X/Y and 2": {
          id: "pre2"
        },
        "X/Y and 3": {
          id: "pre3"
        }
      }
    });
    a.newLine();
    a.add("Render Placers: ");
    a.checkBox({
      id: "placeVis",
      class: "checkB"
    });
    a.newLine();
    a.add("Bot Mode: ");
    a.select({
      id: "mode",
      class: "Cselect",
      option: {
        "Clear Building": {
          id: "clear",
          selected: true
        },
        Sync: {
          id: "zync"
        },
        Search: {
          id: "zearch"
        },
        "Clear Everything": {
          id: "fuckemup"
        },
        Flex: {
          id: "flex"
        }
      }
    });
    a.newLine(2);
    a.button({
      class: "menuB",
      innerHTML: "Toggle Fbots Circle",
      onclick: "window.toggleBotsCircle()"
    });
    a.newLine();
    a.add("Circle Rad: ");
    a.text({
      id: "circleRad",
      class: "customText",
      value: "200",
      size: "3em",
      maxLength: "4"
    });
    a.newLine();
    a.add("Rad Speed: ");
    a.text({
      id: "radSpeed",
      class: "customText",
      value: "0.1",
      size: "2em",
      maxLength: "3"
    });
    a.newLine();
    a.add("Bot Zetup Type: ");
    a.select({
      id: "setup",
      class: "Cselect",
      option: {
        "Dagger Musket": {
          id: "dm",
          selected: true
        },
        "Katana Hammer": {
          id: "kh"
        },
        "Dagger Repeater-Crossbow": {
          id: "dr"
        },
        "Zhort-Zword Muzket": {
          id: "zd"
        }
      }
    });
    a.newLine(2);
    a.add("Cross World: ");
    a.checkBox({
      id: "funni",
      class: "checkB"
    });
    a.newLine();
    a.button({
      class: "menuB",
      innerHTML: "Toggle Another Visual",
      onclick: "window.toggleVisual()"
    });
    a.newLine();
  });
});
let w = document.createElement("div");
w.id = "menuChatDiv";
document.body.appendChild(w);
u.set("menuChatDiv");
u.setStyle("\n            position: absolute;\n            display: none;\n            left: 0px;\n            top: 25px;\n          //  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.65);\n            ");
u.resetHTML();
u.setCSS("\n                    .chDiv {\n    color: #fff;\n    padding: 10px;\n    width: 357px;\n    height: 217px;\n    background-color: rgba(0, 0, 0, 0.2);\n    font-family: \"HammerSmith One\", monospace;\n //   border-radius: 15px;\n//    box-shadow: black 1px 2px 19px;\n//backdrop-filter: blur(3px);\n\n}\n.chMainDiv {\n    font-family: \"Ubuntu\";\n    font-size: 16px;\n    max-height: 215px;\n    overflow-y: scroll;\n    scrollbar-width: thin;\n    scrollbar-color: rgba(0, 0, 0, 0.5) rgba(0, 0, 0, 0.1);\n    -webkit-touch-callout: none;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    overflow-x: hidden;\n}\n.chMainDiv::-webkit-scrollbar {\n    width: 8px;\n}\n.chMainDiv::-webkit-scrollbar-thumb {\n    background-color: rgba(0, 0, 0, 0.5);\n}\n.chMainDiv::-webkit-scrollbar-thumb:hover {\n    background-color: rgba(0, 0, 0, 0.7);\n}\n.chMainBox {\ndisplay:none;\n     position: absolute;\n    left: 10px;\n    bottom: 10px;\n    width: 380px;\n    height: 25px;\n    background-color: rgba(255, 255, 255, 0.1);\n    border-radius: 5px;\n    color: rgba(255, 255, 255, 0.75);\n    font-family: \"HammerSmith One\";\n    font-size: 12px;\n}\n            ");
u.startDiv({
  id: "mChDiv",
  class: "chDiv"
}, a => {
  u.addDiv({
    id: "mChMain",
    class: "chMainDiv",
    appendID: "mChDiv"
  }, a => {});
  a.text({
    id: "mChBox",
    class: "chMainBox"
  });
});
let x = c("mChMain");
let y = c("mChBox");
let z = false;
let A = 0;
y.value = "";
y.addEventListener("focus", () => {
  z = true;
});
y.addEventListener("blur", () => {
  z = false;
});
function B(a, b, c, d) {
  u.set("menuChatDiv");
  c = c || "white";
  let e = new Date();
  let f = e.getMinutes();
  let g = e.getHours();
  let h = "";
  if (!d) {
    h += (g < 10 ? "0" : "") + g + ":" + ((f < 10 ? "0" : "") + f);
  }
  if (a) {
    h += "" + ((!d ? " - " : "") + a);
  }
  if (b) {
    h += (a ? ": " : !d ? " - " : "") + b + "\n";
  }
  u.addDiv({
    id: "menuChDisp",
    style: "color: " + c,
    appendID: "mChMain"
  }, a => {
    a.add(h);
  });
  x.scrollTop = x.scrollHeight;
  A++;
}
function C(a, b, c, d) {
  u.set("menuChatDiv");
  c = c || "white";
  let e = new Date();
  let f = "";
  if (b) {
    f += (a ? ": " : !d ? "" : "") + b + "\n";
  }
  u.addDiv({
    id: "menuChDisp",
    style: "color: " + c,
    appendID: "mChMain"
  }, a => {
    a.add(f);
  });
  x.scrollTop = x.scrollHeight;
  A++;
}
function D() {
  x.innerHTML = "";
  A = 0;
  B(null, "Chat '/help' for a list of chat commands.", "white", 1);
}
D();
let E = 0;
let F = ["menuMain", "menuConfig", "menuOther"];
window.changeMenu = function () {
  c(F[E % F.length]).style.display = "none";
  E++;
  c(F[E % F.length]).style.display = "block";
};
let G = document.createElement("div");
G.id = "status";
c("gameUI").appendChild(G);
u.set("status");
u.setStyle("\n            display: block;\n            position: absolute;\n            color: #ddd;\n            font: 15px Hammersmith One;\n            bottom: 215px;\n            left: 20px;\n            ");
u.resetHTML();
u.setCSS("\n            .sizing {\n                font-size: 15px;\n            }\n            .mod {\n                font-size: 15px;\n                display: inline-block;\n            }\n            ");
u.startDiv({
  id: "uehmod",
  class: "sizing"
}, a => {
  a.add("Ping: ");
  u.addDiv({
    id: "pingFps",
    class: "mod",
    appendID: "uehmod"
  }, a => {
    a.add("None");
  });
  a.newLine();
  a.add("Packet: ");
  u.addDiv({
    id: "packetStatus",
    class: "mod",
    appendID: "uehmod"
  }, a => {
    a.add("None");
  });
});
let H = false;
let I = undefined;
let J = undefined;
let K = false;
let L = 0;
let M = 120;
let N = 1000;
let O = {
  sec: false
};
let P = {
  tick: 0,
  tickQueue: [],
  tickBase: function (a, b) {
    if (this.tickQueue[this.tick + b]) {
      this.tickQueue[this.tick + b].push(a);
    } else {
      this.tickQueue[this.tick + b] = [a];
    }
  },
  tickRate: 1000 / f.serverUpdateRate,
  tickSpeed: 0,
  lastTick: performance.now()
};
let Q = false;
let R = {
  last: 0,
  time: 0,
  ltime: 0
};
let S = undefined;
let T = ["cc", 1, "__proto__"];
WebSocket.prototype.nsend = WebSocket.prototype.send;
WebSocket.prototype.send = function (a) {
  if (!I) {
    I = this;
    I.addEventListener("message", function (a) {
      X(a);
    });
    I.addEventListener("close", a => {
      if (a.code == 4001) {
        window.location.reload();
      }
    });
  }
  if (I == this) {
    Q = false;
    let b = new Uint8Array(a);
    let c = window.msgpack.decode(b);
    let d = c[0];
    b = c[1];
    if (d == "6") {
      if (b[0]) {
        let a = ["cunt", "whore", "fuck", "shit", "faggot", "nigger", "nigga", "dick", "vagina", "minge", "cock", "rape", "cum", "sex", "tits", "penis", "clit", "pussy", "meatcurtain", "jizz", "prune", "douche", "wanker", "damn", "bitch", "dick", "fag", "bastard"];
        let c;
        a.forEach(a => {
          if (b[0].indexOf(a) > -1) {
            c = "";
            for (let b = 0; b < a.length; ++b) {
              if (b == 1) {
                c += String.fromCharCode(0);
              }
              c += a[b];
            }
            let d = new RegExp(a, "g");
            b[0] = b[0].replace(d, c);
          }
        });
        b[0] = b[0].slice(0, 30);
      }
    } else if (d == "L") {
      b[0] = b[0] + String.fromCharCode(0).repeat(7);
      b[0] = b[0].slice(0, 7);
    } else if (d == "M") {
      b[0].name = b[0].name == "" ? "unknown" : b[0].name;
      b[0].moofoll = true;
      b[0].skin = b[0].skin == 10 ? "__proto__" : b[0].skin;
      T = [b[0].name, b[0].moofoll, b[0].skin];
    } else if (d == "D") {
      if (pa.lastDir == b[0] || [null, undefined].includes(b[0])) {
        Q = true;
      } else {
        pa.lastDir = b[0];
      }
    } else if (d == "d") {
      if (!b[2]) {
        Q = true;
      } else if (![null, undefined].includes(b[1])) {
        pa.lastDir = b[1];
      }
    } else if (d == "K") {
      if (!b[1]) {
        Q = true;
      }
    } else if (d == "S") {
      nc.wait = !nc.wait;
      Q = true;
    } else if (d == "a") {
      if (b[1]) {
        if (ja.moveDir == b[0]) {
          Q = true;
        }
        ja.moveDir = b[0];
      } else {
        Q = true;
      }
    }
    if (!Q) {
      let a = window.msgpack.encode([d, b]);
      this.nsend(a);
      if (!O.sec) {
        O.sec = true;
        setTimeout(() => {
          O.sec = false;
          L = 0;
        }, N);
      }
      L++;
    }
  } else {
    this.nsend(a);
  }
};
function U(a) {
  let b = Array.prototype.slice.call(arguments, 1);
  let c = window.msgpack.encode([a, b]);
  I.send(c);
}
function V(a) {
  let b = Array.prototype.slice.call(arguments, 1);
  let c = window.msgpack.encode([a, b]);
  I.nsend(c);
}
window.leave = function () {
  V("kys", {
    "frvr is so bad": true,
    "sidney is too good": true,
    "dev are too weak": true
  });
};
let W = {
  send: U
};
function X(a) {
  let b = new Uint8Array(a.data);
  let c = window.msgpack.decode(b);
  let d = c[0];
  b = c[1];
  let e = {
    A: $c,
    C: _c,
    D: ad,
    E: bd,
    a: od,
    G: rd,
    H: sd,
    I: td,
    J: ud,
    K: vd,
    L: wd,
    M: xd,
    N: yd,
    O: cd,
    P: dd,
    Q: hd,
    R: id,
    S: ed,
    T: fd,
    U: gd,
    V: zd,
    X: Ad,
    2: Id,
    3: Jd,
    4: Kd,
    5: Ld,
    6: Md,
    7: Nd,
    8: Od,
    9: Ye,
    0: sb
  };
  if (d == "io-init") {
    J = b[0];
  } else if (e[d]) {
    e[d].apply(undefined, b);
  }
}
Math.lerpAngle = function (a, b, c) {
  let d = Math.abs(b - a);
  if (d > Math.PI) {
    if (a > b) {
      b += Math.PI * 2;
    } else {
      a += Math.PI * 2;
    }
  }
  let e = b + (a - b) * c;
  if (e >= 0 && e <= Math.PI * 2) {
    return e;
  }
  return e % (Math.PI * 2);
};
CanvasRenderingContext2D.prototype.roundRect = function (a, b, c, d, e) {
  if (c < e * 2) {
    e = c / 2;
  }
  if (d < e * 2) {
    e = d / 2;
  }
  if (e < 0) {
    e = 0;
  }
  this.beginPath();
  this.moveTo(a + e, b);
  this.arcTo(a + c, b, a + c, b + d, e);
  this.arcTo(a + c, b + d, a, b + d, e);
  this.arcTo(a, b + d, a, b, e);
  this.arcTo(a, b, a + c, b, e);
  this.closePath();
  return this;
};
function Y() {
  ib = {};
  W.send("e");
}
let Z = [];
let _ = {
  tick: 0,
  delay: 0,
  time: [],
  manage: []
};
let aa = [];
let ba = [];
let ca = [];
let da = [];
let ea = [];
let fa = [];
let ga = [];
let ha = [];
let ia = [];
let ja;
let ka;
let la;
let ma = [];
let na = [];
let oa = [];
let pa = {
  reloaded: false,
  waitHit: 0,
  autoAim: false,
  revAim: false,
  ageInsta: true,
  reSync: false,
  bullTick: 0,
  anti0Tick: 0,
  antiSync: false,
  safePrimary: function (a) {
    return [0, 8].includes(a.primaryIndex);
  },
  safeSecondary: function (a) {
    return [10, 11, 14].includes(a.secondaryIndex);
  },
  lastDir: 0,
  autoPush: false,
  pushData: {}
};
function qa(a, b) {
  return a.find(a => a.id == b);
}
function ra(a, b) {
  return a.find(a => a.sid == b);
}
function sa(a) {
  return qa(ba, a);
}
function ta(a) {
  return ra(ba, a);
}
function ua(a) {
  return ra(aa, a);
}
function va(a) {
  return ra(ea, a);
}
function wa(a) {
  return ra(ea, a);
}
let xa = c("adCard");
xa.remove();
let ya = c("promoImgHolder");
ya.remove();
let za = c("chatButton");
za.remove();
let Aa = c("gameCanvas");
let Ba = Aa.getContext("2d");
let Ca = c("mapDisplay");
let Da = Ca.getContext("2d");
Ca.width = 300;
Ca.height = 300;
let Ea = c("storeMenu");
let Fa = c("storeHolder");
let Ga = c("upgradeHolder");
let Ha = c("upgradeCounter");
let Ia = c("chatBox");
Ia.autocomplete = "off";
Ia.style.textAlign = "center";
Ia.style.width = "18em";
let Ja = c("chatHolder");
let Ka = c("actionBar");
let La = c("leaderboardData");
let Ma = c("itemInfoHolder");
let Na = c("menuCardHolder");
let Oa = c("mainMenu");
let Pa = c("diedText");
let Qa;
let Ra;
let Sa = f.maxScreenWidth;
let Ta = f.maxScreenHeight;
let Ua = 1;
let Va;
let Wa;
let Xa = performance.now();
let Ya;
let Za;
let $a;
let _a = 0;
let ab = 0;
let bb = c("allianceMenu");
let cb = 1;
let db = 0;
let eb = "#525252";
let fb = "#3d3f42";
let gb = 5.5;
let hb = true;
let ib = {};
let jb = {
  87: [0, -1],
  38: [0, -1],
  83: [0, 1],
  40: [0, 1],
  65: [-1, 0],
  37: [-1, 0],
  68: [1, 0],
  39: [1, 0]
};
let kb = 0;
let lb = false;
let mb = {};
let nb = {
  place: 0,
  placeSpawnPads: 0
};
let ob;
let pb = [];
let qb = true;
window.onblur = function () {
  qb = false;
};
window.onfocus = function () {
  qb = true;
  if (ja && ja.alive) {}
};
let rb = {
  avg: 0,
  max: 0,
  min: 0,
  delay: 0
};
function sb() {
  let a = window.pingTime;
  const b = document.getElementById("pingDisplay");
  b.innerText = "Ping: " + a + " ms`";
  if (a > rb.max || isNaN(rb.max)) {
    rb.max = a;
  }
  if (a < rb.min || isNaN(rb.min)) {
    rb.min = a;
  }
}
let tb = [];
class ub {
  constructor() {
    let a = Math.abs;
    let b = Math.cos;
    let c = Math.sin;
    let d = Math.pow;
    let e = Math.sqrt;
    let f = Math.atan2;
    let g = Math.PI;
    let h = this;
    this.round = function (a, b) {
      return Math.round(a * b) / b;
    };
    this.toRad = function (a) {
      return a * (g / 180);
    };
    this.toAng = function (a) {
      return a / (g / 180);
    };
    this.randInt = function (a, b) {
      return Math.floor(Math.random() * (b - a + 1)) + a;
    };
    this.randFloat = function (a, b) {
      return Math.random() * (b - a + 1) + a;
    };
    this.lerp = function (a, b, c) {
      return a + (b - a) * c;
    };
    this.decel = function (a, b) {
      if (a > 0) {
        a = Math.max(0, a - b);
      } else if (a < 0) {
        a = Math.min(0, a + b);
      }
      return a;
    };
    this.getDistance = function (a, b, c, d) {
      return e((c -= a) * c + (d -= b) * d);
    };
    this.getDist = function (a, b, c, d) {
      let f = {
        x: c == 0 ? a.x : c == 1 ? a.x1 : c == 2 ? a.x2 : c == 3 && a.x3,
        y: c == 0 ? a.y : c == 1 ? a.y1 : c == 2 ? a.y2 : c == 3 && a.y3
      };
      let g = {
        x: d == 0 ? b.x : d == 1 ? b.x1 : d == 2 ? b.x2 : d == 3 && b.x3,
        y: d == 0 ? b.y : d == 1 ? b.y1 : d == 2 ? b.y2 : d == 3 && b.y3
      };
      return e((g.x -= f.x) * g.x + (g.y -= f.y) * g.y);
    };
    this.getDirection = function (a, b, c, d) {
      return f(b - d, a - c);
    };
    this.getDirect = function (a, b, c, d) {
      let e = {
        x: c == 0 ? a.x : c == 1 ? a.x1 : c == 2 ? a.x2 : c == 3 && a.x3,
        y: c == 0 ? a.y : c == 1 ? a.y1 : c == 2 ? a.y2 : c == 3 && a.y3
      };
      let g = {
        x: d == 0 ? b.x : d == 1 ? b.x1 : d == 2 ? b.x2 : d == 3 && b.x3,
        y: d == 0 ? b.y : d == 1 ? b.y1 : d == 2 ? b.y2 : d == 3 && b.y3
      };
      return f(e.y - g.y, e.x - g.x);
    };
    this.getAngleDist = function (b, c) {
      let d = a(c - b) % (g * 2);
      if (d > g) {
        return g * 2 - d;
      } else {
        return d;
      }
    };
    this.isNumber = function (a) {
      return typeof a == "number" && !isNaN(a) && isFinite(a);
    };
    this.isString = function (a) {
      return a && typeof a == "string";
    };
    this.kFormat = function (a) {
      if (a > 999) {
        return (a / 1000).toFixed(1) + "k";
      } else {
        return a;
      }
    };
    this.sFormat = function (a) {
      let b = [{
        num: 1000,
        string: "k"
      }, {
        num: 1000000,
        string: "m"
      }, {
        num: 1000000000,
        string: "b"
      }, {
        num: 1000000000000,
        string: "q"
      }].reverse();
      let c = b.find(b => a >= b.num);
      if (!c) {
        return a;
      }
      return (a / c.num).toFixed(1) + c.string;
    };
    this.capitalizeFirst = function (a) {
      return a.charAt(0).toUpperCase() + a.slice(1);
    };
    this.fixTo = function (a, b) {
      return parseFloat(a.toFixed(b));
    };
    this.sortByPoints = function (a, b) {
      return parseFloat(b.points) - parseFloat(a.points);
    };
    this.lineInRect = function (a, b, c, d, e, f, g, h) {
      let i = e;
      let j = g;
      if (e > g) {
        i = g;
        j = e;
      }
      if (j > c) {
        j = c;
      }
      if (i < a) {
        i = a;
      }
      if (i > j) {
        return false;
      }
      let k = f;
      let l = h;
      let m = g - e;
      if (Math.abs(m) > 1e-7) {
        let a = (h - f) / m;
        let b = f - a * e;
        k = a * i + b;
        l = a * j + b;
      }
      if (k > l) {
        let a = l;
        l = k;
        k = a;
      }
      if (l > d) {
        l = d;
      }
      if (k < b) {
        k = b;
      }
      if (k > l) {
        return false;
      }
      return true;
    };
    this.containsPoint = function (a, b, c) {
      let d = a.getBoundingClientRect();
      let e = d.left + window.scrollX;
      let f = d.top + window.scrollY;
      let g = d.width;
      let h = d.height;
      let i = b > e && b < e + g;
      let j = c > f && c < f + h;
      return i && j;
    };
    this.mousifyTouchEvent = function (a) {
      let b = a.changedTouches[0];
      a.screenX = b.screenX;
      a.screenY = b.screenY;
      a.clientX = b.clientX;
      a.clientY = b.clientY;
      a.pageX = b.pageX;
      a.pageY = b.pageY;
    };
    this.hookTouchEvents = function (a, b) {
      let c = !b;
      let d = false;
      let e = false;
      a.addEventListener("touchstart", this.checkTrusted(f), e);
      a.addEventListener("touchmove", this.checkTrusted(g), e);
      a.addEventListener("touchend", this.checkTrusted(i), e);
      a.addEventListener("touchcancel", this.checkTrusted(i), e);
      a.addEventListener("touchleave", this.checkTrusted(i), e);
      function f(b) {
        h.mousifyTouchEvent(b);
        window.setUsingTouch(true);
        if (c) {
          b.preventDefault();
          b.stopPropagation();
        }
        if (a.onmouseover) {
          a.onmouseover(b);
        }
        d = true;
      }
      function g(b) {
        h.mousifyTouchEvent(b);
        window.setUsingTouch(true);
        if (c) {
          b.preventDefault();
          b.stopPropagation();
        }
        if (h.containsPoint(a, b.pageX, b.pageY)) {
          if (!d) {
            if (a.onmouseover) {
              a.onmouseover(b);
            }
            d = true;
          }
        } else if (d) {
          if (a.onmouseout) {
            a.onmouseout(b);
          }
          d = false;
        }
      }
      function i(b) {
        h.mousifyTouchEvent(b);
        window.setUsingTouch(true);
        if (c) {
          b.preventDefault();
          b.stopPropagation();
        }
        if (d) {
          if (a.onclick) {
            a.onclick(b);
          }
          if (a.onmouseout) {
            a.onmouseout(b);
          }
          d = false;
        }
      }
    };
    this.removeAllChildren = function (a) {
      while (a.hasChildNodes()) {
        a.removeChild(a.lastChild);
      }
    };
    this.generateElement = function (a) {
      let b = document.createElement(a.tag || "div");
      function c(c, d) {
        if (a[c]) {
          b[d] = a[c];
        }
      }
      c("text", "textContent");
      c("html", "innerHTML");
      c("class", "className");
      for (let c in a) {
        switch (c) {
          case "tag":
          case "text":
          case "html":
          case "class":
          case "style":
          case "hookTouch":
          case "parent":
          case "children":
            continue;
          default:
            break;
        }
        b[c] = a[c];
      }
      if (b.onclick) {
        b.onclick = this.checkTrusted(b.onclick);
      }
      if (b.onmouseover) {
        b.onmouseover = this.checkTrusted(b.onmouseover);
      }
      if (b.onmouseout) {
        b.onmouseout = this.checkTrusted(b.onmouseout);
      }
      if (a.style) {
        b.style.cssText = a.style;
      }
      if (a.hookTouch) {
        this.hookTouchEvents(b);
      }
      if (a.parent) {
        a.parent.appendChild(b);
      }
      if (a.children) {
        for (let c = 0; c < a.children.length; c++) {
          b.appendChild(a.children[c]);
        }
      }
      return b;
    };
    this.checkTrusted = function (a) {
      return function (b) {
        if (b && b instanceof Event && (b && typeof b.isTrusted == "boolean" ? b.isTrusted : true)) {
          a(b);
        } else {}
      };
    };
    this.randomString = function (a) {
      let b = "";
      let c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
      for (let d = 0; d < a; d++) {
        b += c.charAt(Math.floor(Math.random() * c.length));
      }
      return b;
    };
    this.countInArray = function (a, b) {
      let c = 0;
      for (let d = 0; d < a.length; d++) {
        if (a[d] === b) {
          c++;
        }
      }
      return c;
    };
    this.hexToRgb = function (a) {
      return a.slice(1).match(/.{1,2}/g).map(a => parseInt(a, 16));
    };
    this.getRgb = function (a, b, c) {
      return [a / 255, b / 255, c / 255].join(", ");
    };
  }
}
;
class vb {
  constructor() {
    this.init = function (a, b, c, d, e, f, g) {
      this.x = a;
      this.y = b;
      this.color = g;
      this.scale = c * 3.5;
      this.weight = 50;
      this.startScale = this.scale * 1.2;
      this.maxScale = c * 1.5;
      this.minScale = c * 0.5;
      this.scaleSpeed = 0.7;
      this.speed = d;
      this.speedMax = d;
      this.life = e;
      this.maxLife = e;
      this.text = f;
      this.movSpeed = d;
    };
    this.update = function (a) {
      if (this.life) {
        this.life -= a;
        if (this.scaleSpeed != -0.35) {
          this.y -= this.speed * a;
        } else {
          this.y -= this.speed * a;
        }
        this.scale -= 0.8;
        if (this.scale >= this.maxScale) {
          this.scale = this.maxScale;
          this.scaleSpeed *= -0.5;
          this.speed = this.speed * 0.75;
        }
        ;
        if (this.life <= 0) {
          this.life = 0;
        }
      }
      ;
    };
    this.render = function (a, b, c) {
      a.lineWidth = 10;
      a.strokeStyle = fb;
      a.fillStyle = this.color;
      a.globalAlpha = 1;
      a.font = this.scale + "px Hammersmith One";
      a.strokeText(this.text, this.x - b, this.y - c);
      a.fillText(this.text, this.x - b, this.y - c);
      a.globalAlpha = 1;
    };
  }
}
;
class wb {
  constructor() {
    this.texts = [];
    this.stack = [];
    this.update = function (a, b, c, d) {
      b.textBaseline = "middle";
      b.textAlign = "center";
      for (let e = 0; e < this.texts.length; ++e) {
        if (this.texts[e].life) {
          this.texts[e].update(a);
          this.texts[e].render(b, c, d);
        }
      }
    };
    this.showText = function (a, b, c, d, e, f, g) {
      let h;
      for (let i = 0; i < this.texts.length; ++i) {
        if (!this.texts[i].life) {
          h = this.texts[i];
          break;
        }
      }
      if (!h) {
        h = new vb();
        this.texts.push(h);
      }
      h.init(a, b, c, d, e, f, g);
    };
  }
}
class xb {
  constructor(a) {
    this.sid = a;
    this.init = function (a, b, c, d, e, f, g) {
      f = f || {};
      this.sentTo = {};
      this.gridLocations = [];
      this.active = true;
      this.render = true;
      this.doUpdate = f.doUpdate;
      this.x = a;
      this.y = b;
      this.dir = c;
      this.lastDir = c;
      this.xWiggle = 0;
      this.yWiggle = 0;
      this.visScale = d;
      this.scale = d;
      this.type = e;
      this.id = f.id;
      this.owner = g;
      this.name = f.name;
      this.isItem = this.id != undefined;
      this.group = f.group;
      this.maxHealth = f.health;
      this.health = this.maxHealth;
      this.layer = 2;
      if (this.group != undefined) {
        this.layer = this.group.layer;
      } else if (this.type == 0) {
        this.layer = 3;
      } else if (this.type == 2) {
        this.layer = 0;
      } else if (this.type == 4) {
        this.layer = -1;
      }
      this.colDiv = f.colDiv || 1;
      this.blocker = f.blocker;
      this.ignoreCollision = f.ignoreCollision;
      this.dontGather = f.dontGather;
      this.hideFromEnemy = f.hideFromEnemy;
      this.friction = f.friction;
      this.projDmg = f.projDmg;
      this.dmg = f.dmg;
      this.pDmg = f.pDmg;
      this.pps = f.pps;
      this.zIndex = f.zIndex || 0;
      this.turnSpeed = f.turnSpeed;
      this.req = f.req;
      this.trap = f.trap;
      this.healCol = f.healCol;
      this.teleport = f.teleport;
      this.boostSpeed = f.boostSpeed;
      this.projectile = f.projectile;
      this.shootRange = f.shootRange;
      this.shootRate = f.shootRate;
      this.shootCount = this.shootRate;
      this.spawnPoint = f.spawnPoint;
      this.onNear = 0;
      this.breakObj = false;
      this.alpha = f.alpha || 1;
      this.maxAlpha = f.alpha || 1;
      this.damaged = 0;
    };
    this.changeHealth = function (a, b) {
      this.health += a;
      return this.health <= 0;
    };
    this.getScale = function (a, b) {
      a = a || 1;
      return this.scale * (this.isItem || this.type == 2 || this.type == 3 || this.type == 4 ? 1 : a * 0.6) * (b ? 1 : this.colDiv);
    };
    this.visibleToPlayer = function (a) {
      return !this.hideFromEnemy || this.owner && (this.owner == a || this.owner.team && a.team == this.owner.team);
    };
    this.update = function (a) {
      if (this.active) {
        if (this.xWiggle) {
          this.xWiggle *= Math.pow(0.99, a);
        }
        if (this.yWiggle) {
          this.yWiggle *= Math.pow(0.99, a);
        }
        let b = dc.getAngleDist(this.lastDir, this.dir);
        if (b > 0.01) {
          this.dir += b / 5;
        } else {
          this.dir = this.lastDir;
        }
      } else if (this.alive) {
        this.alpha -= a / (200 / this.maxAlpha);
        this.visScale += a / (this.scale / 2.5);
        if (this.alpha <= 0) {
          this.alpha = 0;
          this.alive = false;
        }
      }
    };
    this.isTeamObject = function (a) {
      if (this.owner == null) {
        return true;
      } else {
        return this.owner && a.sid == this.owner.sid || a.findAllianceBySid(this.owner.sid);
      }
    };
  }
}
class yb {
  constructor() {
    this.groups = [{
      id: 0,
      name: "food",
      layer: 0
    }, {
      id: 1,
      name: "walls",
      place: true,
      limit: 30,
      layer: 0
    }, {
      id: 2,
      name: "spikes",
      place: true,
      limit: 15,
      layer: 0
    }, {
      id: 3,
      name: "mill",
      place: true,
      limit: 7,
      layer: 1
    }, {
      id: 4,
      name: "mine",
      place: true,
      limit: 1,
      layer: 0
    }, {
      id: 5,
      name: "trap",
      place: true,
      limit: 6,
      layer: -1
    }, {
      id: 6,
      name: "booster",
      place: true,
      limit: 12,
      layer: -1
    }, {
      id: 7,
      name: "turret",
      place: true,
      limit: 2,
      layer: 1
    }, {
      id: 8,
      name: "watchtower",
      place: true,
      limit: 12,
      layer: 1
    }, {
      id: 9,
      name: "buff",
      place: true,
      limit: 4,
      layer: -1
    }, {
      id: 10,
      name: "spawn",
      place: true,
      limit: 1,
      layer: -1
    }, {
      id: 11,
      name: "sapling",
      place: true,
      limit: 2,
      layer: 0
    }, {
      id: 12,
      name: "blocker",
      place: true,
      limit: 3,
      layer: -1
    }, {
      id: 13,
      name: "teleporter",
      place: true,
      limit: 2,
      layer: -1
    }];
    this.projectiles = [{
      indx: 0,
      layer: 0,
      src: "arrow_1",
      dmg: 25,
      speed: 1.6,
      scale: 103,
      range: 1000
    }, {
      indx: 1,
      layer: 1,
      dmg: 25,
      scale: 20
    }, {
      indx: 0,
      layer: 0,
      src: "arrow_1",
      dmg: 35,
      speed: 2.5,
      scale: 103,
      range: 1200
    }, {
      indx: 0,
      layer: 0,
      src: "arrow_1",
      dmg: 30,
      speed: 2,
      scale: 103,
      range: 1200
    }, {
      indx: 1,
      layer: 1,
      dmg: 16,
      scale: 20
    }, {
      indx: 0,
      layer: 0,
      src: "bullet_1",
      dmg: 50,
      speed: 3.6,
      scale: 160,
      range: 1400
    }];
    this.weapons = [{
      id: 0,
      type: 0,
      name: "tool hammer",
      desc: "tool for gathering all resources",
      src: "hammer_1",
      length: 140,
      width: 140,
      xOff: -3,
      yOff: 18,
      dmg: 25,
      range: 65,
      gather: 1,
      speed: 300
    }, {
      id: 1,
      type: 0,
      age: 2,
      name: "hand axe",
      desc: "gathers resources at a higher rate",
      src: "axe_1",
      length: 140,
      width: 140,
      xOff: 3,
      yOff: 24,
      dmg: 30,
      spdMult: 1,
      range: 70,
      gather: 2,
      speed: 400
    }, {
      id: 2,
      type: 0,
      age: 8,
      pre: 1,
      name: "great axe",
      desc: "deal more damage and gather more resources",
      src: "great_axe_1",
      length: 140,
      width: 140,
      xOff: -8,
      yOff: 25,
      dmg: 35,
      spdMult: 1,
      range: 75,
      gather: 4,
      speed: 400
    }, {
      id: 3,
      type: 0,
      age: 2,
      name: "short sword",
      desc: "increased attack power but slower move speed",
      src: "sword_1",
      iPad: 1.3,
      length: 130,
      width: 210,
      xOff: -8,
      yOff: 46,
      dmg: 35,
      spdMult: 0.85,
      range: 110,
      gather: 1,
      speed: 300
    }, {
      id: 4,
      type: 0,
      age: 8,
      pre: 3,
      name: "katana",
      desc: "greater range and damage",
      src: "samurai_1",
      iPad: 1.3,
      length: 130,
      width: 210,
      xOff: -8,
      yOff: 59,
      dmg: 40,
      spdMult: 0.8,
      range: 118,
      gather: 1,
      speed: 300
    }, {
      id: 5,
      type: 0,
      age: 2,
      name: "polearm",
      desc: "long range melee weapon",
      src: "spear_1",
      iPad: 1.3,
      length: 130,
      width: 210,
      xOff: -8,
      yOff: 53,
      dmg: 45,
      knock: 0.2,
      spdMult: 0.82,
      range: 142,
      gather: 1,
      speed: 700
    }, {
      id: 6,
      type: 0,
      age: 2,
      name: "bat",
      desc: "fast long range melee weapon",
      src: "bat_1",
      iPad: 1.3,
      length: 110,
      width: 180,
      xOff: -8,
      yOff: 53,
      dmg: 20,
      knock: 0.7,
      range: 110,
      gather: 1,
      speed: 300
    }, {
      id: 7,
      type: 0,
      age: 2,
      name: "daggers",
      desc: "really fast short range weapon",
      src: "dagger_1",
      iPad: 0.8,
      length: 110,
      width: 110,
      xOff: 18,
      yOff: 0,
      dmg: 20,
      knock: 0.1,
      range: 65,
      gather: 1,
      hitSlow: 0.1,
      spdMult: 1.13,
      speed: 100
    }, {
      id: 8,
      type: 0,
      age: 2,
      name: "stick",
      desc: "great for gathering but very weak",
      src: "stick_1",
      length: 140,
      width: 140,
      xOff: 3,
      yOff: 24,
      dmg: 1,
      spdMult: 1,
      range: 70,
      gather: 7,
      speed: 400
    }, {
      id: 9,
      type: 1,
      age: 6,
      name: "hunting bow",
      desc: "bow used for ranged combat and hunting",
      src: "bow_1",
      req: ["wood", 4],
      length: 120,
      width: 120,
      xOff: -6,
      yOff: 0,
      Pdmg: 25,
      projectile: 0,
      spdMult: 0.75,
      speed: 600
    }, {
      id: 10,
      type: 1,
      age: 6,
      name: "great hammer",
      desc: "hammer used for destroying structures",
      src: "great_hammer_1",
      length: 140,
      width: 140,
      xOff: -9,
      yOff: 25,
      dmg: 10,
      Pdmg: 10,
      spdMult: 0.88,
      range: 75,
      sDmg: 7.5,
      gather: 1,
      speed: 400
    }, {
      id: 11,
      type: 1,
      age: 6,
      name: "wooden shield",
      desc: "blocks projectiles and reduces melee damage",
      src: "shield_1",
      length: 120,
      width: 120,
      shield: 0.2,
      xOff: 6,
      yOff: 0,
      Pdmg: 0,
      spdMult: 0.7
    }, {
      id: 12,
      type: 1,
      age: 8,
      pre: 9,
      name: "crossbow",
      desc: "deals more damage and has greater range",
      src: "crossbow_1",
      req: ["wood", 5],
      aboveHand: true,
      armS: 0.75,
      length: 120,
      width: 120,
      xOff: -4,
      yOff: 0,
      Pdmg: 35,
      projectile: 2,
      spdMult: 0.7,
      speed: 700
    }, {
      id: 13,
      type: 1,
      age: 9,
      pre: 12,
      name: "repeater crossbow",
      desc: "high firerate crossbow with reduced damage",
      src: "crossbow_2",
      req: ["wood", 10],
      aboveHand: true,
      armS: 0.75,
      length: 120,
      width: 120,
      xOff: -4,
      yOff: 0,
      Pdmg: 30,
      projectile: 3,
      spdMult: 0.7,
      speed: 230
    }, {
      id: 14,
      type: 1,
      age: 6,
      name: "mc grabby",
      desc: "steals resources from enemies",
      src: "grab_1",
      length: 130,
      width: 210,
      xOff: -8,
      yOff: 53,
      dmg: 0,
      Pdmg: 0,
      steal: 250,
      knock: 0.2,
      spdMult: 1.05,
      range: 125,
      gather: 0,
      speed: 700
    }, {
      id: 15,
      type: 1,
      age: 9,
      pre: 12,
      name: "musket",
      desc: "slow firerate but high damage and range",
      src: "musket_1",
      req: ["stone", 10],
      aboveHand: true,
      rec: 0.35,
      armS: 0.6,
      hndS: 0.3,
      hndD: 1.6,
      length: 205,
      width: 205,
      xOff: 25,
      yOff: 0,
      Pdmg: 50,
      projectile: 5,
      hideProjectile: true,
      spdMult: 0.6,
      speed: 1500
    }];
    this.list = [{
      group: this.groups[0],
      name: "apple",
      desc: "restores 20 health when consumed",
      req: ["food", 10],
      consume: function (a) {
        return a.changeHealth(20, a);
      },
      scale: 22,
      holdOffset: 15,
      healing: 20,
      itemID: 0,
      itemAID: 16
    }, {
      age: 3,
      group: this.groups[0],
      name: "cookie",
      desc: "restores 40 health when consumed",
      req: ["food", 15],
      consume: function (a) {
        return a.changeHealth(40, a);
      },
      scale: 27,
      holdOffset: 15,
      healing: 40,
      itemID: 1,
      itemAID: 17
    }, {
      age: 7,
      group: this.groups[0],
      name: "cheese",
      desc: "restores 30 health and another 50 over 5 seconds",
      req: ["food", 25],
      consume: function (a) {
        if (a.changeHealth(30, a) || a.health < 100) {
          a.dmgOverTime.dmg = -10;
          a.dmgOverTime.doer = a;
          a.dmgOverTime.time = 5;
          return true;
        }
        return false;
      },
      scale: 27,
      holdOffset: 15,
      healing: 30,
      itemID: 2,
      itemAID: 18
    }, {
      group: this.groups[1],
      name: "wood wall",
      desc: "provides protection for your village",
      req: ["wood", 10],
      projDmg: true,
      health: 380,
      scale: 50,
      holdOffset: 20,
      placeOffset: -5,
      itemID: 3,
      itemAID: 19
    }, {
      age: 3,
      group: this.groups[1],
      name: "stone wall",
      desc: "provides improved protection for your village",
      req: ["stone", 25],
      health: 900,
      scale: 50,
      holdOffset: 20,
      placeOffset: -5,
      itemID: 4,
      itemAID: 20
    }, {
      age: 7,
      group: this.groups[1],
      name: "castle wall",
      desc: "provides powerful protection for your village",
      req: ["stone", 35],
      health: 1500,
      scale: 52,
      holdOffset: 20,
      placeOffset: -5,
      itemID: 5,
      itemAID: 21
    }, {
      group: this.groups[2],
      name: "spikes",
      desc: "damages enemies when they touch them",
      req: ["wood", 20, "stone", 5],
      health: 400,
      dmg: 20,
      scale: 49,
      spritePadding: -23,
      holdOffset: 8,
      placeOffset: -5,
      itemID: 6,
      itemAID: 22,
      shadow: {
        offsetX: 5,
        offsetY: 5,
        blur: 20,
        color: "rgba(0, 0, 0, 0.5)"
      }
    }, {
      age: 5,
      group: this.groups[2],
      name: "greater spikes",
      desc: "damages enemies when they touch them",
      req: ["wood", 30, "stone", 10],
      health: 500,
      dmg: 35,
      scale: 52,
      spritePadding: -23,
      holdOffset: 8,
      placeOffset: -5,
      itemID: 7,
      itemAID: 23
    }, {
      age: 9,
      group: this.groups[2],
      name: "poison spikes",
      desc: "poisons enemies when they touch them",
      req: ["wood", 35, "stone", 15],
      health: 600,
      dmg: 30,
      pDmg: 5,
      scale: 52,
      spritePadding: -23,
      holdOffset: 8,
      placeOffset: -5,
      itemID: 8,
      itemAID: 24
    }, {
      age: 9,
      group: this.groups[2],
      name: "spinning spikes",
      desc: "damages enemies when they touch them",
      req: ["wood", 30, "stone", 20],
      health: 500,
      dmg: 45,
      turnSpeed: 0.003,
      scale: 52,
      spritePadding: -23,
      holdOffset: 8,
      placeOffset: -5,
      itemID: 9,
      itemAID: 25
    }, {
      group: this.groups[3],
      name: "windmill",
      desc: "generates gold over time",
      req: ["wood", 50, "stone", 10],
      health: 400,
      pps: 1,
      turnSpeed: 0.0016,
      spritePadding: 25,
      iconLineMult: 12,
      scale: 45,
      holdOffset: 20,
      placeOffset: 5,
      itemID: 10,
      itemAID: 26
    }, {
      age: 5,
      group: this.groups[3],
      name: "faster windmill",
      desc: "generates more gold over time",
      req: ["wood", 60, "stone", 20],
      health: 500,
      pps: 1.5,
      turnSpeed: 0.0025,
      spritePadding: 25,
      iconLineMult: 12,
      scale: 47,
      holdOffset: 20,
      placeOffset: 5,
      itemID: 11,
      itemAID: 27
    }, {
      age: 8,
      group: this.groups[3],
      name: "power mill",
      desc: "generates more gold over time",
      req: ["wood", 100, "stone", 50],
      health: 800,
      pps: 2,
      turnSpeed: 0.005,
      spritePadding: 25,
      iconLineMult: 12,
      scale: 47,
      holdOffset: 20,
      placeOffset: 5,
      itemID: 12,
      itemAID: 28
    }, {
      age: 5,
      group: this.groups[4],
      type: 2,
      name: "mine",
      desc: "allows you to mine stone",
      req: ["wood", 20, "stone", 100],
      iconLineMult: 12,
      scale: 65,
      holdOffset: 20,
      placeOffset: 0,
      itemID: 13,
      itemAID: 29
    }, {
      age: 5,
      group: this.groups[11],
      type: 0,
      name: "sapling",
      desc: "allows you to farm wood",
      req: ["wood", 150],
      iconLineMult: 12,
      colDiv: 0.5,
      scale: 110,
      holdOffset: 50,
      placeOffset: -15,
      itemID: 14,
      itemAID: 30
    }, {
      age: 4,
      group: this.groups[5],
      name: "pit trap",
      desc: "pit that traps enemies if they walk over it",
      req: ["wood", 30, "stone", 30],
      trap: true,
      ignoreCollision: true,
      hideFromEnemy: true,
      health: 500,
      colDiv: 0.2,
      scale: 50,
      holdOffset: 20,
      placeOffset: -5,
      alpha: 0.6,
      itemID: 15,
      itemAID: 31
    }, {
      age: 4,
      group: this.groups[6],
      name: "boost pad",
      desc: "provides boost when stepped on",
      req: ["stone", 20, "wood", 5],
      ignoreCollision: true,
      boostSpeed: 1.5,
      health: 150,
      colDiv: 0.7,
      scale: 45,
      holdOffset: 20,
      placeOffset: -5,
      itemID: 16,
      itemAID: 32
    }, {
      age: 7,
      group: this.groups[7],
      doUpdate: true,
      name: "turret",
      desc: "defensive structure that shoots at enemies",
      req: ["wood", 200, "stone", 150],
      health: 800,
      projectile: 1,
      shootRange: 700,
      shootRate: 2200,
      scale: 43,
      holdOffset: 20,
      placeOffset: -5,
      itemID: 17,
      itemAID: 33
    }, {
      age: 7,
      group: this.groups[8],
      name: "platform",
      desc: "platform to shoot over walls and cross over water",
      req: ["wood", 20],
      ignoreCollision: true,
      zIndex: 1,
      health: 300,
      scale: 43,
      holdOffset: 20,
      placeOffset: -5,
      itemID: 18,
      itemAID: 34
    }, {
      age: 7,
      group: this.groups[9],
      name: "healing pad",
      desc: "standing on it will slowly heal you",
      req: ["wood", 30, "food", 10],
      ignoreCollision: true,
      healCol: 15,
      health: 400,
      colDiv: 0.7,
      scale: 45,
      holdOffset: 20,
      placeOffset: -5,
      itemID: 19,
      itemAID: 35
    }, {
      age: 9,
      group: this.groups[10],
      name: "spawn pad",
      desc: "you will spawn here when you die but it will dissapear",
      req: ["wood", 100, "stone", 100],
      health: 400,
      ignoreCollision: true,
      spawnPoint: true,
      scale: 45,
      holdOffset: 20,
      placeOffset: -5,
      itemID: 20,
      itemAID: 36
    }, {
      age: 7,
      group: this.groups[12],
      name: "blocker",
      desc: "blocks building in radius",
      req: ["wood", 30, "stone", 25],
      ignoreCollision: true,
      blocker: 300,
      health: 400,
      colDiv: 0.7,
      scale: 45,
      holdOffset: 20,
      placeOffset: -5,
      itemID: 21,
      itemAID: 37
    }, {
      age: 7,
      group: this.groups[13],
      name: "teleporter",
      desc: "teleports you to a random point on the map",
      req: ["wood", 60, "stone", 60],
      ignoreCollision: true,
      teleport: true,
      health: 200,
      colDiv: 0.7,
      scale: 45,
      holdOffset: 20,
      placeOffset: -5,
      itemID: 22,
      itemAID: 38
    }];
    this.checkItem = {
      index: function (a, b) {
        if ([0, 1, 2].includes(a)) {
          return 0;
        } else if ([3, 4, 5].includes(a)) {
          return 1;
        } else if ([6, 7, 8, 9].includes(a)) {
          return 2;
        } else if ([10, 11, 12].includes(a)) {
          return 3;
        } else if ([13, 14].includes(a)) {
          return 5;
        } else if ([15, 16].includes(a)) {
          return 4;
        } else if ([17, 18, 19, 21, 22].includes(a)) {
          if ([13, 14].includes(b)) {
            return 6;
          } else {
            return 5;
          }
        } else if (a == 20) {
          if ([13, 14].includes(b)) {
            return 7;
          } else {
            return 6;
          }
        } else {
          return undefined;
        }
      }
    };
    for (let a = 0; a < this.list.length; ++a) {
      this.list[a].id = a;
      if (this.list[a].pre) {
        this.list[a].pre = a - this.list[a].pre;
      }
    }
    if (typeof window !== "undefined") {
      function a(a) {
        for (let b = a.length - 1; b > 0; b--) {
          const c = Math.floor(Math.random() * (b + 1));
          [a[b], a[c]] = [a[c], a[b]];
        }
        return a;
      }
    }
  }
}
class zb {
  constructor(a, b, c, d, e, f) {
    let g = Math.floor;
    let h = Math.abs;
    let i = Math.cos;
    let j = Math.sin;
    let k = Math.pow;
    let l = Math.sqrt;
    this.ignoreAdd = false;
    this.hitObj = [];
    this.disableObj = function (a) {
      a.active = false;
    };
    let m;
    this.add = function (b, c, d, e, f, g, h, i, j) {
      m = va(b);
      if (!m) {
        m = ea.find(a => !a.active);
        if (!m) {
          m = new a(b);
          ea.push(m);
        }
      }
      if (i) {
        m.sid = b;
      }
      m.init(c, d, e, f, g, h, j);
    };
    this.disableBySid = function (a) {
      let b = va(a);
      if (b) {
        this.disableObj(b);
      }
    };
    this.removeAllItems = function (a, b) {
      ea.filter(b => b.active && b.owner && b.owner.sid == a).forEach(a => this.disableObj(a));
    };
    this.checkItemLocation = function (a, e, f, g, h, i, j) {
      let k = b.find(b => b.active && c.getDistance(a, e, b.x, b.y) < f + (b.blocker ? b.blocker : b.getScale(g, b.isItem)));
      if (k) {
        return false;
      }
      if (!i && h != 18 && e >= d.mapScale / 2 - d.riverWidth / 2 && e <= d.mapScale / 2 + d.riverWidth / 2) {
        return false;
      }
      return true;
    };
  }
}
class Ab {
  constructor(a, b, c, d, e, f, g) {
    this.init = function (a, b, c, d, e, f, g, h, i) {
      this.active = true;
      this.tickActive = true;
      this.indx = a;
      this.x = b;
      this.y = c;
      this.x2 = b;
      this.y2 = c;
      this.dir = d;
      this.skipMov = true;
      this.speed = e;
      this.dmg = f;
      this.scale = h;
      this.range = g;
      this.r2 = g;
      this.owner = i;
    };
    this.update = function (a) {
      if (this.active) {
        let b = this.speed * a;
        if (!this.skipMov) {
          this.x += b * Math.cos(this.dir);
          this.y += b * Math.sin(this.dir);
          this.range -= b;
          if (this.range <= 0) {
            this.x += this.range * Math.cos(this.dir);
            this.y += this.range * Math.sin(this.dir);
            b = 1;
            this.range = 0;
            this.active = false;
          }
        } else {
          this.skipMov = false;
        }
      }
    };
    this.tickUpdate = function (a) {
      if (this.tickActive) {
        let b = this.speed * a;
        if (!this.skipMov) {
          this.x2 += b * Math.cos(this.dir);
          this.y2 += b * Math.sin(this.dir);
          this.r2 -= b;
          if (this.r2 <= 0) {
            this.x2 += this.r2 * Math.cos(this.dir);
            this.y2 += this.r2 * Math.sin(this.dir);
            b = 1;
            this.r2 = 0;
            this.tickActive = false;
          }
        } else {
          this.skipMov = false;
        }
      }
    };
  }
}
;
class Bb {
  constructor() {
    this.hats = [{
      id: 45,
      name: "Shame!",
      dontSell: true,
      price: 0,
      scale: 120,
      desc: "hacks are for winners"
    }, {
      id: 51,
      name: "Moo Cap",
      price: 0,
      scale: 120,
      desc: "coolest mooer around"
    }, {
      id: 50,
      name: "Apple Cap",
      price: 0,
      scale: 120,
      desc: "apple farms remembers"
    }, {
      id: 28,
      name: "Moo Head",
      price: 0,
      scale: 120,
      desc: "no effect"
    }, {
      id: 29,
      name: "Pig Head",
      price: 0,
      scale: 120,
      desc: "no effect"
    }, {
      id: 30,
      name: "Fluff Head",
      price: 0,
      scale: 120,
      desc: "no effect"
    }, {
      id: 36,
      name: "Pandou Head",
      price: 0,
      scale: 120,
      desc: "no effect"
    }, {
      id: 37,
      name: "Bear Head",
      price: 0,
      scale: 120,
      desc: "no effect"
    }, {
      id: 38,
      name: "Monkey Head",
      price: 0,
      scale: 120,
      desc: "no effect"
    }, {
      id: 44,
      name: "Polar Head",
      price: 0,
      scale: 120,
      desc: "no effect"
    }, {
      id: 35,
      name: "Fez Hat",
      price: 0,
      scale: 120,
      desc: "no effect"
    }, {
      id: 42,
      name: "Enigma Hat",
      price: 0,
      scale: 120,
      desc: "join the enigma army"
    }, {
      id: 43,
      name: "Blitz Hat",
      price: 0,
      scale: 120,
      desc: "hey everybody i'm blitz"
    }, {
      id: 49,
      name: "Bob XIII Hat",
      price: 0,
      scale: 120,
      desc: "like and subscribe"
    }, {
      id: 57,
      name: "Pumpkin",
      price: 50,
      scale: 120,
      desc: "Spooooky"
    }, {
      id: 8,
      name: "Bummle Hat",
      price: 100,
      scale: 120,
      desc: "no effect"
    }, {
      id: 2,
      name: "Straw Hat",
      price: 500,
      scale: 120,
      desc: "no effect"
    }, {
      id: 15,
      name: "Winter Cap",
      price: 600,
      scale: 120,
      desc: "allows you to move at normal speed in snow",
      coldM: 1
    }, {
      id: 5,
      name: "Cowboy Hat",
      price: 1000,
      scale: 120,
      desc: "no effect"
    }, {
      id: 4,
      name: "Ranger Hat",
      price: 2000,
      scale: 120,
      desc: "no effect"
    }, {
      id: 18,
      name: "Explorer Hat",
      price: 2000,
      scale: 120,
      desc: "no effect"
    }, {
      id: 31,
      name: "Flipper Hat",
      price: 2500,
      scale: 120,
      desc: "have more control while in water",
      watrImm: true
    }, {
      id: 1,
      name: "Marksman Cap",
      price: 3000,
      scale: 120,
      desc: "increases arrow speed and range",
      aMlt: 1.3
    }, {
      id: 10,
      name: "Bush Gear",
      price: 3000,
      scale: 160,
      desc: "allows you to disguise yourself as a bush"
    }, {
      id: 48,
      name: "Halo",
      price: 3000,
      scale: 120,
      desc: "no effect"
    }, {
      id: 6,
      name: "Soldier Helmet",
      price: 4000,
      scale: 120,
      desc: "reduces damage taken but slows movement",
      spdMult: 0.94,
      dmgMult: 0.75
    }, {
      id: 23,
      name: "Anti Venom Gear",
      price: 4000,
      scale: 120,
      desc: "makes you immune to poison",
      poisonRes: 1
    }, {
      id: 13,
      name: "Medic Gear",
      price: 5000,
      scale: 110,
      desc: "slowly regenerates health over time",
      healthRegen: 3
    }, {
      id: 9,
      name: "Miners Helmet",
      price: 5000,
      scale: 120,
      desc: "earn 1 extra gold per resource",
      extraGold: 1
    }, {
      id: 32,
      name: "Musketeer Hat",
      price: 5000,
      scale: 120,
      desc: "reduces cost of projectiles",
      projCost: 0.5
    }, {
      id: 7,
      name: "Bull Helmet",
      price: 6000,
      scale: 120,
      desc: "increases damage done but drains health",
      healthRegen: -5,
      dmgMultO: 1.5,
      spdMult: 0.96
    }, {
      id: 22,
      name: "Emp Helmet",
      price: 6000,
      scale: 120,
      desc: "turrets won't attack but you move slower",
      antiTurret: 1,
      spdMult: 0.7
    }, {
      id: 12,
      name: "Booster Hat",
      price: 6000,
      scale: 120,
      desc: "increases your movement speed",
      spdMult: 1.16
    }, {
      id: 26,
      name: "Barbarian Armor",
      price: 8000,
      scale: 120,
      desc: "knocks back enemies that attack you",
      dmgK: 0.6
    }, {
      id: 21,
      name: "Plague Mask",
      price: 10000,
      scale: 120,
      desc: "melee attacks deal poison damage",
      poisonDmg: 5,
      poisonTime: 6
    }, {
      id: 46,
      name: "Bull Mask",
      price: 10000,
      scale: 120,
      desc: "bulls won't target you unless you attack them",
      bullRepel: 1
    }, {
      id: 14,
      name: "Windmill Hat",
      topSprite: true,
      price: 10000,
      scale: 120,
      desc: "generates points while worn",
      pps: 1.5
    }, {
      id: 11,
      name: "Spike Gear",
      topSprite: true,
      price: 10000,
      scale: 120,
      desc: "deal damage to players that damage you",
      dmg: 0.45
    }, {
      id: 53,
      name: "Turret Gear",
      topSprite: true,
      price: 10000,
      scale: 120,
      desc: "you become a walking turret",
      turret: {
        proj: 1,
        range: 700,
        rate: 2500
      },
      spdMult: 0.7
    }, {
      id: 20,
      name: "Samurai Armor",
      price: 12000,
      scale: 120,
      desc: "increased attack speed and fire rate",
      atkSpd: 0.78
    }, {
      id: 58,
      name: "Dark Knight",
      price: 12000,
      scale: 120,
      desc: "restores health when you deal damage",
      healD: 0.4
    }, {
      id: 27,
      name: "Scavenger Gear",
      price: 15000,
      scale: 120,
      desc: "earn double points for each kill",
      kScrM: 2
    }, {
      id: 40,
      name: "Tank Gear",
      price: 15000,
      scale: 120,
      desc: "increased damage to buildings but slower movement",
      spdMult: 0.3,
      bDmg: 3.3
    }, {
      id: 52,
      name: "Thief Gear",
      price: 15000,
      scale: 120,
      desc: "steal half of a players gold when you kill them",
      goldSteal: 0.5
    }, {
      id: 55,
      name: "Bloodthirster",
      price: 20000,
      scale: 120,
      desc: "Restore Health when dealing damage. And increased damage",
      healD: 0.25,
      dmgMultO: 1.2
    }, {
      id: 56,
      name: "Assassin Gear",
      price: 20000,
      scale: 120,
      desc: "Go invisible when not moving. Can't eat. Increased speed",
      noEat: true,
      spdMult: 1.1,
      invisTimer: 1000
    }];
    this.accessories = [{
      id: 12,
      name: "Snowball",
      price: 1000,
      scale: 105,
      xOff: 18,
      desc: "no effect"
    }, {
      id: 9,
      name: "Tree Cape",
      price: 1000,
      scale: 90,
      desc: "no effect"
    }, {
      id: 10,
      name: "Stone Cape",
      price: 1000,
      scale: 90,
      desc: "no effect"
    }, {
      id: 3,
      name: "Cookie Cape",
      price: 1500,
      scale: 90,
      desc: "no effect"
    }, {
      id: 8,
      name: "Cow Cape",
      price: 2000,
      scale: 90,
      desc: "no effect"
    }, {
      id: 11,
      name: "Monkey Tail",
      price: 2000,
      scale: 97,
      xOff: 25,
      desc: "Super speed but reduced damage",
      spdMult: 1.35,
      dmgMultO: 0.2
    }, {
      id: 17,
      name: "Apple Basket",
      price: 3000,
      scale: 80,
      xOff: 12,
      desc: "slowly regenerates health over time",
      healthRegen: 1
    }, {
      id: 6,
      name: "Winter Cape",
      price: 3000,
      scale: 90,
      desc: "no effect"
    }, {
      id: 4,
      name: "Skull Cape",
      price: 4000,
      scale: 90,
      desc: "no effect"
    }, {
      id: 5,
      name: "Dash Cape",
      price: 5000,
      scale: 90,
      desc: "no effect"
    }, {
      id: 2,
      name: "Dragon Cape",
      price: 6000,
      scale: 90,
      desc: "no effect"
    }, {
      id: 1,
      name: "Super Cape",
      price: 8000,
      scale: 90,
      desc: "no effect"
    }, {
      id: 7,
      name: "Troll Cape",
      price: 8000,
      scale: 90,
      desc: "no effect"
    }, {
      id: 14,
      name: "Thorns",
      price: 10000,
      scale: 115,
      xOff: 20,
      desc: "no effect"
    }, {
      id: 15,
      name: "Blockades",
      price: 10000,
      scale: 95,
      xOff: 15,
      desc: "no effect"
    }, {
      id: 20,
      name: "Devils Tail",
      price: 10000,
      scale: 95,
      xOff: 20,
      desc: "no effect"
    }, {
      id: 16,
      name: "Sawblade",
      price: 12000,
      scale: 90,
      spin: true,
      xOff: 0,
      desc: "deal damage to players that damage you",
      dmg: 0.15
    }, {
      id: 13,
      name: "Angel Wings",
      price: 15000,
      scale: 138,
      xOff: 22,
      desc: "slowly regenerates health over time",
      healthRegen: 3
    }, {
      id: 19,
      name: "Shadow Wings",
      price: 15000,
      scale: 138,
      xOff: 22,
      desc: "increased movement speed",
      spdMult: 1.1
    }, {
      id: 18,
      name: "Blood Wings",
      price: 20000,
      scale: 178,
      xOff: 26,
      desc: "restores health when you deal damage",
      healD: 0.2
    }, {
      id: 21,
      name: "Corrupt X Wings",
      price: 20000,
      scale: 178,
      xOff: 26,
      desc: "deal damage to players that damage you",
      dmg: 0.25
    }];
  }
}
;
class Cb {
  constructor(a, b, c, d, e, f, g, h, i) {
    this.addProjectile = function (j, k, l, m, n, o, p, q, r, s) {
      let t = f.projectiles[o];
      let u;
      for (let a = 0; a < b.length; ++a) {
        if (!b[a].active) {
          u = b[a];
          break;
        }
      }
      if (!u) {
        u = new a(c, d, e, f, g, h, i);
        u.sid = b.length;
        b.push(u);
      }
      u.init(o, j, k, l, n, t.dmg, m, t.scale, p);
      u.ignoreObj = q;
      u.layer = r || t.layer;
      u.inWindow = s;
      u.src = t.src;
      return u;
    };
  }
}
;
class Db {
  constructor(a, b, c, d, e, f, g, h, i) {
    this.aiTypes = [{
      id: 0,
      src: "cow_1",
      killScore: 150,
      health: 500,
      weightM: 0.8,
      speed: 0.00095,
      turnSpeed: 0.001,
      scale: 72,
      drop: ["food", 50]
    }, {
      id: 1,
      src: "pig_1",
      killScore: 200,
      health: 800,
      weightM: 0.6,
      speed: 0.00085,
      turnSpeed: 0.001,
      scale: 72,
      drop: ["food", 80]
    }, {
      id: 2,
      name: "Bull",
      src: "bull_2",
      hostile: true,
      dmg: 20,
      killScore: 1000,
      health: 1800,
      weightM: 0.5,
      speed: 0.00094,
      turnSpeed: 0.00074,
      scale: 78,
      viewRange: 800,
      chargePlayer: true,
      drop: ["food", 100]
    }, {
      id: 3,
      name: "Bully",
      src: "bull_1",
      hostile: true,
      dmg: 20,
      killScore: 2000,
      health: 2800,
      weightM: 0.45,
      speed: 0.001,
      turnSpeed: 0.0008,
      scale: 90,
      viewRange: 900,
      chargePlayer: true,
      drop: ["food", 400]
    }, {
      id: 4,
      name: "Wolf",
      src: "wolf_1",
      hostile: true,
      dmg: 8,
      killScore: 500,
      health: 300,
      weightM: 0.45,
      speed: 0.001,
      turnSpeed: 0.002,
      scale: 84,
      viewRange: 800,
      chargePlayer: true,
      drop: ["food", 200]
    }, {
      id: 5,
      name: "Quack",
      src: "chicken_1",
      dmg: 8,
      killScore: 2000,
      noTrap: true,
      health: 300,
      weightM: 0.2,
      speed: 0.0018,
      turnSpeed: 0.006,
      scale: 70,
      drop: ["food", 100]
    }, {
      id: 6,
      name: "MOOSTAFA",
      nameScale: 50,
      src: "enemy",
      hostile: true,
      dontRun: true,
      fixedSpawn: true,
      spawnDelay: 60000,
      noTrap: true,
      colDmg: 100,
      dmg: 40,
      killScore: 8000,
      health: 18000,
      weightM: 0.4,
      speed: 0.0007,
      turnSpeed: 0.01,
      scale: 80,
      spriteMlt: 1.8,
      leapForce: 0.9,
      viewRange: 1000,
      hitRange: 210,
      hitDelay: 1000,
      chargePlayer: true,
      drop: ["food", 100]
    }, {
      id: 7,
      name: "Treasure",
      hostile: true,
      nameScale: 35,
      src: "crate_1",
      fixedSpawn: true,
      spawnDelay: 120000,
      colDmg: 200,
      killScore: 5000,
      health: 20000,
      weightM: 0.1,
      speed: 0,
      turnSpeed: 0,
      scale: 70,
      spriteMlt: 1
    }, {
      id: 8,
      name: "MOOFIE",
      src: "wolf_2",
      hostile: true,
      fixedSpawn: true,
      dontRun: true,
      hitScare: 4,
      spawnDelay: 30000,
      noTrap: true,
      nameScale: 35,
      dmg: 10,
      colDmg: 100,
      killScore: 3000,
      health: 7000,
      weightM: 0.45,
      speed: 0.0015,
      turnSpeed: 0.002,
      scale: 90,
      viewRange: 800,
      chargePlayer: true,
      drop: ["food", 1000]
    }];
    this.spawn = function (j, k, l, m) {
      let n = a.find(a => !a.active);
      if (!n) {
        n = new b(a.length, e, c, d, g, f, h, i);
        a.push(n);
      }
      n.init(j, k, l, m, this.aiTypes[m]);
      return n;
    };
  }
}
;
class Eb {
  constructor(a, b, c, d, e, f, g, h) {
    this.sid = a;
    this.isAI = true;
    this.nameIndex = e.randInt(0, f.cowNames.length - 1);
    this.init = function (a, b, c, d, e) {
      this.x = a;
      this.y = b;
      this.startX = e.fixedSpawn ? a : null;
      this.startY = e.fixedSpawn ? b : null;
      this.xVel = 0;
      this.yVel = 0;
      this.zIndex = 0;
      this.dir = c;
      this.dirPlus = 0;
      this.showName = "aaa";
      this.index = d;
      this.src = e.src;
      if (e.name) {
        this.name = e.name;
      }
      this.weightM = e.weightM;
      this.speed = e.speed;
      this.killScore = e.killScore;
      this.turnSpeed = e.turnSpeed;
      this.scale = e.scale;
      this.maxHealth = e.health;
      this.leapForce = e.leapForce;
      this.health = this.maxHealth;
      this.chargePlayer = e.chargePlayer;
      this.viewRange = e.viewRange;
      this.drop = e.drop;
      this.dmg = e.dmg;
      this.hostile = e.hostile;
      this.dontRun = e.dontRun;
      this.hitRange = e.hitRange;
      this.hitDelay = e.hitDelay;
      this.hitScare = e.hitScare;
      this.spriteMlt = e.spriteMlt;
      this.nameScale = e.nameScale;
      this.colDmg = e.colDmg;
      this.noTrap = e.noTrap;
      this.spawnDelay = e.spawnDelay;
      this.hitWait = 0;
      this.waitCount = 1000;
      this.moveCount = 0;
      this.targetDir = 0;
      this.active = true;
      this.alive = true;
      this.runFrom = null;
      this.chargeTarget = null;
      this.dmgOverTime = {};
    };
    let i = 0;
    let j = 0;
    this.animate = function (a) {
      if (this.animTime > 0) {
        this.animTime -= a;
        if (this.animTime <= 0) {
          this.animTime = 0;
          this.dirPlus = 0;
          i = 0;
          j = 0;
        } else if (j == 0) {
          i += a / (this.animSpeed * f.hitReturnRatio);
          this.dirPlus = e.lerp(0, this.targetAngle, Math.min(1, i));
          if (i >= 1) {
            i = 1;
            j = 1;
          }
        } else {
          i -= a / (this.animSpeed * (1 - f.hitReturnRatio));
          this.dirPlus = e.lerp(0, this.targetAngle, Math.max(0, i));
        }
      }
    };
    this.startAnim = function () {
      this.animTime = this.animSpeed = 600;
      this.targetAngle = Math.PI * 0.8;
      i = 0;
      j = 0;
    };
  }
}
;
class Fb {
  constructor(a, b, c, d) {
    this.x = a;
    this.y = b;
    this.alpha = 0;
    this.active = true;
    this.alive = false;
    this.chat = c;
    this.owner = d;
  }
}
;
class Gb {
  constructor(a, b, c, d, e, f, g, h, i) {
    this.x = a;
    this.y = b;
    this.lastDir = c;
    this.dir = c + Math.PI;
    this.buildIndex = d;
    this.weaponIndex = e;
    this.weaponVariant = f;
    this.skinColor = g;
    this.scale = h;
    this.visScale = 0;
    this.name = i;
    this.alpha = 1;
    this.active = true;
    this.animate = function (a) {
      let b = dc.getAngleDist(this.lastDir, this.dir);
      if (b > 0.01) {
        this.dir += b / 20;
      } else {
        this.dir = this.lastDir;
      }
      if (this.visScale < this.scale) {
        this.visScale += a / (this.scale / 2);
        if (this.visScale >= this.scale) {
          this.visScale = this.scale;
        }
      }
      this.alpha -= a / 30000;
      if (this.alpha <= 0) {
        this.alpha = 0;
        this.active = false;
      }
    };
  }
}
;
class Hb {
  constructor(a, b, d, e, f, g, h, i, j, k, l, m, n, o) {
    this.id = a;
    this.sid = b;
    this.tmpScore = 0;
    this.team = null;
    this.latestSkin = 0;
    this.oldSkinIndex = 0;
    this.skinIndex = 0;
    this.latestTail = 0;
    this.oldTailIndex = 0;
    this.tailIndex = 0;
    this.hitTime = 0;
    this.lastHit = 0;
    this.showName = "NOOO";
    this.tails = {};
    for (let c = 0; c < l.length; ++c) {
      if (l[c].price <= 0) {
        this.tails[l[c].id] = 1;
      }
    }
    this.skins = {};
    for (let c = 0; c < k.length; ++c) {
      if (k[c].price <= 0) {
        this.skins[k[c].id] = 1;
      }
    }
    this.points = 0;
    this.dt = 0;
    this.hidden = false;
    this.itemCounts = {};
    this.isPlayer = true;
    this.pps = 0;
    this.moveDir = undefined;
    this.skinRot = 0;
    this.lastPing = 0;
    this.iconIndex = 0;
    this.skinColor = 0;
    this.dist2 = 0;
    this.aim2 = 0;
    this.maxSpeed = 1;
    this.chat = {
      message: null,
      count: 0
    };
    this.backupNobull = true;
    this.circle = false;
    this.circleRad = 200;
    this.circleRadSpd = 0.1;
    this.cAngle = 0;
    this.spawn = function (a) {
      this.attacked = false;
      this.timeDamaged = 0;
      this.timeHealed = 0;
      this.pinge = 0;
      this.millPlace = "NOOO";
      this.lastshamecount = 0;
      this.death = false;
      this.spinDir = 0;
      this.sync = false;
      this.antiBull = 0;
      this.bullTimer = 0;
      this.poisonTimer = 0;
      this.active = true;
      this.alive = true;
      this.lockMove = false;
      this.lockDir = false;
      this.minimapCounter = 0;
      this.chatCountdown = 0;
      this.shameCount = 0;
      this.shameTimer = 0;
      this.sentTo = {};
      this.gathering = 0;
      this.gatherIndex = 0;
      this.shooting = {};
      this.shootIndex = 9;
      this.autoGather = 0;
      this.animTime = 0;
      this.animSpeed = 0;
      this.mouseState = 0;
      this.buildIndex = -1;
      this.weaponIndex = 0;
      this.weaponCode = 0;
      this.weaponVariant = 0;
      this.primaryIndex = undefined;
      this.secondaryIndex = undefined;
      this.dmgOverTime = {};
      this.noMovTimer = 0;
      this.maxXP = 300;
      this.XP = 0;
      this.age = 1;
      this.kills = 0;
      this.upgrAge = 2;
      this.upgradePoints = 0;
      this.x = 0;
      this.y = 0;
      this.oldXY = {
        x: 0,
        y: 0
      };
      this.zIndex = 0;
      this.xVel = 0;
      this.yVel = 0;
      this.slowMult = 1;
      this.dir = 0;
      this.dirPlus = 0;
      this.targetDir = 0;
      this.targetAngle = 0;
      this.maxHealth = 100;
      this.health = this.maxHealth;
      this.oldHealth = this.maxHealth;
      this.damaged = 0;
      this.scale = d.playerScale;
      this.speed = d.playerSpeed;
      this.resetMoveDir();
      this.resetResources(a);
      this.items = [0, 3, 6, 10];
      this.weapons = [0];
      this.shootCount = 0;
      this.weaponXP = [];
      this.reloads = {
        0: 0,
        1: 0,
        2: 0,
        3: 0,
        4: 0,
        5: 0,
        6: 0,
        7: 0,
        8: 0,
        9: 0,
        10: 0,
        11: 0,
        12: 0,
        13: 0,
        14: 0,
        15: 0,
        53: 0
      };
      this.bowThreat = {
        9: 0,
        12: 0,
        13: 0,
        15: 0
      };
      this.damageThreat = 0;
      this.inTrap = false;
      this.canEmpAnti = false;
      this.empAnti = false;
      this.soldierAnti = false;
      this.poisonTick = 0;
      this.bullTick = 0;
      this.setPoisonTick = false;
      this.setBullTick = false;
      this.antiTimer = 2;
    };
    this.resetMoveDir = function () {
      this.moveDir = undefined;
    };
    this.resetResources = function (a) {
      for (let b = 0; b < d.resourceTypes.length; ++b) {
        this[d.resourceTypes[b]] = a ? 100 : 0;
      }
    };
    this.getItemType = function (a) {
      let b = this.items.findIndex(b => b == a);
      if (b != -1) {
        return b;
      } else {
        return j.checkItem.index(a, this.items);
      }
    };
    this.setData = function (a) {
      this.id = a[0];
      this.sid = a[1];
      this.name = a[2];
      this.x = a[3];
      this.y = a[4];
      this.dir = a[5];
      this.health = a[6];
      this.maxHealth = a[7];
      this.scale = a[8];
      this.skinColor = a[9];
    };
    this.updateTimer = function () {
      this.bullTimer -= 1;
      if (this.bullTimer <= 0) {
        this.setBullTick = false;
        this.bullTick = P.tick - 1;
        this.bullTimer = d.serverUpdateRate;
      }
      this.poisonTimer -= 1;
      if (this.poisonTimer <= 0) {
        this.setPoisonTick = false;
        this.poisonTick = P.tick - 1;
        this.poisonTimer = d.serverUpdateRate;
      }
    };
    this.update = function (a) {
      if (this.sid == ka) {
        this.circleRad = parseInt(c("circleRad").value) || 0;
        this.circleRadSpd = parseFloat(c("radSpeed").value) || 0;
        this.cAngle += this.circleRadSpd;
      }
      if (this.active) {
        let a = {
          skin: qa(k, this.skinIndex),
          tail: qa(l, this.tailIndex)
        };
        let b = (this.buildIndex >= 0 ? 0.5 : 1) * (j.weapons[this.weaponIndex].spdMult || 1) * (a.skin ? a.skin.spdMult || 1 : 1) * (a.tail ? a.tail.spdMult || 1 : 1) * (this.y <= d.snowBiomeTop ? a.skin && a.skin.coldM ? 1 : d.snowSpeed : 1) * this.slowMult;
        this.maxSpeed = b;
      }
    };
    let p = 0;
    let q = 0;
    this.animate = function (a) {
      if (this.animTime > 0) {
        this.animTime -= a;
        if (this.animTime <= 0) {
          this.animTime = 0;
          this.dirPlus = 0;
          p = 0;
          q = 0;
        } else if (q == 0) {
          p += a / (this.animSpeed * d.hitReturnRatio);
          this.dirPlus = e.lerp(0, this.targetAngle, Math.min(1, p));
          if (p >= 1) {
            p = 1;
            q = 1;
          }
        } else {
          p -= a / (this.animSpeed * (1 - d.hitReturnRatio));
          this.dirPlus = e.lerp(0, this.targetAngle, Math.max(0, p));
        }
      }
    };
    this.startAnim = function (a, b) {
      this.animTime = this.animSpeed = j.weapons[b].speed;
      this.targetAngle = a ? -d.hitAngle : -Math.PI;
      p = 0;
      q = 0;
    };
    this.canSee = function (a) {
      if (!a) {
        return false;
      }
      let b = Math.abs(a.x - this.x) - a.scale;
      let c = Math.abs(a.y - this.y) - a.scale;
      return b <= d.maxScreenWidth / 2 * 1.3 && c <= d.maxScreenHeight / 2 * 1.3;
    };
    this.judgeShame = function () {
      this.lastshamecount = this.shameCount;
      if (this.oldHealth < this.health) {
        if (this.hitTime) {
          let a = P.tick - this.hitTime;
          this.lastHit = P.tick;
          this.hitTime = 0;
          if (a < 2) {
            this.shameCount++;
          } else {
            this.shameCount = Math.max(0, this.shameCount - 2);
          }
        }
      } else if (this.oldHealth > this.health) {
        this.hitTime = P.tick;
      }
    };
    this.addShameTimer = function () {
      this.shameCount = 0;
      this.shameTimer = 30;
      let a = setInterval(() => {
        this.shameTimer--;
        if (this.shameTimer <= 0) {
          clearInterval(a);
        }
      }, 1000);
    };
    this.isTeam = function (a) {
      return this == a || this.team && this.team == a.team;
    };
    this.findAllianceBySid = function (a) {
      if (this.team) {
        return da.find(b => b === a);
      } else {
        return null;
      }
    };
    this.checkCanInsta = function (a) {
      let b = 0;
      if (this.alive && lb) {
        let c = {
          weapon: this.weapons[0],
          variant: this.primaryVariant,
          dmg: this.weapons[0] == undefined ? 0 : j.weapons[this.weapons[0]].dmg
        };
        let e = {
          weapon: this.weapons[1],
          variant: this.secondaryVariant,
          dmg: this.weapons[1] == undefined ? 0 : j.weapons[this.weapons[1]].Pdmg
        };
        let f = this.skins[7] && !a ? 1.5 : 1;
        let g = c.variant != undefined ? d.weaponVariants[c.variant].val : 1;
        if (c.weapon != undefined && this.reloads[c.weapon] == 0) {
          b += c.dmg * g * f;
        }
        if (e.weapon != undefined && this.reloads[e.weapon] == 0) {
          b += e.dmg;
        }
        if (this.skins[53] && this.reloads[53] <= (ja.weapons[1] == 10 ? 0 : P.tickRate) && oa.skinIndex != 22) {
          b += 25;
        }
        b *= oa.skinIndex == 6 ? 0.75 : 1;
        return b;
      }
      return 0;
    };
    this.manageReload = function () {
      if (this.shooting[53]) {
        this.shooting[53] = 0;
        this.reloads[53] = 2500 - P.tickRate;
      } else if (this.reloads[53] > 0) {
        this.reloads[53] = Math.max(0, this.reloads[53] - P.tickRate);
      }
      if (this.reloads[this.weaponIndex] <= 1000 / 9) {
        let a = this.weaponIndex;
        let b = fa.filter(a => (a.active || a.alive) && a.health < a.maxHealth && a.group !== undefined && e.getDist(a, ja, 0, 2) <= j.weapons[ja.weaponIndex].range + a.scale);
        for (let c = 0; c < b.length; c++) {
          let e = b[c];
          let f = j.weapons[a].dmg * d.weaponVariants[la[(a < 9 ? "prima" : "seconda") + "ryVariant"]].val * (j.weapons[a].sDmg || 1) * 3.3;
          let g = j.weapons[a].dmg * d.weaponVariants[la[(a < 9 ? "prima" : "seconda") + "ryVariant"]].val * (j.weapons[a].sDmg || 1);
          if (e.health - g <= 0 && oa.length) {
            Qb(oa.dist2 < oa.scale * 1.8 + 50 ? 4 : 2, kd(e, ja) + Math.PI);
          }
        }
      }
      if (this.gathering || this.shooting[1]) {
        if (this.gathering) {
          this.gathering = 0;
          this.reloads[this.gatherIndex] = j.weapons[this.gatherIndex].speed * (this.skinIndex == 20 ? 0.78 : 1);
          this.attacked = true;
        }
        if (this.shooting[1]) {
          this.shooting[1] = 0;
          this.reloads[this.shootIndex] = j.weapons[this.shootIndex].speed * (this.skinIndex == 20 ? 0.78 : 1);
          this.attacked = true;
        }
      } else {
        this.attacked = false;
        if (this.buildIndex < 0) {
          if (this.reloads[this.weaponIndex] > 0) {
            this.reloads[this.weaponIndex] = Math.max(0, this.reloads[this.weaponIndex] - 110);
            if (this == ja) {
              if (c("weaponGrind").checked) {
                for (let a = 0; a < Math.PI * 2; a += Math.PI / 2) {
                  Rb(ja.getItemType(22), a);
                }
              }
            }
            if (this.reloads[this.primaryIndex] == 0 && this.reloads[this.weaponIndex] == 0) {
              this.antiBull++;
              P.tickBase(() => {
                this.antiBull = 0;
              }, 1);
            }
          }
        }
      }
    };
    this.addDamageThreat = function (a) {
      let b = {
        weapon: this.primaryIndex,
        variant: this.primaryVariant
      };
      b.dmg = b.weapon == undefined ? 45 : j.weapons[b.weapon].dmg;
      let c = {
        weapon: this.secondaryIndex,
        variant: this.secondaryVariant
      };
      c.dmg = c.weapon == undefined ? 75 : j.weapons[c.weapon].Pdmg;
      let e = 1.5;
      let f = b.variant != undefined ? d.weaponVariants[b.variant].val : 1.18;
      let g = c.variant != undefined ? [9, 12, 13, 15].includes(c.weapon) ? 1 : d.weaponVariants[c.variant].val : 1.18;
      if (b.weapon == undefined ? true : this.reloads[b.weapon] == 0) {
        this.damageThreat += b.dmg * f * e;
      }
      if (c.weapon == undefined ? true : this.reloads[c.weapon] == 0) {
        this.damageThreat += c.dmg * g;
      }
      if (this.reloads[53] <= P.tickRate) {
        this.damageThreat += 25;
      }
      this.damageThreat *= a.skinIndex == 6 ? 0.75 : 1;
      if (!this.isTeam(a)) {
        if (this.dist2 <= 300) {
          a.damageThreat += this.damageThreat;
        }
      }
    };
  }
}
;
function Ib(a) {
  ja.reloads[a] = 0;
  U("H", a);
}
function Jb(a, b) {
  U("c", 0, a, b);
}
function Kb(a, b) {
  U("c", 1, a, b);
}
function Lb(a, b) {
  let c = ja.skins[6] ? 6 : 0;
  if (ja.alive && lb) {
    if (b == 0) {
      if (ja.skins[a]) {
        if (ja.latestSkin != a) {
          U("c", 0, a, 0);
        }
      } else if (q.autoBuyEquip) {
        let b = qa(hc, a);
        if (b) {
          if (ja.points >= b.price) {
            U("c", 1, a, 0);
            U("c", 0, a, 0);
          } else if (ja.latestSkin != c) {
            U("c", 0, c, 0);
          }
        } else if (ja.latestSkin != c) {
          U("c", 0, c, 0);
        }
      } else if (ja.latestSkin != c) {
        U("c", 0, c, 0);
      }
    } else if (b == 1) {
      if (K && a != 11 && a != 0) {
        if (ja.latestTail != 0) {
          U("c", 0, 0, 1);
        }
        return;
      }
      if (ja.tails[a]) {
        if (ja.latestTail != a) {
          U("c", 0, a, 1);
        }
      } else if (q.autoBuyEquip) {
        let b = qa(ic, a);
        if (b) {
          if (ja.points >= b.price) {
            U("c", 1, a, 1);
            U("c", 0, a, 1);
          } else if (ja.latestTail != 0) {
            U("c", 0, 0, 1);
          }
        } else if (ja.latestTail != 0) {
          U("c", 0, 0, 1);
        }
      } else if (ja.latestTail != 0) {
        U("c", 0, 0, 1);
      }
    }
  }
}
function Mb(a, b) {
  U("G", a, b);
}
function Nb(a, b) {
  if (!b) {
    ja.weaponCode = a;
  }
  U("G", a, 1);
}
function Ob() {
  U("K", 1, 1);
}
function Pb(a, b) {
  U("d", a, b, 1);
}
function Qb(a, b, d) {
  try {
    if (a == undefined) {
      return;
    }
    let e = ec.list[ja.items[a]];
    let g = ja.scale + e.scale + (e.placeOffset || 0);
    let h = ja.x2 + g * Math.cos(b);
    let i = ja.y2 + g * Math.sin(b);
    if (ja.alive && lb && ja.itemCounts[e.group.id] == undefined ? true : ja.itemCounts[e.group.id] < (f.isSandbox ? 299 : e.group.limit ? e.group.limit : 99)) {
      Mb(ja.items[a]);
      Pb(1, b);
      Nb(ja.weaponCode, 1);
      if (d && c("placeVis").checked) {
        tb.push({
          x: h,
          y: i,
          name: e.name,
          scale: e.scale,
          dir: b
        });
        P.tickBase(() => {
          tb.shift();
        }, 1);
      }
    }
  } catch (a) {}
}
function Rb(a, b) {
  try {
    if (a == undefined) {
      return;
    }
    let c = ec.list[ja.items[a]];
    let d = ja.scale + c.scale + (c.placeOffset || 0);
    let e = ja.x2 + d * Math.cos(b);
    let f = ja.y2 + d * Math.sin(b);
    if (fc.checkItemLocation(e, f, c.scale, 0.6, c.id, false, ja)) {
      Qb(a, b, 1);
    }
  } catch (a) {}
}
function Sb() {
  if (ja.latestSkin == 6) {
    return 0.75;
  } else {
    return 1;
  }
}
function Tb() {
  if (ja.health == 100) {
    return 0;
  }
  if (ja.skinIndex != 45 && ja.skinIndex != 56) {
    return Math.ceil((100 - ja.health) / ec.list[ja.items[0]].healing);
  }
  return 0;
}
function Ub(a) {
  let b = ma.filter(a => {
    let b = {
      three: a.attacked
    };
    return b.three;
  });
  return b;
}
function Vb() {
  for (let a = 0; a < Tb(); a++) {
    Qb(0, Oc());
  }
}
function Wb(a) {
  pa.antiSync = true;
  let b = setInterval(() => {
    if (ja.shameCount < 5) {
      Qb(0, Oc());
    }
  }, 75);
  setTimeout(() => {
    clearInterval(b);
    setTimeout(() => {
      pa.antiSync = false;
    }, P.tickRate);
  }, P.tickRate);
}
function Xb(a, b) {
  if (ja.y2 >= f.mapScale / 2 - f.riverWidth / 2 && ja.y2 <= f.mapScale / 2 + f.riverWidth / 2) {
    if (b) {
      return 31;
    }
    Lb(31, 0);
  } else if (ja.y2 <= f.snowBiomeTop) {
    if (b) {
      if (a && ja.moveDir == undefined) {
        return 6;
      } else {
        return 15;
      }
    }
    Lb(a && ja.moveDir == undefined ? 6 : 15, 0);
  } else {
    if (b) {
      if (a && ja.moveDir == undefined) {
        return 6;
      } else {
        return 12;
      }
    }
    Lb(a && ja.moveDir == undefined ? 6 : 12, 0);
  }
  if (b) {
    return 0;
  }
}
function Yb(a) {
  Lb(a && ja.moveDir == undefined ? 0 : 11, 1);
}
class Zb {
  constructor(a, b) {
    this.dist = 0;
    this.aim = 0;
    this.inTrap = false;
    this.replaced = false;
    this.antiTrapped = false;
    this.info = {};
    this.notFast = function () {
      return ja.weapons[1] == 10 && (this.info.health > b.weapons[ja.weapons[0]].dmg || ja.weapons[0] == 5);
    };
    this.testCanPlace = function (c, d = undefined, e = undefined, g = undefined, h, i, j) {
      if (d === undefined) d = -(Math.PI / 2);
      if (e === undefined) e = Math.PI / 2;
      if (g === undefined) g = Math.PI / 18;
      try {
        let k = b.list[ja.items[c]];
        let l = ja.scale + k.scale + (k.placeOffset || 0);
        let m = {
          attempts: 0,
          placed: 0
        };
        let n = [];
        fa.forEach(a => {
          n.push({
            x: a.x,
            y: a.y,
            active: a.active,
            blocker: a.blocker,
            scale: a.scale,
            isItem: a.isItem,
            type: a.type,
            colDiv: a.colDiv,
            getScale: function (a, b) {
              a = a || 1;
              return this.scale * (this.isItem || this.type == 2 || this.type == 3 || this.type == 4 ? 1 : a * 0.6) * (b ? 1 : this.colDiv);
            }
          });
        });
        for (let b = d; b < e; b += g) {
          m.attempts++;
          let d = h + b;
          let e = ja.x2 + l * Math.cos(d);
          let g = ja.y2 + l * Math.sin(d);
          let o = n.find(b => b.active && a.getDistance(e, g, b.x, b.y) < k.scale + (b.blocker ? b.blocker : b.getScale(0.6, b.isItem)));
          if (o) {
            continue;
          }
          if (k.id != 18 && g >= f.mapScale / 2 - f.riverWidth / 2 && g <= f.mapScale / 2 + f.riverWidth / 2) {
            continue;
          }
          if (!i && j) {
            if (j.inTrap) {
              if (a.getAngleDist(oa.aim2 + Math.PI, d + Math.PI) <= Math.PI * 1.3) {
                Qb(2, d, 1);
              } else if (ja.items[4] == 15) {
                Qb(4, d, 1);
              }
            } else if (a.getAngleDist(oa.aim2, d) <= f.gatherAngle / 2.6) {
              Qb(2, d, 1);
            } else if (ja.items[4] == 15) {
              Qb(4, d, 1);
            }
          } else {
            Qb(c, d, 1);
          }
          n.push({
            x: e,
            y: g,
            active: true,
            blocker: k.blocker,
            scale: k.scale,
            isItem: true,
            type: null,
            colDiv: k.colDiv,
            getScale: function () {
              return this.scale;
            }
          });
          if (a.getAngleDist(oa.aim2, d) <= 1) {
            m.placed++;
          }
        }
        if (m.placed > 0 && i && k.dmg) {
          if (oa.dist2 <= b.weapons[ja.weapons[0]].range + ja.scale * 1.8 && q.spikeTick) {
            nc.canSpikeTick = true;
          }
        }
      } catch (a) {}
    };
    this.checkSpikeTick = function () {
      try {
        if (![3, 4, 5].includes(oa.primaryIndex)) {
          return false;
        }
        if (c("safeAntiSpikeTick").checked || pa.autoPush ? false : oa.primaryIndex == undefined ? true : oa.reloads[oa.primaryIndex] > P.tickRate) {
          return false;
        }
        if (oa.dist2 <= b.weapons[oa.primaryIndex || 5].range + oa.scale * 1.8) {
          let c = b.list[9];
          let d = oa.scale + c.scale + (c.placeOffset || 0);
          let e = 0;
          let g = {
            attempts: 0,
            block: "unblocked"
          };
          for (let b = -1; b <= 1; b += 1 / 10) {
            g.attempts++;
            let h = a.getDirect(ja, oa, 2, 2) + b;
            let i = oa.x2 + d * Math.cos(h);
            let j = oa.y2 + d * Math.sin(h);
            let k = fa.find(b => b.active && a.getDistance(i, j, b.x, b.y) < c.scale + (b.blocker ? b.blocker : b.getScale(0.6, b.isItem)));
            if (k) {
              continue;
            }
            if (j >= f.mapScale / 2 - f.riverWidth / 2 && j <= f.mapScale / 2 + f.riverWidth / 2) {
              continue;
            }
            e++;
            g.block = "blocked";
            break;
          }
          if (e) {
            pa.anti0Tick = 1;
            return true;
          }
        }
      } catch (a) {
        return null;
      }
      return false;
    };
    function d(a, b) {
      try {
        return Math.hypot((b.y2 || b.y) - (a.y2 || a.y), (b.x2 || b.x) - (a.x2 || a.x));
      } catch (a) {
        return Infinity;
      }
    }
    this.protect = function (a) {
      if (!q.antiTrap) {
        return;
      }
      if (d(oa, ja) > d(oa, mc.info)) {
        for (let a = -(Math.PI / 2); a < Math.PI / 2; a += Math.PI / 18) {
          Rb(2, oa.aim2 + a);
        }
      } else if (d(oa, mc.info) > d(oa, ja)) {
        for (let a = -(Math.PI / 2); a < Math.PI / 2; a += Math.PI / 18) {
          Rb(4, oa.aim2 + a);
        }
      }
    };
    this.autoPlace = function () {
      if (ma.length && q.autoPlace && !nc.ticking) {
        if (P.tick % (Math.max(1, parseInt(c("autoPlaceTick").value)) || 1) === 0) {
          if (fa.length) {
            let b = {
              inTrap: false
            };
            let c = fa.filter(b => b.trap && b.active && b.isTeamObject(ja) && a.getDist(b, oa, 0, 2) <= oa.scale + b.getScale() + 5).sort(function (b, c) {
              return a.getDist(b, oa, 0, 2) - a.getDist(c, oa, 0, 2);
            })[0];
            if (c) {
              b.inTrap = true;
            } else {
              b.inTrap = false;
            }
            if (oa.dist3 <= 450) {
              if (oa.dist3 <= 200) {
                this.testCanPlace(4, 0, Math.PI * 2, Math.PI / 24, oa.aim2, 0, {
                  inTrap: b.inTrap
                });
              } else if (ja.items[4] == 15) {
                this.testCanPlace(4, 0, Math.PI * 2, Math.PI / 24, oa.aim2);
              }
            }
          } else if (oa.dist3 <= 450) {
            if (ja.items[4] == 15) {
              this.testCanPlace(4, 0, Math.PI * 2, Math.PI / 24, oa.aim2);
            }
          }
        }
      }
    };
    this.replacer = function (d) {
      if (!d || !q.autoReplace) {
        return;
      }
      if (!lb) {
        return;
      }
      if (this.antiTrapped) {
        return;
      }
      P.tickBase(() => {
        let e = a.getDirect(d, ja, 0, 2);
        let f = a.getDist(d, ja, 0, 2);
        if (c("weaponGrind").checked && f <= b.weapons[ja.weaponIndex].range + ja.scale) {
          return;
        }
        if (f <= 400 && oa.dist2 <= 400) {
          let a = this.checkSpikeTick();
          if (!a && oa.dist3 <= b.weapons[oa.primaryIndex || 5].range + oa.scale * 1.8) {
            this.testCanPlace(2, 0, Math.PI * 2, Math.PI / 24, e, 1);
          } else if (ja.items[4] == 15) {
            this.testCanPlace(4, 0, Math.PI * 2, Math.PI / 24, e, 1);
          }
          this.replaced = true;
        }
      }, 1);
    };
  }
}
;
class $b {
  constructor() {
    this.wait = false;
    this.can = false;
    this.isTrue = false;
    this.nobull = false;
    this.ticking = false;
    this.canSpikeTick = false;
    this.startTick = false;
    this.readyTick = false;
    this.canCounter = false;
    this.revTick = false;
    this.syncHit = false;
    this.changeType = function (a) {
      this.wait = false;
      this.isTrue = true;
      pa.autoAim = true;
      let b = [a];
      let c = oa.backupNobull;
      oa.backupNobull = false;
      if (a == "rev") {
        Nb(ja.weapons[1]);
        Lb(53, 0);
        Ob();
        setTimeout(() => {
          Nb(ja.weapons[0]);
          Lb(7, 0);
          setTimeout(() => {
            Ob();
            this.isTrue = false;
            pa.autoAim = false;
          }, 225);
        }, 100);
      } else if (a == "nobull") {
        Nb(ja.weapons[0]);
        Lb(7, 0);
        Ob();
        setTimeout(() => {
          Nb(ja.weapons[1]);
          Lb(ja.reloads[53] == 0 ? 53 : 6, 0);
          setTimeout(() => {
            Ob();
            this.isTrue = false;
            pa.autoAim = false;
          }, 255);
        }, 105);
      } else if (a == "normal") {
        Nb(ja.weapons[0]);
        Lb(7, 0);
        Ob();
        setTimeout(() => {
          Nb(ja.weapons[1]);
          Lb(ja.reloads[53] == 0 ? 53 : 6, 0);
          setTimeout(() => {
            Ob();
            this.isTrue = false;
            pa.autoAim = false;
          }, 255);
        }, 100);
      } else {
        setTimeout(() => {
          this.isTrue = false;
          pa.autoAim = false;
        }, 50);
      }
    };
    this.spikeTickType = function () {
      this.isTrue = true;
      pa.autoAim = true;
      Nb(ja.weapons[0]);
      Lb(7, 0);
      Ob();
      P.tickBase(() => {
        Nb(ja.weapons[0]);
        Lb(53, 0);
        P.tickBase(() => {
          Ob();
          this.isTrue = false;
          pa.autoAim = false;
        }, 1);
      }, 1);
    };
    this.counterType = function () {
      this.isTrue = true;
      pa.autoAim = true;
      Nb(ja.weapons[0]);
      Lb(7, 0);
      Ob();
      P.tickBase(() => {
        Nb(ja.weapons[0]);
        Lb(53, 0);
        P.tickBase(() => {
          Ob();
          this.isTrue = false;
          pa.autoAim = false;
        }, 1);
      }, 1);
    };
    this.rangeType = function (a) {
      this.isTrue = true;
      pa.autoAim = true;
      if (a == "ageInsta") {
        pa.ageInsta = false;
        if (ja.items[5] == 18) {
          Qb(5, oa.aim2);
        }
        U("a", undefined, 1);
        Lb(22, 0);
        Lb(21, 1);
        P.tickBase(() => {
          Nb(ja.weapons[1]);
          Lb(53, 0);
          Lb(21, 1);
          Ob();
          P.tickBase(() => {
            Ib(12);
            Nb(ja.weapons[1]);
            Lb(53, 0);
            Lb(21, 1);
            P.tickBase(() => {
              Ib(15);
              Nb(ja.weapons[1]);
              Lb(53, 0);
              Lb(21, 1);
              P.tickBase(() => {
                Ob();
                this.isTrue = false;
                pa.autoAim = false;
              }, 1);
            }, 1);
          }, 1);
        }, 1);
      } else {
        Nb(ja.weapons[1]);
        if (ja.reloads[53] == 0 && oa.dist2 <= 700 && oa.skinIndex != 22) {
          Lb(53, 0);
        } else {
          Lb(20, 0);
        }
        Lb(11, 1);
        Ob();
        P.tickBase(() => {
          Ob();
          this.isTrue = false;
          pa.autoAim = false;
        }, 1);
      }
    };
    this.oneTickType = function () {
      this.isTrue = true;
      pa.autoAim = true;
      Nb(ja.weapons[1]);
      Lb(53, 0);
      Lb(11, 1);
      U("a", oa.aim2, 1);
      if (ja.weapons[1] == 15) {
        pa.revAim = true;
        Ob();
      }
      P.tickBase(() => {
        pa.revAim = false;
        Nb(ja.weapons[0]);
        Lb(7, 0);
        Lb(19, 1);
        U("a", oa.aim2, 1);
        if (ja.weapons[1] != 15) {
          Ob();
        }
        P.tickBase(() => {
          Ob();
          this.isTrue = false;
          pa.autoAim = false;
          U("a", undefined, 1);
        }, 1);
      }, 1);
    };
    this.threeOneTickType = function () {
      this.isTrue = true;
      pa.autoAim = true;
      Nb(ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0]);
      Xb();
      Lb(11, 1);
      U("a", oa.aim2, 1);
      P.tickBase(() => {
        Nb(ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0]);
        Lb(53, 0);
        Lb(11, 1);
        U("a", oa.aim2, 1);
        P.tickBase(() => {
          Nb(ja.weapons[0]);
          Lb(7, 0);
          Lb(19, 1);
          Ob();
          U("a", oa.aim2, 1);
          P.tickBase(() => {
            Ob();
            this.isTrue = false;
            pa.autoAim = false;
            U("a", undefined, 1);
          }, 1);
        }, 1);
      }, 1);
    };
    this.kmTickType = function () {
      this.isTrue = true;
      pa.autoAim = true;
      pa.revAim = true;
      Nb(ja.weapons[1]);
      Lb(53, 0);
      Lb(11, 1);
      Ob();
      U("a", oa.aim2, 1);
      P.tickBase(() => {
        pa.revAim = false;
        Nb(ja.weapons[0]);
        Lb(7, 0);
        Lb(19, 1);
        U("a", oa.aim2, 1);
        P.tickBase(() => {
          Ob();
          this.isTrue = false;
          pa.autoAim = false;
          U("a", undefined, 1);
        }, 1);
      }, 1);
    };
    this.boostTickType = function () {
      this.isTrue = true;
      pa.autoAim = true;
      Xb();
      Lb(11, 1);
      U("a", oa.aim2, 1);
      P.tickBase(() => {
        if (ja.weapons[1] == 15) {
          pa.revAim = true;
        }
        Nb(ja.weapons[[9, 12, 13, 15].includes(ja.weapons[1]) ? 1 : 0]);
        Lb(53, 0);
        Lb(11, 1);
        if ([9, 12, 13, 15].includes(ja.weapons[1])) {
          Ob();
        }
        U("a", oa.aim2, 1);
        Qb(4, oa.aim2);
        P.tickBase(() => {
          pa.revAim = false;
          Nb(ja.weapons[0]);
          Lb(7, 0);
          Lb(19, 1);
          if (![9, 12, 13, 15].includes(ja.weapons[1])) {
            Ob();
          }
          U("a", oa.aim2, 1);
          P.tickBase(() => {
            Ob();
            this.isTrue = false;
            pa.autoAim = false;
            U("a", undefined, 1);
          }, 1);
        }, 1);
      }, 1);
    };
    this.gotoGoal = function (a, b) {
      let c = a => a * f.playerScale;
      let d = {
        a: a - b,
        b: a + b,
        c: a - c(1),
        d: a + c(1),
        e: a - c(2),
        f: a + c(2),
        g: a - c(4),
        h: a + c(4)
      };
      let e = function (a, b) {
        if (ja.y2 >= f.mapScale / 2 - f.riverWidth / 2 && ja.y2 <= f.mapScale / 2 + f.riverWidth / 2 && b == 0) {
          Lb(31, 0);
        } else {
          Lb(a, b);
        }
      };
      if (ma.length) {
        let a = oa.dist2;
        this.ticking = true;
        if (a >= d.a && a <= d.b) {
          e(22, 0);
          e(11, 1);
          if (ja.weaponIndex != ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0] || ja.buildIndex > -1) {
            Nb(ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0]);
          }
          return {
            dir: undefined,
            action: 1
          };
        } else {
          if (a < d.a) {
            if (a >= d.g) {
              if (a >= d.e) {
                if (a >= d.c) {
                  e(40, 0);
                  e(10, 1);
                  if (q.slowOT) {
                    if (ja.buildIndex != ja.items[1]) {
                      Mb(ja.items[1]);
                    }
                  } else if (ja.weaponIndex != ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0] || ja.buildIndex > -1) {
                    Nb(ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0]);
                  }
                } else {
                  e(22, 0);
                  e(19, 1);
                  if (ja.weaponIndex != ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0] || ja.buildIndex > -1) {
                    Nb(ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0]);
                  }
                }
              } else {
                e(6, 0);
                e(12, 1);
                if (ja.weaponIndex != ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0] || ja.buildIndex > -1) {
                  Nb(ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0]);
                }
              }
            } else {
              Xb();
              e(11, 1);
              if (ja.weaponIndex != ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0] || ja.buildIndex > -1) {
                Nb(ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0]);
              }
            }
            return {
              dir: oa.aim2 + Math.PI,
              action: 0
            };
          } else if (a > d.b) {
            if (a <= d.h) {
              if (a <= d.f) {
                if (a <= d.d) {
                  e(40, 0);
                  e(9, 1);
                  if (q.slowOT) {
                    if (ja.buildIndex != ja.items[1]) {
                      Mb(ja.items[1]);
                    }
                  } else if (ja.weaponIndex != ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0] || ja.buildIndex > -1) {
                    Nb(ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0]);
                  }
                } else {
                  e(22, 0);
                  e(19, 1);
                  if (ja.weaponIndex != ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0] || ja.buildIndex > -1) {
                    Nb(ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0]);
                  }
                }
              } else {
                e(6, 0);
                e(12, 1);
                if (ja.weaponIndex != ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0] || ja.buildIndex > -1) {
                  Nb(ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0]);
                }
              }
            } else {
              Xb();
              e(11, 1);
              if (ja.weaponIndex != ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0] || ja.buildIndex > -1) {
                Nb(ja.weapons[[10, 14].includes(ja.weapons[1]) ? 1 : 0]);
              }
            }
            return {
              dir: oa.aim2,
              action: 0
            };
          }
          return {
            dir: undefined,
            action: 0
          };
        }
      } else {
        this.ticking = false;
        return {
          dir: undefined,
          action: 0
        };
      }
    };
    this.bowMovement = function () {
      let a = this.gotoGoal(685, 3);
      if (a.action) {
        if (ja.reloads[53] == 0 && !this.isTrue) {
          this.rangeType("ageInsta");
        } else {
          U("a", a.dir, 1);
        }
      } else {
        U("a", a.dir, 1);
      }
    };
    this.tickMovement = function () {
      let a = this.gotoGoal([10, 14].includes(ja.weapons[1]) && ja.y2 > f.snowBiomeTop ? 240 : ja.weapons[1] == 15 ? 250 : ja.y2 <= f.snowBiomeTop ? [10, 14].includes(ja.weapons[1]) ? 270 : 265 : 275, 3);
      if (a.action) {
        if (![6, 22].includes(oa.skinIndex) && ja.reloads[53] == 0 && !this.isTrue) {
          if ([10, 14].includes(ja.weapons[1]) && ja.y2 > f.snowBiomeTop || ja.weapons[1] == 15) {
            this.oneTickType();
          } else {
            this.threeOneTickType();
          }
        } else {
          U("a", a.dir, 1);
        }
      } else {
        U("a", a.dir, 1);
      }
    };
    this.kmTickMovement = function () {
      let a = this.gotoGoal(240, 3);
      if (a.action) {
        if (oa.skinIndex != 22 && ja.reloads[53] == 0 && !this.isTrue && (P.tick - oa.poisonTick) % f.serverUpdateRate == 8) {
          this.kmTickType();
        } else {
          U("a", a.dir, 1);
        }
      } else {
        U("a", a.dir, 1);
      }
    };
    this.boostTickMovement = function () {
      let a = ja.weapons[1] == 9 ? 365 : ja.weapons[1] == 12 ? 380 : ja.weapons[1] == 13 ? 390 : ja.weapons[1] == 15 ? 365 : 370;
      let b = ja.weapons[1] == 9 ? 2 : ja.weapons[1] == 12 ? 1.5 : ja.weapons[1] == 13 ? 1.5 : ja.weapons[1] == 15 ? 2 : 3;
      let c = this.gotoGoal(a, b);
      if (c.action) {
        if (ja.reloads[53] == 0 && !this.isTrue) {
          this.boostTickType();
        } else {
          U("a", c.dir, 1);
        }
      } else {
        U("a", c.dir, 1);
      }
    };
    this.perfCheck = function (a, b) {
      if (b.weaponIndex == 11 && dc.getAngleDist(b.aim2 + Math.PI, b.d2) <= f.shieldAngle) {
        return false;
      }
      if (![9, 12, 13, 15].includes(ja.weapons[1])) {
        return true;
      }
      let c = {
        x: b.x2 + Math.cos(b.aim2 + Math.PI) * 70,
        y: b.y2 + Math.sin(b.aim2 + Math.PI) * 70
      };
      if (dc.lineInRect(a.x2 - a.scale, a.y2 - a.scale, a.x2 + a.scale, a.y2 + a.scale, c.x, c.y, c.x, c.y)) {
        return true;
      }
      let d = aa.filter(a => a.visible).find(a => {
        if (dc.lineInRect(a.x2 - a.scale, a.y2 - a.scale, a.x2 + a.scale, a.y2 + a.scale, c.x, c.y, c.x, c.y)) {
          return true;
        }
      });
      if (d) {
        return false;
      }
      d = fa.filter(a => a.active).find(a => {
        let b = a.getScale();
        if (!a.ignoreCollision && dc.lineInRect(a.x - b, a.y - b, a.x + b, a.y + b, c.x, c.y, c.x, c.y)) {
          return true;
        }
      });
      if (d) {
        return false;
      }
      return true;
    };
  }
}
;
class _b {
  constructor(a, b) {
    this.hat = function () {
      a.forEach(a => {
        let b = qa(hc, a);
        if (b && !ja.skins[a] && ja.points >= b.price) {
          U("c", 1, a, 0);
        }
      });
    };
    this.acc = function () {
      b.forEach(a => {
        let b = qa(ic, a);
        if (b && !ja.tails[a] && ja.points >= b.price) {
          U("c", 1, a, 1);
        }
      });
    };
  }
}
;
class ac {
  constructor() {
    this.sb = function (a) {
      a(3);
      a(17);
      a(31);
      a(23);
      a(9);
      a(38);
    };
    this.kh = function (a) {
      a(3);
      a(17);
      a(31);
      a(23);
      a(10);
      a(38);
      a(4);
      a(25);
    };
    this.pb = function (a) {
      a(5);
      a(17);
      a(32);
      a(23);
      a(9);
      a(38);
    };
    this.ph = function (a) {
      a(5);
      a(17);
      a(32);
      a(23);
      a(10);
      a(38);
      a(28);
      a(25);
    };
    this.db = function (a) {
      a(7);
      a(17);
      a(31);
      a(23);
      a(9);
      a(34);
    };
    this.km = function (a) {
      a(7);
      a(17);
      a(31);
      a(23);
      a(10);
      a(38);
      a(4);
      a(15);
    };
  }
}
;
class bc {
  constructor(a) {
    this.calcDmg = function (a, b) {
      return a * b;
    };
    this.getAllDamage = function (a) {
      return [this.calcDmg(a, 0.75), a, this.calcDmg(a, 1.125), this.calcDmg(a, 1.5)];
    };
    this.weapons = [];
    for (let b = 0; b < a.weapons.length; b++) {
      let c = a.weapons[b];
      let d = c.name.split(" ").length <= 1 ? c.name : c.name.split(" ")[0] + "_" + c.name.split(" ")[1];
      this.weapons.push(this.getAllDamage(b > 8 ? c.Pdmg : c.dmg));
      this[d] = this.weapons[b];
    }
  }
}
let cc = [];
let dc = new ub();
let ec = new yb();
let fc = new zb(xb, ea, dc, f);
let gc = new Bb();
let hc = gc.hats;
let ic = gc.accessories;
let jc = new Cb(Ab, ga, ba, aa, fc, ec, f, dc);
let kc = new Db(aa, Eb, ba, ec, null, f, dc);
let lc = new wb();
let mc = new Zb(dc, ec);
let nc = new $b();
let oc = new _b([6, 7, 22, 12, 53, 40, 15, 31, 20], [11, 13, 19, 18, 21]);
let pc = new ac();
let qc;
let rc;
let sc = {};
let tc = [];
let uc;
let vc = [];
function wc(a) {
  U("6", a.slice(0, 30));
}
let xc = [];
function yc(a, b, c, d, e, g, h, i) {
  let j = g == 0 ? 9 : g == 2 ? 12 : g == 3 ? 13 : g == 5 && 15;
  let k = f.playerScale * 2;
  let l = {
    x: g == 1 ? a : a - k * Math.cos(c),
    y: g == 1 ? b : b - k * Math.sin(c)
  };
  let m = ba.filter(a => a.visible && dc.getDist(l, a, 0, 2) <= a.scale).sort(function (a, b) {
    return dc.getDist(l, a, 0, 2) - dc.getDist(l, b, 0, 2);
  })[0];
  if (m) {
    if (g == 1) {
      m.shooting[53] = 1;
    } else {
      m.shootIndex = j;
      m.shooting[1] = 1;
      Ac(m, c, d, e, g, j);
    }
  }
}
let zc = 0;
function Ac(a, b, c, d, e, f) {
  if (!a.isTeam(ja)) {
    $a = dc.getDirect(ja, a, 2, 2);
    if (dc.getAngleDist($a, b) <= 0.2) {
      a.bowThreat[f]++;
      if (e == 5) {
        zc++;
      }
      setTimeout(() => {
        a.bowThreat[f]--;
        if (e == 5) {
          zc--;
        }
      }, c / d);
      if (a.bowThreat[9] >= 1 && (a.bowThreat[12] >= 1 || a.bowThreat[15] >= 1)) {
        Qb(1, a.aim2);
        pa.anti0Tick = 4;
        if (!pa.antiSync) {
          Wb(4);
        }
      } else if (zc >= 2) {
        Qb(1, a.aim2);
        pa.anti0Tick = 4;
        if (!pa.antiSync) {
          Wb(4);
        }
      }
    }
  }
}
function Bc(a, b, c) {
  if (ja && a) {
    dc.removeAllChildren(Ma);
    Ma.classList.add("visible");
    dc.generateElement({
      id: "itemInfoName",
      text: dc.capitalizeFirst(a.name),
      parent: Ma
    });
    dc.generateElement({
      id: "itemInfoDesc",
      text: a.desc,
      parent: Ma
    });
    if (c) {} else if (b) {
      dc.generateElement({
        class: "itemInfoReq",
        text: !a.type ? "primary" : "secondary",
        parent: Ma
      });
    } else {
      for (let b = 0; b < a.req.length; b += 2) {
        dc.generateElement({
          class: "itemInfoReq",
          html: a.req[b] + "<span class='itemInfoReqVal'> x" + a.req[b + 1] + "</span>",
          parent: Ma
        });
      }
      if (a.group.limit) {
        dc.generateElement({
          class: "itemInfoLmt",
          text: (ja.itemCounts[a.group.id] || 0) + "/" + (f.isSandbox ? 99 : a.group.limit),
          parent: Ma
        });
      }
    }
  } else {
    Ma.classList.remove("visible");
  }
}
window.addEventListener("resize", dc.checkTrusted(Cc));
function Cc() {
  Qa = window.innerWidth;
  Ra = window.innerHeight;
  let a = Math.max(Qa / Sa, Ra / Ta) * Ua;
  Aa.width = Qa * Ua;
  Aa.height = Ra * Ua;
  Aa.style.width = Qa + "px";
  Aa.style.height = Ra + "px";
  Ba.setTransform(a, 0, 0, a, (Qa * Ua - Sa * a) / 2, (Ra * Ua - Ta * a) / 2);
}
Cc();
var Dc;
const Ec = document.getElementById("touch-controls-fullscreen");
Ec.style.display = "block";
Ec.addEventListener("mousemove", Fc, false);
function Fc(a) {
  _a = a.clientX;
  ab = a.clientY;
}
let Gc = {
  left: false,
  middle: false,
  right: false
};
Ec.addEventListener("mousedown", Hc, false);
function Hc(a) {
  if (kb != 1) {
    kb = 1;
    if (a.button == 0) {
      Gc.left = true;
    } else if (a.button == 1) {
      Gc.middle = true;
    } else if (a.button == 2) {
      Gc.right = true;
    }
  }
}
Ec.addEventListener("mouseup", dc.checkTrusted(Ic));
function Ic(a) {
  if (kb != 0) {
    kb = 0;
    if (a.button == 0) {
      Gc.left = false;
    } else if (a.button == 1) {
      Gc.middle = false;
    } else if (a.button == 2) {
      Gc.right = false;
    }
  }
}
Ec.addEventListener("wheel", Jc, false);
function Jc(a) {
  if (a.deltaY < 0) {
    wbe += 0.005;
    Sa = f.maxScreenWidth * wbe;
    Ta = f.maxScreenHeight * wbe;
    Cc();
  } else {
    wbe -= 0.005;
    Sa = f.maxScreenWidth * wbe;
    Ta = f.maxScreenHeight * wbe;
    Cc();
  }
}
function Kc() {
  let a = 0;
  let b = 0;
  for (let c in jb) {
    let d = jb[c];
    a += !!ib[c] * d[0];
    b += !!ib[c] * d[1];
  }
  if (a == 0 && b == 0) {
    return undefined;
  } else {
    return Math.atan2(b, a);
  }
}
function Lc() {
  if (!ja) {
    return 0;
  }
  if (!ja.lockDir) {
    ob = Math.atan2(ab - Ra / 2, _a - Qa / 2);
  }
  return ob || 0;
}
let Mc = 0;
let Nc = Date.now();
function Oc() {
  if (ja && Date.now() - Nc >= 235 && !Gc.right && !Gc.left) {
    Mc += Math.random() * (Math.PI * 2);
    Nc = Date.now();
  }
  if (!ja) {
    return "0";
  }
  if (pa.autoAim || (Gc.left || K && oa.dist2 <= ec.weapons[ja.weapons[0]].range + oa.scale * 1.8 && !mc.inTrap) && ja.reloads[ja.weapons[0]] == 0) {
    ob = c("weaponGrind").checked ? Lc() : ma.length ? oa.aim2 : Lc();
  } else if (Gc.right && ja.reloads[ja.weapons[1] == 10 ? ja.weapons[1] : ja.weapons[0]] == 0) {
    ob = Lc();
  } else if (mc.inTrap) {
    ob = mc.aim;
  } else if (!ja.lockDir) {
    if (!ja.lockDir && nd.stopspin) {
      if (K) {
        ob = ob;
      } else {
        ob = Lc();
      }
    }
  }
  return ob;
}
function Pc() {
  if (!ja) {
    return 0;
  }
  ob = Lc();
  return ob || 0;
}
function Qc() {
  return bb.style.display != "block" && Ja.style.display != "block" && !z;
}
function Rc() {
  if (w.style.display != "none") {
    let a = function (a) {
      return {
        found: a.startsWith("/") && p[a.slice(1).split(" ")[0]],
        fv: p[a.slice(1).split(" ")[0]]
      };
    };
    let b = a(y.value);
    if (b.found) {
      if (typeof b.fv.action === "function") {
        b.fv.action(y.value);
      }
    } else {
      wc(y.value);
    }
    y.value = "";
    y.blur();
  } else if (z) {
    y.blur();
  } else {
    y.focus();
  }
}
function Sc(a) {
  let b = a.which || a.keyCode || 0;
  if (ja && ja.alive && Qc()) {
    if (!ib[b]) {
      ib[b] = 1;
      mb[a.key] = 1;
      if (b == 27) {
        H = !H;
        $("#menuDiv").toggle();
        $("#menuChatDiv").toggle();
      } else if (b == 69) {
        Ob();
      } else if (b == 67) {
        Ze();
      } else if (ja.weapons[b - 49] != undefined) {
        ja.weaponCode = ja.weapons[b - 49];
      } else if (jb[b]) {
        Uc();
      } else if (a.key == "m") {
        nb.placeSpawnPads = !nb.placeSpawnPads;
      } else if (a.key == "z") {
        nb.place = !nb.place;
      } else if (a.key == "z") {
        W.send("6", "holding V rn XD");
      } else if (a.key == "Z") {
        if (typeof window.debug == "function") {
          window.debug();
        }
      } else if (b == 32) {
        U("d", 1, Lc(), 1);
        U("d", 0, Lc(), 1);
      } else if (a.key == ",") {
        W.send("6", "syncon");
        Gd.send(JSON.stringify(["tezt", "ratio"]));
        for (let a = 0; a < Ud.length; a++) {
          Ud[a][0].zync(oa);
          console.log(Ud[a][0]);
        }
      }
    }
  }
}
addEventListener("keydown", dc.checkTrusted(Sc));
function Tc(a) {
  if (ja && ja.alive) {
    let b = a.which || a.keyCode || 0;
    if (b == 13) {
      Rc();
    } else if (Qc()) {
      if (ib[b]) {
        ib[b] = 0;
        mb[a.key] = 0;
        if (jb[b]) {
          Uc();
        } else if (a.key == ",") {
          ja.sync = false;
        }
      }
    }
  }
}
window.addEventListener("keyup", dc.checkTrusted(Tc));
function Uc() {
  if (ld) {
    U("a", undefined, 1);
  } else {
    let a = Kc();
    if (S == undefined || a == undefined || Math.abs(a - S) > 0.3) {
      if (!pa.autoPush && !ld) {
        U("a", a, 1);
      }
      S = a;
    }
  }
}
function Vc() {}
Vc();
let Wc = [];
function Xc(a = undefined) {
  if (a === undefined) a = undefined;
  for (let b = 3; b < ec.list.length; ++b) {
    let d = ec.list[b].group.id;
    let e = ec.weapons.length + b;
    if (!Wc[e]) {
      Wc[e] = document.createElement("div");
      Wc[e].id = "itemCount" + e;
      c("actionBarItem" + e).appendChild(Wc[e]);
      Wc[e].style = "\n                        display: block;\n                        position: absolute;\n                        padding-left: 5px;\n                        font-size: 2em;\n                        color: #fff;\n                        ";
      Wc[e].innerHTML = ja.itemCounts[d] || 0;
    } else if (a == d) {
      Wc[e].innerHTML = ja.itemCounts[a] || 0;
    }
  }
}
function Yc() {
  let a = fa.filter(a => a.trap && a.active && a.isTeamObject(ja) && dc.getDist(a, oa, 0, 2) <= oa.scale + a.getScale() + 5).sort(function (a, b) {
    return dc.getDist(a, oa, 0, 2) - dc.getDist(b, oa, 0, 2);
  })[0];
  if (a) {
    let b = fa.filter(b => b.dmg && b.active && b.isTeamObject(ja) && dc.getDist(b, a, 0, 0) <= oa.scale + a.scale + b.scale).sort(function (a, b) {
      return dc.getDist(a, oa, 0, 2) - dc.getDist(b, oa, 0, 2);
    })[0];
    if (b) {
      let a = Math.atan2(oa.y2 - b.y, oa.x2 - b.x);
      pa.autoPush = true;
      pa.pushData = {
        x: b.x + Math.cos(a),
        y: b.y + Math.sin(a),
        x2: ja.x2 + 30,
        y2: ja.y2 + 30
      };
      let c = {
        x: oa.x2 + Math.cos(a) * 30,
        y: oa.y2 + Math.sin(a) * 60
      };
      let d = Math.atan2(c.y - ja.y2, c.x - ja.x2);
      U("a", d, 1);
    } else if (pa.autoPush) {
      pa.autoPush = false;
      U("a", S || undefined, 1);
    }
  } else if (pa.autoPush) {
    pa.autoPush = false;
    U("a", S || undefined, 1);
  }
}
function Zc(a) {
  ha.push(new Gb(a.x, a.y, a.dir, a.buildIndex, a.weaponIndex, a.weaponVariant, a.skinColor, a.scale, a.name));
}
function $c(a) {
  ca = a.teams;
}
function _c(a) {
  ib = {};
  mb = {};
  ka = a;
  kb = 0;
  lb = true;
  U("d", 0, Oc(), 1);
  pa.ageInsta = true;
  if (hb) {
    hb = false;
    ea.length = 0;
    fa.length = 0;
  }
}
function ad(a, b) {
  let c = sa(a[0]);
  if (!c) {
    c = new Hb(a[0], a[1], f, dc, jc, fc, ba, aa, ec, hc, ic);
    ba.push(c);
    if (a[1] != ka) {
      B(null, "Found " + a[2] + " {" + a[1] + "}", "lime");
    }
  } else if (a[1] != ka) {
    B(null, "Found " + a[2] + " {" + a[1] + "}", "lime");
  }
  c.spawn(b ? true : null);
  c.visible = false;
  c.oldPos = {
    x2: undefined,
    y2: undefined
  };
  c.x2 = undefined;
  c.y2 = undefined;
  c.x3 = undefined;
  c.y3 = undefined;
  c.setData(a);
  if (b) {
    if (!ja) {
      window.prepareUI(c);
    }
    ja = c;
    Ya = ja.x;
    Za = ja.y;
    pa.lastDir = 0;
    zd();
    fd();
    Xc();
    if (ja.skins[7]) {
      pa.reSync = true;
    }
  }
}
function bd(a) {
  for (let b = 0; b < ba.length; b++) {
    if (ba[b].id == a) {
      B("Game", ba[b].name + "[" + ba[b].sid + "] left the game", "red");
      ba.splice(b, 1);
      break;
    }
  }
}
function cd(a, b) {
  la = ta(a);
  if (la) {
    la.oldHealth = la.health;
    la.health = b;
    la.judgeShame();
    if (la.oldHealth > la.health) {
      la.timeDamaged = Date.now();
      la.damaged = la.oldHealth - la.health;
      let b = la.damaged;
      la = ta(a);
      let c = false;
      if (la.health <= 0) {
        if (!la.death) {
          la.death = true;
          if (la != ja) {
            if (la.skinIndex == 45) {
              B("Game", la.name + "[" + la.sid + "] has died due to clown", "red");
            } else if (la.shameCount >= 5) {
              B("Game", la.name + "[" + la.sid + "] has died due to high shame", "red");
            } else {
              B("Game", la.name + "[" + la.sid + "] has died", "red");
            }
          }
          Zc(la);
        }
      }
      if (la == ja) {
        if (la.skinIndex == 7 && (b == 5 || la.latestTail == 13 && b == 2)) {
          if (pa.reSync) {
            pa.reSync = false;
            la.setBullTick = true;
          }
          c = true;
        }
        if (lb) {
          let a = Ub(b);
          let d = [0.25, 0.45].map(a => a * ec.weapons[ja.weapons[0]].dmg * Sb());
          let e = !c && d.includes(b);
          let f = 95;
          let g = function (a) {
            setTimeout(() => {
              Vb();
            }, a);
          };
          if (oa.length && oa.damageThreat(ja) - (ja.canEmpAnti || ja.empAnti ? 25 : 0) >= 85) {
            ja.canEmpAnti = true;
            ja.antiTimer = P.tick;
            let a = 4;
            if (ja.shameCount < a) {
              Vb();
            } else {
              g(f);
            }
          } else {
            g(f);
          }
        }
      } else if (!la.setPoisonTick && (la.damaged == 5 || la.latestTail == 13 && la.damaged == 2)) {
        la.setPoisonTick = true;
      }
    } else {
      la.timeHealed = Date.now();
    }
    if (la.health <= 0) {
      Pd.forEach(a => {
        a.whyDie = la.name;
      });
    }
  }
}
function dd() {
  lb = false;
  qc = {
    x: ja.x,
    y: ja.y
  };
}
function ed(a, b) {
  if (ja) {
    ja.itemCounts[a] = b;
    Xc(a);
  }
}
function fd(a, b, c) {
  if (a != undefined) {
    ja.XP = a;
  }
  if (b != undefined) {
    ja.maxXP = b;
  }
  if (c != undefined) {
    ja.age = c;
  }
}
function gd(a, b) {
  ja.upgradePoints = a;
  ja.upgrAge = b;
  if (a > 0) {
    cc.length = 0;
    dc.removeAllChildren(Ga);
    for (let a = 0; a < ec.weapons.length; ++a) {
      if (ec.weapons[a].age == b && (ec.weapons[a].pre == undefined || ja.weapons.indexOf(ec.weapons[a].pre) >= 0)) {
        let b = dc.generateElement({
          id: "upgradeItem" + a,
          class: "actionBarItem",
          onmouseout: function () {
            Bc();
          },
          parent: Ga
        });
        b.style.backgroundImage = c("actionBarItem" + a).style.backgroundImage;
        cc.push(a);
      }
    }
    for (let a = 0; a < ec.list.length; ++a) {
      if (ec.list[a].age == b && (ec.list[a].pre == undefined || ja.items.indexOf(ec.list[a].pre) >= 0)) {
        let b = ec.weapons.length + a;
        let d = dc.generateElement({
          id: "upgradeItem" + b,
          class: "actionBarItem",
          onmouseout: function () {
            Bc();
          },
          parent: Ga
        });
        d.style.backgroundImage = c("actionBarItem" + b).style.backgroundImage;
        cc.push(b);
      }
    }
    for (let a = 0; a < cc.length; a++) {
      (function (a) {
        let b = c("upgradeItem" + a);
        b.onclick = dc.checkTrusted(function () {
          U("H", a);
        });
        dc.hookTouchEvents(b);
      })(cc[a]);
    }
    if (cc.length) {
      Ga.style.display = "block";
      Ha.style.display = "block";
      Ha.innerHTML = "SELECT ITEMS (" + a + ")";
    } else {
      Ga.style.display = "none";
      Ha.style.display = "none";
      Bc();
    }
  } else {
    Ga.style.display = "none";
    Ha.style.display = "none";
    Bc();
  }
}
function hd(a) {
  let b = va(a);
  fc.disableBySid(a);
  if (ja) {
    for (let b = 0; b < ia.length; b++) {
      if (ia[b].sid == a) {
        ia.splice(b, 1);
        break;
      }
    }
    if (!ja.canSee(b)) {
      vc.push({
        x: b.x,
        y: b.y
      });
    }
    if (vc.length > 8) {
      vc.shift();
    }
    mc.replacer(b);
  }
}
function id(a) {
  if (ja) {
    fc.removeAllItems(a);
  }
}
function jd(a, b) {
  if (!_.manage[_.tick + b]) {
    _.manage[_.tick + b] = [a];
  } else {
    _.manage[_.tick + b].push(a);
  }
}
function kd(a, b) {
  try {
    return Math.atan2((b.y2 || b.y) - (a.y2 || a.y), (b.x2 || b.x) - (a.x2 || a.x));
  } catch (a) {
    return 0;
  }
}
let ld = false;
let md = false;
let nd = {
  insta: {
    todo: false,
    wait: false,
    count: 4,
    shame: 5
  },
  bull: false,
  antibull: 0,
  reloaded: false,
  stopspin: true
};
function od(a) {
  function b(a, b) {
    a = a % (Math.PI * 2);
    b = b % (Math.PI * 2);
    let c = Math.abs(a - b);
    if (c > Math.PI) {
      c = Math.PI * 2 - c;
    }
    return c;
  }
  P.tick++;
  ma = [];
  na = [];
  oa = [];
  P.tickSpeed = performance.now() - P.lastTick;
  P.lastTick = performance.now();
  ba.forEach(a => {
    a.forcePos = !a.visible;
    a.visible = false;
    if (a.timeHealed - a.timeDamaged > 0 && a.lastshamecount < a.shameCount) {
      a.pinge = a.timeHealed - a.timeDamaged;
    }
  });
  for (let b = 0; b < a.length;) {
    la = ta(a[b]);
    if (la) {
      la.t1 = la.t2 === undefined ? P.lastTick : la.t2;
      la.t2 = P.lastTick;
      la.oldPos.x2 = la.x2;
      la.oldPos.y2 = la.y2;
      la.x1 = la.x;
      la.y1 = la.y;
      la.x2 = a[b + 1];
      la.y2 = a[b + 2];
      la.x3 = la.x2 + (la.x2 - la.oldPos.x2);
      la.y3 = la.y2 + (la.y2 - la.oldPos.y2);
      la.d1 = la.d2 === undefined ? a[b + 3] : la.d2;
      la.d2 = a[b + 3];
      la.dt = 0;
      la.buildIndex = a[b + 4];
      la.weaponIndex = a[b + 5];
      la.weaponVariant = a[b + 6];
      la.team = a[b + 7];
      la.isLeader = a[b + 8];
      la.oldSkinIndex = la.skinIndex;
      la.oldTailIndex = la.tailIndex;
      la.skinIndex = a[b + 9];
      la.tailIndex = a[b + 10];
      la.iconIndex = a[b + 11];
      la.zIndex = a[b + 12];
      la.visible = true;
      la.update(P.tickSpeed);
      la.dist2 = dc.getDist(la, ja, 2, 2);
      la.aim2 = dc.getDirect(la, ja, 2, 2);
      la.dist3 = dc.getDist(la, ja, 3, 3);
      la.aim3 = dc.getDirect(la, ja, 3, 3);
      la.damageThreat = 0;
      if (la.skinIndex == 45 && la.shameTimer <= 0) {
        la.addShameTimer();
      }
      if (la.oldSkinIndex == 45 && la.skinIndex != 45) {
        la.shameTimer = 0;
        la.shameCount = 0;
        if (la == ja) {
          Vb();
        }
      }
      h.forEach(a => {
        a.showName = "YEAHHH";
      });
      for (let a = 0; a < ba.length; a++) {
        for (let a = 0; a < h.length; a++) {
          if (ja.id === a.id) {
            a.showName = "YEAHHHHHH";
          }
        }
      }
      if (ja.shameCount < 4 && oa.dist3 <= 300 && oa.reloads[oa.primaryIndex] <= P.tickRate * (window.pingTime >= 200 ? 2 : 1)) {
        md = true;
        Vb();
      } else {
        if (md) {
          Vb();
        }
        md = false;
      }
      if (la == ja) {
        if (fa.length) {
          fa.forEach(a => {
            a.onNear = false;
            if (a.active) {
              if (!a.onNear && dc.getDist(a, la, 0, 2) <= a.scale + ec.weapons[la.weapons[0]].range) {
                a.onNear = true;
              }
              if (a.isItem && a.owner) {
                if (!a.pps && la.sid == a.owner.sid && dc.getDist(a, la, 0, 2) > (parseInt(c("breakRange").value) || 0) && !a.breakObj && ![13, 14, 20].includes(a.id)) {
                  a.breakObj = true;
                  ia.push({
                    x: a.x,
                    y: a.y,
                    sid: a.sid
                  });
                }
              }
            }
          });
          let a = fa.filter(a => a.trap && a.active && dc.getDist(a, la, 0, 2) <= la.scale + a.getScale() + 25 && !a.isTeamObject(la)).sort(function (a, b) {
            return dc.getDist(a, la, 0, 2) - dc.getDist(b, la, 0, 2);
          })[0];
          if (a) {
            let b = ea.filter(b => b.dmg && ef(la, b) <= la.scale + a.scale / 2 && !b.isTeamObject(la) && b.active)[0];
            mc.dist = dc.getDist(a, la, 0, 2);
            mc.aim = dc.getDirect(b ? b : a, la, 0, 2);
            mc.protect(kd(a, la) - Math.PI);
            mc.inTrap = true;
            mc.info = a;
          } else {
            mc.inTrap = false;
            mc.info = {};
          }
        } else {
          mc.inTrap = false;
        }
      }
      if (la.weaponIndex < 9) {
        la.primaryIndex = la.weaponIndex;
        la.primaryVariant = la.weaponVariant;
      } else if (la.weaponIndex > 8) {
        la.secondaryIndex = la.weaponIndex;
        la.secondaryVariant = la.weaponVariant;
      }
    }
    b += 13;
  }
  if (lc.stack.length) {
    let a = 0;
    let b = 0;
    let c = {
      x: null,
      y: null
    };
    let d = {
      x: null,
      y: null
    };
    lc.stack.forEach(e => {
      if (e.value >= 0) {
        if (a == 0) {
          c = {
            x: e.x,
            y: e.y
          };
        }
        a += Math.abs(e.value);
      } else {
        if (b == 0) {
          d = {
            x: e.x,
            y: e.y
          };
        }
        b += Math.abs(e.value);
      }
    });
    if (b > 0) {
      lc.showText(d.x, d.y, Math.max(45, Math.min(50, b)), 0.18, 500, b, "#8ecc51");
    }
    if (a > 0) {
      lc.showText(c.x, c.y, Math.max(45, Math.min(50, a)), 0.18, 500, a, "#fff");
    }
    lc.stack = [];
  }
  if (xc.length) {
    xc.forEach(a => {
      yc(...a);
    });
    xc = [];
  }
  for (let b = 0; b < a.length;) {
    la = ta(a[b]);
    if (la) {
      if (!la.isTeam(ja)) {
        ma.push(la);
        if (la.dist2 <= ec.weapons[la.primaryIndex == undefined ? 5 : la.primaryIndex].range + ja.scale * 2) {
          na.push(la);
        }
      }
      la.manageReload();
      if (la != ja) {
        la.addDamageThreat(ja);
      }
    }
    b += 13;
  }
  if (ja && ja.alive) {
    if (ma.length) {
      oa = ma.sort(function (a, b) {
        return a.dist2 - b.dist2;
      })[0];
    } else {}
    if (P.tickQueue[P.tick]) {
      P.tickQueue[P.tick].forEach(a => {
        a();
      });
      P.tickQueue[P.tick] = null;
    }
    ba.forEach(a => {
      if (!a.visible && ja != a) {
        a.reloads = {
          0: 0,
          1: 0,
          2: 0,
          3: 0,
          4: 0,
          5: 0,
          6: 0,
          7: 0,
          8: 0,
          9: 0,
          10: 0,
          11: 0,
          12: 0,
          13: 0,
          14: 0,
          15: 0,
          53: 0
        };
      }
      if (a.setBullTick) {
        a.bullTimer = 0;
      }
      if (a.setPoisonTick) {
        a.poisonTimer = 0;
      }
      a.updateTimer();
    });
    if (lb) {
      if (ma.length) {
        if (ja.canEmpAnti) {
          ja.canEmpAnti = false;
          if (oa.dist2 <= 300 && !pa.safePrimary(oa) && !pa.safeSecondary(oa)) {
            if (oa.reloads[53] == 0) {
              ja.empAnti = true;
              ja.soldierAnti = false;
            } else {
              ja.empAnti = false;
              ja.soldierAnti = true;
            }
          }
        }
        let a = fa.filter(a => a.dmg && a.active && a.isTeamObject(ja) && dc.getDist(a, oa, 0, 3) <= a.scale + oa.scale).sort(function (a, b) {
          return dc.getDist(a, oa, 0, 2) - dc.getDist(b, oa, 0, 2);
        })[0];
        if (a) {
          if (oa.dist3 <= ec.weapons[ja.weapons[0]].range + ja.scale * 1.8 && q.predictTick) {
            nc.canSpikeTick = true;
            nc.syncHit = true;
            if (q.revTick && ja.weapons[1] == 15 && ja.reloads[53] == 0 && nc.perfCheck(ja, oa)) {
              nc.revTick = true;
            }
          }
        }
        let b = fa.filter(a => a.dmg && a.active && !a.isTeamObject(ja) && dc.getDist(a, ja, 0, 3) < a.scale + ja.scale).sort(function (a, b) {
          return dc.getDist(a, ja, 0, 2) - dc.getDist(b, ja, 0, 2);
        })[0];
        if (b && !mc.inTrap) {
          if (oa.dist3 <= ec.weapons[5].range + oa.scale * 1.8) {
            pa.anti0Tick = 1;
          }
        }
      }
      if ((K ? true : (ja.checkCanInsta(true) >= 100 ? ja.checkCanInsta(true) : ja.checkCanInsta(false)) >= (ja.weapons[1] == 10 ? 95 : 100)) && oa.dist2 <= ec.weapons[ja.weapons[1] == 10 ? ja.weapons[1] : ja.weapons[0]].range + oa.scale * 1.8 && (nc.wait || K && Math.floor(Math.random() * 5) == 0) && !nc.isTrue && !pa.waitHit && ja.reloads[ja.weapons[0]] == 0 && ja.reloads[ja.weapons[1]] == 0 && (K ? true : c("instaType").value == "oneShot" ? ja.reloads[53] <= (ja.weapons[1] == 10 ? 0 : P.tickRate) : true) && nc.perfCheck(ja, oa)) {
        if (ja.checkCanInsta(true) >= 100) {
          nc.nobull = K ? false : nc.canSpikeTick ? false : true;
        } else {
          nc.nobull = false;
        }
        nc.can = true;
      } else {
        nc.can = false;
      }
      if (mb.q) {
        Qb(0, Oc());
      }
      if (mb.f) {
        Qb(4, Lc());
      }
      if (mb.v) {
        Qb(2, Lc());
      }
      if (mb.y) {
        Qb(5, Lc());
      }
      if (mb.h) {
        Qb(ja.getItemType(22), Lc());
      }
      if (mb.n) {
        Qb(3, Lc());
      }
      if (P.tick % 1 == 0) {
        if (nb.place) {
          let a = 7.7;
          for (let b = -a; b <= a; b += a) {
            Rb(3, dc.getDirect(ja.oldPos, ja, 2, 2) + b);
          }
        } else if (nb.placeSpawnPads) {
          for (let a = 0; a < Math.PI * 2; a += Math.PI / 2) {
            Rb(ja.getItemType(20), dc.getDirect(ja.oldPos, ja, 2, 2) + a);
          }
        }
      }
      if (nc.can) {
        nc.changeType(ja.weapons[1] == 10 ? "rev" : "normal");
      }
      if (nc.canCounter) {
        nc.canCounter = false;
        if (ja.reloads[ja.weapons[0]] == 0 && !nc.isTrue) {
          nc.counterType();
        }
      }
      if (nc.canSpikeTick) {
        nc.canSpikeTick = false;
        if (nc.revTick) {
          nc.revTick = false;
          if ([1, 2, 3, 4, 5, 6].includes(ja.weapons[0]) && ja.reloads[ja.weapons[1]] == 0 && !nc.isTrue) {
            nc.changeType("rev");
            C(null, "[RevSyncHit]", "yellow");
          }
        } else if ([1, 2, 3, 4, 5, 6].includes(ja.weapons[0]) && ja.reloads[ja.weapons[0]] == 0 && !nc.isTrue) {
          nc.spikeTickType();
          if (nc.syncHit) {
            C(null, "[SyncHit]", "yellow");
          }
        }
      }
      if (!Gc.middle && (Gc.left || Gc.right) && !nc.isTrue) {
        if (ja.weaponIndex != (Gc.right && ja.weapons[1] == 10 ? ja.weapons[1] : ja.weapons[0]) || ja.buildIndex > -1) {
          Nb(Gc.right && ja.weapons[1] == 10 ? ja.weapons[1] : ja.weapons[0]);
        }
        if (ja.reloads[Gc.right && ja.weapons[1] == 10 ? ja.weapons[1] : ja.weapons[0]] == 0 && !pa.waitHit) {
          Ob();
          pa.waitHit = 1;
          P.tickBase(() => {
            Ob();
            pa.waitHit = 0;
          }, 1);
        }
      }
      if (K && !Gc.left && !Gc.right && !nc.isTrue && oa.dist2 <= ec.weapons[ja.weapons[0]].range + oa.scale * 1.8 && !mc.inTrap) {
        if (ja.weaponIndex != ja.weapons[0] || ja.buildIndex > -1) {
          Nb(ja.weapons[0]);
        }
        if (ja.reloads[ja.weapons[0]] == 0 && !pa.waitHit) {
          Ob();
          pa.waitHit = 1;
          P.tickBase(() => {
            Ob();
            pa.waitHit = 0;
          }, 1);
        }
      }
      if (mc.inTrap) {
        if (!Gc.left && !Gc.right && !nc.isTrue) {
          if (ja.weaponIndex != (mc.notFast() ? ja.weapons[1] : ja.weapons[0]) || ja.buildIndex > -1) {
            Nb(mc.notFast() ? ja.weapons[1] : ja.weapons[0]);
          }
          if (ja.reloads[mc.notFast() ? ja.weapons[1] : ja.weapons[0]] == 0 && !pa.waitHit) {
            Ob();
            pa.waitHit = 1;
            P.tickBase(() => {
              Ob();
              pa.waitHit = 0;
            }, 1);
          }
        }
      }
      if (Gc.middle && !mc.inTrap) {
        if (!nc.isTrue && ja.reloads[ja.weapons[1]] == 0) {
          if (pa.ageInsta && ja.weapons[0] != 4 && ja.weapons[1] == 9 && ja.age >= 9 && ma.length) {
            nc.bowMovement();
          } else {
            nc.rangeType();
          }
        }
      }
      if (mb.t && !mc.inTrap) {
        if (!nc.isTrue && ja.reloads[ja.weapons[0]] == 0 && (ja.weapons[1] == 15 ? ja.reloads[ja.weapons[1]] == 0 : true) && (ja.weapons[0] == 5 || ja.weapons[0] == 4 && ja.weapons[1] == 15)) {
          nc[ja.weapons[0] == 4 && ja.weapons[1] == 15 ? "kmTickMovement" : "tickMovement"]();
        }
      }
      if (mb["."] && !mc.inTrap) {
        if (!nc.isTrue && ja.reloads[ja.weapons[0]] == 0 && ([9, 12, 13, 15].includes(ja.weapons[1]) ? ja.reloads[ja.weapons[1]] == 0 : true)) {
          nc.boostTickMovement();
        }
      }
      if (ja.weapons[1] && !Gc.left && !Gc.right && !mc.inTrap && !nc.isTrue && (!K || oa.dist2 > ec.weapons[ja.weapons[0]].range + oa.scale * 1.8)) {
        if (ja.reloads[ja.weapons[0]] == 0 && ja.reloads[ja.weapons[1]] == 0) {
          if (!pa.reloaded) {
            pa.reloaded = true;
            let a = ec.weapons[ja.weapons[0]].spdMult < ec.weapons[ja.weapons[1]].spdMult ? 1 : 0;
            if (ja.weaponIndex != ja.weapons[a] || ja.buildIndex > -1) {
              Nb(ja.weapons[a]);
            }
          }
        } else {
          pa.reloaded = false;
          if (K) {
            nd.stopspin = false;
          }
          if (ja.reloads[ja.weapons[0]] > 0) {
            if (ja.weaponIndex != ja.weapons[0] || ja.buildIndex > -1) {
              Nb(ja.weapons[0]);
            }
          } else if (ja.reloads[ja.weapons[0]] == 0 && ja.reloads[ja.weapons[1]] > 0) {
            if (ja.weaponIndex != ja.weapons[1] || ja.buildIndex > -1) {
              Nb(ja.weapons[1]);
            }
            if (K) {
              if (!nd.stopspin) {
                setTimeout(() => {
                  nd.stopspin = true;
                }, 750);
              }
            }
          }
        }
      }
      if (!nc.isTrue && !mc.inTrap && !mc.replaced) {
        mc.autoPlace();
      }
      if (!mb.q && !mb.f && !mb.v && !mb.h && !mb.n) {
        U("D", Oc());
      }
      let a = function () {
        if (pa.anti0Tick > 0) {
          Lb(6, 0);
        } else if (Gc.left || Gc.right) {
          if (Gc.left) {
            Lb(ja.reloads[ja.weapons[0]] == 0 ? c("weaponGrind").checked ? 40 : 7 : ja.empAnti ? 22 : ja.soldierAnti ? 6 : c("antiBullType").value == "abreload" && oa.antiBull > 0 ? 11 : oa.dist2 <= 300 ? c("antiBullType").value == "abalway" && oa.reloads[oa.primaryIndex] == 0 ? 11 : 6 : Xb(1, 1), 0);
          } else if (Gc.right) {
            Lb(ja.reloads[Gc.right && ja.weapons[1] == 10 ? ja.weapons[1] : ja.weapons[0]] == 0 ? 40 : c("antiBullType").value == "abreload" && oa.antiBull > 0 ? 11 : oa.dist2 <= 300 ? c("antiBullType").value == "abalway" && oa.reloads[oa.primaryIndex] == 0 ? 11 : 6 : Xb(1, 1), 0);
          }
        } else if (mc.inTrap) {
          if (mc.info.health <= ec.weapons[ja.weaponIndex].dmg ? false : ja.reloads[ja.weapons[1] == 10 ? ja.weapons[1] : ja.weapons[0]] == 0) {
            if (oa.dist3 <= 300 && mc.info.health <= 300 && ec.weapons[oa.weapons[0]] == 0) {
              Lb(6, 0);
            } else {
              Lb(40, 0);
            }
          } else {
            Lb(6, 0);
          }
        } else if (ja.empAnti) {
          Lb(ja.empAnti ? 22 : 6, 0);
        } else {
          Lb(6, 0);
        }
      };
      let b = function () {
        if (oa.dist2 <= 300) {
          Lb(0, 1);
        } else if (Gc.left) {
          Lb(0, 1);
        } else {
          Lb(11, 1);
        }
      };
      let d = function () {
        if (pa.anti0Tick > 0) {
          Lb(6, 0);
        } else if (Gc.left || Gc.right) {
          if (Gc.left) {
            Lb(ja.reloads[ja.weapons[0]] == 0 ? c("weaponGrind").checked ? 40 : 7 : ja.empAnti ? 22 : 6, 0);
          } else if (Gc.right) {
            Lb(ja.reloads[Gc.right && ja.weapons[1] == 10 ? ja.weapons[1] : ja.weapons[0]] == 0 ? 40 : ja.empAnti ? 22 : 6, 0);
          }
        } else if (oa.dist2 <= ec.weapons[ja.weapons[0]].range + oa.scale * 1.8 && !mc.inTrap) {
          Lb(ja.reloads[ja.weapons[0]] == 0 ? 7 : ja.empAnti ? 22 : 6, 0);
        } else if (mc.inTrap) {
          if (mc.info.health <= ec.weapons[ja.weaponIndex].dmg ? false : ja.reloads[ja.weapons[1] == 10 ? ja.weapons[1] : ja.weapons[0]] == 0) {
            Lb(40, 0);
          } else if (ja.shameCount > 4320 && (P.tick - ja.bullTick) % f.serverUpdateRate === 0 && ja.skinIndex != 45 || pa.reSync) {
            Lb(7, 0);
          } else {
            Lb(ja.empAnti ? 22 : 6, 0);
          }
        } else if (ja.empAnti) {
          Lb(22, 0);
        } else if (ja.shameCount > 4320 && (P.tick - ja.bullTick) % f.serverUpdateRate === 0 && ja.skinIndex != 45 || pa.reSync) {
          Lb(7, 0);
        } else {
          Lb(6, 0);
        }
        if (Gc.left || Gc.right) {
          if (Gc.left) {
            Lb(0, 1);
          }
        } else if (oa.dist2 <= ec.weapons[ja.weapons[0]].range + oa.scale * 1.8 && !mc.inTrap) {
          Lb(0, 1);
        } else if (mc.inTrap) {
          Lb(0, 1);
        } else {
          Lb(11, 1);
        }
      };
      if (Ea.style.display != "block" && !nc.isTrue && !nc.ticking) {
        if (K) {
          d();
        } else {
          a();
          b();
        }
      }
      if (q.autoPush && ma.length && !mc.inTrap && !nc.ticking) {
        Yc();
      } else if (pa.autoPush) {
        pa.autoPush = false;
        U("a", S || undefined, 1);
      }
      nc.ticking &&= false;
      nc.syncHit &&= false;
      ja.empAnti &&= false;
      ja.soldierAnti &&= false;
      if (pa.anti0Tick > 0) {
        pa.anti0Tick--;
      }
      mc.replaced &&= false;
      mc.antiTrapped &&= false;
      const e = (a, b) => {
        const c = b.weapons[1] === 10 && !ja.reloads[b.weapons[1]] ? 1 : 0;
        const d = b.weapons[c];
        if (ja.reloads[d]) {
          return 0;
        }
        const e = ec.weapons[d];
        const f = ef(a, b) <= a.getScale() + e.range;
        if (b.visible && f) {
          return e.dmg * (e.sDmg || 1) * 3.3;
        } else {
          return 0;
        }
      };
      const g = () => {
        const a = [];
        const b = ja.x;
        const c = ja.y;
        const d = ea.length;
        for (let b = 0; b < d; b++) {
          const c = ea[b];
          if (c.isItem && c.active && c.health > 0) {
            const b = ec.list[c.id];
            const d = 35 + b.scale + (b.placeOffset || 0);
            const f = ef(c, ja) <= d * 2;
            if (f) {
              let b = 0;
              const d = ba.length;
              for (let a = 0; a < d; a++) {
                b += e(c, ba[a]);
              }
              if (c.health <= b) {
                a.push(c);
              }
            }
          }
        }
        const f = (a, b, c) => {
          if (!c) {
            return null;
          }
          const d = Math.PI * 2;
          const e = Math.PI / 360;
          const f = ec.list[a.items[b]];
          let g = Math.atan2(c.y - a.y, c.x - a.x);
          let h = a.scale + (f.scale || 1) + (f.placeOffset || 0);
          for (let f = 0; f < d; f += e) {
            let a = [(g + f) % d, (g - f + d) % d];
            for (let b of a) {
              return b;
            }
          }
          return null;
        };
        const g = () => {
          let b = fa.filter(a => a.trap && a.active && a.isTeamObject(ja) && ef(a, ja) <= a.getScale() + 5);
          let c = ea.find(a => a.dmg && a.active && a.isTeamObject(ja) && ef(a, ja) < 87 && !b.length);
          const d = c ? 4 : 2;
          a.forEach(a => {
            let b = f(ja, d, a);
            if (b !== null) {
              Qb(d, b);
              lc.showText(a.x, a.y, 20, 0.15, 1850, "⭐", "#fff", 2);
            }
          });
        };
        if (oa && oa.dist3 <= 360) {
          g();
        }
        g;
      };
    }
  }
  if (h.length) {
    h.forEach(a => {
      if (true) {
        a[0].showName = "YEAHHH";
      }
    });
  }
}
for (var pd = 0; pd < fa.length; pd++) {
  if (fa[pd].active && fa[pd].health > 0 && dc.getDist(fa[pd], ja, 0, 2) < 150 && c("antipush").checked) {
    if (fa[pd].name.includes("spike") && fa[pd]) {
      if (fa[pd].owner.sid != ja.sid && Gc.left == false && la.reloads[la.secondaryIndex] == 0) {
        Nb(ja.weapons[1]);
        Lb(40, 0);
        U("D", dc.getDirect(fa[pd], ja, 0, 2));
        jd(() => {
          Lb(6, 0);
        }, 1);
      }
    }
  }
}
function qd(a, b, c) {
  a.fillStyle = "rgba(0, 255, 255, 0.2)";
  a.beginPath();
  a.arc(b, c, 55, 0, Math.PI * 2);
  a.fill();
  a.closePath();
  a.globalAlpha = 1;
}
function rd(a) {
  pb = a;
  return;
  dc.removeAllChildren(La);
  let b = 1;
  for (let c = 0; c < a.length; c += 3) {
    (function (c) {
      dc.generateElement({
        class: "leaderHolder",
        parent: La,
        children: [dc.generateElement({
          class: "leaderboardItem",
          style: "color:" + (a[c] == ka ? "#fff" : "rgba(255,255,255,0.6)"),
          text: b + ". " + (a[c + 1] != "" ? a[c + 1] : "unknown")
        }), dc.generateElement({
          class: "leaderScore",
          text: dc.sFormat(a[c + 2]) || "0"
        })]
      });
    })(c);
    b++;
  }
}
function sd(a) {
  for (let b = 0; b < a.length;) {
    fc.add(a[b], a[b + 1], a[b + 2], a[b + 3], a[b + 4], a[b + 5], ec.list[a[b + 6]], true, a[b + 7] >= 0 ? {
      sid: a[b + 7]
    } : null);
    b += 8;
  }
}
function td(a) {
  for (let b = 0; b < aa.length; ++b) {
    aa[b].forcePos = !aa[b].visible;
    aa[b].visible = false;
  }
  if (a) {
    let b = performance.now();
    for (let c = 0; c < a.length;) {
      la = ua(a[c]);
      if (la) {
        la.index = a[c + 1];
        la.t1 = la.t2 === undefined ? b : la.t2;
        la.t2 = b;
        la.x1 = la.x;
        la.y1 = la.y;
        la.x2 = a[c + 2];
        la.y2 = a[c + 3];
        la.d1 = la.d2 === undefined ? a[c + 4] : la.d2;
        la.d2 = a[c + 4];
        la.health = a[c + 5];
        la.dt = 0;
        la.visible = true;
      } else {
        la = kc.spawn(a[c + 2], a[c + 3], a[c + 4], a[c + 1]);
        la.x2 = la.x;
        la.y2 = la.y;
        la.d2 = la.dir;
        la.health = a[c + 5];
        if (!kc.aiTypes[a[c + 1]].name) {
          la.name = f.cowNames[a[c + 6]];
        }
        la.forcePos = true;
        la.sid = a[c];
        la.visible = true;
      }
      c += 7;
    }
  }
}
function ud(a) {
  la = ua(a);
  if (la) {
    la.startAnim();
  }
}
function vd(a, b, c) {
  la = ta(a);
  if (la) {
    la.startAnim(b, c);
    la.gatherIndex = c;
    la.gathering = 1;
    if (b) {
      let b = fc.hitObj;
      fc.hitObj = [];
      P.tickBase(() => {
        la = ta(a);
        let d = ec.weapons[c].dmg * f.weaponVariants[la[(c < 9 ? "prima" : "seconda") + "ryVariant"]].val * (ec.weapons[c].sDmg || 1) * (la.skinIndex == 40 ? 3.3 : 1);
        b.forEach(a => {
          a.health -= d;
        });
      }, 1);
    }
  }
}
function wd(a, b) {
  la = va(b);
  if (la) {
    la.xWiggle += f.gatherWiggle * Math.cos(a);
    la.yWiggle += f.gatherWiggle * Math.sin(a);
    if (la.health) {
      fc.hitObj.push(la);
    }
  }
}
function xd(a, b) {
  la = va(a);
  if (la) {
    if (f.anotherVisual) {
      la.lastDir = b;
    } else {
      la.dir = b;
    }
    la.xWiggle += f.gatherWiggle * Math.cos(b + Math.PI);
    la.yWiggle += f.gatherWiggle * Math.sin(b + Math.PI);
  }
}
function yd(a, b, c) {
  if (ja) {
    ja[a] = b;
    if (a == "points") {
      if (q.autoBuy) {
        oc.hat();
        oc.acc();
      }
    } else if (a == "kills") {
      if (q.killChat) {
        wc("Ass Kids: " + b);
      }
    }
  }
}
function zd(a, b) {
  if (a) {
    if (b) {
      ja.weapons = a;
      ja.primaryIndex = ja.weapons[0];
      ja.secondaryIndex = ja.weapons[1];
      if (!nc.isTrue) {
        Nb(ja.weapons[0]);
      }
    } else {
      ja.items = a;
    }
  }
  for (let d = 0; d < ec.list.length; d++) {
    let a = ec.weapons.length + d;
    let b = c("actionBarItem" + a);
    b.style.display = ja.items.indexOf(ec.list[d].id) >= 0 ? "inline-block" : "none";
    document.getElementsByTagName("button").style.boxShadow = "2px 2px 5px rgba(0, 0, 0, 0.5)";
  }
  for (let d = 0; d < ec.weapons.length; d++) {
    let a = c("actionBarItem" + d);
    a.style.display = ja.weapons[ec.weapons[d].type] == ec.weapons[d].id ? "inline-block" : "none";
    document.getElementsByTagName("button").style.boxShadow = "2px 2px 5px rgba(0, 0, 0, 0.5)";
  }
  let d = ja.weapons[0] == 3 && ja.weapons[1] == 15;
  if (d) {
    c("actionBarItem3").style.display = "none";
    c("actionBarItem4").style.display = "inline-block";
  }
}
function Ad(a, b, c, d, e, f, g, h) {
  jc.addProjectile(a, b, c, d, e, f, null, null, g, qb).sid = h;
  xc.push(Array.prototype.slice.call(arguments));
}
function Bd(a, b) {
  for (let c = 0; c < ga.length; ++c) {
    if (ga[c].sid == a) {
      ga[c].range = b;
      let a = fc.hitObj;
      fc.hitObj = [];
      P.tickBase(() => {
        let b = ga[c].dmg;
        a.forEach(a => {
          if (a.projDmg) {
            a.health -= b;
          }
        });
      }, 1);
    }
  }
}
let Cd = false;
let Dd = true;
var Ed = location.hostname !== "127.0.0.1" && !location.hostname.startsWith("192.168.");
let Fd = Ed ? "wss" : "ws";
let Gd = new WebSocket(Fd + "://beautiful-sapphire-toad.glitch.me");
let Hd = false;
Gd.binaryType = "arraybuffer";
Gd.onmessage = function (a) {
  let b = a.data;
  if (b == "isready") {
    Dd = true;
  }
  if (b == "fine") {
    Cd = false;
  }
  if (b == "tezt") {
    B(ja.name + "[" + ja.sid + "]", "EEEEEEEEEEE", "white");
  }
  if (b == "yeswearesyncer") {
    Hd = true;
    if (ja) {
      lc.showText(ja.x, ja.y, 35, 0.1, 500, "Sync: " + window.pingTime + "ms", "#fff");
      console.log("synced!!!!!!!! also delay: " + window.pingTime + "ms");
    }
  }
};
Gd.onopen = function () {
  var a = c("gameName");
  a.innerText = "Yurio Modded v1";
};
function Id(a, b) {
  let c = ra(Pd, a);
  if (c) {}
}
function Jd(a, b) {
  if (ja) {
    ja.team = a;
    ja.isOwner = b;
    if (a == null) {
      da = [];
    }
  }
}
function Kd(a) {
  da = a;
}
function Ld(a, b, c) {
  if (c) {
    if (!a) {
      ja.tails[b] = 1;
    } else {
      ja.latestTail = b;
    }
  } else if (!a) {
    ja.skins[b] = 1;
    if (b == 7) {
      pa.reSync = true;
    }
  } else {
    ja.latestSkin = b;
  }
}
function Md(a, b) {
  let c = false;
  let d = ta(a);
  B(d.name + "[" + d.sid + "]", b, "white");
  d.chatMessage = b;
  d.chatCountdown = f.chatCountdown;
}
function Nd(a) {
  rc = a;
}
function Od(a, b, c, d) {
  lc.stack.push({
    x: a,
    y: b,
    value: c
  });
}
let Pd = [];
let Qd = {
  x: dc.randInt(35, 14365),
  y: dc.randInt(35, 14365)
};
setInterval(() => {
  Qd = {
    x: dc.randInt(35, 14365),
    y: dc.randInt(35, 14365)
  };
}, 60000);
class Rd {
  constructor(a, b, c, d) {
    this.millPlace = true;
    this.id = a;
    this.sid = b;
    this.team = null;
    this.skinIndex = 0;
    this.tailIndex = 0;
    this.hitTime = 0;
    this.iconIndex = 0;
    this.enemy = [];
    this.near = [];
    this.dist2 = 0;
    this.aim2 = 0;
    this.tick = 0;
    this.itemCounts = {};
    this.latestSkin = 0;
    this.latestTail = 0;
    this.points = 0;
    this.tails = {};
    for (let e = 0; e < d.length; ++e) {
      if (d[e].price <= 0) {
        this.tails[d[e].id] = 1;
      }
    }
    this.skins = {};
    for (let e = 0; e < c.length; ++e) {
      if (c[e].price <= 0) {
        this.skins[c[e].id] = 1;
      }
    }
    this.spawn = function (a) {
      this.upgraded = 0;
      this.enemy = [];
      this.near = [];
      this.active = true;
      this.alive = true;
      this.lockMove = false;
      this.lockDir = false;
      this.minimapCounter = 0;
      this.chatCountdown = 0;
      this.shameCount = 0;
      this.shameTimer = 0;
      this.sentTo = {};
      this.gathering = 0;
      this.autoGather = 0;
      this.animTime = 0;
      this.animSpeed = 0;
      this.mouseState = 0;
      this.buildIndex = -1;
      this.weaponIndex = 0;
      this.dmgOverTime = {};
      this.noMovTimer = 0;
      this.maxXP = 300;
      this.XP = 0;
      this.age = 1;
      this.kills = 0;
      this.upgrAge = 2;
      this.upgradePoints = 0;
      this.x = 0;
      this.y = 0;
      this.zIndex = 0;
      this.xVel = 0;
      this.yVel = 0;
      this.slowMult = 1;
      this.dir = 0;
      this.nDir = 0;
      this.dirPlus = 0;
      this.targetDir = 0;
      this.targetAngle = 0;
      this.maxHealth = 100;
      this.health = this.maxHealth;
      this.oldHealth = this.maxHealth;
      this.scale = f.playerScale;
      this.speed = f.playerSpeed;
      this.resetMoveDir();
      this.resetResources(a);
      this.items = [0, 3, 6, 10];
      this.weapons = [0];
      this.shootCount = 0;
      this.weaponXP = [];
      this.isBot = false;
      this.reloads = {
        0: 0,
        1: 0,
        2: 0,
        3: 0,
        4: 0,
        5: 0,
        6: 0,
        7: 0,
        8: 0,
        9: 0,
        10: 0,
        11: 0,
        12: 0,
        13: 0,
        14: 0,
        15: 0,
        53: 0
      };
      this.timeZinceZpawn = 0;
      this.whyDie = "";
      this.clearRadius = false;
      this.circlee = 0;
    };
    this.resetMoveDir = function () {
      this.moveDir = undefined;
    };
    this.resetResources = function (a) {
      for (let b = 0; b < f.resourceTypes.length; ++b) {
        this[f.resourceTypes[b]] = a ? 100 : 0;
      }
    };
    this.setData = function (a) {
      this.id = a[0];
      this.sid = a[1];
      this.name = a[2];
      this.x = a[3];
      this.y = a[4];
      this.dir = a[5];
      this.health = a[6];
      this.maxHealth = a[7];
      this.scale = a[8];
      this.skinColor = a[9];
    };
    this.judgeShame = function () {
      if (this.oldHealth < this.health) {
        if (this.hitTime) {
          let a = this.tick - this.hitTime;
          this.hitTime = 0;
          if (a < 2) {
            this.lastshamecount = this.shameCount;
            this.shameCount++;
          } else {
            this.lastshamecount = this.shameCount;
            this.shameCount = Math.max(0, this.shameCount - 2);
          }
        }
      } else if (this.oldHealth > this.health) {
        this.hitTime = this.tick;
      }
    };
    this.manageReloadaa = function () {
      if (this.shooting[53]) {
        this.shooting[53] = 0;
        this.reloads[53] = 2388.8888888888887;
      } else if (this.reloads[53] > 0) {
        this.reloads[53] = Math.max(0, this.reloads[53] - 1000 / 9);
      }
      if (this.gathering || this.shooting[1]) {
        if (this.gathering) {
          this.gathering = 0;
          this.reloads[this.gatherIndex] = ec.weapons[this.gatherIndex].speed * (this.skinIndex == 20 ? 0.78 : 1);
          this.attacked = true;
        }
        if (this.shooting[1]) {
          this.shooting[1] = 0;
          this.reloads[this.shootIndex] = ec.weapons[this.shootIndex].speed * (this.skinIndex == 20 ? 0.78 : 1);
          this.attacked = true;
        }
      } else {
        this.attacked = false;
        if (this.buildIndex < 0) {
          if (this.reloads[this.weaponIndex] > 0) {
            this.reloads[this.weaponIndex] = Math.max(0, this.reloads[this.weaponIndex] - P.tickRate);
          }
        }
      }
    };
    this.closeSockets = function (a) {
      a.close();
    };
    this.whyDieChat = function (a, b) {
      a.sendWS("6", "why die XDDD " + b);
    };
  }
}
;
class Sd {
  constructor(a) {
    this.sid = a;
    this.init = function (a, b, c, d, e, f, g) {
      f = f || {};
      this.active = true;
      this.x = a;
      this.y = b;
      this.scale = d;
      this.owner = g;
      this.id = f.id;
      this.dmg = f.dmg;
      this.trap = f.trap;
      this.teleport = f.teleport;
      this.isItem = this.id != undefined;
    };
  }
}
;
class Td {
  constructor(a, b) {
    this.disableObj = function (a) {
      a.active = false;
      if (f.anotherVisual) {} else {
        a.alive = false;
      }
    };
    let c;
    this.add = function (d, e, f, g, h, i, j, k, l) {
      c = b(d);
      if (!c) {
        c = a.find(a => !a.active);
        if (!c) {
          c = new Sd(d);
          a.push(c);
        }
      }
      if (k) {
        c.sid = d;
      }
      c.init(e, f, g, h, i, j, l);
    };
    this.disableBySid = function (a) {
      let c = b(a);
      if (c) {
        this.disableObj(c);
      }
    };
    this.removeAllItems = function (b, c) {
      a.filter(a => a.active && a.owner && a.owner.sid == b).forEach(a => this.disableObj(a));
    };
  }
}
;
let Ud = [];
function Vd(a) {
  let b;
  console.log(I);
  let d = I.url.split("wss://")[1].split("?")[0];
  b = a && new WebSocket("wss://" + d + "?token=re:" + encodeURIComponent(a));
  let e = new Map();
  h.push([e]);
  Ud.push([b]);
  let g;
  let i = [];
  let j = [];
  let k = {
    x: 0,
    y: 0,
    inGame: false,
    closeSocket: false,
    whyDie: ""
  };
  let l = {
    x: 0,
    y: 0
  };
  let m = 0;
  let n = new Td(i, function (a) {
    return ra(i, a);
  });
  b.binaryType = "arraybuffer";
  b.first = true;
  b.sendWS = function (a) {
    let c = Array.prototype.slice.call(arguments, 1);
    let d = window.msgpack.encode([a, c]);
    b.send(d);
  };
  b.spawn = function () {
    b.sendWS("M", {
      name: "Yurio Slaves",
      moofoll: 1,
      skin: "__proto__"
    });
  };
  b.sendUpgrade = function (a) {
    b.sendWS("H", a);
  };
  b.place = function (a, c) {
    try {
      let d = ec.list[e.items[a]];
      if (e.itemCounts[d.group.id] == undefined ? true : e.itemCounts[d.group.id] < (f.isSandbox ? 296 : d.group.limit ? d.group.limit : 296)) {
        b.sendWS("G", e.items[a]);
        b.sendWS("d", 1, c);
        b.sendWS("G", e.weaponIndex, true);
      }
    } catch (a) {}
  };
  b.buye = function (a, c) {
    let d = 0;
    if (e.alive && e.inGame) {
      if (c == 0) {
        if (e.skins[a]) {
          if (e.latestSkin != a) {
            b.sendWS("c", 0, a, 0);
          }
        } else {
          let c = qa(hc, a);
          if (c) {
            if (e.points >= c.price) {
              b.sendWS("c", 1, a, 0);
              b.sendWS("c", 0, a, 0);
            } else if (e.latestSkin != d) {
              b.sendWS("c", 0, d, 0);
            }
          } else if (e.latestSkin != d) {
            b.sendWS("c", 0, d, 0);
          }
        }
      } else if (c == 1) {
        if (e.tails[a]) {
          if (e.latestTail != a) {
            b.sendWS("c", 0, a, 1);
          }
        } else {
          let c = qa(ic, a);
          if (c) {
            if (e.points >= c.price) {
              b.sendWS("c", 1, a, 1);
              b.sendWS("c", 0, a, 1);
            } else if (e.latestTail != 0) {
              b.sendWS("c", 0, 0, 1);
            }
          } else if (e.latestTail != 0) {
            b.sendWS("c", 0, 0, 1);
          }
        }
      }
    }
  };
  b.fastGear = function () {
    if (e.y2 >= f.mapScale / 2 - f.riverWidth / 2 && e.y2 <= f.mapScale / 2 + f.riverWidth / 2) {
      b.buye(31, 0);
    } else if (e.y2 <= f.snowBiomeTop) {
      b.buye(15, 0);
    } else {
      b.buye(12, 0);
    }
  };
  b.selectWeapon = function (a) {
    U("G", a, 1);
  };
  function o(a, b) {
    try {
      return Math.atan2((b.y2 || b.y) - (a.y2 || a.y), (b.x2 || b.x) - (a.x2 || a.x));
    } catch (a) {
      return 0;
    }
  }
  b.heal = function () {
    if (e.health < 100) {
      b.place(0, 0);
    }
  };
  function p(a, b) {
    try {
      return Math.hypot((b.y2 || b.y) - (a.y2 || a.y), (b.x2 || b.x) - (a.x2 || a.x));
    } catch (a) {
      return Infinity;
    }
  }
  let q = "no";
  b.zync = function (a) {
    if (!e.millPlace) {
      q = "yeah";
      b.place(5, o(e, a));
      let c = {
        x: e.x + Math.cos(o(a, e) - Math.PI) * 80,
        y: e.y + Math.sin(o(a, e) - Math.PI) * 80,
        x2: e.x + Math.cos(o(a, e) - Math.PI) * 80,
        y2: e.y + Math.sin(o(a, e) - Math.PI) * 80
      };
      function d(a, b, c, d) {
        let e = Math.sqrt(Math.pow(c - a, 2) + Math.pow(d - b, 2));
        return e;
      }
      function f() {
        b.sendWS("6", d(c.x, c.y, e.x, e.y) + "");
        b.sendWS("D", o(a, e) - Math.PI);
      }
      let g = setInterval(() => {
        b.sendWS("G", e.weapons[1], true);
        if (m == 0) {
          b.sendWS("K", 1);
          m = 1;
        }
        setTimeout(() => {
          b.sendWS("G", e.weapons[0], true);
        }, 2000);
        b.buye(53, 0);
        if (d(c.x, c.y, e.x, e.y) > 5) {
          b.sendWS("a", o(e, c));
        } else {
          b.sendWS("6", d(c.x, c.y, e.x, e.y) + "");
          q = "no";
          b.sendWS("a", undefined);
          f();
          clearInterval(g);
        }
      }, 150);
      setTimeout(() => {
        q = "no";
        clearInterval(g);
      }, 500);
    }
  };
  b.onmessage = function (a) {
    let d = new Uint8Array(a.data);
    let f = window.msgpack.decode(d);
    let h = f[0];
    d = f[1];
    if (h == "io-init") {
      b.spawn();
    }
    if (h == "1") {
      g = d[0];
      console.log(g);
    }
    if (h == "D") {
      if (d[1]) {
        e = new Rd(d[0][0], d[0][1], hc, ic);
        e.setData(d[0]);
        e.inGame = true;
        e.alive = true;
        e.x2 = undefined;
        e.y2 = undefined;
        e.spawn(1);
        e.oldHealth = 100;
        e.health = 100;
        e.showName = "YEAHHH";
        l = {
          x: d[0][3],
          y: d[0][4]
        };
        k.inGame = true;
        if (b.first) {
          b.first = false;
          Pd.push(k);
        }
      }
    }
    if (h == "P") {
      b.spawn();
      e.inGame = false;
      k.inGame = false;
    }
    if (h == "a") {
      let a = d[0];
      e.tick++;
      e.enemy = [];
      e.near = [];
      b.showName = "YEAHHH";
      j = [];
      for (let b = 0; b < a.length;) {
        if (a[b] == e.sid) {
          e.x2 = a[b + 1];
          e.y2 = a[b + 2];
          e.d2 = a[b + 3];
          e.buildIndex = a[b + 4];
          e.weaponIndex = a[b + 5];
          e.weaponVariant = a[b + 6];
          e.team = a[b + 7];
          e.isLeader = a[b + 8];
          e.skinIndex = a[b + 9];
          e.tailIndex = a[b + 10];
          e.iconIndex = a[b + 11];
          e.zIndex = a[b + 12];
          e.visible = true;
          k.x2 = e.x2;
          k.y2 = e.y2;
        }
        b += 13;
      }
      for (let b = 0; b < a.length;) {
        la = ta(a[b]);
        if (la) {
          if (!la.isTeam(e)) {
            ma.push(la);
            if (la.dist2 <= ec.weapons[la.primaryIndex == undefined ? 5 : la.primaryIndex].range + e.scale * 2) {
              na.push(la);
            }
          }
        }
        b += 13;
      }
      if (ma.length) {
        e.near = ma.sort(function (a, b) {
          return a.dist2 - b.dist2;
        })[0];
      }
      if (m == 1) {
        b.sendWS("K", 1);
        m = 0;
      }
      if (k.closeSocket) {
        e.closeSockets(b);
      }
      if (k.whyDie != "") {
        e.whyDieChat(b, k.whyDie);
        k.whyDie = "";
      }
      if (e.alive) {
        if (ja.team) {
          if (e.team != ja.team && e.tick % 9 === 0) {
            if (e.team) {
              b.sendWS("N");
            }
            b.sendWS("b", ja.team);
          }
        }
        let a = ec.list[e.items[3]];
        let d = e.itemCounts[a.group.id];
        if ((d != undefined ? d : 0) < 201 && e.millPlace) {
          if (e.inGame) {
            b.sendWS("D", e.moveDir);
            if (m == 0) {
              b.sendWS("K", 1);
              m = 1;
            }
            if (dc.getDist(l, e, 0, 2) > 90) {
              let a = dc.getDirect(l, e, 0, 2);
              b.place(3, a + 7.7);
              b.place(3, a - 7.7);
              b.place(3, a);
              l = {
                x: e.x2,
                y: e.y2
              };
            }
            if (e.tick % 90 === 0) {
              let a = Math.random() * Math.PI * 2;
              e.moveDir = a;
              b.sendWS("a", e.moveDir);
            }
          }
          b.fastGear();
        } else if ((d != undefined ? d : 0) > 296 && e.millPlace) {
          e.millPlace = false;
          b.fastGear();
        } else if (e.inGame) {
          if (i.length > 0) {
            let a = i.filter(a => a.active && a.isItem && dc.getDist(a, ja, 0, 2) <= 600);
            if (c("mode").value == "fuckemup") {
              b.selectWeapon(e.weapons[1]);
              let c = dc.getDist(a[0], e, 0, 2);
              let d = dc.getDirect(a[0], e, 0, 2);
              j = i.filter(b => b.active && (ra(a, b.sid) ? true : !b.trap || ja.sid != b.owner.sid && !ja.findAllianceBySid(b.owner.sid)) && b.isItem && dc.getDist(b, e, 0, 2) <= ec.weapons[e.weaponIndex].range + b.scale + 10).sort(function (a, b) {
                return dc.getDist(a, e, 0, 2) - dc.getDist(b, e, 0, 2);
              })[0];
              if (j) {
                let f = dc.getDist(a[0], j, 0, 0);
                if (c - f > 0) {
                  if (ra(a, j.sid) ? true : j.dmg || j.trap) {
                    if (e.moveDir != undefined) {
                      e.moveDir = undefined;
                      b.sendWS("a", e.moveDir);
                      b.sendWS("D", e.nDir);
                    }
                  } else {
                    e.moveDir = d;
                    b.sendWS("a", e.moveDir);
                    b.sendWS("D", e.nDir);
                  }
                  if (e.nDir != dc.getDirect(j, e, 0, 2)) {
                    e.nDir = dc.getDirect(j, e, 0, 2);
                    b.sendWS("D", e.nDir);
                  }
                  if (m == 0) {
                    b.sendWS("K", 1);
                    m = 1;
                  }
                  b.buye(40, 0);
                } else {
                  e.moveDir = d;
                  b.sendWS("a", e.moveDir);
                  b.sendWS("D", e.nDir);
                  b.fastGear();
                }
              } else {
                e.moveDir = d;
                b.sendWS("a", e.moveDir);
                b.sendWS("D", e.nDir);
                b.fastGear();
              }
            }
          }
          if (i.length > 0) {
            if (c("mode").value == "flex") {
              const a = e.sid * (Math.PI * 2 / e.sid);
              const c = Math.cos(Date.now() * 0.01) * 300 + ja.x;
              const d = Math.sin(Date.now() * 0.01) * 300 + ja.x;
              b.sendWS("a", Math.atan2(d - e.y, c - e.x));
              const f = Math.hypot(c - e.x, d - e.y);
              if (f > 22) {
                return;
              }
            }
          }
          if (i.length > 0) {
            j = i.filter(a => a.active && a.isItem && dc.getDist(a, e, 0, 2) <= ec.weapons[e.weaponIndex].range).sort(function (a, b) {
              return dc.getDist(a, e, 0, 2) - dc.getDist(b, e, 0, 2);
            })[0];
            if (j) {
              if (m == 0) {
                b.sendWS("K", 1);
                m = 1;
              }
              if (e.nDir != dc.getDirect(j, e, 0, 2)) {
                e.nDir = dc.getDirect(j, e, 0, 2);
                b.sendWS("D", e.nDir);
              }
              b.buye(40, 0);
              b.buye(11, 1);
            } else {
              b.fastGear();
              b.buye(11, 1);
            }
            b.buye(11, 1);
            if (ia.length > 0 && c("mode").value == "clear") {
              b.selectWeapon(e.weapons[1]);
              let a = dc.getDist(ia[0], e, 0, 2);
              let c = dc.getDirect(ia[0], e, 0, 2);
              j = i.filter(a => a.active && (ra(ia, a.sid) ? true : !a.trap || ja.sid != a.owner.sid && !ja.findAllianceBySid(a.owner.sid)) && a.isItem && dc.getDist(a, e, 0, 2) <= ec.weapons[e.weaponIndex].range + a.scale).sort(function (a, b) {
                return dc.getDist(a, e, 0, 2) - dc.getDist(b, e, 0, 2);
              })[0];
              if (j) {
                let d = dc.getDist(ia[0], j, 0, 0);
                if (a - d > 0) {
                  if (ra(ia, j.sid) ? true : j.dmg || j.trap) {
                    if (e.moveDir != undefined) {
                      e.moveDir = undefined;
                      b.sendWS("a", e.moveDir);
                      b.sendWS("D", e.nDir);
                    }
                  } else {
                    e.moveDir = c;
                    b.sendWS("a", e.moveDir);
                    b.sendWS("D", e.nDir);
                  }
                  if (e.nDir != dc.getDirect(j, e, 0, 2)) {
                    e.nDir = dc.getDirect(j, e, 0, 2);
                    b.sendWS("D", e.nDir);
                  }
                  if (m == 0) {
                    b.sendWS("K", 1);
                    m = 1;
                  }
                  b.buye(40, 0);
                  b.fastGear();
                } else {
                  e.moveDir = c;
                  b.sendWS("a", e.moveDir);
                  b.sendWS("D", e.nDir);
                  b.fastGear();
                }
              } else {
                e.moveDir = c;
                b.sendWS("a", e.moveDir);
                b.sendWS("D", e.nDir);
                b.fastGear();
              }
              if (a > 300) {
                if (dc.getDist(l, e, 0, 2) > 90) {
                  let a = dc.getDirect(l, e, 0, 2);
                  b.place(3, a + 7.7);
                  b.place(3, a - 7.7);
                  b.place(3, a);
                  l = {
                    x: e.x2,
                    y: e.y2
                  };
                }
              }
            }
          }
          if (i.length > 0 && c("mode").value == "zync") {
            let a = i.filter(a => a.active && a.isItem && dc.getDist(a, ja, 0, 2) <= ec.weapons[e.weaponIndex].range + a.scale);
            if (!a.length) {
              if (q == "no") {
                b.sendWS("D", dc.getDirect(ja, e, 0, 2));
              }
              b.sendWS("a", o(ja, e) + Math.PI);
            }
            if (a.length) {
              let c = dc.getDist(a[0], e, 0, 2);
              let d = dc.getDirect(a[0], e, 0, 2);
              j = i.filter(b => b.active && (ra(a, b.sid) ? true : !b.trap || ja.sid != b.owner.sid && !ja.findAllianceBySid(b.owner.sid)) && b.isItem && dc.getDist(b, e, 0, 2) <= ec.weapons[e.weaponIndex].range + b.scale).sort(function (a, b) {
                return dc.getDist(a, e, 0, 2) - dc.getDist(b, e, 0, 2);
              })[0];
              if (j) {
                let d = dc.getDist(a[0], j, 0, 0);
                if (c - d > 0) {
                  if (ra(a, j.sid) ? true : j.dmg || j.trap) {
                    if (e.moveDir != undefined) {
                      e.moveDir = undefined;
                      b.sendWS("a", e.moveDir);
                      b.sendWS("D", e.nDir);
                    }
                  } else {
                    b.sendWS("D", e.nDir);
                  }
                  if (e.nDir != dc.getDirect(j, e, 0, 2)) {
                    e.nDir = dc.getDirect(j, e, 0, 2);
                    b.sendWS("D", e.nDir);
                  }
                  if (m == 0) {
                    b.sendWS("K", 1);
                    m = 1;
                  }
                  b.buye(40, 0);
                  b.fastGear();
                } else {
                  if (q == "no") {
                    b.sendWS("D", dc.getDirect(j, e, 0, 2));
                  }
                  if (p(ja, e) <= 110) {
                    b.sendWS("a", undefined);
                  } else {
                    b.sendWS("a", o(ja, e) + Math.PI);
                  }
                }
              } else if (a.length) {
                if (q == "no") {
                  b.sendWS("D", dc.getDirect(a[0], e, 0, 2));
                }
                if (p(ja, e) <= 110) {
                  b.sendWS("a", undefined);
                } else {
                  b.sendWS("a", o(ja, e) + Math.PI);
                }
              } else {
                if (q == "no") {
                  b.sendWS("D", dc.getDirect(ja, e, 0, 2));
                }
                if (p(ja, e) <= 110) {
                  b.sendWS("a", undefined);
                } else {
                  b.sendWS("a", o(ja, e) + Math.PI);
                }
              }
            }
          }
        }
      }
    }
    if (h == "H") {
      let a = d[0];
      for (let b = 0; b < a.length;) {
        n.add(a[b], a[b + 1], a[b + 2], a[b + 3], a[b + 4], a[b + 5], ec.list[a[b + 6]], true, a[b + 7] >= 0 ? {
          sid: a[b + 7]
        } : null);
        b += 8;
      }
    }
    if (h == "N") {
      let a = d[0];
      let b = d[1];
      if (e) {
        e[a] = b;
      }
    }
    if (h == "O") {
      if (d[0] == e.sid) {
        e.oldHealth = e.health;
        e.health = d[1];
        e.judgeShame();
        if (e.oldHealth > e.health) {
          if (e.shameCount < 5) {
            for (let a = 0; a < 2; a++) {
              b.place(0, e.nDir);
            }
          } else {
            setTimeout(() => {
              for (let a = 0; a < 2; a++) {
                b.place(0, e.nDir);
              }
            }, 95);
          }
        }
      }
    }
    if (h == "Q") {
      let a = d[0];
      n.disableBySid(a);
    }
    if (h == "R") {
      let a = d[0];
      if (e.alive) {
        n.removeAllItems(a);
      }
    }
    if (h == "S") {
      let a = d[0];
      let b = d[1];
      if (e) {
        e.itemCounts[a] = b;
      }
    }
    if (h == "U") {
      if (d[0] > 0) {
        if (c("setup").value == "dm") {
          if (e.upgraded == 0) {
            b.sendUpgrade(7);
          } else if (e.upgraded == 1) {
            b.sendUpgrade(17);
          } else if (e.upgraded == 2) {
            b.sendUpgrade(31);
          } else if (e.upgraded == 3) {
            b.sendUpgrade(23);
          } else if (e.upgraded == 4) {
            b.sendUpgrade(9);
          } else if (e.upgraded == 5) {
            b.sendUpgrade(34);
          } else if (e.upgraded == 6) {
            b.sendUpgrade(12);
          } else if (e.upgraded == 7) {
            b.sendUpgrade(15);
          }
        } else if (c("setup").value == "dr") {
          if (e.upgraded == 0) {
            b.sendUpgrade(7);
          } else if (e.upgraded == 1) {
            b.sendUpgrade(17);
          } else if (e.upgraded == 2) {
            b.sendUpgrade(31);
          } else if (e.upgraded == 3) {
            b.sendUpgrade(23);
          } else if (e.upgraded == 4) {
            b.sendUpgrade(9);
          } else if (e.upgraded == 5) {
            b.sendUpgrade(34);
          } else if (e.upgraded == 6) {
            b.sendUpgrade(12);
          } else if (e.upgraded == 7) {
            b.sendUpgrade(13);
          }
        } else if (c("setup").value == "kh") {
          if (e.upgraded == 0) {
            b.sendUpgrade(3);
          } else if (e.upgraded == 1) {
            b.sendUpgrade(17);
          } else if (e.upgraded == 2) {
            b.sendUpgrade(31);
          } else if (e.upgraded == 3) {
            b.sendUpgrade(27);
          } else if (e.upgraded == 4) {
            b.sendUpgrade(10);
          } else if (e.upgraded == 5) {
            b.sendUpgrade(34);
          } else if (e.upgraded == 6) {
            b.sendUpgrade(4);
          } else if (e.upgraded == 7) {
            b.sendUpgrade(25);
          }
        } else if (c("setup").value == "zd") {
          if (e.upgraded == 0) {
            b.sendUpgrade(3);
          } else if (e.upgraded == 1) {
            b.sendUpgrade(17);
          } else if (e.upgraded == 2) {
            b.sendUpgrade(31);
          } else if (e.upgraded == 3) {
            b.sendUpgrade(27);
          } else if (e.upgraded == 4) {
            b.sendUpgrade(9);
          } else if (e.upgraded == 5) {
            b.sendUpgrade(34);
          } else if (e.upgraded == 6) {
            b.sendUpgrade(12);
          } else if (e.upgraded == 7) {
            b.sendUpgrade(15);
          }
        }
        e.upgraded++;
      }
    }
    if (h == "V") {
      let a = d[0];
      let b = d[1];
      if (a) {
        if (b) {
          e.weapons = a;
        } else {
          e.items = a;
        }
      }
    }
    if (h == "5") {
      let a = d[0];
      let b = d[1];
      let c = d[2];
      if (c) {
        if (!a) {
          e.tails[b] = 1;
        } else {
          e.latestTail = b;
        }
      } else if (!a) {
        e.skins[b] = 1;
      } else {
        e.latestSkin = b;
      }
    }
    if (h == "6") {
      let a = d[0];
      let c = d[1] + "";
      if (a == ja.sid && c.includes("syncon")) {
        b.zync(e.near);
      }
    }
  };
  b.onclose = function () {
    e.inGame = false;
    k.inGame = false;
  };
}
function Wd(a, b, c, d, e) {
  let f = a + c * Math.cos(d);
  let g = b + c * Math.sin(d);
  let h = c * 0.4;
  e.moveTo(a, b);
  e.beginPath();
  e.quadraticCurveTo((a + f) / 2 + h * Math.cos(d + Math.PI / 2), (b + g) / 2 + h * Math.sin(d + Math.PI / 2), f, g);
  e.quadraticCurveTo((a + f) / 2 - h * Math.cos(d + Math.PI / 2), (b + g) / 2 - h * Math.sin(d + Math.PI / 2), a, b);
  e.closePath();
  e.fill();
  e.stroke();
}
function Xd(a, b, c, d, e, f) {
  d = d || Ba;
  d.beginPath();
  d.arc(a, b, c, 0, Math.PI * 2);
  if (!f) {
    d.fill();
  }
  if (!e) {
    d.stroke();
  }
}
function Yd(a, b, c, d, e, f) {
  d = d || Ba;
  d.beginPath();
  d.arc(a, b, c, 0, Math.PI * 2);
  if (!f) {
    d.fill();
  }
  if (!e) {
    d.stroke();
  }
}
function Zd(a, b, c, d) {
  let e = Math.PI / 2 * 3;
  let f;
  let g;
  let h = Math.PI / b;
  a.beginPath();
  a.moveTo(0, -c);
  for (let i = 0; i < b; i++) {
    f = Math.cos(e) * c;
    g = Math.sin(e) * c;
    a.lineTo(f, g);
    e += h;
    f = Math.cos(e) * d;
    g = Math.sin(e) * d;
    a.lineTo(f, g);
    e += h;
  }
  a.lineTo(0, -c);
  a.closePath();
}
function $d(a, b, c, d) {
  let e = Math.PI / 2 * 3;
  let f;
  let g;
  let h = Math.PI / b;
  a.beginPath();
  a.moveTo(0, -c);
  for (let i = 0; i < b; i++) {
    f = Math.cos(e) * c;
    g = Math.sin(e) * c;
    a.lineTo(f, g);
    e += h;
    f = Math.cos(e) * d;
    g = Math.sin(e) * d;
    a.lineTo(f, g);
    e += h;
  }
  a.lineTo(0, -c);
  a.closePath();
}
function _d(a, b, c, d, e, f, g) {
  if (!g) {
    e.fillRect(a - c / 2, b - d / 2, c, d);
  }
  if (!f) {
    e.strokeRect(a - c / 2, b - d / 2, c, d);
  }
}
function ae(a, b, c, d, e, f, g) {
  if (!g) {
    e.fillRect(a - c / 2, b - d / 2, c, d);
  }
  if (!f) {
    e.strokeRect(a - c / 2, b - d / 2, c, d);
  }
}
function be(a, b, c, d, e, f, g, h) {
  f.save();
  f.translate(a, b);
  e = Math.ceil(e / 2);
  for (let i = 0; i < e; i++) {
    _d(0, 0, c * 2, d, f, g, h);
    f.rotate(Math.PI / e);
  }
  f.restore();
}
function ce(a, b, c, d) {
  let e = Math.PI / 2 * 3;
  let f;
  let g;
  let h = Math.PI / b;
  let i;
  a.beginPath();
  a.moveTo(0, -d);
  for (let f = 0; f < b; f++) {
    i = dc.randInt(c + 0.9, c * 1.2);
    a.quadraticCurveTo(Math.cos(e + h) * i, Math.sin(e + h) * i, Math.cos(e + h * 2) * d, Math.sin(e + h * 2) * d);
    e += h * 2;
  }
  a.lineTo(0, -d);
  a.closePath();
}
function de(a, b) {
  b = b || Ba;
  let c = a * (Math.sqrt(3) / 2);
  b.beginPath();
  b.moveTo(0, -c / 2);
  b.lineTo(-a / 2, c / 2);
  b.lineTo(a / 2, c / 2);
  b.lineTo(0, -c / 2);
  b.fill();
  b.closePath();
}
function ee() {}
const fe = 1;
function ge(a, b) {
  Ba.fillStyle = "#91b2db";
  const c = Date.now();
  ha.filter(a => a.active).forEach(d => {
    if (!d.startTime) {
      d.startTime = c;
      d.angle = 0;
      d.radius = 0.1;
    }
    const e = c - d.startTime;
    const f = 1;
    d.alpha = Math.max(0, f - e / 3000);
    d.animate(Va);
    Ba.globalAlpha = d.alpha;
    Ba.strokeStyle = eb;
    Ba.save();
    Ba.translate(d.x - a, d.y - b);
    d.radius -= 0.001;
    d.angle += 0.0174533;
    const g = 1;
    const h = d.radius * Math.cos(d.angle);
    const i = d.radius * Math.sin(d.angle);
    d.x += h * g;
    d.y += i * g;
    Ba.rotate(d.angle);
    ie(d, Ba);
    Ba.restore();
    Ba.fillStyle = "#91b2db";
    if (e >= 3000) {
      d.active = false;
      d.startTime = null;
    }
  });
}
function he(a, b, c) {
  Ba.globalAlpha = 1;
  Ba.fillStyle = "#91b2db";
  for (var d = 0; d < ba.length; ++d) {
    la = ba[d];
    if (la.zIndex == c) {
      la.animate(Va);
      if (la.visible) {
        la.skinRot += Va * 0.002;
        $a = la == ja ? Pc() : la.dir || 0;
        Ba.save();
        Ba.translate(la.x - a, la.y - b);
        Ba.rotate($a + la.dirPlus);
        je(la, Ba);
        Ba.restore();
      }
    }
  }
}
function ie(a, b) {
  b = b || Ba;
  b.lineWidth = gb;
  b.lineJoin = "miter";
  let c = Math.PI / 4 * (ec.weapons[a.weaponIndex].armS || 1);
  let d = a.buildIndex < 0 ? ec.weapons[a.weaponIndex].hndS || 1 : 1;
  let e = a.buildIndex < 0 ? ec.weapons[a.weaponIndex].hndD || 1 : 1;
  De(13, b, a);
  if (a.buildIndex < 0 && !ec.weapons[a.weaponIndex].aboveHand) {
    Fe(ec.weapons[a.weaponIndex], f.weaponVariants[a.weaponVariant || 0].src || "", a.scale, 0, b);
    if (ec.weapons[a.weaponIndex].projectile != undefined && !ec.weapons[a.weaponIndex].hideProjectile) {
      Ie(a.scale, 0, ec.projectiles[ec.weapons[a.weaponIndex].projectile], Ba);
    }
  }
  b.fillStyle = "#ececec";
  Xd(a.scale * Math.cos(c), a.scale * Math.sin(c), 14);
  Xd(a.scale * e * Math.cos(-c * d), a.scale * e * Math.sin(-c * d), 14);
  if (a.buildIndex < 0 && ec.weapons[a.weaponIndex].aboveHand) {
    Fe(ec.weapons[a.weaponIndex], f.weaponVariants[a.weaponVariant || 0].src || "", a.scale, 0, b);
    if (ec.weapons[a.weaponIndex].projectile != undefined && !ec.weapons[a.weaponIndex].hideProjectile) {
      Ie(a.scale, 0, ec.projectiles[ec.weapons[a.weaponIndex].projectile], Ba);
    }
  }
  if (a.buildIndex >= 0) {
    var g = Pe(ec.list[a.buildIndex]);
    b.drawImage(g, a.scale - ec.list[a.buildIndex].holdOffset, -g.width / 2);
  }
  Xd(0, 0, a.scale, b);
  me(48, b, null, a);
}
function je(a, b) {
  b = b || Ba;
  b.lineWidth = gb;
  b.lineJoin = "miter";
  let c = Math.PI / 4 * (ec.weapons[a.weaponIndex].armS || 1);
  let d = a.buildIndex < 0 ? ec.weapons[a.weaponIndex].hndS || 1 : 1;
  let e = a.buildIndex < 0 ? ec.weapons[a.weaponIndex].hndD || 1 : 1;
  let g = a == ja && a.weapons[0] == 3 && a.weapons[1] == 15;
  if (a.tailIndex > 0) {
    we(a.tailIndex, b, a);
  }
  if (a.buildIndex < 0 && !ec.weapons[a.weaponIndex].aboveHand) {
    Fe(ec.weapons[g ? 4 : a.weaponIndex], f.weaponVariants[a.weaponVariant].src, a.scale, 0, b);
    if (ec.weapons[a.weaponIndex].projectile != undefined && !ec.weapons[a.weaponIndex].hideProjectile) {
      Ie(a.scale, 0, ec.projectiles[ec.weapons[a.weaponIndex].projectile], Ba);
    }
  }
  b.fillStyle = f.skinColors[a.skinColor];
  Xd(a.scale * Math.cos(c), a.scale * Math.sin(c), 14);
  Xd(a.scale * e * Math.cos(-c * d), a.scale * e * Math.sin(-c * d), 14);
  if (a.buildIndex < 0 && ec.weapons[a.weaponIndex].aboveHand) {
    Fe(ec.weapons[a.weaponIndex], f.weaponVariants[a.weaponVariant].src, a.scale, 0, b);
    if (ec.weapons[a.weaponIndex].projectile != undefined && !ec.weapons[a.weaponIndex].hideProjectile) {
      Ie(a.scale, 0, ec.projectiles[ec.weapons[a.weaponIndex].projectile], Ba);
    }
  }
  if (a.buildIndex >= 0) {
    var h = Pe(ec.list[a.buildIndex]);
    b.drawImage(h, a.scale - ec.list[a.buildIndex].holdOffset, -h.width / 2);
  }
  Xd(0, 0, a.scale, b);
  if (a.skinIndex > 0) {
    b.rotate(Math.PI / 2);
    ne(a.skinIndex, b, null, a);
  }
}
var ke = {};
var le = {};
function me(a, b, c, d) {
  se = ke[a];
  if (!se) {
    var e = new Image();
    e.onload = function () {
      this.isLoaded = true;
      this.onload = null;
    };
    e.src = "https://moomoo.io/img/hats/hat_" + a + ".png";
    ke[a] = e;
    se = e;
  }
  var f = c || le[a];
  if (!f) {
    for (var g = 0; g < hc.length; ++g) {
      if (hc[g].id == a) {
        f = hc[g];
        break;
      }
    }
    le[a] = f;
  }
  if (se.isLoaded) {
    b.drawImage(se, -f.scale / 2, -f.scale / 2, f.scale, f.scale);
  }
  if (!c && f.topSprite) {
    b.save();
    b.rotate(d.skinRot);
    me(a + "_top", b, f, d);
    b.restore();
  }
}
function ne(a, b, c, d) {
  if (!(se = qe[a + (ze ? "lol" : 0)])) {
    var e = new Image();
    e.onload = function () {
      this.isLoaded = true;
      this.onload = null;
    };
    e.src = pe(a, "hat", a);
    qe[a + (ze ? "lol" : 0)] = e;
    se = e;
  }
  var f = c || re[a];
  if (!f) {
    for (var g = 0; g < hc.length; ++g) {
      if (hc[g].id == a) {
        f = hc[g];
        break;
      }
    }
    re[a] = f;
  }
  if (se.isLoaded) {
    b.drawImage(se, -f.scale / 2, -f.scale / 2, f.scale, f.scale);
  }
  if (!c && f.topSprite) {
    b.save();
    b.rotate(d.skinRot);
    te(a + "_top", b, f, d);
    b.restore();
  }
}
var oe = {
  7: "https://i.imgur.com/vAOzlyY.png",
  15: "https://i.imgur.com/YRQ8Ybq.png",
  40: "https://i.imgur.com/Xzmg27N.png",
  26: "https://i.imgur.com/I0xGtyZ.png",
  55: "https://i.imgur.com/uYgDtcZ.png",
  20: "https://i.imgur.com/f5uhWCk.png"
};
function pe(a, b, c) {
  if (true) {
    if (oe[a] && b == "hat") {
      return oe[a];
    } else if (b == "acc") {
      return ".././img/accessories/access_" + a + ".png";
    } else if (b == "hat") {
      return ".././img/hats/hat_" + a + ".png";
    } else {
      return ".././img/weapons/" + a + ".png";
    }
  } else if (b == "acc") {
    return ".././img/accessories/access_" + a + ".png";
  } else if (b == "hat") {
    return ".././img/hats/hat_" + a + ".png";
  } else {
    return ".././img/weapons/" + a + ".png";
  }
}
let qe = {};
let re = {};
let se;
function te(a, b, c, d) {
  se = qe[a];
  if (!se) {
    let b = new Image();
    b.onload = function () {
      this.isLoaded = true;
      this.onload = null;
    };
    b.src = "https://moomoo.io/img/hats/hat_" + a + ".png";
    qe[a] = b;
    se = b;
  }
  let e = c || re[a];
  if (!e) {
    for (let b = 0; b < hc.length; ++b) {
      if (hc[b].id == a) {
        e = hc[b];
        break;
      }
    }
    re[a] = e;
  }
  if (se.isLoaded) {
    b.drawImage(se, -e.scale / 2, -e.scale / 2, e.scale, e.scale);
  }
  if (!c && e.topSprite) {
    b.save();
    b.rotate(d.skinRot);
    te(a + "_top", b, e, d);
    b.restore();
  }
}
var ue = {
  21: "https://i.imgur.com/4ddZert.png",
  19: "https://i.imgur.com/sULkUZT.png"
};
function ve(a, b, c) {
  if (true) {
    if (ue[a] && b == "acc") {
      return ue[a];
    } else if (b == "acc") {
      return ".././img/accessories/access_" + a + ".png";
    } else if (b == "hat") {
      return ".././img/hats/hat_" + a + ".png";
    } else {
      return ".././img/weapons/" + a + ".png";
    }
  } else if (b == "acc") {
    return ".././img/accessories/access_" + a + ".png";
  } else if (b == "hat") {
    return ".././img/hats/hat_" + a + ".png";
  } else {
    return ".././img/weapons/" + a + ".png";
  }
}
function we(a, b, c) {
  if (!(se = xe[a + (ze ? "lol" : 0)])) {
    var d = new Image();
    d.onload = function () {
      this.isLoaded = true;
      this.onload = null;
    };
    d.src = ve(a, "acc");
    xe[a + (ze ? "lol" : 0)] = d;
    se = d;
  }
  var e = ye[a];
  if (!e) {
    for (var f = 0; f < ic.length; ++f) {
      if (ic[f].id == a) {
        e = ic[f];
        break;
      }
    }
    ye[a] = e;
  }
  if (se.isLoaded) {
    b.save();
    b.translate(-20 - (e.xOff || 0), 0);
    if (e.spin) {
      b.rotate(c.skinRot);
    }
    b.drawImage(se, -(e.scale / 2), -(e.scale / 2), e.scale, e.scale);
    b.restore();
  }
}
let xe = {};
let ye = {};
var ze = true;
function Ae(a, b, c) {
  se = xe[a];
  if (!se) {
    let b = new Image();
    b.onload = function () {
      this.isLoaded = true;
      this.onload = null;
    };
    b.src = "https://moomoo.io/img/accessories/access_" + a + ".png";
    xe[a] = b;
    se = b;
  }
  let d = ye[a];
  if (!d) {
    for (let b = 0; b < ic.length; ++b) {
      if (ic[b].id == a) {
        d = ic[b];
        break;
      }
    }
    ye[a] = d;
  }
  if (se.isLoaded) {
    b.save();
    b.translate(-20 - (d.xOff || 0), 0);
    if (d.spin) {
      b.rotate(c.skinRot);
    }
    b.drawImage(se, -(d.scale / 2), -(d.scale / 2), d.scale, d.scale);
    b.restore();
  }
}
var Be = {};
var Ce = {};
function De(a, b, c) {
  se = Be[a];
  if (!se) {
    var d = new Image();
    d.onload = function () {
      this.isLoaded = true;
      this.onload = null;
    };
    d.src = "https://moomoo.io/img/accessories/access_" + a + ".png";
    Be[a] = d;
    se = d;
  }
  var e = Ce[a];
  if (!e) {
    for (var f = 0; f < ic.length; ++f) {
      if (ic[f].id == a) {
        e = ic[f];
        break;
      }
    }
    Ce[a] = e;
  }
  if (se.isLoaded) {
    b.save();
    b.translate(-20 - (e.xOff || 0), 0);
    if (e.spin) {
      b.rotate(c.skinRot);
    }
    b.drawImage(se, -(e.scale / 2), -(e.scale / 2), e.scale, e.scale);
    b.restore();
  }
}
let Ee = {};
function Fe(a, b, c, d, e) {
  let f = a.src + (b || "");
  let g = Ee[f];
  if (!g) {
    g = new Image();
    g.onload = function () {
      this.isLoaded = true;
    };
    g.src = "https://moomoo.io/img/weapons/" + f + ".png";
    Ee[f] = g;
  }
  if (g.isLoaded) {
    e.drawImage(g, c + a.xOff - a.length / 2, d + a.yOff - a.width / 2, a.length, a.width);
  }
}
function Ge(a, b, c) {
  for (let d = 0; d < ga.length; d++) {
    la = ga[d];
    if (la.active && la.layer == a && la.inWindow) {
      la.update(Va);
      if (la.active && Ue(la.x - b, la.y - c, la.scale)) {
        Ba.save();
        Ba.translate(la.x - b, la.y - c);
        Ba.rotate(la.dir);
        Ie(0, 0, la, Ba, 1);
        Ba.restore();
      }
    }
  }
  ;
}
let He = {};
function Ie(a, b, c, d, e) {
  if (c.src) {
    let e = ec.projectiles[c.indx].src;
    let f = He[e];
    if (!f) {
      f = new Image();
      f.onload = function () {
        this.isLoaded = true;
      };
      f.src = "https://moomoo.io/img/weapons/" + e + ".png";
      He[e] = f;
    }
    if (f.isLoaded) {
      d.drawImage(f, a - c.scale / 2, b - c.scale / 2, c.scale, c.scale);
    }
  } else if (c.indx == 1) {
    d.fillStyle = "#939393";
    Xd(a, b, c.scale, d);
  }
}
let Je = {};
function Ke(a, b) {
  let c = a.index;
  let d = Je[c];
  if (!d) {
    let b = new Image();
    b.onload = function () {
      this.isLoaded = true;
      this.onload = null;
    };
    b.src = "https://moomoo.io/img/animals/" + a.src + ".png";
    d = b;
    Je[c] = d;
  }
  if (d.isLoaded) {
    let c = a.scale * 1.2 * (a.spriteMlt || 1);
    b.drawImage(d, -c, -c, c * 2, c * 2);
  }
}
function Le(a, b, c, d) {
  let e = f.riverWidth + d;
  let g = f.mapScale / 2 - b - e / 2;
  if (g < Ta && g + e > 0) {
    c.fillRect(0, g, Sa, e);
  }
}
let Me = {};
function Ne(a) {
  let b = a.y >= f.mapScale - f.snowBiomeTop ? 2 : a.y <= f.snowBiomeTop ? 1 : 0;
  let c = a.type + "_" + a.scale + "_" + b;
  let d = Me[c];
  if (!d) {
    let e = 6;
    let f = document.createElement("canvas");
    f.width = f.height = a.scale * 2.1 + gb;
    let g = f.getContext("2d");
    g.translate(f.width / 2, f.height / 2);
    g.rotate(dc.randFloat(0, Math.PI));
    g.strokeStyle = eb;
    g.lineWidth = gb;
    if (a.type == 0) {
      let c;
      let d = 8;
      g.globalAlpha = ef(a, ja) <= 250 ? 0.6 : 1;
      for (let a = 0; a < 2; ++a) {
        c = la.scale * (!a ? 1 : 0.5);
        Zd(g, d, c, c * 0.7);
        g.fillStyle = !b ? !a ? "#9ebf57" : "#b4db62" : !a ? "#e3f1f4" : "#fff";
        g.fill();
        if (!a) {
          g.stroke();
          g.shadowBlur = null;
          g.shadowColor = null;
          g.globalAlpha = 1;
        }
      }
    } else if (a.type == 1) {
      if (b == 2) {
        g.fillStyle = "#606060";
        Zd(g, 6, a.scale * 0.3, a.scale * 0.71);
        g.fill();
        g.stroke();
        g.fillStyle = "#89a54c";
        Xd(0, 0, a.scale * 0.55, g);
        g.fillStyle = "#a5c65b";
        Xd(0, 0, a.scale * 0.3, g, true);
      } else {
        ce(g, 6, la.scale, la.scale * 0.7);
        g.fillStyle = b ? "#e3f1f4" : "#89a54c";
        g.fill();
        g.stroke();
        g.fillStyle = b ? "#6a64af" : "#c15555";
        let a;
        let c = 4;
        let d = Math.PI * 2 / c;
        for (let b = 0; b < c; ++b) {
          a = dc.randInt(la.scale / 3.5, la.scale / 2.3);
          Xd(a * Math.cos(d * b), a * Math.sin(d * b), dc.randInt(10, 12), g);
        }
      }
    } else if (a.type == 2 || a.type == 3) {
      g.fillStyle = a.type == 2 ? b == 2 ? "#938d77" : "#939393" : "#e0c655";
      Zd(g, 3, a.scale, a.scale);
      g.fill();
      g.stroke();
      g.shadowBlur = null;
      g.shadowColor = null;
      g.fillStyle = a.type == 2 ? b == 2 ? "#b2ab90" : "#bcbcbc" : "#ebdca3";
      Zd(g, 3, a.scale * 0.55, a.scale * 0.65);
      g.fill();
    }
    d = f;
    Me[c] = d;
  }
  return d;
}
let Oe = [];
function Pe(a, b) {
  let c = Oe[a.id];
  if (!c || b) {
    let d = !b ? 20 : 5;
    let e = document.createElement("canvas");
    let f = !b && a.name == "windmill" ? ec.list[4].scale : a.scale;
    e.width = e.height = f * 2.5 + gb + (ec.list[a.id].spritePadding || 0) + d;
    let g = e.getContext("2d");
    g.translate(e.width / 2, e.height / 2);
    g.rotate(b ? 0 : Math.PI / 2);
    g.strokeStyle = eb;
    g.lineWidth = gb * (b ? e.width / 81 : 1);
    if (!b) {
      g.shadowBlur = 8;
      g.shadowColor = "rgba(0, 0, 0, 0.2)";
    }
    if (a.name == "apple") {
      g.fillStyle = "#c15555";
      Xd(0, 0, a.scale, g);
      g.fillStyle = "#89a54c";
      let b = -(Math.PI / 2);
      Wd(a.scale * Math.cos(b), a.scale * Math.sin(b), 25, b + Math.PI / 2, g);
    } else if (a.name == "cookie") {
      g.fillStyle = "#cca861";
      Xd(0, 0, a.scale, g);
      g.fillStyle = "#937c4b";
      let b = 4;
      let c = Math.PI * 2 / b;
      let d;
      for (let e = 0; e < b; ++e) {
        d = dc.randInt(a.scale / 2.5, a.scale / 1.7);
        Xd(d * Math.cos(c * e), d * Math.sin(c * e), dc.randInt(4, 5), g, true);
      }
    } else if (a.name == "cheese") {
      g.fillStyle = "#f4f3ac";
      Xd(0, 0, a.scale, g);
      g.fillStyle = "#c3c28b";
      let b = 4;
      let c = Math.PI * 2 / b;
      let d;
      for (let e = 0; e < b; ++e) {
        d = dc.randInt(a.scale / 2.5, a.scale / 1.7);
        Xd(d * Math.cos(c * e), d * Math.sin(c * e), dc.randInt(4, 5), g, true);
      }
    } else if (a.name == "wood wall" || a.name == "stone wall" || a.name == "castle wall") {
      g.fillStyle = a.name == "castle wall" ? "#83898e" : a.name == "wood wall" ? "#a5974c" : "#939393";
      let b = a.name == "castle wall" ? 4 : 3;
      Zd(g, b, a.scale * 1.1, a.scale * 1.1);
      g.fill();
      g.stroke();
      g.fillStyle = a.name == "castle wall" ? "#9da4aa" : a.name == "wood wall" ? "#c9b758" : "#bcbcbc";
      Zd(g, b, a.scale * 0.65, a.scale * 0.65);
      g.fill();
    } else if (a.name == "spikes" || a.name == "greater spikes" || a.name == "poison spikes" || a.name == "spinning spikes") {
      g.fillStyle = a.name == "poison spikes" ? "#7b935d" : "#939393";
      let b = a.scale * 0.6;
      Zd(g, a.name == "spikes" ? 5 : 6, a.scale, b);
      g.fill();
      g.stroke();
      g.fillStyle = "#a5974c";
      Xd(0, 0, b, g);
      g.fillStyle = "#c9b758";
      Xd(0, 0, b / 2, g, true);
    } else if (a.name == "windmill" || a.name == "faster windmill" || a.name == "power mill") {
      g.fillStyle = "#a5974c";
      Xd(0, 0, f, g);
      g.fillStyle = "#c9b758";
      be(0, 0, f * 1.5, 29, 4, g);
      g.fillStyle = "#a5974c";
      Xd(0, 0, f * 0.5, g);
    } else if (a.name == "mine") {
      g.fillStyle = "#939393";
      Zd(g, 3, a.scale, a.scale);
      g.fill();
      g.stroke();
      g.fillStyle = "#bcbcbc";
      Zd(g, 3, a.scale * 0.55, a.scale * 0.65);
      g.fill();
    } else if (a.name == "sapling") {
      for (let b = 0; b < 2; ++b) {
        let c = a.scale * (!b ? 1 : 0.5);
        Zd(g, 7, c, c * 0.7);
        g.fillStyle = !b ? "#9ebf57" : "#b4db62";
        g.fill();
        if (!b) {
          g.stroke();
        }
      }
    } else if (a.name == "pit trap") {
      g.fillStyle = "#a5974c";
      Zd(g, 3, a.scale * 1.1, a.scale * 1.1);
      g.fill();
      g.stroke();
      g.fillStyle = eb;
      Zd(g, 3, a.scale * 0.65, a.scale * 0.65);
      g.fill();
    } else if (a.name == "boost pad") {
      g.fillStyle = "#7e7f82";
      _d(0, 0, a.scale * 2, a.scale * 2, g);
      g.fill();
      g.stroke();
      g.fillStyle = "#dbd97d";
      de(a.scale * 1, g);
    } else if (a.name == "turret") {
      g.fillStyle = "#a5974c";
      Xd(0, 0, a.scale, g);
      g.fill();
      g.stroke();
      g.fillStyle = "#939393";
      let b = 50;
      _d(0, -b / 2, a.scale * 0.9, b, g);
      Xd(0, 0, a.scale * 0.6, g);
      g.fill();
      g.stroke();
    } else if (a.name == "platform") {
      g.fillStyle = "#cebd5f";
      let b = 4;
      let c = a.scale * 2;
      let d = c / b;
      let e = -(a.scale / 2);
      for (let f = 0; f < b; ++f) {
        _d(e - d / 2, 0, d, a.scale * 2, g);
        g.fill();
        g.stroke();
        e += c / b;
      }
    } else if (a.name == "healing pad") {
      g.fillStyle = "#7e7f82";
      _d(0, 0, a.scale * 2, a.scale * 2, g);
      g.fill();
      g.stroke();
      g.fillStyle = "#db6e6e";
      be(0, 0, a.scale * 0.65, 20, 4, g, true);
    } else if (a.name == "spawn pad") {
      g.fillStyle = "#7e7f82";
      _d(0, 0, a.scale * 2, a.scale * 2, g);
      g.fill();
      g.stroke();
      g.fillStyle = "#71aad6";
      Xd(0, 0, a.scale * 0.6, g);
    } else if (a.name == "blocker") {
      g.fillStyle = "#7e7f82";
      Xd(0, 0, a.scale, g);
      g.fill();
      g.stroke();
      g.rotate(Math.PI / 4);
      g.fillStyle = "#db6e6e";
      be(0, 0, a.scale * 0.65, 20, 4, g, true);
    } else if (a.name == "teleporter") {
      g.fillStyle = "#7e7f82";
      Xd(0, 0, a.scale, g);
      g.fill();
      g.stroke();
      g.rotate(Math.PI / 4);
      g.fillStyle = "#d76edb";
      Xd(0, 0, a.scale * 0.5, g, true);
    }
    c = e;
    if (!b) {
      Oe[a.id] = c;
    }
  }
  return c;
}
function Qe(a, b, c) {
  let d = Ba;
  let e = a.name == "windmill" ? ec.list[4].scale : a.scale;
  d.save();
  d.translate(b, c);
  d.rotate(a.dir);
  d.strokeStyle = eb;
  d.lineWidth = gb;
  if (a.name == "apple") {
    d.fillStyle = "#c15555";
    Xd(0, 0, a.scale, d);
    d.fillStyle = "#89a54c";
    let b = -(Math.PI / 2);
    Wd(a.scale * Math.cos(b), a.scale * Math.sin(b), 25, b + Math.PI / 2, d);
  } else if (a.name == "cookie") {
    d.fillStyle = "#cca861";
    Xd(0, 0, a.scale, d);
    d.fillStyle = "#937c4b";
    let b = 4;
    let c = Math.PI * 2 / b;
    let e;
    for (let f = 0; f < b; ++f) {
      e = dc.randInt(a.scale / 2.5, a.scale / 1.7);
      Xd(e * Math.cos(c * f), e * Math.sin(c * f), dc.randInt(4, 5), d, true);
    }
  } else if (a.name == "cheese") {
    d.fillStyle = "#f4f3ac";
    Xd(0, 0, a.scale, d);
    d.fillStyle = "#c3c28b";
    let b = 4;
    let c = Math.PI * 2 / b;
    let e;
    for (let f = 0; f < b; ++f) {
      e = dc.randInt(a.scale / 2.5, a.scale / 1.7);
      Xd(e * Math.cos(c * f), e * Math.sin(c * f), dc.randInt(4, 5), d, true);
    }
  } else if (a.name == "wood wall" || a.name == "stone wall" || a.name == "castle wall") {
    d.fillStyle = a.name == "castle wall" ? "#83898e" : a.name == "wood wall" ? "#a5974c" : "#939393";
    let b = a.name == "castle wall" ? 4 : 3;
    Zd(d, b, a.scale * 1.1, a.scale * 1.1);
    d.fill();
    d.stroke();
    d.fillStyle = a.name == "castle wall" ? "#9da4aa" : a.name == "wood wall" ? "#c9b758" : "#bcbcbc";
    Zd(d, b, a.scale * 0.65, a.scale * 0.65);
    d.fill();
  } else if (a.name == "spikes" || a.name == "greater spikes" || a.name == "poison spikes" || a.name == "spinning spikes") {
    d.fillStyle = a.name == "poison spikes" ? "#7b935d" : "#939393";
    let b = a.scale * 0.6;
    Zd(d, a.name == "spikes" ? 5 : 6, a.scale, b);
    d.fill();
    d.stroke();
    d.fillStyle = "#a5974c";
    Xd(0, 0, b, d);
    d.fillStyle = "#c9b758";
    Xd(0, 0, b / 2, d, true);
  } else if (a.name == "windmill" || a.name == "faster windmill" || a.name == "power mill") {
    d.fillStyle = "#a5974c";
    Xd(0, 0, e, d);
    d.fillStyle = "#c9b758";
    be(0, 0, e * 1.5, 29, 4, d);
    d.fillStyle = "#a5974c";
    Xd(0, 0, e * 0.5, d);
  } else if (a.name == "mine") {
    d.fillStyle = "#939393";
    Zd(d, 3, a.scale, a.scale);
    d.fill();
    d.stroke();
    d.fillStyle = "#bcbcbc";
    Zd(d, 3, a.scale * 0.55, a.scale * 0.65);
    d.fill();
  } else if (a.name == "sapling") {
    for (let b = 0; b < 2; ++b) {
      let c = a.scale * (!b ? 1 : 0.5);
      Zd(d, 7, c, c * 0.7);
      d.fillStyle = !b ? "#9ebf57" : "#b4db62";
      d.fill();
      if (!b) {
        d.stroke();
      }
    }
  } else if (a.name == "pit trap") {
    d.fillStyle = "#a5974c";
    Zd(d, 3, a.scale * 1.1, a.scale * 1.1);
    d.fill();
    d.stroke();
    d.fillStyle = eb;
    Zd(d, 3, a.scale * 0.65, a.scale * 0.65);
    d.fill();
  } else if (a.name == "boost pad") {
    d.fillStyle = "#7e7f82";
    _d(0, 0, a.scale * 2, a.scale * 2, d);
    d.fill();
    d.stroke();
    d.fillStyle = "#dbd97d";
    de(a.scale * 1, d);
  } else if (a.name == "turret") {
    d.fillStyle = "#a5974c";
    Xd(0, 0, a.scale, d);
    d.fill();
    d.stroke();
    d.fillStyle = "#939393";
    let b = 50;
    _d(0, -b / 2, a.scale * 0.9, b, d);
    Xd(0, 0, a.scale * 0.6, d);
    d.fill();
    d.stroke();
  } else if (a.name == "platform") {
    d.fillStyle = "#cebd5f";
    let b = 4;
    let c = a.scale * 2;
    let e = c / b;
    let f = -(a.scale / 2);
    for (let g = 0; g < b; ++g) {
      _d(f - e / 2, 0, e, a.scale * 2, d);
      d.fill();
      d.stroke();
      f += c / b;
    }
  } else if (a.name == "healing pad") {
    d.fillStyle = "#7e7f82";
    _d(0, 0, a.scale * 2, a.scale * 2, d);
    d.fill();
    d.stroke();
    d.fillStyle = "#db6e6e";
    be(0, 0, a.scale * 0.65, 20, 4, d, true);
  } else if (a.name == "spawn pad") {
    d.fillStyle = "#7e7f82";
    _d(0, 0, a.scale * 2, a.scale * 2, d);
    d.fill();
    d.stroke();
    d.fillStyle = "#71aad6";
    Xd(0, 0, a.scale * 0.6, d);
  } else if (a.name == "blocker") {
    d.fillStyle = "#7e7f82";
    Xd(0, 0, a.scale, d);
    d.fill();
    d.stroke();
    d.rotate(Math.PI / 4);
    d.fillStyle = "#db6e6e";
    be(0, 0, a.scale * 0.65, 20, 4, d, true);
  } else if (a.name == "teleporter") {
    d.fillStyle = "#7e7f82";
    Xd(0, 0, a.scale, d);
    d.fill();
    d.stroke();
    d.rotate(Math.PI / 4);
    d.fillStyle = "#d76edb";
    Xd(0, 0, a.scale * 0.5, d, true);
  }
  d.restore();
}
let Re = [];
function Se(a) {
  let b = Re[a.id];
  if (!b) {
    let c = document.createElement("canvas");
    c.width = c.height = a.scale * 2.5 + gb + (ec.list[a.id].spritePadding || 0) + 0;
    let d = c.getContext("2d");
    d.translate(c.width / 2, c.height / 2);
    d.rotate(Math.PI / 2);
    d.strokeStyle = eb;
    d.lineWidth = gb;
    if (a.name == "spikes" || a.name == "greater spikes" || a.name == "poison spikes" || a.name == "spinning spikes") {
      d.fillStyle = a.name == "poison spikes" ? "#7b935d" : "#939393";
      let b = a.scale * 0.6;
      Zd(d, a.name == "spikes" ? 5 : 6, a.scale, b);
      d.fill();
      d.stroke();
      d.fillStyle = "#a5974c";
      Xd(0, 0, b, d);
      d.fillStyle = "#cc5151";
      Xd(0, 0, b / 2, d, true);
    } else if (a.name == "pit trap") {
      d.fillStyle = "#a5974c";
      Zd(d, 3, a.scale * 1.1, a.scale * 1.1);
      d.fill();
      d.stroke();
      d.fillStyle = "#cc5151";
      Zd(d, 3, a.scale * 0.65, a.scale * 0.65);
      d.fill();
    }
    b = c;
    Re[a.id] = b;
  }
  return b;
}
function Te(a, b, c, d) {
  let e = {
    x: Qa / 2,
    y: Ra / 2
  };
  b.lineWidth = gb;
  Ba.globalAlpha = 0.2;
  b.strokeStyle = eb;
  b.save();
  b.translate(c, d);
  b.rotate(90 ** 10);
  if (a.name == "spikes" || a.name == "greater spikes" || a.name == "poison spikes" || a.name == "spinning spikes") {
    b.fillStyle = a.name == "poison spikes" ? "#7b935d" : "#939393";
    var f = a.scale;
    Zd(b, a.name == "spikes" ? 5 : 6, a.scale, f);
    b.fill();
    b.stroke();
    b.fillStyle = "#a5974c";
    Xd(0, 0, f, b);
    if (ja && a.owner && ja.sid != a.owner.sid && !la.findAllianceBySid(a.owner.sid)) {
      b.fillStyle = "#a34040";
    } else {
      b.fillStyle = "#c9b758";
    }
    Xd(0, 0, f / 2, b, true);
  } else if (a.name == "turret") {
    Xd(0, 0, a.scale, b);
    b.fill();
    b.stroke();
    b.fillStyle = "#939393";
    let c = 50;
    _d(0, -c / 2, a.scale * 0.9, c, b);
    Xd(0, 0, a.scale * 0.6, b);
    b.fill();
    b.stroke();
  } else if (a.name == "teleporter") {
    b.fillStyle = "#7e7f82";
    Xd(0, 0, a.scale, b);
    b.fill();
    b.stroke();
    b.rotate(Math.PI / 4);
    b.fillStyle = "#d76edb";
    Xd(0, 0, a.scale * 0.5, b, true);
  } else if (a.name == "platform") {
    b.fillStyle = "#cebd5f";
    let c = 4;
    let d = a.scale * 2;
    let e = d / c;
    let f = -(a.scale / 2);
    for (let g = 0; g < c; ++g) {
      _d(f - e / 2, 0, e, a.scale * 2, b);
      b.fill();
      b.stroke();
      f += d / c;
    }
  } else if (a.name == "healing pad") {
    b.fillStyle = "#7e7f82";
    _d(0, 0, a.scale * 2, a.scale * 2, b);
    b.fill();
    b.stroke();
    b.fillStyle = "#db6e6e";
    be(0, 0, a.scale * 0.65, 20, 4, b, true);
  } else if (a.name == "spawn pad") {
    b.fillStyle = "#7e7f82";
    _d(0, 0, a.scale * 2, a.scale * 2, b);
    b.fill();
    b.stroke();
    b.fillStyle = "#71aad6";
    Xd(0, 0, a.scale * 0.6, b);
  } else if (a.name == "blocker") {
    b.fillStyle = "#7e7f82";
    Xd(0, 0, a.scale, b);
    b.fill();
    b.stroke();
    b.rotate(Math.PI / 4);
    b.fillStyle = "#db6e6e";
    be(0, 0, a.scale * 0.65, 20, 4, b, true);
  } else if (a.name == "windmill" || a.name == "faster windmill" || a.name == "power mill") {
    b.fillStyle = "#a5974c";
    Xd(0, 0, a.scale, b);
    b.fillStyle = "#c9b758";
    be(0, 0, a.scale * 1.5, 29, 4, b);
    b.fillStyle = "#a5974c";
    Xd(0, 0, a.scale * 0.5, b);
  } else if (a.name == "pit trap") {
    b.fillStyle = "#a5974c";
    Zd(b, 3, a.scale * 1.1, a.scale * 1.1);
    b.fill();
    b.stroke();
    if (ja && a.owner && ja.sid != a.owner.sid && !la.findAllianceBySid(a.owner.sid)) {
      b.fillStyle = "#a34040";
    } else {
      b.fillStyle = eb;
    }
    Zd(b, 3, a.scale * 0.65, a.scale * 0.65);
    b.fill();
  }
  b.restore();
}
function Ue(a, b, c) {
  return a + c >= 0 && a - c <= Sa && b + c >= 0 && (b, c, Ta);
}
function Ve(a, b, c) {
  let d;
  let e;
  let g;
  fa.forEach(h => {
    la = h;
    if (la.active && fa.includes(h) && la.render) {
      e = la.x + la.xWiggle - b;
      g = la.y + la.yWiggle - c;
      if (a == 0) {
        la.update(Va);
      }
      Ba.globalAlpha = la.alpha;
      if (la.layer == a && Ue(e, g, la.scale + (la.blocker || 0))) {
        if (la.isItem) {
          if ((la.dmg || la.trap) && !la.isTeamObject(ja)) {
            d = Se(la);
          } else {
            d = Pe(la);
          }
          Ba.save();
          Ba.translate(e, g);
          Ba.rotate(la.dir);
          if (!la.active) {
            Ba.scale(la.visScale / la.scale, la.visScale / la.scale);
          }
          Ba.drawImage(d, -(d.width / 2), -(d.height / 2));
          if (la.blocker) {
            Ba.strokeStyle = "#db6e6e";
            Ba.globalAlpha = 0.3;
            Ba.lineWidth = 6;
            Xd(0, 0, la.blocker, Ba, false, true);
          }
          Ba.restore();
        } else {
          d = Ne(la);
          Ba.drawImage(d, e - d.width / 2, g - d.height / 2);
        }
      }
      if (a == 3 && !K) {
        if (la.health < la.maxHealth) {
          Ba.fillStyle = fb;
          Ba.roundRect(e - f.healthBarWidth / 2 - f.healthBarPad, g - f.healthBarPad, f.healthBarWidth + f.healthBarPad * 2, 17, 8);
          Ba.fill();
          Ba.fillStyle = la.isTeamObject(ja) ? "#8ecc51" : "#cc5151";
          Ba.roundRect(e - f.healthBarWidth / 2, g, f.healthBarWidth * (la.health / la.maxHealth), 17 - f.healthBarPad * 2, 7);
          Ba.fill();
        }
      }
    }
  });
  if (a == 0) {
    if (tb.length) {
      tb.forEach(a => {
        e = a.x - b;
        g = a.y - c;
        We(a, e, g);
      });
    }
  }
}
function We(a, b, c) {
  Te(a, Ba, b, c);
}
class Xe {
  constructor(a, b) {
    this.init = function (a, b) {
      this.scale = 0;
      this.x = a;
      this.y = b;
      this.active = true;
    };
    this.update = function (a, c) {
      if (this.active) {
        this.scale += c * 0.05;
        if (this.scale >= b) {
          this.active = false;
        } else {
          a.globalAlpha = 1 - Math.max(0, this.scale / b);
          a.beginPath();
          a.arc(this.x / f.mapScale * Ca.width, this.y / f.mapScale * Ca.width, this.scale, 0, Math.PI * 2);
          a.stroke();
        }
      }
    };
    this.color = a;
  }
}
function Ye(a, b) {
  uc = tc.find(a => !a.active);
  if (!uc) {
    uc = new Xe("#fff", f.mapPingScale);
    tc.push(uc);
  }
  uc.init(a, b);
}
function Ze() {
  sc.x = ja.x;
  sc.y = ja.y;
}
function $e(a) {
  if (ja && ja.alive) {
    Da.clearRect(0, 0, Ca.width, Ca.height);
    Da.lineWidth = 4;
    for (let b = 0; b < tc.length; ++b) {
      uc = tc[b];
      Da.strokeStyle = uc.color;
      uc.update(Da, a);
    }
    Da.globalAlpha = 1;
    Da.fillStyle = "#ff0000";
    if (vc.length) {
      Da.fillStyle = "#abcdef";
      Da.font = "34px Hammersmith One";
      Da.textBaseline = "middle";
      Da.textAlign = "center";
      for (let a = 0; a < vc.length;) {
        Da.fillText("!", vc[a].x / f.mapScale * Ca.width, vc[a].y / f.mapScale * Ca.height);
        a += 2;
      }
    }
    Da.globalAlpha = 1;
    Da.fillStyle = "#fff";
    Xd(ja.x / f.mapScale * Ca.width, ja.y / f.mapScale * Ca.height, 7, Da, true);
    Da.fillStyle = "rgba(255,255,255,0.35)";
    if (ja.team && rc) {
      for (let a = 0; a < rc.length;) {
        Xd(rc[a] / f.mapScale * Ca.width, rc[a + 1] / f.mapScale * Ca.height, 7, Da, true);
        a += 2;
      }
    }
    if (Pd.length) {
      Pd.forEach(a => {
        if (a.inGame) {
          Da.globalAlpha = 1;
          Da.strokeStyle = "#cc5151";
          Xd(a.x2 / f.mapScale * Ca.width, a.y2 / f.mapScale * Ca.height, 7, Da, false, true);
        }
      });
    }
    if (qc) {
      Da.fillStyle = "#fc5553";
      Da.font = "34px Hammersmith One";
      Da.textBaseline = "middle";
      Da.textAlign = "center";
      Da.fillText("x", qc.x / f.mapScale * Ca.width, qc.y / f.mapScale * Ca.height);
    }
    if (sc) {
      Da.fillStyle = "#fff";
      Da.font = "34px Hammersmith One";
      Da.textBaseline = "middle";
      Da.textAlign = "center";
      Da.fillText("x", sc.x / f.mapScale * Ca.width, sc.y / f.mapScale * Ca.height);
    }
  }
}
let _e = ["https://cdn.discordapp.com/attachments/1001384433078779927/1149285738412769300/newawwddd.png", "https://cdn.discordapp.com/attachments/1001384433078779927/1149285168780165170/100px-Crosshairs_Red.png"];
let af = {};
let bf = {};
let cf = ["crown", "skull"];
function df() {
  for (let a = 0; a < cf.length; ++a) {
    let b = new Image();
    b.onload = function () {
      this.isLoaded = true;
    };
    b.src = "./../img/icons/" + cf[a] + ".png";
    bf[cf[a]] = b;
  }
  for (let a = 0; a < _e.length; ++a) {
    let b = new Image();
    b.onload = function () {
      this.isLoaded = true;
    };
    b.src = _e[a];
    af[a] = b;
  }
}
df();
function ef(a, b) {
  try {
    return Math.hypot((b.y2 || b.y) - (a.y2 || a.y), (b.x2 || b.x) - (a.x2 || a.x));
  } catch (a) {
    return Infinity;
  }
}
function ff() {
  if (ea.length && lb) {
    ea.forEach(a => {
      if (dc.getDistance(a.x, a.y, ja.x, ja.y) <= 1200) {
        if (!fa.includes(a)) {
          fa.push(a);
          a.render = true;
        }
      } else if (fa.includes(a)) {
        if (dc.getDistance(a.x, a.y, ja.x, ja.y) >= 1200) {
          a.render = false;
          const b = fa.indexOf(a);
          if (b > -1) {
            fa.splice(b, 1);
          }
        }
      } else if (dc.getDistance(a.x, a.y, ja.x, ja.y) >= 1200) {
        a.render = false;
        const b = fa.indexOf(a);
        if (b > -1) {
          fa.splice(b, 1);
        }
      } else {
        a.render = false;
        const b = fa.indexOf(a);
        if (b > -1) {
          fa.splice(b, 1);
        }
      }
    });
  }
  Ba.beginPath();
  Ba.clearRect(0, 0, Aa.width, Aa.height);
  Ba.globalAlpha = 1;
  if (ja) {
    if (false) {
      Ya = ja.x;
      Za = ja.y;
    } else {
      let a = dc.getDistance(Ya, Za, ja.x, ja.y);
      let b = dc.getDirection(ja.x, ja.y, Ya, Za);
      let c = Math.min(a * 0.0045 * Va, a);
      if (a > 0.05) {
        Ya += c * Math.cos(b);
        Za += c * Math.sin(b);
      } else {
        Ya = ja.x;
        Za = ja.y;
      }
    }
  } else {
    Ya = f.mapScale / 2 + f.riverWidth;
    Za = f.mapScale / 2;
  }
  let a = Wa - 1000 / f.serverUpdateRate;
  let b;
  for (let c = 0; c < ba.length + aa.length; ++c) {
    la = ba[c] || aa[c - ba.length];
    if (la && la.visible) {
      if (la.forcePos) {
        la.x = la.x2;
        la.y = la.y2;
        la.dir = la.d2;
      } else {
        let c = la.t2 - la.t1;
        let d = a - la.t1;
        let e = d / c;
        let g = 170;
        la.dt += Va;
        let h = Math.min(1.7, la.dt / g);
        b = la.x2 - la.x1;
        la.x = la.x1 + b * h;
        b = la.y2 - la.y1;
        la.y = la.y1 + b * h;
        if (f.anotherVisual) {
          la.dir = Math.lerpAngle(la.d2, la.d1, Math.min(1.2, e));
        } else {
          la.dir = Math.lerpAngle(la.d2, la.d1, Math.min(1.2, e));
        }
      }
    }
  }
  let d = Ya - Sa / 2;
  let e = Za - Ta / 2;
  if (f.snowBiomeTop - e <= 0 && f.mapScale - f.snowBiomeTop - e >= Ta) {
    Ba.fillStyle = "#b6db66";
    Ba.fillRect(0, 0, Sa, Ta);
  } else if (f.mapScale - f.snowBiomeTop - e <= 0) {
    Ba.fillStyle = "#dbc666";
    Ba.fillRect(0, 0, Sa, Ta);
  } else if (f.snowBiomeTop - e >= Ta) {
    Ba.fillStyle = "#fff";
    Ba.fillRect(0, 0, Sa, Ta);
  } else if (f.snowBiomeTop - e >= 0) {
    Ba.fillStyle = "#fff";
    Ba.fillRect(0, 0, Sa, f.snowBiomeTop - e);
    Ba.fillStyle = "#b6db66";
    Ba.fillRect(0, f.snowBiomeTop - e, Sa, Ta - (f.snowBiomeTop - e));
  } else {
    Ba.fillStyle = "#b6db66";
    Ba.fillRect(0, 0, Sa, f.mapScale - f.snowBiomeTop - e);
    Ba.fillStyle = "#dbc666";
    Ba.fillRect(0, f.mapScale - f.snowBiomeTop - e, Sa, Ta - (f.mapScale - f.snowBiomeTop - e));
  }
  if (!hb) {
    cb += db * f.waveSpeed * Va;
    if (cb >= f.waveMax) {
      cb = f.waveMax;
      db = -1;
    } else if (cb <= 1) {
      cb = db = 1;
    }
    Ba.globalAlpha = 1;
    Ba.fillStyle = "#dbc666";
    Le(d, e, Ba, f.riverPadding);
    Ba.fillStyle = "#91b2db";
    Le(d, e, Ba, (cb - 1) * 250);
  }
  Ba.globalAlpha = 1;
  Ba.strokeStyle = eb;
  ge(d, e);
  Ba.globalAlpha = 1;
  Ba.strokeStyle = eb;
  Ve(-1, d, e);
  Ba.globalAlpha = 1;
  Ba.lineWidth = gb;
  Ge(0, d, e);
  he(d, e, 0);
  Ba.globalAlpha = 1;
  for (let a = 0; a < aa.length; ++a) {
    la = aa[a];
    if (la.active && la.visible) {
      la.animate(Va);
      Ba.save();
      Ba.translate(la.x - d, la.y - e);
      Ba.rotate(la.dir + la.dirPlus - Math.PI / 2);
      Ke(la, Ba);
      Ba.restore();
    }
  }
  Ve(0, d, e);
  Ge(1, d, e);
  Ve(1, d, e);
  he(d, e, 1);
  Ve(2, d, e);
  Ve(3, d, e);
  Ba.fillStyle = "#000";
  Ba.globalAlpha = 0.09;
  if (d <= 0) {
    Ba.fillRect(0, 0, -d, Ta);
  }
  if (f.mapScale - d <= Sa) {
    let a = Math.max(0, -e);
    Ba.fillRect(f.mapScale - d, a, Sa - (f.mapScale - d), Ta - a);
  }
  if (e <= 0) {
    Ba.fillRect(-d, 0, Sa + d, -e);
  }
  if (f.mapScale - e <= Ta) {
    let a = Math.max(0, -d);
    let b = 0;
    if (f.mapScale - d <= Sa) {
      b = Sa - (f.mapScale - d);
    }
    Ba.fillRect(a, f.mapScale - e, Sa - a - b, Ta - (f.mapScale - e));
  }
  Ba.globalAlpha = 1;
  Ba.fillStyle = "rgba(0, 5, 80, 0.55)";
  Ba.fillRect(0, 0, Sa, Ta);
  Ba.strokeStyle = fb;
  Ba.globalAlpha = 1;
  for (let a = 0; a < ba.length + aa.length; ++a) {
    la = ba[a] || aa[a - ba.length];
    if (la.visible && la.showName === "NOOO") {
      Ba.strokeStyle = fb;
      let a = (la.team ? "[" + la.team + "] " : "") + (la.name || "");
      if (a != "" && la.name != "Yurio Slaves") {
        Ba.font = (la.nameScale || 30) + "px Hammersmith One";
        Ba.fillStyle = "#fff";
        Ba.textBaseline = "middle";
        Ba.textAlign = "center";
        Ba.lineWidth = la.nameScale ? 11 : 8;
        Ba.lineJoin = "round";
        Ba.strokeText(a, la.x - d, la.y - e - la.scale - f.nameY);
        Ba.fillText(a, la.x - d, la.y - e - la.scale - f.nameY);
        if (la.isLeader && bf.crown.isLoaded) {
          let b = f.crownIconScale;
          let c = la.x - d - b / 2 - Ba.measureText(a).width / 2 - f.crownPad;
          Ba.drawImage(bf.crown, c, la.y - e - la.scale - f.nameY - b / 2 - 5, b, b);
        }
        if (la.iconIndex == 1 && bf.skull.isLoaded) {
          let b = f.crownIconScale;
          let c = la.x - d - b / 2 + Ba.measureText(a).width / 2 + f.crownPad;
          Ba.drawImage(bf.skull, c, la.y - e - la.scale - f.nameY - b / 2 - 5, b, b);
        }
        if (la.isPlayer && nc.wait && oa == la && (la.backupNobull ? af[1].isLoaded : af[0].isLoaded) && ma.length && !K) {
          let a = la.scale * 2.2;
          Ba.drawImage(la.backupNobull ? af[1] : af[0], la.x - d - a / 2, la.y - e - a / 2, a, a);
        }
      }
      if (la.health > 0) {
        if (la.name != "Yurio Slaves") {
          Ba.fillStyle = fb;
          Ba.roundRect(la.x - d - f.healthBarWidth - f.healthBarPad, la.y - e + la.scale + f.nameY, f.healthBarWidth * 2 + f.healthBarPad * 2, 17, 8);
          Ba.fill();
          Ba.fillStyle = la == ja || la.team && la.team == ja.team ? "#8ecc51" : "#cc5151";
          Ba.roundRect(la.x - d - f.healthBarWidth, la.y - e + la.scale + f.nameY + f.healthBarPad, f.healthBarWidth * 2 * (la.health / la.maxHealth), 17 - f.healthBarPad * 2, 7);
          Ba.fill();
        }
        if (la.isPlayer) {
          Ba.globalAlpha = 1;
          let a = {
            primary: la.primaryIndex == undefined ? 1 : (ec.weapons[la.primaryIndex].speed - la.reloads[la.primaryIndex]) / ec.weapons[la.primaryIndex].speed,
            secondary: la.secondaryIndex == undefined ? 1 : (ec.weapons[la.secondaryIndex].speed - la.reloads[la.secondaryIndex]) / ec.weapons[la.secondaryIndex].speed,
            turret: (2500 - la.reloads[53]) / 2500
          };
          if (!la.currentReloads) {
            la.currentReloads = {
              primary: a.primary,
              secondary: a.secondary,
              turret: a.turret
            };
          }
          const b = 0.3;
          la.currentReloads.primary = (1 - b) * la.currentReloads.primary + b * a.primary;
          la.currentReloads.secondary = (1 - b) * la.currentReloads.secondary + b * a.secondary;
          la.currentReloads.turret = (1 - b) * la.currentReloads.turret + b * a.turret;
          let g = la.primaryIndex !== undefined ? (ec.weapons[la.primaryIndex].speed - la.reloads[la.primaryIndex]) / ec.weapons[la.primaryIndex].speed : 1;
          let h = la.secondaryIndex !== undefined ? (ec.weapons[la.secondaryIndex].speed - la.reloads[la.secondaryIndex]) / ec.weapons[la.secondaryIndex].speed : 1;
          const i = la.x - d;
          const j = la.y - e;
          const k = 35;
          const l = 15;
          const m = Math.PI * 2 / 3;
          const n = -Math.PI / 2 + Math.PI / 3 + la.dir - Math.PI / 2;
          const o = n + m * la.currentReloads.secondary;
          const p = Math.PI / 2 + la.dir - Math.PI / 2;
          const q = p + m * la.currentReloads.primary;
          const r = Math.PI + Math.PI / 4.5 + la.dir - Math.PI / 2;
          const s = r + m / 1.25 * la.currentReloads.turret;
          function t(a) {
            const b = Math.floor((1 - a) * 255);
            return "rgb(" + b + ", " + b + ", " + b + ")";
          }
          Ba.save();
          if (la.currentReloads.primary < 0.999) {
            Ba.beginPath();
            Ba.lineCap = "round";
            Ba.arc(i, j, k, p, q);
            Ba.lineWidth = 4;
            Ba.strokeStyle = t(la.currentReloads.primary * 240);
            Ba.stroke();
          }
          if (la.currentReloads.secondary < 0.999) {
            Ba.beginPath();
            Ba.lineCap = "round";
            Ba.arc(i, j, k, n, o);
            Ba.lineWidth = 4;
            Ba.strokeStyle = t(la.currentReloads.secondary * 240);
            Ba.stroke();
          }
          if (la.currentReloads.turret < 0.999) {
            Ba.beginPath();
            Ba.lineCap = "round";
            Ba.arc(i, j, k, r, s);
            Ba.lineWidth = 4;
            Ba.strokeStyle = t(la.currentReloads.turret * 240);
            Ba.stroke();
          }
          Ba.restore();
          if (la.name != "Yurio Slaves") {
            Ba.globalAlpha = 1;
            Ba.font = "27px Hammersmith One";
            Ba.strokeStyle = fb;
            Ba.textBaseline = "middle";
            Ba.textAlign = "center";
            Ba.lineWidth = 11;
            Ba.lineJoin = "round";
            let a = f.crownIconScale;
            let b = la.x - d - a / 2 + f.crownPad - 2;
            let c = (la.skinIndex == 45 && la.shameTimer > 0 ? la.shameTimer : la.shameCount).toString();
            let g = b - 60;
            let h = la.y - e - la.scale - f.nameY + 0;
            if (la.skinIndex == 45) {
              Ba.fillStyle = "red";
            } else {
              Ba.fillStyle = "#fff";
            }
            Ba.strokeText(c, g, h);
            Ba.fillText(c, g, h);
          }
          if (!la.isTeam(ja)) {
            let a = {
              x: Qa / 2,
              y: Ra / 2
            };
            let b = Math.min(1, dc.getDistance(0, 0, ja.x - la.x, (ja.y - la.y) * (16 / 9)) * 100 / (f.maxScreenHeight / 2) / a.y);
            let c = a.y * b / 2;
            let g = c * Math.cos(dc.getDirect(la, ja, 0, 0));
            let h = c * Math.sin(dc.getDirect(la, ja, 0, 0));
            Ba.save();
            Ba.translate(ja.x - d + g, ja.y - e + h);
            Ba.rotate(la.aim2 + Math.PI / 2);
            let i = 255 - la.sid * 2;
            Ba.fillStyle = "rgb(" + i + ", " + i + ", " + i + ")";
            Ba.globalAlpha = b;
            let j = function (a, b) {
              b = b || Ba;
              let c = a * (Math.sqrt(3) / 2);
              b.beginPath();
              b.moveTo(0, -c / 1.5);
              b.lineTo(-a / 2, c / 2);
              b.lineTo(a / 2, c / 2);
              b.lineTo(0, -c / 1.5);
              b.fill();
              b.closePath();
            };
            j(25, Ba);
            Ba.restore();
          }
          if (c("predictType").value == "pre2") {
            Ba.lineWidth = 3;
            Ba.strokeStyle = "#fff";
            Ba.globalAlpha = 1;
            Ba.beginPath();
            let a = {
              x: la.x2 - d,
              y: la.y2 - e
            };
            Ba.moveTo(la.x - d, la.y - e);
            Ba.lineTo(a.x, a.y);
            Ba.stroke();
          } else if (c("predictType").value == "pre3") {
            Ba.lineWidth = 3;
            Ba.strokeStyle = "#cc5151";
            Ba.globalAlpha = 1;
            Ba.beginPath();
            let a = {
              x: la.x3 - d,
              y: la.y3 - e
            };
            Ba.moveTo(la.x - d, la.y - e);
            Ba.lineTo(a.x, a.y);
            Ba.stroke();
          }
        }
      }
    }
  }
  if (ja) {
    if (pa.autoPush && pa.pushData) {
      Ba.lineWidth = 5;
      Ba.globalAlpha = 1;
      Ba.beginPath();
      Ba.strokeStyle = "white";
      var g = ja.x - d;
      var h = ja.y - e;
      var i = pa.pushData.x2 - d;
      var j = pa.pushData.y2 - e;
      var k = pa.pushData.x - d;
      var l = pa.pushData.y - e;
      Ba.moveTo(g, h);
      Ba.lineTo(i, j);
      Ba.lineTo(k, l);
      Ba.stroke();
      var m = k - g;
      var n = l - h;
      var o = Math.sqrt(m * m + n * n);
      var p = 100;
      var q = o / p * 100;
      q = Math.min(100, Math.max(0, q));
      let a;
      Ba.fillStyle = "white";
      Ba.strokeStyle = "black";
      Ba.lineWidth = 5;
      Ba.font = "30px Hammersmith One";
      let b = fa.filter(a => a.trap && a.active && a.isTeamObject(ja) && dc.getDist(a, oa, 0, 2) <= oa.scale + a.getScale() + 5).sort(function (a, b) {
        return dc.getDist(a, oa, 0, 2) - dc.getDist(b, oa, 0, 2);
      })[0];
      if (b) {
        a = fa.filter(a => a.dmg && a.active && a.isTeamObject(ja) && dc.getDist(a, b, 0, 0) <= oa.scale + b.scale + a.scale).sort(function (a, b) {
          return dc.getDist(a, oa, 0, 2) - dc.getDist(b, oa, 0, 2);
        })[0];
      }
      let c = (ja.x - d + oa.x - d) / 2;
      let f = (ja.y - e + oa.y - e) / 2;
      Ba.moveTo(ja.x - d, ja.y - e);
      Ba.strokeText(oa.aim2, c, f);
      Ba.fillText(oa.aim2, c, f);
    }
  }
  Ba.globalAlpha = 1;
  lc.update(Va, Ba, d, e);
  for (let a = 0; a < ba.length; ++a) {
    la = ba[a];
    if (la.visible) {
      if (la.chatCountdown > 0) {
        la.chatCountdown -= Va;
        if (la.chatCountdown <= 0) {
          la.chatCountdown = 0;
        }
        Ba.font = "32px Hammersmith One";
        let a = Ba.measureText(la.chatMessage);
        Ba.textBaseline = "middle";
        Ba.textAlign = "center";
        let b = la.x - d;
        let c = la.y - la.scale - e - 90;
        let f = 47;
        let g = a.width + 17;
        Ba.fillStyle = "rgba(0,0,0,0.2)";
        Ba.roundRect(b - g / 2, c - f / 2, g, f, 6);
        Ba.fill();
        Ba.fillStyle = "#fff";
        Ba.fillText(la.chatMessage, b, c);
      }
      if (la.chat.count > 0) {
        if (!K) {
          la.chat.count -= Va;
          if (la.chat.count <= 0) {
            la.chat.count = 0;
          }
          Ba.font = "32px Hammersmith One";
          let a = Ba.measureText(la.chat.message);
          Ba.textBaseline = "middle";
          Ba.textAlign = "center";
          let b = la.x - d;
          let c = la.y - la.scale - e + 180;
          let f = 47;
          let g = a.width + 17;
          Ba.fillStyle = "rgba(0,0,0,0.2)";
          Ba.roundRect(b - g / 2, c - f / 2, g, f, 6);
          Ba.fill();
          Ba.fillStyle = "#ffffff99";
          Ba.fillText(la.chat.message, b, c);
        } else {
          la.chat.count = 0;
        }
      }
    }
  }
  if (Z.length) {
    Z.filter(a => a.active).forEach(a => {
      if (!a.alive) {
        if (a.alpha <= 1) {
          a.alpha += Va / 250;
          if (a.alpha >= 1) {
            a.alpha = 1;
            a.alive = true;
          }
        }
      } else {
        a.alpha -= Va / 5000;
        if (a.alpha <= 0) {
          a.alpha = 0;
          a.active = false;
        }
      }
      if (a.active) {
        Ba.font = "20px Ubuntu";
        let b = Ba.measureText(a.chat);
        Ba.textBaseline = "middle";
        Ba.textAlign = "center";
        let c = a.x - d;
        let f = a.y - e - 90;
        let g = 40;
        let h = b.width + 15;
        Ba.globalAlpha = a.alpha;
        Ba.fillStyle = a.owner.isTeam(ja) ? "#8ecc51" : "#cc5151";
        Ba.strokeStyle = "rgb(25, 25, 25)";
        Ba.strokeText(a.owner.name, c, f - 45);
        Ba.fillText(a.owner.name, c, f - 45);
        Ba.lineWidth = 5;
        Ba.fillStyle = "#ccc";
        Ba.strokeStyle = "rgb(25, 25, 25)";
        Ba.roundRect(c - h / 2, f - g / 2, h, g, 6);
        Ba.stroke();
        Ba.fill();
        Ba.fillStyle = "#fff";
        Ba.strokeStyle = "#000";
        Ba.strokeText(a.chat, c, f);
        Ba.fillText(a.chat, c, f);
        a.y -= Va / 100;
      }
    });
  }
  Ba.globalAlpha = 1;
  $e(Va);
}
window.requestAnimFrame = function () {
  return null;
};
window.rAF = function () {
  return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function (a) {
    window.setTimeout(a, 1000 / 9);
  };
}();
function gf() {
  Wa = performance.now();
  Va = Wa - Xa;
  Xa = Wa;
  let a = performance.now();
  let b = a - R.last;
  if (b >= 1000) {
    R.ltime = R.time * (1000 / b);
    R.last = a;
    R.time = 0;
  }
  R.time++;
  c("pingFps").innerHTML = window.pingTime + "ms | Fps: " + Math.round(R.ltime);
  c("packetStatus").innerHTML = L;
  ff();
  rAF(gf);
  rb.avg = Math.round((rb.min + rb.max) / 2);
}
ee();
gf();
function hf(a) {
  c("instaType").disabled = a;
  c("antiBullType").disabled = a;
  c("predictType").disabled = a;
}
hf(K);
let jf = {};
window.debug = function () {
  pa.waitHit = 0;
  pa.autoAim = false;
  nc.isTrue = false;
  mc.inTrap = false;
  Oe = [];
  Re = [];
  Me = [];
};
window.wasdMode = function () {
  K = !K;
  hf(K);
};
window.startGrind = function () {
  if (c("weaponGrind").checked) {
    for (let a = 0; a < Math.PI * 2; a += Math.PI / 2) {
      Rb(ja.getItemType(22), a);
    }
  }
};
let kf = ["adorable-eight-guppy", "galvanized-bittersweet-windshield"];
let lf = 0;
window.connectFillBots = function () {
  h = [];
  lf = 0;
  for (let a = 0; a < kf.length; a++) {
    let b = new WebSocket("wss://" + kf[a] + ".glitch.me");
    b.binaryType = "arraybuffer";
    b.onopen = function () {
      b.ssend = function (a) {
        let c = Array.prototype.slice.call(arguments, 1);
        let d = window.msgpack.encode([a, c]);
        b.send(d);
      };
      for (let a = 0; a < 4; a++) {
        window.grecaptcha.execute("6LfahtgjAAAAAF8SkpjyeYMcxMdxIaQeh-VoPATP", {
          action: "homepage"
        }).then(function (a) {
          let c = I.url.split("wss://")[1].split("?")[0];
          b.ssend("bots", "wss://" + c + "?token=re:" + encodeURIComponent(a), lf);
          h.push([b]);
          lf++;
        });
      }
    };
    b.onmessage = function (a) {
      let b = new Uint8Array(a.data);
      let c = window.msgpack.decode(b);
      let d = c[0];
      b = c[1];
    };
  }
};
window.destroyFillBots = function () {
  h.forEach(a => {
    a[0].close();
  });
  h = [];
};
window.tryConnectBots = function () {
  for (let a = 0; a < (Pd.length < 3 ? 3 : 4); a++) {
    window.grecaptcha.execute("6LfahtgjAAAAAF8SkpjyeYMcxMdxIaQeh-VoPATP", {
      action: "homepage"
    }).then(function (a) {
      Vd(a);
    });
  }
};
window.destroyBots = function () {
  Pd.forEach(a => {
    a.closeSocket = true;
  });
  Pd = [];
};
window.resBuild = function () {
  if (ea.length) {
    ea.forEach(a => {
      a.breakObj = false;
    });
    ia = [];
  }
};
window.toggleBotsCircle = function () {
  ja.circle = !ja.circle;
};
window.toggleVisual = function () {
  f.anotherVisual = !f.anotherVisual;
  ea.forEach(a => {
    if (a.active) {
      a.dir = a.lastDir;
    }
  });
};
window.prepareUI = function (a) {
  Cc();
  var b = document.getElementById("chatBox");
  var d = document.getElementById("chatHolder");
  var e = document.createElement("div");
  e.id = "suggestBox";
  var g = 0;
  function h() {
    if (!Dc) {
      if (d.style.display == "block") {
        if (b.value) {
          wc(b.value);
        }
        i();
      } else {
        Ea.style.display = "none";
        bb.style.display = "none";
        d.style.display = "block";
        b.focus();
        Y();
      }
    } else {
      setTimeout(function () {
        var a = prompt("chat message");
        if (a) {
          wc(a);
        }
      }, 1);
    }
    b.value = "";
    (() => {
      g = 0;
    })();
  }
  function i() {
    b.value = "";
    d.style.display = "none";
  }
  dc.removeAllChildren(Ka);
  for (let b = 0; b < ec.weapons.length + ec.list.length; ++b) {
    (function (a) {
      dc.generateElement({
        id: "actionBarItem" + a,
        class: "actionBarItem",
        style: "display:none; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5)",
        onmouseout: function () {
          Bc();
        },
        parent: Ka
      });
    })(b);
  }
  for (let b = 0; b < ec.list.length + ec.weapons.length; ++b) {
    (function (b) {
      let d = document.createElement("canvas");
      d.width = d.height = 66;
      let e = d.getContext("2d");
      e.translate(d.width / 2, d.height / 2);
      e.imageSmoothingEnabled = false;
      e.webkitImageSmoothingEnabled = false;
      e.mozImageSmoothingEnabled = false;
      if (ec.weapons[b]) {
        e.rotate(Math.PI);
        let g = new Image();
        Ee[ec.weapons[b].src] = g;
        g.onload = function () {
          this.isLoaded = true;
          let a = 1 / (this.height / this.width);
          let g = ec.weapons[b].iPad || 1;
          e.drawImage(this, -(d.width * g * f.iconPad * a) / 2, -(d.height * g * f.iconPad) / 2, d.width * g * a * f.iconPad, d.height * g * f.iconPad);
          e.fillStyle = "rgba(0, 0, 70, 0.2)";
          e.globalCompositeOperation = "source-atop";
          e.fillRect(-d.width / 2, -d.height / 2, d.width, d.height);
          c("actionBarItem" + b).style.backgroundImage = "url(" + d.toDataURL() + ")";
        };
        g.src = "./../img/weapons/" + ec.weapons[b].src + ".png";
        let h = c("actionBarItem" + b);
        h.onclick = dc.checkTrusted(function () {
          Nb(a.weapons[ec.weapons[b].type]);
        });
        dc.hookTouchEvents(h);
      } else {
        let g = Pe(ec.list[b - ec.weapons.length], true);
        let h = Math.min(d.width - f.iconPadding, g.width);
        e.globalAlpha = 1;
        e.drawImage(g, -h / 2, -h / 2, h, h);
        e.fillStyle = "rgba(0, 0, 70, 0.1)";
        e.globalCompositeOperation = "source-atop";
        e.fillRect(-h / 2, -h / 2, h, h);
        c("actionBarItem" + b).style.backgroundImage = "url(" + d.toDataURL() + ")";
        let i = c("actionBarItem" + b);
        i.onclick = dc.checkTrusted(function () {
          Mb(a.items[a.getItemType(b - ec.weapons.length)]);
        });
        dc.hookTouchEvents(i);
      }
    })(b);
  }
};
window.profineTest = function (a) {
  if (a) {
    let b = a + "";
    b = b.slice(0, f.maxNameLength);
    return b;
  }
};