Greasy Fork 支持简体中文。

Chicken

deob tampermonkey chicken

// ==UserScript==
// @name            Chicken
// @version         tampermonkey
// @author          Memeganoob, Ferris
// @match           *://*.moomoo.io/*
// @grant           none
// @icon            https://media.discordapp.net/attachments/1194836360830406727/1218270075857932378/ENJnXcy.png?ex=66070d6c&is=65f4986c&hm=0f825f9eadffac187cf495c8005d283e2d538e22f6c8d5afd011707291410601&=&format=webp&quality=lossless&width=437&height=437
// @description     deob tampermonkey chicken
// @namespace https://greasyfork.org/users/1338125
// ==/UserScript==

const config = {
    maxScreenWidth: 1920,
    maxScreenHeight: 1080,
    serverUpdateRate: 9,
    serverUpdateSpeed: 1000 / 9,
    maxPlayers: 50,
    maxPlayersHard: 50,
    collisionDepth: 6,
    minimapRate: 3e3,
    colGrid: 10,
    volanoScale: 320,
    innerVolcanoScale: 100,
    volcanoAnimationDuration: 3200,
    clientSendRate: 5,
    healthBarWidth: 50,
    healthBarPad: 4.5,
    iconPadding: 15,
    iconPad: 0.9,
    deathFadeout: 3e3,
    crownIconScale: 60,
    crownPad: 35,
    chatCountdown: 3e3,
    chatCooldown: 5e2,
    inSanbox: true,
    maxAge: 1e2,
    gatherAngle: Math.PI / 2.6,
    gatherWiggle: 10,
    hitReturnRatio: 0.25,
    hitAngle: Math.PI / 2,
    playerScale: 35,
    playerSpeed: 0.0016,
    playerDecel: 0.993,
    nameY: 34,
    skinColors: ["#bf8f54", "#cbb091", "#896c4b", "#fadadc", "#ececec", "#c37373", "#4c4c4c", "#ecaff7", "#738cc3", "#8bc373", "#91b2db"],
    animalCount: 7,
    aiTurnRandom: 0.06,
    cowNames: [
         "SPSLPSLPSLSPLSPLPLS EHELP SHELP SHELpid", "Steph", "waohh", "Romn",
         "mega is crying inside", "fuck man", "Vince", "AHAHAHAHAHAHAH", "Nick Ger",
         "japan go boom boom", "HELPHELPHELP PLSPL", "Otis", "mega's lost sanity",
         "FUICK FUCK FUCK FUCK", "WAAAAAAAAAA", "big fat man", "Oliver", "Jeff took my wifi", "Jimmy", "WAAAAAAASDSADSAIJ HELP",
         "Reaper", "Ben", "Alan", "Naomi", "ABCDEFGHIJKLMPQURSTUVXYZ", "Clever", "Jeremy", "Mike", "Destined to fail",
         "OSPLSPLSPLPSLSPLSPL DUCK MAN TOOK MY HOME", "AHAHAHAHAHAHAHHAH PLSLPSLPSL", "Meaty and Creamy", "HELP HELP  HELP HELP HELP HELP HELP", "Vaja",
         "Joey", "GA GAS SAGGSAGASG", "Murdoch", "Theo robbed you", "Jared", "July is bad", "Sonia", "Mel", "Dexter",
         "Quinn is ass", "AHAHHAHAHAHAHAHHA PSLPSLPSLSPLS END EHLP"
    ],
    shieldAngle: Math.PI / 3,
    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
    }],
    fetchVariant: function (player) {
         let tmpXP = player.weaponXP[player.weaponIndex] || 0;
         for (let i = 4 - 1; i >= 0; --i) {
              if (tmpXP >= this.weaponVariants[i].xp) return this.weaponVariants[i];
         }
    },
    resourceTypes: ["wood", "food", "stone", "points"],
    areaCount: 7,
    treesPerArea: 9,
    bushesPerArea: 3,
    totalRocks: 32,
    goldOres: 7,
    riverWidth: 724,
    riverPadding: 114,
    waterCurrent: 0.0011,
    waveSpeed: 0.0001,
    waveMax: 1.3,
    treeScales: [150, 160, 165, 175],
    bushScales: [80, 85, 95],
    rockScales: [80, 85, 95],
    snowBiomeTop: 2400,
    snowSpeed: 0.75,
    maxNameLength: 15,
    mapScale: 144e2,
    mapPingScale: 40,
    mapPingTime: 22e2
};

const profanityList = ["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 io = new (class {
    constructor() {
         this.socket = null;
         this.connected = false;
         this.socketId = -1;
         this.clientData = {
              lastDirection: 0,
              movementDirection: 0
         };
    }
    connect(socketAddress, callback, events) {
         if (this.socket) return;
         let socketError = false;
         try {
              this.socket = new WebSocket(socketAddress);
              this.socket.binaryType = "arraybuffer";
              this.socket.onopen = () => {
                   this.connected = true;
                   callback();
              };
              this.socket.onmessage = (msg) => {
                   let data = new Uint8Array(msg.data);
                   let parsed = msgpack.decode(data);
                   let type = parsed[0];

                   data = parsed[1];

                   if (type == "io-init") {
                        this.socketId = data[0];
                   } else {
                        if (events[type.toString()]) {
                             events[type.toString()].apply(undefined, data);
                        }
                   }
              };
              this.socket.onclose = (event) => {
                   this.connected = false;
                   if (event.code == 4001) {
                        callback("Invalid Connection");
                   } else if (!socketError) {
                        callback("disconnected");
                   }
              };
              this.socket.onerror = (error) => {
                   if (this.socket && this.socket.readyState != WebSocket.OPEN) {
                        socketError = true;
                        console.error("Socket error", arguments);
                        callback("Socket error");
                   }
              };
         } catch (e) {
              callback(e);
         }
    }
    send(type) {
         let dontSend = false;

         let invalidData = [null, undefined];
         let clientDirection = this.clientData.lastDirection;
         let movementDirection = this.clientData.movementDirection;

         if (type == "6") {
              arguments[1] = UTILS.uncensorChat(profanityList, arguments[1]);
         } else if (type == "D") {
              let direction = arguments[1];
              if (invalidData.includes(direction) || clientDirection == direction) {
                   dontSend = true;
              } else {
                   this.clientData.lastDirection = direction;
              }
         } else if (type == "F") {
              let direction = arguments[2];
              if (!invalidData.includes(direction) || clientDirection == direction) {
                   this.clientData.lastDirection = direction;
              } else {
                   dontSend = true;
              }
         }

         let data = Array.prototype.slice.call(arguments, 1);
         let binary = msgpack.encode([type, data]);

         if (this.socket.readyState == 1 && !dontSend) {
              this.socket.send(binary);

              if (window.packetsSent == undefined) window.packetsSent = [];
              window.packetsSent.push([type, data]);
              if (window.packetsSent.length > 200) {
                   window.packetsSent.shift();
              }
         }
    }
    socketReady() {
         return (this.socket && this.connected);
    }
    close() {
         if (this.socket && this.socket.readyState < 2) {
              this.socket.close();
         }
    }
})();


const mathABS = Math.abs;
const mathCOS = Math.cos;
const mathSIN = Math.sin;
const mathPOW = Math.pow;
const mathSQRT = Math.sqrt;
const mathATAN2 = Math.atan2;
const mathPI = Math.PI;

const UTILS = {
    randInt: (min, max) => Math.floor(Math.random() * (max - min + 1)) + min,

    randFloat: (min, max) => Math.random() * (max - min) + min,

    lerp: (value1, value2, amount) => value1 + (value2 - value1) * amount,

    intersectsLineCircle: (start, end, obj) => {
         let dx = end.x - start.x;
         let dy = end.y - start.y;
         let fx = start.x - obj.x;
         let fy = start.y - obj.y;
         let r = obj.scale + 20;

         let a = dx * dx + dy * dy;
         let b = 2 * (fx * dx + fy * dy);
         let c = (fx * fx + fy * fy) - r * r;

         let discriminant = b * b - 4 * a * c;

         if (discriminant < 0) {
              return false;
         }

         discriminant = Math.sqrt(discriminant);
         let t1 = (-b - discriminant) / (2 * a);
         let t2 = (-b + discriminant) / (2 * a);

         return (t1 >= 0 && t1 <= 1) || (t2 >= 0 && t2 <= 1);
    },

    decel: (val, cel) => {
         if (val > 0) val = Math.max(0, val - cel);
         else if (val < 0) val = Math.min(0, val + cel);
         return val;
    },

    removeWholeNumber: (decimalValue) => {
         let stringValue = decimalValue.toString();
         let decimalIndex = stringValue.indexOf('.');

         if (decimalIndex === -1 || decimalIndex === stringValue.length - 1) {
              return "";
         }

         return parseFloat("." + stringValue.substring(decimalIndex + 1));
    },

    getDistance: (obj1, obj2) => {
         let x1 = obj1.x2 || obj1.x;
         let y1 = obj1.y2 || obj1.y;
         let x2 = obj2.x2 || obj2.x;
         let y2 = obj2.y2 || obj2.y;
         return Math.hypot(y1 - y2, x1 - x2);
    },

    getDirection: (obj1, obj2) => {
         let x1 = obj1.x2 || obj1.x;
         let y1 = obj1.y2 || obj1.y;
         let x2 = obj2.x2 || obj2.x;
         let y2 = obj2.y2 || obj2.y;
         return mathATAN2(y1 - y2, x1 - x2);
    },

    getAngleDist: (a, b) => {
         const p = mathABS(b - a) % (mathPI * 2);
         return p > mathPI ? (mathPI * 2) - p : p;
    },

    isNumber: (n) => typeof n === "number" && !isNaN(n) && isFinite(n),

    isString: (s) => s && typeof s === "string",

    kFormat: (num) => (num > 999 ? (num / 1000).toFixed(1) + 'k' : num),

    capitalizeFirst: (string) => string.charAt(0).toUpperCase() + string.slice(1),

    capitalizeWordInString: (sentence, wordToCapitalize) => {
         var regex = new RegExp(wordToCapitalize, "i");
         return sentence.replace(regex, function (match) {
              return UTILS.capitalizeFirst(match);
         });
    },

    fixTo: (n, v) => parseFloat(n.toFixed(v)),

    sortByPoints: (a, b) => parseFloat(b.points) - parseFloat(a.points),

    lineInRect: (recX, recY, recX2, recY2, x1, y1, x2, y2) => {
         let minX = x1;
         let maxX = x2;
         if (x1 > x2) {
              minX = x2;
              maxX = x1;
         }
         if (maxX > recX2) maxX = recX2;
         if (minX < recX) minX = recX;
         if (minX > maxX) return false;
         let minY = y1;
         let maxY = y2;
         const dx = x2 - x1;
         if (Math.abs(dx) > 0.0000001) {
              const a = (y2 - y1) / dx;
              const b = y1 - a * x1;
              minY = a * minX + b;
              maxY = a * maxX + b;
         }
         if (minY > maxY) {
              const tmp = maxY;
              maxY = minY;
              minY = tmp;
         }
         if (maxY > recY2) maxY = recY2;
         if (minY < recY) minY = recY;
         if (minY > maxY) return false;
         return true;
    },

    containsPoint: (element, x, y) => {
         const bounds = element.getBoundingClientRect();
         const left = bounds.left + window.scrollX;
         const top = bounds.top + window.scrollY;
         const width = bounds.width;
         const height = bounds.height;
         const insideHorizontal = x > left && x < left + width;
         const insideVertical = y > top && y < top + height;
         return insideHorizontal && insideVertical;
    },

    mousifyTouchEvent: (event) => {
         const touch = event.changedTouches[0];
         event.screenX = touch.screenX;
         event.screenY = touch.screenY;
         event.clientX = touch.clientX;
         event.clientY = touch.clientY;
         event.pageX = touch.pageX;
         event.pageY = touch.pageY;
    },

    hookTouchEvents: (element, skipPrevent) => {
         const preventDefault = !skipPrevent;
         let isHovering = false;
         const passive = false;
         element.addEventListener("touchstart", UTILS.checkTrusted(touchStart), passive);
         element.addEventListener("touchmove", UTILS.checkTrusted(touchMove), passive);
         element.addEventListener("touchend", UTILS.checkTrusted(touchEnd), passive);
         element.addEventListener("touchcancel", UTILS.checkTrusted(touchEnd), passive);
         element.addEventListener("touchleave", UTILS.checkTrusted(touchEnd), passive);

         function touchStart(e) {
              UTILS.mousifyTouchEvent(e);
              window.setUsingTouch(true);
              if (preventDefault) {
                   e.preventDefault();
                   e.stopPropagation();
              }
              if (element.onmouseover) element.onmouseover(e);
              isHovering = true;
         }

         function touchMove(e) {
              UTILS.mousifyTouchEvent(e);
              window.setUsingTouch(true);
              if (preventDefault) {
                   e.preventDefault();
                   e.stopPropagation();
              }
              if (UTILS.containsPoint(element, e.pageX, e.pageY)) {
                   if (!isHovering) {
                        if (element.onmouseover) element.onmouseover(e);
                        isHovering = true;
                   }
              } else {
                   if (isHovering) {
                        if (element.onmouseout) element.onmouseout(e);
                        isHovering = false;
                   }
              }
         }

         function touchEnd(e) {
              UTILS.mousifyTouchEvent(e);
              window.setUsingTouch(true);
              if (preventDefault) {
                   e.preventDefault();
                   e.stopPropagation();
              }
              if (isHovering) {
                   if (element.onclick) element.onclick(e);
                   if (element.onmouseout) element.onmouseout(e);
                   isHovering = false;
              }
         }
    },

    removeAllChildren: (element) => {
         while (element.hasChildNodes()) {
              element.removeChild(element.lastChild);
         }
    },

    generateElement: (config) => {
         const element = document.createElement(config.tag || "div");

         function bind(configValue, elementValue) {
              if (config[configValue]) element[elementValue] = config[configValue];
         }
         bind("text", "textContent");
         bind("html", "innerHTML");
         bind("class", "className");
         for (const key in config) {
              switch (key) {
                   case "tag":
                   case "text":
                   case "html":
                   case "class":
                   case "style":
                   case "hookTouch":
                   case "parent":
                   case "children":
                        continue;
                   default:
                        break;
              }
              element[key] = config[key];
         }
         if (element.onclick) element.onclick = UTILS.checkTrusted(element.onclick);
         if (element.onmouseover) element.onmouseover = UTILS.checkTrusted(element.onmouseover);
         if (element.onmouseout) element.onmouseout = UTILS.checkTrusted(element.onmouseout);
         if (config.style) {
              element.style.cssText = config.style;
         }
         if (config.hookTouch) UTILS.hookTouchEvents(element, config.skipPreventTouch);
         if (config.parent) config.parent.appendChild(element);
         if (config.children && config.children.length > 0) {
              for (const child of config.children) element.appendChild(child);
         }
         return element;
    },

    checkTrusted: (callback) => (e) => {
         if (e && !e.isTrusted) {
              e.stopImmediatePropagation();
              e.preventDefault();
         } else {
              callback(e);
         }
    }
};



class AnimText {
    constructor(x, y, duration, scale, speed, color, value, { BuildingDmg }) {
         this.x = x;
         this.y = y;
         this.speed = speed;
         this.totalDuration = duration * .85;
         this.duration = duration;
         this.scale = scale;
         this.color = color;
         this.value = value;
         this.oldScale = scale;
         this.maxScale = this.scale * 1.3;
         this.minScale = this.scale * .15;
         this.animationState = 0;
         this.BuildingDmg = BuildingDmg;
         this.easingDuration = .3 * duration;
         this.elapsedTime = 0;
    }
    easeInOutQuad(t) {
         return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
    }
    update(delta) {
         this.duration -= delta;
         this.y -= this.speed * delta;

         if (isNaN(parseInt(this.value)) || this.BuildingDmg) {
              this.elapsedTime += delta;
              let t;

              if (this.animationState === 0) {
                   t = Math.min(this.elapsedTime / this.easingDuration, 1);
                   this.scale = this.oldScale + (this.maxScale - this.oldScale) * this.easeInOutQuad(t);
                   if (t >= 1) {
                        this.animationState++;
                        this.elapsedTime = 0;
                   }
              } else {
                   t = Math.min(this.elapsedTime / (this.totalDuration - this.easingDuration), 1);
                   this.scale = this.maxScale - (this.maxScale - this.minScale) * this.easeInOutQuad(t);
              }

              if (this.scale <= 0) this.scale = 0;
         }
    }

    render(mainContext, xOff, yOff) {
         mainContext.save();
         mainContext.textBaseline = "middle";
         mainContext.textAlign = "center";
         if (isNaN(parseInt(this.value)) || this.BuildingDmg) {
              mainContext.lineWidth = 7;
              mainContext.strokeStyle = "black";
         }
         mainContext.fillStyle = this.color;
         mainContext.font = this.scale + "px Hammersmith One";
         if (isNaN(parseInt(this.value)) || this.BuildingDmg) mainContext.strokeText(this.value, this.x - xOff, this.y - yOff);
         mainContext.fillText(this.value, this.x - xOff, this.y - yOff);
         mainContext.restore();
    }
}

/*
constructor() {
       this.texts = [];
   }
   update(delta, ctxt, xOff, yOff) {
       ctxt.textBaseline = "middle";
       ctxt.textAlign = "center";
       for(let i = 0; i < this.texts.length; ++i) {
           let text = this.texts[i];
           if(text.life) {
               text.update(delta);
               text.render(ctxt, xOff, yOff);
           }
       }
   }
   showText(x, y, scale, speed, life, text, color, type="normal") {
       let tmpText;
       for(let i = 0; i < this.texts.length; ++i) {
           if(!this.texts[i].life) {
               tmpText = this.texts[i];
               break;
           }
       }
       if(!tmpText) {
           tmpText = new AnimText();
           this.texts.push(tmpText);
       }
       tmpText.init(x, y, scale, speed, life, text, color, type="normal");
   }*/

class TextManager {
    constructor() {
         this.texts = [];
    }
    update(delta, mainContext, xOff, yOff) {
         for (let i = 0; i < this.texts.length; i++) {
              let text = this.texts[i];
              if (text) {
                   if (text.duration > 0) {
                        text.update(delta);
                        text.render(mainContext, xOff, yOff);
                   } else {
                        this.texts.splice(i, 1);
                   }
              }
         }
    }
    showText(pos, duration, scale, speed, color, value, objParameters = {}) {
         this.texts.push(new AnimText(pos.x, pos.y, duration, scale, speed, color, value, objParameters));
    }
}

let animText = { AnimText, TextManager };

const 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",
    sandboxLimit: 299,
    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,
    sandboxLimit: 299,
    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,
    sandboxLimit: 299,
    limit: 2,
    layer: -1
}];
const 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
}];
const 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,
    dmg: 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,
    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,
    dmg: 0,
    shield: 0.2,
    speed: 1,
    xOff: 6,
    yOff: 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,
    dmg: 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,
    dmg: 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,
    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,
    dmg: 50,
    projectile: 5,
    hideProjectile: true,
    spdMult: 0.6,
    speed: 1500
}];
const list = window.list = [{
    group: groups[0],
    name: "apple",
    desc: "restores 20 health when consumed",
    req: ["food", 10],
    consume: function (doer) {
         return doer.changeHealth(20, doer);
    },
    scale: 22,
    holdOffset: 15
}, {
    age: 3,
    group: groups[0],
    name: "cookie",
    desc: "restores 40 health when consumed",
    req: ["food", 15],
    consume: function (doer) {
         return doer.changeHealth(40, doer);
    },
    scale: 27,
    holdOffset: 15
}, {
    age: 7,
    group: groups[0],
    name: "cheese",
    desc: "restores 30 health and another 50 over 5 seconds",
    req: ["food", 25],
    consume: function (doer) {
         if (doer.changeHealth(30, doer) || doer.health < 100) {
              doer.dmgOverTime.dmg = -10;
              doer.dmgOverTime.doer = doer;
              doer.dmgOverTime.time = 5;
              return true;
         }
         return false;
    },
    scale: 27,
    holdOffset: 15
}, {
    group: groups[1],
    name: "wood wall",
    desc: "provides protection for your village",
    req: ["wood", 10],
    projDmg: true,
    health: 380,
    scale: 50,
    holdOffset: 20,
    placeOffset: -5
}, {
    age: 3,
    group: groups[1],
    name: "stone wall",
    desc: "provides improved protection for your village",
    req: ["stone", 25],
    health: 900,
    scale: 50,
    holdOffset: 20,
    placeOffset: -5
}, {
    age: 7,
    pre: 1,
    group: groups[1],
    name: "castle wall",
    desc: "provides powerful protection for your village",
    req: ["stone", 35],
    health: 1500,
    scale: 52,
    holdOffset: 20,
    placeOffset: -5
}, {
    group: 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
}, {
    age: 5,
    group: 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
}, {
    age: 9,
    pre: 1,
    group: 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
}, {
    age: 9,
    pre: 2,
    group: 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
}, {
    group: groups[3],
    name: "windmill",
    desc: "generates gold over time",
    req: ["wood", 50, "stone", 10],
    health: 400,
    pps: 1,
    turnSpeed: 0,
    spritePadding: 25,
    iconLineMult: 12,
    scale: 45,
    holdOffset: 20,
    placeOffset: 5
}, {
    age: 5,
    pre: 1,
    group: groups[3],
    name: "faster windmill",
    desc: "generates more gold over time",
    req: ["wood", 60, "stone", 20],
    health: 500,
    pps: 1.5,
    turnSpeed: 0,
    spritePadding: 25,
    iconLineMult: 12,
    scale: 47,
    holdOffset: 20,
    placeOffset: 5
}, {
    age: 8,
    pre: 1,
    group: groups[3],
    name: "power mill",
    desc: "generates more gold over time",
    req: ["wood", 100, "stone", 50],
    health: 800,
    pps: 2,
    turnSpeed: 0,
    spritePadding: 25,
    iconLineMult: 12,
    scale: 47,
    holdOffset: 20,
    placeOffset: 5
}, {
    age: 5,
    group: 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
}, {
    age: 5,
    group: 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
}, {
    age: 4,
    group: 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
}, {
    age: 4,
    group: 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
}, {
    age: 7,
    group: 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
}, {
    age: 7,
    group: 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
}, {
    age: 7,
    group: 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
}, {
    age: 9,
    group: 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
}, {
    age: 7,
    group: 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
}, {
    age: 7,
    group: 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
}];
for (let i = 0; i < list.length; ++i) {
    list[i].id = i;
}
let items = { groups, projectiles, weapons, list };

class Player {
    constructor(id, sid, config, UTILS, items, hats, accessories) {
         this.id = id;
         this.sid = sid;
         this.tmpScore = 0;
         this.team = null;
         this.skinIndex = 0;
         this.tailIndex = 0;
         this.hitTime = 0;
         this.tails = {};
         this.lastChatDate = Date.now();
         for (let i = 0; i < accessories.length; i++) {
              if (accessories[i].price <= 0) this.tails[accessories[i].id] = 1;
         }
         this.skins = {};
         for (let i = 0; i < hats.length; i++) {
              if (hats[i].price <= 0) this.skins[hats[i].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.chatMessages = [];
         this.resetResources = function (moofoll) {
              for (var i = 0; i < config.resourceTypes.length; ++i) {
                   this[config.resourceTypes[i]] = moofoll ? 100 : 0;
              }
         };
         this.spawn = function (moofoll) {
              this.chatMessages = [];
              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 = 1000;
              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.dirPlus = 0;
              this.targetDir = 0;
              this.targetAngle = 0;
              this.maxHealth = 100;
              this.health = this.maxHealth;
              this.scale = config.playerScale;
              this.speed = config.playerSpeed;
              this.resetResources(moofoll);
              this.items = [0, 3, 6, 10];
              this.weapons = [0];
              this.shootCount = 0;
              this.weaponXP = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
              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.primaryWeapon = 0;
              this.secondaryWeapon = 15;
              this.primaryVariant = 0;
              this.secondaryVariant = 0;
              this.primaryHit = 0;
              this.secondaryHit = 0;
              this.turretTick = 0;
              this.bullTick = 0
              this.vel = { x: 0, y: 0 };
              this.spikeType = { id: 6, sid: 0 };
              this.damages = [];
         };
         this.setData = function (data) {
              this.id = data[0];
              this.sid = data[1];
              this.name = data[2];
              this.x = data[3];
              this.y = data[4];
              this.dir = data[5];
              this.health = data[6];
              this.maxHealth = data[7];
              this.scale = data[8];
              this.skinColor = data[9];
         };
         var tmpRatio = 0;
         var animIndex = 0;
         this.animate = function (delta) {
              if (this.animTime > 0) {
                   this.animTime -= delta;
                   if (this.animTime <= 0) {
                        this.animTime = 0;
                        this.dirPlus = 0;
                        tmpRatio = 0;
                        animIndex = 0;
                   } else {
                        if (animIndex == 0) {
                             tmpRatio += delta / (this.animSpeed * config.hitReturnRatio);
                             this.dirPlus = UTILS.lerp(0, this.targetAngle, Math.min(1, tmpRatio));
                             if (tmpRatio >= 1) {
                                  tmpRatio = 1;
                                  animIndex = 1;
                             }
                        } else {
                             tmpRatio -= delta / (this.animSpeed * (1 - config.hitReturnRatio));
                             this.dirPlus = UTILS.lerp(0, this.targetAngle, Math.max(0, tmpRatio));
                        }
                   }
              }
         };
         this.startAnim = function (didHit, index) {
              this.animTime = this.animSpeed = items.weapons[index].speed;
              this.targetAngle = (didHit ? -config.hitAngle : -Math.PI);
              tmpRatio = 0;
              animIndex = 0;
         };
         this.resetReloads = function () {
              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.manageReloads = function (delta, visible) {
              if (!visible) {
                   this.resetReloads();
              } else {
                   if (this.buildIndex == -1) {
                        this.reloads[this.weaponIndex] = Math.max(0, this.reloads[this.weaponIndex] - delta);
                        if (this.weaponIndex < 9) {
                             if (this.primaryWeapon != this.weaponIndex) {
                                  if (this.weaponIndex == 4 && this.secondaryWeapon >= 12 && this.secondaryWeapon != 14) {
                                       this.secondaryVariant = 0;
                                       this.secondaryWeapon = 9;
                                  } else if (this.secondaryWeapon != 10 && this.secondaryWeapon != 14 && this.secondaryWeapon != 11) {
                                       this.secondaryWeapon = 15;
                                       this.secondaryVariant = 0;
                                  }
                             }
                             this.primaryWeapon = this.weaponIndex;
                             this.primaryVariant = this.weaponVariant;
                        } else {
                             this.secondaryWeapon = this.weaponIndex;
                             this.secondaryVariant = this.weaponVariant;
                             if (this.primaryWeapon == 0) {
                                  this.primaryWeapon = 5;
                                  this.primaryVariant = 2;
                             }
                        }
                   }
                   this.reloads[53] = Math.max(0, this.reloads[53] - delta);
              }
         }
    }
}

const hats = window.hats = [{
    id: 45,
    name: "Shame!",
    dontSell: true,
    price: 0,
    scale: 120,
    desc: "hacks are for losers"
}, {
    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
}];
const accessories = window.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
}];
let store = { hats, accessories };

class Projectile {
    constructor() {
         this.init = function (indx, x, y, dir, spd, dmg, rng, scl, owner) {
              this.active = true;
              this.indx = indx;
              this.x = x;
              this.y = y;
              this.oldX = x;
              this.oldY = y;
              this.dir = dir;
              this.skipMov = true;
              this.speed = spd;
              this.dmg = dmg;
              this.scale = scl;
              this.range = rng;
              this.owner = owner;
         };
         this.update = function (delta) {
              if (this.active) {
                   var tmpSpeed = this.speed * delta;
                   if (!this.skipMov) {
                        this.x += tmpSpeed * Math.cos(this.dir);
                        this.y += tmpSpeed * Math.sin(this.dir);
                        this.range -= tmpSpeed;
                        if (this.range <= 0) {
                             this.x += this.range * Math.cos(this.dir);
                             this.y += this.range * Math.sin(this.dir);
                             tmpSpeed = 1;
                             this.range = 0;
                             this.active = false;
                        }
                   } else {
                        this.skipMov = false;
                   }
              }
         };
    };
}

class ProjectileManager {
    constructor(Projectile, projectiles, players, ais, objectManager, items, config, UTILS, server) {
         this.addProjectile = function (x, y, dir, range, speed, indx, owner, ignoreObj, layer) {
              var tmpData = items.projectiles[indx];
              var tmpProj;
              for (var i = 0; i < projectiles.length; ++i) {
                   if (!projectiles[i].active) {
                        tmpProj = projectiles[i];
                        break;
                   }
              }
              if (!tmpProj) {
                   tmpProj = new Projectile(players, ais, objectManager, items, config, UTILS, server);
                   tmpProj.sid = projectiles.length;
                   projectiles.push(tmpProj);
              }
              tmpProj.init(indx, x, y, dir, speed, tmpData.dmg, range, tmpData.scale, owner);
              tmpProj.ignoreObj = ignoreObj;
              tmpProj.layer = layer || tmpData.layer;
              tmpProj.src = tmpData.src;
              return tmpProj;
         };
    };
}

var intervalId;
class VultrClient {
    constructor(baseUrl, devPort, lobbySize, lobbySpread, rawIPs) {
         this.debugLog = false;
         this.baseUrl = baseUrl;
         this.lobbySize = lobbySize;
         this.devPort = devPort;
         this.lobbySpread = lobbySpread;
         this.rawIPs = !!rawIPs;
         this.server = undefined;
         this.gameIndex = undefined;
         this.callback = undefined;
         this.errorCallback = undefined;
         this.regionInfo = {
              0: {
                   name: "Local",
                   latitude: 0,
                   longitude: 0
              },
              "us-east": {
                   name: "Miami",
                   latitude: 40.1393329,
                   longitude: -75.8521818
              },
              "us-west": {
                   name: "Silicon Valley",
                   latitude: 47.6149942,
                   longitude: -122.4759879
              },
              gb: {
                   name: "London",
                   latitude: 51.5283063,
                   longitude: -.382486
              },
              "eu-west": {
                   name: "Frankfurt",
                   latitude: 50.1211273,
                   longitude: 8.496137
              },
              au: {
                   name: "Sydney",
                   latitude: -33.8479715,
                   longitude: 150.651084
              },
              sg: {
                   name: "Singapore",
                   latitude: 1.3147268,
                   longitude: 103.7065876
              }
         };
    }
    start(callback, errorCallback) {
         this.callback = callback;
         this.errorCallback = errorCallback;
         var query = this.parseServerQuery();
         if (query) {
              this.log("Found server in query.");
              this.password = query[3];
              this.connect(query[0], query[1], query[2]);
         } else {
              this.log("Pinging servers...");
              this.pingServers();
         }
    }
    parseServerQuery(e) {
         /*var parsed = location.href;
         parsed = parsed.split("=")[1];
         var serverRaw = parsed;
         if (typeof serverRaw != "string") {
             return;
         }
         var split = serverRaw.split(atob("Og=="));
         if (split.length != 3) {
             this.errorCallback("Invalid number of server parameters in " + serverRaw);
             return;
         }
         var region = split[0];
         var index = parseInt(split[1]);
         var gameIndex = parseInt(split[2]);
         if (region != "0" && !region.startsWith("vultr:")) {
             region = "vultr:" + region;
         }
         return [region, index, gameIndex, undefined];*/
         const t = new URLSearchParams(location.search, !0), i = e || t.get("server");
         if (typeof i != "string") return [];
         const [s, n] = i.split(":");
         return [s, n, t.get("password")]
    }
    findServer(region, index) {
         for (var region in this.servers) {
              var i = this.servers[region];
              for (let n = 0; n < i.length; n++) {
                   const r = i[n];
                   if (r.name === index)
                        return r
              }
         }
         /*var serverList = this.servers[region];
         if (!Array.isArray(serverList)) {
             this.errorCallback("No server list for region " + region);
             return;
         }
         for (var i = 0; i < serverList.length; i++) {
             var server = serverList[i];
             if (server.index == index) {
                 return server;
             }
         }*/
         console.warn("Could not find server in region " + region + " with index " + index + ".");
         return;
    }
    pingServers() {
         var _this = this;
         var requests = [];
         for (var region in this.servers) {
              if (!this.servers.hasOwnProperty(region)) continue;
              var serverList = this.servers[region];
              var targetServer = serverList[Math.floor(Math.random() * serverList.length)];
              if (targetServer == undefined) {
                   console.log("No target server for region " + region);
                   continue;
              }
              (function (serverList, targetServer) {
                   var request = new XMLHttpRequest();
                   request.onreadystatechange = function (requestEvent) {
                        var request = requestEvent.target;
                        if (request.readyState != 4) return;
                        if (request.status == 200) {
                             for (var i = 0; i < requests.length; i++) {
                                  requests[i].abort();
                             }
                             _this.log("Connecting to region", targetServer.region);
                             var targetGame = _this.seekServer(targetServer.region);
                             _this.connect(targetGame[0], targetGame[1], targetGame[2]);
                        } else {
                             console.warn("Error pinging " + targetServer.ip + " in region " + region);
                        }
                   };
                   var targetAddress = "//" + _this.serverAddress(targetServer.ip, true) + ":" + _this.serverPort(targetServer) + "/ping";
                   request.open("GET", targetAddress, true);
                   request.send(null);
                   _this.log("Pinging", targetAddress);
                   requests.push(request);
              })(serverList, targetServer);
         }
    }
    seekServer(region, isPrivate, gameMode) {
         if (gameMode == undefined) {
              gameMode = "random";
         }
         if (isPrivate == undefined) {
              isPrivate = false;
         }
         const gameModeList = ["random"];
         var lobbySize = this.lobbySize;
         var lobbySpread = this.lobbySpread;
         var servers = this.servers[region].flatMap(function (s) {
              var gameIndex = 0;
              return s.games.map(function (g) {
                   var currentGameIndex = gameIndex++;
                   return {
                        region: s.region,
                        index: s.index * s.games.length + currentGameIndex,
                        gameIndex: currentGameIndex,
                        gameCount: s.games.length,
                        playerCount: g.playerCount,
                        isPrivate: g.isPrivate
                   }
              });
         }).filter(function (s) {
              return !s.isPrivate;
         }).filter(function (s) {
              if (isPrivate) {
                   return s.playerCount == 0 && s.gameIndex >= s.gameCount / 2;
              } else {
                   return true;
              }
         }).filter(function (s) {
              if (gameMode == "random") {
                   return true;
              } else {
                   return gameModeList[s.index % gameModeList.length].key == gameMode;
              }
         }).sort(function (a, b) {
              return b.playerCount - a.playerCount
         }).filter(function (s) {
              return s.playerCount < lobbySize
         });
         if (isPrivate) {
              servers.reverse();
         }
         if (servers.length == 0) {
              this.errorCallback("No open servers.");
              return;
         }
         // over
         var randomSpread = Math.min(lobbySpread, servers.length);
         var serverIndex = Math.floor(Math.random() * randomSpread);
         serverIndex = Math.min(serverIndex, servers.length - 1);
         var rawServer = servers[serverIndex];
         var serverRegion = rawServer.region;
         var serverIndex = Math.floor(rawServer.index / rawServer.gameCount);
         var gameIndex = rawServer.index % rawServer.gameCount;
         this.log("Found server.");
         return [serverRegion, serverIndex, gameIndex];
    }
    connect(region, index, game) {
         if (this.connected) {
              return;
         }
         var server = this.findServer(region, index);
         if (server == undefined) {
              this.errorCallback("Failed to find server for region " + region + " and index " + index);
              return;
         }
         this.log("Connecting to server", server, "with game index", game);
         if (server.playerCount >= this.lobbySize) {
              this.errorCallback("Server is already full.");
              return;
         }
         window.history.replaceState(document.title, document.title, this.generateHref(region, index, game, this.password));
         this.server = server;
         this.gameIndex = game;
         this.log("Calling callback with address", this.serverAddress(server), "on port", this.serverPort(server), "with game index", game);
         this.callback(this.serverAddress(server), this.serverPort(server), game);
    }
    switchServer(region, index, game, password) {
         this.switchingServers = true;
         location.href = this.generateHref(region, index, null);
         //window.location = this.generateHref(region, index, null);
    }
    generateHref(region, index, game, password) {
         let s = window.location.href.split("?")[0];
         return s += "?server=" + region + ":" + index,
              game && (s += "&password=" + encodeURIComponent(game)),
              s
    }
    serverAddress(e) {
         return e.region == 0 ? "localhost" : e.key + "." + e.region + "." + this.baseUrl;
    }
    serverPort(server) {
         /*if (server.region == 0) {
             return this.devPort;
         }*/
         return server.port;//location.protocol.startsWith("https") ? 443 : 80;
    }
    processServers(servers) {
         /*

         var servers = {};
         for (var i = 0; i < serverList.length; i++) {
             var server = serverList[i];
             var list = servers[server.region];
             if (list == undefined) {
                 list = [];
                 servers[server.region] = list;
             }
             list.push(server);
         }
         for (var region in servers) {
             servers[region] = servers[region].sort(function (a, b) {
                 return a.index - b.index
             });
         }
         this.servers = servers;
         */
         if (intervalId) {
              clearInterval(intervalId);
         }
         return new Promise(async (resolve) => {
              const serverData = {};
              const pingServer = async (server) => {
                   const regionData = serverData[server];
                   const primaryServer = regionData[0];
                   let serverAddress = this.serverAddress(primaryServer);
                   const serverPort = this.serverPort(primaryServer);
                   if (serverPort) {
                        serverAddress += `:${serverPort}`;
                   }
                   const pingUrl = `https://${serverAddress}/ping`;
                   const startTime = new Date().getTime();
                   try {
                        const response = await fetch(pingUrl);
                        const pingTime = new Date().getTime() - startTime;
                        regionData.forEach((s) => {
                             s.ping = pingTime;
                        });
                   } catch (error) {
                   }
              };
              const processAllRegions = async () => {
                   await Promise.all(Object.keys(serverData).map(pingServer));
                   if (!window.blockRedraw) {
                        //Ue.redraw();
                   }
              };
              servers.forEach((server) => {
                   serverData[server.region] = serverData[server.region] || [];
                   serverData[server.region].push(server);
              });
              for (const region in serverData) {
                   serverData[region] = serverData[region].sort((a, b) => a.startTime - b.startTime);
              }
              this.servers = serverData;
              let selectedServer;
              const [queryRegion, queryName] = this.parseServerQuery();
              servers.forEach((server) => {
                   if (queryRegion === server.region && queryName === server.name) {
                        server.selected = true;
                        selectedServer = server;
                   }
              });
              processAllRegions()
                   .then(processAllRegions)
                   .then(() => {
                        if (selectedServer) {
                             return;
                        }
                        let bestServer;
                        servers.forEach((server) => {
                             if (!bestServer || bestServer.ping > server.ping) {
                                  bestServer = server;
                             }
                        });
                        if (bestServer) {
                             bestServer.selected = true;
                             const newUrl = this.generateHref(bestServer.region, bestServer.name, this.password);
                             window.history.replaceState(document.title, document.title, newUrl);
                             if (!window.blockRedraw) {
                                  //Ue.redraw();
                             }
                        }
                   })
                   .catch((error) => {
                        console.log("Failed to ping servers:", error);
                   })
                   .finally(resolve);
              intervalId = setInterval(processAllRegions, 5000);
         });
    }
    ipToHex(ip) {
         const encoded = ip.split(".") // Split by components
              .map((component) => ("00" + parseInt(component).toString(16)) // Parses the component then converts it to a hex
                   .substr(-2) // Ensures there's 2 characters
              ).join("") // Join the string
              .toLowerCase(); // Make sure it's lowercase
         return encoded;
    }
    hashIP(ip) {
         return md5(this.ipToHex(ip));
    }
    log() {
         if (this.debugLog) {
              return console.log.apply(undefined, arguments);
         } else if (console.verbose) {
              return console.verbose.apply(undefined, arguments);
         }
    }
    stripRegion(region) {
         if (region.startsWith("vultr:")) {
              region = region.slice(6);
         } else if (region.startsWith("do:")) {
              region = region.slice(3);
         }
         return region;
    };
}
const concat = function (x, y) {
    return x.concat(y)
};
const flatMap = function (f, xs) {
    return xs.map(f).reduce(concat, []);
};
Array.prototype.flatMap = function (f) {
    return flatMap(f, this)
};

class AiManager {
    constructor(ais, AI, players, items, objectManager, config, UTILS, scoreCallback, server) {
         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,
              name: "Technoblade",
              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: "nerfed duck man",
              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.0,
              turnSpeed: 0.0,
              scale: 70,
              spriteMlt: 1.0
         }, {
              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]
         }, {
              id: 9,
              name: "💀MOOFIE",
              src: "wolf_2",
              hostile: !0,
              fixedSpawn: !0,
              dontRun: !0,
              hitScare: 50,
              spawnDelay: 6e4,
              noTrap: !0,
              nameScale: 35,
              dmg: 12,
              colDmg: 100,
              killScore: 3e3,
              health: 9e3,
              weightM: .45,
              speed: .0015,
              turnSpeed: .0025,
              scale: 94,
              viewRange: 1440,
              chargePlayer: !0,
              drop: ["food", 3e3],
              minSpawnRange: .85,
              maxSpawnRange: .9
         }, {
              id: 10,
              name: "💀Wolf",
              src: "wolf_1",
              hostile: !0,
              fixedSpawn: !0,
              dontRun: !0,
              hitScare: 50,
              spawnDelay: 3e4,
              dmg: 10,
              killScore: 700,
              health: 500,
              weightM: .45,
              speed: .00115,
              turnSpeed: .0025,
              scale: 88,
              viewRange: 1440,
              chargePlayer: !0,
              drop: ["food", 400],
              minSpawnRange: .85,
              maxSpawnRange: .9
         }, {
              id: 11,
              name: "💀Bully",
              src: "bull_1",
              hostile: !0,
              fixedSpawn: !0,
              dontRun: !0,
              hitScare: 50,
              dmg: 20,
              killScore: 5e3,
              health: 5e3,
              spawnDelay: 1e5,
              weightM: .45,
              speed: .00115,
              turnSpeed: .0025,
              scale: 94,
              viewRange: 1440,
              chargePlayer: !0,
              drop: ["food", 800],
              minSpawnRange: .85,
              maxSpawnRange: .9
         }];
         this.spawn = function (x, y, dir, index) {
              var tmpObj;
              for (var i = 0; i < ais.length; ++i) {
                   if (!ais[i].active) {
                        tmpObj = ais[i];
                        break;
                   }
              }
              if (!tmpObj) {
                   tmpObj = new AI(ais.length, objectManager, players, items, UTILS, config, scoreCallback, server);
                   ais.push(tmpObj);
              }
              tmpObj.init(x, y, dir, index, this.aiTypes[index]);
              return tmpObj;
         };
    }
}

let tmpBackgroundBuildings = [{
    "sid": 0,
    "x": 11288.7,
    "y": 3585.1,
    "dir": 0,
    "type": 1
}, {
    "sid": 1,
    "x": 10838.7,
    "y": 2947.1,
    "dir": 0,
    "type": 1
}, {
    "sid": 2,
    "x": 10534.7,
    "y": 2909.1,
    "dir": 0,
    "type": 1
}, {
    "sid": 3,
    "x": 10050.6,
    "y": 3166.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 4,
    "x": 11473.7,
    "y": 2921.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 5,
    "x": 11325.7,
    "y": 3248.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 6,
    "x": 10036.4,
    "y": 2989.6,
    "dir": 1.11,
    "type": null,
    "id": 10
}, {
    "sid": 7,
    "x": 10190.9,
    "y": 2835.2,
    "dir": 1.11,
    "type": null,
    "id": 10
}, {
    "sid": 8,
    "x": 10314.2,
    "y": 2853,
    "dir": -3.47,
    "type": null,
    "id": 10
}, {
    "sid": 9,
    "x": 10351.1,
    "y": 3033.5,
    "dir": -3.26,
    "type": null,
    "id": 10
}, {
    "sid": 10,
    "x": 10399.6,
    "y": 2946.6,
    "dir": -2.01,
    "type": null,
    "id": 10
}, {
    "sid": 11,
    "x": 10431.2,
    "y": 3137.6,
    "dir": -3.57,
    "type": null,
    "id": 10
}, {
    "sid": 12,
    "x": 10549.6,
    "y": 3028,
    "dir": -1.07,
    "type": null,
    "id": 10
}, {
    "sid": 13,
    "x": 10587.8,
    "y": 3297,
    "dir": -3.63,
    "type": null,
    "id": 10
}, {
    "sid": 14,
    "x": 10864.4,
    "y": 3327.5,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 15,
    "x": 10833.7,
    "y": 3170.8,
    "dir": 2.53,
    "type": null,
    "id": 10
}, {
    "sid": 16,
    "x": 10953.8,
    "y": 2951.9,
    "dir": 3.59,
    "type": null,
    "id": 10
}, {
    "sid": 17,
    "x": 11113.5,
    "y": 3062.9,
    "dir": 1.83,
    "type": null,
    "id": 10
}, {
    "sid": 18,
    "x": 11104.3,
    "y": 2901.8,
    "dir": 4.33,
    "type": null,
    "id": 10
}, {
    "sid": 19,
    "x": 202,
    "y": 1906,
    "dir": 0,
    "type": 1
}, {
    "sid": 20,
    "x": 12334.7,
    "y": 3044.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 21,
    "x": 12235.7,
    "y": 3463.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 22,
    "x": 12463,
    "y": 3356,
    "dir": 0,
    "type": 2
}, {
    "sid": 23,
    "x": 11648,
    "y": 2974.3,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 24,
    "x": 7956.5,
    "y": 12367.4,
    "dir": -2.98,
    "type": null,
    "id": 10
}, {
    "sid": 25,
    "x": 2656.1,
    "y": 168,
    "dir": 0,
    "type": 0
}, {
    "sid": 26,
    "x": 8092.5,
    "y": 12368.6,
    "dir": -2.72,
    "type": null,
    "id": 10
}, {
    "sid": 27,
    "x": 8509.1,
    "y": 12365.7,
    "dir": 4.58,
    "type": null,
    "id": 10
}, {
    "sid": 28,
    "x": 7764.6,
    "y": 12303.1,
    "dir": -4.49,
    "type": null,
    "id": 10
}, {
    "sid": 29,
    "x": 12582.9,
    "y": 2268.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 30,
    "x": 12438.6,
    "y": 2327.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 31,
    "x": 12291.8,
    "y": 2327.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 32,
    "x": 12291.8,
    "y": 2488.5,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 33,
    "x": 12144.4,
    "y": 2327.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 34,
    "x": 12144.4,
    "y": 2488.5,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 35,
    "x": 11996.3,
    "y": 2327.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 36,
    "x": 11996.3,
    "y": 2488.5,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 37,
    "x": 11759.7,
    "y": 2407.8,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 38,
    "x": 11611.5,
    "y": 2407.8,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 39,
    "x": 11490.7,
    "y": 2407.8,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 40,
    "x": 10470.7,
    "y": 2555.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 41,
    "x": 10164.6,
    "y": 2744.6,
    "dir": 2.8,
    "type": null,
    "id": 10
}, {
    "sid": 42,
    "x": 10192.5,
    "y": 2649.1,
    "dir": 4.05,
    "type": null,
    "id": 10
}, {
    "sid": 43,
    "x": 10343.3,
    "y": 2757.9,
    "dir": -2.22,
    "type": null,
    "id": 10
}, {
    "sid": 44,
    "x": 11257.4,
    "y": 2488.5,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 45,
    "x": 11110.9,
    "y": 2327.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 46,
    "x": 11110.9,
    "y": 2488.5,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 47,
    "x": 10964.3,
    "y": 2327.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 48,
    "x": 10816.9,
    "y": 2327.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 49,
    "x": 10816.9,
    "y": 2488.5,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 50,
    "x": 10668.8,
    "y": 2327.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 51,
    "x": 10668.8,
    "y": 2488.5,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 52,
    "x": 10373.9,
    "y": 2327.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 53,
    "x": 10432.1,
    "y": 2407.8,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 54,
    "x": 10078.4,
    "y": 2327.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 55,
    "x": 10226.6,
    "y": 2028,
    "dir": 0,
    "type": 0
}, {
    "sid": 56,
    "x": 10770.7,
    "y": 2018,
    "dir": 0,
    "type": 0
}, {
    "sid": 57,
    "x": 12689.9,
    "y": 2964.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 58,
    "x": 11519.7,
    "y": 1789,
    "dir": 0,
    "type": 0
}, {
    "sid": 59,
    "x": 12616.9,
    "y": 1808,
    "dir": 0,
    "type": 0
}, {
    "sid": 60,
    "x": 2854,
    "y": 14226,
    "dir": 0,
    "type": 2
}, {
    "sid": 61,
    "x": 11361.5,
    "y": 2617,
    "dir": 0.15,
    "type": null,
    "id": 6
}, {
    "sid": 62,
    "x": 12598.4,
    "y": 3249.8,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 63,
    "x": 12403.6,
    "y": 1677.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 64,
    "x": 12551.6,
    "y": 1677.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 65,
    "x": 12069.3,
    "y": 1593.4,
    "dir": -3.46,
    "type": null,
    "id": 10
}, {
    "sid": 66,
    "x": 12199.2,
    "y": 1497.7,
    "dir": -0.96,
    "type": null,
    "id": 10
}, {
    "sid": 67,
    "x": 12698.4,
    "y": 1677.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 68,
    "x": 12698.4,
    "y": 1515.7,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 69,
    "x": 11999.7,
    "y": 1414.9,
    "dir": -2.67,
    "type": null,
    "id": 10
}, {
    "sid": 70,
    "x": 11230.4,
    "y": 1396.9,
    "dir": 1.22,
    "type": null,
    "id": 10
}, {
    "sid": 71,
    "x": 10992.7,
    "y": 1397.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 72,
    "x": 10756.8,
    "y": 1397.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 73,
    "x": 10520,
    "y": 1397.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 74,
    "x": 10284,
    "y": 1397.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 75,
    "x": 11286.4,
    "y": 1314.8,
    "dir": -0.03,
    "type": null,
    "id": 10
}, {
    "sid": 76,
    "x": 11050.9,
    "y": 1317,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 77,
    "x": 10815,
    "y": 1317,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 78,
    "x": 10578.2,
    "y": 1317,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 79,
    "x": 10342.2,
    "y": 1317,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 80,
    "x": 12805.9,
    "y": 1140,
    "dir": 0,
    "type": 0
}, {
    "sid": 81,
    "x": 11551.5,
    "y": 2088.6,
    "dir": 1.15,
    "type": null,
    "id": 10
}, {
    "sid": 82,
    "x": 11456.8,
    "y": 2071.5,
    "dir": 2.35,
    "type": null,
    "id": 10
}, {
    "sid": 83,
    "x": 11438.8,
    "y": 1976.9,
    "dir": 3.56,
    "type": null,
    "id": 10
}, {
    "sid": 84,
    "x": 12282.7,
    "y": 1250.3,
    "dir": 0.46,
    "type": null,
    "id": 10
}, {
    "sid": 85,
    "x": 12162,
    "y": 1256.9,
    "dir": -0.79,
    "type": null,
    "id": 10
}, {
    "sid": 86,
    "x": 11226.1,
    "y": 1235.7,
    "dir": -1.28,
    "type": null,
    "id": 10
}, {
    "sid": 87,
    "x": 10992.7,
    "y": 1236.3,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 88,
    "x": 10756.8,
    "y": 1236.3,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 89,
    "x": 10520,
    "y": 1236.3,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 90,
    "x": 10284,
    "y": 1236.3,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 91,
    "x": 12063.8,
    "y": 1241,
    "dir": -2.04,
    "type": null,
    "id": 10
}, {
    "sid": 92,
    "x": 12845.9,
    "y": 1677.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 93,
    "x": 12845.9,
    "y": 1515.7,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 94,
    "x": 12861,
    "y": 2392.3,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 95,
    "x": 11530.3,
    "y": 1992.6,
    "dir": 2.35,
    "type": null,
    "id": 10
}, {
    "sid": 96,
    "x": 11625.1,
    "y": 2009.8,
    "dir": 1.15,
    "type": null,
    "id": 10
}, {
    "sid": 97,
    "x": 11512.4,
    "y": 1898,
    "dir": 3.56,
    "type": null,
    "id": 10
}, {
    "sid": 98,
    "x": 11566.7,
    "y": 1045,
    "dir": 0,
    "type": 0
}, {
    "sid": 99,
    "x": 12266.8,
    "y": 1152.1,
    "dir": -0.79,
    "type": null,
    "id": 10
}, {
    "sid": 100,
    "x": 10447.4,
    "y": 1137.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 101,
    "x": 10683.3,
    "y": 1137.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 102,
    "x": 10919.3,
    "y": 1137.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 103,
    "x": 12386.9,
    "y": 1146.1,
    "dir": 0.46,
    "type": null,
    "id": 10
}, {
    "sid": 104,
    "x": 12168.6,
    "y": 1136.2,
    "dir": -2.04,
    "type": null,
    "id": 10
}, {
    "sid": 105,
    "x": 11721.2,
    "y": 1874.5,
    "dir": 0.37,
    "type": null,
    "id": 10
}, {
    "sid": 106,
    "x": 10389.2,
    "y": 1056.4,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 107,
    "x": 10625.1,
    "y": 1056.4,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 108,
    "x": 10861.1,
    "y": 1056.4,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 109,
    "x": 12491.4,
    "y": 1040.7,
    "dir": 0.45,
    "type": null,
    "id": 10
}, {
    "sid": 110,
    "x": 12272.8,
    "y": 1032,
    "dir": -2.04,
    "type": null,
    "id": 10
}, {
    "sid": 111,
    "x": 11653.3,
    "y": 1810.2,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 112,
    "x": 11732.7,
    "y": 1755.7,
    "dir": 0.37,
    "type": null,
    "id": 10
}, {
    "sid": 113,
    "x": 10447.4,
    "y": 975.8,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 114,
    "x": 10683.3,
    "y": 975.8,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 115,
    "x": 10930,
    "y": 890,
    "dir": 0,
    "type": 2
}, {
    "sid": 116,
    "x": 12232.7,
    "y": 824,
    "dir": 0,
    "type": 0
}, {
    "sid": 117,
    "x": 12474.2,
    "y": 942.7,
    "dir": -0.8,
    "type": null,
    "id": 10
}, {
    "sid": 118,
    "x": 11653.3,
    "y": 1701.8,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 119,
    "x": 11732.7,
    "y": 1647.3,
    "dir": 0.37,
    "type": null,
    "id": 10
}, {
    "sid": 120,
    "x": 11574,
    "y": 1647.1,
    "dir": 2.78,
    "type": null,
    "id": 10
}, {
    "sid": 121,
    "x": 10558.7,
    "y": 709,
    "dir": 0,
    "type": 0
}, {
    "sid": 122,
    "x": 12676.5,
    "y": 762.1,
    "dir": -0.26,
    "type": null,
    "id": 10
}, {
    "sid": 123,
    "x": 11653.3,
    "y": 1592.2,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 124,
    "x": 11732.7,
    "y": 1537.7,
    "dir": 0.37,
    "type": null,
    "id": 10
}, {
    "sid": 125,
    "x": 11574,
    "y": 1537.6,
    "dir": 2.78,
    "type": null,
    "id": 10
}, {
    "sid": 126,
    "x": 12515.5,
    "y": 751.8,
    "dir": -2.76,
    "type": null,
    "id": 10
}, {
    "sid": 127,
    "x": 12599.7,
    "y": 698.9,
    "dir": -1.51,
    "type": null,
    "id": 10
}, {
    "sid": 128,
    "x": 12038.7,
    "y": 623,
    "dir": 0,
    "type": 1
}, {
    "sid": 129,
    "x": 11487.9,
    "y": 651.4,
    "dir": -2.82,
    "type": null,
    "id": 10
}, {
    "sid": 130,
    "x": 11649.3,
    "y": 651.4,
    "dir": -0.32,
    "type": null,
    "id": 10
}, {
    "sid": 131,
    "x": 11586,
    "y": 1368.1,
    "dir": 3.56,
    "type": null,
    "id": 10
}, {
    "sid": 132,
    "x": 12724.5,
    "y": 622.8,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 133,
    "x": 12862.7,
    "y": 603.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 134,
    "x": 12993.3,
    "y": 1677.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 135,
    "x": 12993.3,
    "y": 1515.7,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 136,
    "x": 11568.6,
    "y": 593.2,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 137,
    "x": 12575.8,
    "y": 562.8,
    "dir": -1.95,
    "type": null,
    "id": 10
}, {
    "sid": 138,
    "x": 11768.5,
    "y": 1399.3,
    "dir": 1.15,
    "type": null,
    "id": 10
}, {
    "sid": 139,
    "x": 11655.8,
    "y": 1287.6,
    "dir": 3.56,
    "type": null,
    "id": 10
}, {
    "sid": 140,
    "x": 12967.9,
    "y": 398,
    "dir": 0,
    "type": 0
}, {
    "sid": 141,
    "x": 11750.6,
    "y": 1304.2,
    "dir": 2.35,
    "type": null,
    "id": 10
}, {
    "sid": 142,
    "x": 11845.3,
    "y": 1321.3,
    "dir": 1.15,
    "type": null,
    "id": 10
}, {
    "sid": 143,
    "x": 11732.6,
    "y": 1209.6,
    "dir": 3.56,
    "type": null,
    "id": 10
}, {
    "sid": 144,
    "x": 12724.5,
    "y": 461.5,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 145,
    "x": 11956.5,
    "y": 1192.2,
    "dir": 0.37,
    "type": null,
    "id": 10
}, {
    "sid": 146,
    "x": 10709.6,
    "y": 398.4,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 147,
    "x": 11076.6,
    "y": 398.4,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 148,
    "x": 11312.5,
    "y": 398.4,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 149,
    "x": 11018.4,
    "y": 317.7,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 150,
    "x": 11254.3,
    "y": 317.7,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 151,
    "x": 11883,
    "y": 1140.1,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 152,
    "x": 11962.4,
    "y": 1085.6,
    "dir": 0.37,
    "type": null,
    "id": 10
}, {
    "sid": 153,
    "x": 11803.7,
    "y": 1085.5,
    "dir": 2.78,
    "type": null,
    "id": 10
}, {
    "sid": 154,
    "x": 10605.6,
    "y": 230.5,
    "dir": -1.61,
    "type": null,
    "id": 10
}, {
    "sid": 155,
    "x": 10837.7,
    "y": 237.1,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 156,
    "x": 11076.6,
    "y": 237.1,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 157,
    "x": 11245.7,
    "y": 181,
    "dir": 0,
    "type": 1
}, {
    "sid": 158,
    "x": 11883.1,
    "y": 1030.6,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 159,
    "x": 11962.5,
    "y": 976.2,
    "dir": 0.37,
    "type": null,
    "id": 10
}, {
    "sid": 160,
    "x": 11803.8,
    "y": 976,
    "dir": 2.78,
    "type": null,
    "id": 10
}, {
    "sid": 161,
    "x": 12179,
    "y": 126,
    "dir": 0,
    "type": 2
}, {
    "sid": 162,
    "x": 11867.8,
    "y": 130.2,
    "dir": 2.01,
    "type": null,
    "id": 10
}, {
    "sid": 163,
    "x": 11965.6,
    "y": 111.7,
    "dir": 0.76,
    "type": null,
    "id": 10
}, {
    "sid": 164,
    "x": 11126.7,
    "y": 116.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 165,
    "x": 10941.4,
    "y": 116.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 166,
    "x": 10755.7,
    "y": 116.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 167,
    "x": 11883.1,
    "y": 921.5,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 168,
    "x": 11962.5,
    "y": 867,
    "dir": 0.37,
    "type": null,
    "id": 10
}, {
    "sid": 169,
    "x": 11803.8,
    "y": 866.9,
    "dir": 2.78,
    "type": null,
    "id": 10
}, {
    "sid": 170,
    "x": 11184.9,
    "y": 35.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 171,
    "x": 10999.6,
    "y": 35.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 172,
    "x": 10813.9,
    "y": 35.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 173,
    "x": 10627.8,
    "y": 35.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 174,
    "x": 11978.8,
    "y": 13.1,
    "dir": -0.49,
    "type": null,
    "id": 10
}, {
    "sid": 175,
    "x": 11988.1,
    "y": 768.3,
    "dir": 0.37,
    "type": null,
    "id": 10
}, {
    "sid": 176,
    "x": 11829.4,
    "y": 768.2,
    "dir": 2.78,
    "type": null,
    "id": 10
}, {
    "sid": 177,
    "x": 11126.7,
    "y": -45.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 178,
    "x": 10941.4,
    "y": -45.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 179,
    "x": 10755.7,
    "y": -45.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 180,
    "x": 11841.1,
    "y": 664,
    "dir": 2.78,
    "type": null,
    "id": 10
}, {
    "sid": 181,
    "x": 11885.6,
    "y": 508.4,
    "dir": 3.56,
    "type": null,
    "id": 10
}, {
    "sid": 182,
    "x": 13169.9,
    "y": 863,
    "dir": 0,
    "type": 0
}, {
    "sid": 183,
    "x": 13266.6,
    "y": 714.6,
    "dir": 2.04,
    "type": null,
    "id": 10
}, {
    "sid": 184,
    "x": 13275.4,
    "y": 494.8,
    "dir": -0.48,
    "type": null,
    "id": 10
}, {
    "sid": 185,
    "x": 13163,
    "y": 610.5,
    "dir": 2.02,
    "type": null,
    "id": 10
}, {
    "sid": 186,
    "x": 13032.1,
    "y": 580.5,
    "dir": 0.74,
    "type": null,
    "id": 10
}, {
    "sid": 187,
    "x": 12026.4,
    "y": 428.4,
    "dir": 4.35,
    "type": null,
    "id": 10
}, {
    "sid": 188,
    "x": 13370,
    "y": 818,
    "dir": 2.04,
    "type": null,
    "id": 10
}, {
    "sid": 189,
    "x": 13478.1,
    "y": 921.6,
    "dir": 1.93,
    "type": null,
    "id": 10
}, {
    "sid": 190,
    "x": 13484.1,
    "y": 703.9,
    "dir": -0.46,
    "type": null,
    "id": 10
}, {
    "sid": 191,
    "x": 12108,
    "y": 507.8,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 192,
    "x": 12162.6,
    "y": 587.1,
    "dir": 1.94,
    "type": null,
    "id": 10
}, {
    "sid": 193,
    "x": 12162.6,
    "y": 428.4,
    "dir": 4.35,
    "type": null,
    "id": 10
}, {
    "sid": 194,
    "x": 13640.9,
    "y": 777,
    "dir": 0,
    "type": 0
}, {
    "sid": 195,
    "x": 13574.2,
    "y": 895.7,
    "dir": 0.68,
    "type": null,
    "id": 10
}, {
    "sid": 196,
    "x": 12299.2,
    "y": 507.8,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 197,
    "x": 12353.7,
    "y": 587.1,
    "dir": 1.94,
    "type": null,
    "id": 10
}, {
    "sid": 198,
    "x": 12353.7,
    "y": 428.4,
    "dir": 4.35,
    "type": null,
    "id": 10
}, {
    "sid": 199,
    "x": 13678.5,
    "y": 927.6,
    "dir": 2.27,
    "type": null,
    "id": 22
}, {
    "sid": 200,
    "x": 13779.1,
    "y": 1139.1,
    "dir": 2.04,
    "type": null,
    "id": 10
}, {
    "sid": 201,
    "x": 13788,
    "y": 275,
    "dir": -4.65,
    "type": null,
    "id": 6
}, {
    "sid": 202,
    "x": 13788.8,
    "y": 920.7,
    "dir": -0.46,
    "type": null,
    "id": 10
}, {
    "sid": 203,
    "x": 13893.2,
    "y": 1025,
    "dir": -0.46,
    "type": null,
    "id": 10
}, {
    "sid": 204,
    "x": 13891.6,
    "y": 265,
    "dir": -0.28,
    "type": null,
    "id": 6
}, {
    "sid": 205,
    "x": 13964.7,
    "y": 197.1,
    "dir": -6.08,
    "type": null,
    "id": 6
}, {
    "sid": 206,
    "x": 14016.8,
    "y": 110.7,
    "dir": -0.34,
    "type": null,
    "id": 6
}, {
    "sid": 207,
    "x": 14157.1,
    "y": 37.5,
    "dir": -6.28,
    "type": null,
    "id": 6
}, {
    "sid": 208,
    "x": 14228.7,
    "y": 191.6,
    "dir": -5.91,
    "type": null,
    "id": 6
}, {
    "sid": 209,
    "x": 14244.8,
    "y": 90.2,
    "dir": -0.39,
    "type": null,
    "id": 6
}, {
    "sid": 210,
    "x": 14361,
    "y": 200.4,
    "dir": -1.2,
    "type": null,
    "id": 6
}, {
    "sid": 211,
    "x": 13997.4,
    "y": 1129.3,
    "dir": -0.46,
    "type": null,
    "id": 10
}, {
    "sid": 212,
    "x": 14102.6,
    "y": 1235.1,
    "dir": -0.45,
    "type": null,
    "id": 10
}, {
    "sid": 213,
    "x": 13981.5,
    "y": 1227.4,
    "dir": 0.79,
    "type": null,
    "id": 10
}, {
    "sid": 214,
    "x": 13883.3,
    "y": 1243.3,
    "dir": 2.04,
    "type": null,
    "id": 10
}, {
    "sid": 215,
    "x": 13419.1,
    "y": 493.1,
    "dir": 3.93,
    "type": null,
    "id": 10
}, {
    "sid": 216,
    "x": 13401.1,
    "y": 587.7,
    "dir": 2.73,
    "type": null,
    "id": 10
}, {
    "sid": 217,
    "x": 13513.9,
    "y": 476,
    "dir": 5.14,
    "type": null,
    "id": 10
}, {
    "sid": 218,
    "x": 14205.7,
    "y": 1339.9,
    "dir": -0.43,
    "type": null,
    "id": 10
}, {
    "sid": 219,
    "x": 14085.3,
    "y": 1333,
    "dir": 0.8,
    "type": null,
    "id": 10
}, {
    "sid": 220,
    "x": 13986.9,
    "y": 1347.5,
    "dir": 2.05,
    "type": null,
    "id": 10
}, {
    "sid": 221,
    "x": 13492.8,
    "y": 611.8,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 222,
    "x": 13614.6,
    "y": 613.9,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 223,
    "x": 13669.2,
    "y": 534.5,
    "dir": 4.35,
    "type": null,
    "id": 10
}, {
    "sid": 224,
    "x": 13763.6,
    "y": 553.5,
    "dir": 3.93,
    "type": null,
    "id": 10
}, {
    "sid": 225,
    "x": 13745.6,
    "y": 648.1,
    "dir": 2.73,
    "type": null,
    "id": 10
}, {
    "sid": 226,
    "x": 13858.4,
    "y": 536.4,
    "dir": 5.14,
    "type": null,
    "id": 10
}, {
    "sid": 227,
    "x": 14379.9,
    "y": 1506,
    "dir": 0,
    "type": 0
}, {
    "sid": 228,
    "x": 13839.6,
    "y": 717.8,
    "dir": 2.73,
    "type": null,
    "id": 10
}, {
    "sid": 229,
    "x": 13952.3,
    "y": 606.1,
    "dir": 5.14,
    "type": null,
    "id": 10
}, {
    "sid": 230,
    "x": 13142.1,
    "y": 1515.7,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 231,
    "x": 13288.8,
    "y": 1515.7,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 232,
    "x": 13436.9,
    "y": 1515.7,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 233,
    "x": 13583.7,
    "y": 1515.7,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 234,
    "x": 13945.1,
    "y": 710.4,
    "dir": 3.93,
    "type": null,
    "id": 10
}, {
    "sid": 235,
    "x": 13927.1,
    "y": 805,
    "dir": 2.73,
    "type": null,
    "id": 10
}, {
    "sid": 236,
    "x": 14039.8,
    "y": 693.3,
    "dir": 5.14,
    "type": null,
    "id": 10
}, {
    "sid": 237,
    "x": 14146.5,
    "y": 1519.5,
    "dir": 2.64,
    "type": null,
    "id": 10
}, {
    "sid": 238,
    "x": 13752.6,
    "y": 1593.6,
    "dir": -1.26,
    "type": null,
    "id": 10
}, {
    "sid": 239,
    "x": 14031.9,
    "y": 798,
    "dir": 3.93,
    "type": null,
    "id": 10
}, {
    "sid": 240,
    "x": 14013.9,
    "y": 892.6,
    "dir": 2.73,
    "type": null,
    "id": 10
}, {
    "sid": 241,
    "x": 14126.7,
    "y": 780.9,
    "dir": 5.14,
    "type": null,
    "id": 10
}, {
    "sid": 242,
    "x": 13142.1,
    "y": 1677.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 243,
    "x": 13288.8,
    "y": 1677.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 244,
    "x": 13436.9,
    "y": 1677.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 245,
    "x": 13583.7,
    "y": 1677.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 246,
    "x": 14118.8,
    "y": 885.7,
    "dir": 3.93,
    "type": null,
    "id": 10
}, {
    "sid": 247,
    "x": 14100.8,
    "y": 980.3,
    "dir": 2.73,
    "type": null,
    "id": 10
}, {
    "sid": 248,
    "x": 14213.5,
    "y": 868.6,
    "dir": 5.14,
    "type": null,
    "id": 10
}, {
    "sid": 249,
    "x": 13868.1,
    "y": 1699.2,
    "dir": -1.12,
    "type": null,
    "id": 10
}, {
    "sid": 250,
    "x": 14445.7,
    "y": 1727.7,
    "dir": 0.32,
    "type": null,
    "id": 10
}, {
    "sid": 251,
    "x": 14284.3,
    "y": 1727.7,
    "dir": 2.82,
    "type": null,
    "id": 10
}, {
    "sid": 252,
    "x": 13770.1,
    "y": 1716.5,
    "dir": -2.37,
    "type": null,
    "id": 10
}, {
    "sid": 253,
    "x": 14216.9,
    "y": 968.3,
    "dir": 4.71,
    "type": null,
    "id": 10
}, {
    "sid": 254,
    "x": 14296.3,
    "y": 1022.8,
    "dir": 5.92,
    "type": null,
    "id": 10
}, {
    "sid": 255,
    "x": 13736.9,
    "y": 1922,
    "dir": 0,
    "type": 0
}, {
    "sid": 256,
    "x": 13755.7,
    "y": 1814.9,
    "dir": -3.62,
    "type": null,
    "id": 10
}, {
    "sid": 257,
    "x": 14155,
    "y": 1138.9,
    "dir": 3.51,
    "type": null,
    "id": 10
}, {
    "sid": 258,
    "x": 14313.7,
    "y": 1138.8,
    "dir": 5.92,
    "type": null,
    "id": 10
}, {
    "sid": 259,
    "x": 14445.7,
    "y": 1949,
    "dir": 0.32,
    "type": null,
    "id": 10
}, {
    "sid": 260,
    "x": 13908.9,
    "y": 2006.7,
    "dir": -3.18,
    "type": null,
    "id": 10
}, {
    "sid": 261,
    "x": 13223.9,
    "y": 2132.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 262,
    "x": 13522,
    "y": 2101,
    "dir": 0,
    "type": 2
}, {
    "sid": 263,
    "x": 14006.4,
    "y": 2137.4,
    "dir": 0.33,
    "type": null,
    "id": 10
}, {
    "sid": 264,
    "x": 13786.2,
    "y": 2138.1,
    "dir": -2.05,
    "type": null,
    "id": 10
}, {
    "sid": 265,
    "x": 13884.6,
    "y": 2152.6,
    "dir": -0.8,
    "type": null,
    "id": 10
}, {
    "sid": 266,
    "x": 14445.7,
    "y": 2170.1,
    "dir": 0.32,
    "type": null,
    "id": 10
}, {
    "sid": 267,
    "x": 13675.2,
    "y": 2223.4,
    "dir": -2.04,
    "type": null,
    "id": 10
}, {
    "sid": 268,
    "x": 13302.6,
    "y": 2230.9,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 269,
    "x": 13155.9,
    "y": 2230.9,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 270,
    "x": 13007.7,
    "y": 2230.9,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 271,
    "x": 13508.3,
    "y": 2311.6,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 272,
    "x": 13602.7,
    "y": 2390.4,
    "dir": 1.19,
    "type": null,
    "id": 10
}, {
    "sid": 273,
    "x": 13450.1,
    "y": 2392.3,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 274,
    "x": 13007.7,
    "y": 2392.3,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 275,
    "x": 14284.3,
    "y": 2549.9,
    "dir": 2.82,
    "type": null,
    "id": 10
}, {
    "sid": 276,
    "x": 14445.7,
    "y": 2698,
    "dir": 0.32,
    "type": null,
    "id": 10
}, {
    "sid": 277,
    "x": 14284.3,
    "y": 2698,
    "dir": 2.82,
    "type": null,
    "id": 10
}, {
    "sid": 278,
    "x": 14445.7,
    "y": 2843.7,
    "dir": 0.32,
    "type": null,
    "id": 10
}, {
    "sid": 279,
    "x": 13941.9,
    "y": 2871.2,
    "dir": -1.97,
    "type": null,
    "id": 22
}, {
    "sid": 280,
    "x": 13738.9,
    "y": 3068.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 281,
    "x": 14048,
    "y": 3137,
    "dir": 0,
    "type": 2
}, {
    "sid": 282,
    "x": 12926.4,
    "y": 3088.4,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 283,
    "x": 13144.8,
    "y": 3088.4,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 284,
    "x": 13363.7,
    "y": 3088.4,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 285,
    "x": 13582.6,
    "y": 3088.4,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 286,
    "x": 12707.6,
    "y": 3088.4,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 287,
    "x": 14306.9,
    "y": 3278.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 288,
    "x": 13890.9,
    "y": 3224.1,
    "dir": -3.11,
    "type": null,
    "id": 10
}, {
    "sid": 289,
    "x": 12816.7,
    "y": 3249.8,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 290,
    "x": 13035.6,
    "y": 3249.8,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 291,
    "x": 13254.5,
    "y": 3249.8,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 292,
    "x": 13473.4,
    "y": 3249.8,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 293,
    "x": 13622,
    "y": 3247.7,
    "dir": -3.73,
    "type": null,
    "id": 10
}, {
    "sid": 294,
    "x": 13755.9,
    "y": 3288.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 295,
    "x": 13946.8,
    "y": 3306.4,
    "dir": -4.36,
    "type": null,
    "id": 10
}, {
    "sid": 296,
    "x": 13410.1,
    "y": 2888.8,
    "dir": 6.28,
    "type": null,
    "id": 10
}, {
    "sid": 297,
    "x": 13355.7,
    "y": 2968.3,
    "dir": 1.2,
    "type": null,
    "id": 10
}, {
    "sid": 298,
    "x": 13355.5,
    "y": 2809.6,
    "dir": 5.08,
    "type": null,
    "id": 10
}, {
    "sid": 299,
    "x": 13278.4,
    "y": 2910,
    "dir": 0.78,
    "type": null,
    "id": 10
}, {
    "sid": 300,
    "x": 13183.8,
    "y": 2927.9,
    "dir": 1.99,
    "type": null,
    "id": 10
}, {
    "sid": 301,
    "x": 13197.8,
    "y": 2806.3,
    "dir": 6.28,
    "type": null,
    "id": 10
}, {
    "sid": 302,
    "x": 13143.1,
    "y": 2727.1,
    "dir": 5.08,
    "type": null,
    "id": 10
}, {
    "sid": 303,
    "x": 13076.1,
    "y": 2802.8,
    "dir": 6.28,
    "type": null,
    "id": 10
}, {
    "sid": 304,
    "x": 13021.4,
    "y": 2723.5,
    "dir": 5.08,
    "type": null,
    "id": 10
}, {
    "sid": 305,
    "x": 13021.7,
    "y": 2882.2,
    "dir": 1.2,
    "type": null,
    "id": 10
}, {
    "sid": 306,
    "x": 12952.3,
    "y": 2802.9,
    "dir": 6.28,
    "type": null,
    "id": 10
}, {
    "sid": 307,
    "x": 12897.6,
    "y": 2723.6,
    "dir": 5.08,
    "type": null,
    "id": 10
}, {
    "sid": 308,
    "x": 12897.9,
    "y": 2882.4,
    "dir": 1.2,
    "type": null,
    "id": 10
}, {
    "sid": 309,
    "x": 12828.3,
    "y": 2803,
    "dir": 6.28,
    "type": null,
    "id": 10
}, {
    "sid": 310,
    "x": 12773.7,
    "y": 2723.7,
    "dir": 5.08,
    "type": null,
    "id": 10
}, {
    "sid": 311,
    "x": 12773.9,
    "y": 2882.5,
    "dir": 1.2,
    "type": null,
    "id": 10
}, {
    "sid": 312,
    "x": 12704.4,
    "y": 2803.1,
    "dir": 6.28,
    "type": null,
    "id": 10
}, {
    "sid": 313,
    "x": 12649.8,
    "y": 2723.9,
    "dir": 5.08,
    "type": null,
    "id": 10
}, {
    "sid": 314,
    "x": 12581.1,
    "y": 2803.2,
    "dir": 6.28,
    "type": null,
    "id": 10
}, {
    "sid": 315,
    "x": 12526.4,
    "y": 2724,
    "dir": 5.08,
    "type": null,
    "id": 10
}, {
    "sid": 316,
    "x": 12526.7,
    "y": 2882.7,
    "dir": 1.2,
    "type": null,
    "id": 10
}, {
    "sid": 317,
    "x": 12457.7,
    "y": 2803.3,
    "dir": 6.28,
    "type": null,
    "id": 10
}, {
    "sid": 318,
    "x": 12403,
    "y": 2724.1,
    "dir": 5.08,
    "type": null,
    "id": 10
}, {
    "sid": 319,
    "x": 12403.3,
    "y": 2882.8,
    "dir": 1.2,
    "type": null,
    "id": 10
}, {
    "sid": 320,
    "x": 12333.7,
    "y": 2803.4,
    "dir": 6.28,
    "type": null,
    "id": 10
}, {
    "sid": 321,
    "x": 12279,
    "y": 2724.2,
    "dir": 5.08,
    "type": null,
    "id": 10
}, {
    "sid": 322,
    "x": 12279.3,
    "y": 2882.9,
    "dir": 1.2,
    "type": null,
    "id": 10
}, {
    "sid": 323,
    "x": 12210.3,
    "y": 2803.5,
    "dir": 6.28,
    "type": null,
    "id": 10
}, {
    "sid": 324,
    "x": 12155.6,
    "y": 2724.3,
    "dir": 5.08,
    "type": null,
    "id": 10
}, {
    "sid": 325,
    "x": 12155.9,
    "y": 2883,
    "dir": 1.2,
    "type": null,
    "id": 10
}, {
    "sid": 326,
    "x": 12062.2,
    "y": 2863.7,
    "dir": 0.78,
    "type": null,
    "id": 10
}, {
    "sid": 327,
    "x": 11967.6,
    "y": 2881.6,
    "dir": 1.99,
    "type": null,
    "id": 10
}, {
    "sid": 328,
    "x": 11984.1,
    "y": 2755,
    "dir": 6.28,
    "type": null,
    "id": 10
}, {
    "sid": 329,
    "x": 11929.4,
    "y": 2675.7,
    "dir": 5.08,
    "type": null,
    "id": 10
}, {
    "sid": 330,
    "x": 11838.8,
    "y": 2808.1,
    "dir": 0.78,
    "type": null,
    "id": 10
}, {
    "sid": 331,
    "x": 11744.2,
    "y": 2826,
    "dir": 1.99,
    "type": null,
    "id": 10
}, {
    "sid": 332,
    "x": 10046.6,
    "y": 1397.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 333,
    "x": 10104.8,
    "y": 1317,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 334,
    "x": 9930.9,
    "y": 2327.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 335,
    "x": 9930.9,
    "y": 2488.5,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 336,
    "x": 9783.5,
    "y": 2327.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 337,
    "x": 9783.5,
    "y": 2488.5,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 338,
    "x": 9811.3,
    "y": 1397.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 339,
    "x": 9869.5,
    "y": 1317,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 340,
    "x": 10046.6,
    "y": 1236.3,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 341,
    "x": 9811.3,
    "y": 1236.3,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 342,
    "x": 9580.6,
    "y": 2280.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 343,
    "x": 9633,
    "y": 1317,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 344,
    "x": 9616.1,
    "y": 2404.6,
    "dir": -1.87,
    "type": null,
    "id": 10
}, {
    "sid": 345,
    "x": 9686.6,
    "y": 1137.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 346,
    "x": 9947.3,
    "y": 1137.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 347,
    "x": 10206.2,
    "y": 1137.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 348,
    "x": 9597.1,
    "y": 2527.9,
    "dir": -0.77,
    "type": null,
    "id": 10
}, {
    "sid": 349,
    "x": 9574.8,
    "y": 1397.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 350,
    "x": 9574.8,
    "y": 1236.3,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 351,
    "x": 9499.2,
    "y": 2510.6,
    "dir": -2.02,
    "type": null,
    "id": 10
}, {
    "sid": 352,
    "x": 9445.2,
    "y": 1444.9,
    "dir": 0.52,
    "type": null,
    "id": 10
}, {
    "sid": 353,
    "x": 9427.3,
    "y": 1137.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 354,
    "x": 9435.5,
    "y": 1269.8,
    "dir": -1.68,
    "type": null,
    "id": 10
}, {
    "sid": 355,
    "x": 9393.2,
    "y": 1844.9,
    "dir": -0.32,
    "type": null,
    "id": 10
}, {
    "sid": 356,
    "x": 9393.2,
    "y": 2009.3,
    "dir": -0.32,
    "type": null,
    "id": 10
}, {
    "sid": 357,
    "x": 9393.2,
    "y": 2337.7,
    "dir": -0.32,
    "type": null,
    "id": 10
}, {
    "sid": 358,
    "x": 9393.2,
    "y": 2530.1,
    "dir": -0.32,
    "type": null,
    "id": 10
}, {
    "sid": 359,
    "x": 9315.6,
    "y": 1487.7,
    "dir": 1.19,
    "type": null,
    "id": 10
}, {
    "sid": 360,
    "x": 9306.6,
    "y": 1326.6,
    "dir": -1.31,
    "type": null,
    "id": 10
}, {
    "sid": 361,
    "x": 9231.9,
    "y": 2255.4,
    "dir": -2.82,
    "type": null,
    "id": 10
}, {
    "sid": 362,
    "x": 9231.9,
    "y": 2424.1,
    "dir": -2.82,
    "type": null,
    "id": 10
}, {
    "sid": 363,
    "x": 9049.6,
    "y": 2385.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 364,
    "x": 9179,
    "y": 1542.6,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 365,
    "x": 9184.8,
    "y": 1375.2,
    "dir": -1.52,
    "type": null,
    "id": 10
}, {
    "sid": 366,
    "x": 9029.6,
    "y": 1188,
    "dir": 0,
    "type": 0
}, {
    "sid": 367,
    "x": 9052.2,
    "y": 2537.3,
    "dir": -0.51,
    "type": null,
    "id": 10
}, {
    "sid": 368,
    "x": 8895.6,
    "y": 1854,
    "dir": 0,
    "type": 0
}, {
    "sid": 369,
    "x": 8986.4,
    "y": 1430.2,
    "dir": -2.36,
    "type": null,
    "id": 10
}, {
    "sid": 370,
    "x": 9005.3,
    "y": 1547.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 371,
    "x": 8960.9,
    "y": 1286.6,
    "dir": -0.32,
    "type": null,
    "id": 10
}, {
    "sid": 372,
    "x": 8947.1,
    "y": 1628.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 373,
    "x": 8869.8,
    "y": 1095.9,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 374,
    "x": 10233.7,
    "y": 1814.1,
    "dir": 6.28,
    "type": null,
    "id": 10
}, {
    "sid": 375,
    "x": 10179,
    "y": 1734.8,
    "dir": 5.08,
    "type": null,
    "id": 10
}, {
    "sid": 376,
    "x": 10179.3,
    "y": 1893.5,
    "dir": 1.2,
    "type": null,
    "id": 10
}, {
    "sid": 377,
    "x": 8826.3,
    "y": 1450.6,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 378,
    "x": 8789.1,
    "y": 1154.1,
    "dir": -2.82,
    "type": null,
    "id": 10
}, {
    "sid": 379,
    "x": 10110.3,
    "y": 1814.2,
    "dir": 6.28,
    "type": null,
    "id": 10
}, {
    "sid": 380,
    "x": 10055.6,
    "y": 1734.9,
    "dir": 5.08,
    "type": null,
    "id": 10
}, {
    "sid": 381,
    "x": 10055.9,
    "y": 1893.6,
    "dir": 1.2,
    "type": null,
    "id": 10
}, {
    "sid": 382,
    "x": 8554.2,
    "y": 12266.1,
    "dir": 1.36,
    "type": null,
    "id": 10
}, {
    "sid": 383,
    "x": 8450.9,
    "y": 12268.3,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 384,
    "x": 8353.5,
    "y": 12268.3,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 385,
    "x": 8693.1,
    "y": 1601.4,
    "dir": 1.34,
    "type": null,
    "id": 10
}, {
    "sid": 386,
    "x": 8630.7,
    "y": 2550.9,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 387,
    "x": 8255.3,
    "y": 12268.3,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 388,
    "x": 8156.3,
    "y": 12268.3,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 389,
    "x": 10148,
    "y": 1056.4,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 390,
    "x": 9369.1,
    "y": 1056.4,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 391,
    "x": 9628.4,
    "y": 1056.4,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 392,
    "x": 9889.1,
    "y": 1056.4,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 393,
    "x": 7651.4,
    "y": 12281.2,
    "dir": -4.14,
    "type": null,
    "id": 10
}, {
    "sid": 394,
    "x": 8572.5,
    "y": 2470.2,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 395,
    "x": 8424.5,
    "y": 2470.2,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 396,
    "x": 7862.1,
    "y": 12269.3,
    "dir": -2.39,
    "type": null,
    "id": 10
}, {
    "sid": 397,
    "x": 8668.3,
    "y": 12251.3,
    "dir": 1.12,
    "type": null,
    "id": 10
}, {
    "sid": 398,
    "x": 8030.1,
    "y": 12247.7,
    "dir": 1.84,
    "type": null,
    "id": 10
}, {
    "sid": 399,
    "x": 7383.7,
    "y": 12240.8,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 400,
    "x": 7931.7,
    "y": 12177.5,
    "dir": 2.14,
    "type": null,
    "id": 10
}, {
    "sid": 401,
    "x": 7552.9,
    "y": 12183.2,
    "dir": -3.43,
    "type": null,
    "id": 10
}, {
    "sid": 402,
    "x": 7450.2,
    "y": 12156.8,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 403,
    "x": 7311.7,
    "y": 12156.8,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 404,
    "x": 7208.9,
    "y": 12156.8,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 405,
    "x": 8982.4,
    "y": 12183,
    "dir": 1.14,
    "type": null,
    "id": 10
}, {
    "sid": 406,
    "x": 8441.4,
    "y": 1437.9,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 407,
    "x": 8499.6,
    "y": 1518.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 408,
    "x": 8868.9,
    "y": 12197.6,
    "dir": 1.38,
    "type": null,
    "id": 10
}, {
    "sid": 409,
    "x": 8768,
    "y": 12199.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 410,
    "x": 6830.1,
    "y": 12445.8,
    "dir": 0,
    "type": 2
}, {
    "sid": 411,
    "x": 6989.5,
    "y": 12386.8,
    "dir": 0,
    "type": 2
}, {
    "sid": 412,
    "x": 8277.1,
    "y": 2470.2,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 413,
    "x": 7111,
    "y": 12152.9,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 414,
    "x": 7009.9,
    "y": 12152.9,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 415,
    "x": 6906.4,
    "y": 12152.9,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 416,
    "x": 10206.2,
    "y": 975.8,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 417,
    "x": 8507.6,
    "y": 11991.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 418,
    "x": 8240.2,
    "y": 1518.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 419,
    "x": 8544,
    "y": 12098.4,
    "dir": -1.48,
    "type": null,
    "id": 10
}, {
    "sid": 420,
    "x": 8450.9,
    "y": 12100.3,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 421,
    "x": 9427.3,
    "y": 975.8,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 422,
    "x": 9686.6,
    "y": 975.8,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 423,
    "x": 9947.3,
    "y": 975.8,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 424,
    "x": 8789.1,
    "y": 962.6,
    "dir": -2.82,
    "type": null,
    "id": 10
}, {
    "sid": 425,
    "x": 8950.5,
    "y": 962.6,
    "dir": -0.32,
    "type": null,
    "id": 10
}, {
    "sid": 426,
    "x": 8353.5,
    "y": 12100.3,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 427,
    "x": 8182,
    "y": 1437.9,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 428,
    "x": 8182,
    "y": 1599.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 429,
    "x": 8255.3,
    "y": 12100.3,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 430,
    "x": 8156.3,
    "y": 12100.3,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 431,
    "x": 7776.3,
    "y": 12135.5,
    "dir": 4.63,
    "type": null,
    "id": 10
}, {
    "sid": 432,
    "x": 8021.4,
    "y": 1801,
    "dir": 0,
    "type": 1
}, {
    "sid": 433,
    "x": 8637.4,
    "y": 12086,
    "dir": -2.03,
    "type": null,
    "id": 10
}, {
    "sid": 434,
    "x": 446.1,
    "y": 10425.2,
    "dir": 0.05,
    "type": null,
    "id": 12
}, {
    "sid": 435,
    "x": 8129.7,
    "y": 2470.2,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 436,
    "x": 7982.2,
    "y": 2470.2,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 437,
    "x": 7979.5,
    "y": 1518.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 438,
    "x": 7841.4,
    "y": 1183,
    "dir": 0,
    "type": 0
}, {
    "sid": 439,
    "x": 7921.3,
    "y": 1437.9,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 440,
    "x": 7921.3,
    "y": 1599.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 441,
    "x": 8482.7,
    "y": 2550.9,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 442,
    "x": 8187.9,
    "y": 2550.9,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 443,
    "x": 270.9,
    "y": 10443.9,
    "dir": -2.92,
    "type": null,
    "id": 12
}, {
    "sid": 444,
    "x": 7752.4,
    "y": 2343.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 445,
    "x": 7881.7,
    "y": 2550.9,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 446,
    "x": 9611.6,
    "y": 2626.3,
    "dir": 0.48,
    "type": null,
    "id": 10
}, {
    "sid": 447,
    "x": 8572.5,
    "y": 2631.6,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 448,
    "x": 8424.5,
    "y": 2631.6,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 449,
    "x": 8277.1,
    "y": 2631.6,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 450,
    "x": 8129.7,
    "y": 2631.6,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 451,
    "x": 4540.3,
    "y": 4913.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 452,
    "x": 4849.7,
    "y": 4776.5,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 453,
    "x": 9040.6,
    "y": 2636,
    "dir": 0.74,
    "type": null,
    "id": 10
}, {
    "sid": 454,
    "x": 8943.2,
    "y": 2656.2,
    "dir": 1.99,
    "type": null,
    "id": 10
}, {
    "sid": 455,
    "x": 4602.7,
    "y": 4793.7,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 456,
    "x": 9160.5,
    "y": 2713.7,
    "dir": 0.44,
    "type": null,
    "id": 10
}, {
    "sid": 457,
    "x": 7724.9,
    "y": 1519,
    "dir": -0.64,
    "type": null,
    "id": 10
}, {
    "sid": 458,
    "x": 7726.8,
    "y": 1618.4,
    "dir": 0.61,
    "type": null,
    "id": 10
}, {
    "sid": 459,
    "x": 9393.2,
    "y": 2748.7,
    "dir": -0.32,
    "type": null,
    "id": 10
}, {
    "sid": 460,
    "x": 707.5,
    "y": 10466.7,
    "dir": -5.95,
    "type": null,
    "id": 12
}, {
    "sid": 461,
    "x": 609.9,
    "y": 10524,
    "dir": 1.75,
    "type": null,
    "id": 12
}, {
    "sid": 462,
    "x": 8043.3,
    "y": 12052,
    "dir": -0.69,
    "type": null,
    "id": 10
}, {
    "sid": 463,
    "x": 7653.8,
    "y": 2631.6,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 464,
    "x": 440,
    "y": 10534.9,
    "dir": 6.13,
    "type": null,
    "id": 12
}, {
    "sid": 465,
    "x": 268.1,
    "y": 10578.6,
    "dir": -2.99,
    "type": null,
    "id": 12
}, {
    "sid": 466,
    "x": 10000,
    "y": 2798,
    "dir": 3.61,
    "type": null,
    "id": 10
}, {
    "sid": 467,
    "x": 688.4,
    "y": 10605.4,
    "dir": -6.13,
    "type": null,
    "id": 12
}, {
    "sid": 468,
    "x": 516.5,
    "y": 10605.4,
    "dir": 2.99,
    "type": null,
    "id": 12
}, {
    "sid": 469,
    "x": 9231.9,
    "y": 2857.9,
    "dir": -2.82,
    "type": null,
    "id": 10
}, {
    "sid": 470,
    "x": 7561.2,
    "y": 1656.7,
    "dir": 1.2,
    "type": null,
    "id": 10
}, {
    "sid": 471,
    "x": 7539.5,
    "y": 2550.9,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 472,
    "x": 440,
    "y": 10664.4,
    "dir": 6.13,
    "type": null,
    "id": 12
}, {
    "sid": 473,
    "x": 602.5,
    "y": 10679,
    "dir": 1.57,
    "type": null,
    "id": 12
}, {
    "sid": 474,
    "x": 12627.9,
    "y": 4556.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 475,
    "x": 7481.3,
    "y": 2470.2,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 476,
    "x": 9845.5,
    "y": 2952.4,
    "dir": 3.61,
    "type": null,
    "id": 10
}, {
    "sid": 477,
    "x": 9393.2,
    "y": 2967.6,
    "dir": -0.32,
    "type": null,
    "id": 10
}, {
    "sid": 478,
    "x": 7434.9,
    "y": 1513.3,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 479,
    "x": 7434.9,
    "y": 1674.6,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 480,
    "x": 4933.7,
    "y": 4850.7,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 481,
    "x": 4765.7,
    "y": 4850.7,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 482,
    "x": 4849.7,
    "y": 4886.2,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 483,
    "x": 4685.7,
    "y": 4911.4,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 484,
    "x": 7379.4,
    "y": 4692.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 485,
    "x": 8452.1,
    "y": 3805.2,
    "dir": 3.93,
    "type": null,
    "id": 12
}, {
    "sid": 486,
    "x": 7143,
    "y": 2166,
    "dir": 0,
    "type": 3
}, {
    "sid": 487,
    "x": 268.1,
    "y": 10708.3,
    "dir": -2.99,
    "type": null,
    "id": 12
}, {
    "sid": 488,
    "x": 7613.4,
    "y": 4766.5,
    "dir": 5.07,
    "type": null,
    "id": 15
}, {
    "sid": 489,
    "x": 6738.4,
    "y": 2002,
    "dir": 0,
    "type": 0
}, {
    "sid": 490,
    "x": 6968.4,
    "y": 1709,
    "dir": 0,
    "type": 0
}, {
    "sid": 491,
    "x": 689,
    "y": 10721.5,
    "dir": -6.18,
    "type": null,
    "id": 12
}, {
    "sid": 492,
    "x": 517.3,
    "y": 10730.3,
    "dir": 2.94,
    "type": null,
    "id": 12
}, {
    "sid": 493,
    "x": 9231.9,
    "y": 3076.4,
    "dir": -2.82,
    "type": null,
    "id": 10
}, {
    "sid": 494,
    "x": 9231.9,
    "y": 3295.8,
    "dir": -2.82,
    "type": null,
    "id": 10
}, {
    "sid": 495,
    "x": 6757.9,
    "y": 1515.6,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 496,
    "x": 6699.8,
    "y": 1596.3,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 497,
    "x": 9461.6,
    "y": 4115.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 498,
    "x": 9309.7,
    "y": 3443.7,
    "dir": -2.65,
    "type": null,
    "id": 10
}, {
    "sid": 499,
    "x": 9393.2,
    "y": 3185.6,
    "dir": -0.32,
    "type": null,
    "id": 10
}, {
    "sid": 500,
    "x": 9468.8,
    "y": 3534.7,
    "dir": 1.47,
    "type": null,
    "id": 10
}, {
    "sid": 501,
    "x": 9561.7,
    "y": 3236.2,
    "dir": 3.61,
    "type": null,
    "id": 10
}, {
    "sid": 502,
    "x": 6699.8,
    "y": 1434.9,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 503,
    "x": 9574.3,
    "y": 3452.4,
    "dir": 1.09,
    "type": null,
    "id": 10
}, {
    "sid": 504,
    "x": 9690.4,
    "y": 3107.5,
    "dir": 3.61,
    "type": null,
    "id": 10
}, {
    "sid": 505,
    "x": 8360.3,
    "y": 3716.6,
    "dir": 3.93,
    "type": null,
    "id": 12
}, {
    "sid": 506,
    "x": 8341.9,
    "y": 3813.5,
    "dir": 2.73,
    "type": null,
    "id": 12
}, {
    "sid": 507,
    "x": 8457.3,
    "y": 3699.1,
    "dir": 5.14,
    "type": null,
    "id": 12
}, {
    "sid": 508,
    "x": 9727.2,
    "y": 3298.8,
    "dir": 1.11,
    "type": null,
    "id": 10
}, {
    "sid": 509,
    "x": 8999.6,
    "y": 4606.2,
    "dir": -2.95,
    "type": null,
    "id": 10
}, {
    "sid": 510,
    "x": 9086.2,
    "y": 4537.4,
    "dir": 4.75,
    "type": null,
    "id": 10
}, {
    "sid": 511,
    "x": 9211.8,
    "y": 4542.7,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 512,
    "x": 9320.8,
    "y": 4542.7,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 513,
    "x": 9431,
    "y": 4542.7,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 514,
    "x": 9540.2,
    "y": 4542.7,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 515,
    "x": 9648.9,
    "y": 4542.7,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 516,
    "x": 9758.7,
    "y": 4542.7,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 517,
    "x": 8433.7,
    "y": 3902,
    "dir": 2.73,
    "type": null,
    "id": 12
}, {
    "sid": 518,
    "x": 8549.1,
    "y": 3787.7,
    "dir": 5.14,
    "type": null,
    "id": 12
}, {
    "sid": 519,
    "x": 9907.6,
    "y": 4722.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 520,
    "x": 9103.6,
    "y": 4626.7,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 521,
    "x": 9248.9,
    "y": 4626.7,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 522,
    "x": 9359.1,
    "y": 4626.7,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 523,
    "x": 9468.3,
    "y": 4626.7,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 524,
    "x": 9577,
    "y": 4626.7,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 525,
    "x": 9686.7,
    "y": 4626.7,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 526,
    "x": 9790.3,
    "y": 4643.6,
    "dir": 2.66,
    "type": null,
    "id": 10
}, {
    "sid": 527,
    "x": 9054.2,
    "y": 4702.4,
    "dir": -4.37,
    "type": null,
    "id": 10
}, {
    "sid": 528,
    "x": 9866.7,
    "y": 4518,
    "dir": 4.36,
    "type": null,
    "id": 10
}, {
    "sid": 529,
    "x": 8869.8,
    "y": 904.4,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 530,
    "x": 8640.1,
    "y": 3878.6,
    "dir": 5.14,
    "type": null,
    "id": 12
}, {
    "sid": 531,
    "x": 8524.7,
    "y": 3993,
    "dir": 2.73,
    "type": null,
    "id": 12
}, {
    "sid": 532,
    "x": 9175.6,
    "y": 4710.7,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 533,
    "x": 9285,
    "y": 4710.7,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 534,
    "x": 9394.1,
    "y": 4710.7,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 535,
    "x": 9503.3,
    "y": 4710.7,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 536,
    "x": 9613.1,
    "y": 4710.7,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 537,
    "x": 9721.8,
    "y": 4710.7,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 538,
    "x": 8945.4,
    "y": 786.8,
    "dir": -0.47,
    "type": null,
    "id": 10
}, {
    "sid": 539,
    "x": 9910.4,
    "y": 4597.8,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 540,
    "x": 9982.4,
    "y": 4513.8,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 541,
    "x": 9085.3,
    "y": 742.1,
    "dir": -2.33,
    "type": null,
    "id": 10
}, {
    "sid": 542,
    "x": 8633.8,
    "y": 3987.5,
    "dir": 3.93,
    "type": null,
    "id": 12
}, {
    "sid": 543,
    "x": 8615.4,
    "y": 4084.3,
    "dir": 2.73,
    "type": null,
    "id": 12
}, {
    "sid": 544,
    "x": 8730.8,
    "y": 3970,
    "dir": 5.14,
    "type": null,
    "id": 12
}, {
    "sid": 545,
    "x": 440,
    "y": 10794.2,
    "dir": 6.13,
    "type": null,
    "id": 12
}, {
    "sid": 546,
    "x": 7468.6,
    "y": 722.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 547,
    "x": 7728,
    "y": 722.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 548,
    "x": 7987.9,
    "y": 722.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 549,
    "x": 8248.1,
    "y": 722.1,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 550,
    "x": 8545.6,
    "y": 687.3,
    "dir": -4.23,
    "type": null,
    "id": 10
}, {
    "sid": 551,
    "x": 8681,
    "y": 700.6,
    "dir": -3.98,
    "type": null,
    "id": 10
}, {
    "sid": 552,
    "x": 8794.9,
    "y": 689.7,
    "dir": -2.36,
    "type": null,
    "id": 10
}, {
    "sid": 553,
    "x": 541,
    "y": 10858.7,
    "dir": 0,
    "type": 1
}, {
    "sid": 554,
    "x": 8433.3,
    "y": 635.2,
    "dir": -3.61,
    "type": null,
    "id": 10
}, {
    "sid": 555,
    "x": 7410.4,
    "y": 641.4,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 556,
    "x": 7669.8,
    "y": 641.4,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 557,
    "x": 7929.7,
    "y": 641.4,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 558,
    "x": 8189.9,
    "y": 641.4,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 559,
    "x": 720.5,
    "y": 10833,
    "dir": -0.24,
    "type": null,
    "id": 12
}, {
    "sid": 560,
    "x": 268.1,
    "y": 10838,
    "dir": -2.99,
    "type": null,
    "id": 12
}, {
    "sid": 561,
    "x": 10018.2,
    "y": 4681.8,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 562,
    "x": 2056.9,
    "y": 10447.3,
    "dir": -2.63,
    "type": null,
    "id": 10
}, {
    "sid": 563,
    "x": 2055,
    "y": 10578.8,
    "dir": -3.36,
    "type": null,
    "id": 10
}, {
    "sid": 564,
    "x": 6498.5,
    "y": 1515.6,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 565,
    "x": 7468.6,
    "y": 560.7,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 566,
    "x": 7728,
    "y": 560.7,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 567,
    "x": 7987.9,
    "y": 560.7,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 568,
    "x": 2234.1,
    "y": 9391.6,
    "dir": 0,
    "type": 1
}, {
    "sid": 569,
    "x": 8639.7,
    "y": 531.2,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 570,
    "x": 2156.8,
    "y": 10327,
    "dir": -2.13,
    "type": null,
    "id": 10
}, {
    "sid": 571,
    "x": 2154.6,
    "y": 10585.6,
    "dir": -2.3,
    "type": null,
    "id": 10
}, {
    "sid": 572,
    "x": 8287.7,
    "y": 513.6,
    "dir": -4.2,
    "type": null,
    "id": 10
}, {
    "sid": 573,
    "x": 2225.6,
    "y": 9277.6,
    "dir": -0.73,
    "type": null,
    "id": 11
}, {
    "sid": 574,
    "x": 6440.3,
    "y": 1434.9,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 575,
    "x": 6440.3,
    "y": 1596.3,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 576,
    "x": 8487.2,
    "y": 462.2,
    "dir": -1.13,
    "type": null,
    "id": 10
}, {
    "sid": 577,
    "x": 6923.4,
    "y": 416,
    "dir": 0,
    "type": 1
}, {
    "sid": 578,
    "x": 8393.9,
    "y": 435.4,
    "dir": 2.2,
    "type": null,
    "id": 10
}, {
    "sid": 579,
    "x": 8669.3,
    "y": 435.8,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 580,
    "x": 2240.9,
    "y": 10268.3,
    "dir": -1.83,
    "type": null,
    "id": 10
}, {
    "sid": 581,
    "x": 2240.3,
    "y": 10478,
    "dir": 0.65,
    "type": null,
    "id": 10
}, {
    "sid": 582,
    "x": 7872.7,
    "y": 12045.8,
    "dir": 2.84,
    "type": null,
    "id": 10
}, {
    "sid": 583,
    "x": 2304.6,
    "y": 9221.1,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 584,
    "x": 10054.5,
    "y": 4597.8,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 585,
    "x": 10090.1,
    "y": 4513.8,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 586,
    "x": 2304.6,
    "y": 9331.6,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 587,
    "x": 2309.8,
    "y": 10419,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 588,
    "x": 8205.4,
    "y": 5156.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 589,
    "x": 8193.6,
    "y": 364.5,
    "dir": -2.36,
    "type": null,
    "id": 10
}, {
    "sid": 590,
    "x": 8318.1,
    "y": 355.2,
    "dir": -1.7,
    "type": null,
    "id": 10
}, {
    "sid": 591,
    "x": 6223.4,
    "y": 1262,
    "dir": 0,
    "type": 0
}, {
    "sid": 592,
    "x": 2321.2,
    "y": 9436.2,
    "dir": -3.42,
    "type": null,
    "id": 10
}, {
    "sid": 593,
    "x": 7539.2,
    "y": 12047.7,
    "dir": -2.73,
    "type": null,
    "id": 10
}, {
    "sid": 594,
    "x": 6239.4,
    "y": 1866,
    "dir": 0,
    "type": 0
}, {
    "sid": 595,
    "x": 2374.8,
    "y": 9513,
    "dir": -3.71,
    "type": null,
    "id": 10
}, {
    "sid": 596,
    "x": 2347.8,
    "y": 10250.7,
    "dir": -1.44,
    "type": null,
    "id": 10
}, {
    "sid": 597,
    "x": 2381.7,
    "y": 10335,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 598,
    "x": 2388.6,
    "y": 9186,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 599,
    "x": 2388.6,
    "y": 9296.5,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 600,
    "x": 2413.6,
    "y": 9431.3,
    "dir": -2.32,
    "type": null,
    "id": 10
}, {
    "sid": 601,
    "x": 2441.9,
    "y": 10242.1,
    "dir": -2.15,
    "type": null,
    "id": 10
}, {
    "sid": 602,
    "x": 2441,
    "y": 10412.2,
    "dir": 1.26,
    "type": null,
    "id": 10
}, {
    "sid": 603,
    "x": 2472.6,
    "y": 9221.1,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 604,
    "x": 7638.9,
    "y": 11999.8,
    "dir": -1.31,
    "type": null,
    "id": 10
}, {
    "sid": 605,
    "x": 8953.8,
    "y": 12017.1,
    "dir": -2.03,
    "type": null,
    "id": 10
}, {
    "sid": 606,
    "x": 8535.1,
    "y": 276.6,
    "dir": 4.32,
    "type": null,
    "id": 10
}, {
    "sid": 607,
    "x": 8669.3,
    "y": 274.5,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 608,
    "x": 2472.6,
    "y": 9331.6,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 609,
    "x": 8862.1,
    "y": 12029.8,
    "dir": -1.46,
    "type": null,
    "id": 10
}, {
    "sid": 610,
    "x": 8768,
    "y": 12031.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 611,
    "x": 8032.9,
    "y": 11935.2,
    "dir": -6.15,
    "type": null,
    "id": 10
}, {
    "sid": 612,
    "x": 2529.9,
    "y": 9671.9,
    "dir": -3.75,
    "type": null,
    "id": 10
}, {
    "sid": 613,
    "x": 2565.1,
    "y": 9588.7,
    "dir": -2.36,
    "type": null,
    "id": 10
}, {
    "sid": 614,
    "x": 2652,
    "y": 9834,
    "dir": 0,
    "type": 3
}, {
    "sid": 615,
    "x": 10101,
    "y": 5104.7,
    "dir": -2.26,
    "type": null,
    "id": 10
}, {
    "sid": 616,
    "x": 10301.7,
    "y": 4593.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 617,
    "x": 6099.3,
    "y": 716,
    "dir": 0,
    "type": 0
}, {
    "sid": 618,
    "x": 10126.5,
    "y": 4681.8,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 619,
    "x": 10177.8,
    "y": 4588.8,
    "dir": -1.9,
    "type": null,
    "id": 10
}, {
    "sid": 620,
    "x": 8517.9,
    "y": 164,
    "dir": 0.6,
    "type": null,
    "id": 6
}, {
    "sid": 621,
    "x": 10128.7,
    "y": 4781.1,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 622,
    "x": 6562.6,
    "y": 12652.8,
    "dir": 0,
    "type": 2
}, {
    "sid": 623,
    "x": 7534.4,
    "y": 11946.7,
    "dir": -3.63,
    "type": null,
    "id": 10
}, {
    "sid": 624,
    "x": 8288.6,
    "y": 11718.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 625,
    "x": 8302.9,
    "y": 140,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 626,
    "x": 7034.4,
    "y": 44,
    "dir": 0,
    "type": 0
}, {
    "sid": 627,
    "x": 6699.4,
    "y": 31,
    "dir": 0,
    "type": 0
}, {
    "sid": 628,
    "x": 8032.6,
    "y": 11839.8,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 629,
    "x": 6600.4,
    "y": 12330.5,
    "dir": -1.58,
    "type": null,
    "id": 10
}, {
    "sid": 630,
    "x": 7896.4,
    "y": 115.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 631,
    "x": 7637.2,
    "y": 115.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 632,
    "x": 7377.2,
    "y": 115.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 633,
    "x": 8434.8,
    "y": 75.3,
    "dir": 0.53,
    "type": null,
    "id": 15
}, {
    "sid": 634,
    "x": 8200.4,
    "y": 7,
    "dir": 0,
    "type": 1
}, {
    "sid": 635,
    "x": 8619.4,
    "y": 58.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 636,
    "x": 7954.6,
    "y": 35,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 637,
    "x": 7695.4,
    "y": 35,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 638,
    "x": 7435.4,
    "y": 35,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 639,
    "x": 7599.4,
    "y": 11866.3,
    "dir": -1.83,
    "type": null,
    "id": 10
}, {
    "sid": 640,
    "x": 7936.4,
    "y": 11774.3,
    "dir": 1.39,
    "type": null,
    "id": 10
}, {
    "sid": 641,
    "x": 8561.2,
    "y": -22.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 642,
    "x": 8302.9,
    "y": -21.3,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 643,
    "x": 7896.4,
    "y": -45.7,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 644,
    "x": 7637.2,
    "y": -45.7,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 645,
    "x": 7377.2,
    "y": -45.7,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 646,
    "x": 8815.5,
    "y": -22.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 647,
    "x": 8873.7,
    "y": 58.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 648,
    "x": 8815.5,
    "y": 139.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 649,
    "x": 9000.9,
    "y": 355.1,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 650,
    "x": 9059.1,
    "y": 435.8,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 651,
    "x": 9059.1,
    "y": 274.5,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 652,
    "x": 9083.1,
    "y": -45.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 653,
    "x": 9083.1,
    "y": 116.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 654,
    "x": 9141.3,
    "y": 35.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 655,
    "x": 9183.9,
    "y": 728.7,
    "dir": -1.08,
    "type": null,
    "id": 10
}, {
    "sid": 656,
    "x": 9227.7,
    "y": 818,
    "dir": 0.17,
    "type": null,
    "id": 10
}, {
    "sid": 657,
    "x": 9269.2,
    "y": -45.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 658,
    "x": 9269.2,
    "y": 116.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 659,
    "x": 9260.4,
    "y": 355.1,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 660,
    "x": 9327.4,
    "y": 35.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 661,
    "x": 9318.6,
    "y": 435.8,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 662,
    "x": 9318.6,
    "y": 274.5,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 663,
    "x": 9361.4,
    "y": 638,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 664,
    "x": 9361.4,
    "y": 799.3,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 665,
    "x": 9419.6,
    "y": 718.7,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 666,
    "x": 9454.9,
    "y": -45.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 667,
    "x": 9454.9,
    "y": 116.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 668,
    "x": 9513,
    "y": 35.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 669,
    "x": 9519.8,
    "y": 355.1,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 670,
    "x": 9578,
    "y": 435.8,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 671,
    "x": 9578,
    "y": 274.5,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 672,
    "x": 9621.5,
    "y": 638,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 673,
    "x": 9640,
    "y": -45.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 674,
    "x": 9640,
    "y": 116.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 675,
    "x": 9698.2,
    "y": 35.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 676,
    "x": 9751.2,
    "y": 799.3,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 677,
    "x": 9779.9,
    "y": 355.1,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 678,
    "x": 9826.5,
    "y": -45.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 679,
    "x": 9826.5,
    "y": 116.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 680,
    "x": 9838.1,
    "y": 435.8,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 681,
    "x": 9838.1,
    "y": 274.5,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 682,
    "x": 9884.7,
    "y": 35.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 683,
    "x": 9881.6,
    "y": 638,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 684,
    "x": 9950.6,
    "y": 406,
    "dir": 0,
    "type": 1
}, {
    "sid": 685,
    "x": 10012.6,
    "y": -45.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 686,
    "x": 10012.6,
    "y": 116.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 687,
    "x": 10040.8,
    "y": 321.3,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 688,
    "x": 10010.5,
    "y": 799.3,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 689,
    "x": 10070.8,
    "y": 35.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 690,
    "x": 10068.7,
    "y": 718.7,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 691,
    "x": 10099,
    "y": 240.7,
    "dir": 4.39,
    "type": null,
    "id": 10
}, {
    "sid": 692,
    "x": 10274.6,
    "y": 570,
    "dir": 0,
    "type": 1
}, {
    "sid": 693,
    "x": 10287.7,
    "y": 350,
    "dir": 0,
    "type": 1
}, {
    "sid": 694,
    "x": 10384.4,
    "y": -45.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 695,
    "x": 10442.6,
    "y": 35.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 696,
    "x": 10384.4,
    "y": 116.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 697,
    "x": 10198.3,
    "y": -45.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 698,
    "x": 10256.5,
    "y": 35.5,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 699,
    "x": 10198.3,
    "y": 116.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 700,
    "x": 10174.9,
    "y": 397.9,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 701,
    "x": 10290.7,
    "y": 258.8,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 702,
    "x": 10468.7,
    "y": 355.8,
    "dir": 1.89,
    "type": null,
    "id": 10
}, {
    "sid": 703,
    "x": 10569.6,
    "y": -45.1,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 704,
    "x": 10569.6,
    "y": 116.2,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 705,
    "x": 8600,
    "y": 2202.2,
    "dir": 6.28,
    "type": null,
    "id": 12
}, {
    "sid": 706,
    "x": 8544,
    "y": 2121.1,
    "dir": 5.08,
    "type": null,
    "id": 12
}, {
    "sid": 707,
    "x": 8544.3,
    "y": 2283.5,
    "dir": 1.2,
    "type": null,
    "id": 12
}, {
    "sid": 708,
    "x": 8428.3,
    "y": 2143.4,
    "dir": 5.08,
    "type": null,
    "id": 12
}, {
    "sid": 709,
    "x": 8428.6,
    "y": 2305.9,
    "dir": 1.2,
    "type": null,
    "id": 12
}, {
    "sid": 710,
    "x": 8360.2,
    "y": 2226,
    "dir": 6.28,
    "type": null,
    "id": 12
}, {
    "sid": 711,
    "x": 8304.3,
    "y": 2144.9,
    "dir": 5.08,
    "type": null,
    "id": 12
}, {
    "sid": 712,
    "x": 8304.5,
    "y": 2307.3,
    "dir": 1.2,
    "type": null,
    "id": 12
}, {
    "sid": 713,
    "x": 8234.2,
    "y": 2226.1,
    "dir": 6.28,
    "type": null,
    "id": 12
}, {
    "sid": 714,
    "x": 8178.2,
    "y": 2145,
    "dir": 5.08,
    "type": null,
    "id": 12
}, {
    "sid": 715,
    "x": 8178.5,
    "y": 2307.4,
    "dir": 1.2,
    "type": null,
    "id": 12
}, {
    "sid": 716,
    "x": 8109.3,
    "y": 2226.2,
    "dir": 6.28,
    "type": null,
    "id": 12
}, {
    "sid": 717,
    "x": 8053.3,
    "y": 2145.1,
    "dir": 5.08,
    "type": null,
    "id": 12
}, {
    "sid": 718,
    "x": 8053.6,
    "y": 2307.5,
    "dir": 1.2,
    "type": null,
    "id": 12
}, {
    "sid": 719,
    "x": 7983.8,
    "y": 2226.3,
    "dir": 6.28,
    "type": null,
    "id": 12
}, {
    "sid": 720,
    "x": 7927.8,
    "y": 2145.2,
    "dir": 5.08,
    "type": null,
    "id": 12
}, {
    "sid": 721,
    "x": 7928.1,
    "y": 2307.6,
    "dir": 1.2,
    "type": null,
    "id": 12
}, {
    "sid": 722,
    "x": 7814.9,
    "y": 2125.5,
    "dir": 5.08,
    "type": null,
    "id": 12
}, {
    "sid": 723,
    "x": 6368.4,
    "y": 2847.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 724,
    "x": 10212.7,
    "y": 4709.1,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 725,
    "x": 10128.7,
    "y": 4889.4,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 726,
    "x": 10212.7,
    "y": 4817.4,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 727,
    "x": 10128.7,
    "y": 4998.6,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 728,
    "x": 10212.7,
    "y": 4926.6,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 729,
    "x": 10296.7,
    "y": 4998.6,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 730,
    "x": 7538.7,
    "y": 2260.4,
    "dir": 6.28,
    "type": null,
    "id": 12
}, {
    "sid": 731,
    "x": 7482.8,
    "y": 2179.3,
    "dir": 5.08,
    "type": null,
    "id": 12
}, {
    "sid": 732,
    "x": 7483,
    "y": 2341.7,
    "dir": 1.2,
    "type": null,
    "id": 12
}, {
    "sid": 733,
    "x": 10662.7,
    "y": 4726.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 734,
    "x": 7415.4,
    "y": 3077.1,
    "dir": 0,
    "type": 1
}, {
    "sid": 735,
    "x": 7404.7,
    "y": 2238.4,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 736,
    "x": 7307.9,
    "y": 2220.1,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 737,
    "x": 5998.3,
    "y": 2923.1,
    "dir": 0,
    "type": 1
}, {
    "sid": 738,
    "x": 10280.6,
    "y": 5138.8,
    "dir": 0.28,
    "type": null,
    "id": 10
}, {
    "sid": 739,
    "x": 10188.5,
    "y": 5133.7,
    "dir": -0.83,
    "type": null,
    "id": 10
}, {
    "sid": 740,
    "x": 11175.7,
    "y": 5139.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 741,
    "x": 11151.7,
    "y": 4839.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 742,
    "x": 11644.7,
    "y": 3886.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 743,
    "x": 10211.7,
    "y": 3961.3,
    "dir": 595.4339999999918,
    "type": null,
    "id": 9
}, {
    "sid": 744,
    "x": 7314.2,
    "y": 2321.7,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 745,
    "x": 7217.3,
    "y": 2303.4,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 746,
    "x": 7331.8,
    "y": 2418.7,
    "dir": 0.42,
    "type": null,
    "id": 12
}, {
    "sid": 747,
    "x": 10556,
    "y": 4091.7,
    "dir": 595.0139999999915,
    "type": null,
    "id": 9
}, {
    "sid": 748,
    "x": 11369.9,
    "y": 4867.9,
    "dir": 0.22,
    "type": null,
    "id": 10
}, {
    "sid": 749,
    "x": 11853.7,
    "y": 4574.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 750,
    "x": 11580.7,
    "y": 5171.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 751,
    "x": 12109.7,
    "y": 4679.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 752,
    "x": 12249.7,
    "y": 5288.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 753,
    "x": 10029.9,
    "y": 5179.3,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 754,
    "x": 7212.7,
    "y": 2421.8,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 755,
    "x": 7115.9,
    "y": 2403.4,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 756,
    "x": 7230.3,
    "y": 2518.7,
    "dir": 0.42,
    "type": null,
    "id": 12
}, {
    "sid": 757,
    "x": 6975.4,
    "y": 3345.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 758,
    "x": 12485.9,
    "y": 4214.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 759,
    "x": 5666.3,
    "y": 2548.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 760,
    "x": 8543.1,
    "y": 3896.1,
    "dir": 3.93,
    "type": null,
    "id": 12
}, {
    "sid": 761,
    "x": 5651.3,
    "y": 2131.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 762,
    "x": 5624.3,
    "y": 2933.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 763,
    "x": 7135.2,
    "y": 2498.6,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 764,
    "x": 7038.4,
    "y": 2480.3,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 765,
    "x": 7152.8,
    "y": 2595.6,
    "dir": 0.42,
    "type": null,
    "id": 12
}, {
    "sid": 766,
    "x": 10226.5,
    "y": 5216.3,
    "dir": 0.57,
    "type": null,
    "id": 10
}, {
    "sid": 767,
    "x": 10114.2,
    "y": 5214,
    "dir": -0.79,
    "type": null,
    "id": 10
}, {
    "sid": 768,
    "x": 10148.7,
    "y": 5298.1,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 769,
    "x": 7056.1,
    "y": 2577.1,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 770,
    "x": 6959.3,
    "y": 2558.8,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 771,
    "x": 7073.7,
    "y": 2674.1,
    "dir": 0.42,
    "type": null,
    "id": 12
}, {
    "sid": 772,
    "x": 12715.9,
    "y": 5151.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 773,
    "x": 7322,
    "y": 3494,
    "dir": 0,
    "type": 3
}, {
    "sid": 774,
    "x": 6343,
    "y": 3487,
    "dir": 0,
    "type": 2
}, {
    "sid": 775,
    "x": 12953.9,
    "y": 3996.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 776,
    "x": 6977.4,
    "y": 2655.3,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 777,
    "x": 6880.5,
    "y": 2636.9,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 778,
    "x": 6995,
    "y": 2752.2,
    "dir": 0.42,
    "type": null,
    "id": 12
}, {
    "sid": 779,
    "x": 13434.9,
    "y": 4079.1,
    "dir": 0,
    "type": 1
}, {
    "sid": 780,
    "x": 6899.1,
    "y": 2732.9,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 781,
    "x": 6802.3,
    "y": 2714.6,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 782,
    "x": 6916.7,
    "y": 2829.9,
    "dir": 0.42,
    "type": null,
    "id": 12
}, {
    "sid": 783,
    "x": 6943.4,
    "y": 3733.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 784,
    "x": 6836.7,
    "y": 2909.3,
    "dir": 0.42,
    "type": null,
    "id": 12
}, {
    "sid": 785,
    "x": 5451.3,
    "y": 3459.1,
    "dir": 0,
    "type": 1
}, {
    "sid": 786,
    "x": 14004.9,
    "y": 4790.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 787,
    "x": 12579.9,
    "y": 4438.2,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 788,
    "x": 12635.8,
    "y": 4357,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 789,
    "x": 12709.6,
    "y": 4438.2,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 790,
    "x": 12765.5,
    "y": 4519.4,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 791,
    "x": 12765.5,
    "y": 4357,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 792,
    "x": 14167,
    "y": 3734,
    "dir": 0,
    "type": 2
}, {
    "sid": 793,
    "x": 12837.5,
    "y": 4438.2,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 794,
    "x": 12893.4,
    "y": 4519.4,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 795,
    "x": 12893.4,
    "y": 4357,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 796,
    "x": 12967.3,
    "y": 4438.2,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 797,
    "x": 13023.1,
    "y": 4519.4,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 798,
    "x": 6819.1,
    "y": 2812.3,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 799,
    "x": 6722.3,
    "y": 2794,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 800,
    "x": 13023.1,
    "y": 4357,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 801,
    "x": 6017.3,
    "y": 3814.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 802,
    "x": 6740.3,
    "y": 2890.5,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 803,
    "x": 6643.5,
    "y": 2872.2,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 804,
    "x": 6757.9,
    "y": 2987.5,
    "dir": 0.42,
    "type": null,
    "id": 12
}, {
    "sid": 805,
    "x": 13096.1,
    "y": 4438.2,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 806,
    "x": 13151.9,
    "y": 4519.4,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 807,
    "x": 13151.9,
    "y": 4357,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 808,
    "x": 6258.4,
    "y": 3814.1,
    "dir": 0,
    "type": 1
}, {
    "sid": 809,
    "x": 6661.5,
    "y": 2968.7,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 810,
    "x": 6564.7,
    "y": 2950.4,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 811,
    "x": 6679.1,
    "y": 3065.7,
    "dir": 0.42,
    "type": null,
    "id": 12
}, {
    "sid": 812,
    "x": 13225,
    "y": 4438.2,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 813,
    "x": 13280.8,
    "y": 4519.4,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 814,
    "x": 13280.8,
    "y": 4357,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 815,
    "x": 13353.8,
    "y": 4438.2,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 816,
    "x": 13409.6,
    "y": 4519.4,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 817,
    "x": 13409.6,
    "y": 4357,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 818,
    "x": 13483.5,
    "y": 4438.2,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 819,
    "x": 6581.6,
    "y": 3048,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 820,
    "x": 6484.8,
    "y": 3029.7,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 821,
    "x": 6599.2,
    "y": 3145,
    "dir": 0.42,
    "type": null,
    "id": 12
}, {
    "sid": 822,
    "x": 13539.3,
    "y": 4519.4,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 823,
    "x": 13539.3,
    "y": 4357,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 824,
    "x": 14035.7,
    "y": 4002.8,
    "dir": -1.43,
    "type": null,
    "id": 22
}, {
    "sid": 825,
    "x": 13874.9,
    "y": 5444.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 826,
    "x": 12947.9,
    "y": 5550.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 827,
    "x": 14341.2,
    "y": 4754.5,
    "dir": 0.02,
    "type": null,
    "id": 22
}, {
    "sid": 828,
    "x": 336,
    "y": 3504.1,
    "dir": 0,
    "type": 1
}, {
    "sid": 829,
    "x": 2098.1,
    "y": 5489.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 830,
    "x": 7557.4,
    "y": 4039.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 831,
    "x": 830.7,
    "y": 5967.7,
    "dir": -0.74,
    "type": null,
    "id": 15
}, {
    "sid": 832,
    "x": 885.9,
    "y": 5856.6,
    "dir": -1.25,
    "type": null,
    "id": 15
}, {
    "sid": 833,
    "x": 6502.9,
    "y": 3126.1,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 834,
    "x": 6406.1,
    "y": 3107.8,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 835,
    "x": 6520.5,
    "y": 3223.1,
    "dir": 0.42,
    "type": null,
    "id": 12
}, {
    "sid": 836,
    "x": 2600.1,
    "y": 6664.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 837,
    "x": 2805.7,
    "y": 5441.6,
    "dir": 425.55499999996033,
    "type": null,
    "id": 9
}, {
    "sid": 838,
    "x": 486,
    "y": 4639.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 839,
    "x": 4735,
    "y": 6204.1,
    "dir": -2.21,
    "type": null,
    "id": 12
}, {
    "sid": 840,
    "x": 4835.1,
    "y": 6245.1,
    "dir": -2.81,
    "type": null,
    "id": 12
}, {
    "sid": 841,
    "x": 5333.6,
    "y": 6207.1,
    "dir": -2.05,
    "type": null,
    "id": 22
}, {
    "sid": 842,
    "x": 11341,
    "y": 5674.5,
    "dir": 6.26,
    "type": null,
    "id": 10
}, {
    "sid": 843,
    "x": 11260.3,
    "y": 5717.2,
    "dir": -1.08,
    "type": null,
    "id": 10
}, {
    "sid": 844,
    "x": 11152.3,
    "y": 5741.2,
    "dir": -2.5,
    "type": null,
    "id": 10
}, {
    "sid": 845,
    "x": 6423.6,
    "y": 3204.9,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 846,
    "x": 6326.7,
    "y": 3186.6,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 847,
    "x": 6441.1,
    "y": 3301.9,
    "dir": 0.42,
    "type": null,
    "id": 12
}, {
    "sid": 848,
    "x": 10930.7,
    "y": 5738.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 849,
    "x": 1842.6,
    "y": 5993,
    "dir": 2.36,
    "type": null,
    "id": 15
}, {
    "sid": 850,
    "x": 7906,
    "y": 7129,
    "dir": 0,
    "type": 2
}, {
    "sid": 851,
    "x": 6515,
    "y": 7460,
    "dir": 0,
    "type": 2
}, {
    "sid": 852,
    "x": 757.7,
    "y": 4998.7,
    "dir": 0.64,
    "type": null,
    "id": 10
}, {
    "sid": 853,
    "x": 12003.7,
    "y": 6088.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 854,
    "x": 2623.1,
    "y": 8051.4,
    "dir": 0,
    "type": 1
}, {
    "sid": 855,
    "x": 11402.7,
    "y": 7749.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 856,
    "x": 2620.1,
    "y": 10313.9,
    "dir": 1.08,
    "type": null,
    "id": 10
}, {
    "sid": 857,
    "x": 5007.3,
    "y": 2685,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 858,
    "x": 6344.7,
    "y": 3283.1,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 859,
    "x": 6247.9,
    "y": 3264.8,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 860,
    "x": 11300.5,
    "y": 5820.2,
    "dir": 0.34,
    "type": null,
    "id": 10
}, {
    "sid": 861,
    "x": 4921.4,
    "y": 3043.8,
    "dir": -5.34,
    "type": null,
    "id": 10
}, {
    "sid": 862,
    "x": 4921.2,
    "y": 2878.4,
    "dir": 1.6,
    "type": null,
    "id": 10
}, {
    "sid": 863,
    "x": 4923.3,
    "y": 2756.9,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 864,
    "x": 6265.9,
    "y": 3361.3,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 865,
    "x": 6169.1,
    "y": 3343,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 866,
    "x": 2583.3,
    "y": 10231.4,
    "dir": -0.69,
    "type": null,
    "id": 10
}, {
    "sid": 867,
    "x": 2642.3,
    "y": 9665.9,
    "dir": -2.36,
    "type": null,
    "id": 10
}, {
    "sid": 868,
    "x": 4884.3,
    "y": 4241.3,
    "dir": 4.52,
    "type": null,
    "id": 10
}, {
    "sid": 869,
    "x": 4835.5,
    "y": 3129.4,
    "dir": -5.34,
    "type": null,
    "id": 10
}, {
    "sid": 870,
    "x": 4831.4,
    "y": 2896.3,
    "dir": 3.77,
    "type": null,
    "id": 10
}, {
    "sid": 871,
    "x": 2675.6,
    "y": 10167.5,
    "dir": -0.77,
    "type": null,
    "id": 10
}, {
    "sid": 872,
    "x": 2727.2,
    "y": 9632,
    "dir": 5.34,
    "type": null,
    "id": 10
}, {
    "sid": 873,
    "x": 4839,
    "y": 2804.5,
    "dir": 3.01,
    "type": null,
    "id": 10
}, {
    "sid": 874,
    "x": 6186,
    "y": 3440.6,
    "dir": 5.5,
    "type": null,
    "id": 12
}, {
    "sid": 875,
    "x": 6089.2,
    "y": 3422.3,
    "dir": 4.3,
    "type": null,
    "id": 12
}, {
    "sid": 876,
    "x": 6203.6,
    "y": 3537.6,
    "dir": 0.42,
    "type": null,
    "id": 12
}, {
    "sid": 877,
    "x": 4970.6,
    "y": 4268.2,
    "dir": -1.75,
    "type": null,
    "id": 10
}, {
    "sid": 878,
    "x": 4639.3,
    "y": 3484.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 879,
    "x": 5065.9,
    "y": 4324.3,
    "dir": 5.95,
    "type": null,
    "id": 10
}, {
    "sid": 880,
    "x": 2708.7,
    "y": 10052.9,
    "dir": -2.67,
    "type": null,
    "id": 10
}, {
    "sid": 881,
    "x": 6265.4,
    "y": 4444.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 882,
    "x": 4815.7,
    "y": 4328.1,
    "dir": 3.1,
    "type": null,
    "id": 10
}, {
    "sid": 883,
    "x": 4742.8,
    "y": 3217.3,
    "dir": -5.27,
    "type": null,
    "id": 10
}, {
    "sid": 884,
    "x": 4752.6,
    "y": 3091.6,
    "dir": 2.37,
    "type": null,
    "id": 10
}, {
    "sid": 885,
    "x": 4746,
    "y": 2981.2,
    "dir": 3.79,
    "type": null,
    "id": 10
}, {
    "sid": 886,
    "x": 2709.3,
    "y": 10252.6,
    "dir": 0.68,
    "type": null,
    "id": 10
}, {
    "sid": 887,
    "x": 4658.7,
    "y": 3274.6,
    "dir": -4.96,
    "type": null,
    "id": 10
}, {
    "sid": 888,
    "x": 4660.5,
    "y": 3065,
    "dir": 3.81,
    "type": null,
    "id": 10
}, {
    "sid": 889,
    "x": 7650.1,
    "y": 11772.9,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 890,
    "x": 4579.4,
    "y": 3119.1,
    "dir": 5.28,
    "type": null,
    "id": 10
}, {
    "sid": 891,
    "x": 2790.6,
    "y": 10201.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 892,
    "x": 4530.8,
    "y": 3277.9,
    "dir": -4.27,
    "type": null,
    "id": 10
}, {
    "sid": 893,
    "x": 2326.3,
    "y": 10671.8,
    "dir": 5.78,
    "type": null,
    "id": 10
}, {
    "sid": 894,
    "x": 5520.3,
    "y": 4623.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 895,
    "x": 4933.7,
    "y": 4522.6,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 896,
    "x": 4765.7,
    "y": 4522.6,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 897,
    "x": 4849.7,
    "y": 4558.1,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 898,
    "x": 4933.7,
    "y": 4412.8,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 899,
    "x": 4765.7,
    "y": 4412.8,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 900,
    "x": 4849.7,
    "y": 4448.9,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 901,
    "x": 5027.7,
    "y": 4424.7,
    "dir": 1.11,
    "type": null,
    "id": 10
}, {
    "sid": 902,
    "x": 4541.7,
    "y": 4566.6,
    "dir": 748.2140000000702,
    "type": null,
    "id": 9
}, {
    "sid": 903,
    "x": 6971.4,
    "y": 4620.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 904,
    "x": 4421.3,
    "y": 3978.1,
    "dir": 0,
    "type": 1
}, {
    "sid": 905,
    "x": 4359.3,
    "y": 3435.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 906,
    "x": 4933.7,
    "y": 4631.8,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 907,
    "x": 4765.7,
    "y": 4631.8,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 908,
    "x": 4849.7,
    "y": 4667.3,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 909,
    "x": 11309.3,
    "y": 5920.2,
    "dir": 5.97,
    "type": null,
    "id": 10
}, {
    "sid": 910,
    "x": 4602.7,
    "y": 4674.7,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 911,
    "x": 2960.1,
    "y": 10127.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 912,
    "x": 10900.7,
    "y": 10283.6,
    "dir": 0,
    "type": 1
}, {
    "sid": 913,
    "x": 2805.8,
    "y": 9741.8,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 914,
    "x": 12340.1,
    "y": 12062.3,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 915,
    "x": 4298.6,
    "y": 3575.1,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 916,
    "x": 4933.7,
    "y": 4741.5,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 917,
    "x": 4765.7,
    "y": 4741.5,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 918,
    "x": 2811.2,
    "y": 10011.2,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 919,
    "x": 4317.3,
    "y": 3137,
    "dir": 3.11,
    "type": null,
    "id": 10
}, {
    "sid": 920,
    "x": 4226.7,
    "y": 3491.1,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 921,
    "x": 4226.7,
    "y": 3659.1,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 922,
    "x": 4117.1,
    "y": 3491.1,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 923,
    "x": 4189,
    "y": 3575.1,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 924,
    "x": 4117.1,
    "y": 3659.1,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 925,
    "x": 3971.9,
    "y": 3491.1,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 926,
    "x": 4043.9,
    "y": 3575.1,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 927,
    "x": 3971.9,
    "y": 3659.1,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 928,
    "x": 4252.6,
    "y": 4059.1,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 929,
    "x": 4252.6,
    "y": 4227.1,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 930,
    "x": 2820.5,
    "y": 10110,
    "dir": -0.22,
    "type": null,
    "id": 10
}, {
    "sid": 931,
    "x": 2920,
    "y": 9939.3,
    "dir": 5.81,
    "type": null,
    "id": 10
}, {
    "sid": 932,
    "x": 7482.1,
    "y": 11819.7,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 933,
    "x": 12456.1,
    "y": 13696.3,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 934,
    "x": 3926.2,
    "y": 3385,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 935,
    "x": 3470.1,
    "y": 9939.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 936,
    "x": 3824,
    "y": 3942,
    "dir": 0,
    "type": 2
}, {
    "sid": 937,
    "x": 3855.3,
    "y": 3640.5,
    "dir": 1.94,
    "type": null,
    "id": 10
}, {
    "sid": 938,
    "x": 3819.2,
    "y": 3384,
    "dir": 1.32,
    "type": null,
    "id": 10
}, {
    "sid": 939,
    "x": 3776,
    "y": 3554,
    "dir": 2.63,
    "type": null,
    "id": 10
}, {
    "sid": 940,
    "x": 4140.9,
    "y": 3104.6,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 941,
    "x": 3759.7,
    "y": 3463.9,
    "dir": 2.9,
    "type": null,
    "id": 10
}, {
    "sid": 942,
    "x": 3787.3,
    "y": 3082.2,
    "dir": -0.57,
    "type": null,
    "id": 10
}, {
    "sid": 943,
    "x": 3719.8,
    "y": 3335.3,
    "dir": 2.74,
    "type": null,
    "id": 10
}, {
    "sid": 944,
    "x": 3704,
    "y": 3241.1,
    "dir": 2.34,
    "type": null,
    "id": 10
}, {
    "sid": 945,
    "x": 3698.1,
    "y": 3648,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 946,
    "x": 4293.7,
    "y": 3020.6,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 947,
    "x": 3674.6,
    "y": 2990,
    "dir": -1.06,
    "type": null,
    "id": 10
}, {
    "sid": 948,
    "x": 3682.7,
    "y": 3773.8,
    "dir": -5.96,
    "type": null,
    "id": 10
}, {
    "sid": 949,
    "x": 4173.4,
    "y": 3020.6,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 950,
    "x": 3592.1,
    "y": 4170.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 951,
    "x": 3640,
    "y": 3170.4,
    "dir": 2.2,
    "type": null,
    "id": 10
}, {
    "sid": 952,
    "x": 3609.3,
    "y": 3079.1,
    "dir": 0.46,
    "type": null,
    "id": 10
}, {
    "sid": 953,
    "x": 3614.1,
    "y": 3592.7,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 954,
    "x": 3614.1,
    "y": 3419.4,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 955,
    "x": 3583.6,
    "y": 2973.6,
    "dir": -1.33,
    "type": null,
    "id": 10
}, {
    "sid": 956,
    "x": 3587.7,
    "y": 3830.6,
    "dir": 1.74,
    "type": null,
    "id": 10
}, {
    "sid": 957,
    "x": 3601.6,
    "y": 3266.6,
    "dir": 0.1,
    "type": null,
    "id": 10
}, {
    "sid": 958,
    "x": 3530.2,
    "y": 3477.6,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 959,
    "x": 3530.2,
    "y": 3347.4,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 960,
    "x": 4460.3,
    "y": 2589.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 961,
    "x": 3507.4,
    "y": 3122.1,
    "dir": 1.88,
    "type": null,
    "id": 10
}, {
    "sid": 962,
    "x": 3494,
    "y": 2895,
    "dir": -0.65,
    "type": null,
    "id": 10
}, {
    "sid": 963,
    "x": 3487.6,
    "y": 3005.4,
    "dir": 0.77,
    "type": null,
    "id": 10
}, {
    "sid": 964,
    "x": 4839.3,
    "y": 2685,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 965,
    "x": 3403.9,
    "y": 3041.6,
    "dir": 2.18,
    "type": null,
    "id": 10
}, {
    "sid": 966,
    "x": 3417.6,
    "y": 3321.3,
    "dir": 1.85,
    "type": null,
    "id": 10
}, {
    "sid": 967,
    "x": 3408.3,
    "y": 3215.5,
    "dir": 0.73,
    "type": null,
    "id": 10
}, {
    "sid": 968,
    "x": 3424.7,
    "y": 2826.5,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 969,
    "x": 3435.2,
    "y": 2654.1,
    "dir": -5.8,
    "type": null,
    "id": 10
}, {
    "sid": 970,
    "x": 3392.3,
    "y": 2915.6,
    "dir": 0.81,
    "type": null,
    "id": 10
}, {
    "sid": 971,
    "x": 3352.9,
    "y": 2754.7,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 972,
    "x": 3307.3,
    "y": 2946.2,
    "dir": 2.18,
    "type": null,
    "id": 10
}, {
    "sid": 973,
    "x": 3311.8,
    "y": 3128.5,
    "dir": 0.8,
    "type": null,
    "id": 10
}, {
    "sid": 974,
    "x": 3234.1,
    "y": 2873.5,
    "dir": 2.2,
    "type": null,
    "id": 10
}, {
    "sid": 975,
    "x": 3220.6,
    "y": 3035.4,
    "dir": 0.79,
    "type": null,
    "id": 10
}, {
    "sid": 976,
    "x": 3203.7,
    "y": 2686.3,
    "dir": 3.47,
    "type": null,
    "id": 10
}, {
    "sid": 977,
    "x": 3201.3,
    "y": 3135.2,
    "dir": 2.22,
    "type": null,
    "id": 10
}, {
    "sid": 978,
    "x": 3176.7,
    "y": 2796.1,
    "dir": 2.72,
    "type": null,
    "id": 10
}, {
    "sid": 979,
    "x": 3818.1,
    "y": 2444.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 980,
    "x": 3280.5,
    "y": 2595.4,
    "dir": 3.77,
    "type": null,
    "id": 10
}, {
    "sid": 981,
    "x": 5021.6,
    "y": 2584.8,
    "dir": -5.49,
    "type": null,
    "id": 10
}, {
    "sid": 982,
    "x": 3110.3,
    "y": 3044,
    "dir": 2.2,
    "type": null,
    "id": 10
}, {
    "sid": 983,
    "x": 3373.7,
    "y": 2556.4,
    "dir": 0.68,
    "type": null,
    "id": 10
}, {
    "sid": 984,
    "x": 4857.3,
    "y": 2532.4,
    "dir": 3.42,
    "type": null,
    "id": 10
}, {
    "sid": 985,
    "x": 3042.3,
    "y": 2949.7,
    "dir": 2.63,
    "type": null,
    "id": 10
}, {
    "sid": 986,
    "x": 3022.3,
    "y": 2854.2,
    "dir": 2.81,
    "type": null,
    "id": 10
}, {
    "sid": 987,
    "x": 5093.7,
    "y": 2504.7,
    "dir": -5.34,
    "type": null,
    "id": 10
}, {
    "sid": 988,
    "x": 4983.4,
    "y": 2496.2,
    "dir": 2.36,
    "type": null,
    "id": 10
}, {
    "sid": 989,
    "x": 2979.1,
    "y": 3298.1,
    "dir": 0,
    "type": 1
}, {
    "sid": 990,
    "x": 2862.1,
    "y": 3669.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 991,
    "x": 2957.4,
    "y": 2987.2,
    "dir": -1.95,
    "type": null,
    "id": 22
}, {
    "sid": 992,
    "x": 3129.1,
    "y": 2398.5,
    "dir": 2.86,
    "type": null,
    "id": 10
}, {
    "sid": 993,
    "x": 3246.7,
    "y": 2350.2,
    "dir": 1.94,
    "type": null,
    "id": 10
}, {
    "sid": 994,
    "x": 4472.3,
    "y": 2186.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 995,
    "x": 3158.9,
    "y": 2293.6,
    "dir": 3.63,
    "type": null,
    "id": 10
}, {
    "sid": 996,
    "x": 3366.7,
    "y": 2208.2,
    "dir": -6.09,
    "type": null,
    "id": 10
}, {
    "sid": 997,
    "x": 2665.1,
    "y": 3332.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 998,
    "x": 3188.6,
    "y": 2181.8,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 999,
    "x": 3405.1,
    "y": 1995,
    "dir": 0,
    "type": 0
}, {
    "sid": 1000,
    "x": 3340.5,
    "y": 2118,
    "dir": -0.35,
    "type": null,
    "id": 10
}, {
    "sid": 1001,
    "x": 10755.9,
    "y": 5990.4,
    "dir": -2.11,
    "type": null,
    "id": 22
}, {
    "sid": 1002,
    "x": 8398.6,
    "y": 5862.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 1003,
    "x": 2567.9,
    "y": 2120.8,
    "dir": 0.65,
    "type": null,
    "id": 10
}, {
    "sid": 1004,
    "x": 3238.1,
    "y": 2094.7,
    "dir": 0.69,
    "type": null,
    "id": 10
}, {
    "sid": 1005,
    "x": 2483.5,
    "y": 2085.4,
    "dir": -0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1006,
    "x": 2466,
    "y": 2221.8,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1007,
    "x": 2867.8,
    "y": 2058.3,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1008,
    "x": 2758.2,
    "y": 2058.3,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1009,
    "x": 2636.9,
    "y": 2058.3,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1010,
    "x": 7678.4,
    "y": 11689.7,
    "dir": 0,
    "type": 1
}, {
    "sid": 1011,
    "x": 2373.3,
    "y": 2076.9,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1012,
    "x": 2373.2,
    "y": 2314.5,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1013,
    "x": 4378.3,
    "y": 1914,
    "dir": 0,
    "type": 1
}, {
    "sid": 1014,
    "x": 3231.8,
    "y": 1986.9,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1015,
    "x": 3076.5,
    "y": 1974.3,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1016,
    "x": 2967,
    "y": 1974.3,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1017,
    "x": 11312.4,
    "y": 6046.5,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1018,
    "x": 2477.9,
    "y": 1974.4,
    "dir": -2.16,
    "type": null,
    "id": 10
}, {
    "sid": 1019,
    "x": 4403.2,
    "y": 7785.7,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1020,
    "x": 2570.4,
    "y": 1906.6,
    "dir": -1.85,
    "type": null,
    "id": 10
}, {
    "sid": 1021,
    "x": 3137,
    "y": 1904.9,
    "dir": -1.08,
    "type": null,
    "id": 10
}, {
    "sid": 1022,
    "x": 3031.2,
    "y": 1890.3,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1023,
    "x": 2922.3,
    "y": 1890.3,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1024,
    "x": 11144.4,
    "y": 6086.6,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1025,
    "x": 4403.2,
    "y": 7947,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1026,
    "x": 2388.1,
    "y": 1871.9,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1027,
    "x": 2813.2,
    "y": 1890.3,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1028,
    "x": 2703.6,
    "y": 1890.3,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1029,
    "x": 2277,
    "y": 2173.2,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1030,
    "x": 11312.4,
    "y": 6167.6,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1031,
    "x": 2275.6,
    "y": 1952.3,
    "dir": 1.9,
    "type": null,
    "id": 10
}, {
    "sid": 1032,
    "x": 2275.6,
    "y": 1791.5,
    "dir": -1.9,
    "type": null,
    "id": 10
}, {
    "sid": 1033,
    "x": 2264.6,
    "y": 2361.2,
    "dir": 1.3,
    "type": null,
    "id": 10
}, {
    "sid": 1034,
    "x": 2218.1,
    "y": 1871.8,
    "dir": -3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1035,
    "x": 2166.2,
    "y": 1791.5,
    "dir": -1.9,
    "type": null,
    "id": 10
}, {
    "sid": 1036,
    "x": 2166.2,
    "y": 1952.3,
    "dir": 1.9,
    "type": null,
    "id": 10
}, {
    "sid": 1037,
    "x": 2173.6,
    "y": 2124.1,
    "dir": -0.65,
    "type": null,
    "id": 10
}, {
    "sid": 1038,
    "x": 2167.3,
    "y": 2234.6,
    "dir": 0.77,
    "type": null,
    "id": 10
}, {
    "sid": 1039,
    "x": 3715.1,
    "y": 1596,
    "dir": 0,
    "type": 0
}, {
    "sid": 1040,
    "x": 2108.7,
    "y": 1871.8,
    "dir": -3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1041,
    "x": 2147.2,
    "y": 2324.5,
    "dir": 2.03,
    "type": null,
    "id": 10
}, {
    "sid": 1042,
    "x": 2072.6,
    "y": 2048.8,
    "dir": -1.1,
    "type": null,
    "id": 10
}, {
    "sid": 1043,
    "x": 2038.4,
    "y": 2226.7,
    "dir": 2.18,
    "type": null,
    "id": 10
}, {
    "sid": 1044,
    "x": 1981.8,
    "y": 2034.6,
    "dir": -1.36,
    "type": null,
    "id": 10
}, {
    "sid": 1045,
    "x": 1942.1,
    "y": 2201.8,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1046,
    "x": 1904.9,
    "y": 2117.8,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1047,
    "x": 1894.1,
    "y": 1952.3,
    "dir": 1.9,
    "type": null,
    "id": 10
}, {
    "sid": 1048,
    "x": 1836.6,
    "y": 1871.8,
    "dir": -3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1049,
    "x": 1832.9,
    "y": 2033.8,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1050,
    "x": 1832.9,
    "y": 2201.8,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1051,
    "x": 1750.7,
    "y": 2275.7,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1052,
    "x": 1741.4,
    "y": 1954.5,
    "dir": 1.11,
    "type": null,
    "id": 10
}, {
    "sid": 1053,
    "x": 1722.2,
    "y": 2076.5,
    "dir": -2.05,
    "type": null,
    "id": 10
}, {
    "sid": 1054,
    "x": 1742.2,
    "y": 2165.5,
    "dir": -0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1055,
    "x": 1643.7,
    "y": 1938.7,
    "dir": -3.93,
    "type": null,
    "id": 10
}, {
    "sid": 1056,
    "x": 1651.1,
    "y": 2255.9,
    "dir": -0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1057,
    "x": 1659.6,
    "y": 2366.2,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1058,
    "x": 1631.9,
    "y": 2156.9,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1059,
    "x": 1587.7,
    "y": 3265.8,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1060,
    "x": 1566.7,
    "y": 2222,
    "dir": -2.18,
    "type": null,
    "id": 10
}, {
    "sid": 1061,
    "x": 1574.7,
    "y": 2332.3,
    "dir": -0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1062,
    "x": 1583.2,
    "y": 2442.5,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1063,
    "x": 1540.1,
    "y": 2987.9,
    "dir": 5.34,
    "type": null,
    "id": 10
}, {
    "sid": 1064,
    "x": 1582.3,
    "y": 3079.4,
    "dir": 5.95,
    "type": null,
    "id": 10
}, {
    "sid": 1065,
    "x": 1489.7,
    "y": 2298.5,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1066,
    "x": 1497.6,
    "y": 2409.4,
    "dir": -0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1067,
    "x": 1506.1,
    "y": 2519.7,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1068,
    "x": 1503.7,
    "y": 3157.7,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 1069,
    "x": 1439.8,
    "y": 2013.2,
    "dir": -1.9,
    "type": null,
    "id": 10
}, {
    "sid": 1070,
    "x": 1439.8,
    "y": 2174,
    "dir": 1.9,
    "type": null,
    "id": 10
}, {
    "sid": 1071,
    "x": 1420.4,
    "y": 2486.6,
    "dir": -0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1072,
    "x": 1428.9,
    "y": 2596.9,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1073,
    "x": 1457.6,
    "y": 2905.1,
    "dir": 5.36,
    "type": null,
    "id": 10
}, {
    "sid": 1074,
    "x": 1419.7,
    "y": 3194.4,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1075,
    "x": 1419.7,
    "y": 3302.6,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1076,
    "x": 1272.7,
    "y": 2093.5,
    "dir": -3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1077,
    "x": 1330.3,
    "y": 2174,
    "dir": 1.9,
    "type": null,
    "id": 10
}, {
    "sid": 1078,
    "x": 1382.3,
    "y": 2093.5,
    "dir": -3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1079,
    "x": 1387.3,
    "y": 2400.9,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1080,
    "x": 1310.1,
    "y": 2478.1,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1081,
    "x": 1242.7,
    "y": 2545.5,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1082,
    "x": 1361.5,
    "y": 2664.3,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1083,
    "x": 1329,
    "y": 2577.9,
    "dir": -0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1084,
    "x": 1167.9,
    "y": 2620.3,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1085,
    "x": 1286.7,
    "y": 2739.1,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1086,
    "x": 1132.6,
    "y": 2709.2,
    "dir": -2.65,
    "type": null,
    "id": 10
}, {
    "sid": 1087,
    "x": 1151.8,
    "y": 2817.2,
    "dir": -3.34,
    "type": null,
    "id": 10
}, {
    "sid": 1088,
    "x": 1211,
    "y": 2896.1,
    "dir": -3.77,
    "type": null,
    "id": 10
}, {
    "sid": 1089,
    "x": 1355.9,
    "y": 2803.2,
    "dir": 5.36,
    "type": null,
    "id": 10
}, {
    "sid": 1090,
    "x": 1286.1,
    "y": 2971.5,
    "dir": -3.77,
    "type": null,
    "id": 10
}, {
    "sid": 1091,
    "x": 1378.7,
    "y": 3064.1,
    "dir": -3.77,
    "type": null,
    "id": 10
}, {
    "sid": 1092,
    "x": 1471.6,
    "y": 3480.8,
    "dir": -1.79,
    "type": null,
    "id": 10
}, {
    "sid": 1093,
    "x": 1852.3,
    "y": 3470.3,
    "dir": 0.29,
    "type": null,
    "id": 22
}, {
    "sid": 1094,
    "x": 1081.9,
    "y": 2174,
    "dir": 1.9,
    "type": null,
    "id": 10
}, {
    "sid": 1095,
    "x": 1024.4,
    "y": 2093.5,
    "dir": -3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1096,
    "x": 2148.1,
    "y": 3612.1,
    "dir": 0,
    "type": 1
}, {
    "sid": 1097,
    "x": 1692.2,
    "y": 3637.4,
    "dir": -2.69,
    "type": null,
    "id": 10
}, {
    "sid": 1098,
    "x": 1562,
    "y": 3654.6,
    "dir": -3.09,
    "type": null,
    "id": 10
}, {
    "sid": 1099,
    "x": 631,
    "y": 2523.1,
    "dir": 0,
    "type": 1
}, {
    "sid": 1100,
    "x": 877.7,
    "y": 2115.8,
    "dir": 2.69,
    "type": null,
    "id": 10
}, {
    "sid": 1101,
    "x": 894.4,
    "y": 2018.3,
    "dir": -2.35,
    "type": null,
    "id": 10
}, {
    "sid": 1102,
    "x": 1081.9,
    "y": 2013.2,
    "dir": -1.9,
    "type": null,
    "id": 10
}, {
    "sid": 1103,
    "x": 1330.3,
    "y": 2013.2,
    "dir": -1.9,
    "type": null,
    "id": 10
}, {
    "sid": 1104,
    "x": 991.9,
    "y": 2002.6,
    "dir": -1.11,
    "type": null,
    "id": 10
}, {
    "sid": 1105,
    "x": 2049,
    "y": 1650,
    "dir": 0,
    "type": 1
}, {
    "sid": 1106,
    "x": 2963.1,
    "y": 1594,
    "dir": 0,
    "type": 1
}, {
    "sid": 1107,
    "x": 1204,
    "y": 8706.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 1108,
    "x": 11018.7,
    "y": 9931.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 1109,
    "x": 8011.9,
    "y": 11712.8,
    "dir": -0.28,
    "type": null,
    "id": 10
}, {
    "sid": 1110,
    "x": 7841.1,
    "y": 11718.2,
    "dir": 2.81,
    "type": null,
    "id": 10
}, {
    "sid": 1111,
    "x": 7566.1,
    "y": 11701,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 1112,
    "x": 8929.7,
    "y": 11689.4,
    "dir": -4.41,
    "type": null,
    "id": 10
}, {
    "sid": 1113,
    "x": 7832.4,
    "y": 11611.2,
    "dir": 2.95,
    "type": null,
    "id": 10
}, {
    "sid": 1114,
    "x": 7484.7,
    "y": 11629.6,
    "dir": -2.92,
    "type": null,
    "id": 10
}, {
    "sid": 1115,
    "x": 3296.1,
    "y": 833,
    "dir": 0,
    "type": 1
}, {
    "sid": 1116,
    "x": 8798.5,
    "y": 11635.4,
    "dir": -3.77,
    "type": null,
    "id": 10
}, {
    "sid": 1117,
    "x": 8000.3,
    "y": 11604.2,
    "dir": -6.17,
    "type": null,
    "id": 10
}, {
    "sid": 1118,
    "x": 7661.9,
    "y": 11569.3,
    "dir": 0.62,
    "type": null,
    "id": 10
}, {
    "sid": 1119,
    "x": 8727.9,
    "y": 11564.4,
    "dir": -3.76,
    "type": null,
    "id": 10
}, {
    "sid": 1120,
    "x": 8659.1,
    "y": 11495.3,
    "dir": -3.76,
    "type": null,
    "id": 10
}, {
    "sid": 1121,
    "x": 7999.8,
    "y": 11509.3,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1122,
    "x": 7726.7,
    "y": 11504.5,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1123,
    "x": 7503.5,
    "y": 11518.5,
    "dir": -2.63,
    "type": null,
    "id": 10
}, {
    "sid": 1124,
    "x": 8882.6,
    "y": 11481.9,
    "dir": 5.34,
    "type": null,
    "id": 10
}, {
    "sid": 1125,
    "x": 8811.7,
    "y": 11411.1,
    "dir": 5.33,
    "type": null,
    "id": 10
}, {
    "sid": 1126,
    "x": 8590,
    "y": 11424.4,
    "dir": -3.74,
    "type": null,
    "id": 10
}, {
    "sid": 1127,
    "x": 8019,
    "y": 11419,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1128,
    "x": 7574.9,
    "y": 11418.9,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1129,
    "x": 6795.6,
    "y": 12297.5,
    "dir": -0.74,
    "type": null,
    "id": 10
}, {
    "sid": 1130,
    "x": 7853.1,
    "y": 11383.2,
    "dir": 3.41,
    "type": null,
    "id": 10
}, {
    "sid": 1131,
    "x": 6771.6,
    "y": 12209.9,
    "dir": -2.03,
    "type": null,
    "id": 10
}, {
    "sid": 1132,
    "x": 6685.8,
    "y": 12535.7,
    "dir": 0,
    "type": 2
}, {
    "sid": 1133,
    "x": 8745.2,
    "y": 11343.4,
    "dir": 5.36,
    "type": null,
    "id": 10
}, {
    "sid": 1134,
    "x": 2417.1,
    "y": 611,
    "dir": 0,
    "type": 0
}, {
    "sid": 1135,
    "x": 3687.1,
    "y": 673,
    "dir": 0,
    "type": 1
}, {
    "sid": 1136,
    "x": 6685.7,
    "y": 12284.5,
    "dir": -2.16,
    "type": null,
    "id": 10
}, {
    "sid": 1137,
    "x": 8519,
    "y": 11341.6,
    "dir": -3.59,
    "type": null,
    "id": 10
}, {
    "sid": 1138,
    "x": 8102.5,
    "y": 11335.4,
    "dir": -5.34,
    "type": null,
    "id": 10
}, {
    "sid": 1139,
    "x": 7639.3,
    "y": 11353.7,
    "dir": -2.22,
    "type": null,
    "id": 10
}, {
    "sid": 1140,
    "x": 7915.4,
    "y": 11288.8,
    "dir": 3.71,
    "type": null,
    "id": 10
}, {
    "sid": 1141,
    "x": 7780.2,
    "y": 11327.2,
    "dir": -0.82,
    "type": null,
    "id": 10
}, {
    "sid": 1142,
    "x": 8657.1,
    "y": 11246,
    "dir": 5.52,
    "type": null,
    "id": 10
}, {
    "sid": 1143,
    "x": 8172.6,
    "y": 11265,
    "dir": -5.36,
    "type": null,
    "id": 10
}, {
    "sid": 1144,
    "x": 7293.4,
    "y": 11090.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 1145,
    "x": 8468,
    "y": 11207.4,
    "dir": -2.92,
    "type": null,
    "id": 10
}, {
    "sid": 1146,
    "x": 7983.8,
    "y": 11216.6,
    "dir": 3.77,
    "type": null,
    "id": 10
}, {
    "sid": 1147,
    "x": 8241,
    "y": 11196.3,
    "dir": -5.34,
    "type": null,
    "id": 10
}, {
    "sid": 1148,
    "x": 7846.1,
    "y": 11211,
    "dir": -1.12,
    "type": null,
    "id": 10
}, {
    "sid": 1149,
    "x": 2886,
    "y": 12951,
    "dir": 0,
    "type": 2
}, {
    "sid": 1150,
    "x": 8052.1,
    "y": 11148,
    "dir": 3.76,
    "type": null,
    "id": 10
}, {
    "sid": 1151,
    "x": 1894.1,
    "y": 1791.5,
    "dir": -1.9,
    "type": null,
    "id": 10
}, {
    "sid": 1152,
    "x": 6467.4,
    "y": 11128.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 1153,
    "x": 8646.2,
    "y": 11139.5,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1154,
    "x": 8310.4,
    "y": 11126.9,
    "dir": -5.34,
    "type": null,
    "id": 10
}, {
    "sid": 1155,
    "x": 3280.1,
    "y": 13621.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 1156,
    "x": 6507.6,
    "y": 12336.1,
    "dir": -1.46,
    "type": null,
    "id": 10
}, {
    "sid": 1157,
    "x": 6514.2,
    "y": 12504,
    "dir": 1.38,
    "type": null,
    "id": 10
}, {
    "sid": 1158,
    "x": 8487.5,
    "y": 11090.4,
    "dir": -2.63,
    "type": null,
    "id": 10
}, {
    "sid": 1159,
    "x": 8122.2,
    "y": 11077.6,
    "dir": 3.77,
    "type": null,
    "id": 10
}, {
    "sid": 1160,
    "x": 7943.1,
    "y": 11078.6,
    "dir": 0.65,
    "type": null,
    "id": 10
}, {
    "sid": 1161,
    "x": 7845.6,
    "y": 11088.2,
    "dir": -1.41,
    "type": null,
    "id": 10
}, {
    "sid": 1162,
    "x": 3602,
    "y": 12653.8,
    "dir": 2.04,
    "type": null,
    "id": 10
}, {
    "sid": 1163,
    "x": 8191.6,
    "y": 11008.1,
    "dir": 3.77,
    "type": null,
    "id": 10
}, {
    "sid": 1164,
    "x": 8399.9,
    "y": 11020.3,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1165,
    "x": 8011.7,
    "y": 11011.6,
    "dir": 0.66,
    "type": null,
    "id": 10
}, {
    "sid": 1166,
    "x": 3737.8,
    "y": 12711.3,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1167,
    "x": 8562.2,
    "y": 10986,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1168,
    "x": 1733,
    "y": 1551,
    "dir": 0,
    "type": 0
}, {
    "sid": 1169,
    "x": 8294.5,
    "y": 10960.8,
    "dir": 4.2,
    "type": null,
    "id": 10
}, {
    "sid": 1170,
    "x": 7790.2,
    "y": 10993.5,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1171,
    "x": 8631.7,
    "y": 10916.5,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1172,
    "x": 8742,
    "y": 10925.1,
    "dir": -0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1173,
    "x": 8456.8,
    "y": 10925.5,
    "dir": -0.17,
    "type": null,
    "id": 10
}, {
    "sid": 1174,
    "x": 8108.9,
    "y": 10931.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1175,
    "x": 7860.9,
    "y": 10923.7,
    "dir": -2.19,
    "type": null,
    "id": 10
}, {
    "sid": 1176,
    "x": 8921.5,
    "y": 10869.3,
    "dir": 0.71,
    "type": null,
    "id": 10
}, {
    "sid": 1177,
    "x": 7934.4,
    "y": 10854.4,
    "dir": -2.14,
    "type": null,
    "id": 10
}, {
    "sid": 1178,
    "x": 8395.2,
    "y": 10827.4,
    "dir": -0.56,
    "type": null,
    "id": 10
}, {
    "sid": 1179,
    "x": 8265.8,
    "y": 10771.2,
    "dir": -1.26,
    "type": null,
    "id": 10
}, {
    "sid": 1180,
    "x": 8031.2,
    "y": 10784.8,
    "dir": -1.85,
    "type": null,
    "id": 10
}, {
    "sid": 1181,
    "x": 8738.2,
    "y": 10811.4,
    "dir": -2.17,
    "type": null,
    "id": 10
}, {
    "sid": 1182,
    "x": 1714.2,
    "y": 1791.5,
    "dir": -1.9,
    "type": null,
    "id": 10
}, {
    "sid": 1183,
    "x": 8159.3,
    "y": 10764,
    "dir": -1.4,
    "type": null,
    "id": 10
}, {
    "sid": 1184,
    "x": 8811.9,
    "y": 10742,
    "dir": -2.13,
    "type": null,
    "id": 10
}, {
    "sid": 1185,
    "x": 8907.1,
    "y": 10673.6,
    "dir": -1.85,
    "type": null,
    "id": 10
}, {
    "sid": 1186,
    "x": 6328.4,
    "y": 11955.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 1187,
    "x": 6272.9,
    "y": 11851.4,
    "dir": -0.62,
    "type": null,
    "id": 10
}, {
    "sid": 1188,
    "x": 6168,
    "y": 11829.2,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1189,
    "x": 5380.3,
    "y": 11578.7,
    "dir": 0,
    "type": 1
}, {
    "sid": 1190,
    "x": 4988.3,
    "y": 11135.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 1191,
    "x": 5957.6,
    "y": 11729,
    "dir": -1.32,
    "type": null,
    "id": 10
}, {
    "sid": 1192,
    "x": 5847.4,
    "y": 11725.2,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1193,
    "x": 6088.1,
    "y": 11764.7,
    "dir": -0.81,
    "type": null,
    "id": 10
}, {
    "sid": 1194,
    "x": 5716.5,
    "y": 11746.9,
    "dir": -1.84,
    "type": null,
    "id": 10
}, {
    "sid": 1195,
    "x": 4728.3,
    "y": 10824.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 1196,
    "x": 4311.3,
    "y": 11148.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 1197,
    "x": 4337,
    "y": 11424,
    "dir": 0,
    "type": 2
}, {
    "sid": 1198,
    "x": 5615.8,
    "y": 11819.3,
    "dir": -2.13,
    "type": null,
    "id": 10
}, {
    "sid": 1199,
    "x": 1627.1,
    "y": 1841.3,
    "dir": -2.69,
    "type": null,
    "id": 10
}, {
    "sid": 1200,
    "x": 5847.4,
    "y": 11893.2,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1201,
    "x": 5536.9,
    "y": 11893.4,
    "dir": -2.19,
    "type": null,
    "id": 10
}, {
    "sid": 1202,
    "x": 6071,
    "y": 11928.6,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1203,
    "x": 5979.1,
    "y": 11900.9,
    "dir": 1.67,
    "type": null,
    "id": 10
}, {
    "sid": 1204,
    "x": 5758.6,
    "y": 11918.7,
    "dir": 0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1205,
    "x": 5690.6,
    "y": 11978.6,
    "dir": 0.66,
    "type": null,
    "id": 10
}, {
    "sid": 1206,
    "x": 5462.9,
    "y": 11966.7,
    "dir": -2.19,
    "type": null,
    "id": 10
}, {
    "sid": 1207,
    "x": 6071,
    "y": 12020.5,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1208,
    "x": 6168,
    "y": 11997.2,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1209,
    "x": 6239,
    "y": 12072.5,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1210,
    "x": 3830.1,
    "y": 11496.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 1211,
    "x": 5617.2,
    "y": 12050,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1212,
    "x": 5387.6,
    "y": 12041.6,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1213,
    "x": 6070.5,
    "y": 12121.9,
    "dir": 3.03,
    "type": null,
    "id": 10
}, {
    "sid": 1214,
    "x": 5543.3,
    "y": 12123.6,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1215,
    "x": 1219,
    "y": 1782,
    "dir": 0,
    "type": 2
}, {
    "sid": 1216,
    "x": 5310,
    "y": 12150.4,
    "dir": -2.63,
    "type": null,
    "id": 10
}, {
    "sid": 1217,
    "x": 6236.4,
    "y": 12181.7,
    "dir": -6.07,
    "type": null,
    "id": 10
}, {
    "sid": 1218,
    "x": 5469.5,
    "y": 12197.3,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1219,
    "x": 840,
    "y": 1444,
    "dir": 0,
    "type": 0
}, {
    "sid": 1220,
    "x": 3747.1,
    "y": 10772.6,
    "dir": 0.61,
    "type": null,
    "id": 10
}, {
    "sid": 1221,
    "x": 897.2,
    "y": 612,
    "dir": -1.93,
    "type": null,
    "id": 22
}, {
    "sid": 1222,
    "x": 734,
    "y": 886,
    "dir": 0,
    "type": 0
}, {
    "sid": 1223,
    "x": 3673.9,
    "y": 10847.9,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1224,
    "x": 626,
    "y": 1279,
    "dir": 0,
    "type": 0
}, {
    "sid": 1225,
    "x": 791.2,
    "y": 1591.5,
    "dir": -0.33,
    "type": null,
    "id": 10
}, {
    "sid": 1226,
    "x": 791.3,
    "y": 1782.5,
    "dir": -0.33,
    "type": null,
    "id": 10
}, {
    "sid": 1227,
    "x": 710.8,
    "y": 1534.1,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 1228,
    "x": 710.9,
    "y": 1725,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 1229,
    "x": 3486.1,
    "y": 11036.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 1230,
    "x": 630.3,
    "y": 1591.7,
    "dir": 3.47,
    "type": null,
    "id": 10
}, {
    "sid": 1231,
    "x": 630.4,
    "y": 1782.6,
    "dir": 3.47,
    "type": null,
    "id": 10
}, {
    "sid": 1232,
    "x": 3517.1,
    "y": 11766.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 1233,
    "x": 283,
    "y": 929,
    "dir": 0,
    "type": 0
}, {
    "sid": 1234,
    "x": 3598.8,
    "y": 10923.3,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1235,
    "x": 3518.6,
    "y": 10765.9,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1236,
    "x": 57,
    "y": 370,
    "dir": 0,
    "type": 0
}, {
    "sid": 1237,
    "x": 3450.6,
    "y": 10828.9,
    "dir": -2.09,
    "type": null,
    "id": 10
}, {
    "sid": 1238,
    "x": 3443,
    "y": 11150.1,
    "dir": 5.85,
    "type": null,
    "id": 10
}, {
    "sid": 1239,
    "x": 3456.9,
    "y": 11268.4,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1240,
    "x": 3410.8,
    "y": 12238.7,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1241,
    "x": 3363.4,
    "y": 10857.9,
    "dir": -2,
    "type": null,
    "id": 10
}, {
    "sid": 1242,
    "x": 3372.9,
    "y": 11357,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 1243,
    "x": 5289.5,
    "y": 12274.1,
    "dir": -2.93,
    "type": null,
    "id": 10
}, {
    "sid": 1244,
    "x": 3337.5,
    "y": 12165.4,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1245,
    "x": 3248.1,
    "y": 11227.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 1246,
    "x": 5455.4,
    "y": 12334.5,
    "dir": 6.17,
    "type": null,
    "id": 10
}, {
    "sid": 1247,
    "x": 3484.4,
    "y": 12312,
    "dir": -0.64,
    "type": null,
    "id": 10
}, {
    "sid": 1248,
    "x": 3402.3,
    "y": 12349,
    "dir": 0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1249,
    "x": 3263.7,
    "y": 12091.6,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1250,
    "x": 3283,
    "y": 10962.2,
    "dir": -2.59,
    "type": null,
    "id": 10
}, {
    "sid": 1251,
    "x": 3268.4,
    "y": 11075.2,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1252,
    "x": 5287,
    "y": 12382.4,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1253,
    "x": 3559.6,
    "y": 12387.1,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1254,
    "x": 3255.1,
    "y": 12201.8,
    "dir": 0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1255,
    "x": 4689,
    "y": 12444,
    "dir": 0,
    "type": 3
}, {
    "sid": 1256,
    "x": 3171,
    "y": 12349,
    "dir": 0,
    "type": 2
}, {
    "sid": 1257,
    "x": 3190,
    "y": 12018.1,
    "dir": -0.62,
    "type": null,
    "id": 10
}, {
    "sid": 1258,
    "x": 3144.9,
    "y": 12210.4,
    "dir": 2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1259,
    "x": 3116,
    "y": 11943.9,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1260,
    "x": 2935.1,
    "y": 11509.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 1261,
    "x": 3069.6,
    "y": 12135.3,
    "dir": 2.22,
    "type": null,
    "id": 10
}, {
    "sid": 1262,
    "x": 2997.2,
    "y": 12062.7,
    "dir": 2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1263,
    "x": 2979.6,
    "y": 11888.6,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1264,
    "x": 2844.1,
    "y": 12415.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 1265,
    "x": 2880.6,
    "y": 12025.1,
    "dir": 1.93,
    "type": null,
    "id": 10
}, {
    "sid": 1266,
    "x": 2860.9,
    "y": 11823.7,
    "dir": -1.13,
    "type": null,
    "id": 10
}, {
    "sid": 1267,
    "x": 3367.2,
    "y": 12432.4,
    "dir": 2.19,
    "type": null,
    "id": 10
}, {
    "sid": 1268,
    "x": 3632,
    "y": 12457.5,
    "dir": -0.66,
    "type": null,
    "id": 10
}, {
    "sid": 1269,
    "x": 2776.4,
    "y": 11979.1,
    "dir": 1.56,
    "type": null,
    "id": 10
}, {
    "sid": 1270,
    "x": 2684.3,
    "y": 11974,
    "dir": 1.44,
    "type": null,
    "id": 10
}, {
    "sid": 1271,
    "x": 2633.3,
    "y": 11805.8,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1272,
    "x": 2582,
    "y": 11973.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1273,
    "x": 2548.8,
    "y": 11359.5,
    "dir": -5.34,
    "type": null,
    "id": 10
}, {
    "sid": 1274,
    "x": 2604.5,
    "y": 11221.7,
    "dir": -5.98,
    "type": null,
    "id": 10
}, {
    "sid": 1275,
    "x": 2611.9,
    "y": 11109.9,
    "dir": -6.09,
    "type": null,
    "id": 10
}, {
    "sid": 1276,
    "x": 2612.5,
    "y": 11002.8,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1277,
    "x": 2434.1,
    "y": 12130.7,
    "dir": 0,
    "type": 1
}, {
    "sid": 1278,
    "x": 2476.4,
    "y": 11432.1,
    "dir": -5.36,
    "type": null,
    "id": 10
}, {
    "sid": 1279,
    "x": 2409.2,
    "y": 12028.2,
    "dir": 1.14,
    "type": null,
    "id": 7
}, {
    "sid": 1280,
    "x": 2430,
    "y": 11240.7,
    "dir": 3.77,
    "type": null,
    "id": 10
}, {
    "sid": 1281,
    "x": 2444.1,
    "y": 11103.5,
    "dir": 3.03,
    "type": null,
    "id": 10
}, {
    "sid": 1282,
    "x": 2444.5,
    "y": 11002.8,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1283,
    "x": 2466.2,
    "y": 10872.4,
    "dir": 3.4,
    "type": null,
    "id": 10
}, {
    "sid": 1284,
    "x": 2402.3,
    "y": 11506.5,
    "dir": -5.36,
    "type": null,
    "id": 10
}, {
    "sid": 1285,
    "x": 2356,
    "y": 11314.9,
    "dir": 3.76,
    "type": null,
    "id": 10
}, {
    "sid": 1286,
    "x": 2330.5,
    "y": 11580.1,
    "dir": -5.37,
    "type": null,
    "id": 10
}, {
    "sid": 1287,
    "x": 2164.1,
    "y": 10986.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 1288,
    "x": 2281.9,
    "y": 11389.4,
    "dir": 3.76,
    "type": null,
    "id": 10
}, {
    "sid": 1289,
    "x": 2244.7,
    "y": 11685.2,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1290,
    "x": 3191.8,
    "y": 1126.5,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1291,
    "x": 3247.7,
    "y": 1207.8,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1292,
    "x": 3247.7,
    "y": 1045.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1293,
    "x": 4539.3,
    "y": 320,
    "dir": 0,
    "type": 0
}, {
    "sid": 1294,
    "x": 2235.7,
    "y": 10907.9,
    "dir": 0.61,
    "type": null,
    "id": 10
}, {
    "sid": 1295,
    "x": 2199,
    "y": 11429.1,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1296,
    "x": 2140.5,
    "y": 10848.5,
    "dir": -0.66,
    "type": null,
    "id": 10
}, {
    "sid": 1297,
    "x": 2063.8,
    "y": 11027.7,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1298,
    "x": 2101,
    "y": 11513.1,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1299,
    "x": 2086.6,
    "y": 11989.3,
    "dir": 0.61,
    "type": null,
    "id": 10
}, {
    "sid": 1300,
    "x": 2076.7,
    "y": 11832.7,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1301,
    "x": 2076.7,
    "y": 11735.6,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1302,
    "x": 3356.6,
    "y": 1212.7,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1303,
    "x": 3356.6,
    "y": 1050.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1304,
    "x": 2032.2,
    "y": 10826.4,
    "dir": -2.08,
    "type": null,
    "id": 10
}, {
    "sid": 1305,
    "x": 2055.2,
    "y": 10917.4,
    "dir": -0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1306,
    "x": 2025.7,
    "y": 11375.8,
    "dir": -2.58,
    "type": null,
    "id": 10
}, {
    "sid": 1307,
    "x": 1970.9,
    "y": 11001.6,
    "dir": -0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1308,
    "x": 3410.7,
    "y": 1131.5,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1309,
    "x": 3466.5,
    "y": 1212.7,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1310,
    "x": 3466.5,
    "y": 1050.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1311,
    "x": 1979.4,
    "y": 11111.9,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1312,
    "x": 1965.8,
    "y": 11872.6,
    "dir": -2.22,
    "type": null,
    "id": 10
}, {
    "sid": 1313,
    "x": 3521.7,
    "y": 1131.5,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1314,
    "x": 3577.5,
    "y": 1212.7,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1315,
    "x": 3577.5,
    "y": 1050.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1316,
    "x": 1945,
    "y": 10908.9,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1317,
    "x": 11144.4,
    "y": 6208.2,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1318,
    "x": 3375.7,
    "y": 9443.5,
    "dir": -2.95,
    "type": null,
    "id": 10
}, {
    "sid": 1319,
    "x": 1934.6,
    "y": 11386,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1320,
    "x": 1934.6,
    "y": 11218,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1321,
    "x": 3632.8,
    "y": 1131.5,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1322,
    "x": 3688.6,
    "y": 1212.7,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1323,
    "x": 3688.6,
    "y": 1050.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1324,
    "x": 1918,
    "y": 11981.2,
    "dir": -2.83,
    "type": null,
    "id": 10
}, {
    "sid": 1325,
    "x": 1860.6,
    "y": 10993.1,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1326,
    "x": 1864,
    "y": 11161.7,
    "dir": 1.26,
    "type": null,
    "id": 10
}, {
    "sid": 1327,
    "x": 69.9,
    "y": 7813.8,
    "dir": 2.36,
    "type": null,
    "id": 10
}, {
    "sid": 1328,
    "x": 10316.7,
    "y": 6275.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1329,
    "x": 1775.1,
    "y": 11210.3,
    "dir": 1.12,
    "type": null,
    "id": 10
}, {
    "sid": 1330,
    "x": 11107.8,
    "y": 6293.7,
    "dir": -2.29,
    "type": null,
    "id": 10
}, {
    "sid": 1331,
    "x": 3744.7,
    "y": 1131.5,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1332,
    "x": 3800.5,
    "y": 1212.7,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1333,
    "x": 3800.5,
    "y": 1050.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1334,
    "x": 1749.8,
    "y": 11320.6,
    "dir": 2.87,
    "type": null,
    "id": 10
}, {
    "sid": 1335,
    "x": 1733.3,
    "y": 11048.3,
    "dir": -2.08,
    "type": null,
    "id": 10
}, {
    "sid": 1336,
    "x": 1640,
    "y": 10978.7,
    "dir": 0,
    "type": 1
}, {
    "sid": 1337,
    "x": 5199.3,
    "y": 1762,
    "dir": 0,
    "type": 1
}, {
    "sid": 1338,
    "x": 10986.3,
    "y": 6297.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1339,
    "x": 1672.9,
    "y": 11191.2,
    "dir": -1.33,
    "type": null,
    "id": 10
}, {
    "sid": 1340,
    "x": 3855,
    "y": 1131.5,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1341,
    "x": 3910.8,
    "y": 1212.7,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1342,
    "x": 3910.8,
    "y": 1050.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1343,
    "x": 1661.1,
    "y": 11362.8,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1344,
    "x": 1631.7,
    "y": 11106.4,
    "dir": -2.13,
    "type": null,
    "id": 10
}, {
    "sid": 1345,
    "x": 10782.6,
    "y": 6297.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1346,
    "x": 5473.3,
    "y": 1015,
    "dir": 0,
    "type": 0
}, {
    "sid": 1347,
    "x": 1575.7,
    "y": 11222.5,
    "dir": -2.83,
    "type": null,
    "id": 10
}, {
    "sid": 1348,
    "x": 1474,
    "y": 12196,
    "dir": 0,
    "type": 2
}, {
    "sid": 1349,
    "x": 3965.3,
    "y": 1131.5,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1350,
    "x": 4021.1,
    "y": 1212.7,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1351,
    "x": 4021.1,
    "y": 1050.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1352,
    "x": 1886,
    "y": 12428.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 1353,
    "x": 2143.1,
    "y": 12426.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 1354,
    "x": 10537.8,
    "y": 6297.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1355,
    "x": 103.6,
    "y": 7660.9,
    "dir": 3.77,
    "type": null,
    "id": 10
}, {
    "sid": 1356,
    "x": 991,
    "y": 11484.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 1357,
    "x": 1611,
    "y": 12531.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 1358,
    "x": 3375.2,
    "y": 9550.4,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1359,
    "x": 4077.9,
    "y": 1131.5,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1360,
    "x": 4133.8,
    "y": 1212.7,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1361,
    "x": 4133.8,
    "y": 1050.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1362,
    "x": 3440.8,
    "y": 12505.9,
    "dir": 2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1363,
    "x": 11294.9,
    "y": 6317.6,
    "dir": 0.25,
    "type": null,
    "id": 10
}, {
    "sid": 1364,
    "x": 10415.3,
    "y": 6297.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1365,
    "x": 888,
    "y": 12195.8,
    "dir": -5.97,
    "type": null,
    "id": 12
}, {
    "sid": 1366,
    "x": 878.5,
    "y": 12075.6,
    "dir": -0.24,
    "type": null,
    "id": 12
}, {
    "sid": 1367,
    "x": 11058.2,
    "y": 6381.7,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1368,
    "x": 832.7,
    "y": 12313.3,
    "dir": -5.29,
    "type": null,
    "id": 12
}, {
    "sid": 1369,
    "x": 4188.2,
    "y": 1131.5,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1370,
    "x": 4244,
    "y": 1212.7,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1371,
    "x": 4244,
    "y": 1050.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1372,
    "x": 10936.5,
    "y": 6381.7,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1373,
    "x": 10691,
    "y": 6381.7,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1374,
    "x": 5593.7,
    "y": 1520.6,
    "dir": -1.97,
    "type": null,
    "id": 22
}, {
    "sid": 1375,
    "x": 820.7,
    "y": 11990.6,
    "dir": -0.54,
    "type": null,
    "id": 12
}, {
    "sid": 1376,
    "x": 810.1,
    "y": 11516.8,
    "dir": -5.74,
    "type": null,
    "id": 12
}, {
    "sid": 1377,
    "x": 784.3,
    "y": 11901.4,
    "dir": -6.18,
    "type": null,
    "id": 12
}, {
    "sid": 1378,
    "x": 782.5,
    "y": 11785.2,
    "dir": -6.13,
    "type": null,
    "id": 12
}, {
    "sid": 1379,
    "x": 828,
    "y": 10171,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1380,
    "x": 4299.3,
    "y": 1131.5,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1381,
    "x": 4355.1,
    "y": 1212.7,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1382,
    "x": 4355.1,
    "y": 1050.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1383,
    "x": 10209.6,
    "y": 6007.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1384,
    "x": 11236.6,
    "y": 6401.6,
    "dir": 0.54,
    "type": null,
    "id": 10
}, {
    "sid": 1385,
    "x": 5814.3,
    "y": 984,
    "dir": 0,
    "type": 1
}, {
    "sid": 1386,
    "x": 782.5,
    "y": 11663.3,
    "dir": -6.13,
    "type": null,
    "id": 12
}, {
    "sid": 1387,
    "x": 807.3,
    "y": 11353,
    "dir": -0.21,
    "type": null,
    "id": 12
}, {
    "sid": 1388,
    "x": 777.6,
    "y": 11227.6,
    "dir": -0.31,
    "type": null,
    "id": 12
}, {
    "sid": 1389,
    "x": 12970.9,
    "y": 6516.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1390,
    "x": 747.2,
    "y": 12372.7,
    "dir": -4.97,
    "type": null,
    "id": 12
}, {
    "sid": 1391,
    "x": 4466.6,
    "y": 1131.5,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1392,
    "x": 4522.5,
    "y": 1212.7,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1393,
    "x": 4522.5,
    "y": 1050.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1394,
    "x": 4632.5,
    "y": 1131.5,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1395,
    "x": 4688.3,
    "y": 1212.7,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1396,
    "x": 4688.3,
    "y": 1050.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1397,
    "x": 710.4,
    "y": 12126.6,
    "dir": 2.35,
    "type": null,
    "id": 12
}, {
    "sid": 1398,
    "x": 3375.2,
    "y": 9655.9,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1399,
    "x": 11119.7,
    "y": 6549.4,
    "dir": 0,
    "type": 1
}, {
    "sid": 1400,
    "x": 11119.1,
    "y": 6458.3,
    "dir": 1.26,
    "type": null,
    "id": 10
}, {
    "sid": 1401,
    "x": 10986.3,
    "y": 6465.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1402,
    "x": 10864.6,
    "y": 6465.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1403,
    "x": 702.8,
    "y": 11552.7,
    "dir": 1.96,
    "type": null,
    "id": 12
}, {
    "sid": 1404,
    "x": 718.8,
    "y": 11146.6,
    "dir": -0.56,
    "type": null,
    "id": 12
}, {
    "sid": 1405,
    "x": 710.1,
    "y": 11050,
    "dir": -6.15,
    "type": null,
    "id": 12
}, {
    "sid": 1406,
    "x": 728.8,
    "y": 10954.8,
    "dir": -5.94,
    "type": null,
    "id": 12
}, {
    "sid": 1407,
    "x": 679.6,
    "y": 12218,
    "dir": 4.58,
    "type": null,
    "id": 12
}, {
    "sid": 1408,
    "x": 696.6,
    "y": 11858.8,
    "dir": 1.57,
    "type": null,
    "id": 12
}, {
    "sid": 1409,
    "x": 696.6,
    "y": 11736.9,
    "dir": 1.57,
    "type": null,
    "id": 12
}, {
    "sid": 1410,
    "x": 10741.5,
    "y": 6465.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1411,
    "x": 4744.4,
    "y": 1131.5,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1412,
    "x": 4800.2,
    "y": 1212.7,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1413,
    "x": 4800.2,
    "y": 1050.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1414,
    "x": 4855.4,
    "y": 1131.5,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1415,
    "x": 4911.2,
    "y": 1212.7,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1416,
    "x": 4911.2,
    "y": 1050.3,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1417,
    "x": 10619.1,
    "y": 6465.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1418,
    "x": 10496.6,
    "y": 6465.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1419,
    "x": 10397.9,
    "y": 6469.1,
    "dir": 1.18,
    "type": null,
    "id": 10
}, {
    "sid": 1420,
    "x": 650.8,
    "y": 11452.1,
    "dir": 3.37,
    "type": null,
    "id": 12
}, {
    "sid": 1421,
    "x": 550,
    "y": 12428,
    "dir": 0,
    "type": 2
}, {
    "sid": 1422,
    "x": 12028.7,
    "y": 6672.4,
    "dir": 0,
    "type": 1
}, {
    "sid": 1423,
    "x": 12866.9,
    "y": 6762.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1424,
    "x": 604.1,
    "y": 12297.6,
    "dir": -3.06,
    "type": null,
    "id": 12
}, {
    "sid": 1425,
    "x": 629.8,
    "y": 12011.9,
    "dir": 2.64,
    "type": null,
    "id": 12
}, {
    "sid": 1426,
    "x": 612.6,
    "y": 11910,
    "dir": 2.94,
    "type": null,
    "id": 12
}, {
    "sid": 1427,
    "x": 632.4,
    "y": 11356.3,
    "dir": 2.82,
    "type": null,
    "id": 12
}, {
    "sid": 1428,
    "x": 10646,
    "y": 6917,
    "dir": 0,
    "type": 2
}, {
    "sid": 1429,
    "x": 10271.7,
    "y": 6483.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1430,
    "x": 10191.2,
    "y": 6315.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1431,
    "x": 10150.9,
    "y": 6483.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1432,
    "x": 10070.4,
    "y": 6315.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1433,
    "x": 12141,
    "y": 7483,
    "dir": 0,
    "type": 2
}, {
    "sid": 1434,
    "x": 9763.6,
    "y": 5946.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1435,
    "x": 10029.1,
    "y": 6483.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1436,
    "x": 9948.4,
    "y": 6315.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1437,
    "x": 9907.2,
    "y": 6483.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1438,
    "x": 9825.9,
    "y": 6315.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1439,
    "x": 9785.2,
    "y": 6483.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1440,
    "x": 9703.4,
    "y": 6315.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1441,
    "x": 9662.8,
    "y": 6483.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1442,
    "x": 9556.6,
    "y": 6732.4,
    "dir": 0,
    "type": 1
}, {
    "sid": 1443,
    "x": 9582,
    "y": 6315.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1444,
    "x": 9541.3,
    "y": 6483.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1445,
    "x": 9449.6,
    "y": 6100.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 1446,
    "x": 9460,
    "y": 6315.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1447,
    "x": 9327.6,
    "y": 5991.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 1448,
    "x": 9338,
    "y": 6315.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1449,
    "x": 9072.6,
    "y": 6376.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1450,
    "x": 9209.7,
    "y": 6412.1,
    "dir": -0.81,
    "type": null,
    "id": 10
}, {
    "sid": 1451,
    "x": 9179.8,
    "y": 6554.8,
    "dir": 0.87,
    "type": null,
    "id": 10
}, {
    "sid": 1452,
    "x": 9104,
    "y": 7139,
    "dir": 0,
    "type": 2
}, {
    "sid": 1453,
    "x": 9074.5,
    "y": 6584.2,
    "dir": 1.39,
    "type": null,
    "id": 10
}, {
    "sid": 1454,
    "x": 9033.3,
    "y": 6500.7,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1455,
    "x": 8961.4,
    "y": 6416.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1456,
    "x": 8961.4,
    "y": 6584.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1457,
    "x": 8912.5,
    "y": 6500.7,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1458,
    "x": 8840.5,
    "y": 6416.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1459,
    "x": 8840.5,
    "y": 6584.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1460,
    "x": 8718.7,
    "y": 6416.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1461,
    "x": 8420,
    "y": 6941,
    "dir": 0,
    "type": 2
}, {
    "sid": 1462,
    "x": 8286.1,
    "y": 6426.3,
    "dir": 530.4029999999561,
    "type": null,
    "id": 9
}, {
    "sid": 1463,
    "x": 7940.4,
    "y": 5392.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1464,
    "x": 8677.3,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1465,
    "x": 8567.6,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1466,
    "x": 8458.4,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1467,
    "x": 8348.7,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1468,
    "x": 8239.5,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1469,
    "x": 8130.3,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1470,
    "x": 9964,
    "y": 5423.3,
    "dir": 1.24,
    "type": null,
    "id": 10
}, {
    "sid": 1471,
    "x": 9842.6,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1472,
    "x": 9733,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1473,
    "x": 9624.3,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1474,
    "x": 9515.1,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1475,
    "x": 9405.9,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1476,
    "x": 9296.7,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1477,
    "x": 9186.9,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1478,
    "x": 9005,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1479,
    "x": 8895.2,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1480,
    "x": 8786.5,
    "y": 5430.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1481,
    "x": 8639.5,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1482,
    "x": 8530.4,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1483,
    "x": 8420.7,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1484,
    "x": 8311.4,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1485,
    "x": 8202.2,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1486,
    "x": 8084.8,
    "y": 5352.1,
    "dir": 0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1487,
    "x": 7824.5,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1488,
    "x": 10072.2,
    "y": 5374.5,
    "dir": 0.61,
    "type": null,
    "id": 10
}, {
    "sid": 1489,
    "x": 9914.6,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1490,
    "x": 9805,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1491,
    "x": 9696.3,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1492,
    "x": 9587.1,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1493,
    "x": 9477.9,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1494,
    "x": 9368.6,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1495,
    "x": 9258.9,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1496,
    "x": 9077,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1497,
    "x": 8967.2,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1498,
    "x": 8858.5,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1499,
    "x": 8749.3,
    "y": 5346.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1500,
    "x": 8677.3,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1501,
    "x": 8567.6,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1502,
    "x": 8458.4,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1503,
    "x": 8348.7,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1504,
    "x": 8239.5,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1505,
    "x": 8130.3,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1506,
    "x": 9842.6,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1507,
    "x": 9733,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1508,
    "x": 9624.3,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1509,
    "x": 9515.1,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1510,
    "x": 9405.9,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1511,
    "x": 9296.7,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1512,
    "x": 9186.9,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1513,
    "x": 9005,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1514,
    "x": 8895.2,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1515,
    "x": 8786.5,
    "y": 5262.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1516,
    "x": 7860.3,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1517,
    "x": 9951.2,
    "y": 5257.9,
    "dir": -2.22,
    "type": null,
    "id": 10
}, {
    "sid": 1518,
    "x": 8019.4,
    "y": 5193.2,
    "dir": -1.03,
    "type": null,
    "id": 10
}, {
    "sid": 1519,
    "x": 7928.8,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1520,
    "x": 7824.5,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1521,
    "x": 7751.3,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1522,
    "x": 7715.1,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1523,
    "x": 7715.1,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1524,
    "x": 7642.1,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1525,
    "x": 7606,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1526,
    "x": 7606,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1527,
    "x": 7532.3,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1528,
    "x": 7497.3,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1529,
    "x": 7497.3,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1530,
    "x": 3385.6,
    "y": 9323.7,
    "dir": -2.81,
    "type": null,
    "id": 10
}, {
    "sid": 1531,
    "x": 7387.6,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1532,
    "x": 7387.6,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1533,
    "x": 7423.6,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1534,
    "x": 3436.2,
    "y": 9796.6,
    "dir": -3.62,
    "type": null,
    "id": 10
}, {
    "sid": 1535,
    "x": 7278.8,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1536,
    "x": 7278.8,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1537,
    "x": 7313.9,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1538,
    "x": 846.9,
    "y": 9998.4,
    "dir": -0.02,
    "type": null,
    "id": 15
}, {
    "sid": 1539,
    "x": 7205.2,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1540,
    "x": 3481.2,
    "y": 9268.1,
    "dir": -1.39,
    "type": null,
    "id": 10
}, {
    "sid": 1541,
    "x": 7169.1,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1542,
    "x": 7169.1,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1543,
    "x": 7059.9,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1544,
    "x": 7059.9,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1545,
    "x": 7095.4,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1546,
    "x": 6950.7,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1547,
    "x": 6950.7,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1548,
    "x": 6985.7,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1549,
    "x": 6841,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1550,
    "x": 6841,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1551,
    "x": 6876.5,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1552,
    "x": 3497,
    "y": 9730.1,
    "dir": -2.21,
    "type": null,
    "id": 10
}, {
    "sid": 1553,
    "x": 11905.7,
    "y": 8410.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 1554,
    "x": 6771.4,
    "y": 6558.4,
    "dir": 0,
    "type": 1
}, {
    "sid": 1555,
    "x": 6731.8,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1556,
    "x": 6731.8,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1557,
    "x": 6766.8,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1558,
    "x": 6622.1,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1559,
    "x": 6622.1,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1560,
    "x": 6657.7,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1561,
    "x": 6548.5,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1562,
    "x": 6512.9,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1563,
    "x": 6512.9,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1564,
    "x": 6390.4,
    "y": 5631.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 1565,
    "x": 6439.2,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1566,
    "x": 6403.7,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1567,
    "x": 6403.7,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1568,
    "x": 6171.4,
    "y": 6133.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1569,
    "x": 6294,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1570,
    "x": 6294,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1571,
    "x": 6330.1,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1572,
    "x": 6220.8,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1573,
    "x": 6185.3,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1574,
    "x": 6185.3,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1575,
    "x": 6111.1,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1576,
    "x": 6075.5,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1577,
    "x": 6075.5,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1578,
    "x": 5966.8,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1579,
    "x": 5966.8,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1580,
    "x": 6002.3,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1581,
    "x": 5893.2,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1582,
    "x": 5857.1,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1583,
    "x": 5857.1,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1584,
    "x": 5783.9,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1585,
    "x": 5748.3,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1586,
    "x": 5748.3,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1587,
    "x": 5508.3,
    "y": 5415.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 1588,
    "x": 5526.3,
    "y": 5089.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1589,
    "x": 5639.1,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1590,
    "x": 5639.1,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1591,
    "x": 5674.2,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1592,
    "x": 5565,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1593,
    "x": 5457.1,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1594,
    "x": 5457.1,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1595,
    "x": 5418.4,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1596,
    "x": 5346.4,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1597,
    "x": 5346.4,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1598,
    "x": 5307.8,
    "y": 5261.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1599,
    "x": 5072.3,
    "y": 5807.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1600,
    "x": 5235.9,
    "y": 5177.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1601,
    "x": 5235.9,
    "y": 5345.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1602,
    "x": 5176.5,
    "y": 5270,
    "dir": -0.51,
    "type": null,
    "id": 10
}, {
    "sid": 1603,
    "x": 5070.3,
    "y": 5225.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 1604,
    "x": 5098.5,
    "y": 5398,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1605,
    "x": 5007,
    "y": 5292.2,
    "dir": 0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1606,
    "x": 4863.3,
    "y": 5356.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1607,
    "x": 4992.9,
    "y": 5382,
    "dir": 1.87,
    "type": null,
    "id": 10
}, {
    "sid": 1608,
    "x": 4990.2,
    "y": 5156.7,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1609,
    "x": 5259.3,
    "y": 6711.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1610,
    "x": 4847.6,
    "y": 5251.3,
    "dir": 2.18,
    "type": null,
    "id": 10
}, {
    "sid": 1611,
    "x": 6041.3,
    "y": 6778.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1612,
    "x": 6489.4,
    "y": 6826.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1613,
    "x": 4515.3,
    "y": 6759.4,
    "dir": 0,
    "type": 1
}, {
    "sid": 1614,
    "x": 3956.1,
    "y": 5837.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1615,
    "x": 3875,
    "y": 14110,
    "dir": 0,
    "type": 2
}, {
    "sid": 1616,
    "x": 3520.1,
    "y": 6253.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1617,
    "x": 3568.1,
    "y": 5669.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 1618,
    "x": 3517.1,
    "y": 5171.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1619,
    "x": 588.8,
    "y": 11259.2,
    "dir": 2.27,
    "type": null,
    "id": 12
}, {
    "sid": 1620,
    "x": 4783.9,
    "y": 5165.1,
    "dir": 2.65,
    "type": null,
    "id": 10
}, {
    "sid": 1621,
    "x": 4852,
    "y": 5104.3,
    "dir": 1.54,
    "type": null,
    "id": 10
}, {
    "sid": 1622,
    "x": 4181.3,
    "y": 4921.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1623,
    "x": 4935.4,
    "y": 5063,
    "dir": -6.19,
    "type": null,
    "id": 10
}, {
    "sid": 1624,
    "x": 4767.7,
    "y": 5072.5,
    "dir": 2.93,
    "type": null,
    "id": 10
}, {
    "sid": 1625,
    "x": 3300,
    "y": 5279,
    "dir": 0,
    "type": 2
}, {
    "sid": 1626,
    "x": 4933.7,
    "y": 4959.8,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1627,
    "x": 4765.7,
    "y": 4959.8,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1628,
    "x": 4849.7,
    "y": 4994.9,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 1629,
    "x": 3016.1,
    "y": 5012.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1630,
    "x": 3095,
    "y": 5326,
    "dir": 0,
    "type": 2
}, {
    "sid": 1631,
    "x": 2851.1,
    "y": 5904.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1632,
    "x": 9980,
    "y": 9592,
    "dir": 0,
    "type": 2
}, {
    "sid": 1633,
    "x": 12288.1,
    "y": 13659.3,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1634,
    "x": 3838,
    "y": 4643.8,
    "dir": 1.02,
    "type": null,
    "id": 15
}, {
    "sid": 1635,
    "x": 4627.3,
    "y": 4479.8,
    "dir": 0,
    "type": null,
    "id": 15
}, {
    "sid": 1636,
    "x": 2582.1,
    "y": 5113.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1637,
    "x": 2431.1,
    "y": 4700.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1638,
    "x": 1987.1,
    "y": 4113.4,
    "dir": 5.8,
    "type": null,
    "id": 10
}, {
    "sid": 1639,
    "x": 1977.2,
    "y": 4243.1,
    "dir": -0.34,
    "type": null,
    "id": 10
}, {
    "sid": 1640,
    "x": 1932.5,
    "y": 4343.1,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1641,
    "x": 1881.1,
    "y": 3679.8,
    "dir": 5.74,
    "type": null,
    "id": 10
}, {
    "sid": 1642,
    "x": 1899.2,
    "y": 3771.1,
    "dir": 6.04,
    "type": null,
    "id": 10
}, {
    "sid": 1643,
    "x": 1901.9,
    "y": 3886.9,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1644,
    "x": 1901.9,
    "y": 3996,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1645,
    "x": 1817.9,
    "y": 3851.3,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 1646,
    "x": 1827.8,
    "y": 4488.9,
    "dir": 0.92,
    "type": null,
    "id": 10
}, {
    "sid": 1647,
    "x": 1796.1,
    "y": 4576.9,
    "dir": 6.21,
    "type": null,
    "id": 10
}, {
    "sid": 1648,
    "x": 1776.5,
    "y": 4106.2,
    "dir": -3.61,
    "type": null,
    "id": 10
}, {
    "sid": 1649,
    "x": 1772,
    "y": 4726.2,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1650,
    "x": 1739.3,
    "y": 4813.2,
    "dir": 0.35,
    "type": null,
    "id": 10
}, {
    "sid": 1651,
    "x": 1733.6,
    "y": 3816.9,
    "dir": -3.01,
    "type": null,
    "id": 10
}, {
    "sid": 1652,
    "x": 1733.9,
    "y": 3960.1,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1653,
    "x": 1718,
    "y": 4498.6,
    "dir": -1.49,
    "type": null,
    "id": 10
}, {
    "sid": 1654,
    "x": 1666.7,
    "y": 3744,
    "dir": -4.53,
    "type": null,
    "id": 10
}, {
    "sid": 1655,
    "x": 1650,
    "y": 4438.6,
    "dir": -2.59,
    "type": null,
    "id": 10
}, {
    "sid": 1656,
    "x": 1688.1,
    "y": 4654.2,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 1657,
    "x": 1628.6,
    "y": 4563.7,
    "dir": -2.91,
    "type": null,
    "id": 10
}, {
    "sid": 1658,
    "x": 1604.1,
    "y": 4726.2,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1659,
    "x": 1473.9,
    "y": 3682.1,
    "dir": -3.66,
    "type": null,
    "id": 10
}, {
    "sid": 1660,
    "x": 734,
    "y": 3857,
    "dir": 0,
    "type": 2
}, {
    "sid": 1661,
    "x": 235,
    "y": 3002.1,
    "dir": 0,
    "type": 0
}, {
    "sid": 1662,
    "x": 1002,
    "y": 4426.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 1663,
    "x": 66,
    "y": 4527.3,
    "dir": 0,
    "type": 1
}, {
    "sid": 1664,
    "x": 1499.6,
    "y": 4719.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1665,
    "x": 1407.4,
    "y": 4719.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1666,
    "x": 1274.5,
    "y": 4719.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1667,
    "x": 1140.2,
    "y": 4719.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1668,
    "x": 1046.2,
    "y": 4719.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1669,
    "x": 945.8,
    "y": 4719.4,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1670,
    "x": 831.1,
    "y": 4729.8,
    "dir": -1.72,
    "type": null,
    "id": 10
}, {
    "sid": 1671,
    "x": 1346.4,
    "y": 4803.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1672,
    "x": 721.9,
    "y": 4801.8,
    "dir": -2.13,
    "type": null,
    "id": 10
}, {
    "sid": 1673,
    "x": 1596,
    "y": 4887.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1674,
    "x": 1499.6,
    "y": 4887.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1675,
    "x": 1407.4,
    "y": 4887.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1676,
    "x": 385,
    "y": 4989.3,
    "dir": 0,
    "type": 0
}, {
    "sid": 1677,
    "x": 1237.9,
    "y": 4887.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1678,
    "x": 1140.2,
    "y": 4887.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1679,
    "x": 1046.2,
    "y": 4887.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1680,
    "x": 945.8,
    "y": 4887.4,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1681,
    "x": 640.5,
    "y": 4878.4,
    "dir": -2.19,
    "type": null,
    "id": 10
}, {
    "sid": 1682,
    "x": 750.6,
    "y": 4888.3,
    "dir": -0.77,
    "type": null,
    "id": 10
}, {
    "sid": 1683,
    "x": 832.3,
    "y": 4928.4,
    "dir": 0.7,
    "type": null,
    "id": 10
}, {
    "sid": 1684,
    "x": 560.6,
    "y": 4957.3,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1685,
    "x": 670.9,
    "y": 4965.8,
    "dir": -0.79,
    "type": null,
    "id": 10
}, {
    "sid": 1686,
    "x": 679.4,
    "y": 5076.1,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 1687,
    "x": 493.3,
    "y": 5024.5,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 1688,
    "x": 578.5,
    "y": 5055.5,
    "dir": -0.81,
    "type": null,
    "id": 10
}, {
    "sid": 1689,
    "x": 402.3,
    "y": 5115.7,
    "dir": -2.19,
    "type": null,
    "id": 10
}, {
    "sid": 1690,
    "x": 611.4,
    "y": 5144.2,
    "dir": 0.64,
    "type": null,
    "id": 10
}, {
    "sid": 1691,
    "x": 322.6,
    "y": 5228,
    "dir": -2.62,
    "type": null,
    "id": 10
}, {
    "sid": 1692,
    "x": 481.6,
    "y": 5273.9,
    "dir": 0.65,
    "type": null,
    "id": 10
}, {
    "sid": 1693,
    "x": 325.8,
    "y": 5326.8,
    "dir": -3.3,
    "type": null,
    "id": 10
}, {
    "sid": 1694,
    "x": 562.9,
    "y": 5358,
    "dir": 5.37,
    "type": null,
    "id": 10
}, {
    "sid": 1695,
    "x": 385,
    "y": 5458,
    "dir": 0,
    "type": 2
}, {
    "sid": 1696,
    "x": 635.5,
    "y": 5432.3,
    "dir": 5.36,
    "type": null,
    "id": 10
}, {
    "sid": 1697,
    "x": 603.1,
    "y": 5519.2,
    "dir": -2.36,
    "type": null,
    "id": 10
}, {
    "sid": 1698,
    "x": 713.3,
    "y": 5510.7,
    "dir": 5.34,
    "type": null,
    "id": 10
}, {
    "sid": 1699,
    "x": 515.1,
    "y": 5549.5,
    "dir": -3.76,
    "type": null,
    "id": 10
}, {
    "sid": 1700,
    "x": 594.6,
    "y": 5629.5,
    "dir": -3.77,
    "type": null,
    "id": 10
}, {
    "sid": 1701,
    "x": 770.2,
    "y": 5653.7,
    "dir": 5.98,
    "type": null,
    "id": 10
}, {
    "sid": 1702,
    "x": 608.1,
    "y": 5725.7,
    "dir": -3.06,
    "type": null,
    "id": 10
}, {
    "sid": 1703,
    "x": 552.6,
    "y": 5797.2,
    "dir": -2.28,
    "type": null,
    "id": 10
}, {
    "sid": 1704,
    "x": 663.2,
    "y": 5797,
    "dir": -0.86,
    "type": null,
    "id": 10
}, {
    "sid": 1705,
    "x": 755.5,
    "y": 5800.1,
    "dir": 0.26,
    "type": null,
    "id": 10
}, {
    "sid": 1706,
    "x": 479.4,
    "y": 5908.2,
    "dir": -2.63,
    "type": null,
    "id": 10
}, {
    "sid": 1707,
    "x": 643,
    "y": 5946.2,
    "dir": 0.55,
    "type": null,
    "id": 10
}, {
    "sid": 1708,
    "x": 459.4,
    "y": 5999.9,
    "dir": -2.9,
    "type": null,
    "id": 10
}, {
    "sid": 1709,
    "x": 624.8,
    "y": 6056,
    "dir": 6.17,
    "type": null,
    "id": 10
}, {
    "sid": 1710,
    "x": 456.3,
    "y": 6103.5,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1711,
    "x": 624.3,
    "y": 6211.2,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1712,
    "x": 225.1,
    "y": 5438.1,
    "dir": -1.85,
    "type": null,
    "id": 15
}, {
    "sid": 1713,
    "x": 456.3,
    "y": 6265.5,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1714,
    "x": 624.3,
    "y": 6320.8,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1715,
    "x": 1500,
    "y": 6391,
    "dir": 0,
    "type": 2
}, {
    "sid": 1716,
    "x": 456.3,
    "y": 6377.1,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1717,
    "x": 624.3,
    "y": 6432.5,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1718,
    "x": 456.3,
    "y": 6488,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1719,
    "x": 624.3,
    "y": 6542.8,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1720,
    "x": 225.2,
    "y": 5693.4,
    "dir": -1.85,
    "type": null,
    "id": 15
}, {
    "sid": 1721,
    "x": 1240,
    "y": 6717.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1722,
    "x": 780,
    "y": 6748.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1723,
    "x": 161,
    "y": 6720.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1724,
    "x": 456.3,
    "y": 6598.4,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1725,
    "x": 624.3,
    "y": 6653.9,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1726,
    "x": 456.3,
    "y": 6709.5,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1727,
    "x": 540.3,
    "y": 6748.6,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 1728,
    "x": 456.3,
    "y": 6820.5,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1729,
    "x": 624.3,
    "y": 6820.5,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1730,
    "x": 1729,
    "y": 6179.4,
    "dir": 0,
    "type": 1
}, {
    "sid": 1731,
    "x": 1783,
    "y": 6717.4,
    "dir": 0,
    "type": 1
}, {
    "sid": 1732,
    "x": 1732,
    "y": 6898,
    "dir": 0,
    "type": 2
}, {
    "sid": 1733,
    "x": 764.5,
    "y": 6064.5,
    "dir": -0.44,
    "type": null,
    "id": 15
}, {
    "sid": 1734,
    "x": 2285.1,
    "y": 6455.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1735,
    "x": 984.1,
    "y": 5901.9,
    "dir": 0.18,
    "type": null,
    "id": 15
}, {
    "sid": 1736,
    "x": 907.2,
    "y": 5753.6,
    "dir": -1.81,
    "type": null,
    "id": 15
}, {
    "sid": 1737,
    "x": 1009.5,
    "y": 5741.2,
    "dir": -0.39,
    "type": null,
    "id": 15
}, {
    "sid": 1738,
    "x": 890.9,
    "y": 5646.1,
    "dir": -2.23,
    "type": null,
    "id": 15
}, {
    "sid": 1739,
    "x": 939.2,
    "y": 5503.8,
    "dir": -1.61,
    "type": null,
    "id": 15
}, {
    "sid": 1740,
    "x": 1012,
    "y": 5403.5,
    "dir": -1.41,
    "type": null,
    "id": 15
}, {
    "sid": 1741,
    "x": 1924.3,
    "y": 5874.3,
    "dir": -2.03,
    "type": null,
    "id": 15
}, {
    "sid": 1742,
    "x": 2099.9,
    "y": 5972.7,
    "dir": 0.28,
    "type": null,
    "id": 15
}, {
    "sid": 1743,
    "x": 2209.4,
    "y": 6010.5,
    "dir": 437.3859999999585,
    "type": null,
    "id": 9
}, {
    "sid": 1744,
    "x": 2153.1,
    "y": 5862.2,
    "dir": 434.104999999959,
    "type": null,
    "id": 9
}, {
    "sid": 1745,
    "x": 2325.5,
    "y": 5890.9,
    "dir": 435.37399999995876,
    "type": null,
    "id": 9
}, {
    "sid": 1746,
    "x": 2311.8,
    "y": 6055.3,
    "dir": 437.02699999995855,
    "type": null,
    "id": 9
}, {
    "sid": 1747,
    "x": 3504,
    "y": 6771,
    "dir": 0,
    "type": 2
}, {
    "sid": 1748,
    "x": 2481.2,
    "y": 6127,
    "dir": 1.02,
    "type": null,
    "id": 15
}, {
    "sid": 1749,
    "x": 2586.8,
    "y": 6248.2,
    "dir": 1.54,
    "type": null,
    "id": 15
}, {
    "sid": 1750,
    "x": 2685.5,
    "y": 6091.6,
    "dir": -0.87,
    "type": null,
    "id": 15
}, {
    "sid": 1751,
    "x": 2832.2,
    "y": 6093.4,
    "dir": 0.76,
    "type": null,
    "id": 15
}, {
    "sid": 1752,
    "x": 2751.1,
    "y": 5950.3,
    "dir": -2.47,
    "type": null,
    "id": 15
}, {
    "sid": 1753,
    "x": 3014.2,
    "y": 6068.4,
    "dir": 0.79,
    "type": null,
    "id": 15
}, {
    "sid": 1754,
    "x": 3066.6,
    "y": 5885.8,
    "dir": 429.79499999995966,
    "type": null,
    "id": 9
}, {
    "sid": 1755,
    "x": 2847.7,
    "y": 5682.1,
    "dir": 431.03399999995946,
    "type": null,
    "id": 9
}, {
    "sid": 1756,
    "x": 2763.2,
    "y": 5282.9,
    "dir": -2.02,
    "type": null,
    "id": 15
}, {
    "sid": 1757,
    "x": 3616.4,
    "y": 5903.7,
    "dir": -0.8,
    "type": null,
    "id": 15
}, {
    "sid": 1758,
    "x": 3726.1,
    "y": 6080.8,
    "dir": 0.36,
    "type": null,
    "id": 15
}, {
    "sid": 1759,
    "x": 3734.5,
    "y": 6223.6,
    "dir": 1.66,
    "type": null,
    "id": 15
}, {
    "sid": 1760,
    "x": 3879.1,
    "y": 6170.4,
    "dir": -0.95,
    "type": null,
    "id": 15
}, {
    "sid": 1761,
    "x": 3692,
    "y": 7218,
    "dir": 0,
    "type": 2
}, {
    "sid": 1762,
    "x": 4080.1,
    "y": 6463.5,
    "dir": 0.6,
    "type": null,
    "id": 15
}, {
    "sid": 1763,
    "x": 4527,
    "y": 7274,
    "dir": 0,
    "type": 2
}, {
    "sid": 1764,
    "x": 4247.3,
    "y": 6458.4,
    "dir": -0.48,
    "type": null,
    "id": 15
}, {
    "sid": 1765,
    "x": 4965.9,
    "y": 6188.1,
    "dir": -1.75,
    "type": null,
    "id": 12
}, {
    "sid": 1766,
    "x": 5491.4,
    "y": 6344.1,
    "dir": 2.49,
    "type": null,
    "id": 22
}, {
    "sid": 1767,
    "x": 7079,
    "y": 6957,
    "dir": 0,
    "type": 2
}, {
    "sid": 1768,
    "x": 6213.4,
    "y": 6315.2,
    "dir": -2.12,
    "type": null,
    "id": 22
}, {
    "sid": 1769,
    "x": 7706,
    "y": 6717,
    "dir": 0,
    "type": 3
}, {
    "sid": 1770,
    "x": 7017,
    "y": 7503,
    "dir": 0,
    "type": 2
}, {
    "sid": 1771,
    "x": 13901.2,
    "y": 8824.7,
    "dir": 226.19499999998916,
    "type": null,
    "id": 9
}, {
    "sid": 1772,
    "x": 11299,
    "y": 9130,
    "dir": 0,
    "type": 2
}, {
    "sid": 1773,
    "x": 12118.7,
    "y": 8125.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1774,
    "x": 7156.4,
    "y": 7776.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1775,
    "x": 10635.7,
    "y": 9424.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 1776,
    "x": 12371.9,
    "y": 8853.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 1777,
    "x": 12482.9,
    "y": 9965.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 1778,
    "x": 7742.4,
    "y": 7821.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1779,
    "x": 10436.7,
    "y": 10073.6,
    "dir": 0,
    "type": 1
}, {
    "sid": 1780,
    "x": 5721.5,
    "y": 7754.3,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1781,
    "x": 12262.7,
    "y": 10188.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 1782,
    "x": 6153,
    "y": 7754.3,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1783,
    "x": 5940.9,
    "y": 7754.3,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1784,
    "x": 12704.9,
    "y": 8768.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 1785,
    "x": 13015.9,
    "y": 8645.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 1786,
    "x": 5779.7,
    "y": 7835,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1787,
    "x": 13303.9,
    "y": 10172.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 1788,
    "x": 6211.2,
    "y": 7835,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1789,
    "x": 5999.1,
    "y": 7835,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1790,
    "x": 13476.9,
    "y": 8747.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 1791,
    "x": 6260.4,
    "y": 7996.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1792,
    "x": 5721.5,
    "y": 7915.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1793,
    "x": 12382.8,
    "y": 9427.7,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1794,
    "x": 6153,
    "y": 7915.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1795,
    "x": 5940.9,
    "y": 7915.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1796,
    "x": 12640.5,
    "y": 9427.7,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1797,
    "x": 7591.4,
    "y": 8049.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1798,
    "x": 12826,
    "y": 9508.9,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1799,
    "x": 12826,
    "y": 9346.5,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1800,
    "x": 13082.8,
    "y": 9508.9,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1801,
    "x": 5743.7,
    "y": 8046.5,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1802,
    "x": 5849,
    "y": 8046.5,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1803,
    "x": 5958.4,
    "y": 8046.5,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1804,
    "x": 6067.1,
    "y": 8046.5,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1805,
    "x": 13082.8,
    "y": 9346.5,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1806,
    "x": 6171,
    "y": 8062.5,
    "dir": 5,
    "type": null,
    "id": 10
}, {
    "sid": 1807,
    "x": 6350.7,
    "y": 8050.8,
    "dir": 3.77,
    "type": null,
    "id": 10
}, {
    "sid": 1808,
    "x": 13155.8,
    "y": 9427.7,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1809,
    "x": 13211.7,
    "y": 9508.9,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1810,
    "x": 13211.7,
    "y": 9346.5,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1811,
    "x": 13569,
    "y": 9489.5,
    "dir": 2.35,
    "type": null,
    "id": 12
}, {
    "sid": 1812,
    "x": 12438.6,
    "y": 9346.5,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1813,
    "x": 13666,
    "y": 9507,
    "dir": 1.15,
    "type": null,
    "id": 12
}, {
    "sid": 1814,
    "x": 5813.8,
    "y": 8130.5,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1815,
    "x": 5922.8,
    "y": 8130.5,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1816,
    "x": 6032,
    "y": 8130.5,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1817,
    "x": 6279.8,
    "y": 8127,
    "dir": 5.28,
    "type": null,
    "id": 10
}, {
    "sid": 1818,
    "x": 6384.8,
    "y": 8135.6,
    "dir": 2.36,
    "type": null,
    "id": 10
}, {
    "sid": 1819,
    "x": 12954.8,
    "y": 9346.5,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1820,
    "x": 13883.7,
    "y": 9302.8,
    "dir": 0.37,
    "type": null,
    "id": 12
}, {
    "sid": 1821,
    "x": 6187.5,
    "y": 8178.5,
    "dir": -2.81,
    "type": null,
    "id": 10
}, {
    "sid": 1822,
    "x": 13898.3,
    "y": 9181.1,
    "dir": 0.37,
    "type": null,
    "id": 12
}, {
    "sid": 1823,
    "x": 13735.8,
    "y": 9180.9,
    "dir": 2.78,
    "type": null,
    "id": 12
}, {
    "sid": 1824,
    "x": 5429.5,
    "y": 8046.5,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1825,
    "x": 5539.3,
    "y": 8046.5,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1826,
    "x": 5503.7,
    "y": 8130.5,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1827,
    "x": 5648.9,
    "y": 8046.5,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1828,
    "x": 5612.8,
    "y": 8130.5,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1829,
    "x": 5706.1,
    "y": 8130.5,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1830,
    "x": 13834,
    "y": 8252,
    "dir": 0,
    "type": 2
}, {
    "sid": 1831,
    "x": 5743.7,
    "y": 8214.4,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1832,
    "x": 5849,
    "y": 8214.4,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1833,
    "x": 5958.4,
    "y": 8214.4,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1834,
    "x": 6067.1,
    "y": 8214.4,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1835,
    "x": 12954.8,
    "y": 9508.9,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1836,
    "x": 5466,
    "y": 8214.4,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1837,
    "x": 5648.9,
    "y": 8214.4,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1838,
    "x": 13819.2,
    "y": 9109.4,
    "dir": 1.57,
    "type": null,
    "id": 12
}, {
    "sid": 1839,
    "x": 12853.9,
    "y": 8045.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1840,
    "x": 6416.3,
    "y": 8221.3,
    "dir": -5.3,
    "type": null,
    "id": 10
}, {
    "sid": 1841,
    "x": 13027,
    "y": 9427.7,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1842,
    "x": 5394,
    "y": 8130.5,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1843,
    "x": 13819.2,
    "y": 8980,
    "dir": 1.57,
    "type": null,
    "id": 12
}, {
    "sid": 1844,
    "x": 7611,
    "y": 8291,
    "dir": 0,
    "type": 3
}, {
    "sid": 1845,
    "x": 13900.5,
    "y": 8924.2,
    "dir": 0.37,
    "type": null,
    "id": 12
}, {
    "sid": 1846,
    "x": 6228.3,
    "y": 8281.3,
    "dir": -4.23,
    "type": null,
    "id": 10
}, {
    "sid": 1847,
    "x": 6344.1,
    "y": 8276.6,
    "dir": -4.96,
    "type": null,
    "id": 10
}, {
    "sid": 1848,
    "x": 5356.9,
    "y": 8214.4,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1849,
    "x": 13340.5,
    "y": 9508.9,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1850,
    "x": 13738,
    "y": 8924.1,
    "dir": 2.78,
    "type": null,
    "id": 12
}, {
    "sid": 1851,
    "x": 5184.3,
    "y": 7805.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1852,
    "x": 5320.2,
    "y": 8046.5,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1853,
    "x": 5248.5,
    "y": 8214.4,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1854,
    "x": 5285,
    "y": 8130.5,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1855,
    "x": 5213.7,
    "y": 8046.5,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1856,
    "x": 5148.4,
    "y": 8208.8,
    "dir": -5.39,
    "type": null,
    "id": 10
}, {
    "sid": 1857,
    "x": 5109.5,
    "y": 8057.3,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1858,
    "x": 5037.9,
    "y": 8205.1,
    "dir": 2.31,
    "type": null,
    "id": 10
}, {
    "sid": 1859,
    "x": 5024.6,
    "y": 8095.3,
    "dir": 3.73,
    "type": null,
    "id": 10
}, {
    "sid": 1860,
    "x": 4961,
    "y": 7751,
    "dir": 3.02,
    "type": null,
    "id": 6
}, {
    "sid": 1861,
    "x": 4833.2,
    "y": 7866.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1862,
    "x": 4775,
    "y": 7785.7,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1863,
    "x": 4775,
    "y": 7947,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1864,
    "x": 4647.1,
    "y": 7866.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1865,
    "x": 4562,
    "y": 7505,
    "dir": 0,
    "type": 2
}, {
    "sid": 1866,
    "x": 4588.9,
    "y": 7785.7,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1867,
    "x": 4588.9,
    "y": 7947,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1868,
    "x": 13340.5,
    "y": 9346.5,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1869,
    "x": 13645.9,
    "y": 7995.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1870,
    "x": 5630.3,
    "y": 8451.6,
    "dir": 0,
    "type": 1
}, {
    "sid": 1871,
    "x": 4461.4,
    "y": 7866.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1872,
    "x": 5622.9,
    "y": 7710.3,
    "dir": 1.79,
    "type": null,
    "id": 6
}, {
    "sid": 1873,
    "x": 12438.6,
    "y": 9508.9,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1874,
    "x": 13931.9,
    "y": 8692.8,
    "dir": 2.35,
    "type": null,
    "id": 12
}, {
    "sid": 1875,
    "x": 14028.9,
    "y": 8710.3,
    "dir": 1.15,
    "type": null,
    "id": 12
}, {
    "sid": 1876,
    "x": 6491.4,
    "y": 8663.6,
    "dir": 0,
    "type": 1
}, {
    "sid": 1877,
    "x": 13414.5,
    "y": 9427.7,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 1878,
    "x": 13470.3,
    "y": 9508.9,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 1879,
    "x": 14147.9,
    "y": 7691.4,
    "dir": 0,
    "type": 1
}, {
    "sid": 1880,
    "x": 12965,
    "y": 7545,
    "dir": 0,
    "type": 2
}, {
    "sid": 1881,
    "x": 13470.3,
    "y": 9346.5,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 1882,
    "x": 13487,
    "y": 7307,
    "dir": 0,
    "type": 2
}, {
    "sid": 1883,
    "x": 14095.5,
    "y": 8112.4,
    "dir": -0.05,
    "type": null,
    "id": 15
}, {
    "sid": 1884,
    "x": 4366.4,
    "y": 8695.4,
    "dir": -0.64,
    "type": null,
    "id": 22
}, {
    "sid": 1885,
    "x": 4275.4,
    "y": 7866.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1886,
    "x": 3935,
    "y": 7378,
    "dir": 0,
    "type": 2
}, {
    "sid": 1887,
    "x": 4217.2,
    "y": 7785.7,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1888,
    "x": 4217.2,
    "y": 7947,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1889,
    "x": 4031.1,
    "y": 7785.7,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1890,
    "x": 4089.3,
    "y": 7866.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1891,
    "x": 4031.1,
    "y": 7947,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1892,
    "x": 3904.1,
    "y": 7866.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1893,
    "x": 3706.1,
    "y": 8420.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 1894,
    "x": 3845.9,
    "y": 7785.7,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1895,
    "x": 3845.9,
    "y": 7947,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1896,
    "x": 3723.1,
    "y": 8099.4,
    "dir": 0,
    "type": 1
}, {
    "sid": 1897,
    "x": 3718.4,
    "y": 7866.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1898,
    "x": 3660.2,
    "y": 7785.7,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1899,
    "x": 3660.2,
    "y": 7947,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1900,
    "x": 3532.7,
    "y": 7866.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1901,
    "x": 3338.1,
    "y": 7681.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 1902,
    "x": 3474.5,
    "y": 7785.7,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1903,
    "x": 3474.5,
    "y": 7947,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1904,
    "x": 3346.7,
    "y": 7866.4,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1905,
    "x": 3288.5,
    "y": 7785.7,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1906,
    "x": 3288.5,
    "y": 7947,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1907,
    "x": 3188,
    "y": 7734.2,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1908,
    "x": 3157.5,
    "y": 7933.3,
    "dir": 0.31,
    "type": null,
    "id": 10
}, {
    "sid": 1909,
    "x": 3129.8,
    "y": 8521,
    "dir": 5.82,
    "type": null,
    "id": 10
}, {
    "sid": 1910,
    "x": 3104,
    "y": 7662.2,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 1911,
    "x": 3101.3,
    "y": 7763.9,
    "dir": -1.45,
    "type": null,
    "id": 10
}, {
    "sid": 1912,
    "x": 3066.3,
    "y": 7923.5,
    "dir": -0.83,
    "type": null,
    "id": 10
}, {
    "sid": 1913,
    "x": 3021.2,
    "y": 8198.3,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1914,
    "x": 3021.2,
    "y": 8295.3,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1915,
    "x": 3059.6,
    "y": 8577.6,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 1916,
    "x": 3099.1,
    "y": 8970.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 1917,
    "x": 3420,
    "y": 8866.8,
    "dir": 5.34,
    "type": null,
    "id": 10
}, {
    "sid": 1918,
    "x": 3076,
    "y": 8688.7,
    "dir": -0.93,
    "type": null,
    "id": 10
}, {
    "sid": 1919,
    "x": 3001.6,
    "y": 8751.4,
    "dir": -0.27,
    "type": null,
    "id": 10
}, {
    "sid": 1920,
    "x": 2964.5,
    "y": 8562.4,
    "dir": -2.5,
    "type": null,
    "id": 10
}, {
    "sid": 1921,
    "x": 2978.7,
    "y": 7895,
    "dir": -2.26,
    "type": null,
    "id": 10
}, {
    "sid": 1922,
    "x": 2937.2,
    "y": 8126.4,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 1923,
    "x": 2945.4,
    "y": 8345.1,
    "dir": -2.06,
    "type": null,
    "id": 10
}, {
    "sid": 1924,
    "x": 2985.8,
    "y": 7738,
    "dir": -1.14,
    "type": null,
    "id": 10
}, {
    "sid": 1925,
    "x": 2910.9,
    "y": 8449.3,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1926,
    "x": 2906.4,
    "y": 7970,
    "dir": -2.22,
    "type": null,
    "id": 10
}, {
    "sid": 1927,
    "x": 2839,
    "y": 8533.3,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1928,
    "x": 2859.6,
    "y": 8078.7,
    "dir": -2.84,
    "type": null,
    "id": 10
}, {
    "sid": 1929,
    "x": 2853.2,
    "y": 8198.3,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1930,
    "x": 2853.2,
    "y": 8295.3,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1931,
    "x": 2559.1,
    "y": 8280.1,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1932,
    "x": 2559.1,
    "y": 8112.1,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1933,
    "x": 2697.3,
    "y": 8197.7,
    "dir": 5.53,
    "type": null,
    "id": 10
}, {
    "sid": 1934,
    "x": 2710.4,
    "y": 8330,
    "dir": 6.11,
    "type": null,
    "id": 10
}, {
    "sid": 1935,
    "x": 2600.8,
    "y": 8425.6,
    "dir": 1.88,
    "type": null,
    "id": 10
}, {
    "sid": 1936,
    "x": 2699,
    "y": 8449,
    "dir": 4.58,
    "type": null,
    "id": 10
}, {
    "sid": 1937,
    "x": 2800.6,
    "y": 8449.3,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1938,
    "x": 2764.1,
    "y": 7734.4,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1939,
    "x": 2822.3,
    "y": 7815.1,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1940,
    "x": 2764.1,
    "y": 7895.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1941,
    "x": 2609.9,
    "y": 7734.4,
    "dir": -1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1942,
    "x": 2668.1,
    "y": 7815.1,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1943,
    "x": 2609.9,
    "y": 7895.7,
    "dir": 1.25,
    "type": null,
    "id": 10
}, {
    "sid": 1944,
    "x": 3546.8,
    "y": 9377.6,
    "dir": 0.31,
    "type": null,
    "id": 10
}, {
    "sid": 1945,
    "x": 3543.2,
    "y": 9502.3,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1946,
    "x": 3543.2,
    "y": 9602.1,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1947,
    "x": 2717.4,
    "y": 8863.2,
    "dir": -2,
    "type": null,
    "id": 10
}, {
    "sid": 1948,
    "x": 2823.9,
    "y": 8893.2,
    "dir": -0.59,
    "type": null,
    "id": 10
}, {
    "sid": 1949,
    "x": 2605.4,
    "y": 8858.6,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 1950,
    "x": 2457.5,
    "y": 8091.2,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1951,
    "x": 2487.1,
    "y": 8196.1,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1952,
    "x": 2470.9,
    "y": 8384.1,
    "dir": -2.31,
    "type": null,
    "id": 10
}, {
    "sid": 1953,
    "x": 2442.8,
    "y": 8504.7,
    "dir": -2.97,
    "type": null,
    "id": 10
}, {
    "sid": 1954,
    "x": 2495.6,
    "y": 7841.3,
    "dir": 0.41,
    "type": null,
    "id": 10
}, {
    "sid": 1955,
    "x": 2467.2,
    "y": 8874.9,
    "dir": -1.85,
    "type": null,
    "id": 10
}, {
    "sid": 1956,
    "x": 2401.3,
    "y": 8259.2,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1957,
    "x": 2420.7,
    "y": 7732.7,
    "dir": -1.96,
    "type": null,
    "id": 22
}, {
    "sid": 1958,
    "x": 2409.9,
    "y": 7891.7,
    "dir": 1.66,
    "type": null,
    "id": 10
}, {
    "sid": 1959,
    "x": 3607.3,
    "y": 9738.1,
    "dir": 5.49,
    "type": null,
    "id": 10
}, {
    "sid": 1960,
    "x": 2391.8,
    "y": 8927.8,
    "dir": -2.12,
    "type": null,
    "id": 10
}, {
    "sid": 1961,
    "x": 2329.3,
    "y": 8175.2,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1962,
    "x": 2290.6,
    "y": 8259.2,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1963,
    "x": 2290.6,
    "y": 8091.2,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1964,
    "x": 3593.6,
    "y": 9967.1,
    "dir": -3.76,
    "type": null,
    "id": 10
}, {
    "sid": 1965,
    "x": 3586.8,
    "y": 10696.5,
    "dir": -2.23,
    "type": null,
    "id": 10
}, {
    "sid": 1966,
    "x": 2164.6,
    "y": 8175.2,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1967,
    "x": 3675,
    "y": 9810.5,
    "dir": 5.36,
    "type": null,
    "id": 10
}, {
    "sid": 1968,
    "x": 2158.8,
    "y": 8907.1,
    "dir": 4.98,
    "type": null,
    "id": 11
}, {
    "sid": 1969,
    "x": 2080.9,
    "y": 8259.2,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1970,
    "x": 2080.9,
    "y": 8091.2,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1971,
    "x": 3667.5,
    "y": 10041.5,
    "dir": -3.77,
    "type": null,
    "id": 10
}, {
    "sid": 1972,
    "x": 2652.1,
    "y": 9073.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 1973,
    "x": 2642.1,
    "y": 8942.6,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 1974,
    "x": 2042.5,
    "y": 8888.6,
    "dir": 4.56,
    "type": null,
    "id": 11
}, {
    "sid": 1975,
    "x": 3385,
    "y": 8952.2,
    "dir": -2.37,
    "type": null,
    "id": 10
}, {
    "sid": 1976,
    "x": 1985,
    "y": 8259.2,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1977,
    "x": 1985,
    "y": 8091.2,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 1978,
    "x": 3523.7,
    "y": 8970.8,
    "dir": 5.33,
    "type": null,
    "id": 10
}, {
    "sid": 1979,
    "x": 1913.1,
    "y": 8175.2,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 1980,
    "x": 1913.5,
    "y": 8888.6,
    "dir": 4.56,
    "type": null,
    "id": 11
}, {
    "sid": 1981,
    "x": 3660.1,
    "y": 10619.2,
    "dir": -2.27,
    "type": null,
    "id": 10
}, {
    "sid": 1982,
    "x": 1775.2,
    "y": 7754.2,
    "dir": 5.76,
    "type": null,
    "id": 10
}, {
    "sid": 1983,
    "x": 1796.4,
    "y": 7881.5,
    "dir": 6.06,
    "type": null,
    "id": 10
}, {
    "sid": 1984,
    "x": 1799.3,
    "y": 7997.4,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1985,
    "x": 1799.3,
    "y": 8093.7,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 1986,
    "x": 1825.7,
    "y": 8258.9,
    "dir": -4.54,
    "type": null,
    "id": 10
}, {
    "sid": 1987,
    "x": 3753,
    "y": 9889.1,
    "dir": 5.36,
    "type": null,
    "id": 10
}, {
    "sid": 1988,
    "x": 1723.1,
    "y": 7674.6,
    "dir": 5.21,
    "type": null,
    "id": 10
}, {
    "sid": 1989,
    "x": 1707.3,
    "y": 7815.9,
    "dir": -1.64,
    "type": null,
    "id": 10
}, {
    "sid": 1990,
    "x": 1715.3,
    "y": 7925.5,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 1991,
    "x": 1715.4,
    "y": 8146.8,
    "dir": -2.82,
    "type": null,
    "id": 10
}, {
    "sid": 1992,
    "x": 1631.4,
    "y": 7997.4,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1993,
    "x": 1631.4,
    "y": 8093.7,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 1994,
    "x": 1626.1,
    "y": 7601.5,
    "dir": 5,
    "type": null,
    "id": 10
}, {
    "sid": 1995,
    "x": 1615.1,
    "y": 7698.2,
    "dir": -2.49,
    "type": null,
    "id": 10
}, {
    "sid": 1996,
    "x": 1617.7,
    "y": 7804,
    "dir": -3.84,
    "type": null,
    "id": 10
}, {
    "sid": 1997,
    "x": 1628.8,
    "y": 7893.9,
    "dir": -3.06,
    "type": null,
    "id": 10
}, {
    "sid": 1998,
    "x": 3712.4,
    "y": 10125.7,
    "dir": -3.12,
    "type": null,
    "id": 10
}, {
    "sid": 1999,
    "x": 3718.2,
    "y": 10224.1,
    "dir": -3.01,
    "type": null,
    "id": 10
}, {
    "sid": 2000,
    "x": 1460,
    "y": 7536,
    "dir": 0,
    "type": 2
}, {
    "sid": 2001,
    "x": 1498.2,
    "y": 7745.6,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2002,
    "x": 1524.9,
    "y": 7646.3,
    "dir": -2.7,
    "type": null,
    "id": 10
}, {
    "sid": 2003,
    "x": 1481.3,
    "y": 8459.6,
    "dir": 6.13,
    "type": null,
    "id": 11
}, {
    "sid": 2004,
    "x": 1481.3,
    "y": 8584.2,
    "dir": 6.13,
    "type": null,
    "id": 11
}, {
    "sid": 2005,
    "x": 1481.3,
    "y": 8714,
    "dir": 6.13,
    "type": null,
    "id": 11
}, {
    "sid": 2006,
    "x": 1426.2,
    "y": 7661.7,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 2007,
    "x": 1474.4,
    "y": 8328,
    "dir": 5.97,
    "type": null,
    "id": 11
}, {
    "sid": 2008,
    "x": 3718.5,
    "y": 10333.9,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2009,
    "x": 1395.4,
    "y": 8386,
    "dir": -1.57,
    "type": null,
    "id": 11
}, {
    "sid": 2010,
    "x": 1395.4,
    "y": 8510.6,
    "dir": -1.57,
    "type": null,
    "id": 11
}, {
    "sid": 2011,
    "x": 1395.4,
    "y": 8640.4,
    "dir": -1.57,
    "type": null,
    "id": 11
}, {
    "sid": 2012,
    "x": 3718.5,
    "y": 10436.3,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2013,
    "x": 3718.5,
    "y": 10542.2,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2014,
    "x": 1118,
    "y": 7777,
    "dir": 0,
    "type": 3
}, {
    "sid": 2015,
    "x": 1096,
    "y": 7590,
    "dir": 5.34,
    "type": null,
    "id": 10
}, {
    "sid": 2016,
    "x": 1211.2,
    "y": 7577.7,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2017,
    "x": 1264.5,
    "y": 7745.6,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2018,
    "x": 1317.8,
    "y": 7577.7,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2019,
    "x": 1165.7,
    "y": 7906.1,
    "dir": 5.8,
    "type": null,
    "id": 11
}, {
    "sid": 2020,
    "x": 1181.3,
    "y": 8003.3,
    "dir": 6.05,
    "type": null,
    "id": 11
}, {
    "sid": 2021,
    "x": 1144.1,
    "y": 8233,
    "dir": -3.02,
    "type": null,
    "id": 11
}, {
    "sid": 2022,
    "x": 1356.2,
    "y": 8235.7,
    "dir": -1.92,
    "type": null,
    "id": 11
}, {
    "sid": 2023,
    "x": 1309.4,
    "y": 8584.2,
    "dir": -2.99,
    "type": null,
    "id": 11
}, {
    "sid": 2024,
    "x": 3822.9,
    "y": 9959.4,
    "dir": 5.34,
    "type": null,
    "id": 10
}, {
    "sid": 2025,
    "x": 895,
    "y": 7781.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 2026,
    "x": 1011.5,
    "y": 8052.3,
    "dir": -3.01,
    "type": null,
    "id": 11
}, {
    "sid": 2027,
    "x": 1029.4,
    "y": 8200.4,
    "dir": -3.4,
    "type": null,
    "id": 11
}, {
    "sid": 2028,
    "x": 982.7,
    "y": 7571.1,
    "dir": -1.97,
    "type": null,
    "id": 11
}, {
    "sid": 2029,
    "x": 950.4,
    "y": 7896.5,
    "dir": -3.6,
    "type": null,
    "id": 11
}, {
    "sid": 2030,
    "x": 939.2,
    "y": 7671,
    "dir": -3.77,
    "type": null,
    "id": 10
}, {
    "sid": 2031,
    "x": 741.2,
    "y": 8615.7,
    "dir": -5.95,
    "type": null,
    "id": 10
}, {
    "sid": 2032,
    "x": 747.2,
    "y": 8513.7,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2033,
    "x": 747.2,
    "y": 8394,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2034,
    "x": 663.2,
    "y": 8466,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2035,
    "x": 667.2,
    "y": 8172.6,
    "dir": 1.16,
    "type": null,
    "id": 10
}, {
    "sid": 2036,
    "x": 690.2,
    "y": 7790.3,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2037,
    "x": 644.2,
    "y": 8264.5,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2038,
    "x": 625.3,
    "y": 8062.1,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2039,
    "x": 654.3,
    "y": 7650.6,
    "dir": 3.74,
    "type": null,
    "id": 10
}, {
    "sid": 2040,
    "x": 1395.4,
    "y": 8770.6,
    "dir": -1.57,
    "type": null,
    "id": 11
}, {
    "sid": 2041,
    "x": 606.2,
    "y": 7951.5,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2042,
    "x": 606.2,
    "y": 7832,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2043,
    "x": 1481.3,
    "y": 8844.3,
    "dir": 6.13,
    "type": null,
    "id": 11
}, {
    "sid": 2044,
    "x": 560.1,
    "y": 8654.4,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2045,
    "x": 579.2,
    "y": 8542.5,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2046,
    "x": 579.2,
    "y": 8423.9,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2047,
    "x": 579.2,
    "y": 8332.8,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2048,
    "x": 560.2,
    "y": 8221.8,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2049,
    "x": 559.2,
    "y": 7646.5,
    "dir": 3.87,
    "type": null,
    "id": 10
}, {
    "sid": 2050,
    "x": 1779.9,
    "y": 8890.5,
    "dir": 4.51,
    "type": null,
    "id": 11
}, {
    "sid": 2051,
    "x": 541.3,
    "y": 8021.5,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2052,
    "x": 1106,
    "y": 8989.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2053,
    "x": 563.3,
    "y": 8891.8,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2054,
    "x": 728.1,
    "y": 8860.9,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2055,
    "x": 560.1,
    "y": 8773.6,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2056,
    "x": 728.1,
    "y": 8743.4,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2057,
    "x": 644.1,
    "y": 8815.4,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2058,
    "x": 1309.4,
    "y": 8714,
    "dir": -2.99,
    "type": null,
    "id": 11
}, {
    "sid": 2059,
    "x": 1309.4,
    "y": 8844.3,
    "dir": -2.99,
    "type": null,
    "id": 11
}, {
    "sid": 2060,
    "x": 1395.4,
    "y": 8899.8,
    "dir": -1.57,
    "type": null,
    "id": 11
}, {
    "sid": 2061,
    "x": 1673.3,
    "y": 8907.6,
    "dir": 4.22,
    "type": null,
    "id": 11
}, {
    "sid": 2062,
    "x": 457.8,
    "y": 7745.6,
    "dir": 5.95,
    "type": null,
    "id": 10
}, {
    "sid": 2063,
    "x": 463.8,
    "y": 7849.7,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2064,
    "x": 463.8,
    "y": 7969.2,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2065,
    "x": 463.8,
    "y": 8089.3,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2066,
    "x": 463.8,
    "y": 8209.1,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2067,
    "x": 463.8,
    "y": 8328.5,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2068,
    "x": 463.8,
    "y": 8448.3,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2069,
    "x": 463.8,
    "y": 8567.7,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2070,
    "x": 463.8,
    "y": 8687.5,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2071,
    "x": 463.8,
    "y": 8867.3,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2072,
    "x": 705.8,
    "y": 8973.5,
    "dir": -5.67,
    "type": null,
    "id": 10
}, {
    "sid": 2073,
    "x": 1309.4,
    "y": 8973.5,
    "dir": -2.99,
    "type": null,
    "id": 11
}, {
    "sid": 2074,
    "x": 1583.5,
    "y": 8963.2,
    "dir": 3.93,
    "type": null,
    "id": 11
}, {
    "sid": 2075,
    "x": 401.8,
    "y": 7647.9,
    "dir": 5.19,
    "type": null,
    "id": 10
}, {
    "sid": 2076,
    "x": 379.8,
    "y": 7807.8,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2077,
    "x": 379.8,
    "y": 7927.5,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2078,
    "x": 379.8,
    "y": 8047.2,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2079,
    "x": 379.8,
    "y": 8166.5,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2080,
    "x": 379.8,
    "y": 8285.9,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2081,
    "x": 379.8,
    "y": 8405.7,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2082,
    "x": 379.8,
    "y": 8525.6,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2083,
    "x": 379.8,
    "y": 8644.9,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2084,
    "x": 379.8,
    "y": 8795.4,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2085,
    "x": 271.7,
    "y": 7778.8,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2086,
    "x": 301,
    "y": 7610.8,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2087,
    "x": 295.8,
    "y": 7879.8,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2088,
    "x": 295.8,
    "y": 7999.4,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2089,
    "x": 295.8,
    "y": 8119.1,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2090,
    "x": 295.8,
    "y": 8238.5,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2091,
    "x": 295.8,
    "y": 8357.9,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2092,
    "x": 295.8,
    "y": 8448.3,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2093,
    "x": 295.8,
    "y": 8567.7,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2094,
    "x": 295.8,
    "y": 8687.5,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2095,
    "x": 295.8,
    "y": 8867.3,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2096,
    "x": 309.1,
    "y": 8957.2,
    "dir": -3.4,
    "type": null,
    "id": 10
}, {
    "sid": 2097,
    "x": 201.1,
    "y": 7615.6,
    "dir": 4.42,
    "type": null,
    "id": 10
}, {
    "sid": 2098,
    "x": 213,
    "y": 8749.6,
    "dir": 0,
    "type": 1
}, {
    "sid": 2099,
    "x": 461.6,
    "y": 8975.8,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 2100,
    "x": 183.3,
    "y": 7819.8,
    "dir": -5.39,
    "type": null,
    "id": 10
}, {
    "sid": 2101,
    "x": 125.5,
    "y": 8601.1,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2102,
    "x": 125.5,
    "y": 8491.4,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2103,
    "x": 125.5,
    "y": 8382.2,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2104,
    "x": 125.5,
    "y": 8273,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2105,
    "x": 125.5,
    "y": 8163.8,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2106,
    "x": 125.5,
    "y": 8054.5,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2107,
    "x": 125.5,
    "y": 7945.3,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2108,
    "x": 2534.3,
    "y": 9026.6,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2109,
    "x": 2324.3,
    "y": 9013.2,
    "dir": -2.62,
    "type": null,
    "id": 10
}, {
    "sid": 2110,
    "x": 2168.4,
    "y": 9012.4,
    "dir": -2.39,
    "type": null,
    "id": 11
}, {
    "sid": 2111,
    "x": 125.5,
    "y": 8928.8,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2112,
    "x": 125.5,
    "y": 8819.6,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2113,
    "x": 125.5,
    "y": 8709.8,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2114,
    "x": 384.9,
    "y": 9039.7,
    "dir": -4.13,
    "type": null,
    "id": 10
}, {
    "sid": 2115,
    "x": 2130.1,
    "y": 9175.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2116,
    "x": 1405.2,
    "y": 9052.9,
    "dir": -3.02,
    "type": null,
    "id": 11
}, {
    "sid": 2117,
    "x": 1611.5,
    "y": 9054.1,
    "dir": 2.42,
    "type": null,
    "id": 11
}, {
    "sid": 2118,
    "x": 1869.8,
    "y": 9060.5,
    "dir": -4.56,
    "type": null,
    "id": 11
}, {
    "sid": 2119,
    "x": 1999.9,
    "y": 9060.5,
    "dir": -4.56,
    "type": null,
    "id": 11
}, {
    "sid": 2120,
    "x": 504.4,
    "y": 9059.8,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2121,
    "x": 626,
    "y": 9045.8,
    "dir": -5.01,
    "type": null,
    "id": 10
}, {
    "sid": 2122,
    "x": 41.5,
    "y": 8673,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2123,
    "x": 41.5,
    "y": 8563.3,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2124,
    "x": 41.5,
    "y": 8454.1,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2125,
    "x": 41.5,
    "y": 8344.9,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2126,
    "x": 41.5,
    "y": 8235.7,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2127,
    "x": 41.5,
    "y": 8126.5,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2128,
    "x": 41.5,
    "y": 8017.3,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2129,
    "x": 1754.4,
    "y": 9065.5,
    "dir": -4.7,
    "type": null,
    "id": 11
}, {
    "sid": 2130,
    "x": 41.5,
    "y": 9000.7,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2131,
    "x": 41.5,
    "y": 8891.5,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2132,
    "x": 41.5,
    "y": 8781.8,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2133,
    "x": -28.4,
    "y": 7818.4,
    "dir": 3.42,
    "type": null,
    "id": 10
}, {
    "sid": 2134,
    "x": 2391,
    "y": 9075.7,
    "dir": -1.54,
    "type": null,
    "id": 10
}, {
    "sid": 2135,
    "x": 125.5,
    "y": 9073.5,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2136,
    "x": -42.5,
    "y": 8601.1,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2137,
    "x": -42.5,
    "y": 8491.4,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2138,
    "x": -42.5,
    "y": 8382.2,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2139,
    "x": -42.5,
    "y": 8273,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2140,
    "x": -42.5,
    "y": 8163.8,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2141,
    "x": -42.5,
    "y": 8054.5,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2142,
    "x": -42.5,
    "y": 7945.3,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2143,
    "x": -42.5,
    "y": 9073.5,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2144,
    "x": -42.5,
    "y": 8928.8,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2145,
    "x": -42.5,
    "y": 8819.6,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2146,
    "x": -42.5,
    "y": 8709.8,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2147,
    "x": 1931.7,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2148,
    "x": 1824.7,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2149,
    "x": 1715.8,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2150,
    "x": 1605.6,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2151,
    "x": 1496.4,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2152,
    "x": 1387.2,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2153,
    "x": 1278,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2154,
    "x": 1169.2,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2155,
    "x": 1060,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2156,
    "x": 950.3,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2157,
    "x": 841.6,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2158,
    "x": 732.3,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2159,
    "x": 623.1,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2160,
    "x": 513.9,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2161,
    "x": 403.2,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2162,
    "x": 292.7,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2163,
    "x": 183.1,
    "y": 9155,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2164,
    "x": 41.5,
    "y": 9145.5,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2165,
    "x": -34.4,
    "y": 9194.8,
    "dir": 2.8,
    "type": null,
    "id": 10
}, {
    "sid": 2166,
    "x": 2003.7,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2167,
    "x": 1896.7,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2168,
    "x": 1787.7,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2169,
    "x": 1677.6,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2170,
    "x": 1568.3,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2171,
    "x": 1459.1,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2172,
    "x": 2083.9,
    "y": 9291.8,
    "dir": -2.2,
    "type": null,
    "id": 11
}, {
    "sid": 2173,
    "x": 1349.9,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2174,
    "x": 1241.2,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2175,
    "x": 1132,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2176,
    "x": 1022.2,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2177,
    "x": 913.5,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2178,
    "x": 804.3,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2179,
    "x": 695.1,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2180,
    "x": 585.9,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2181,
    "x": 475.2,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2182,
    "x": 364.6,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2183,
    "x": 255.1,
    "y": 9239,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2184,
    "x": 1931.7,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2185,
    "x": 1824.7,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2186,
    "x": 1715.8,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2187,
    "x": 1605.6,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2188,
    "x": 1496.4,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2189,
    "x": 985,
    "y": 9400.6,
    "dir": 0,
    "type": 1
}, {
    "sid": 2190,
    "x": 1387.2,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2191,
    "x": 1278,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2192,
    "x": 1169.2,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2193,
    "x": 1060,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2194,
    "x": 950.3,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2195,
    "x": 841.6,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2196,
    "x": 732.3,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2197,
    "x": 623.1,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2198,
    "x": 513.9,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2199,
    "x": 403.2,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2200,
    "x": 292.7,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2201,
    "x": 183.1,
    "y": 9323,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2202,
    "x": 43.5,
    "y": 9306.7,
    "dir": 1.84,
    "type": null,
    "id": 10
}, {
    "sid": 2203,
    "x": 1965.3,
    "y": 9411,
    "dir": -2.2,
    "type": null,
    "id": 11
}, {
    "sid": 2204,
    "x": 1318.4,
    "y": 9450.8,
    "dir": -1.42,
    "type": null,
    "id": 11
}, {
    "sid": 2205,
    "x": 1188.6,
    "y": 9450.8,
    "dir": -1.42,
    "type": null,
    "id": 11
}, {
    "sid": 2206,
    "x": 1057.7,
    "y": 9450.8,
    "dir": -1.42,
    "type": null,
    "id": 11
}, {
    "sid": 2207,
    "x": 884.8,
    "y": 9450.8,
    "dir": -1.42,
    "type": null,
    "id": 11
}, {
    "sid": 2208,
    "x": 767.5,
    "y": 9470,
    "dir": -1.85,
    "type": null,
    "id": 11
}, {
    "sid": 2209,
    "x": 2148.2,
    "y": 9470.8,
    "dir": 0.61,
    "type": null,
    "id": 11
}, {
    "sid": 2210,
    "x": 1875.6,
    "y": 9448.9,
    "dir": -1.46,
    "type": null,
    "id": 11
}, {
    "sid": 2211,
    "x": 1750.2,
    "y": 9450.8,
    "dir": -1.42,
    "type": null,
    "id": 11
}, {
    "sid": 2212,
    "x": 1620.5,
    "y": 9450.8,
    "dir": -1.42,
    "type": null,
    "id": 11
}, {
    "sid": 2213,
    "x": 1491.4,
    "y": 9450.8,
    "dir": -1.42,
    "type": null,
    "id": 11
}, {
    "sid": 2214,
    "x": 1392.1,
    "y": 9536.8,
    "dir": 0,
    "type": null,
    "id": 11
}, {
    "sid": 2215,
    "x": 1262.3,
    "y": 9536.8,
    "dir": 0,
    "type": null,
    "id": 11
}, {
    "sid": 2216,
    "x": 1131.3,
    "y": 9536.8,
    "dir": 0,
    "type": null,
    "id": 11
}, {
    "sid": 2217,
    "x": 1001.6,
    "y": 9536.8,
    "dir": 0,
    "type": null,
    "id": 11
}, {
    "sid": 2218,
    "x": 679.6,
    "y": 9532.1,
    "dir": -2.14,
    "type": null,
    "id": 11
}, {
    "sid": 2219,
    "x": 1953.2,
    "y": 9531.3,
    "dir": -0.05,
    "type": null,
    "id": 11
}, {
    "sid": 2220,
    "x": 1823.8,
    "y": 9536.8,
    "dir": 0,
    "type": null,
    "id": 11
}, {
    "sid": 2221,
    "x": 1694.2,
    "y": 9536.8,
    "dir": 0,
    "type": null,
    "id": 11
}, {
    "sid": 2222,
    "x": 920,
    "y": 9672.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2223,
    "x": 1663,
    "y": 9629.6,
    "dir": 0,
    "type": 1
}, {
    "sid": 2224,
    "x": 2055.9,
    "y": 9563.5,
    "dir": 0.63,
    "type": null,
    "id": 11
}, {
    "sid": 2225,
    "x": 1883.7,
    "y": 9620.7,
    "dir": 1.37,
    "type": null,
    "id": 11
}, {
    "sid": 2226,
    "x": 1448.1,
    "y": 9622.8,
    "dir": 1.42,
    "type": null,
    "id": 11
}, {
    "sid": 2227,
    "x": 819.6,
    "y": 9639.5,
    "dir": 0.79,
    "type": null,
    "id": 11
}, {
    "sid": 2228,
    "x": 575.4,
    "y": 9658,
    "dir": -2.61,
    "type": null,
    "id": 12
}, {
    "sid": 2229,
    "x": 1750.2,
    "y": 9622.8,
    "dir": 1.42,
    "type": null,
    "id": 11
}, {
    "sid": 2230,
    "x": 1577.9,
    "y": 9622.8,
    "dir": 1.42,
    "type": null,
    "id": 11
}, {
    "sid": 2231,
    "x": 3785.8,
    "y": 10043,
    "dir": -1.71,
    "type": null,
    "id": 10
}, {
    "sid": 2232,
    "x": 1884,
    "y": 9816.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2233,
    "x": 556.3,
    "y": 9765,
    "dir": -2.92,
    "type": null,
    "id": 12
}, {
    "sid": 2234,
    "x": 727.8,
    "y": 9777.2,
    "dir": 6.2,
    "type": null,
    "id": 12
}, {
    "sid": 2235,
    "x": 3802.5,
    "y": 10470.3,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2236,
    "x": 481,
    "y": 9882,
    "dir": -2.66,
    "type": null,
    "id": 12
}, {
    "sid": 2237,
    "x": 580.5,
    "y": 9873.3,
    "dir": -1.13,
    "type": null,
    "id": 12
}, {
    "sid": 2238,
    "x": 3825.6,
    "y": 10683,
    "dir": 0.48,
    "type": null,
    "id": 10
}, {
    "sid": 2239,
    "x": 3882.3,
    "y": 10156.6,
    "dir": 5.99,
    "type": null,
    "id": 10
}, {
    "sid": 2240,
    "x": 3886.5,
    "y": 10277.7,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2241,
    "x": 362.5,
    "y": 10092.1,
    "dir": -2.73,
    "type": null,
    "id": 12
}, {
    "sid": 2242,
    "x": 712.5,
    "y": 10106.4,
    "dir": 4.18,
    "type": null,
    "id": 12
}, {
    "sid": 2243,
    "x": 2149.1,
    "y": 10196.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2244,
    "x": 3886.5,
    "y": 10436.3,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2245,
    "x": 1273.1,
    "y": 10160.9,
    "dir": 0.2,
    "type": null,
    "id": 22
}, {
    "sid": 2246,
    "x": 476.5,
    "y": 10227.5,
    "dir": 0.54,
    "type": null,
    "id": 12
}, {
    "sid": 2247,
    "x": 591.5,
    "y": 10213,
    "dir": 3.63,
    "type": null,
    "id": 12
}, {
    "sid": 2248,
    "x": 383.3,
    "y": 10258.5,
    "dir": -1.57,
    "type": null,
    "id": 12
}, {
    "sid": 2249,
    "x": 795.4,
    "y": 10262.1,
    "dir": -4.72,
    "type": null,
    "id": 12
}, {
    "sid": 2250,
    "x": 901.7,
    "y": 10257,
    "dir": -4.56,
    "type": null,
    "id": 12
}, {
    "sid": 2251,
    "x": 3886.5,
    "y": 10542.2,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2252,
    "x": 297.3,
    "y": 10332.2,
    "dir": -2.99,
    "type": null,
    "id": 12
}, {
    "sid": 2253,
    "x": 469.3,
    "y": 10332.2,
    "dir": 6.13,
    "type": null,
    "id": 12
}, {
    "sid": 2254,
    "x": 715.9,
    "y": 10332.6,
    "dir": -6.13,
    "type": null,
    "id": 12
}, {
    "sid": 2255,
    "x": 616.7,
    "y": 10323.4,
    "dir": 2.21,
    "type": null,
    "id": 12
}, {
    "sid": 2256,
    "x": 541.8,
    "y": 10405.8,
    "dir": 3.06,
    "type": null,
    "id": 12
}, {
    "sid": 2257,
    "x": 3580.8,
    "y": 9196.5,
    "dir": 6.1,
    "type": null,
    "id": 10
}, {
    "sid": 2258,
    "x": 3933.1,
    "y": 10634.7,
    "dir": 0,
    "type": 1
}, {
    "sid": 2259,
    "x": 3411.3,
    "y": 9166.3,
    "dir": -3.05,
    "type": null,
    "id": 10
}, {
    "sid": 2260,
    "x": 4069.1,
    "y": 10354.7,
    "dir": 0,
    "type": 1
}, {
    "sid": 2261,
    "x": 2474.4,
    "y": 9117.1,
    "dir": 6.19,
    "type": null,
    "id": 10
}, {
    "sid": 2262,
    "x": 2306.7,
    "y": 9107.5,
    "dir": -2.93,
    "type": null,
    "id": 10
}, {
    "sid": 2263,
    "x": 3574.6,
    "y": 9100.4,
    "dir": 5.99,
    "type": null,
    "id": 10
}, {
    "sid": 2264,
    "x": 3378,
    "y": 9062.6,
    "dir": -3.79,
    "type": null,
    "id": 10
}, {
    "sid": 2265,
    "x": 535.7,
    "y": 11598.4,
    "dir": 5.82,
    "type": null,
    "id": 12
}, {
    "sid": 2266,
    "x": 2756.2,
    "y": 9026.4,
    "dir": 1.14,
    "type": null,
    "id": 10
}, {
    "sid": 2267,
    "x": 4377.3,
    "y": 9348.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2268,
    "x": 4494.3,
    "y": 10503.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2269,
    "x": 12741,
    "y": 7478,
    "dir": 0,
    "type": 2
}, {
    "sid": 2270,
    "x": 4951.3,
    "y": 9160.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2271,
    "x": 5059.3,
    "y": 10446.7,
    "dir": 0,
    "type": 1
}, {
    "sid": 2272,
    "x": 13758.9,
    "y": 10668.7,
    "dir": 0,
    "type": 1
}, {
    "sid": 2273,
    "x": 14026.9,
    "y": 10746.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2274,
    "x": 13840.9,
    "y": 11145.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2275,
    "x": 12547.2,
    "y": 10911.7,
    "dir": -6.09,
    "type": null,
    "id": 10
}, {
    "sid": 2276,
    "x": 12547.8,
    "y": 10809.9,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2277,
    "x": 12672.9,
    "y": 11082.2,
    "dir": 5.34,
    "type": null,
    "id": 10
}, {
    "sid": 2278,
    "x": 12442.7,
    "y": 11185.7,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2279,
    "x": 5777.3,
    "y": 9914.6,
    "dir": 0,
    "type": 1
}, {
    "sid": 2280,
    "x": 5880.3,
    "y": 9027.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2281,
    "x": 12448.2,
    "y": 11075.3,
    "dir": 1.7,
    "type": null,
    "id": 10
}, {
    "sid": 2282,
    "x": 12476.8,
    "y": 10614.1,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2283,
    "x": 12472.2,
    "y": 10980.2,
    "dir": -2.24,
    "type": null,
    "id": 10
}, {
    "sid": 2284,
    "x": 4714.7,
    "y": 9480.3,
    "dir": 0.63,
    "type": null,
    "id": 15
}, {
    "sid": 2285,
    "x": 4660,
    "y": 9371.3,
    "dir": -2.3,
    "type": null,
    "id": 15
}, {
    "sid": 2286,
    "x": 4822.9,
    "y": 9365.6,
    "dir": -0.96,
    "type": null,
    "id": 15
}, {
    "sid": 2287,
    "x": 12554.1,
    "y": 11201,
    "dir": -3.77,
    "type": null,
    "id": 10
}, {
    "sid": 2288,
    "x": 12374.4,
    "y": 10992.9,
    "dir": 3.12,
    "type": null,
    "id": 10
}, {
    "sid": 2289,
    "x": 12379.8,
    "y": 10858.8,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2290,
    "x": 12621.7,
    "y": 11268.9,
    "dir": -3.76,
    "type": null,
    "id": 10
}, {
    "sid": 2291,
    "x": 12342.2,
    "y": 11211.7,
    "dir": 2.03,
    "type": null,
    "id": 10
}, {
    "sid": 2292,
    "x": 13907.2,
    "y": 11356.3,
    "dir": -1.98,
    "type": null,
    "id": 22
}, {
    "sid": 2293,
    "x": 12273.7,
    "y": 11344.1,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2294,
    "x": 12087.7,
    "y": 10849.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2295,
    "x": 12357.7,
    "y": 11416.1,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2296,
    "x": 12634.8,
    "y": 11393.3,
    "dir": -3.01,
    "type": null,
    "id": 10
}, {
    "sid": 2297,
    "x": 12802.8,
    "y": 11389.8,
    "dir": 6.11,
    "type": null,
    "id": 10
}, {
    "sid": 2298,
    "x": 12856.9,
    "y": 11614.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2299,
    "x": 12437.1,
    "y": 11492.9,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2300,
    "x": 12273.7,
    "y": 11485,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2301,
    "x": 4916.2,
    "y": 9459.7,
    "dir": 0.36,
    "type": null,
    "id": 15
}, {
    "sid": 2302,
    "x": 12635.1,
    "y": 11489.4,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2303,
    "x": 4939,
    "y": 9358.4,
    "dir": -1.14,
    "type": null,
    "id": 15
}, {
    "sid": 2304,
    "x": 12803.1,
    "y": 11489.4,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2305,
    "x": 12505.6,
    "y": 11557.2,
    "dir": -0.17,
    "type": null,
    "id": 10
}, {
    "sid": 2306,
    "x": 14187.9,
    "y": 11779.7,
    "dir": 0,
    "type": 1
}, {
    "sid": 2307,
    "x": 12508.1,
    "y": 11771.5,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2308,
    "x": 12424.1,
    "y": 11807.6,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2309,
    "x": 12508.1,
    "y": 11662.8,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2310,
    "x": 12424.1,
    "y": 11698.3,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2311,
    "x": 5013.5,
    "y": 9499.1,
    "dir": 1.01,
    "type": null,
    "id": 15
}, {
    "sid": 2312,
    "x": 6387.4,
    "y": 10202.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2313,
    "x": 12421.9,
    "y": 11596.3,
    "dir": 0.87,
    "type": null,
    "id": 10
}, {
    "sid": 2314,
    "x": 12635.1,
    "y": 11588.3,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2315,
    "x": 12655.9,
    "y": 11714.7,
    "dir": -3.42,
    "type": null,
    "id": 10
}, {
    "sid": 2316,
    "x": 12724.8,
    "y": 11811.1,
    "dir": -3.71,
    "type": null,
    "id": 10
}, {
    "sid": 2317,
    "x": 5158.6,
    "y": 9485.6,
    "dir": 0.75,
    "type": null,
    "id": 15
}, {
    "sid": 2318,
    "x": 5144.7,
    "y": 9353.5,
    "dir": -1.81,
    "type": null,
    "id": 15
}, {
    "sid": 2319,
    "x": 12881.7,
    "y": 11733.5,
    "dir": 5.37,
    "type": null,
    "id": 10
}, {
    "sid": 2320,
    "x": 12285.7,
    "y": 11915.7,
    "dir": 0,
    "type": 1
}, {
    "sid": 2321,
    "x": 5298,
    "y": 9400.1,
    "dir": -0.07,
    "type": null,
    "id": 15
}, {
    "sid": 2322,
    "x": 13014.9,
    "y": 11965.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2323,
    "x": 12340.1,
    "y": 11844.8,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2324,
    "x": 12508.1,
    "y": 11881.2,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2325,
    "x": 12424.1,
    "y": 11916.7,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2326,
    "x": 12832.8,
    "y": 11883.9,
    "dir": -1.91,
    "type": null,
    "id": 10
}, {
    "sid": 2327,
    "x": 5400.6,
    "y": 9327.1,
    "dir": -0.33,
    "type": null,
    "id": 15
}, {
    "sid": 2328,
    "x": 12508.1,
    "y": 11990.4,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2329,
    "x": 13823,
    "y": 8673.4,
    "dir": 3.56,
    "type": null,
    "id": 12
}, {
    "sid": 2330,
    "x": 12424.1,
    "y": 12026,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2331,
    "x": 13054.6,
    "y": 12090.4,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 2332,
    "x": 12419.2,
    "y": 12170.5,
    "dir": 1.63,
    "type": null,
    "id": 10
}, {
    "sid": 2333,
    "x": 12951.2,
    "y": 12155.2,
    "dir": -4.01,
    "type": null,
    "id": 10
}, {
    "sid": 2334,
    "x": 551.1,
    "y": 11697.3,
    "dir": 6.08,
    "type": null,
    "id": 12
}, {
    "sid": 2335,
    "x": 5507,
    "y": 9286.8,
    "dir": -0.76,
    "type": null,
    "id": 15
}, {
    "sid": 2336,
    "x": 6889.4,
    "y": 9609.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2337,
    "x": 13500.9,
    "y": 12238.7,
    "dir": 0,
    "type": 1
}, {
    "sid": 2338,
    "x": 13900.4,
    "y": 9053.7,
    "dir": 0.37,
    "type": null,
    "id": 12
}, {
    "sid": 2339,
    "x": 13738,
    "y": 9053.6,
    "dir": 2.78,
    "type": null,
    "id": 12
}, {
    "sid": 2340,
    "x": 5528.5,
    "y": 9391.7,
    "dir": 1.23,
    "type": null,
    "id": 15
}, {
    "sid": 2341,
    "x": 13126.6,
    "y": 12174.4,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2342,
    "x": 553.1,
    "y": 11823.4,
    "dir": 6.13,
    "type": null,
    "id": 12
}, {
    "sid": 2343,
    "x": 5575.5,
    "y": 9203.2,
    "dir": -1.26,
    "type": null,
    "id": 15
}, {
    "sid": 2344,
    "x": 12457.6,
    "y": 12253.9,
    "dir": -5.36,
    "type": null,
    "id": 10
}, {
    "sid": 2345,
    "x": 12286,
    "y": 12273.5,
    "dir": 2.67,
    "type": null,
    "id": 10
}, {
    "sid": 2346,
    "x": 5674.9,
    "y": 9260.2,
    "dir": 0.29,
    "type": null,
    "id": 15
}, {
    "sid": 2347,
    "x": 13370.9,
    "y": 12447.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 2348,
    "x": 13654.7,
    "y": 9331.2,
    "dir": 3.56,
    "type": null,
    "id": 12
}, {
    "sid": 2349,
    "x": 13770.1,
    "y": 9445.5,
    "dir": 1.15,
    "type": null,
    "id": 12
}, {
    "sid": 2350,
    "x": 570.3,
    "y": 12177.3,
    "dir": 5.8,
    "type": null,
    "id": 12
}, {
    "sid": 2351,
    "x": 7312.4,
    "y": 10039.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2352,
    "x": 7334.4,
    "y": 8463.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2353,
    "x": 7309,
    "y": 9688,
    "dir": 0,
    "type": 2
}, {
    "sid": 2354,
    "x": 7684.4,
    "y": 10164.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2355,
    "x": 544.6,
    "y": 11145.3,
    "dir": 2.83,
    "type": null,
    "id": 12
}, {
    "sid": 2356,
    "x": 6819.4,
    "y": 10394.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2357,
    "x": 7873.4,
    "y": 10431.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2358,
    "x": 8070.4,
    "y": 9725.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2359,
    "x": 3842.2,
    "y": 12711.3,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2360,
    "x": 3516.4,
    "y": 12579.4,
    "dir": 2.18,
    "type": null,
    "id": 10
}, {
    "sid": 2361,
    "x": 3946.6,
    "y": 12711.3,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2362,
    "x": 7210.4,
    "y": 10596.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2363,
    "x": 4050.7,
    "y": 12711.3,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2364,
    "x": 4122.7,
    "y": 12627.3,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2365,
    "x": 4154.8,
    "y": 12711.7,
    "dir": 1.46,
    "type": null,
    "id": 10
}, {
    "sid": 2366,
    "x": 4290.4,
    "y": 12725,
    "dir": 2.22,
    "type": null,
    "id": 10
}, {
    "sid": 2367,
    "x": 8315.6,
    "y": 9398.6,
    "dir": 0,
    "type": 1
}, {
    "sid": 2368,
    "x": 4519.3,
    "y": 13051.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 2369,
    "x": 4695.9,
    "y": 13042.6,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2370,
    "x": 4628.3,
    "y": 12931.9,
    "dir": 0.72,
    "type": null,
    "id": 10
}, {
    "sid": 2371,
    "x": 4518.9,
    "y": 12947.9,
    "dir": 2.13,
    "type": null,
    "id": 10
}, {
    "sid": 2372,
    "x": 4629.3,
    "y": 12821.3,
    "dir": -0.7,
    "type": null,
    "id": 10
}, {
    "sid": 2373,
    "x": 4557.7,
    "y": 12753.5,
    "dir": -0.65,
    "type": null,
    "id": 10
}, {
    "sid": 2374,
    "x": 4440.6,
    "y": 12873.9,
    "dir": 2.19,
    "type": null,
    "id": 10
}, {
    "sid": 2375,
    "x": 8249.6,
    "y": 8721.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2376,
    "x": 4484,
    "y": 12680.6,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 2377,
    "x": 4365.2,
    "y": 12799.4,
    "dir": 2.2,
    "type": null,
    "id": 10
}, {
    "sid": 2378,
    "x": 4410.8,
    "y": 12607.8,
    "dir": -0.62,
    "type": null,
    "id": 10
}, {
    "sid": 2379,
    "x": 4743.8,
    "y": 12874.6,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2380,
    "x": 4815,
    "y": 13042.6,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2381,
    "x": 12508.9,
    "y": 12416.4,
    "dir": -0.28,
    "type": null,
    "id": 10
}, {
    "sid": 2382,
    "x": 4854.7,
    "y": 12874.6,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2383,
    "x": 12511.7,
    "y": 9427.7,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 2384,
    "x": 12567.5,
    "y": 9508.9,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 2385,
    "x": 12530.4,
    "y": 12565.5,
    "dir": -0.09,
    "type": null,
    "id": 10
}, {
    "sid": 2386,
    "x": 4906.7,
    "y": 13042.6,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2387,
    "x": 4956.1,
    "y": 12874.2,
    "dir": -1.45,
    "type": null,
    "id": 10
}, {
    "sid": 2388,
    "x": 5018.2,
    "y": 13039.7,
    "dir": 1.34,
    "type": null,
    "id": 10
}, {
    "sid": 2389,
    "x": 12453,
    "y": 12625,
    "dir": 1.45,
    "type": null,
    "id": 10
}, {
    "sid": 2390,
    "x": 5049.3,
    "y": 12868.5,
    "dir": -1.56,
    "type": null,
    "id": 10
}, {
    "sid": 2391,
    "x": 12696.3,
    "y": 9346.5,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 2392,
    "x": 12770.2,
    "y": 9427.7,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 2393,
    "x": 12567.5,
    "y": 9346.5,
    "dir": 4.35,
    "type": null,
    "id": 12
}, {
    "sid": 2394,
    "x": 5138.8,
    "y": 13020,
    "dir": 1.06,
    "type": null,
    "id": 10
}, {
    "sid": 2395,
    "x": 13065,
    "y": 12823,
    "dir": 0,
    "type": 2
}, {
    "sid": 2396,
    "x": 12696.3,
    "y": 9508.9,
    "dir": 1.94,
    "type": null,
    "id": 12
}, {
    "sid": 2397,
    "x": 12546.4,
    "y": 12829.8,
    "dir": 1.53,
    "type": null,
    "id": 10
}, {
    "sid": 2398,
    "x": 14156,
    "y": 12974,
    "dir": 0,
    "type": 2
}, {
    "sid": 2399,
    "x": 12628,
    "y": 12926.6,
    "dir": -6.16,
    "type": null,
    "id": 10
}, {
    "sid": 2400,
    "x": 5129.8,
    "y": 12823.1,
    "dir": -2.2,
    "type": null,
    "id": 10
}, {
    "sid": 2401,
    "x": 5200.7,
    "y": 12750.2,
    "dir": -2.23,
    "type": null,
    "id": 10
}, {
    "sid": 2402,
    "x": 12543.7,
    "y": 13000.9,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2403,
    "x": 5248.6,
    "y": 12941.8,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 2404,
    "x": 12899,
    "y": 9427.7,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 2405,
    "x": 5287,
    "y": 12591.7,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2406,
    "x": 5262,
    "y": 12680.7,
    "dir": -2.34,
    "type": null,
    "id": 10
}, {
    "sid": 2407,
    "x": 5322.6,
    "y": 12865.7,
    "dir": 0.6,
    "type": null,
    "id": 10
}, {
    "sid": 2408,
    "x": 12678.4,
    "y": 13176.4,
    "dir": -5.98,
    "type": null,
    "id": 10
}, {
    "sid": 2409,
    "x": 12644.5,
    "y": 13070,
    "dir": -0.43,
    "type": null,
    "id": 10
}, {
    "sid": 2410,
    "x": 12580.3,
    "y": 13146.4,
    "dir": 1.26,
    "type": null,
    "id": 10
}, {
    "sid": 2411,
    "x": 12630.4,
    "y": 13285.7,
    "dir": -5.34,
    "type": null,
    "id": 10
}, {
    "sid": 2412,
    "x": 9025.6,
    "y": 8416.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2413,
    "x": 5396.4,
    "y": 12781.5,
    "dir": 0.49,
    "type": null,
    "id": 10
}, {
    "sid": 2414,
    "x": 12721.9,
    "y": 13415.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 2415,
    "x": 12539.2,
    "y": 13371,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2416,
    "x": 5455,
    "y": 12643.9,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2417,
    "x": 12433.5,
    "y": 13378.3,
    "dir": 2.23,
    "type": null,
    "id": 10
}, {
    "sid": 2418,
    "x": 11861,
    "y": 13582,
    "dir": 0,
    "type": 2
}, {
    "sid": 2419,
    "x": 12288.1,
    "y": 13550.1,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2420,
    "x": 11709.5,
    "y": 13672.2,
    "dir": -2.11,
    "type": null,
    "id": 22
}, {
    "sid": 2421,
    "x": 6120.6,
    "y": 12687.2,
    "dir": 1.38,
    "type": null,
    "id": 10
}, {
    "sid": 2422,
    "x": 9312.6,
    "y": 8800.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2423,
    "x": 13960,
    "y": 13960,
    "dir": 0,
    "type": 4
}, {
    "sid": 2424,
    "x": 12288.1,
    "y": 13769.1,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2425,
    "x": 12372.1,
    "y": 13731.3,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2426,
    "x": 12456.1,
    "y": 13841.4,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2427,
    "x": 12372.1,
    "y": 13877,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2428,
    "x": 5985.9,
    "y": 12665.7,
    "dir": 1.84,
    "type": null,
    "id": 10
}, {
    "sid": 2429,
    "x": 12463.2,
    "y": 13946.6,
    "dir": -2.37,
    "type": null,
    "id": 10
}, {
    "sid": 2430,
    "x": 5920.5,
    "y": 12597,
    "dir": 2.5,
    "type": null,
    "id": 10
}, {
    "sid": 2431,
    "x": 6271.4,
    "y": 14031.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 2432,
    "x": 6233.6,
    "y": 12679.6,
    "dir": 1.26,
    "type": null,
    "id": 10
}, {
    "sid": 2433,
    "x": 6398.5,
    "y": 13451.5,
    "dir": 0,
    "type": 2
}, {
    "sid": 2434,
    "x": 9513,
    "y": 8967,
    "dir": 0,
    "type": 2
}, {
    "sid": 2435,
    "x": 6364.3,
    "y": 13285,
    "dir": 0,
    "type": 2
}, {
    "sid": 2436,
    "x": 6364.3,
    "y": 13115,
    "dir": 0,
    "type": 2
}, {
    "sid": 2437,
    "x": 6398.5,
    "y": 12948.5,
    "dir": 0,
    "type": 2
}, {
    "sid": 2438,
    "x": 6369.8,
    "y": 12624.8,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 2439,
    "x": 6465.5,
    "y": 13607.7,
    "dir": 0,
    "type": 2
}, {
    "sid": 2440,
    "x": 6465.5,
    "y": 12792.3,
    "dir": 0,
    "type": 2
}, {
    "sid": 2441,
    "x": 9838.6,
    "y": 8504.6,
    "dir": 0,
    "type": 1
}, {
    "sid": 2442,
    "x": 6562.6,
    "y": 13747.2,
    "dir": 0,
    "type": 2
}, {
    "sid": 2443,
    "x": 6685.8,
    "y": 13864.3,
    "dir": 0,
    "type": 2
}, {
    "sid": 2444,
    "x": 6790,
    "y": 13315,
    "dir": 0,
    "type": 2
}, {
    "sid": 2445,
    "x": 9989.6,
    "y": 7984.4,
    "dir": 0,
    "type": 1
}, {
    "sid": 2446,
    "x": 6830.1,
    "y": 13954.2,
    "dir": 0,
    "type": 2
}, {
    "sid": 2447,
    "x": 6721.8,
    "y": 14090.2,
    "dir": 3.06,
    "type": null,
    "id": 22
}, {
    "sid": 2448,
    "x": 6989.5,
    "y": 14013.2,
    "dir": 0,
    "type": 2
}, {
    "sid": 2449,
    "x": 10058.6,
    "y": 8813.6,
    "dir": 0,
    "type": 1
}, {
    "sid": 2450,
    "x": 12573.3,
    "y": 13936.8,
    "dir": 5.33,
    "type": null,
    "id": 10
}, {
    "sid": 2451,
    "x": 12649,
    "y": 14016.2,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2452,
    "x": 12372.1,
    "y": 13986.1,
    "dir": 1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2453,
    "x": 12456,
    "y": 14057,
    "dir": -3.79,
    "type": null,
    "id": 10
}, {
    "sid": 2454,
    "x": 12549.7,
    "y": 14100.1,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2455,
    "x": 11407,
    "y": 12916,
    "dir": 0,
    "type": 2
}, {
    "sid": 2456,
    "x": 6801,
    "y": 14262,
    "dir": 0,
    "type": 2
}, {
    "sid": 2457,
    "x": 7362.3,
    "y": 13753.4,
    "dir": 3.06,
    "type": null,
    "id": 22
}, {
    "sid": 2458,
    "x": 6441,
    "y": 12557.9,
    "dir": 0.7,
    "type": null,
    "id": 10
}, {
    "sid": 2459,
    "x": 10970,
    "y": 13344,
    "dir": 0,
    "type": 2
}, {
    "sid": 2460,
    "x": 10936,
    "y": 12404,
    "dir": 0,
    "type": 2
}, {
    "sid": 2461,
    "x": 10837.5,
    "y": 12492.2,
    "dir": -0.19,
    "type": null,
    "id": 10
}, {
    "sid": 2462,
    "x": 10750.7,
    "y": 12423.6,
    "dir": -1.61,
    "type": null,
    "id": 10
}, {
    "sid": 2463,
    "x": 10783,
    "y": 12588.5,
    "dir": 1.22,
    "type": null,
    "id": 10
}, {
    "sid": 2464,
    "x": 11138.8,
    "y": 12134.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2465,
    "x": 11046.3,
    "y": 12134.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2466,
    "x": 10929.2,
    "y": 12145.2,
    "dir": 1.24,
    "type": null,
    "id": 10
}, {
    "sid": 2467,
    "x": 10832.2,
    "y": 12148.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2468,
    "x": 13284.7,
    "y": 9427.7,
    "dir": 3.14,
    "type": null,
    "id": 12
}, {
    "sid": 2469,
    "x": 10696.8,
    "y": 12148.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2470,
    "x": 8365,
    "y": 7525,
    "dir": 0,
    "type": 2
}, {
    "sid": 2471,
    "x": 10898.7,
    "y": 11924.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2472,
    "x": 11210.7,
    "y": 12050.7,
    "dir": 0,
    "type": null,
    "id": 10
}, {
    "sid": 2473,
    "x": 5455,
    "y": 12539.5,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2474,
    "x": 6207.1,
    "y": 12513.7,
    "dir": -1.58,
    "type": null,
    "id": 10
}, {
    "sid": 2475,
    "x": 6114.3,
    "y": 12519.4,
    "dir": -1.45,
    "type": null,
    "id": 10
}, {
    "sid": 2476,
    "x": 5287,
    "y": 12486.6,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2477,
    "x": 10258.6,
    "y": 8693.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2478,
    "x": 10985.6,
    "y": 12050,
    "dir": -0.17,
    "type": null,
    "id": 10
}, {
    "sid": 2479,
    "x": 10448.7,
    "y": 8884.6,
    "dir": 0,
    "type": 1
}, {
    "sid": 2480,
    "x": 11138.8,
    "y": 11966.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2481,
    "x": 6291.1,
    "y": 12467.8,
    "dir": -2.16,
    "type": null,
    "id": 10
}, {
    "sid": 2482,
    "x": 11046.3,
    "y": 11966.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2483,
    "x": 10563.7,
    "y": 7594.4,
    "dir": 0,
    "type": 1
}, {
    "sid": 2484,
    "x": 10787.6,
    "y": 11980.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2485,
    "x": 5912.3,
    "y": 12441.1,
    "dir": 3.36,
    "type": null,
    "id": 10
}, {
    "sid": 2486,
    "x": 5455,
    "y": 12434.5,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2487,
    "x": 6376.1,
    "y": 12393.7,
    "dir": -2.04,
    "type": null,
    "id": 10
}, {
    "sid": 2488,
    "x": 6141.9,
    "y": 12413,
    "dir": -5.37,
    "type": null,
    "id": 10
}, {
    "sid": 2489,
    "x": 10825.7,
    "y": 8516.6,
    "dir": 0,
    "type": 0
}, {
    "sid": 2490,
    "x": 5983.5,
    "y": 12337.3,
    "dir": 3.7,
    "type": null,
    "id": 10
}, {
    "sid": 2491,
    "x": 10696.8,
    "y": 11980.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2492,
    "x": 6056.5,
    "y": 12259.5,
    "dir": 3.76,
    "type": null,
    "id": 10
}, {
    "sid": 2493,
    "x": 10603.9,
    "y": 11980.7,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2494,
    "x": 6217.5,
    "y": 12302.7,
    "dir": -5.79,
    "type": null,
    "id": 10
}, {
    "sid": 2495,
    "x": 11086.7,
    "y": 7873.4,
    "dir": 0,
    "type": 0
}, {
    "sid": 2496,
    "x": 8905.8,
    "y": 8487.1,
    "dir": 0.31,
    "type": null,
    "id": 10
}, {
    "sid": 2497,
    "x": 10603.9,
    "y": 12148.7,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2498,
    "x": 10590.8,
    "y": 12244.3,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2499,
    "x": 10590.8,
    "y": 12336.7,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2500,
    "x": 10590.8,
    "y": 12428.9,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2501,
    "x": 10570.9,
    "y": 12551.3,
    "dir": 0.29,
    "type": null,
    "id": 10
}, {
    "sid": 2502,
    "x": 10527.7,
    "y": 11025.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2503,
    "x": 11449,
    "y": 11052,
    "dir": 0,
    "type": 2
}, {
    "sid": 2504,
    "x": 10964.4,
    "y": 11040,
    "dir": -2.1,
    "type": null,
    "id": 22
}, {
    "sid": 2505,
    "x": 10506.8,
    "y": 12004.7,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2506,
    "x": 10506.8,
    "y": 12127.7,
    "dir": -1.57,
    "type": null,
    "id": 10
}, {
    "sid": 2507,
    "x": 11750.7,
    "y": 10591.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2508,
    "x": 10422.8,
    "y": 12076.7,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2509,
    "x": 10262.6,
    "y": 10672.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2510,
    "x": 10133.9,
    "y": 11016.1,
    "dir": -2.09,
    "type": null,
    "id": 22
}, {
    "sid": 2511,
    "x": 9986.6,
    "y": 11190.7,
    "dir": 0,
    "type": 1
}, {
    "sid": 2512,
    "x": 9727,
    "y": 10905,
    "dir": 0,
    "type": 2
}, {
    "sid": 2513,
    "x": 9908.3,
    "y": 11371.8,
    "dir": -0.26,
    "type": null,
    "id": 10
}, {
    "sid": 2514,
    "x": 9877.5,
    "y": 11461.4,
    "dir": 0.92,
    "type": null,
    "id": 10
}, {
    "sid": 2515,
    "x": 9738.8,
    "y": 11421.4,
    "dir": 2.29,
    "type": null,
    "id": 10
}, {
    "sid": 2516,
    "x": 9830.4,
    "y": 11272.4,
    "dir": -0.62,
    "type": null,
    "id": 10
}, {
    "sid": 2517,
    "x": 9760.8,
    "y": 11201.1,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 2518,
    "x": 9691.5,
    "y": 11131.5,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 2519,
    "x": 9674.5,
    "y": 11353.3,
    "dir": 2.23,
    "type": null,
    "id": 10
}, {
    "sid": 2520,
    "x": 9621.8,
    "y": 11061.5,
    "dir": -0.65,
    "type": null,
    "id": 10
}, {
    "sid": 2521,
    "x": 9608,
    "y": 11285.6,
    "dir": 2.2,
    "type": null,
    "id": 10
}, {
    "sid": 2522,
    "x": 9537.5,
    "y": 11215.3,
    "dir": 2.22,
    "type": null,
    "id": 10
}, {
    "sid": 2523,
    "x": 9551.9,
    "y": 10991.5,
    "dir": -0.65,
    "type": null,
    "id": 10
}, {
    "sid": 2524,
    "x": 9467.6,
    "y": 11145.3,
    "dir": 2.22,
    "type": null,
    "id": 10
}, {
    "sid": 2525,
    "x": 9481.9,
    "y": 10921.5,
    "dir": -0.65,
    "type": null,
    "id": 10
}, {
    "sid": 2526,
    "x": 9397.6,
    "y": 11075.3,
    "dir": 2.22,
    "type": null,
    "id": 10
}, {
    "sid": 2527,
    "x": 9413.9,
    "y": 10854,
    "dir": -0.62,
    "type": null,
    "id": 10
}, {
    "sid": 2528,
    "x": 9344.8,
    "y": 10785,
    "dir": -0.62,
    "type": null,
    "id": 10
}, {
    "sid": 2529,
    "x": 9299.6,
    "y": 11651.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2530,
    "x": 9956.1,
    "y": 11535.1,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2531,
    "x": 9788.1,
    "y": 11535.1,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2532,
    "x": 9293.4,
    "y": 10971.1,
    "dir": 2.22,
    "type": null,
    "id": 10
}, {
    "sid": 2533,
    "x": 9273.4,
    "y": 10713,
    "dir": -0.65,
    "type": null,
    "id": 10
}, {
    "sid": 2534,
    "x": 9224.3,
    "y": 10902,
    "dir": 2.22,
    "type": null,
    "id": 10
}, {
    "sid": 2535,
    "x": 9226.3,
    "y": 10431.2,
    "dir": 0.76,
    "type": null,
    "id": 10
}, {
    "sid": 2536,
    "x": 9239.5,
    "y": 10332.1,
    "dir": -0.5,
    "type": null,
    "id": 10
}, {
    "sid": 2537,
    "x": 9164.9,
    "y": 10258.9,
    "dir": -0.47,
    "type": null,
    "id": 10
}, {
    "sid": 2538,
    "x": 9156.3,
    "y": 10833.5,
    "dir": 2.19,
    "type": null,
    "id": 10
}, {
    "sid": 2539,
    "x": 9142.7,
    "y": 10659.9,
    "dir": -1.27,
    "type": null,
    "id": 10
}, {
    "sid": 2540,
    "x": 9128,
    "y": 10449.2,
    "dir": 2.02,
    "type": null,
    "id": 10
}, {
    "sid": 2541,
    "x": 9149.3,
    "y": 10357.6,
    "dir": 0.79,
    "type": null,
    "id": 10
}, {
    "sid": 2542,
    "x": 9098.7,
    "y": 11090.5,
    "dir": 0.18,
    "type": null,
    "id": 10
}, {
    "sid": 2543,
    "x": 10175.6,
    "y": 11811.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2544,
    "x": 9055.4,
    "y": 11000.5,
    "dir": -1.08,
    "type": null,
    "id": 10
}, {
    "sid": 2545,
    "x": 9050.6,
    "y": 10373.3,
    "dir": 2.04,
    "type": null,
    "id": 10
}, {
    "sid": 2546,
    "x": 9047.6,
    "y": 11810.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2547,
    "x": 9645.6,
    "y": 11939.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2548,
    "x": 9956.6,
    "y": 11825.4,
    "dir": -6.17,
    "type": null,
    "id": 10
}, {
    "sid": 2549,
    "x": 9788.7,
    "y": 11832.4,
    "dir": 2.95,
    "type": null,
    "id": 10
}, {
    "sid": 2550,
    "x": 9956.1,
    "y": 11731,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2551,
    "x": 9788.1,
    "y": 11731,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2552,
    "x": 9956.1,
    "y": 11633.4,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2553,
    "x": 9788.1,
    "y": 11633.4,
    "dir": 2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2554,
    "x": 9053.2,
    "y": 11636.9,
    "dir": -2.43,
    "type": null,
    "id": 10
}, {
    "sid": 2555,
    "x": 9125.7,
    "y": 11701.1,
    "dir": -2.38,
    "type": null,
    "id": 10
}, {
    "sid": 2556,
    "x": 9204.7,
    "y": 11749.9,
    "dir": -2.36,
    "type": null,
    "id": 10
}, {
    "sid": 2557,
    "x": 9518.4,
    "y": 11817.3,
    "dir": -5.27,
    "type": null,
    "id": 10
}, {
    "sid": 2558,
    "x": 9408.8,
    "y": 11690,
    "dir": 3.85,
    "type": null,
    "id": 10
}, {
    "sid": 2559,
    "x": 9509.6,
    "y": 11623.2,
    "dir": 4.2,
    "type": null,
    "id": 10
}, {
    "sid": 2560,
    "x": 9638.1,
    "y": 11771.8,
    "dir": -4.62,
    "type": null,
    "id": 10
}, {
    "sid": 2561,
    "x": 9627.6,
    "y": 11604.2,
    "dir": 4.5,
    "type": null,
    "id": 10
}, {
    "sid": 2562,
    "x": 9696.4,
    "y": 11686.3,
    "dir": -1.83,
    "type": null,
    "id": 10
}, {
    "sid": 2563,
    "x": 9036.9,
    "y": 10652.7,
    "dir": -1.38,
    "type": null,
    "id": 10
}, {
    "sid": 2564,
    "x": 9196.2,
    "y": 11860.2,
    "dir": -3.77,
    "type": null,
    "id": 10
}, {
    "sid": 2565,
    "x": 9286.4,
    "y": 11898.5,
    "dir": -4.41,
    "type": null,
    "id": 10
}, {
    "sid": 2566,
    "x": 9421.9,
    "y": 11885.2,
    "dir": -4.97,
    "type": null,
    "id": 10
}, {
    "sid": 2567,
    "x": 9968.8,
    "y": 11950.6,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 2568,
    "x": 9795.9,
    "y": 11937.6,
    "dir": 2.84,
    "type": null,
    "id": 10
}, {
    "sid": 2569,
    "x": 9182.2,
    "y": 11963.2,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2570,
    "x": 9083.4,
    "y": 11963.2,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2571,
    "x": 10038.3,
    "y": 12020.1,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 2572,
    "x": 9537.4,
    "y": 12003.4,
    "dir": 0.63,
    "type": null,
    "id": 10
}, {
    "sid": 2573,
    "x": 9030.2,
    "y": 10820.6,
    "dir": 1.46,
    "type": null,
    "id": 10
}, {
    "sid": 2574,
    "x": 9026.5,
    "y": 11159.5,
    "dir": 1.44,
    "type": null,
    "id": 10
}, {
    "sid": 2575,
    "x": 9850,
    "y": 12069.3,
    "dir": 2.2,
    "type": null,
    "id": 10
}, {
    "sid": 2576,
    "x": 9470,
    "y": 12071.1,
    "dir": 0.65,
    "type": null,
    "id": 10
}, {
    "sid": 2577,
    "x": 9726.7,
    "y": 12050.6,
    "dir": -0.06,
    "type": null,
    "id": 10
}, {
    "sid": 2578,
    "x": 8996.9,
    "y": 11526.9,
    "dir": 4.64,
    "type": null,
    "id": 10
}, {
    "sid": 2579,
    "x": 10107.6,
    "y": 12089.1,
    "dir": -0.65,
    "type": null,
    "id": 10
}, {
    "sid": 2580,
    "x": 9339.3,
    "y": 12123.6,
    "dir": 1.27,
    "type": null,
    "id": 10
}, {
    "sid": 2581,
    "x": 9232.8,
    "y": 12130.9,
    "dir": 1.4,
    "type": null,
    "id": 10
}, {
    "sid": 2582,
    "x": 9133.2,
    "y": 12131.2,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2583,
    "x": 9028.3,
    "y": 12082.4,
    "dir": -0.28,
    "type": null,
    "id": 10
}, {
    "sid": 2584,
    "x": 9919.5,
    "y": 12138.8,
    "dir": 2.2,
    "type": null,
    "id": 10
}, {
    "sid": 2585,
    "x": 9772.2,
    "y": 12141.2,
    "dir": 0.93,
    "type": null,
    "id": 10
}, {
    "sid": 2586,
    "x": 9661.8,
    "y": 12133.6,
    "dir": 2.35,
    "type": null,
    "id": 10
}, {
    "sid": 2587,
    "x": 9990.5,
    "y": 12209.6,
    "dir": 2.19,
    "type": null,
    "id": 10
}, {
    "sid": 2588,
    "x": 10098.9,
    "y": 12201.2,
    "dir": 0.8,
    "type": null,
    "id": 10
}, {
    "sid": 2589,
    "x": 9848.9,
    "y": 12206.5,
    "dir": -6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2590,
    "x": 9414,
    "y": 12211.8,
    "dir": -0.93,
    "type": null,
    "id": 10
}, {
    "sid": 2591,
    "x": 10212.8,
    "y": 12194.8,
    "dir": -0.62,
    "type": null,
    "id": 10
}, {
    "sid": 2592,
    "x": 10422.8,
    "y": 12199.7,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2593,
    "x": 10281.6,
    "y": 12262.8,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 2594,
    "x": 9184,
    "y": 12230,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2595,
    "x": 9323.2,
    "y": 12230,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2596,
    "x": 9507.3,
    "y": 12230,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2597,
    "x": 9646,
    "y": 12230,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2598,
    "x": 10092.4,
    "y": 12311.8,
    "dir": 2.22,
    "type": null,
    "id": 10
}, {
    "sid": 2599,
    "x": 9112,
    "y": 12313.9,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 2600,
    "x": 9251.2,
    "y": 12313.9,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 2601,
    "x": 9435.4,
    "y": 12313.9,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 2602,
    "x": 9574,
    "y": 12313.9,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 2603,
    "x": 9848.2,
    "y": 12299.5,
    "dir": -6.08,
    "type": null,
    "id": 10
}, {
    "sid": 2604,
    "x": 10379.1,
    "y": 12353.1,
    "dir": -0.76,
    "type": null,
    "id": 10
}, {
    "sid": 2605,
    "x": 10162.8,
    "y": 12381.6,
    "dir": 2.2,
    "type": null,
    "id": 10
}, {
    "sid": 2606,
    "x": 10234.5,
    "y": 12450.4,
    "dir": 2.17,
    "type": null,
    "id": 10
}, {
    "sid": 2607,
    "x": 9184,
    "y": 12397.9,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2608,
    "x": 9323.2,
    "y": 12397.9,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2609,
    "x": 9507.3,
    "y": 12397.9,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2610,
    "x": 9646,
    "y": 12397.9,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2611,
    "x": 9831.4,
    "y": 12397.9,
    "dir": -4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2612,
    "x": 9739.1,
    "y": 12444.8,
    "dir": 1.82,
    "type": null,
    "id": 10
}, {
    "sid": 2613,
    "x": 10422.8,
    "y": 12475.7,
    "dir": -2.99,
    "type": null,
    "id": 10
}, {
    "sid": 2614,
    "x": 9485.1,
    "y": 12491.1,
    "dir": 6.13,
    "type": null,
    "id": 10
}, {
    "sid": 2615,
    "x": 10324.7,
    "y": 12519.5,
    "dir": 1.9,
    "type": null,
    "id": 10
}, {
    "sid": 2616,
    "x": 10238.9,
    "y": 12572.4,
    "dir": -1.46,
    "type": null,
    "id": 10
}, {
    "sid": 2617,
    "x": 10104,
    "y": 12572.8,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2618,
    "x": 9280.2,
    "y": 12528.1,
    "dir": -2.6,
    "type": null,
    "id": 15
}, {
    "sid": 2619,
    "x": 10012.2,
    "y": 12572.8,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2620,
    "x": 9919.2,
    "y": 12572.8,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2621,
    "x": 9817.4,
    "y": 12529.9,
    "dir": -0.69,
    "type": null,
    "id": 10
}, {
    "sid": 2622,
    "x": 9711.8,
    "y": 12549.2,
    "dir": 0.8,
    "type": null,
    "id": 10
}, {
    "sid": 2623,
    "x": 9601.4,
    "y": 12556,
    "dir": 2.22,
    "type": null,
    "id": 10
}, {
    "sid": 2624,
    "x": 9387.1,
    "y": 12540.5,
    "dir": -0.88,
    "type": null,
    "id": 10
}, {
    "sid": 2625,
    "x": 10505.3,
    "y": 12642.9,
    "dir": 0.57,
    "type": null,
    "id": 10
}, {
    "sid": 2626,
    "x": 9623.8,
    "y": 12648.6,
    "dir": 2.73,
    "type": null,
    "id": 15
}, {
    "sid": 2627,
    "x": 9373.4,
    "y": 12641.3,
    "dir": -2.26,
    "type": null,
    "id": 15
}, {
    "sid": 2628,
    "x": 9180.9,
    "y": 12584.4,
    "dir": -1.46,
    "type": null,
    "id": 10
}, {
    "sid": 2629,
    "x": 10405.9,
    "y": 12718.9,
    "dir": 1.05,
    "type": null,
    "id": 10
}, {
    "sid": 2630,
    "x": 10294.5,
    "y": 12738.3,
    "dir": 1.35,
    "type": null,
    "id": 10
}, {
    "sid": 2631,
    "x": 10196.7,
    "y": 12740.8,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2632,
    "x": 10104,
    "y": 12740.8,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2633,
    "x": 10012.2,
    "y": 12740.8,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2634,
    "x": 9919.2,
    "y": 12740.8,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2635,
    "x": 9797.8,
    "y": 12720.9,
    "dir": 1.85,
    "type": null,
    "id": 10
}, {
    "sid": 2636,
    "x": 9291.6,
    "y": 12739,
    "dir": 1.13,
    "type": null,
    "id": 10
}, {
    "sid": 2637,
    "x": 9188.7,
    "y": 12752.2,
    "dir": 1.37,
    "type": null,
    "id": 10
}, {
    "sid": 2638,
    "x": 9094.1,
    "y": 12752.9,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2639,
    "x": 9048.1,
    "y": 12584.9,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2640,
    "x": 9001.4,
    "y": 12752.9,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2641,
    "x": 9985.6,
    "y": 13229.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 2642,
    "x": 8934.3,
    "y": 12393.9,
    "dir": -5.33,
    "type": null,
    "id": 10
}, {
    "sid": 2643,
    "x": 8955.3,
    "y": 12584.9,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2644,
    "x": 8909.1,
    "y": 12752.9,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2645,
    "x": 8862.9,
    "y": 12584.9,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2646,
    "x": 8824.2,
    "y": 12383.7,
    "dir": 2.37,
    "type": null,
    "id": 10
}, {
    "sid": 2647,
    "x": 8816.1,
    "y": 12752.9,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2648,
    "x": 8770.6,
    "y": 12584.9,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2649,
    "x": 8724.4,
    "y": 12752.9,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2650,
    "x": 8678.2,
    "y": 12584.9,
    "dir": -1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2651,
    "x": 8646.4,
    "y": 12366,
    "dir": 4.56,
    "type": null,
    "id": 10
}, {
    "sid": 2652,
    "x": 8631.3,
    "y": 12752.9,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2653,
    "x": 9447,
    "y": 13880,
    "dir": 0,
    "type": 2
}, {
    "sid": 2654,
    "x": 10570.7,
    "y": 13882.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 2655,
    "x": 8612.8,
    "y": 12662.7,
    "dir": -0.63,
    "type": null,
    "id": 10
}, {
    "sid": 2656,
    "x": 8594,
    "y": 13970,
    "dir": 0,
    "type": 2
}, {
    "sid": 2657,
    "x": 10301.7,
    "y": 14064.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 2658,
    "x": 8542.6,
    "y": 14166.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 2659,
    "x": 8505.3,
    "y": 12636.7,
    "dir": -2.04,
    "type": null,
    "id": 10
}, {
    "sid": 2660,
    "x": 8538.8,
    "y": 12801.2,
    "dir": 1.13,
    "type": null,
    "id": 10
}, {
    "sid": 2661,
    "x": 8430.3,
    "y": 12815.5,
    "dir": 1.37,
    "type": null,
    "id": 10
}, {
    "sid": 2662,
    "x": 8379,
    "y": 12649.1,
    "dir": -1.44,
    "type": null,
    "id": 10
}, {
    "sid": 2663,
    "x": 8335.5,
    "y": 12817.3,
    "dir": 1.42,
    "type": null,
    "id": 10
}, {
    "sid": 2664,
    "x": 8208,
    "y": 13200,
    "dir": 0,
    "type": 2
}, {
    "sid": 2665,
    "x": 8210,
    "y": 12765.8,
    "dir": 2.04,
    "type": null,
    "id": 10
}, {
    "sid": 2666,
    "x": 9509,
    "y": 14274,
    "dir": 0,
    "type": 2
}, {
    "sid": 2667,
    "x": 8022.8,
    "y": 13369.1,
    "dir": 0,
    "type": 2
}, {
    "sid": 2668,
    "x": 8022.8,
    "y": 13030.9,
    "dir": 0,
    "type": 2
}, {
    "sid": 2669,
    "x": 7971.9,
    "y": 13531.3,
    "dir": 0,
    "type": 2
}, {
    "sid": 2670,
    "x": 7971.9,
    "y": 12868.7,
    "dir": 0,
    "type": 2
}, {
    "sid": 2671,
    "x": 7889.4,
    "y": 13679.9,
    "dir": 0,
    "type": 2
}, {
    "sid": 2672,
    "x": 7872,
    "y": 13200,
    "dir": 0,
    "type": 2
}, {
    "sid": 2673,
    "x": 7854,
    "y": 14344,
    "dir": 0,
    "type": 2
}, {
    "sid": 2674,
    "x": 7778.7,
    "y": 13808.8,
    "dir": 0,
    "type": 2
}, {
    "sid": 2675,
    "x": 7644.3,
    "y": 13912.9,
    "dir": 0,
    "type": 2
}, {
    "sid": 2676,
    "x": 7487.4,
    "y": 12969.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 2677,
    "x": 7491.7,
    "y": 13987.7,
    "dir": 0,
    "type": 2
}, {
    "sid": 2678,
    "x": 7327.2,
    "y": 14030.3,
    "dir": 0,
    "type": 2
}, {
    "sid": 2679,
    "x": 7157.5,
    "y": 14038.9,
    "dir": 0,
    "type": 2
}, {
    "sid": 2680,
    "x": 7889.4,
    "y": 12720.1,
    "dir": 0,
    "type": 2
}, {
    "sid": 2681,
    "x": 8133.5,
    "y": 12699.5,
    "dir": 2.16,
    "type": null,
    "id": 10
}, {
    "sid": 2682,
    "x": 7778.7,
    "y": 12591.2,
    "dir": 0,
    "type": 2
}, {
    "sid": 2683,
    "x": 8066.1,
    "y": 12634.1,
    "dir": 2.19,
    "type": null,
    "id": 10
}, {
    "sid": 2684,
    "x": 7973.4,
    "y": 12618.6,
    "dir": 1.64,
    "type": null,
    "id": 10
}, {
    "sid": 2685,
    "x": 8148.8,
    "y": 12587.7,
    "dir": 0.59,
    "type": null,
    "id": 10
}, {
    "sid": 2686,
    "x": 7644.3,
    "y": 12487.1,
    "dir": 0,
    "type": 2
}, {
    "sid": 2687,
    "x": 8300.2,
    "y": 12526,
    "dir": -4.28,
    "type": null,
    "id": 10
}, {
    "sid": 2688,
    "x": 8505.4,
    "y": 12533.7,
    "dir": -4.54,
    "type": null,
    "id": 10
}, {
    "sid": 2689,
    "x": 7491.7,
    "y": 12412.3,
    "dir": 0,
    "type": 2
}, {
    "sid": 2690,
    "x": 8014,
    "y": 12461.9,
    "dir": -4.4,
    "type": null,
    "id": 10
}, {
    "sid": 2691,
    "x": 8114.9,
    "y": 12468.9,
    "dir": -4.52,
    "type": null,
    "id": 10
}, {
    "sid": 2692,
    "x": 8435.3,
    "y": 12448.1,
    "dir": -3.12,
    "type": null,
    "id": 10
}, {
    "sid": 2693,
    "x": 8574.4,
    "y": 12450,
    "dir": 3.14,
    "type": null,
    "id": 10
}, {
    "sid": 2694,
    "x": 7920.8,
    "y": 12481,
    "dir": 0.79,
    "type": null,
    "id": 10
}, {
    "sid": 2695,
    "x": 7809.2,
    "y": 12458.8,
    "dir": 1.1,
    "type": null,
    "id": 10
}, {
    "sid": 2696,
    "x": 7157.5,
    "y": 12361.1,
    "dir": 0,
    "type": 2
}, {
    "sid": 2697,
    "x": 7327.2,
    "y": 12369.7,
    "dir": 0,
    "type": 2
}, {
    "sid": 2698,
    "x": 8267.5,
    "y": 12398.1,
    "dir": -2.5,
    "type": null,
    "id": 10
}, {
    "sid": 2699,
    "x": 537.8,
    "y": 11011.2,
    "dir": 2.99,
    "type": null,
    "id": 12
}, {
    "sid": 2700,
    "x": 481.2,
    "y": 11509.5,
    "dir": 5.49,
    "type": null,
    "id": 12
}, {
    "sid": 2701,
    "x": 467.1,
    "y": 11749.8,
    "dir": -1.57,
    "type": null,
    "id": 12
}, {
    "sid": 2702,
    "x": 469.1,
    "y": 11964.5,
    "dir": 1.19,
    "type": null,
    "id": 12
}, {
    "sid": 2703,
    "x": 488.1,
    "y": 12061.7,
    "dir": 5.49,
    "type": null,
    "id": 12
}, {
    "sid": 2704,
    "x": 465.4,
    "y": 12177.9,
    "dir": -2.17,
    "type": null,
    "id": 12
}, {
    "sid": 2705,
    "x": 465,
    "y": 11283.4,
    "dir": 6.05,
    "type": null,
    "id": 12
}, {
    "sid": 2706,
    "x": 467.8,
    "y": 11410.9,
    "dir": 6.13,
    "type": null,
    "id": 12
}, {
    "sid": 2707,
    "x": 436.3,
    "y": 12287.3,
    "dir": -3.59,
    "type": null,
    "id": 12
}, {
    "sid": 2708,
    "x": 440,
    "y": 10925,
    "dir": 6.13,
    "type": null,
    "id": 12
}, {
    "sid": 2709,
    "x": 440,
    "y": 11054.2,
    "dir": 6.13,
    "type": null,
    "id": 12
}, {
    "sid": 2710,
    "x": 440,
    "y": 11178.8,
    "dir": 6.13,
    "type": null,
    "id": 12
}, {
    "sid": 2711,
    "x": 343.1,
    "y": 11612,
    "dir": -3.63,
    "type": null,
    "id": 12
}, {
    "sid": 2712,
    "x": 379.4,
    "y": 11706.1,
    "dir": -3.04,
    "type": null,
    "id": 12
}, {
    "sid": 2713,
    "x": 381.2,
    "y": 11823.4,
    "dir": -2.99,
    "type": null,
    "id": 12
}, {
    "sid": 2714,
    "x": 350,
    "y": 12164.2,
    "dir": -3.63,
    "type": null,
    "id": 12
}, {
    "sid": 2715,
    "x": 381.8,
    "y": 11337.3,
    "dir": -1.57,
    "type": null,
    "id": 12
}, {
    "sid": 2716,
    "x": 362.3,
    "y": 11460.6,
    "dir": -1.99,
    "type": null,
    "id": 12
}, {
    "sid": 2717,
    "x": 283,
    "y": 11714.7,
    "dir": 0,
    "type": 1
}, {
    "sid": 2718,
    "x": 268.1,
    "y": 10967.7,
    "dir": -2.99,
    "type": null,
    "id": 12
}, {
    "sid": 2719,
    "x": 268.1,
    "y": 11096.1,
    "dir": -2.99,
    "type": null,
    "id": 12
}, {
    "sid": 2720,
    "x": 286.2,
    "y": 11250.4,
    "dir": -3.42,
    "type": null,
    "id": 12
}, {
    "sid": 2721,
    "x": 92,
    "y": 11390.7,
    "dir": 0,
    "type": 0
}, {
    "sid": 2722,
    "x": 168,
    "y": 12376,
    "dir": 0,
    "type": 2
}, {
    "sid": 2723,
    "x": 1961.7,
    "y": 12954.6,
    "dir": -1.99,
    "type": null,
    "id": 22
}, {
    "sid": 2724,
    "x": 923,
    "y": 13583.9,
    "dir": 0,
    "type": 1
}, {
    "sid": 2725,
    "x": 1496,
    "y": 13692,
    "dir": 0,
    "type": 2
}, {
    "sid": 2726,
    "x": 1724,
    "y": 13678,
    "dir": 0,
    "type": 2
}, {
    "sid": 2727,
    "x": 230,
    "y": 13950,
    "dir": 0,
    "type": 2
}, {
    "sid": 2728,
    "x": 486,
    "y": 14137,
    "dir": 0,
    "type": 2
}];

function serialize(data) {
    const pow32 = 0x100000000;
    let floatBuffer, floatView;
    let array = new Uint8Array(128);
    let length = 0;
    append(data);
    return array.subarray(0, length);

    function append(data) {
         switch (typeof data) {
              case "undefined":
                   appendNull(data);
                   break;
              case "boolean":
                   appendBoolean(data);
                   break;
              case "number":
                   appendNumber(data);
                   break;
              case "string":
                   appendString(data);
                   break;
              case "object":
                   if (data === null) {
                        appendNull(data);
                   } else if (data instanceof Date) {
                        appendDate(data);
                   } else if (Array.isArray(data)) {
                        appendArray(data);
                   } else if (data instanceof Uint8Array || data instanceof Uint8ClampedArray) {
                        appendBinArray(data);
                   } else if (data instanceof Int8Array || data instanceof Int16Array || data instanceof Uint16Array ||
                        data instanceof Int32Array || data instanceof Uint32Array ||
                        data instanceof Float32Array || data instanceof Float64Array) {
                        appendArray(data);
                   } else {
                        appendObject(data);
                   }
                   break;
         }
    }

    function appendNull(data) {
         appendByte(0xc0);
    }

    function appendBoolean(data) {
         appendByte(data ? 0xc3 : 0xc2);
    }

    function appendNumber(data) {
         if (isFinite(data) && Math.floor(data) === data) {
              if (data >= 0 && data <= 0x7f) {
                   appendByte(data);
              } else if (data < 0 && data >= -0x20) {
                   appendByte(data);
              } else if (data > 0 && data <= 0xff) { // uint8
                   appendBytes([0xcc, data]);
              } else if (data >= -0x80 && data <= 0x7f) { // int8
                   appendBytes([0xd0, data]);
              } else if (data > 0 && data <= 0xffff) { // uint16
                   appendBytes([0xcd, data >>> 8, data]);
              } else if (data >= -0x8000 && data <= 0x7fff) { // int16
                   appendBytes([0xd1, data >>> 8, data]);
              } else if (data > 0 && data <= 0xffffffff) { // uint32
                   appendBytes([0xce, data >>> 24, data >>> 16, data >>> 8, data]);
              } else if (data >= -0x80000000 && data <= 0x7fffffff) { // int32
                   appendBytes([0xd2, data >>> 24, data >>> 16, data >>> 8, data]);
              } else if (data > 0 && data <= 0xffffffffffffffff) { // uint64
                   let hi = data / pow32;
                   let lo = data % pow32;
                   appendBytes([0xd3, hi >>> 24, hi >>> 16, hi >>> 8, hi, lo >>> 24, lo >>> 16, lo >>> 8, lo]);
              } else if (data >= -0x8000000000000000 && data <= 0x7fffffffffffffff) { // int64
                   appendByte(0xd3);
                   appendInt64(data);
              } else if (data < 0) { // below int64
                   appendBytes([0xd3, 0x80, 0, 0, 0, 0, 0, 0, 0]);
              } else { // above uint64
                   appendBytes([0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]);
              }
         } else {
              if (!floatView) {
                   floatBuffer = new ArrayBuffer(8);
                   floatView = new DataView(floatBuffer);
              }
              floatView.setFloat64(0, data);
              appendByte(0xcb);
              appendBytes(new Uint8Array(floatBuffer));
         }
    }

    function appendString(data) {
         let bytes = encodeUtf8(data);
         let length = bytes.length;

         if (length <= 0x1f) {
              appendByte(0xa0 + length);
         } else if (length <= 0xff) {
              appendBytes([0xd9, length]);
         } else if (length <= 0xffff) {
              appendBytes([0xda, length >>> 8, length]);
         } else {
              appendBytes([0xdb, length >>> 24, length >>> 16, length >>> 8, length]);
         }

         appendBytes(bytes);
    }

    function appendArray(data) {
         let length = data.length;

         if (length <= 0xf) {
              appendByte(0x90 + length);
         } else if (length <= 0xffff) {
              appendBytes([0xdc, length >>> 8, length]);
         } else {
              appendBytes([0xdd, length >>> 24, length >>> 16, length >>> 8, length]);
         }

         for (let index = 0; index < length; index++) {
              append(data[index]);
         }
    }

    function appendBinArray(data) {
         let length = data.length;

         if (length <= 0xf) {
              appendBytes([0xc4, length]);
         } else if (length <= 0xffff) {
              appendBytes([0xc5, length >>> 8, length]);
         } else {
              appendBytes([0xc6, length >>> 24, length >>> 16, length >>> 8, length]);
         }

         appendBytes(data);
    }

    function appendObject(data) {
         let length = 0;
         for (let key in data) length++;

         if (length <= 0xf) {
              appendByte(0x80 + length);
         } else if (length <= 0xffff) {
              appendBytes([0xde, length >>> 8, length]);
         } else {
              appendBytes([0xdf, length >>> 24, length >>> 16, length >>> 8, length]);
         }

         for (let key in data) {
              append(key);
              append(data[key]);
         }
    }

    function appendDate(data) {
         let sec = data.getTime() / 1000;
         if (data.getMilliseconds() === 0 && sec >= 0 && sec < 0x100000000) { // 32 bit seconds
              appendBytes([0xd6, 0xff, sec >>> 24, sec >>> 16, sec >>> 8, sec]);
         }
         else if (sec >= 0 && sec < 0x400000000) { // 30 bit nanoseconds, 34 bit seconds
              let ns = data.getMilliseconds() * 1000000;
              appendBytes([0xd7, 0xff, ns >>> 22, ns >>> 14, ns >>> 6, ((ns << 2) >>> 0) | (sec / pow32), sec >>> 24, sec >>> 16, sec >>> 8, sec]);
         }
         else { // 32 bit nanoseconds, 64 bit seconds, negative values allowed
              let ns = data.getMilliseconds() * 1000000;
              appendBytes([0xc7, 12, 0xff, ns >>> 24, ns >>> 16, ns >>> 8, ns]);
              appendInt64(sec);
         }
    }

    function appendByte(byte) {
         if (array.length < length + 1) {
              let newLength = array.length * 2;
              while (newLength < length + 1)
                   newLength *= 2;
              let newArray = new Uint8Array(newLength);
              newArray.set(array);
              array = newArray;
         }
         array[length] = byte;
         length++;
    }

    function appendBytes(bytes) {
         if (array.length < length + bytes.length) {
              let newLength = array.length * 2;
              while (newLength < length + bytes.length)
                   newLength *= 2;
              let newArray = new Uint8Array(newLength);
              newArray.set(array);
              array = newArray;
         }
         array.set(bytes, length);
         length += bytes.length;
    }

    function appendInt64(value) {
         let hi, lo;
         if (value >= 0) {
              hi = value / pow32;
              lo = value % pow32;
         }
         else {
              value++;
              hi = Math.abs(value) / pow32;
              lo = Math.abs(value) % pow32;
              hi = ~hi;
              lo = ~lo;
         }
         appendBytes([hi >>> 24, hi >>> 16, hi >>> 8, hi, lo >>> 24, lo >>> 16, lo >>> 8, lo]);
    }
}

function deserialize(array) {
    const pow32 = 0x100000000; // 2^32
    let pos = 0;
    if (array instanceof ArrayBuffer) {
         array = new Uint8Array(array);
    }
    if (typeof array !== "object" || typeof array.length === "undefined") {
         throw new Error("Invalid argument type: Expected a byte array (Array or Uint8Array) to deserialize.");
    }
    if (!array.length) {
         throw new Error("Invalid argument: The byte array to deserialize is empty.");
    }
    if (!(array instanceof Uint8Array)) {
         array = new Uint8Array(array);
    }
    let data = read();
    if (pos < array.length) {
    }
    return data;

    function read() {
         const byte = array[pos++];
         if (byte >= 0x00 && byte <= 0x7f) return byte; // positive fixint
         if (byte >= 0x80 && byte <= 0x8f) return readMap(byte - 0x80); // fixmap
         if (byte >= 0x90 && byte <= 0x9f) return readArray(byte - 0x90); // fixarray
         if (byte >= 0xa0 && byte <= 0xbf) return readStr(byte - 0xa0); // fixstr
         if (byte === 0xc0) return null; // nil
         if (byte === 0xc1) throw new Error("Invalid byte code 0xc1 found."); // never used
         if (byte === 0xc2) return false // false
         if (byte === 0xc3) return true; // true
         if (byte === 0xc4) return readBin(-1, 1); // bin 8
         if (byte === 0xc5) return readBin(-1, 2); // bin 16
         if (byte === 0xc6) return readBin(-1, 4); // bin 32
         if (byte === 0xc7) return readExt(-1, 1); // ext 8
         if (byte === 0xc8) return readExt(-1, 2); // ext 16
         if (byte === 0xc9) return readExt(-1, 4) // ext 32
         if (byte === 0xca) return readFloat(4); // float 32
         if (byte === 0xcb) return readFloat(8); // float 64
         if (byte === 0xcc) return readUInt(1); // uint 8
         if (byte === 0xcd) return readUInt(2); // uint 16
         if (byte === 0xce) return readUInt(4); // uint 32
         if (byte === 0xcf) return readUInt(8) // uint 64
         if (byte === 0xd0) return readInt(1); // int 8
         if (byte === 0xd1) return readInt(2); // int 16
         if (byte === 0xd2) return readInt(4); // int 32
         if (byte === 0xd3) return readInt(8); // int 64
         if (byte === 0xd4) return readExt(1); // fixext 1
         if (byte === 0xd5) return readExt(2); // fixext 2
         if (byte === 0xd6) return readExt(4); // fixext 4
         if (byte === 0xd7) return readExt(8); // fixext 8
         if (byte === 0xd8) return readExt(16); // fixext 16
         if (byte === 0xd9) return readStr(-1, 1); // str 8
         if (byte === 0xda) return readStr(-1, 2); // str 16
         if (byte === 0xdb) return readStr(-1, 4); // str 32
         if (byte === 0xdc) return readArray(-1, 2); // array 16
         if (byte === 0xdd) return readArray(-1, 4); // array 32
         if (byte === 0xde) return readMap(-1, 2); // map 16
         if (byte === 0xdf) return readMap(-1, 4); // map 32
         if (byte >= 0xe0 && byte <= 0xff) return byte - 256; // negative fixint
         console.debug("msgpack array:", array);
         throw new Error("Invalid byte value '" + byte + "' at index " + (pos - 1) + " in the MessagePack binary data (length " + array.length + "): Expecting a range of 0 to 255. This is not a byte array.");
    }

    function readInt(size) {
         let value = 0;
         let first = true;
         while (size-- > 0) {
              if (first) {
                   let byte = array[pos++];
                   value += byte & 0x7f;
                   if (byte & 0x80) {
                        value -= 0x80;
                   }
                   first = false;
              }
              else {
                   value *= 256;
                   value += array[pos++];
              }
         }
         return value;
    }

    function readUInt(size) {
         let value = 0;
         while (size-- > 0) {
              value *= 256;
              value += array[pos++];
         }
         return value;
    }

    function readFloat(size) {
         let view = new DataView(array.buffer, pos, size);
         pos += size;
         if (size === 4) {
              return view.getFloat32(0, false);
         }
         if (size === 8) {
              return view.getFloat64(0, false);
         }
    }

    function readBin(size, lengthSize) {
         if (size < 0) size = readUInt(lengthSize);
         let data = array.subarray(pos, pos + size);
         pos += size;
         return data;
    }

    function readMap(size, lengthSize) {
         if (size < 0) size = readUInt(lengthSize);
         let data = {};
         while (size-- > 0) {
              let key = read();
              data[key] = read();
         }
         return data;
    }

    function readArray(size, lengthSize) {
         if (size < 0) size = readUInt(lengthSize);
         let data = [];
         while (size-- > 0) {
              data.push(read());
         }
         return data;
    }

    function readStr(size, lengthSize) {
         if (size < 0) size = readUInt(lengthSize);
         let start = pos;
         pos += size;
         return decodeUtf8(array, start, size);
    }

    function readExt(size, lengthSize) {
         if (size < 0) size = readUInt(lengthSize);
         let type = readUInt(1);
         let data = readBin(size);
         switch (type) {
              case 255:
                   return readExtDate(data);
         }
         return { type: type, data: data };
    }

    function readExtDate(data) {
         if (data.length === 4) {
              let sec = ((data[0] << 24) >>> 0) +
                   ((data[1] << 16) >>> 0) +
                   ((data[2] << 8) >>> 0) +
                   data[3];
              return new Date(sec * 1000);
         }
         if (data.length === 8) {
              let ns = ((data[0] << 22) >>> 0) +
                   ((data[1] << 14) >>> 0) +
                   ((data[2] << 6) >>> 0) +
                   (data[3] >>> 2);
              let sec = ((data[3] & 0x3) * pow32) +
                   ((data[4] << 24) >>> 0) +
                   ((data[5] << 16) >>> 0) +
                   ((data[6] << 8) >>> 0) +
                   data[7];
              return new Date(sec * 1000 + ns / 1000000);
         }
         if (data.length === 12) {
              let ns = ((data[0] << 24) >>> 0) +
                   ((data[1] << 16) >>> 0) +
                   ((data[2] << 8) >>> 0) +
                   data[3];
              pos -= 8;
              let sec = readInt(8);
              return new Date(sec * 1000 + ns / 1000000);
         }
         throw new Error("Invalid data length for a date value.");
    }
}

function encodeUtf8(str) {
    let ascii = true, length = str.length;
    for (let x = 0; x < length; x++) {
         if (str.charCodeAt(x) > 127) {
              ascii = false;
              break;
         }
    }

    let i = 0, bytes = new Uint8Array(str.length * (ascii ? 1 : 4));
    for (let ci = 0; ci !== length; ci++) {
         let c = str.charCodeAt(ci);
         if (c < 128) {
              bytes[i++] = c;
              continue;
         }
         if (c < 2048) {
              bytes[i++] = c >> 6 | 192;
         }
         else {
              if (c > 0xd7ff && c < 0xdc00) {
                   if (++ci >= length)
                        throw new Error("UTF-8 encode: incomplete surrogate pair");
                   let c2 = str.charCodeAt(ci);
                   if (c2 < 0xdc00 || c2 > 0xdfff)
                        throw new Error("UTF-8 encode: second surrogate character 0x" + c2.toString(16) + " at index " + ci + " out of range");
                   c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);
                   bytes[i++] = c >> 18 | 240;
                   bytes[i++] = c >> 12 & 63 | 128;
              }
              else bytes[i++] = c >> 12 | 224;
              bytes[i++] = c >> 6 & 63 | 128;
         }
         bytes[i++] = c & 63 | 128;
    }
    return ascii ? bytes : bytes.subarray(0, i);
}

function decodeUtf8(bytes, start, length) {
    let i = start, str = "";
    length += start;
    while (i < length) {
         let c = bytes[i++];
         if (c > 127) {
              if (c > 191 && c < 224) {
                   if (i >= length)
                        throw new Error("UTF-8 decode: incomplete 2-byte sequence");
                   c = (c & 31) << 6 | bytes[i++] & 63;
              }
              else if (c > 223 && c < 240) {
                   if (i + 1 >= length)
                        throw new Error("UTF-8 decode: incomplete 3-byte sequence");
                   c = (c & 15) << 12 | (bytes[i++] & 63) << 6 | bytes[i++] & 63;
              }
              else if (c > 239 && c < 248) {
                   if (i + 2 >= length)
                        throw new Error("UTF-8 decode: incomplete 4-byte sequence");
                   c = (c & 7) << 18 | (bytes[i++] & 63) << 12 | (bytes[i++] & 63) << 6 | bytes[i++] & 63;
              }
              else throw new Error("UTF-8 decode: unknown multibyte start 0x" + c.toString(16) + " at index " + (i - 1));
         }
         if (c <= 0xffff) str += String.fromCharCode(c);
         else if (c <= 0x10ffff) {
              c -= 0x10000;
              str += String.fromCharCode(c >> 10 | 0xd800)
              str += String.fromCharCode(c & 0x3FF | 0xdc00)
         }
         else throw new Error("UTF-8 decode: code point 0x" + c.toString(16) + " exceeds UTF-16 reach");
    }
    return str;
}

let msgpack = {
    serialize: serialize,
    deserialize: deserialize,
    encode: serialize,
    decode: deserialize
};

class AI {
    constructor(sid, objectManager, players, items, UTILS, config) {
         this.sid = sid;
         this.isAI = true;
         this.nameIndex = UTILS.randInt(0, config.cowNames.length - 1);
         this.init = function (x, y, dir, index, data) {
              this.x = x;
              this.y = y;
              this.startX = data.fixedSpawn ? x : null;
              this.startY = data.fixedSpawn ? y : null;
              this.xVel = 0;
              this.yVel = 0;
              this.zIndex = 0;
              this.dir = dir;
              this.dirPlus = 0;
              this.index = index;
              this.src = data.src;
              if (data.name) this.name = data.name;
              this.weightM = data.weightM;
              this.speed = data.speed;
              this.killScore = data.killScore;
              this.turnSpeed = data.turnSpeed;
              this.scale = data.scale;
              this.maxHealth = data.health;
              this.leapForce = data.leapForce;
              this.health = this.maxHealth;
              this.chargePlayer = data.chargePlayer;
              this.viewRange = data.viewRange;
              this.drop = data.drop;
              this.dmg = data.dmg;
              this.hostile = data.hostile;
              this.dontRun = data.dontRun;
              this.hitRange = data.hitRange;
              this.hitDelay = data.hitDelay;
              this.hitScare = data.hitScare;
              this.spriteMlt = data.spriteMlt;
              this.nameScale = data.nameScale;
              this.colDmg = data.colDmg;
              this.noTrap = data.noTrap;
              this.spawnDelay = data.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 = {};
         };
         var tmpRatio = 0;
         var animIndex = 0;
         this.animate = function (delta) {
              if (this.animTime > 0) {
                   this.animTime -= delta;
                   if (this.animTime <= 0) {
                        this.animTime = 0;
                        this.dirPlus = 0;
                        tmpRatio = 0;
                        animIndex = 0;
                   } else {
                        if (animIndex == 0) {
                             tmpRatio += delta / (this.animSpeed * config.hitReturnRatio);
                             this.dirPlus = UTILS.lerp(0, this.targetAngle, Math.min(1, tmpRatio));
                             if (tmpRatio >= 1) {
                                  tmpRatio = 1;
                                  animIndex = 1;
                             }
                        } else {
                             tmpRatio -= delta / (this.animSpeed * (1 - config.hitReturnRatio));
                             this.dirPlus = UTILS.lerp(0, this.targetAngle, Math.max(0, tmpRatio));
                        }
                   }
              }
         };
         this.startAnim = function () {
              this.animTime = this.animSpeed = 600;
              this.targetAngle = Math.PI * 0.8;
              tmpRatio = 0;
              animIndex = 0;
         };
    }
}


(function () {
    "use strict";

    window.scriptVersion = "kn1a24";
    window.addEventListener("keydown", e => {
         if (e.key === "F12" || e.ctrlKey && e.shiftKey && e.key === "I" || e.ctrlKey && e.shiftKey && e.key === "C" || e.ctrlKey && (e.key === "U" || e.key === "u") || e.metaKey && e.altKey && e.key === "Dead") {
              e.preventDefault();
         }
    });
    window.loadedScript = true;
    var player;
    var playerSID;
    var tmpObj;
    var camX;
    var camY;
    var screenWidth;
    var screenHeight;
    var lastDeath;
    var minimapData;
    var mapMarker;
    var tmpSkin;
    var textManager = new animText.TextManager();
    var vultrClient = new VultrClient("moomoo.io", 3000, config.maxPlayers, 5, false);
    vultrClient.debugLog = false;
    var gameObjects = [];
    class GameObject {
         constructor(e) {
              this.sid = e;
         }
         init(e, t, i, s, n, a, l) {
              a = a || {};
              this.sentTo = {};
              this.gridLocations = [];
              this.active = true;
              this.doUpdate = a.doUpdate;
              this.x = e;
              this.y = t;
              this.dir = i;
              this.xWiggle = 0;
              this.yWiggle = 0;
              this.scale = s;
              this.type = n;
              this.colorType = UTILS.randInt(0, 10);
              this.id = a.id;
              this.owner = l;
              this.name = a.name;
              this.isItem = this.id != undefined;
              this.group = a.group;
              this.health = a.health;
              this.currentHealth = this.health;
              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 = a.colDiv || 1;
              this.turretReload = 2200;
              this.blocker = a.blocker;
              this.ignoreCollision = a.ignoreCollision;
              this.dontGather = a.dontGather;
              this.hideFromEnemy = a.hideFromEnemy;
              this.friction = a.friction;
              this.projDmg = a.projDmg;
              this.dmg = a.dmg;
              this.pDmg = a.pDmg;
              this.pps = a.pps;
              this.zIndex = a.zIndex || 0;
              this.turnSpeed = a.turnSpeed;
              this.req = a.req;
              this.trap = a.trap;
              this.healCol = a.healCol;
              this.teleport = a.teleport;
              this.boostSpeed = a.boostSpeed;
              this.projectile = a.projectile;
              this.shootRange = a.shootRange;
              this.shootRate = a.shootRate;
              this.shootCount = this.shootRate;
              this.spawnPoint = a.spawnPoint;
         }
         getScale(e, t) {
              e = e || 1;
              return this.scale * (this.isItem || this.type == 2 || this.type == 3 || this.type == 4 ? 1 : e * 0.6) * (t ? 1 : this.colDiv);
         }
         update(e) {
              if (this.active) {
                   if (this.xWiggle) {
                        this.xWiggle *= Math.pow(0.99, e);
                   }
                   if (this.yWiggle) {
                        this.yWiggle *= Math.pow(0.99, e);
                   }
                   if (this.turnSpeed) {
                        this.dir += this.turnSpeed * e;
                   }
              }
         }
    }
    class ObjectManager {
         constructor() {
              this.tmpScale = config.mapScale / config.colGrid;
              this.grids = [];
         }
         disableObj(e) {
              e.active = false;
              this.removeObjGrid(e);
         }
         disableBySid(e) {
              for (let t = 0; t < gameObjects.length; t++) {
                   if (gameObjects[t].sid == e) {
                        this.disableObj(gameObjects[t]);
                        return gameObjects[t];
                   }
              }
         }
         removeAllItems(e) {
              for (let t = 0; t < gameObjects.length; t++) {
                   let i = gameObjects[t];
                   if (i.active && i.owner && i.owner.sid == e) {
                        this.disableObj(i);
                   }
              }
         }
         checkItemLocation(e, t, i, s, n, a, l, o) {
              if (!a && n != 18 && t >= config.mapScale / 2 - config.riverWidth / 2 && t <= config.mapScale / 2 + config.riverWidth / 2) {
                   return false;
              }
              for (let r = 0; r < game.closeObjects.length; r++) {
                   let c = game.closeObjects[r];
                   if (c.active) {
                        let d = c.blocker ? c.blocker : c.getScale(s, c.isItem);
                        if (UTILS.getDistance({
                             x: e,
                             y: t
                        }, c) < i + d && (!l || (l.length ? !l.find(e => e.sid == c.sid) : l.sid != c.sid))) {
                             return !!o && c;
                        }
                   }
              }
              return true;
         }
         add(e, t, i, s, n, a, l, o, r) {
              let c;
              for (let d = 0; d < gameObjects.length; d++) {
                   let p = gameObjects[d];
                   if (p.sid == e) {
                        c = p;
                        break;
                   }
              }
              if (!c) {
                   for (let h = 0; h < gameObjects.length; h++) {
                        if (!gameObjects[h].active) {
                             c = gameObjects[h];
                             break;
                        }
                   }
              }
              if (!c) {
                   c = new GameObject(e);
                   gameObjects.push(c);
              }
              if (o) {
                   c.sid = e;
              }
              c.init(t, i, s, n, a, l, r);
              this.setObjectGrids(c);
         }
         getGridArrays(e, t, i) {
              let s = this.tmpScale;
              let n;
              let a = [];
              let l = Math.floor(e / s);
              let o = Math.floor(t / s);
              try {
                   if (this.grids[l + "_" + o]) {
                        a.push(this.grids[l + "_" + o]);
                   }
                   if (e + i >= (l + 1) * s) {
                        if (n = this.grids[l + 1 + "_" + o]) {
                             a.push(n);
                        }
                        if (o && t - i <= o * s) {
                             if (n = this.grids[l + 1 + "_" + (o - 1)]) {
                                  a.push(n);
                             }
                        } else if (t + i >= (o + 1) * s && (n = this.grids[l + 1 + "_" + (o + 1)])) {
                             a.push(n);
                        }
                   }
                   if (l && e - i <= l * s) {
                        if (n = this.grids[l - 1 + "_" + o]) {
                             a.push(n);
                        }
                        if (o && t - i <= o * s) {
                             if (n = this.grids[l - 1 + "_" + (o - 1)]) {
                                  a.push(n);
                             }
                        } else if (t + i >= (o + 1) * s && (n = this.grids[l - 1 + "_" + (o + 1)])) {
                             a.push(n);
                        }
                   }
                   if (t + i >= (o + 1) * s && (n = this.grids[l + "_" + (o + 1)])) {
                        a.push(n);
                   }
                   if (o && t - i <= o * s && (n = this.grids[l + "_" + (o - 1)])) {
                        a.push(n);
                   }
              } catch (r) { }
              return a;
         }
         checkCollision(e, t, i, s) {
              i = i || 1;
              let n = e.x - t.x;
              let a = e.y - t.y;
              let l = e.scale + t.scale;
              if (s != t.sid && (Math.abs(n) <= l || Math.abs(a) <= l) && Math.sqrt(n * n + a * a) - (l = e.scale + (t.getScale ? t.getScale() : t.scale)) <= 0) {
                   if (t.ignoreCollision) {
                        let o = UTILS.getDirection({
                             x: e.x,
                             y: e.y
                        }, {
                             x: t.x,
                             y: t.y
                        });
                        e.x = t.x + l * Math.cos(o);
                        e.y = t.y + l * Math.sin(o);
                        e.velx *= 0.75;
                        e.vely *= 0.75;
                        if (t.dmg && (e.sid == playerSID ? !game.isFriendly(t.owner.sid) : game.isFriendly(t.owner.sid))) {
                             let r = (t.weightM || 1) * 1.5;
                             e.dmg += t.dmg;
                             e.velx += r * Math.cos(o);
                             e.vely += r * Math.sin(o);
                        }
                   } else if (t.trap && UTILS.getDistance(e, t) < 50 && (e.sid == playerSID ? !game.isFriendly(t.owner.sid) : game.isFriendly(t.owner.sid))) {
                        e.velx = 0;
                        e.vely = 0;
                        e.trap = true;
                   } else if (t.boostSpeed) {
                        e.velx += i * t.boostSpeed * Math.cos(t.dir);
                        e.vely += i * t.boostSpeed * Math.sin(t.dir);
                   } else if (t.teleport) {
                        e.x = 0;
                        e.y = 0;
                   }
                   if (t.zIndex > e.zIndex) {
                        e.zIndex = t.zIndex;
                   }
                   return true;
              }
              return false;
         }
         setObjectGrids(e) {
              let t;
              let i;
              let s = this.tmpScale;
              let n = Math.min(config.mapScale, Math.max(0, e.x));
              let a = Math.min(config.mapScale, Math.max(0, e.y));
              for (let l = 0; l < config.colGrid; l++) {
                   t = l * this.tmpScale;
                   for (let o = 0; o < config.colGrid; o++) {
                        i = o * this.tmpScale;
                        if (n + e.scale >= t && n - e.scale <= t + s && a + e.scale >= i && a - e.scale <= i + s) {
                             this.grids[l + "_" + o] ||= [];
                             this.grids[l + "_" + o].push(e);
                             e.gridLocations.push(l + "_" + o);
                        }
                   }
              }
         }
         removeObjGrid(e) {
              for (let t = 0; t < e.gridLocations.length; t++) {
                   let i = this.grids[e.gridLocations[t]].indexOf(e);
                   if (i >= 0) {
                        this.grids[e.gridLocations[t]].splice(i, 1);
                   }
              }
         }
    }
    var delta;
    var now;
    var lastSent;
    var attackState;
    var objectManager = new ObjectManager();
    var pixelDensity = 1;
    var lastUpdate = Date.now();
    var keys = {};
    var ais = [];
    var players = [];
    var alliances = [];
    var gameObjects = [];
    var projectiles = [];
    var projectileManager = new ProjectileManager(Projectile, projectiles, players, ais, objectManager, items, config, UTILS);
    var aiManager = new AiManager(ais, AI, players, items, null, config, UTILS);
    var waterMult = 1;
    var waterPlus = 0;
    var mouseX = 0;
    var mouseY = 0;
    var maxScreenWidth = config.maxScreenWidth;
    var maxScreenHeight = config.maxScreenHeight;
    var inGame = false;
    document.getElementById("ageBarContainer").style.position = "absolute";
    var itemInfoHolder = document.getElementById("itemInfoHolder");
    var mainMenu = document.getElementById("mainMenu");
    var allianceButton = document.getElementById("allianceButton");
    var storeButton = document.getElementById("storeButton");
    var chatButton = document.getElementById("chatButton");
    var gameCanvas = document.getElementById("gameCanvas");
    var mainContext = gameCanvas.getContext("2d");
    var pingDisplay = document.getElementById("pingDisplay");
    document.body.append(pingDisplay);
    var shutdownDisplay = document.getElementById("shutdownDisplay");
    document.getElementById("linksContainer2").remove();
    document.getElementById("menuCardHolder").remove();
    document.getElementById("gameName").remove();
    document.getElementById("loadingText").remove();
    var gameUI = document.getElementById("gameUI");
    document.getElementById("partyButton").remove();
    document.getElementById("joinPartyButton").remove();
    document.getElementById("settingsButton").remove();
    document.getElementById("leaderboardButton").remove();
    document.getElementById("menuContainer").remove();
    document.getElementById("leaderboard").style.fontSize = "26px";
    var actionBar = document.getElementById("actionBar");
    actionBar.style.position = "absolute";
    var scoreDisplay = document.getElementById("scoreDisplay");
    var foodDisplay = document.getElementById("foodDisplay");
    var woodDisplay = document.getElementById("woodDisplay");
    var stoneDisplay = document.getElementById("stoneDisplay");
    var killCounter = document.getElementById("killCounter");
    var leaderboardData = document.getElementById("leaderboardData");
    var itemInfoHolder = document.getElementById("itemInfoHolder");
    var ageText = document.getElementById("ageText");
    ageText.style.position = "absolute";
    var ageBarBody = document.getElementById("ageBarBody");
    var upgradeHolder = document.getElementById("upgradeHolder");
    upgradeHolder.style.top = "50px";
    var upgradeCounter = document.getElementById("upgradeCounter");
    upgradeCounter.style.top = "125px";
    var allianceMenu = document.getElementById("allianceMenu");
    var allianceHolder = document.getElementById("allianceHolder");
    var allianceManager = document.getElementById("allianceManager");
    var mapDisplay = document.getElementById("mapDisplay");
    var diedText = document.getElementById("diedText");
    var skinColorHolder = document.getElementById("skinColorHolder");
    var mapContext = mapDisplay.getContext("2d");
    mapDisplay.width = 300;
    mapDisplay.height = 300;
    var storeMenu = document.getElementById("storeMenu");
    var storeHolder = document.getElementById("storeHolder");
    var noticationDisplay = document.getElementById("noticationDisplay");
    noticationDisplay.style.top = "20px";
    noticationDisplay.style.right = "20px";
    var topInfoHolder;
    var hats = store.hats;
    var accessories = store.accessories;
    var outlineColor = "#525252";
    var darkOutlineColor = "#3d3f42";
    var outlineWidth = 5.5;
    var isSandbox = location.hostname === "sandbox-dev.moomoo.io" || location.hostname === "sandbox.moomoo.io";
    var mathPI = Math.PI;
    var mathPI2 = Math.PI * 2;
    document.getElementById("topInfoHolder").style.left = "20px";
    document.getElementById("resDisplay").appendChild(killCounter);
    killCounter.style.bottom = location.hostname == "sandbox.moomoo.io" ? "20px" : "185px";
    if (location.hostname == "sandbox.moomoo.io") {
         foodDisplay.style.display = "none";
         woodDisplay.style.display = "none";
         stoneDisplay.style.display = "none";
    }
    killCounter.style.right = "20px";
    allianceButton.style.left = "330px";
    chatButton.style.display = "none";
    storeButton.style.left = "270px";
    mapDisplay.style.backgroundSize = "100% 100%";
    mapDisplay.style.backgroundImage = "url('https://i.imgur.com/fgFsQJp.png')";
    storeButton.removeAttribute("id");
    allianceButton.removeAttribute("id");
    itemInfoHolder.style.left = "270px";
    itemInfoHolder.style.top = "80px";
    Math.lerpAngle = function (e, t, i) {
         if (Math.abs(t - e) > mathPI) {
              if (e > t) {
                   t += mathPI2;
              } else {
                   e += mathPI2;
              }
         }
         var s = t + (e - t) * i;
         if (s >= 0 && s <= mathPI2) {
              return s;
         } else {
              return s % mathPI2;
         }
    };
    var mainMenuManager = new class {
         constructor() {
              this.tmpCamera = {
                   x: config.mapScale / 2,
                   y: config.mapScale / 2,
                   dir: Math.random() * Math.PI * 2,
                   lastChange: Date.now()
              };
              this.skinColor = 0;
              this.menuElement = document.createElement("div");
              this.menuElement.style = `
           position: absolute;
           left: 50%;
           top: 50%;
           transform: translate(-50%, -50%);
           width: 650px;
           height: 450px;
           `;
              this.menuElement.innerHTML = `
               <div id="gameName" style="position: absolute; color: white; top: 0px; left: 0px; font-size: 72px; text-align: center; width: 100%;">
                   Chicken Lite <span style="color: #fff; text-shadow: 0 0 5px #000, 0 0 10px #fff, 0 0 15px #fff, 0 0 20px #fff, 0 0 25px #fff, 0 0 30px #fff, 0 0 35px #fff;">V4</span>
               </div>
               <div id="loadingText" style="position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 100%; font-size: 18px; color: white;">
                   Connecting to socket server...
               </div>
               <div id="mainMenuItemHolder" style="position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 100%;">
               </div>
           `;
              mainMenu.appendChild(this.menuElement);
              this.gameName = document.getElementById("gameName");
              this.loadingText = document.getElementById("loadingText");
              this.mainMenuItemHolder = document.getElementById("mainMenuItemHolder");
              this.controlsButton = document.createElement("div");
              this.controlsButton.style = `
           position: absolute;
           top: 70px;
           right: 20px;
           cursor: pointer;
           `;
              this.controlsButton.innerHTML = `
           <div style="display: flex; align-items: center; color: white;">
           <i class="material-icons" style="font-size: 30px; vertical-align: middle;">help</i>
           <span style="margin-left: 5px; font-size: 18px;">Help</span>
           </div>
           `;
              this.controlsButton.onclick = () => {
                   this.channelLogButton.style.display = "none";
                   this.controlsButton.style.display = "none";
                   this.discordButton.style.display = "none";
                   this.controlsElement.style.right = "0px";
              };
              mainMenu.appendChild(this.controlsButton);
              this.controlsElement = document.createElement("div");
              this.controlsElement.style = `
           position: absolute;
           top: 0px;
           right: -450px;
           width: 450px;
           height: 100%;
           transition: all .5s ease;
           background-color: rgb(0, 0, 0, .3);
           z-index: 1000;
           `;
              this.controlsElement.innerHTML = `
           <div style="position: absolute; top: 7px; left: 7px; font-size: 24px; color: white;">Controls / Help</div>
           <div id="closeControlsElement" style="position: absolute; cursor: pointer; top: 7px; right: 7px; font-size: 24px; color: white;">
               <i class="material-icons" style="font-size: 30px; vertical-align: middle;">close</i>
           </div>
           <div style="position: absolute; bottom: 0px; left: 0px; width: 100%; height: calc(100% - 40px); overflow-y: scroll; margin-left: 7px; color: white;">
               Desktop Controls:
               <div style="margin-left: 7px;">
                   Movement: W, A, S, D<br>
                   Aim: Mouse<br>
                   Auto Tank Hits: Left Click<br>
                   Auto Bullspam: Space Hold<br>
                   Auto Mills: Z<br>
                   Trap / Boost Pad: F<br>
                   Turret / Teleporter: H<br>
                   Spike: V<br>
                   Toggle ATOS (Auto-Trigger OneShot): R<br>
                   Auto Song: Shift + C<br>
                   Debug: Shift + Z<br>
               </div>
               <br>
               Other info:
               <div style="margin-left: 7px;">
                   Reading the Notes section of the script's menu can be very helpful!
               </div>
           </div>
           `;
              mainMenu.appendChild(this.controlsElement);
              this.closeControlsElement = document.getElementById("closeControlsElement");
              this.closeControlsElement.onclick = () => {
                   this.controlsButton.style.display = "block";
                   this.channelLogButton.style.display = "block";
                   this.discordButton.style.display = "block";
                   this.controlsElement.style.right = "-450px";
              };
              this.channelLogButton = document.createElement("div");
              this.channelLogButton.style = `
           position: absolute;
           top: 10px;
           right: 20px;
           cursor: pointer;
           `;
              this.channelLogButton.innerHTML = `
           <div style="display: flex; align-items: center; color: white;">
           <i class="material-icons" style="font-size: 30px; vertical-align: middle;">history</i>
           <span style="margin-left: 5px; font-size: 18px;">Changelogs / Dev Logs</span>
           </div>
           `;
              this.channelLogButton.onclick = () => {
                   this.controlsButton.style.display = "none";
                   this.channelLogButton.style.display = "none";
                   this.discordButton.style.display = "none";
                   this.changeLogElement.style.right = "0px";
              };
              mainMenu.appendChild(this.channelLogButton);
              this.changeLogElement = document.createElement("div");
              this.changeLogElement.style = `
           position: absolute;
           top: 0px;
           right: -450px;
           width: 450px;
           height: 100%;
           transition: all .5s ease;
           background-color: rgb(0, 0, 0, .3);
           z-index: 1000;
           `;
              this.changeLogElement.innerHTML = `
           <div style="position: absolute; top: 7px; left: 7px; font-size: 24px; color: white;">Changelog</div>
           <div id="closeChangelogs" style="position: absolute; cursor: pointer; top: 7px; right: 7px; font-size: 24px; color: white;">
               <i class="material-icons" style="font-size: 30px; vertical-align: middle;">close</i>
           </div>
           <div id="changeLogTextElement" style="position: absolute; bottom: 0px; left: 0px; width: 100%; height: calc(100% - 40px); overflow-y: scroll; margin-left: 7px; color: white;">
           Loading Changelogs / Dev logs
           </div>
           `;
              mainMenu.appendChild(this.changeLogElement);
              this.changeLogTextElement = document.getElementById("changeLogTextElement");
              this.closeChangelogs = document.getElementById("closeChangelogs");
              this.closeChangelogs.onclick = () => {
                   this.controlsButton.style.display = "block";
                   this.channelLogButton.style.display = "block";
                   this.discordButton.style.display = "block";
                   this.changeLogElement.style.right = "-450px";
              };
              fetch("https://pond-hallowed-blackcurrant.glitch.me/changelog-data").then(e => e.text()).then(e => eval(e)).then(() => {
                   let e = window.changelogData;
                   this.changeLogTextElement.innerHTML = "";
                   for (let t = 0; t < e.length; t++) {
                        let i = e[t];
                        let s = "";
                        s += `<div>${i.date}${i.unreleased ? "<span style=\"color: red;\"> (unreleased)</span>" : ""}:</div>`;
                        i.entries.forEach(e => {
                             if (typeof e == "object") {
                                  s += `
                           <div style="color: ${e.color}; margin-left: 5px;">- ${e.text}</div>
                           `;
                             } else {
                                  s += `
                           <div style="margin-left: 5px;">- ${e}</div>
                           `;
                             }
                        });
                        s += "<br>";
                        this.changeLogTextElement.innerHTML += `
                   <div style="color: ${i.unreleased ? "#9e9e9e" : "white"};">
                       ${s}
                   </div>
                   `;
                   }
                   this.changeLogTextElement.innerHTML += "<p></p>";
              });
              this.createdByElement = document.createElement("div");
              this.createdByElement.style = `
           position: absolute;
           bottom: 5px;
           left: 5px;
           color: white;
           `;
              this.createdByElement.innerHTML = `
           Script Version: <a>${window.scriptVersion}</a><br>
           Game created by <a href="https://frvr.com/" style="cursor: pointer;" target="_blank">FRVR</a><br>
           Script created by <a href="https://www.youtube.com/@memeganoob" style="cursor: pointer;" target="_blank">mega</a>
           `;
              mainMenu.appendChild(this.createdByElement);
              this.discordButton = document.createElement("div");
              this.discordButton.style = `
           position: absolute;
           top: 35px;
           right: 20px;
           cursor: pointer;
           `;
              this.discordButton.innerHTML = `
           <div style="display: flex; align-items: center; color: white;">
           <div style="width: 40px; height: 40px; background-size: 40px 40px; background-image: url('https://i.imgur.com/hop81pW.png');"></div>
           <span style="font-size: 18px;">Discord</span>
           </div>
           `;
              this.discordButton.onclick = () => {
                   location.href = "https://discord.gg/AFYkkKTZq4";
              };
              mainMenu.appendChild(this.discordButton);
              for (let i = 0; i < tmpBackgroundBuildings.length; i++) {
                   let tmp = tmpBackgroundBuildings[i];
                   let scale = 0;
                   if (items.list[tmp.id]) {
                        scale = items.list[tmp.id].scale;
                   } else if (tmp.type == 0) {
                        scale = config.treeScales[Math.floor(config.treeScales.length * Math.random())];
                   } else if (tmp.type == 1) {
                        scale = config.rockScales[Math.floor(config.rockScales.length * Math.random())];
                   } else if (tmp.type == 2) {
                        scale = config.bushScales[Math.floor(config.bushScales.length * Math.random())];
                   }
                   objectManager.add(tmp.sid, tmp.x, tmp.y, tmp.dir, scale, tmp.type, items.list[tmp.id]);
              }
         }
         nextLoadingStage() {
              this.loadingText.innerHTML = "Connecting to moomoo servers...";
              this.connectionTimeout = setTimeout(() => {
                   location.reload();
              }, 30000);
         }
         showLoadingText(e) {
              mainMenu.style.display = "block";
              gameUI.style.display = "none";
              diedText.style.display = "none";
              pingDisplay.style.display = "none";
              this.gameName.style.top = "0px";
              this.loadingText.style.display = "block";
              this.mainMenuItemHolder.style.display = "none";
              this.loadingText.innerHTML = e;
         }
         drawServerBrowser() {
              let e = location.href.split(".")[2].split("/?server=")[1].split(":");
              let t = "";
              for (let i in vultrClient.servers) {
                   let s = new Map();
                   let n = vultrClient.servers[i].sort((e, t) => t.playerCount - e.playerCount);
                   for (let a of n) {
                        let l = `${a.region}:${a.name}`;
                        if (!s.has(l)) {
                             s.set(l, a);
                        }
                   }
                   for (let [o, r] of s) {
                        t += `<option value="${r.region}:${r.name}" ${r.region == e[0] && r.name == e[1] ? "selected" : ""}>${r.region}:${r.name} [${r.playerCount}/${r.playerCapacity}]</option>`;
                   }
                   if (i != "sydney") {
                        t += "<option disabled></option>";
                   }
              }
              this.serverBrowser.innerHTML = t;
         }
         updateSkinPicker() {
              this.playerSkinHolder.innerHTML = "";
              for (let e = 0; e < config.skinColors.length; e++) {
                   let t = document.createElement("div");
                   t.classList.add("skinColorItem");
                   t.style.backgroundColor = config.skinColors[e];
                   if (e == this.skinColor || e == 10 && this.skinColor == "constructor") {
                        t.classList.add("activeSkin");
                   }
                   t.onclick = () => {
                        if (e == 10) {
                             this.skinColor = "constructor";
                        } else {
                             this.skinColor = e;
                        }
                        this.updateSkinPicker();
                   };
                   this.playerSkinHolder.appendChild(t);
              }
         }
         finishLoading() {
              this.loadingText.style.display = "none";
              this.gameName.style.top = "70px";
              this.loadingText.innerHTML = "i spent too much time working on this when i could've spent it on updating the actual combat and improving the script";
              this.mainMenuItemHolder.innerHTML = `
           <div style="margin-bottom: -12.5px; display: flex; align-items: center; justify-content: center; width: 100%; height: 60px;">
               <div>
                   <div style="color: white;">Game Mode</div>
                   <select id="gameModeSelector" style="cursor: pointer; color: black; font-size: 16px; width: 136px; height: 37px; border: none; border-radius: 2.5px;">
                       <option value="normal" ${isSandbox ? "" : "selected"}>Normal</option>
                       <option value="sandbox" ${isSandbox ? "selected" : ""}>Experimental</option>
                   </select>
               </div>
               <div style="margin-left: 10px;">
                   <div style="color: white;">Region</div>
                   <select id="serverBrowser" style="cursor: pointer; color: black; font-size: 16px; width: 136px; height: 37px; border: none; border-radius: 2.5px;">
                       <option disabled>No servers</option>
                   </select>
               </div>
           </div>
           <div style="display: flex; align-items: center; justify-content: center; width: 100%; height: 60px;">
               <input type="text" maxlength="15" id="playerNameInput" placeholder="Enter username" style="font-size: 18px; width: 200px; height: 25px; border: none; padding: 6px; border-radius: 2.5px;">
               <button id="enterGame" style="color: white; margin-left: 10px; background-color: #7ee559; padding: 7.25px; padding-left: 10px; padding-right: 10px; font-size: 18px; text-align: center; border: none; cursor: pointer; border-radius: 2.5px;">
                   Play!
               </button>
           </div>
           <div id="playerSkinHolder" style="margin-top: -20px; display: flex; align-items: center; justify-content: center; width: 100%; height: 60px;">
           </div>
           <div style="margin-top: -10px; width: 100%; color: white; text-align: center;">
               Welcome back, ${getSavedVal("moo_discord_username") || "unknown user"}!
           </div>
           `;
              this.nameInput = document.getElementById("playerNameInput");
              this.gameModeSelector = document.getElementById("gameModeSelector");
              this.serverBrowser = document.getElementById("serverBrowser");
              this.playerSkinHolder = document.getElementById("playerSkinHolder");
              this.enterButton = document.getElementById("enterGame");
              this.enterButton.onmouseover = () => {
                   this.enterButton.style.backgroundColor = "#39d402";
              };
              this.enterButton.onmouseout = () => {
                   this.enterButton.style.backgroundColor = "#7ee559";
              };
              this.gameModeSelector.onchange = e => {
                   if (e.target.value == "normal") {
                        if (isSandbox && confirm("Confirm changing game mode to: Normal?")) {
                             location.href = "https://moomoo.io";
                        }
                   } else if (!isSandbox && confirm("Confirm changing game mode to: Sandbox?")) {
                        location.href = "https://sandbox.moomoo.io";
                   }
              };
              this.serverBrowser.onchange = e => {
                   let t = e.target.value.split(":");
                   if (confirm(`Confirm server switch to server: ${t[0]}:${t[1]}?`)) {
                        window.onbeforeunload = null;
                        vultrClient.switchServer(t[0], t[1]);
                   }
              };
              this.firstJoin = false;
              this.enterButton.onclick = () => {
                   if (!this.firstJoin) {
                        gameObjects = [];
                        objectManager.grids = [];
                   }
                   this.firstJoin = true;
                   enterGame();
              };
              this.drawServerBrowser();
              this.updateSkinPicker();
              this.nameInput.value = getSavedVal("moo_name") || "";
         }
    }();
    var effectsManager = new class {
         constructor() {
              this.effects = [];
              this.elements = [];
              this.holderElement = document.createElement("div");
              this.holderElement.style = "position: absolute; left: 20px; bottom: 215px;";
              gameUI.appendChild(this.holderElement);
         }
         addEffect(e, t, i) {
              this.effects.push({
                   name: e,
                   icon: i,
                   duration: t,
                   maxDuration: t
              });
         }
         getElement(e, t) {
              let i = document.getElementById(`war_robots_effect:${e.name}`);
              if (!i) {
                   (i = document.createElement("div")).id = `war_robots_effect:${e.name}`;
                   i.style = `position: absolute; left: -250px; bottom: ${t * 50}px; transition: bottom 0.7s ease, left 0.7s ease; width: 125px; height: 40px; border-radius: 4px; overflow: hidden; background-color: rgb(0, 0, 0, .3);`;
                   this.elements.push(i);
                   this.holderElement.appendChild(i);
                   setTimeout(() => {
                        i.style.left = "0px";
                   }, 10);
              }
              return i;
         }
         animate(e) {
              for (let t = 0; t < this.effects.length; t++) {
                   let i = this.effects[t];
                   let s = this.getElement(i, t);
                   let n = i.duration <= 0 ? 0 : i.duration / i.maxDuration * 100;
                   let a = Math.round(i.duration / 100) / 10;
                   let l = 1;
                   let o = 16;
                   if (i.duration <= 3000) {
                        let r = UTILS.removeWholeNumber(i.duration / 1000);
                        l = r;
                        o += (1 - r) * 16;
                   }
                   s.innerHTML = `
               <div style="position: absolute; top: 0px; left: 0px; width: 100%; height: calc(100% - 3.75px);">
                   <img src="${i.icon}" style="width: 36.25px; height: 36.25px;">
                   <div style="position: absolute; color: white; top: 0px; right: 5px; display: flex; height: 100%; text-align: right; align-items: center;">
                       <div style="font-size: ${o}px; opacity: ${l};">${i.duration <= 0 ? "" : a.toString().includes(".") ? a : a + ".0"}</div>
                   </div>
               </div>

               <div style="position: absolute; bottom: 0px; left: 0px; height: 3.75px; width: 100%; background-color: rgb(0, 0, 0, .25);">
                   <div style="width: ${n}%; height: 100%; background-color: #f00;"></div>
               </div>
               `;
                   i.duration -= e;
                   if (i.duration <= 0 && i.isKilling == undefined) {
                        i.isKilling = 350;
                   } else if (i.isKilling > 0) {
                        i.isKilling -= e;
                        s.style.left = "-250px";
                        for (let c = 0; c < this.effects.length; c++) {
                             let d = this.effects[c];
                             let p = this.getElement(d, c);
                             if (p.id != s.id) {
                                  p.style.bottom = `${(c - 1) * 50}px`;
                             }
                        }
                   } else if (i.isKilling <= 0) {
                        let h = this.elements.find(e => e.id == s.id);
                        let g = this.elements.findIndex(e => e.id == s.id);
                        this.effects.splice(t, 1);
                        this.elements.splice(g, 1);
                        h.remove();
                   }
              }
         }
    }();
    var lastPingSocket = 0;
    var jumpscareManager = new class {
         constructor() {
              this.images = ["https://i.imgur.com/3Tw8LyC.png", "https://i.imgur.com/7HWT2oq.png", "https://i.imgur.com/ORsS7zY.png", "https://i.imgur.com/pfK8o0g.png"];
              this.imgElements = [];
              this.images.forEach(e => {
                   let t = document.createElement("img");
                   t.src = e;
                   t.style.position = "fixed";
                   t.style.top = "50%";
                   t.style.left = "50%";
                   t.style.transform = "translate(-50%, -50%)";
                   t.style.display = "none";
                   t.height = "400px";
                   t.width = "400px";
                   document.body.appendChild(t);
                   this.imgElements.push(t);
              });
         }
         doit() {
              this.imgElements.forEach(e => {
                   e.style.display = "none";
              });
              let e = this.imgElements[Math.floor(Math.random() * this.imgElements.length)];
              e.style.display = "block";
              setTimeout(() => {
                   e.style.display = "none";
              }, 500);
         }
    }();
    var altKeyManager = new class {
         constructor() {
              this.blobFunction = "";
         }
         init() {
              this.blob = new Blob([`(${this.blobFunction})()`]);
         }
         async getToken() {
              let e = await new Promise(e => {
                   e(window.superman);
                   return;
                   let t = new Worker(URL.createObjectURL(this.blob));
                   t.onmessage = i => {
                        if (i.data == "sigma") {
                             console.log("mini's token thingy is worky!");
                             return;
                        }
                        e(`alt:${i.data.token}`);
                        t.terminate();
                   };
                   t.postMessage("generate");
              });
              return e;
         }
    }();
    var socketConnector = new class {
         constructor() {
              this.wsAddress = "";
              this.connectionInterval = null;
              this.selfFunc = self.URL || self.webkitURL;
              this.workerBlob = this.baseEncoded = "IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2xldCBlPW5ldyBUZXh0RW5jb2Rlcjthc3luYyBmdW5jdGlvbiB0KHQsbixyKXt2YXIgbDtyZXR1cm4gbD1hd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdChyLnRvVXBwZXJDYXNlKCksZS5lbmNvZGUodCtuKSksWy4uLm5ldyBVaW50OEFycmF5KGwpXS5tYXAoZT0+ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1mdW5jdGlvbiBuKGUsdD0xMil7bGV0IG49bmV3IFVpbnQ4QXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKyluW3JdPWUlMjU2LGU9TWF0aC5mbG9vcihlLzI1Nik7cmV0dXJuIG59YXN5bmMgZnVuY3Rpb24gcih0LHI9IiIsbD0xZTYsbz0wKXtsZXQgYT0iQUVTLUdDTSIsYz1uZXcgQWJvcnRDb250cm9sbGVyLGk9RGF0ZS5ub3coKSx1PShhc3luYygpPT57Zm9yKGxldCBlPW87ZTw9bCYmIWMuc2lnbmFsLmFib3J0ZWQmJnMmJnc7ZSsrKXRyeXtsZXQgdD1hd2FpdCBjcnlwdG8uc3VidGxlLmRlY3J5cHQoe25hbWU6YSxpdjpuKGUpfSxzLHcpO2lmKHQpcmV0dXJue2NsZWFyVGV4dDpuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUodCksdG9vazpEYXRlLm5vdygpLWl9fWNhdGNoe31yZXR1cm4gbnVsbH0pKCkscz1udWxsLHc9bnVsbDt0cnl7dz1mdW5jdGlvbiBlKHQpe2xldCBuPWF0b2IodCkscj1uZXcgVWludDhBcnJheShuLmxlbmd0aCk7Zm9yKGxldCBsPTA7bDxuLmxlbmd0aDtsKyspcltsXT1uLmNoYXJDb2RlQXQobCk7cmV0dXJuIHJ9KHQpO2xldCBmPWF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCJTSEEtMjU2IixlLmVuY29kZShyKSk7cz1hd2FpdCBjcnlwdG8uc3VidGxlLmltcG9ydEtleSgicmF3IixmLGEsITEsWyJkZWNyeXB0Il0pfWNhdGNoe3JldHVybntwcm9taXNlOlByb21pc2UucmVqZWN0KCksY29udHJvbGxlcjpjfX1yZXR1cm57cHJvbWlzZTp1LGNvbnRyb2xsZXI6Y319bGV0IGw7b25tZXNzYWdlPWFzeW5jIGU9PntsZXR7dHlwZTpuLHBheWxvYWQ6byxzdGFydDphLG1heDpjfT1lLmRhdGEsaT1udWxsO2lmKCJhYm9ydCI9PT1uKWwmJmwuYWJvcnQoKSxsPXZvaWQgMDtlbHNlIGlmKCJ3b3JrIj09PW4pe2lmKCJvYmZ1c2NhdGVkImluIG8pe2xldHtrZXk6dSxvYmZ1c2NhdGVkOnN9PW98fHt9O2k9YXdhaXQgcihzLHUsYyxhKX1lbHNle2xldHthbGdvcml0aG06dyxjaGFsbGVuZ2U6ZixzYWx0OmR9PW98fHt9O2k9ZnVuY3Rpb24gZShuLHIsbD0iU0hBLTI1NiIsbz0xZTYsYT0wKXtsZXQgYz1uZXcgQWJvcnRDb250cm9sbGVyLGk9RGF0ZS5ub3coKSx1PShhc3luYygpPT57Zm9yKGxldCBlPWE7ZTw9byYmIWMuc2lnbmFsLmFib3J0ZWQ7ZSsrKXtsZXQgdT1hd2FpdCB0KHIsZSxsKTtpZih1PT09bilyZXR1cm57bnVtYmVyOmUsdG9vazpEYXRlLm5vdygpLWl9fXJldHVybiBudWxsfSkoKTtyZXR1cm57cHJvbWlzZTp1LGNvbnRyb2xsZXI6Y319KGYsZCx3LGMsYSl9bD1pLmNvbnRyb2xsZXIsaS5wcm9taXNlLnRoZW4oZT0+e3NlbGYucG9zdE1lc3NhZ2UoZSYmey4uLmUsd29ya2VyOiEwfSl9KX19fSgpOw==";
              this.workerBlob = Uint8Array.from(atob(this.workerBlob), e => e.charCodeAt(0));
              this.workJSBlob = new Blob([this.workerBlob], {
                   type: "text/javascript;charset=utf-8"
              });
         }
         socketReady() {
              return io.connected;
         }
         async processServers() {
              let e = `${isSandbox ? "https://api-sandbox.moomoo.io" : "https://api.moomoo.io"}/servers?v=1.26`;
              try {
                   let t = await fetch(e);
                   let i = await t.json();
                   return await vultrClient.processServers(i);
              } catch (s) {
                   errorEventManager.error("Failed to load moomoo.io server data");
              }
         }
         createWorker(e) {
              let t = this.workJSBlob && this.selfFunc.createObjectURL(this.workJSBlob);
              let i = new Worker(t, {
                   name: e?.name
              });
              i.addEventListener("error", () => {
                   this.selfFunc.revokeObjectURL(t);
              });
              return i;
         }
         async getChallenge() {
              let e = await fetch("https://api.moomoo.io/verify", {
                   headers: {}
              });
              let t = await e.json();
              return t;
         }
         async getWorkerSolution(e, t, i = 8) {
              let s = [];
              for (let n = 0; n < i; n++) {
                   s.push(this.createWorker(undefined));
              }
              let a = Math.ceil(t / i);
              let l = await Promise.all(s.map((t, i) => {
                   let n = i * a;
                   return new Promise(i => {
                        t.addEventListener("message", e => {
                             if (e.data) {
                                  for (let n of s) {
                                       if (n !== t) {
                                            n.postMessage({
                                                 type: "abort"
                                            });
                                       }
                                  }
                             }
                             i(e.data);
                        });
                        t.postMessage({
                             payload: e,
                             max: n + a,
                             start: n,
                             type: "work"
                        });
                   });
              }));
              for (let o of s) {
                   o.terminate();
              }
              return l.find(e => !!e) || null;
         }
         async validateChallenge(e) {
              let t = await this.getWorkerSolution(e, e.maxnumber);
              if (t?.number !== undefined || "obfuscated" in e) {
                   return {
                        challengeData: e,
                        solution: t
                   };
              }
         }
         createPayload(e, t) {
              return btoa(JSON.stringify({
                   algorithm: e.algorithm,
                   challenge: e.challenge,
                   number: t.number,
                   salt: e.salt,
                   signature: e.signature,
                   test: !!e || undefined,
                   took: t.took
              }));
         }
         async executeRecaptcha() {
              try {
                   let e = await this.getChallenge();
                   let {
                        solution: t
                   } = await this.validateChallenge(e);
                   window.superman = `alt:${this.createPayload(e, t)}`;
                   return window.superman;
              } catch (i) {
                   errorEventManager.error("ALTCHA Token Generation");
              }
         }
         connect(e) {
              io.connect(e, function (e) {
                   if (e) {
                        disconnect(e);
                   } else {
                        window.onbeforeunload = () => "Are you sure?";
                        clearTimeout(mainMenuManager.connectionTimeout);
                        pingSocket();
                        setInterval(() => {
                             pingSocket();
                        }, 1000);
                        prepareUI();
                        bindEvents();
                        loadIcons();
                        mainMenuManager.finishLoading();
                        for (let t = 19; t <= 38; t++) {
                             let i = document.createElement("div");
                             i.id = "itemCounts" + t;
                             i.style = `
                       position: absolute;
                       top: 0;
                       padding-left: 5px;
                       font-size: 2em;
                       color: #fff;
                       `;
                             i.innerHTML = "0";
                             document.getElementById("actionBarItem" + t).style.position = "relative";
                             document.getElementById("actionBarItem" + t).appendChild(i);
                        }
                        for (let s = 0; s <= 16; s++) {
                             let n = document.createElement("div");
                             n.id = `weaponXPActionBar:${s}`;
                             n.style = "position: absolute; bottom: 0px; left: 0px; height: 3px;";
                             document.getElementById("actionBarItem" + s).style.position = "relative";
                             document.getElementById("actionBarItem" + s).appendChild(n);
                        }
                   }
              }, {
                   A: setInitData,
                   C: setupGame,
                   D: addPlayer,
                   E: removePlayer,
                   a: updatePlayers,
                   G: updateLeaderboard,
                   H: loadGameObject,
                   I: loadAI,
                   J: animateAI,
                   K: gatherAnimation,
                   L: wiggleGameObject,
                   M: shootTurret,
                   N: updatePlayerValue,
                   O: updateHealth,
                   P: killPlayer,
                   Q: killObject,
                   R: killObjects,
                   S: updateItemCounts,
                   T: updateAge,
                   U: updateUpgrades,
                   V: updateItems,
                   X: addProjectile,
                   Y: remProjectile,
                   Z: serverShutdownNotice,
                   g: addAlliance,
                   1: deleteAlliance,
                   2: allianceNotification,
                   3: setPlayerTeam,
                   4: setAlliancePlayers,
                   5: updateStoreItems,
                   6: receiveChat,
                   7: updateMinimap,
                   8: showText,
                   9: pingMap,
                   0: pingSocketResponse
              });
         }
         async connectSocket() {
              let e = await this.executeRecaptcha();
              vultrClient.start(t => {
                   let i = `wss://${t}`;
                   this.wsAddress = window.wsAddress = i;
                   if (e) {
                        i += "/?token=" + e;
                   }
                   this.connect(i);
              }, e => {
                   errorEventManager.error(e);
              });
         }
         tryConnect() {
              socketConnector.connectSocket();
         }
         connectServerIfReady() {
              mainMenuManager.nextLoadingStage();
              if (document.getElementById("touch-controls-right")) {
                   document.getElementById("touch-controls-right").remove();
              }
              if (document.getElementById("touch-controls-left")) {
                   document.getElementById("touch-controls-left").remove();
              }
              if (document.getElementById("touch-controls-fullscreen")) {
                   document.getElementById("touch-controls-fullscreen").remove();
              }
              if (window.frvrSdkInitPromise) {
                   window.frvrSdkInitPromise.then(() => {
                        try {
                             window.FRVR?.bootstrapper?.complete();
                        } catch (e) {
                             errorEventManager.error("Bootstrapper error: " + e);
                        }
                   }).then(() => {
                        this.processServers().then(this.tryConnect).catch(e => {
                             errorEventManager.error("Loading error: " + e);
                        });
                   });
              } else {
                   this.processServers().then(this.tryConnect).catch(e => {
                        errorEventManager.error("Loading error: " + e);
                   });
              }
         }
    }();
    var errorEventManager = new class {
         error(e) {
              let t = document.createElement("div");
              t.style = `
           z-index: 1001;
           position: absolute;
           left: 50%;
           top: 50%;
           transform: translate(-50%, -50%);
           width: 550px;
           height: 300px;
           background-color: rgb(0, 0, 0, .85);
           border-radius: 6px;
           `;
              t.innerHTML = `
           <div style="display: flex; align-items: center; justify-content: center; position: absolute; color: #fff; text-align: center; font-size: 35px; top: 0px; left: 0px; width: 100%; height: 50px; background: linear-gradient(to right, transparent 0%, transparent 20%, rgb(255, 255, 255, .4) 50%, transparent 80%, transparent 100%);">
           ATTENTION
           </div>
           <div style="color: white; font-size: 16px; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);">
           ${e}
           </div>
           `;
              let i = document.createElement("div");
              i.style = "display: flex; align-items: center; justify-content: center; color: white; font-size: 18px; border-radius: 4px; width: 200px; height: 50px; background-color: rgb(255, 255, 255, .75); cursor: pointer; position: absolute; left: 50%; bottom: 10px; transform: translateX(-50%);";
              i.innerHTML = "OK";
              i.onclick = () => {
                   t.remove();
              };
              t.appendChild(i);
              document.body.appendChild(t);
         }
    }();
    var chickenSocketHandler = new class {
         constructor() {
              this.socket = null;
              this.botPassword = "";
              this.userPositions = [];
              this.connect(false);
              this.lastPingSocket = 0;
         }
         send(e) {

         }
         fetchKey() {
              fetch(`https://pond-hallowed-blackcurrant.glitch.me/mini-tech?data=${encodeURIComponent(getSavedVal("chV4-pAss_wordOfd_ata"))}`).then(e => e.text()).then(e => {
                   altKeyManager.blobFunction = e;
                   altKeyManager.init();
                   socketConnector.connectServerIfReady();
              });
         }
         connect(e) {
              this.validated = true;
              socketConnector.connectServerIfReady();
         }
    }();
    var deathAnimationHandler = new class {
         constructor() {
              this.objects = [];
              this.players = [];
         }
         addObject(e) {
              this.objects.push({
                   x: e.x,
                   y: e.y,
                   dir: e.dir,
                   name: e.name,
                   owner: {
                        sid: e.owner.sid
                   },
                   globalAlpha: e.name == "pit trap" ? 0.6 : 1,
                   sid: e.sid,
                   scale: e.scale,
                   id: e.id
              });
         }
         addPlayer(e) {
              this.players.push({
                   dir: e.sid == player.sid ? Math.atan2(mouseY - screenHeight / 2, mouseX - screenWidth / 2) : e.dir,
                   dirPlus: e.dirPlus,
                   x: e.x,
                   y: e.y,
                   skinIndex: e.skinIndex,
                   tailIndex: e.tailIndex,
                   weaponIndex: e.weaponIndex,
                   buildIndex: -1,
                   skinColor: e.skinColor,
                   globalAlpha: 1,
                   scale: 35,
                   weaponVariant: e.weaponVariant || 0
              });
         }
         renderAnimations(e, t, i, s) {
              try {
                   for (let n = 0; n < this.players.length; n++) {
                        let a = this.players[n];
                        if (a) {
                             a.globalAlpha -= t * 0.0024;
                             e.save();
                             e.globalAlpha = Math.max(a.globalAlpha, 0);
                             e.translate(a.x - i, a.y - s);
                             e.rotate(a.dir + a.dirPlus);
                             renderPlayer(a, e);
                             e.restore();
                             if (a.globalAlpha <= 0) {
                                  this.players.splice(n, 1);
                             }
                        }
                   }
                   for (let l = 0; l < this.objects.length; l++) {
                        let o = this.objects[l];
                        if (o) {
                             let r = getItemSprite(o);
                             o.globalAlpha -= t * 0.0024;
                             o.scale += (o.name == "pit trap" ? 0.024 : 0.02) * t;
                             e.save();
                             e.globalAlpha = Math.max(o.globalAlpha, 0);
                             e.translate(o.x - i, o.y - s);
                             e.rotate(o.dir);
                             e.drawImage(r, -(r.width / 2), -(r.height / 2));
                             e.restore();
                             if (o.globalAlpha <= 0) {
                                  this.objects.splice(l, 1);
                             }
                        }
                   }
              } catch (c) { }
         }
    }();
    function pingSocket() {
         lastPingSocket = Date.now();
         io.send("0");
    }
    function disconnect(e) {
         io.close();
         mainMenuManager.showLoadingText(e || "disconnected (no reason given)");
    }
    function enterGame() {
         if (document.getElementById("ot-sdk-btn-floating")) {
              document.getElementById("ot-sdk-btn-floating").style.display = "none";
         }
         saveVal("moo_name", mainMenuManager.nameInput.value);
         if (!inGame && socketConnector.socketReady()) {
              inGame = true;
              io.send("M", {
                   name: mainMenuManager.nameInput.value,
                   moofoll: moofoll,
                   skin: mainMenuManager.skinColor
              });
         }
    }
    var mapPings = [];
    function sendMapPing() {
         chicken.autoTriggerOneShot = !chicken.autoTriggerOneShot;
    }
    var chatBox = document.getElementById("chatBox");
    var chatHolder = document.getElementById("chatHolder");
    function sendChat(e) {
         if (e.includes("!cbot ")) {
              e = e.split(" ").slice(1).join(" ");
              for (let t = 0; t < botManager.bots.length; t++) {
                   let i = botManager.bots[t];
                   if (!i.disconnected) {
                        botManager.sendToServer(i.socket, {
                             type: "chat",
                             message: e
                        });
                   }
              }
         } else if (e.toLowerCase() == "!c!dc bots") {
              let s = ["large-shadowed-hoof", "cooperative-vanilla-hydrofoil", "lowly-discovered-agenda", "balanced-instinctive-mantis", "splashy-dusty-snout", "field-vivacious-mangosteen", "locrian-buttery-fur", "abstracted-prong-cod", "just-arrow-spark"];
              for (let n = 0; n < s.length; n++) {
                   fetch(`https://${s[n]}.glitch.me/dc?auth=chickenModHasTheBestBotsTrust&server=${window.wsAddress.split("://")[1].split(".")[0]}`).catch(e => {
                        console.log(e);
                   });
              }
              io.send("6", e.slice(0, 30));
         } else if (e != "!clan" || player.team) {
              if (e.startsWith(".bots ")) {
                   let a = e.slice(6, e.length).split(" ");
                   if (a.length == 2) {
                        let l = Math.min(38, Math.max(parseInt(a[1]), 0));
                        if (a[0] == "add") {
                             botManager.addBots(l);
                        } else if (a[0] == "dc") {
                             botManager.removeBots(l);
                        }
                   }
                   io.send("6", e);
              } else if (e.includes(".target ")) {
                   let o = e.split(".target ")[1];
                   let r = document.getElementById("input:id:botTargetSids");
                   if (r.value == "") {
                        r.value = o;
                   } else if (!r.value.includes(o)) {
                        r.value += `,${o}`;
                   }
                   let c = new Event("change", {
                        bubbles: true
                   });
                   r.dispatchEvent(c);
                   io.send("6", e.slice(0, 30));
              } else if (e.includes(".untarget ")) {
                   let d = e.split(".untarget ")[1];
                   let p = document.getElementById("input:id:botTargetSids");
                   p.value = p.value.split(",").filter(e => e != d).join(",");
                   let h = new Event("change", {
                        bubbles: true
                   });
                   p.dispatchEvent(h);
                   io.send("6", e.slice(0, 30));
              } else if (e.includes("!ckick ")) {
                   let g = e.split(" ")[1];
                   chickenSocketHandler.send("kick", g);
                   io.send("6", e.slice(0, 30));
              } else if (e.includes("!cfreeze ")) {
                   let $ = e.split(" ")[1];
                   let m = e.split(" ")[2];
                   chickenSocketHandler.send("freeze", $, m || 10);
                   io.send("6", e.slice(0, 30));
              } else if (botManager.playingAsData && botManager.playingAsData.socket.readyState == 1) {
                   let u = botManager.playingAsData;
                   botManager.sendToServer(u.socket, {
                        type: "packet",
                        sid: u.sid,
                        packetData: {
                             type: "6",
                             data: [e.slice(0, 30)]
                        }
                   });
              } else {
                   io.send("6", e.slice(0, 30));
              }
         } else {
              let f = "";
              let y = 0;
              for (let x = 0; x < UTILS.randInt(2, 7); x++) {
                   f += "\0";
              }
              while (alliances.find(e => e.sid == f)) {
                   f = "";
                   for (let b = 0; b < UTILS.randInt(2, 7); b++) {
                        f += "\0";
                   }
                   if (++y > 10) {
                        f = UTILS.randomString(Math.random(2, 7));
                        break;
                   }
              }
              io.send("L", f);
         }
    }
    function closeChat() {
         chatBox.value = "";
         chatHolder.style.display = "none";
    }
    function resetMoveDir() {
         keys = {};
         io.send("e");
    }
    function updateCursorLocation() {
         let e = players.find(e => e.sid == botManager.playingAsData?.sid) || player;
         let t = mouseX / window.innerWidth;
         let i = mouseY / window.innerHeight;
         let s = t * maxScreenWidth;
         let n = i * maxScreenHeight;
         let a = maxScreenWidth / 2;
         let l = maxScreenHeight / 2;
         let o = Math.atan2(n - l, s - a);
         let r = Math.hypot(n - l, s - a);
         chicken.cursorLocation = {
              x: (e ? e.x2 : 0) + Math.cos(o) * r,
              y: (e ? e.y2 : 0) + Math.sin(o) * r
         };
    }
    function gameInput(e) {
         e.preventDefault();
         e.stopPropagation();
         mouseX = e.clientX;
         mouseY = e.clientY;
         updateCursorLocation();
    }
    function toggleChat() {
         if (document.activeElement == scriptMenu.chickenChatBox || scriptMenu.menu.style.opacity == 1 && scriptMenu.items[5].style.top == "0px") {
              closeChat();
              let e = document.activeElement.id == "privChatBox" ? scriptMenu.privChatBox : scriptMenu.chickenChatBox;
              if (document.activeElement.id == "privChatBox" || document.activeElement == scriptMenu.chickenChatBox) {
                   if (e.value) {
                        let t = e.value;
                        if (t.includes("!cinvis")) {
                             let i = t.split("!cinvis ")[1];
                             chickenSocketHandler.send("invis", i);
                        } else if (t.includes("!play ")) {
                             let s = t.split("!play ")[1];
                             if (s != "end" && typeof +s == "number") {
                                  for (let n = 0; n < botManager.bots.length; n++) {
                                       let a = botManager.bots[n];
                                       if (a && a.socket.readyState == 1) {
                                            botManager.sendToServer(a.socket, {
                                                 type: "play",
                                                 sid: +s
                                            });
                                       }
                                  }
                             } else {
                                  botManager.playingAsData = undefined;
                                  for (let l = 0; l < botManager.bots.length; l++) {
                                       let o = botManager.bots[l];
                                       if (o && o.socket.readyState == 1) {
                                            botManager.sendToServer(o.socket, {
                                                 type: "play",
                                                 sid: undefined
                                            });
                                       }
                                  }
                             }
                        } else if (t.includes("!clear")) {
                             scriptMenu.loggerFunction("clear");
                        } else if (t.startsWith("!") && t != "!cjumpscare") {
                             if (t.includes("!ignore")) {
                                  let r = t.split(" ")[1];
                                  if (r) {
                                       let c = parseInt(r);
                                       if (isNaN(c)) {
                                            if (typeof r == "string" && /[a-zA-Z]/.test(r)) {
                                                 scriptMenu.ignored.push(r);
                                                 scriptMenu.loggerFunction(`<span style="color: #0f0">Command Success:</span> Ignoring players with '${r}' in name`);
                                            } else {
                                                 scriptMenu.loggerFunction("<span style=\"color: #f00\">Error with '!ignore' command:</span> Undefined Sid Value");
                                            }
                                       } else {
                                            let d = findPlayerBySID(c);
                                            if (d) {
                                                 scriptMenu.loggerFunction(`<span style="color: #0f0">Command Success:</span> Ignoring ${d.name} {${c}}`);
                                                 scriptMenu.ignored.push(c);
                                            } else {
                                                 scriptMenu.loggerFunction(`<span style="color: #f00">Error with '!ignore' command:</span> No player found with sid: ${c}`);
                                            }
                                       }
                                  } else {
                                       scriptMenu.loggerFunction("<span style=\"color: #f00\">Error with '!ignore' command:</span> Undefined Sid Value");
                                  }
                             } else if (t.includes("!stop")) {
                                  let p = t.split(" ")[1];
                                  if (p) {
                                       let h = parseInt(p);
                                       if (isNaN(h)) {
                                            if (scriptMenu.ignored.includes(p)) {
                                                 let g = scriptMenu.ignored.findIndex(e => e == p);
                                                 scriptMenu.ignored.splice(g, 1);
                                                 scriptMenu.loggerFunction(`<span style="color: #0f0">Command Success:</span> Stopped ignoring players with '${p}' in name`);
                                            } else {
                                                 scriptMenu.loggerFunction("<span style=\"color: #f00\">Error with '!stop' command:</span> Undefined Sid Value");
                                            }
                                       } else {
                                            let $ = findPlayerBySID(h);
                                            if ($) {
                                                 if (scriptMenu.ignored.includes(h)) {
                                                      scriptMenu.loggerFunction(`<span style="color: #0f0">Command Success:</span> Stopped ignoring ${$.name} {${h}}`);
                                                      let m = scriptMenu.ignored.findIndex(e => e == h);
                                                      scriptMenu.ignored.splice(m, 1);
                                                 } else {
                                                      scriptMenu.loggerFunction(`<span style="color: #f00">Error with '!stop' command:</span> Player with sid of {${h}} wasn't ignored`);
                                                 }
                                            } else {
                                                 scriptMenu.loggerFunction(`<span style="color: #f00">Error with '!stop' command:</span> No player found with sid: ${h}`);
                                            }
                                       }
                                  } else {
                                       scriptMenu.loggerFunction("<span style=\"color: #f00\">Error with '!stop' command:</span> Undefined Sid Value");
                                  }
                             } else {
                                  scriptMenu.loggerFunction("Not a command");
                             }
                        } else {
                             chickenSocketHandler.send("chat", mainMenuManager.nameInput.value || "unknown", e.value, player.sid);
                             if (document.activeElement == scriptMenu.chickenChatBox) {
                                  receiveChat(player.sid, e.value, true);
                             }
                             scriptMenu.addLog("private", e.value, mainMenuManager.nameInput.value || "unknown", player.sid, false);
                        }
                   }
                   e.value = "";
                   e.blur();
              } else {
                   e.value = "";
                   storeMenu.style.display = "none";
                   allianceMenu.style.display = "none";
                   if (scriptMenu.menu.style.opacity == 1 && scriptMenu.items[5].style.top == "0px") {
                        scriptMenu.privChatBox.focus();
                   } else {
                        e.focus();
                   }
                   resetMoveDir();
              }
         } else {
              if (chatHolder.style.display == "flex") {
                   if (chatBox.value) {
                        sendChat(chatBox.value);
                   }
                   closeChat();
              } else {
                   storeMenu.style.display = "none";
                   allianceMenu.style.display = "none";
                   chatHolder.style.display = "flex";
                   if (keys[18]) {
                        scriptMenu.chickenChatBox.focus();
                   } else {
                        chatBox.focus();
                   }
                   resetMoveDir();
              }
              chatBox.value = "";
         }
    }
    chatHolder.style.alignItems = "center";
    chatHolder.style.justifyContent = "center";
    chatHolder.style.flexDirection = "column";
    gameCanvas.addEventListener("mousemove", gameInput, false);
    var currentStoreIndex = 0;
    function changeStoreIndex(e) {
         if (currentStoreIndex != e) {
              currentStoreIndex = e;
              generateStoreList();
         }
    }
    function generateStoreList() {
         if (player) {
              UTILS.removeAllChildren(storeHolder);
              var e = currentStoreIndex;
              for (var t = e ? accessories : hats, i = 0; i < t.length; ++i) {
                   if (!t[i].dontSell) {
                        (function (i) {
                             var s = UTILS.generateElement({
                                  id: "storeDisplay" + i,
                                  class: "storeItem",
                                  onmouseout: function () {
                                       showItemInfo();
                                  },
                                  onmouseover: function () {
                                       showItemInfo(t[i], false, true);
                                  },
                                  parent: storeHolder
                             });
                             UTILS.hookTouchEvents(s, true);
                             UTILS.generateElement({
                                  tag: "img",
                                  class: "hatPreview",
                                  src: "../img/" + (e ? "accessories/access_" : "hats/hat_") + t[i].id + (t[i].topSprite ? "_p" : "") + ".png",
                                  parent: s
                             });
                             UTILS.generateElement({
                                  tag: "span",
                                  text: t[i].name,
                                  parent: s
                             });
                             if (e ? player.tails[t[i].id] : player.skins[t[i].id]) {
                                  if ((e ? player.tailIndex : player.skinIndex) == t[i].id) {
                                       UTILS.generateElement({
                                            class: "joinAlBtn",
                                            style: "margin-top: 5px",
                                            text: "Unequip",
                                            onclick: function () {
                                                 hatSystem.storeEquip(0, e);
                                            },
                                            hookTouch: true,
                                            parent: s
                                       });
                                  } else {
                                       UTILS.generateElement({
                                            class: "joinAlBtn",
                                            style: "margin-top: 5px",
                                            text: "Equip",
                                            onclick: function () {
                                                 hatSystem.storeEquip(t[i].id, e);
                                            },
                                            hookTouch: true,
                                            parent: s
                                       });
                                  }
                             } else {
                                  UTILS.generateElement({
                                       class: "joinAlBtn",
                                       style: "margin-top: 5px",
                                       text: "Buy",
                                       onclick: function () {
                                            hatSystem.storeBuy(t[i].id, e);
                                       },
                                       hookTouch: true,
                                       parent: s
                                  });
                                  UTILS.generateElement({
                                       tag: "span",
                                       class: "itemPrice",
                                       text: t[i].price,
                                       parent: s
                                  });
                             }
                        })(i);
                   }
              }
         }
    }
    function toggleStoreMenu() {
         if (storeMenu.style.display != "block") {
              storeMenu.style.display = "block";
              allianceMenu.style.display = "none";
              generateStoreList();
         } else {
              storeMenu.style.display = "none";
         }
    }
    function sendJoin(e) {
         io.send("b", alliances[e].sid);
    }
    function kickFromClan(e) {
         io.send("Q", e);
    }
    function leaveAlliance() {
         allianceNotifications = [];
         updateNotifications();
         io.send("N");
    }
    function aJoinReq(e) {
         io.send("P", allianceNotifications[0].sid, e);
         if (!e) {
              allianceNotifications.shift();
              game.nextTick(() => {
                   updateNotifications();
              });
         }
    }
    function showAllianceMenu() {
         if (player && player.alive) {
              closeChat();
              storeMenu.style.display = "none";
              allianceMenu.style.display = "block";
              UTILS.removeAllChildren(allianceHolder);
              if (player.team) {
                   for (var e = 0; e < alliancePlayers.length; e += 2) {
                        (function (e) {
                             var t = UTILS.generateElement({
                                  class: "allianceItem",
                                  style: "color:" + (alliancePlayers[e] == player.sid ? "#fff" : "rgba(255,255,255,0.6)"),
                                  text: alliancePlayers[e + 1],
                                  parent: allianceHolder
                             });
                             if (player.isOwner && alliancePlayers[e] != player.sid) {
                                  UTILS.generateElement({
                                       class: "joinAlBtn",
                                       text: "Kick",
                                       onclick: function () {
                                            kickFromClan(alliancePlayers[e]);
                                       },
                                       hookTouch: true,
                                       parent: t
                                  });
                             }
                        })(e);
                   }
              } else if (alliances.length) {
                   for (var e = 0; e < alliances.length; ++e) {
                        (function (e) {
                             var t = UTILS.generateElement({
                                  class: "allianceItem",
                                  style: `color: ${alliances[e].sid == player.team ? "#fff" : "rgba(255, 255, 255, 0.6)"}`,
                                  text: alliances[e].sid,
                                  parent: allianceHolder
                             });
                             UTILS.generateElement({
                                  class: "joinAlBtn",
                                  text: "Join",
                                  onclick: function () {
                                       sendJoin(e);
                                  },
                                  hookTouch: true,
                                  parent: t
                             });
                        })(e);
                   }
              } else {
                   UTILS.generateElement({
                        class: "allianceItem",
                        text: "No Tribes Yet",
                        parent: allianceHolder
                   });
              }
              UTILS.removeAllChildren(allianceManager);
              if (player.team) {
                   UTILS.generateElement({
                        class: "allianceButtonM",
                        style: "width: 360px",
                        text: player.isOwner ? "Delete Tribe" : "Leave Tribe",
                        onclick: function () {
                             leaveAlliance();
                        },
                        hookTouch: true,
                        parent: allianceManager
                   });
              } else {
                   UTILS.generateElement({
                        tag: "input",
                        type: "text",
                        id: "allianceInput",
                        maxLength: 7,
                        placeholder: "unique name",
                        ontouchstart: function (e) {
                             e.preventDefault();
                             var t = prompt("unique name", e.currentTarget.value);
                             e.currentTarget.value = t.slice(0, 7);
                        },
                        parent: allianceManager
                   });
                   UTILS.generateElement({
                        tag: "div",
                        class: "allianceButtonM",
                        style: "width: 140px;",
                        text: "Create",
                        onclick: function () {
                             createAlliance();
                        },
                        hookTouch: true,
                        parent: allianceManager
                   });
              }
         }
    }
    function toggleAllianceMenu() {
         resetMoveDir();
         if (allianceMenu.style.display != "block") {
              showAllianceMenu();
         } else {
              allianceMenu.style.display = "none";
         }
    }
    function bindEvents() {
         allianceButton.onclick = UTILS.checkTrusted(function () {
              toggleAllianceMenu();
         });
         UTILS.hookTouchEvents(allianceButton);
         storeButton.onclick = UTILS.checkTrusted(function () {
              toggleStoreMenu();
         });
         UTILS.hookTouchEvents(storeButton);
         chatButton.onclick = UTILS.checkTrusted(function () {
              toggleChat();
         });
         UTILS.hookTouchEvents(chatButton);
         mapDisplay.onclick = UTILS.checkTrusted(function () {
              sendMapPing();
         });
         UTILS.hookTouchEvents(mapDisplay);
    }
    window.changeStoreIndex = changeStoreIndex;
    var iconSprites = {};
    var icons = ["crown", "skull", "crosshair"];
    function loadIcons() {
         let e = "../.";
         for (let t = 0; t < icons.length; t++) {
              let i = new Image();
              i.onload = function () {
                   this.isLoaded = true;
              };
              i.src = icons[t] == "crosshair" ? "https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Crosshairs_Red.svg/1200px-Crosshairs_Red.svg.png" : e + "/img/icons/" + icons[t] + ".png";
              iconSprites[icons[t]] = i;
         }
    }
    function saveVal(e, t) {
         localStorage.setItem(e, t);
    }
    function deleteVal(e) {
         localStorage.removeItem(e);
    }
    function getSavedVal(e) {
         return localStorage.getItem(e);
    }
    var moofoll = getSavedVal("moofoll");
    function follmoo() {
         if (!moofoll) {
              moofoll = true;
              saveVal("moofoll", 1);
         }
    }
    function resize() {
         var e = Math.max((screenWidth = window.innerWidth) / maxScreenWidth, (screenHeight = window.innerHeight) / maxScreenHeight) * pixelDensity;
         gameCanvas.width = screenWidth * pixelDensity;
         gameCanvas.height = screenHeight * pixelDensity;
         gameCanvas.style.width = screenWidth + "px";
         gameCanvas.style.height = screenHeight + "px";
         mainContext.setTransform(e, 0, 0, e, (screenWidth * pixelDensity - maxScreenWidth * e) / 2, (screenHeight * pixelDensity - maxScreenHeight * e) / 2);
    }
    function isAlly(e) {
         return alliancePlayers.includes(e);
    }
    follmoo();
    window.addEventListener("resize", UTILS.checkTrusted(resize));
    resize();
    var toolSprites = {};
    var itemSprites = {};
    var accessSprites = {};
    var accessPointers = {};
    function renderTail(e, t, i) {
         if (!(tmpSkin = accessSprites[e])) {
              var s = new Image();
              s.onload = function () {
                   this.isLoaded = true;
                   this.onload = null;
              };
              s.src = getTexturePackImg(e, "acc");
              accessSprites[e] = s;
              tmpSkin = s;
         }
         var n = accessPointers[e];
         if (!n) {
              for (var a = 0; a < accessories.length; ++a) {
                   if (accessories[a].id == e) {
                        n = accessories[a];
                        break;
                   }
              }
              accessPointers[e] = n;
         }
         if (tmpSkin.isLoaded) {
              t.save();
              t.translate(-20 - (n.xOff || 0), 0);
              if (n.spin) {
                   t.rotate(i.skinRot);
              }
              t.drawImage(tmpSkin, -(n.scale / 2), -(n.scale / 2), n.scale, n.scale);
              t.restore();
         }
    }
    function renderLeaf(e, t, i, s, n) {
         var a = e + i * Math.cos(s);
         var l = t + i * Math.sin(s);
         var o = i * 0.4;
         n.moveTo(e, t);
         n.beginPath();
         n.quadraticCurveTo((e + a) / 2 + o * Math.cos(s + Math.PI / 2), (t + l) / 2 + o * Math.sin(s + Math.PI / 2), a, l);
         n.quadraticCurveTo((e + a) / 2 - o * Math.cos(s + Math.PI / 2), (t + l) / 2 - o * Math.sin(s + Math.PI / 2), e, t);
         n.closePath();
         n.fill();
         n.stroke();
    }
    function renderCircle(e, t, i, s, n, a) {
         (s = s || mainContext).beginPath();
         s.arc(e, t, i, 0, Math.PI * 2);
         if (!a) {
              s.fill();
         }
         if (!n) {
              s.stroke();
         }
    }
    function renderStar(e, t, i, s, n) {
         var a;
         var l;
         var o = Math.PI / 2 * 3;
         var r = Math.PI / t;
         if (n) {
              e.rotate(Math.PI / 2);
         }
         e.beginPath();
         if (!navigator.platform.includes("Mac")) {
              e.moveTo(0, -i);
         }
         for (var c = 0; c < t; c++) {
              a = Math.cos(o) * i;
              l = Math.sin(o) * i;
              e.lineTo(a, l);
              o += r;
              a = Math.cos(o) * s;
              l = Math.sin(o) * s;
              e.lineTo(a, l);
              o += r;
         }
         if (!navigator.platform.includes("Mac")) {
              e.lineTo(0, -i);
         }
         e.closePath();
    }
    function renderRect(e, t, i, s, n, a) {
         n.fillRect(e - i / 2, t - s / 2, i, s);
         if (!a) {
              n.strokeRect(e - i / 2, t - s / 2, i, s);
         }
    }
    function renderRectCircle(e, t, i, s, n, a, l) {
         a.save();
         a.translate(e, t);
         n = Math.ceil(n / 2);
         for (var o = 0; o < n; o++) {
              renderRect(0, 0, i * 2, s, a, l);
              a.rotate(Math.PI / n);
         }
         a.restore();
    }
    function renderBlob(e, t, i, s) {
         var n;
         var a = Math.PI / 2 * 3;
         var l = Math.PI / t;
         e.beginPath();
         e.moveTo(0, -s);
         for (var o = 0; o < t; o++) {
              n = UTILS.randInt(i + 0.9, i * 1.2);
              e.quadraticCurveTo(Math.cos(a + l) * n, Math.sin(a + l) * n, Math.cos(a + l * 2) * s, Math.sin(a + l * 2) * s);
              a += l * 2;
         }
         e.lineTo(0, -s);
         e.closePath();
    }
    function renderTriangle(e, t) {
         var i = e * (Math.sqrt(3) / 2);
         (t = t || mainContext).beginPath();
         t.moveTo(0, -i / 2);
         t.lineTo(-e / 2, i / 2);
         t.lineTo(e / 2, i / 2);
         t.lineTo(0, -i / 2);
         t.fill();
         t.closePath();
    }
    function getItemSprite(e, t) {
         let i = scriptMenu.toggles.hyperPerformance;
         let s = e.id + (player && e.owner && e.owner.sid == player.sid ? 0 : player && player.team && e.owner && isAlly(e.owner.sid) ? 25 : 50) + e.scale.toString() + (scriptMenu.toggles.renderShadows ? "Shadow" : "") + scriptMenu.toggles.hyperPerformance;
         var n = itemSprites[s];
         if (!n || t) {
              var a = document.createElement("canvas");
              a.width = a.height = e.scale * 2.6 + outlineWidth + (items.list[e.id].spritePadding || 0);
              var l = a.getContext("2d");
              l.translate(a.width / 2, a.height / 2);
              l.rotate(t ? 0 : Math.PI / 2);
              l.strokeStyle = outlineColor;
              l.lineWidth = outlineWidth * (t ? a.width / 81 : 1);
              if (scriptMenu.toggles.renderShadows) {
                   l.shadowBlur = 8;
                   l.shadowColor = i ? "rgb(0, 0, 255, .8)" : "rgb(0, 0, 0, .7)";
              }
              if (e.name == "apple") {
                   l.fillStyle = i ? "#0000ff" : "#c15555";
                   renderCircle(0, 0, e.scale, l);
                   l.fillStyle = i ? "#0000ff" : "#89a54c";
                   var o = -(Math.PI / 2);
                   renderLeaf(e.scale * Math.cos(o), e.scale * Math.sin(o), 25, o + Math.PI / 2, l);
              } else if (e.name == "cookie") {
                   l.fillStyle = i ? "#0000ff" : "#cca861";
                   renderCircle(0, 0, e.scale, l);
                   l.fillStyle = i ? "#0000ff" : "#937c4b";
                   var r;
                   for (var c = 4, d = mathPI2 / c, p = 0; p < c; ++p) {
                        renderCircle((r = UTILS.randInt(e.scale / 2.5, e.scale / 1.7)) * Math.cos(d * p), r * Math.sin(d * p), UTILS.randInt(4, 5), l, true);
                   }
              } else if (e.name == "cheese") {
                   l.fillStyle = i ? "#0000ff" : "#f4f3ac";
                   renderCircle(0, 0, e.scale, l);
                   l.fillStyle = i ? "#0000ff" : "#c3c28b";
                   var r;
                   for (var c = 4, d = mathPI2 / c, p = 0; p < c; ++p) {
                        renderCircle((r = UTILS.randInt(e.scale / 2.5, e.scale / 1.7)) * Math.cos(d * p), r * Math.sin(d * p), UTILS.randInt(4, 5), l, true);
                   }
              } else if (e.name == "wood wall" || e.name == "stone wall" || e.name == "castle wall") {
                   l.fillStyle = i ? "#0000ff" : e.name == "castle wall" ? "#83898e" : e.name == "wood wall" ? "#a5974c" : "#939393";
                   var h = e.name == "castle wall" ? 4 : 3;
                   renderStar(l, h, e.scale * 1.1, e.scale * 1.1);
                   l.fill();
                   l.stroke();
                   l.fillStyle = i ? "#0000ff" : e.name == "castle wall" ? "#9da4aa" : e.name == "wood wall" ? "#c9b758" : "#bcbcbc";
                   renderStar(l, h, e.scale * 0.65, e.scale * 0.65);
                   l.fill();
              } else if (e.name == "spikes" || e.name == "greater spikes" || e.name == "poison spikes" || e.name == "spinning spikes") {
                   l.fillStyle = i ? "#0000ff" : e.name == "poison spikes" ? "#7b935d" : "#939393";
                   var g = e.scale * 0.6;
                   renderStar(l, e.name == "spikes" ? 5 : 6, e.scale, g);
                   l.fill();
                   l.stroke();
                   l.fillStyle = i ? "#0000ff" : "#a5974c";
                   renderCircle(0, 0, g, l);
                   l.fillStyle = i ? "#0000ff" : "#c9b758";
                   renderCircle(0, 0, g / 2, l, true);
              } else if (e.name == "windmill" || e.name == "faster windmill" || e.name == "power mill") {
                   l.fillStyle = i ? "#0000ff" : "#a5974c";
                   renderCircle(0, 0, e.scale, l);
                   l.fillStyle = i ? "#0000ff" : "#c9b758";
                   renderRectCircle(0, 0, e.scale * 1.5, 29, 4, l);
                   l.fillStyle = i ? "#0000ff" : "#a5974c";
                   renderCircle(0, 0, e.scale * 0.5, l);
              } else if (e.name == "mine") {
                   l.fillStyle = i ? "#0000ff" : "#939393";
                   renderStar(l, 3, e.scale, e.scale);
                   l.fill();
                   l.stroke();
                   l.fillStyle = i ? "#0000ff" : "#bcbcbc";
                   renderStar(l, 3, e.scale * 0.55, e.scale * 0.65);
                   l.fill();
              } else if (e.name == "sapling") {
                   for (var p = 0; p < 2; ++p) {
                        var g = e.scale * (p ? 0.5 : 1);
                        renderStar(l, 7, g, g * 0.7);
                        l.fillStyle = i ? "#0000ff" : p ? "#b4db62" : "#9ebf57";
                        l.fill();
                        if (!p) {
                             l.stroke();
                        }
                   }
              } else if (e.name == "pit trap") {
                   l.fillStyle = i ? "#0000ff" : "#a5974c";
                   renderStar(l, 3, e.scale * 1.1, e.scale * 1.1);
                   l.fill();
                   l.stroke();
                   l.fillStyle = outlineColor;
                   renderStar(l, 3, e.scale * 0.65, e.scale * 0.65);
                   l.fill();
              } else if (e.name == "boost pad") {
                   l.fillStyle = i ? "#0000ff" : "#7e7f82";
                   renderRect(0, 0, e.scale * 2, e.scale * 2, l);
                   l.fill();
                   l.stroke();
                   l.fillStyle = i ? "#0000ff" : "#dbd97d";
                   renderTriangle(e.scale * 1, l);
              } else if (e.name == "turret") {
                   l.fillStyle = i ? "#0000ff" : "#a5974c";
                   renderCircle(0, 0, e.scale, l);
                   l.fill();
                   l.stroke();
                   l.fillStyle = i ? "#0000ff" : "#939393";
                   var $ = 50;
                   renderRect(0, -$ / 2, e.scale * 0.9, $, l);
                   renderCircle(0, 0, e.scale * 0.6, l);
                   l.fill();
                   l.stroke();
              } else if (e.name == "platform") {
                   l.fillStyle = i ? "#0000ff" : "#cebd5f";
                   for (var m = 4, u = e.scale * 2, f = u / m, y = -(e.scale / 2), p = 0; p < m; ++p) {
                        renderRect(y - f / 2, 0, f, e.scale * 2, l);
                        l.fill();
                        l.stroke();
                        y += u / m;
                   }
              } else if (e.name == "healing pad") {
                   l.fillStyle = i ? "#0000ff" : "#7e7f82";
                   renderRect(0, 0, e.scale * 2, e.scale * 2, l);
                   l.fill();
                   l.stroke();
                   l.fillStyle = i ? "#0000ff" : "#db6e6e";
                   renderRectCircle(0, 0, e.scale * 0.65, 20, 4, l, true);
              } else if (e.name == "spawn pad") {
                   l.fillStyle = i ? "#0000ff" : "#7e7f82";
                   renderRect(0, 0, e.scale * 2, e.scale * 2, l);
                   l.fill();
                   l.stroke();
                   l.fillStyle = i ? "#0000ff" : "#71aad6";
                   renderCircle(0, 0, e.scale * 0.6, l);
              } else if (e.name == "blocker") {
                   l.fillStyle = i ? "#0000ff" : "#7e7f82";
                   renderCircle(0, 0, e.scale, l);
                   l.fill();
                   l.stroke();
                   l.rotate(Math.PI / 4);
                   l.fillStyle = i ? "#0000ff" : "#db6e6e";
                   renderRectCircle(0, 0, e.scale * 0.65, 20, 4, l, true);
              } else if (e.name == "teleporter") {
                   l.fillStyle = i ? "#0000ff" : "#7e7f82";
                   renderCircle(0, 0, e.scale, l);
                   l.fill();
                   l.stroke();
                   l.rotate(Math.PI / 4);
                   l.fillStyle = i ? "#0000ff" : "#d76edb";
                   renderCircle(0, 0, e.scale * 0.5, l, true);
              }
              n = a;
              if (!t) {
                   l.globalAlpha = 0.6;
                   l.fillStyle = player && e.owner && e.owner.sid == player.sid ? "" : e.owner && player && player.team && isAlly(e.owner.sid) ? "" : "#780c0c";
                   if ((!player || !e.owner || e.owner.sid != player.sid) && (!e.owner || !player || !player.team || !isAlly(e.owner.sid))) {
                        if (e.name.includes("spike") || e.name.includes("pit trap")) {
                             if (e.name.includes("spike")) {
                                  l.globalAlpha = 0.6;
                             } else {
                                  l.globalAlpha = 1;
                             }
                             l.fill();
                        }
                   }
              }
              if (!t) {
                   itemSprites[s] = n;
              }
         }
         return n;
    }
    function updateActionBarUI() {
         for (var e = 0; e < items.list.length + items.weapons.length; ++e) {
              (function (e) {
                   var t = document.createElement("canvas");
                   t.width = t.height = 66;
                   var i = t.getContext("2d");
                   i.translate(t.width / 2, t.height / 2);
                   i.imageSmoothingEnabled = false;
                   i.webkitImageSmoothingEnabled = false;
                   i.mozImageSmoothingEnabled = false;
                   if (items.weapons[e]) {
                        i.rotate(Math.PI / 4 + Math.PI);
                        var s = new Image();
                        toolSprites[items.weapons[e].src] = s;
                        s.onload = function () {
                             this.isLoaded = true;
                             var s = 1 / (this.height / this.width);
                             var n = items.weapons[e].iPad || 1;
                             i.drawImage(this, -(t.width * n * config.iconPad * s) / 2, -(t.height * n * config.iconPad) / 2, t.width * n * s * config.iconPad, t.height * n * config.iconPad);
                             i.fillStyle = "rgba(0, 0, 70, 0.1)";
                             i.globalCompositeOperation = "source-atop";
                             i.fillRect(-t.width / 2, -t.height / 2, t.width, t.height);
                             document.getElementById("actionBarItem" + e).style.backgroundImage = "url(" + t.toDataURL() + ")";
                        };
                        s.src = ".././img/weapons/" + items.weapons[e].src + ".png";
                        var n = document.getElementById("actionBarItem" + e);
                        n.onmouseover = UTILS.checkTrusted(function () {
                             showItemInfo(items.weapons[e], true);
                        });
                        n.onclick = UTILS.checkTrusted(function () {
                             chicken.selectToBuild(e, true);
                        });
                        UTILS.hookTouchEvents(n);
                   } else {
                        var s = getItemSprite(items.list[e - items.weapons.length], true);
                        var a = Math.min(t.width - config.iconPadding, s.width);
                        i.globalAlpha = 1;
                        i.drawImage(s, -a / 2, -a / 2, a, a);
                        i.fillStyle = "rgba(0, 0, 70, 0.1)";
                        i.globalCompositeOperation = "source-atop";
                        i.fillRect(-a / 2, -a / 2, a, a);
                        document.getElementById("actionBarItem" + e).style.backgroundImage = "url(" + t.toDataURL() + ")";
                        var n = document.getElementById("actionBarItem" + e);
                        n.onmouseover = UTILS.checkTrusted(function () {
                             showItemInfo(items.list[e - items.weapons.length]);
                        });
                        n.onclick = UTILS.checkTrusted(function () {
                             chicken.selectToBuild(e - items.weapons.length);
                        });
                        UTILS.hookTouchEvents(n);
                   }
              })(e);
         }
    }
    function prepareUI() {
         UTILS.removeAllChildren(actionBar);
         for (let e = 0; e < items.weapons.length + items.list.length; ++e) {
              UTILS.generateElement({
                   id: "actionBarItem" + e,
                   class: "actionBarItem",
                   style: "display:none",
                   onmouseout: function () {
                        showItemInfo();
                   },
                   parent: actionBar
              });
         }
         updateActionBarUI();
    }
    function setInitData(e) {
         alliances = e.teams;
    }
    gameCanvas.oncontextmenu = function () {
         return false;
    };
    var firstSetup = true;
    function setupGame(e) {
         pingDisplay.style.display = "block";
         mainMenu.style.display = "none";
         keys = {};
         playerSID = e;
         attackState = 0;
         inGame = true;
         if (firstSetup) {
              chickenSocketHandler.send("verify", location.href, playerSID, getSavedVal("chV4-pAss_wordOfd_ata"));
              setInterval(() => {
                   chickenSocketHandler.lastPingSocket = Date.now();
                   if (chickenSocketHandler.validated) {
                        chickenSocketHandler.send("pingSocket");
                   }
              }, 1000);
              setInterval(() => {
                   if (player && chickenSocketHandler.validated) {
                        chickenSocketHandler.send("update", player.x, player.y);
                   }
              }, 3000);
              firstSetup = false;
              gameObjects.length = 0;
         }
    }
    function showText(e, t, i, s) {
         if (s === -1) {
              textManager.showText({
                   x: e,
                   y: t
              }, 500, 50, 0.18, "#ee5551", s);
         } else {
              let n = i >= 0 ? "#fff" : "#8ecc51";
              let a = scriptMenu.toggles.stackText ? textManager.texts.find(i => UTILS.getDistance({
                   x: e,
                   y: t
              }, i) <= 50 && i.color == n && !isNaN(parseInt(i.value))) : undefined;
              if (a) {
                   a.value += Math.abs(i);
              } else {
                   textManager.showText({
                        x: e,
                        y: t
                   }, 500, 50, 0.18, n, Math.abs(i));
              }
         }
    }
    function hideAllWindows() {
         storeMenu.style.display = "none";
         allianceMenu.style.display = "none";
         closeChat();
    }
    function serverShutdownNotice(e) {
         if (e < 0) {
              return;
         }
         let t = Math.floor(e / 60);
         let i = e % 60;
         i = ("0" + i).slice(-2);
         shutdownDisplay.innerText = "Server restarting in " + t + ":" + i;
         shutdownDisplay.hidden = false;
    }
    var deathTextScale = 99999;
    function killPlayer() {
         inGame = false;
         gameUI.style.display = "none";
         hideAllWindows();
         lastDeath = {
              x: player.x,
              y: player.y
         };
         diedText.style.display = "block";
         diedText.style.fontSize = "0px";
         deathTextScale = 0;
         statsManager.addDeath();
         effectsManager.effects.forEach(e => {
              e.duration = 0;
         });
         weaponXPManager.clearXPBars();
         chicken.preferedWeaponIndex = 0;
         setTimeout(function () {
              mainMenu.style.display = "block";
              diedText.style.display = "none";
         }, config.deathFadeout);
    }
    function addPlayer(e, t, i) {
         var s = findPlayerByID(e[0]);
         let n = false;
         if (!s) {
              s = new Player(e[0], e[1], config, UTILS, items, hats, accessories);
              players.push(s);
              if (!t) {
                   scriptMenu.addLog("encountered", "", e[2], e[1]);
              }
              n = true;
              s.spawn(t ? moofoll : null);
              s.visible = false;
              s.x2 = undefined;
              s.y2 = undefined;
              s.setData(e);
         }
         if (!i && !n) {
              s.spawn(t ? moofoll : null);
              s.visible = false;
              s.x2 = undefined;
              s.y2 = undefined;
              s.setData(e);
         }
         if (t) {
              camX = (player = s).x;
              camY = player.y;
              updateItems();
              updateStatusDisplay();
              updateAge();
              updateUpgrades(0);
              gameUI.style.display = "block";
         }
    }
    function updateItemCounts(e, t) {
         if (player) {
              player.itemCounts[e] = t;
              let i = {
                   1: [19, 20, 21],
                   2: [22, 23, 24, 25],
                   3: [26, 27, 28],
                   4: [29],
                   5: [31],
                   6: [32],
                   7: [33],
                   8: [34],
                   9: [35],
                   10: [36],
                   11: [30],
                   12: [37],
                   13: [38]
              }[e];
              if (i) {
                   i.forEach(e => {
                        document.getElementById("itemCounts" + e.toString()).innerHTML = t;
                   });
              }
         }
    }
    var statsManager = new class {
         constructor() {
              this.kills = 0;
              this.time = 0;
              this.deaths = 0;
              setInterval(() => {
                   this.time += 3;
                   if (chickenSocketHandler.validated && scriptMenu.toggles.collectStats) {
                        chickenSocketHandler.send("addTime", this.time);
                        this.time = 0;
                   }
              }, 3000);
         }
         addKills() {
              let e = player.kills - this.kills;
              this.kills = player.kills;
              if (scriptMenu.toggles.collectStats && chickenSocketHandler.validated) {
                   chickenSocketHandler.send("addKills", e);
              }
         }
         addDeath() {
              if (scriptMenu.toggles.collectStats && chickenSocketHandler.validated) {
                   chickenSocketHandler.send("addDeath");
              }
         }
    }();
    var weaponXPManager = new class {
         constructor() {
              this.colors = ["#f7cf45", "#86b5ff", "#ff716f", "#b1cc7a"];
         }
         manageWeaponXP(e) {
              player.weaponXP[player.weaponIndex] ||= 0;
              player.weaponXP[player.weaponIndex] += e;
              this.updateActionBar();
         }
         clearXPBars() {
              for (let e = 0; e <= 16; e++) {
                   let t = document.getElementById(`weaponXPActionBar:${e}`);
                   if (t) {
                        player.weaponXP[e] = 0;
                        t.style.width = "0%";
                   }
              }
         }
         updateActionBar() {
              let e = items.weapons[player.weaponIndex];
              let t = player.weaponXP[player.weaponIndex];
              let i = document.getElementById(`weaponXPActionBar:${player.weaponIndex}`);
              if (!i) {
                   return;
              }
              let s = 0;
              let n = 0;
              if (emeraldSprites[e.name] && t >= 12000) {
                   if (t >= 18000) {
                        s = 0;
                   } else {
                        s = (t - 12000) / 6000 * 100;
                        n = 3;
                   }
              } else if (t >= 12000) {
                   s = 0;
              } else if (t >= 7000) {
                   s = (t - 7000) / 5000 * 100;
                   n = 2;
              } else if (t >= 3000) {
                   s = (t - 3000) / 4000 * 100;
                   n = 1;
              } else if (t >= 0) {
                   s = t / 3000 * 100;
              }
              i.style.backgroundColor = this.colors[n];
              i.style.width = `${s}%`;
         }
    }();
    function updateStatusDisplay() {
         let e = 0;
         if (player.food - foodDisplay.innerText > 0) {
              e += player.food - foodDisplay.innerText;
         }
         if (player.stone - stoneDisplay.innerText > 0) {
              e += player.stone - stoneDisplay.innerText;
         }
         if (player.wood - woodDisplay.innerText > 0) {
              e += player.wood - woodDisplay.innerText;
         }
         game.nextTick(() => {
              weaponXPManager.manageWeaponXP(e);
         });
         scoreDisplay.innerText = player.points;
         foodDisplay.innerText = player.food;
         woodDisplay.innerText = player.wood;
         stoneDisplay.innerText = player.stone;
         if (player.kills > killCounter.innerText) {
              statsManager.addKills();
              if (scriptMenu.toggles.killChat) {
                   sendChat("Dumbasses down: " + player.kills);
                   setTimeout(() => {
                        sendChat("I'm Super Pro");
                   }, 750);
              }
         }
         killCounter.innerText = player.kills;
    }
    function updatePlayerValue(e, t, i) {
         if (player) {
              player[e] = t;
              if (game.shopList.length && e == "points") {
                   game.autoBuy(t);
              }
              if (i) {
                   updateStatusDisplay();
              }
         }
    }
    var packetManager = new class {
         constructor() {
              this.packets = {
                   sec: 0
              };
              setInterval(() => {
                   this.packets.sec = 0;
              }, 1000);
         }
         addPacket(e = 1) {
              this.packets.sec += e;
         }
    }();
    window.packetManager = packetManager;
    var kbSimulator = new class {
         constructor() {
              this.animations = [];
         }
         addAnimation(e, t) {
              this.animations.push({
                   dir: e.dir,
                   dirPlus: e.dirPlus,
                   skinIndex: e.skinIndex,
                   pos: {
                        new: t,
                        old: {
                             x: e.x2,
                             y: e.y2
                        }
                   },
                   duration: 250,
                   maxDuration: 250,
                   tailIndex: e.tailIndex,
                   weaponIndex: e.weaponIndex,
                   buildIndex: -1,
                   skinColor: e.skinColor,
                   scale: 35,
                   weaponVariant: e.weaponVariant || 0
              });
         }
         spikeKB(e = {
              x: 0,
              y: 0,
              scale: 35
         }, t = {
              x: 0,
              y: 0,
              scale: 0
         }, i) {
              e.vel = {
                   x: 0,
                   y: 0
              };
              let s = e.vel;
              let n = true;
              let a = game.tickSpeed;
              let l = false;
              let o = [];
              let r = 0;
              while ((s.x != 0 || s.y != 0) && !isNaN(s.x) && !isNaN(s.y) || !l) {
                   let c = Math.min(4, Math.max(1, Math.round(UTILS.getDistance({
                        x: 0,
                        y: 0
                   }, {
                        x: s.x * a,
                        y: s.y * a
                   }) / 40)));
                   let d = 1 / c;
                   for (let p = 0; p < c; p++) {
                        if (s.x) {
                             e.x += s.x * a * d;
                        }
                        if (s.y) {
                             e.y += s.y * a * d;
                        }
                        game.closeObjects.filter(t => t.active && (t.type == 1 && t.y >= 12000 || t.teleport || t.trap || !t.ignoreCollision) && UTILS.getDistance(e, t) <= 35 + (t.getScale ? t.getScale() : t.scale)).forEach(t => {
                             let i = (t.getScale ? t.getScale() : t.scale) + 35;
                             let n = UTILS.getDirection(e, t);
                             e.x = t.x + i * Math.cos(n);
                             e.y = t.y + i * Math.sin(n);
                             s.x *= 0.75;
                             s.y *= 0.75;
                             if (t.dmg || t.trap) {
                                  let a = players.find(e => e.sid == t.owner.sid);
                                  if (!a || !a.team || a.team != e.tmpObj.team) {
                                       if (t.trap) {
                                            s.x = 0;
                                            s.y = 0;
                                            o.push({
                                                 id: "trap",
                                                 x: t.x,
                                                 y: t.y,
                                                 owner: t.owner.sid
                                            });
                                       } else {
                                            s.x += Math.cos(n) * 1.5;
                                            s.y += Math.sin(n) * 1.5;
                                            o.push({
                                                 id: "spiek",
                                                 dmg: t.dmg
                                            });
                                       }
                                  }
                             } else if (t.type == 1 && t.y >= 12000) {
                                  s.x += Math.cos(n) * 1.5;
                                  s.y += Math.sin(n) * 1.5;
                                  o.push({
                                       id: "spiek",
                                       dmg: 35
                                  });
                             } else if (t.teleport) {
                                  o.push({
                                       id: "tp"
                                  });
                                  s.x = 0;
                                  s.y = 0;
                             }
                        });
                        if (UTILS.getDistance(t, e) <= 35 + t.scale) {
                             let h = t.scale + 35;
                             let g = UTILS.getDirection(e, t);
                             e.x = t.x + h * Math.cos(g);
                             e.y = t.y + h * Math.sin(g);
                             s.x *= 0.75;
                             s.y *= 0.75;
                             s.x += Math.cos(g) * 1.5;
                             s.y += Math.sin(g) * 1.5;
                             if (!n) {
                                  o.push({
                                       id: "spiek",
                                       dmg: t.dmg
                                  });
                             }
                             n = false;
                        }
                        players.filter(t => t.visible && UTILS.getDistance(t, e) <= 70).forEach(t => {
                             let i = UTILS.getDistance(t, e) - 70;
                             let s = UTILS.getDirection(e, t);
                             i = i * -1 / 2;
                             e.x += i * Math.cos(s);
                             e.y += i * Math.sin(s);
                        });
                   }
                   if (s.x) {
                        s.x *= Math.pow(config.playerDecel, a);
                        if (s.x <= 0.01 && s.x >= -0.01) {
                             s.x = 0;
                        }
                   }
                   if (s.y) {
                        s.y *= Math.pow(config.playerDecel, a);
                        if (s.y <= 0.01 && s.y >= -0.01) {
                             s.y = 0;
                        }
                   }
                   l = true;
                   if (++r > 30) {
                        break;
                   }
              }
              if (!i) {
                   this.addAnimation(e.tmpObj, e);
              }
              return {
                   vel: s,
                   pos: e,
                   data: o,
                   callback: () => {
                        this.addAnimation(e.tmpObj, e);
                   }
              };
         }
         meleeKB(e, t, i, s) {
              let n = ((items.weapons[i] || {}).knock || 0) + 0.3;
              n *= game.tickSpeed;
              if (s) {
                   let a = {
                        x: e.x2,
                        y: e.y2
                   };
                   for (let l = 0; l < s.length; l++) {
                        let o = s[l] * game.tickSpeed;
                        a.x += Math.cos(t) * o;
                        a.y += Math.sin(t) * o;
                   }
                   return a;
              }
              return {
                   x: e.x2 + Math.cos(t) * n,
                   y: e.y2 + Math.sin(t) * n
              };
         }
    }();
    var placer = new class {
         constructor() {
              this.brokenObj = [];
              this.markers = [];
              this.mill = {
                   status: false,
                   x: 0,
                   y: 0
              };
              this.preplacements = 0;
         }
         tickBase() {
              this.hotkeys();
              this.preplace();
              this.autoplace();
         }
         hotkeys() {
              if (document.activeElement.id.toLowerCase() == "chatbox") {
                   return;
              }
              let e = chicken.getAttackDir(false, true);
              if (keys[70] && player.items[4]) {
                   this.regCheckPlace(player.items[4], e);
              }
              if (keys[72] && player.items[5]) {
                   this.regCheckPlace(player.items[5], e);
              }
              if (keys[86]) {
                   this.regCheckPlace(player.items[2], e);
              }
              if (keys[78]) {
                   this.regCheckPlace(player.items[3], e);
              }
         }
         mills() {
              if (UTILS.getDistance(this.mill, player) > 99) {
                   if (this.mill.status && typeof lastMoveDir == "number") {
                        if (player.itemCounts[3] < (isSandbox ? 299 : 99) || !player.itemCounts[3]) {
                             placer.regCheckPlace(player.items[3], lastMoveDir + Math.PI);
                             placer.regCheckPlace(player.items[3], lastMoveDir - 4.345869833589793);
                             placer.regCheckPlace(player.items[3], lastMoveDir + 4.345869833589793);
                        } else {
                             this.mill.status = false;
                        }
                   }
                   this.mill.x = player.x2 || 0;
                   this.mill.y = player.y2 || 0;
              }
         }
         addMarker({
              x: e,
              y: t,
              name: i,
              id: s,
              angle: n,
              scale: a,
              differentVisual: l
         }) {
              if (n == undefined || n == null || isNaN(n)) {
                   n = 0;
              }
              this.markers.push({
                   x: e,
                   y: t,
                   id: s,
                   angle: n || 0,
                   name: i,
                   differentVisual: l,
                   owner: {
                        sid: player.sid
                   },
                   scale: a,
                   ticks: game.tick
              });
              game.tickOut(() => {
                   this.markers.shift();
              }, 2);
         }
         place(e, t) {
              let i = items.list[e];
              if (i && (player.itemCounts[i.group.id] + 1 < (isSandbox ? i.group.sandboxLimit + 1 || 100 : i.group.limit) || !player.itemCounts[i.group.id]) && (chicken.selectToBuild(e), chicken.sendHit(1, t), chicken.selectToBuild(chicken.preferedWeaponIndex, true), e > 2)) {
                   let s = 35 + i.scale + (i.placeOffset || 0);
                   let n = {
                        x: player.x2 + Math.cos(t) * s,
                        y: player.y2 + Math.sin(t) * s
                   };
                   this.addMarker({
                        x: n.x,
                        y: n.y,
                        scale: i.scale,
                        name: i.name,
                        angle: t,
                        id: i.id
                   });
              }
         }
         diffPlace(e, t, i) {
              let s = items.list[e];
              let n = s.scale;
              let a = 35 + n + (s.placeOffset || 0);
              let l = player.x2 + Math.cos(t) * a;
              let o = player.y2 + Math.sin(t) * a;
              if (this.checkMarkers(l, o, n, i) && s && (player.itemCounts[s.group.id] + 1 < (isSandbox ? s.group.sandboxLimit + 1 || 100 : s.group.limit) || !player.itemCounts[s.group.id])) {
                   chicken.selectToBuild(e);
                   chicken.sendHit(1, t);
                   chicken.selectToBuild(chicken.preferedWeaponIndex, true);
                   let r = chicken.getAttackDir(true);
                   if (typeof r == "number" && UTILS.getAngleDist(r, t) >= Math.PI / 8) {
                        chicken.sendAim(r);
                   }
                   if (e > 2) {
                        this.addMarker({
                             x: l,
                             y: o,
                             scale: n,
                             name: s.name,
                             angle: t,
                             id: e,
                             differentVisual: true
                        });
                   }
              }
         }
         regCheckPlace(e, t) {
              let i = items.list[e];
              if (i) {
                   let s = 35 + i.scale + (i.placeOffset || 0);
                   let n = player.x2 + Math.cos(t) * s;
                   let a = player.y2 + Math.sin(t) * s;
                   if (objectManager.checkItemLocation(n, a, i.scale, 0.6, e, false)) {
                        this.place(e, t);
                   }
              }
         }
         checkPlace(e, t = 0, i, s) {
              let n = items.list[e];
              if (n) {
                   let a = n.scale;
                   let l = 35 + a + (n.placeOffset || 0);
                   let o = player.x2 + Math.cos(t) * l;
                   let r = player.y2 + Math.sin(t) * l;
                   if (this.checkMarkers(o, r, a, game.tick)) {
                        if (s) {
                             let c = pingTracker.data[s.id]?.ping || window.pingTime;
                             this.preplacements++;
                             setTimeout(() => {
                                  this.diffPlace(e, t, game.tick);
                             }, config.serverUpdateSpeed + c - window.pingTime);
                        } else {
                             this.place(e, t);
                        }
                        if (typeof i == "function") {
                             i();
                        }
                   }
              }
         }
         checkMarkers(e, t, i, s) {
              for (let n = 0; n < this.markers.length; n++) {
                   let a = this.markers[n];
                   if (a && UTILS.getDistance(a, {
                        x: e,
                        y: t
                   }) <= a.scale + i && (!a.differentVisual || s == a.ticks)) {
                        return false;
                   }
              }
              return true;
         }
         calculatePosition(e, t, i) {
              return {
                   x: (e.x2 || e.x) + Math.cos(i) * t,
                   y: (e.y2 || e.y) + Math.sin(i) * t
              };
         }
         validateAngle(e, t) {
              let i = player.items[2];
              let s = items.list[15];
              let n = items.list[i];
              let a = 35 + n.scale + (n.placeOffset || 0);
              let l = 35 + s.scale + (s.placeOffset || 0);
              let o = game.enemies.nearest;
              let r = {
                   angle: e,
                   trap: false,
                   pos: {},
                   prioritization: 0
              };
              let c = this.calculatePosition(player, l, e);
              if (objectManager.checkItemLocation(c.x, c.y, s.scale, 0.6, 15, false)) {
                   r.trap = true;
                   r.pos.trap = {
                        ...c
                   };
                   r.pos.trap.scale = s.scale;
              }
              c = this.calculatePosition(player, a, e);
              if (objectManager.checkItemLocation(c.x, c.y, n.scale, 0.6, i, false)) {
                   r.spike = true;
                   r.prioritization++;
                   r.pos.spike = {
                        ...c
                   };
                   r.pos.spike.dmg = n.dmg;
                   r.pos.spike.scale = n.scale;
              }
              if (r.spike || r.trap) {
                   let d = r.pos.spike || r.pos.trap;
                   let p = this.brokenObj.sort((e, t) => UTILS.getDistance(e, d) - UTILS.getDistance(t, d))[0];
                   r.brokenDist = Infinity;
                   r.enemyDist = UTILS.getDistance(o, d);
                   if (p) {
                        r.brokenDist = UTILS.getDistance(p, d);
                   }
                   if (r.brokenDist <= r.enemyDist) {
                        r.prioritization++;
                   }
                   t.push(r);
              }
         }
         findAngles(e = 0) {
              let t = Math.PI / parseInt(scriptMenu.toggles.placementDepth);
              let i = player.items[2];
              let s = items.list[15];
              let n = items.list[i];
              let a = [0, Math.PI];
              let l = [];
              for (let o = 0; o <= Math.PI; o += t) {
                   for (let r = 0; r < a.length; r++) {
                        let c = o + a[r] + e;
                        this.validateAngle(c, l);
                   }
              }
              if (scriptMenu.toggles.dualAngleFinder) {
                   let d = Math.max(n.scale, s.scale);
                   let p = game.closeObjects.filter(e => e.active && UTILS.getDistance(e, player) <= 35 + d + e.scale);
                   for (let h = 0; h < p.length; h++) {
                        let g = p[h];
                        let $ = p[(h + 1) % p.length];
                        if (g && $) {
                             let m = UTILS.getDirection(g, player);
                             let u = UTILS.getDirection($, player);
                             if (m < 0) {
                                  m += Math.PI * 2;
                             }
                             if (u < 0) {
                                  u += Math.PI * 2;
                             }
                             let f = (m + u) / 2;
                             if (Math.abs(m - u) > Math.PI && (f += Math.PI) > Math.PI * 2) {
                                  f -= Math.PI * 2;
                             }
                             this.validateAngle(f, l);
                        }
                   }
              }
              return l.sort((e, t) => e.enemyDist - t.enemyDist).sort((e, t) => e.brokenDist - t.brokenDist).sort((e, t) => t.prioritization - e.prioritization);
         }
         replace(e) {
              let t = UTILS.getDirection(e, player);
              let i = game.enemies.nearest;
              let s = i ? UTILS.getDistance(i, player) : Infinity;
              if (s <= 400 && i && player.items[4] == 15 && scriptMenu.toggles.autoreplace) {
                   this.brokenObj.unshift({
                        x: e.x,
                        y: e.y,
                        scale: e.scale
                   });
                   game.tickOut(() => {
                        this.brokenObj.pop();
                   }, 8);
                   let n = i.trapData;
                   let a = this.findAngles(t);
                   let l = false;
                   let o = autoHit.addSpiekTickHit();
                   for (let r = 0; r < a.length; r++) {
                        let c = a[r];
                        if (n && e.sid == n.sid && c.trap && UTILS.getDistance(c.pos.trap, i) <= 50) {
                             if (c.spike) {
                                  if (autoHit.reverseSpiketick) {
                                       this.checkPlace(player.items[2], c.angle, () => {
                                            l = true;
                                       });
                                  } else {
                                       let d = game.closeObjects.find(t => t.active && t.dmg && game.isFriendly(t.owner.sid) && UTILS.getDistance(t, e) <= t.scale + 70);
                                       let p = player.trapData;
                                       if (d && p && chicken.replaceable(p)) {
                                            this.checkPlace(player.items[2], c.angle, () => {
                                                 l = true;
                                            });
                                       } else {
                                            let h = kbSimulator.spikeKB({
                                                 x: i.x2,
                                                 y: i.y2,
                                                 scale: 35,
                                                 tmpObj: i
                                            }, c.pos.spike, true);
                                            if (h.data.find(e => e.id == "spiek")) {
                                                 if (h.data.filter(e => e.id == "spiek").reduce((e, t) => e + t.dmg, 0) + c.pos.spike.dmg + o >= 100) {
                                                      this.checkPlace(player.items[2], c.angle, () => {
                                                           l = true;
                                                           h.callback();
                                                      });
                                                 } else {
                                                      this.checkPlace(player.items[4], c.angle);
                                                 }
                                            } else if (!d && h.data.find(e => e.id == "trap")) {
                                                 this.checkPlace(player.items[2], c.angle, () => {
                                                      l = true;
                                                      h.callback();
                                                 });
                                            } else if (o + c.pos.spike.dmg >= 100) {
                                                 let g = kbSimulator.meleeKB(i, game.enemies.angle, player.weapons[0]);
                                                 if (game.closeObjects.find(e => e.active && (e.dmg || e.trap) && game.isFriendly(e.owner.sid) && UTILS.getDistance(g, e) <= 35 + e.scale)) {
                                                      this.checkPlace(player.items[2], c.angle, () => {
                                                           l = true;
                                                      });
                                                 } else {
                                                      this.checkPlace(player.items[4], c.angle);
                                                 }
                                            } else {
                                                 this.checkPlace(player.items[4], c.angle);
                                            }
                                       }
                                  }
                             } else {
                                  this.checkPlace(player.items[4], c.angle);
                             }
                        } else if (n && c.spike) {
                             if (UTILS.getDistance(c.pos.spike, n) <= 130) {
                                  this.checkPlace(player.items[2], c.angle);
                             } else if (c.trap) {
                                  this.checkPlace(player.items[4], c.angle);
                             }
                        } else if (s <= 200) {
                             if (c.spike) {
                                  if (UTILS.getAngleDist(game.enemies.angle, c.angle) <= 0.75) {
                                       this.checkPlace(player.items[2], c.angle);
                                  } else if (UTILS.getDistance(c.pos.spike, i) <= 100) {
                                       let $ = kbSimulator.spikeKB({
                                            x: i.x2,
                                            y: i.y2,
                                            scale: 35,
                                            tmpObj: i
                                       }, c.pos.spike, true);
                                       if ($.data.find(e => e.id == "spiek" || e.id == "trap")) {
                                            this.checkPlace(player.items[2], c.angle, () => {
                                                 $.callback();
                                            });
                                       }
                                  } else if (c.trap) {
                                       this.checkPlace(player.items[4], c.angle);
                                  }
                             } else if (c.trap) {
                                  this.checkPlace(player.items[4], c.angle);
                             }
                        } else if (c.trap) {
                             this.checkPlace(player.items[4], c.angle);
                        }
                   }
                   if (l) {
                        autoHit.spiekTick();
                   }
              }
         }
         autoplace() {
              if (!scriptMenu.toggles.autoplace || !game.enemies.nearest || game.tick % scriptMenu.toggles.placementThrottle == 1 || placer.mill.status) {
                   return;
              }
              let e = game.enemies.nearest;
              let t = UTILS.getDistance(e, player);
              if (t > scriptMenu.toggles.autoPlacerRange) {
                   return;
              }
              let i = e.trapData;
              let s = this.findAngles(game.enemies.angle);
              let n = game.closeObjects.filter(e => e.active && e.trap && game.isFriendly(e.owner.sid) && UTILS.getDistance(e, player) <= 300);
              for (let a = 0; a < s.length; a++) {
                   let l = s[a];
                   if (i && l.spike) {
                        if (UTILS.getDistance(l.pos.spike, i) <= 130) {
                             this.checkPlace(player.items[2], l.angle);
                        } else if (l.trap) {
                             this.checkPlace(player.items[4], l.angle);
                        }
                   } else if (t <= 200) {
                        if (l.spike) {
                             let o = l.pos.spike;
                             if (UTILS.getDistance(o, e) <= 100) {
                                  let r = kbSimulator.spikeKB({
                                       x: e.x2,
                                       y: e.y2,
                                       scale: 35,
                                       tmpObj: e
                                  }, l.pos.spike, true);
                                  let c = () => {
                                       this.checkPlace(player.items[2], l.angle, () => {
                                            r.callback();
                                       });
                                  };
                                  if (r.data.find(e => e.id == "trap")) {
                                       c();
                                  } else if (r.data.find(e => e.id == "spiek") && r.data.filter(e => e.id == "spiek").reduce((e, t) => e + t.dmg, 0) + l.pos.spike.dmg >= 100) {
                                       c();
                                  } else if (l.trap) {
                                       this.checkPlace(player.items[4], l.angle);
                                  }
                             } else if (UTILS.getAngleDist(game.enemies.angle, l.angle) <= 0.75 && n.find(e => UTILS.getDistance(o, e) <= 135)) {
                                  this.checkPlace(player.items[2], l.angle);
                             } else if (l.trap) {
                                  this.checkPlace(player.items[4], l.angle);
                             }
                        } else if (l.trap) {
                             this.checkPlace(player.items[4], l.angle);
                        }
                   } else if (l.trap) {
                        this.checkPlace(player.items[4], l.angle);
                   }
              }
         }
         validateBuilding(e) {
              if (UTILS.getDistance(player, e) > 100 + e.scale * 2) {
                   return false;
              }
              if (!e.currentHealth) {
                   return;
              }
              let t = 0;
              for (let i = 0; i < players.length; i++) {
                   let s = players[i];
                   if (s.visible && UTILS.getDistance(s, e) <= 100 + e.scale * 2) {
                        let n = s.secondaryWeapon == 10 ? 10 : s.primaryWeapon;
                        let a = config.weaponVariants[n == 10 ? s.secondaryVariant : s.primaryVariant].val;
                        let l = items.weapons[n];
                        let o = l.dmg * (l.sDmg || 1) * (a || 1);
                        if (playerSID == s.sid) {
                             if (s.skins[40]) {
                                  o *= 3.3;
                             }
                        } else {
                             o *= 3.3;
                        }
                        if (!!(UTILS.getDistance(s, e) - e.scale < l.range) && healer.reloadPercent(s, n) == 1 && (!e.trap || !e.hideFromEnemy)) {
                             t += o;
                        }
                   }
              }
              return e.currentHealth <= t;
         }
         validateClashWithEnemy(e) {
              let t = [];
              for (let i = 0; i < e.length; i++) {
                   let s = e[i];
                   if (UTILS.getDistance(player, s) <= 100 + s.scale * 2) {
                        for (let n = 0; n < game.enemies.all.length; n++) {
                             let a = game.enemies.all[n];
                             if (UTILS.getDistance(a, s) <= 100 + s.scale * 2) {
                                  t.push({
                                       x: s.x,
                                       y: s.y,
                                       enemy: a,
                                       scale: s.scale,
                                       sid: s.sid
                                  });
                                  break;
                             }
                        }
                   }
              }
              return t;
         }
         validateIfOverLap(e, t, i, s) {
              for (let n = 0; n < s.length; n++) {
                   let a = s[n];
                   if (a.active) {
                        let l = a.blocker ? a.blocker : a.getScale(0.6, a.isItem);
                        if (UTILS.getDistance(e, a) < t + l && !i.find(e => e.sid == a.sid)) {
                             return true;
                        }
                   }
              }
              return false;
         }
         validateOpenAngle(e, t, i, s) {
              let n = player.items[2];
              let a = items.list[15];
              let l = items.list[n];
              let o = 35 + l.scale + (l.placeOffset || 0);
              let r = 35 + a.scale + (a.placeOffset || 0);
              let c = game.enemies.nearest;
              let d = {
                   angle: e,
                   trap: false,
                   pos: {},
                   prioritization: 0
              };
              let p = this.calculatePosition(player, r, e);
              let h = objectManager.checkItemLocation(p.x, p.y, a.scale, 0.6, 15, false, undefined, true);
              let g = i.find(e => e.sid == h.sid);
              if (g && !this.validateIfOverLap(p, a.scale, i, s)) {
                   d.trap = true;
                   d.pos.trap = {
                        ...p
                   };
                   d.pos.trap.scale = a.scale;
                   d.preplacedTo = UTILS.getDirection(g, player);
                   d.enemy = g.enemy;
              }
              p = this.calculatePosition(player, o, e);
              h = objectManager.checkItemLocation(p.x, p.y, l.scale, 0.6, n, false, undefined, true);
              if ((g = i.find(e => e.sid == h.sid)) && !this.validateIfOverLap(p, a.scale, i, s)) {
                   d.spike = true;
                   d.prioritization++;
                   d.pos.spike = {
                        ...p
                   };
                   d.pos.spike.dmg = l.dmg;
                   d.preplacedTo = UTILS.getDirection(g, player);
                   d.pos.spike.scale = l.scale;
                   d.enemy = g.enemy;
              }
              if (d.spike || d.trap) {
                   let $ = d.pos.spike || d.pos.trap;
                   let m = this.brokenObj.sort((e, t) => UTILS.getDistance(e, $) - UTILS.getDistance(t, $))[0];
                   d.brokenDist = Infinity;
                   d.enemyDist = UTILS.getDistance(c, $);
                   if (m) {
                        d.brokenDist = UTILS.getDistance(m, $);
                   }
                   if (d.brokenDist <= d.enemyDist) {
                        d.prioritization++;
                   }
                   t.push(d);
              }
         }
         findOpenAngles(e) {
              let t = Math.PI / parseInt(scriptMenu.toggles.placementDepth);
              let i = [0, Math.PI];
              let s = player.items[2];
              let n = items.list[s];
              let a = items.list[15];
              let l = [];
              let o = Math.max(n.scale, a.scale);
              let r = game.closeObjects.filter(e => e.active && UTILS.getDistance(e, player) <= 35 + o + e.scale);
              for (let c = 0; c <= Math.PI; c += t) {
                   for (let d = 0; d < i.length; d++) {
                        let p = c + i[d];
                        this.validateOpenAngle(p, l, e, r);
                   }
              }
              if (scriptMenu.toggles.dualAngleFinder) {
                   for (let h = 0; h < r.length; h++) {
                        let g = r[h];
                        let $ = r[(h + 1) % r.length];
                        if (g && $) {
                             let m = UTILS.getDirection(g, player);
                             let u = UTILS.getDirection($, player);
                             if (m < 0) {
                                  m += Math.PI * 2;
                             }
                             if (u < 0) {
                                  u += Math.PI * 2;
                             }
                             let f = (m + u) / 2;
                             if (Math.abs(m - u) > Math.PI && (f += Math.PI) > Math.PI * 2) {
                                  f -= Math.PI * 2;
                             }
                             this.validateOpenAngle(f, l, e, r);
                        }
                   }
              }
              return l.sort((e, t) => e.enemyDist - t.enemyDist).sort((e, t) => e.brokenDist - t.brokenDist).sort((e, t) => t.prioritization - e.prioritization);
         }
         preplace() {
              if (!scriptMenu.toggles.autoplace || !scriptMenu.toggles.preplace || !game.enemies.nearest || placer.mill.status) {
                   return;
              }
              let e = game.closeObjects.filter(e => e.active && this.validateBuilding(e));
              if (!e.length) {
                   return;
              }
              e = this.validateClashWithEnemy(e);
              let t = this.findOpenAngles(e);
              let i = game.closeObjects.filter(e => e.active && e.trap && game.isFriendly(e.owner.sid) && UTILS.getDistance(e, player) <= 300);
              for (let s = 0; s < t.length; s++) {
                   let n = t[s];
                   let a = n.enemy;
                   let l = a.trap;
                   let o = UTILS.getDistance(a, player);
                   if (l && n.spike) {
                        if (UTILS.getDistance(n.pos.spike, l) <= 130) {
                             this.checkPlace(player.items[2], n.angle, undefined, a);
                             if (this.preplacements > 2) {
                                  break;
                             }
                        } else if (n.trap && (this.checkPlace(player.items[4], n.angle, undefined, a), this.preplacements > 2)) {
                             break;
                        }
                   } else if (o <= 200) {
                        if (n.spike) {
                             let r = n.pos.spike;
                             if (UTILS.getDistance(r, a) <= 100) {
                                  let c = kbSimulator.spikeKB({
                                       x: a.x2,
                                       y: a.y2,
                                       scale: 35,
                                       tmpObj: a
                                  }, n.pos.spike, true);
                                  let d = () => {
                                       this.checkPlace(player.items[2], n.angle, undefined, a);
                                  };
                                  if (c.data.find(e => e.id == "trap")) {
                                       d();
                                       if (this.preplacements > 2) {
                                            break;
                                       }
                                  } else if (c.data.find(e => e.id == "spiek")) {
                                       if (c.data.filter(e => e.id == "spiek").reduce((e, t) => e + t.dmg, 0) + n.pos.spike.dmg >= 100) {
                                            d();
                                            if (this.preplacements > 2) {
                                                 break;
                                            }
                                       } else if (n.trap && (this.checkPlace(player.items[4], n.angle, undefined, a), this.preplacements > 2)) {
                                            break;
                                       }
                                  } else if (n.trap && (this.checkPlace(player.items[4], n.angle, undefined, a), this.preplacements > 2)) {
                                       break;
                                  }
                             } else if (UTILS.getAngleDist(game.enemies.angle, n.angle) <= 0.75 && i.find(e => UTILS.getDistance(r, e) <= 135)) {
                                  this.checkPlace(player.items[2], n.angle, undefined, a);
                                  if (this.preplacements > 2) {
                                       break;
                                  }
                             } else if (n.trap && (this.checkPlace(player.items[4], n.angle, undefined, a), this.preplacements > 2)) {
                                  break;
                             }
                        } else if (n.trap && (this.checkPlace(player.items[4], n.angle, undefined, a), this.preplacements > 2)) {
                             break;
                        }
                   } else if (n.trap && (this.checkPlace(player.items[4], n.angle, undefined, a), this.preplacements > 2)) {
                        break;
                   }
              }
              this.preplacements = 0;
         }
    }();
    var hatSystem = new class {
         constructor() {
              this.itemQueue = [];
              this.needTick = 0;
              this.sentPacket = false;
              this.forceAddIndexs = {
                   onlySoldier: 0,
                   onlyEMP: 1,
                   trapSoldier: 2,
                   otSoldier: 3
              };
              this.forcedAddOns = [0, 0, 0, 0];
              this.velSoldier = false;
              this.spikeSoldier = false;
         }
         resetAllForcedAddOns() {
              for (let e = 0; e < this.forcedAddOns.length; e++) {
                   this.forcedAddOns[e] = 0;
              }
         }
         addForcedAddOnValue(e, t, i) {
              if (!(e >= 4)) {
                   this.forcedAddOns[e] += t;
                   this.storeEquip(e == 1 ? 22 : 6);
                   if (typeof i == "function") {
                        if (t == 1) {
                             game.nextTick(() => {
                                  i();
                             });
                        } else {
                             game.tickOut(() => {
                                  i();
                             }, t);
                        }
                   }
              }
         }
         resetForcedAddOn(e) {
              if (!(e >= 4)) {
                   this.forcedAddOns[e] = 0;
              }
         }
         storeBuy(e, t) {
              io.send("c", 1, e, t);
         }
         biomeEquip(e) {
              if (player.y2 < 2400) {
                   this.storeEquip(15);
              } else if (player.skins[12]) {
                   this.storeEquip(12);
              } else {
                   this.storeEquip(6);
              }
              if (!e) {
                   this.storeEquip(11, true);
              }
         }
         canBullTick() {
              return !game.closeObjects.find(e => e.active && e.dmg && !game.isFriendly(e.owner.sid) && UTILS.getDistance(e, player) <= 40 + e.scale) && !effectsManager.effects.find(e => e.name == "shame!") && !(player.health - 5 <= 0) && !!player.skins[7] && player.shameCount > 0 && ((game.tick - player.bullTick) % 9 == 0 || this.needTick > 1) && (this.needTick++, true);
         }
         doBasicFunction(e) {
              let t = game.enemies.nearest;
              if (hatSystem.canBullTick()) {
                   this.storeEquip(7, 0, true);
              } else if (player.y2 > 6850 && player.y2 < 7550) {
                   this.storeEquip(31, 0, true);
                   if (!e) {
                        hatSystem.storeEquip(11, 1, true);
                   }
              } else if (player.trapData) {
                   this.storeEquip(6, 0, true);
                   if (!e) {
                        this.storeEquip(11, 1, true);
                   }
              } else if (t && UTILS.getDistance(t, player) <= 300) {
                   this.storeEquip(6, 0, true);
                   if (!e) {
                        if (chicken.pushing && ![4, 5].includes(player.weapons[0]) && UTILS.getDistance(chicken.pushing.victim, player) >= 130) {
                             this.storeEquip(11, 1, true);
                        } else if (chicken.autoTriggerOneShot && UTILS.getDistance(t, player) <= 250) {
                             this.storeEquip(chicken.checkHave(19, true), 1, true);
                        } else if (player.weapons[0] == 7 || player.weapons[0] == 8 || UTILS.getDistance(t, player) >= 110 && !game.closeObjects.find(e => e.active && e.dmg && UTILS.getDistance(e, player) <= 400)) {
                             this.storeEquip(11, 1, true);
                        } else {
                             this.storeEquip(chicken.checkHave(19, true), 1, true);
                        }
                   }
              } else if (game.turretsInSight > 0 && player.skins[22]) {
                   this.storeEquip(22, 0, true);
                   if (!e) {
                        this.storeEquip(11, 1, true);
                   }
              } else if (chicken.movementDirection == undefined || chicken.movementDirection == null) {
                   this.storeEquip(6, 0, true);
                   if (!e) {
                        this.storeEquip(11, 1, true);
                   }
              } else {
                   this.biomeEquip(e);
              }
         }
         checkOnlySoldier() {
              return [0, 2, 3].some(e => this.forcedAddOns[e] > 0) || this.velSoldier || this.spikeSoldier;
         }
         storeEquip(e, t, i) {
              let s = () => !!i && (!!this.sentPacket || void (this.sentPacket = true, setTimeout(() => {
                   this.sentPacket = false;
              }, 5)));
              if (t) {
                   if (e > 0 && !player.tails[e]) {
                        return;
                   }
                   if (player.tailIndex != e) {
                        if (s()) {
                             return;
                        }
                        io.send("c", 0, e, 1);
                   }
              } else {
                   if (e > 0 && !player.skins[e]) {
                        return;
                   }
                   if (this.checkOnlySoldier()) {
                        if (player.skinIndex != 6) {
                             io.send("c", 0, 6, 0);
                        }
                   } else if (this.onlyEMP) {
                        if (player.skinIndex != 22) {
                             io.send("c", 0, 22, 0);
                        }
                   } else if (player.skinIndex != e) {
                        if (s()) {
                             return false;
                        }
                        io.send("c", 0, e, 0);
                   }
              }
         }
         tickBase() {
              for (let e = 0; e < this.forcedAddOns.length; e++) {
                   if (this.forcedAddOns[e] > 0) {
                        this.forcedAddOns[e]--;
                        if (this.forcedAddOns[e] <= 0) {
                             this.forcedAddOns[e] = 0;
                        }
                   }
              }
              this.spikeSoldier = false;
              if (player.trapData) {
                   let t = 0;
                   for (let i = 0; i < game.enemies.near.length; i++) {
                        let s = game.enemies.near[i];
                        let n = s.primaryWeapon;
                        let a = healer.reloadPercent(s, n);
                        let l = healer.calculateWeaponDamage(n, s.primaryVariant) * 1.5;
                        if (a == 1 && (t += l) >= 100) {
                             break;
                        }
                   }
                   if (game.closeObjects.find(e => e.active && e.dmg && !game.isFriendly(e.owner.sid) && e.dmg + t >= 100 && UTILS.getDistance(player.vel, e) <= 35 + e.scale)) {
                        textManager.showText(player, 250, 40, 0, "#000", "block");
                        this.spikeSoldier = true;
                        return;
                   }
              } else {
                   let o = 0;
                   let r = [];
                   for (let c = 0; c < game.closeObjects.length; c++) {
                        let d = game.closeObjects[c];
                        if (d.active && d.dmg && !game.isFriendly(d.owner.sid)) {
                             r.push(d);
                             if (UTILS.getDistance(d, player.vel) <= 35 + d.scale) {
                                  o += d.dmg;
                             }
                        }
                   }
                   for (let p = 0; p < game.enemies.near.length; p++) {
                        let h = game.enemies.near[p];
                        let g = h.primaryWeapon;
                        let $ = healer.reloadPercent(h, g);
                        let m = healer.calculateWeaponDamage(g, h.primaryVariant) * 1.5;
                        if ($ == 1) {
                             if (o > 0 && o + m >= 100) {
                                  this.spikeSoldier = true;
                                  break;
                             }
                             let u = UTILS.getDirection(player, h);
                             let f = kbSimulator.meleeKB(player, u, g);
                             if (r.filter(e => UTILS.getDistance(f, e) <= 35 + e.scale).reduce((e, t) => e + t.dmg, 0) + m >= 100) {
                                  this.spikeSoldier = true;
                                  break;
                             }
                        }
                   }
              }
         }
    }();
    var healer = new class {
         constructor() {
              this.projectiles = [];
              this.damages = [];
              this.healingPotential = 0;
              this.healingDelay = 0;
              this.cachedDamages = {};
              this.spikeDamages = [45, 35, 20, 30];
              this.projectileDamage = 0;
              this.bowHealer = null;
         }
         doTurretTargetLineMath(e) {
              let t = ais.filter(t => t.visible && t.hostile && UTILS.getDistance(t, e) <= 600).sort((t, i) => UTILS.getDistance(t, e) - UTILS.getDistance(i, e))[0];
              let i = players.filter(t => t.visible && t.skinIndex != 26 && e.sid != t.sid && t.sid != playerSID && (!t.team || t.team != e.team) && UTILS.getDistance(t, e) <= 600).sort((t, i) => UTILS.getDistance(t, e) - UTILS.getDistance(i, e))[0];
              let s = t;
              if (t) {
                   if (i && UTILS.getDistance(i, e) <= UTILS.getDistance(t, e)) {
                        s = i;
                   }
              } else {
                   s = i;
              }
              if (s) {
                   let n = UTILS.getDirection(s, e);
                   if (UTILS.getDistance(player, e) <= UTILS.getDistance(s, e)) {
                        let a = UTILS.getDistance(player, e);
                        let l = {
                             x: e.x2 + Math.cos(n) * a,
                             y: e.y2 + Math.sin(n) * a
                        };
                        if (UTILS.getDistance(player, l) <= 60) {
                             return true;
                        }
                   }
              }
              return false;
         }
         heal(e) {
              let t = player.items[0];
              let i = Math.abs(e) / (t == 0 ? 20 : t == 1 ? 40 : 30);
              for (let s = 0; s < i; s++) {
                   chicken.selectToBuild(t);
                   chicken.sendHit(1, chicken.getAttackDir());
                   chicken.selectToBuild(chicken.preferedWeaponIndex, true);
              }
         }
         calculateWeaponDamage(e, t) {
              if (items.weapons[e]) {
                   if (items.weapons[e].projectile) {
                        return items.weapons[e].dmg;
                   } else {
                        return items.weapons[e].dmg * config.weaponVariants[t].val;
                   }
              } else {
                   return 0;
              }
         }
         reloadPercent(e, t) {
              if (t == 53) {
                   return 1 - e.reloads[53] / 2500;
              }
              if (!items.weapons[t]) {
                   return 1;
              }
              let i = items.weapons[t].speed;
              return 1 - e.reloads[t] / i;
         }
         hasHit(e, t) {
              if (t == 53) {
                   return game.tick - e.turretHit <= 2;
              }
              if (t < 9) {
                   if (game.tick - e.primaryHit <= 2) {
                        return true;
                   }
              } else if (game.tick - e.secondaryHit <= 2) {
                   return true;
              }
              return false;
         }
         doPreciseValues(e, t) {
              if (e - t < 0.01 && e - t > 0) {
                   return t;
              } else {
                   return e;
              }
         }
         soldierRound(e, t) {
              if (player.skinIndex == 6) {
                   return this.doPreciseValues(e * 0.75, t);
              } else {
                   return this.doPreciseValues(e);
              }
         }
         autoHealing() {
              if (this.healingDelay > 0) {
                   this.healingDelay--;
                   if (this.healingDelay <= 0) {
                        this.healingDelay = 0;
                        this.heal(100 - player.health);
                   }
              }
              this.damages = [];
         }
         findCachedDamage(e, t, i) {
              let s = this.cachedDamages[e + " " + t];
              if (!s) {
                   s = [];
                   let n = [1, 1.5, 1.2];
                   let a = [1, 0.2];
                   for (let l = 0; l < n.length; l++) {
                        for (let o = 0; o < a.length; o++) {
                             s.push(i * n[l] * a[o]);
                        }
                   }
                   this.cachedDamages[e + " " + t] = [...s];
              }
              return s;
         }
         fitsPalette(e, t) {
              let i = t.primaryWeapon;
              let s = t.primaryVariant;
              let n = this.calculateWeaponDamage(i, s);
              let a = this.findCachedDamage(i, s, n);
              for (let l = 0; l < a.length; l++) {
                   if (this.soldierRound(a[l], e) == e) {
                        return "primary";
                   }
              }
              let o = t.secondaryWeapon;
              if (items.weapons[t.secondaryWeapon].projectile) {
                   let r = this.calculateWeaponDamage(o, 0);
                   if (this.soldierRound(r, e) == e) {
                        return "secondary";
                   }
              }
              return this.soldierRound(25, e) == e && "turret";
         }
         checkForSpikePlacements() {
              let e = game.enemies.near;
              let t = e.length;
              let i = [];
              let s = Math.PI / 16;
              let n = Math.PI * 2;
              for (let a = 0; a < t; a++) {
                   let l = false;
                   let o = e[a];
                   let r = o.spikeType?.id || 9;
                   let c = items.list[r];
                   let d = 35 + c.scale + (c.placeOffset || 0);
                   let p = 35 + c.scale;
                   for (let h = 0; h <= n; h += s) {
                        let g = placer.calculatePosition(o, d, h);
                        if (objectManager.checkItemLocation(g.x, g.y, c.scale, 0.6, r, false) && (UTILS.getDistance(g, player) <= p || UTILS.getDistance(player.vel, g) <= p)) {
                             i.push({
                                  enemy: o,
                                  dmg: c.dmg
                             });
                             break;
                        }
                   }
                   if (l) {
                        continue;
                   }
              }
              return i.sort((e, t) => t.dmg - e.dmg)[0] || false;
         }
         checkIfUserCanOnetick(e) {
              let t = e.primaryWeapon;
              let i = e.primaryVariant;
              return this.calculateWeaponDamage(t, i) * 1.5 + 25 + (i == 3 ? 5 : 0) >= 100;
         }
         addKBSpikeDamage(e, t) {
              if (player.trapData) {
                   return 0;
              }
              let i = UTILS.getDirection(player, t);
              let s = kbSimulator.meleeKB(player, i, e);
              return game.closeObjects.filter(e => e.active && e.dmg && !game.isFriendly(e.owner.sid) && UTILS.getDistance(s, e) <= 35 + e.scale).reduce((e, t) => e + t.dmg, 0) || 0;
         }
         interpretDamage() {
              let e = game.enemies.near;
              let t = e.length;
              let i = [];
              let s = [];
              for (let n = 0; n < this.damages.length; n++) {
                   let a = this.damages[n];
                   let l = false;
                   for (let o = 0; o < t; o++) {
                        let r = {
                             canEMP: true,
                             potDamage: 0,
                             done: false
                        };
                        let c = e[o];
                        r.sid = c.sid;
                        let d = this.fitsPalette(a, c);
                        if (!d) {
                             continue;
                        }
                        let p = c.primaryWeapon;
                        let h = c.secondaryWeapon;
                        let g = this.calculateWeaponDamage(p, c.primaryVariant);
                        let $ = this.calculateWeaponDamage(h, c.secondaryVariant);
                        let m = this.reloadPercent(c, p);
                        let u = this.reloadPercent(c, h);
                        let f = this.reloadPercent(c, 53);
                        if (d == "primary") {
                             if (this.hasHit(c, p)) {
                                  if (u > 0.7) {
                                       r.potDamage += $;
                                       let y = this.addKBSpikeDamage(h, c);
                                       if (y) {
                                            r.potDamage += y;
                                            r.spike = true;
                                       }
                                  }
                                  if (f > 0.7) {
                                       r.potDamage += 25;
                                  }
                                  if (this.doTurretTargetLineMath(c) || !items.weapons[h].projectile) {
                                       r.canEMP = false;
                                  }
                                  r.done = true;
                             }
                        } else if (d == "secondary") {
                             r.canEMP = false;
                             if (this.hasHit(c, h)) {
                                  if (m > 0.7) {
                                       r.potDamage += g * 1.5;
                                       let x = this.addKBSpikeDamage(p, c);
                                       if (x) {
                                            r.potDamage += x;
                                            r.spike = true;
                                       }
                                  }
                                  r.done = true;
                             }
                        } else {
                             r.canEMP = false;
                             if (this.hasHit(c, 53) && !items.weapons[h].projectile && this.hasHit(c, h)) {
                                  if (m > 0.7) {
                                       r.potDamage += g * 1.5;
                                       console.log("Uhhh Anti PH/KH Insta :)");
                                       let b = this.addKBSpikeDamage(p, c);
                                       if (b) {
                                            r.potDamage += b;
                                            r.spike = true;
                                       }
                                  }
                                  if (this.checkIfUserCanOnetick(c)) {
                                       hatSystem.resetForcedAddOn(hatSystem.forceAddIndexs.otSoldier);
                                  }
                                  r.done = true;
                             }
                        }
                        if (r.done) {
                             i.push(r);
                             l = true;
                             break;
                        }
                   }
                   if (l) {
                        continue;
                   }
                   let k = this.spikeDamages.find(e => e == a || e == a / 0.75);
                   if (k && player.trapData) {
                        let _ = 0;
                        let v = game.closeObjects.filter(e => e.active && e.dmg == k && !game.isFriendly(e.owner.sid) && !s.includes(e.sid)).map(e => ({
                             obj: e,
                             distance: UTILS.getDistance(e, player)
                        })).sort((e, t) => e.distance - t.distance).map(e => e.obj);
                        for (let w = 0; w < t; w++) {
                             let T = e[w];
                             let S = v.find(e => e.owner.sid == T.sid);
                             let I = i.find(e => e.sid == T.sid);
                             if (S) {
                                  let B = T.primaryWeapon;
                                  let D = this.reloadPercent(T, B);
                                  let E = this.calculateWeaponDamage(B, T.primaryVariant) * 1.5;
                                  if (D + 111 / items.weapons[B].speed >= 1) {
                                       if (I) {
                                            if (I.potDamage < E) {
                                                 s.push(S.sid);
                                                 I.potDamage = E;
                                                 break;
                                            }
                                       } else {
                                            s.push(S.sid);
                                            _ += E;
                                            break;
                                       }
                                  }
                             }
                        }
                        i.push({
                             canEMP: false,
                             spike: true,
                             potDamage: k + _
                        });
                   }
              }
              if (scriptMenu.toggles.sensitiveHealing) {
                   if (!player.trapData) {
                        let P = game.closeObjects.filter(e => e.active && e.dmg && UTILS.getDistance(player.vel, e) <= 35 + e.scale && !game.isFriendly(e.owner.sid) && !s.includes(e.sid)).reduce((e, t) => e + t.dmg, 0);
                        i.push({
                             canEMP: false,
                             spike: true,
                             potDamage: P
                        });
                   }
                   let A = this.checkForSpikePlacements();
                   if (A) {
                        let C = i.find(e => e.sid == A.enemy.sid);
                        let L = A.enemy;
                        let H = L.primaryWeapon;
                        let O = L.primaryVariant;
                        let W = this.calculateWeaponDamage(H, O) * 1.5;
                        let j = this.reloadPercent(L, H);
                        if (C) {
                             C.spike = true;
                             C.canEMP = false;
                             if (j == 1 && W + A.dmg > C.potDamage) {
                                  C.potDamage = W + A.dmg;
                             }
                        } else {
                             i.push({
                                  canEMP: false,
                                  spike: true,
                                  potDamage: A.dmg + (j == 1 ? W : 0)
                             });
                        }
                   }
              }
              return i;
         }
         validateAnti(e, t, i) {
              if (e == "emp") {
                   if (!player.skins[22] || player.skinIndex != 6 || player.health - (t - 25) <= 0 || hatSystem.checkOnlySoldier()) {
                        return false;
                   }
              } else {
                   if (player.health - t <= 0 || !player.skins[6]) {
                        return false;
                   }
                   if (player.trapData && i) {
                        let s = chicken.equipBestBreakWeapon("autobreak", true);
                        let n = this.reloadPercent(player, s);
                        if (s == 10 && n == 1) {
                             return false;
                        }
                   }
              }
              return true;
         }
         updateProjectileDamage() {
              this.projectileDamage = this.projectiles.reduce((e, t) => e + t, 0);
         }
         addProjectile(e, t, i) {
              if (!game.isFriendly(e.sid) && UTILS.getDistance(e, player) >= 300) {
                   this.projectiles.push(t);
                   if ((this.projectileDamage = this.projectiles.reduce((e, t) => e + t, 0)) >= 100 && this.healingPotential != "IntBow") {
                        let s = 0;
                        this.heal(40);
                        this.healingPotential = "IntBow";
                        this.bowHealer = setInterval(() => {
                             s++;
                             this.healingPotential = "IntBow";
                             if (s > 4) {
                                  clearInterval(this.bowHealer);
                             }
                             this.heal(40);
                        }, 75);
                   }
                   setTimeout(() => {
                        this.projectiles.shift();
                   }, i);
              }
         }
         start0ShameHeal(e, t) {
              if (e == 2) {
                   if (game.closeObjects.find(e => e.active && e.dmg && !game.isFriendly(e.owner.sid) && UTILS.getDistance(e, player) <= e.scale + 60)) {
                        game.nextTick(() => {
                             this.heal(t);
                        });
                   } else {
                        this.healingDelay = 2;
                   }
              } else {
                   game.nextTick(() => {
                        this.heal(t);
                   });
              }
         }
         healing() {
              if (this.damages.length && !botManager.playingAsData) {
                   let e = 100 - player.health;
                   if (game.enemies.near.length) {
                        let t = this.interpretDamage();
                        let i = this.healingPotential = t.reduce((e, t) => e + t.potDamage, 0) + (player.skinIndex == 7 ? 5 : 0);
                        let s = t.every(e => e.canEMP);
                        let n = t.some(e => e.spike);
                        if (player.health - i <= 0) {
                             if (scriptMenu.toggles.soldierEMP && s && this.validateAnti("emp", i)) {
                                  hatSystem.addForcedAddOnValue(hatSystem.forceAddIndexs.onlyEMP, 1, () => {
                                       this.heal(e);
                                  });
                             } else if (this.validateAnti("soldier", i * 0.75, n)) {
                                  hatSystem.addForcedAddOnValue(hatSystem.forceAddIndexs.onlySoldier, 1, () => {
                                       this.heal(e);
                                  });
                             } else if (player.shameCount < 7) {
                                  this.heal(e);
                             } else {
                                  this.start0ShameHeal(true, e);
                             }
                        } else {
                             this.start0ShameHeal(2, e);
                        }
                   } else {
                        this.start0ShameHeal(true, e);
                   }
              }
              this.autoHealing();
         }
         isSpikeTickAThreat() {
              let e = game.enemies.near;
              let t = game.enemies.near.length;
              for (let i = 0; i < t; i++) {
                   let s = e[i];
                   if (s) {
                        let n = s.primaryWeapon;
                        let a = s.primaryVariant;
                        let l = this.reloadPercent(s, n);
                        let o = this.calculateWeaponDamage(n, a) * 1.5;
                        let r = items.list[s.spikeData?.id || 9];
                        if (l == 1 && o + r.dmg >= 100 && UTILS.getDistance(s, player) <= 100 + r.scale * 2) {
                             return true;
                        }
                   }
              }
              return false;
         }
         doAntiSpiketick(e) {
              if (this.isSpikeTickAThreat() && player.trapData && player.trapData.sid == e.sid) {
                   textManager.showText(player, 250, 35, 0, "#f00", "antispiektick");
                   hatSystem.addForcedAddOnValue(hatSystem.forceAddIndexs.trapSoldier, 3);
              }
         }
    }();
    var pingTracker = new class {
         constructor() {
              this.data = {};
              this.tracker = class {
                   constructor() {
                        this.ping = 0;
                        this.allPings = [];
                        this.healingPromises = [];
                        this.updated = Date.now();
                   }
              };
         }
         add(e, t) {
              this.data[e] ||= new this.tracker();
              let i = this.data[e];
              if ((t >= 0 ? "heal" : "dmg") == "dmg") {
                   let s = i.healingPromises.length;
                   let n = Date.now();
                   new Promise(function (e) {
                        i.healingPromises.push(e);
                        setTimeout(() => {
                             e();
                        }, 500);
                   }).then(function (e) {
                        i.healingPromises.splice(s, 1);
                        if (!e) {
                             return;
                        }
                        let t = Date.now() - n;
                        if (t > 120) {
                             if (Date.now() - i.updated >= 30000) {
                                  i.allPings = [];
                             }
                             i.allPings.push(t - 120);
                             i.updated = Date.now();
                             if (i.allPings.length > 15) {
                                  i.allPings.shift();
                             }
                             i.ping = Math.round(i.allPings.reduce((e, t) => e + t, 0) / i.allPings.length);
                        }
                   });
              } else if (i.healingPromises.length) {
                   i.healingPromises.forEach(e => e(true));
                   i.healingPromises = [];
              }
         }
    }();
    function updateHealth(e, t) {
         let i = findPlayerBySID(e);
         if (i) {
              let s = t - i.health;
              pingTracker.add(i.id, s);
              if (s >= 0) {
                   if (i.hitTime) {
                        let n = Date.now() - i.hitTime;
                        i.hitTime = 0;
                        if (n <= 120) {
                             i.shameCount++;
                        } else {
                             i.shameCount = Math.max(0, i.shameCount - 2);
                        }
                   }
              } else {
                   i.hitTime = Date.now();
                   if (s == -5) {
                        i.bullTick = game.tick;
                        if (i == player) {
                             hatSystem.needTick = 0;
                        }
                   }
                   if (i == player) {
                        healer.damages.push(Math.abs(s));
                        if (t <= 0) {
                             scriptMenu.addLog("death", `[${healer.damages.join(",")}]`, i.name, e);
                             deathAnimationHandler.addPlayer(i);
                        }
                   } else if (!game.isFriendly(e)) {
                        i.damages.push(Math.abs(s));
                        if (t <= 0) {
                             botManager.killChat(i.name);
                             scriptMenu.addLog("death", "", i.name, e);
                             deathAnimationHandler.addPlayer(i);
                        }
                   }
              }
              i.health = t;
         }
    }
    var pathfinder = new class {
         constructor() {
              this.Node = class {
                   constructor(e, t) {
                        this.x = e;
                        this.y = t;
                        this.fScore = Infinity;
                        this.gScore = Infinity;
                        this.hScore = Infinity;
                   }
              };
         }
         search(e, t) {
              let i = 5;
              let s = [];
              let n = {
                   x: Math.floor(Math.min(e.x2, t.x) / i * i) - i * 80,
                   y: Math.floor(Math.min(e.y2, t.y) / i * i) - i * 80
              };
              let a = {
                   x: Math.floor(Math.max(e.x2, t.x) / i * i) + i * 80,
                   y: Math.floor(Math.max(e.y2, t.y) / i * i) + i * 80
              };
              let l = {
                   x: a.x - n.x,
                   y: a.y - n.y
              };
              let o = {
                   x: Math.ceil(l.x / i) / 2,
                   y: Math.ceil(l.y / i) / 2
              };
              for (let r = 0; r < o.x; r++) {
                   for (let c = 0; c < o.y; c++) {
                        let d = {
                             x: n.x + i * 2 * r,
                             y: n.y + i * 2 * c
                        };
                        if (!(d.x <= 35) && !(d.x >= 14365) && !(d.y <= 35) && !(d.y >= 14365) && !game.closeObjects.find(e => e.active && UTILS.getDistance(e, d) <= 5 + e.scale)) {
                             s.push(new this.Node(d.x, d.y));
                        }
                   }
              }
              return s;
         }
    }();
    var game = new class {
         constructor() {
              this.turretsInSight = 0;
              this.perfectOTDistance = 225;
              this.lastTickUpdate = Date.now();
              this.tick = 0;
              this.tickSpeed = config.serverUpdateSpeed;
              this.tickBase = [];
              this.doNextTick = [];
              this.closeObjects = [];
              this.enemies = {
                   all: [],
                   nearest: null,
                   near: [],
                   angle: 0
              };
              this.shopList = [{
                   id: 11,
                   index: true
              }, {
                   id: 15
              }, {
                   id: 6
              }, {
                   id: 7
              }, {
                   id: 40
              }, {
                   id: 53
              }, {
                   id: 31
              }, {
                   id: 12
              }, {
                   id: 22
              }, {
                   id: 19,
                   index: true
              }, {
                   id: 20
              }];
              this.buildingsHit = [];
              setInterval(() => {
                   for (let e = 0; e < gameObjects.length; e++) {
                        let t = gameObjects[e];
                        if (t && !t.active) {
                             gameObjects.splice(e, 1);
                        }
                   }
              }, 60000);
         }
         isAlly(e) {
              return alliancePlayers.includes(e);
         }
         isMine(e) {
              return e == player.sid;
         }
         isFriendly(e) {
              return player.sid == e || !!this.isAlly(e);
         }
         nextTick(e) {
              if (typeof e == "function") {
                   this.doNextTick.push(e);
              }
         }
         tickOut(e, t) {
              if (typeof e != "function") {
                   return;
              }
              let i = this.tick + t;
              if (typeof this.tickBase[i] != "object") {
                   this.tickBase[i] = [e];
              } else {
                   this.tickBase[i].push(e);
              }
         }
         autoBuy(e) {
              if (!scriptMenu.toggles.autobuy) {
                   return;
              }
              let t = this.shopList[0];
              if (t) {
                   let i = (t.index ? accessories : hats).find(e => e.id == t.id);
                   if (t.index) {
                        if (player.tails[t.id]) {
                             this.shopList.shift();
                             return;
                        }
                        if (e >= i.price) {
                             io.send("c", 1, t.id, 1);
                        }
                   } else {
                        if (player.skins[t.id]) {
                             this.shopList.shift();
                             return;
                        }
                        if (e >= i.price) {
                             io.send("c", 1, t.id, 0);
                        }
                   }
              }
         }
         gameTick() {
              this.tick++;
              this.enemies.all = [];
              this.enemies.nearest = null;
              this.enemies.near = [];
              this.enemies.angle = null;
         }
         manageTurretReload(e) {
              this.turretsInSight = 0;
              for (let t = 0; t < this.closeObjects.length; t++) {
                   let i = this.closeObjects[t];
                   if (i.active && i.name == "turret") {
                        if (scriptMenu.toggles.autoEMP && i.turretReload <= config.serverUpdateSpeed * 2 && UTILS.getDistance(player, i) <= 735 && !this.isFriendly(i.owner.sid) && chicken.canShoot(player, i, i.sid)) {
                             this.turretsInSight++;
                        }
                        if (i.turretReload <= 0) {
                             i.turretReload = 2200;
                        } else {
                             i.turretReload -= e;
                        }
                   }
              }
         }
         updateEnemies() {
              if (this.enemies.all) {
                   this.enemies.all = this.enemies.all.sort((e, t) => UTILS.getDistance(e, player) - UTILS.getDistance(t, player));
                   this.enemies.nearest = this.enemies.all[0];
              }
              if (this.enemies.nearest) {
                   this.enemies.angle = UTILS.getDirection(this.enemies.nearest, player);
              }
         }
         manageTickBase() {
              if (this.tickBase[this.tick]) {
                   this.tickBase[this.tick].forEach(e => e());
              }
              if (this.doNextTick.length) {
                   this.doNextTick.forEach(e => e());
              }
              this.doNextTick = [];
              chicken.checkTraps();
              hatSystem.tickBase();
              healer.healing();
              if (!player.team && alliancePlayers.length) {
                   alliancePlayers = [];
              }
         }
    }();
    class PathfindNode {
         constructor(e, t, i, s, n) {
              this.x = e;
              this.y = t;
              this.fScore = 0;
              this.gScore = 0;
              this.parent = null;
              this.circleScale = 10;
              this.type = i.some(e => {
                   let t = 0;
                   if (e.teleport) {
                        t += 35;
                   } else if (e.dmg && !game.isFriendly(e.owner.sid)) {
                        t += 35;
                   } else if (e.type == 1 && e.y >= 12000) {
                        t += 35;
                   }
                   if (UTILS.getDistance(this, e) <= e.getScale() + t && (!e.trap || !game.isFriendly(e.owner.sid))) {
                        return true;
                   }
              }) ? "wall" : players.some(e => {
                   if (e.visible && !game.isFriendly(e.sid) && UTILS.getDistance(this, e) <= this.circleScale + 40) {
                        return true;
                   }
              }) ? "wall" : "space";
              if (n && UTILS.getDistance(this, n) <= this.circleScale * 2) {
                   this.isOk = true;
                   this.type = "space";
              }
              if (s && UTILS.getDistance(this, s) <= this.circleScale + 17) {
                   this.type = "wall";
              }
         }
    }
    var autoHit = new class {
         constructor() {
              this.active = false;
              this.spikeDamages = [20, 35, 45, 30];
              this.reverseSpiketick = false;
         }
         damagedBySpike(e) {
              for (let t = 0; t < e.damages.length; t++) {
                   let i = e.damages[t];
                   if (this.spikeDamages.find(e => e == i || e == i / 0.75)) {
                        return true;
                   }
              }
              return false;
         }
         resetActivity() {
              this.active = false;
         }
         isInRange(e, t) {
              return UTILS.getDistance(e, player) - 63 < t;
         }
         autoInsta() {
              if (!scriptMenu.toggles.autoInsta) {
                   return false;
              }
              let e = player.weapons[0];
              let t = player.weapons[1];
              if (e == 8 || ![4, 5].includes(e)) {
                   return false;
              }
              let i = game.enemies.nearest;
              let s = game.enemies.angle;
              if (!i) {
                   return false;
              }
              let n = items.weapons[t];
              let a = player.primaryVariant;
              let l = healer.calculateWeaponDamage(e, a);
              if (player.skins[7]) {
                   l *= 1.5;
              }
              let o = healer.reloadPercent(player, e);
              let r = healer.reloadPercent(player, t);
              let c = healer.reloadPercent(player, 53);
              if (o != 1 || r != 1 || c != 1) {
                   return false;
              }
              if (t == 10) {
                   if (chicken.pushing && l >= 60) {
                        if (this.damagedBySpike(i) && this.isInRange(i, n.range)) {
                             return "reverse";
                        }
                   } else {
                        if (i.trapData || !this.isInRange(i, n.range)) {
                             return false;
                        }
                        let d = [];
                        d = e == 4 ? [0.6, 0.3] : [0.6, 0.5];
                        let p = kbSimulator.meleeKB(i, s, undefined, d);
                        let h = UTILS.getDistance(p, player) / 9;
                        for (let g = 0; g < 9; g++) {
                             let $ = {
                                  x: i.x + Math.cos(s) * (h * (g + 1)),
                                  y: i.y + Math.sin(s) * (h * (g + 1))
                             };
                             let m = game.closeObjects.find(e => e.active && e.dmg && UTILS.getDistance($, e) <= 35 + e.scale);
                             if (m) {
                                  if (game.isFriendly(m.owner.sid)) {
                                       return "reverse";
                                  }
                                  break;
                             }
                        }
                   }
              }
              return false;
         }
         autoHit() {
              if (!scriptMenu.toggles.autohit) {
                   return false;
              }
              let e = player.weapons[0];
              if (e == 8) {
                   return false;
              }
              let t = player.primaryVariant;
              let i = healer.calculateWeaponDamage(e, t);
              let s = healer.reloadPercent(player, e);
              let n = items.weapons[e];
              if (player.skins[7]) {
                   i *= 1.5;
              }
              let a = game.enemies.nearest;
              let l = game.enemies.angle;
              if (!a) {
                   return false;
              }
              if (UTILS.getDistance(a, player) - 63 < n.range) {
                   let o = chicken.pushing;
                   if (a.skinIndex == 45) {
                        this.active = true;
                        return true;
                   }
                   if (o) {
                        if (o.victim.sid == a.sid) {
                             if (i >= 60) {
                                  if (s < 1) {
                                       return false;
                                  }
                                  if (!this.damagedBySpike(a) && UTILS.getDistance(a.vel, o.last) <= o.scale + 35) {
                                       this.active = true;
                                       return true;
                                  }
                             } else if (o.dist <= o.scale + 45 && UTILS.getDistance(a, player) <= 85) {
                                  this.active = true;
                                  return true;
                             }
                        }
                   } else if ([4, 5].includes(e)) {
                        if (s < 1) {
                             return false;
                        }
                        if (a.trapData) {
                             return;
                        }
                        let r = kbSimulator.meleeKB(a, l, e);
                        let c = game.closeObjects.filter(e => e.active && e.dmg && game.isFriendly(e.owner.sid) && UTILS.getDistance(r, e) <= 35 + e.scale).reduce((e, t) => e + t.dmg, 0);
                        if ((a.skinIndex == 6 ? 0.75 : 1) * (c + i) >= 100) {
                             this.active = true;
                             return true;
                        }
                   }
              }
              return false;
         }
         addSpiekTickHit() {
              let e = player.weapons[0];
              let t = healer.calculateWeaponDamage(e, player.primaryVariant) * 1.5;
              if (healer.reloadPercent(player, e) < 1 || t < 60) {
                   return 0;
              } else {
                   return t;
              }
         }
         spiekTick() {
              if (!scriptMenu.toggles.spiekTick || player.tailindex == 11) {
                   return;
              }
              let e = player.weapons[0];
              let t = healer.calculateWeaponDamage(e, player.primaryVariant) * 1.5;
              if (!(healer.reloadPercent(player, e) < 1)) {
                   if (!(t < 60)) {
                        console.log(autoHit.reverseSpiketick ? "uhhhx2" : "uhhh");
                        chicken.autoaim = "bullhit";
                        chicken.preferedWeaponIndex = player.weapons[0];
                        if (player.weaponIndex != player.weapons[0]) {
                             chicken.selectToBuild(player.weapons[0], true);
                        }
                        hatSystem.storeEquip(7, 0);
                        if (!autoHit.reverseSpiketick) {
                             chicken.sendAutoGather();
                        }
                        game.tickOut(() => {
                             chicken.sendAutoGather();
                             chicken.autoaim = false;
                        }, autoHit.reverseSpiketick ? 3 : 2);
                   }
              }
         }
         checkForReverseSpiketick() {
              this.reverseSpiketick = false;
              if (!scriptMenu.toggles.spiekTick || player.tailindex == 11) {
                   return false;
              }
              if (player.weapons[0] != 5 && player.weapons[0] != 4) {
                   return;
              }
              let e = game.enemies.nearest;
              if (!e || !e.trapData) {
                   return false;
              }
              let t = e.trapData;
              if (player.weapons[1] != 10 || UTILS.getDistance(player, t) - 50 > 75 || healer.reloadPercent(player, 10) < 1 || healer.reloadPercent(player, player.weapons[0]) < 1 || t.currentHealth - (player.skins[40] ? 3.3 : 1) * 75 > 0) {
                   return false;
              }
              let i = items.list[player.items[2]];
              let s = placer.calculatePosition(player, 30 + i.scale, game.enemies.angle);
              return !!objectManager.checkItemLocation(s.x, s.y, i.scale, 0.6, player.items[2], false, t);
         }
         meleeSync() {
              if (!scriptMenu.toggles.doMeleeSync || player.tailIndex == 11) {
                   return;
              }
              let e = game.enemies.nearest;
              if (!e || !player.team || healer.reloadPercent(player, player.weapons[0]) < 1) {
                   return;
              }
              let t = items.weapons[player.weapons[0]];
              if (UTILS.getDistance(e, player) - 68 < t.range) {
                   chickenSocketHandler.send("meleeSync", e.sid, window.pingTime, chickenSocketHandler.pingTime, player.team);
              }
         }
    }();
    var instaManager = new class {
         constructor() {
              this.onQueue = [];
              this.holdModeOT = false;
         }
         tickBase() {
              if (typeof this.onQueue[0] == "function") {
                   this.onQueue[0]();
                   this.onQueue.shift();
              }
         }
         addToQueue(e) {
              if (typeof e == "function") {
                   this.onQueue.push(e);
              }
         }
         startInsta(e) {
              chicken.autoaim = e;
              if (e == "reverse") {
                   hatSystem.storeEquip(53);
                   chicken.preferedWeaponIndex = player.weapons[1];
                   if (player.weaponIndex != chicken.preferedWeaponIndex) {
                        chicken.selectToBuild(chicken.preferedWeaponIndex, true);
                   }
                   chicken.sendAim(game.enemies.angle);
                   chicken.sendAutoGather();
                   this.addToQueue(() => {
                        hatSystem.storeEquip(7);
                        chicken.preferedWeaponIndex = player.weapons[0];
                        if (player.weaponIndex != chicken.preferedWeaponIndex) {
                             chicken.selectToBuild(chicken.preferedWeaponIndex, true);
                        }
                        chicken.sendAim(game.enemies.angle);
                   });
                   this.addToQueue(() => {
                        chicken.sendAutoGather();
                        chicken.autoaim = false;
                   });
              } else {
                   hatSystem.storeEquip(53);
                   chicken.preferedWeaponIndex = player.weapons[0];
                   if (player.weaponIndex != chicken.preferedWeaponIndex) {
                        chicken.selectToBuild(chicken.preferedWeaponIndex, true);
                   }
                   this.addToQueue(() => {
                        hatSystem.storeEquip(7);
                        chicken.sendAim(game.enemies.angle);
                        io.send("K", 1, 1);
                   });
                   this.addToQueue(() => {
                        chicken.autoaim = false;
                        io.send("K", 1, 1);
                   });
              }
         }
         oneTickMovement() {
              let e = game.enemies.nearest;
              if (!e) {
                   this.holdModeOT = false;
                   return;
              }
              let t = game.enemies.angle;
              let i = UTILS.getDistance(e, player) - game.perfectOTDistance;
              let s = UTILS.getDistance(e, player.vel) - i;
              let n = Math.abs(i);
              if (player.weapons[1] == 10) {
                   if (player.weaponIndex != 10) {
                        chicken.selectToBuild(10, true);
                   }
                   chicken.preferedWeaponIndex = 10;
              }
              if (n <= 25 && s < 0) {
                   n = 5;
              }
              if (n <= 5) {
                   if (e.skinindex != 6 && e.skinIndex != 22 && player.tailIndex != 11 && healer.reloadPercent(player, 53) == 1 && healer.reloadPercent(player, player.weapons[0]) == 1) {
                        this.startInsta("ot");
                        return t;
                   } else {
                        hatSystem.storeEquip(chicken.checkHave(19, true), 1, true);
                        hatSystem.storeEquip(6, 0, true);
                        return "stop movement";
                   }
              } else {
                   if (n <= 20) {
                        if (n <= 10) {
                             hatSystem.storeEquip(chicken.checkHave(19, true), 1, true);
                        } else {
                             hatSystem.storeEquip(0, 1, true);
                        }
                        hatSystem.storeEquip(40, 0, true);
                   } else {
                        hatSystem.storeEquip(n <= 35 ? chicken.checkHave(19, true) : 11, 1, true);
                        hatSystem.storeEquip(6, 0, true);
                   }
                   return t + (i > 0 ? 0 : Math.PI);
              }
         }
    }();
    var chicken = new class {
         constructor() {
              this.rangeAddOnCache = {};
              this.chickenUsers = [];
              this.autoTriggerOneShot = false;
              this.aimAngle = 0;
              this.preferedWeaponIndex = 0;
              this.trapAim = 0;
              this.reloaded = false;
              this.autoaim = false;
              this.movementDirection = undefined;
              this.pushing = false;
              this.objBreakingTarget = undefined;
              this.autoBrakeGameTick = 0;
              this.onClick = {
                   tank: false
              };
              this.cursorLocation = {
                   x: 0,
                   y: 0
              };
         }
         drawTracer(e) {
              if (!document.getElementById("enemyradar" + e.sid)) {
                   let t = document.createElement("div");
                   t.id = `enemyradar${e.sid}`;
                   t.style = `
               display: none;
               position: absolute;
               left: 0;
               top: 0;
               color: #fff;
               width: 0;
               height: 0;
               border: solid;
               border-color: transparent transparent transparent #ffffff;
               `;
                   document.body.appendChild(t);
              }
              let i = window.innerWidth / 2;
              let s = window.innerHeight / 2;
              let n = Math.atan2(e.y2 - camY, e.x2 - camX);
              let a = Math.sqrt(Math.pow(0 - (camX - e.x2), 2) + Math.pow(0 - (camY - e.y2) * (16 / 9), 2)) * 100 / (maxScreenHeight / 2) / s;
              if (a > 1) {
                   a = 1;
              }
              let l = i + s * a * Math.cos(n) - 10;
              let o = s + s * a * Math.sin(n) - 10;
              document.getElementById("enemyradar" + e.sid).style.borderWidth = "10px 0px 10px 20px";
              document.getElementById("enemyradar" + e.sid).style.pointerEvents = "none";
              document.getElementById("enemyradar" + e.sid).style.left = l + "px";
              document.getElementById("enemyradar" + e.sid).style.top = o + "px";
              document.getElementById("enemyradar" + e.sid).style.opacity = a;
              document.getElementById("enemyradar" + e.sid).style.transform = `rotate(${n * 180 / Math.PI}deg)`;
              document.getElementById("enemyradar" + e.sid).style.display = player.team === null || player.team !== e.team ? "block" : "none";
         }
         doTurretParameters(e) {
              return e.layer >= 1;
         }
         canShoot(e, t, i = 1000000) {
              for (let s = 0; s < game.closeObjects.length; s++) {
                   let n = game.closeObjects[s];
                   if (n.sid != i && (i == 1000000 || this.doTurretParameters(n)) && !n.ignoreCollision && UTILS.intersectsLineCircle(e, t, n)) {
                        return false;
                   }
              }
              return true;
         }
         setPlayerWeapons() {
              player.primaryWeapon = player.weapons[0];
              if (player.weapons[1]) {
                   player.secondaryWeapon = player.weapons[1];
              }
         }
         sendHit(e, t) {
              io.send("F", e, t);
         }
         manageReloads() {
              if (!inWindow) {
                   for (let e = 0; e < players.length; e++) {
                        let t = players[e];
                        t.manageReloads(Date.now() - game.lastTickUpdate, t.visible);
                   }
              }
         }
         selectToBuild(e, t) {
              let i = botManager.playingAsData;
              if (i && i.socket.readyState == 1) {
                   let s = 0;
                   if (t) {
                        if (s == player.weapons[1]) {
                             s = 1;
                        }
                   } else {
                        s = player.items.findIndex(t => t == e);
                   }
                   botManager.sendToServer(i.socket, {
                        type: "packet",
                        sid: i.sid,
                        packetData: {
                             type: "z",
                             data: [s, t]
                        }
                   });
              } else if (t) {
                   io.send("z", e, true);
              } else {
                   io.send("z", e);
              }
         }
         checkHave(e, t) {
              if (t) {
                   if (player.tails[e]) {
                        return e;
                   } else {
                        return 0;
                   }
              } else if (player.skins[e]) {
                   return e;
              } else {
                   return 0;
              }
         }
         mouseAimDir() {
              if (player && (!this.autoaim || !game.enemies.nearest) && (!player.trapData || !player.trapData.active || !scriptMenu.toggles.inTrapBreak || scriptMenu.toggles.bullSpamInTrap && attackState) && (!this.spikeTickData || !this.spikeTickData.spiekTick) && !attackState && !this.objBreakingTarget) {
                   return Math.atan2(mouseY - screenHeight / 2, mouseX - screenWidth / 2);
              }
         }
         getAttackDir(e, t) {
              if (t) {
                   return Math.atan2(mouseY - screenHeight / 2, mouseX - screenWidth / 2);
              }
              if (!player) {
                   return 0;
              }
              if ((this.autoaim || autoHit.reverseSpiketick) && game.enemies.nearest) {
                   return game.enemies.angle;
              }
              if (player.trapData && player.trapData.active && scriptMenu.toggles.inTrapBreak && (!scriptMenu.toggles.bullSpamInTrap || !attackState)) {
                   return this.trapAim;
              }
              if (attackState || autoHit.active) {
                   if (game.enemies.nearest) {
                        return game.enemies.angle;
                   } else {
                        return Math.atan2(mouseY - screenHeight / 2, mouseX - screenWidth / 2);
                   }
              }
              if (this.objBreakingTarget) {
                   return UTILS.getDirection(this.objBreakingTarget, player);
              } else if (!e || scriptMenu.toggles.autoGrind || this.onClick.tank) {
                   return Math.atan2(mouseY - screenHeight / 2, mouseX - screenWidth / 2);
              }
         }
         checkTraps() {
              for (let e = 0; e < players.length; e++) {
                   let t = players[e];
                   if (t && t.visible && (!game.isAlly(t.sid) || game.isMine(t.sid))) {
                        let i;
                        i = t.sid == player.sid ? game.closeObjects.find(e => e.active && e.trap && UTILS.getDistance(t, e) < 49 && !game.isFriendly(e.owner.sid)) : game.closeObjects.find(e => e.active && e.trap && UTILS.getDistance(t, e) < 49 && e.owner.sid != t.sid);
                        t.lastTrapData = !!t.trapData;
                        if (i) {
                             if (player == t) {
                                  hatSystem.trapSoldier = false;
                             }
                             t.trapData = i;
                             i.hideFromEnemy = false;
                        } else {
                             t.trapData = undefined;
                        }
                   } else if (t) {
                        t.trapData = undefined;
                   }
              }
         }
         autoSelect() {
              let e = player.weapons[0];
              let t = player.weapons[1];
              let i = healer.reloadPercent(player, player.weapons[0]);
              let s = healer.reloadPercent(player, player.weapons[1]);
              if (i < 1 && [4, 5].includes(e)) {
                   this.reloaded = true;
                   this.preferedWeaponIndex = e;
                   if (player.weaponIndex != e) {
                        this.selectToBuild(e, 1);
                   }
              } else if (s < 1) {
                   this.reloaded = true;
                   this.preferedWeaponIndex = t;
                   if (player.weaponIndex != t) {
                        this.selectToBuild(t, 1);
                   }
              } else if (i < 1) {
                   this.reloaded = true;
                   this.preferedWeaponIndex = e;
                   if (player.weaponIndex != e) {
                        this.selectToBuild(e, 1);
                   }
              } else if (this.reloaded) {
                   this.reloaded = false;
                   if (t == 10 && [4, 5].includes(e)) {
                        this.preferedWeaponIndex = t;
                        if (player.weaponIndex != t) {
                             this.selectToBuild(t, 1);
                        }
                   } else {
                        this.preferedWeaponIndex = e;
                        if (player.weaponIndex != e) {
                             this.selectToBuild(e, 1);
                        }
                   }
              }
         }
         equipBestBreakWeapon(e, t, i) {
              let s = player.weapons[1] == 10 ? 10 : player.weapons[0];
              if (e == "autobreak" && s == 10 && player.weapons[0] != 5 && healer.reloadPercent(player, player.weapons[0]) == 1 && (i || player.trapData).currentHealth - healer.calculateWeaponDamage(player.weapons[0], player.primaryVariant) <= 0) {
                   s = player.weapons[0];
              }
              if (player.weaponIndex != s && !t) {
                   this.selectToBuild(s, true);
              }
              return s;
         }
         doPathFind(e, {
              gridThing: t,
              moreTrash: i
         }) {
              let s = 10;
              let n = {
                   x: Math.floor(Math.min(player.x2, e.x) / s) * s - s * 20,
                   y: Math.floor(Math.min(player.y2, e.y) / s) * s - s * 20
              };
              let a = {
                   x: Math.floor(Math.max(player.x2, e.x) / s) * s + s * 20,
                   y: Math.floor(Math.max(player.y2, e.y) / s) * s + s * 20
              };
              let l = {
                   x: a.x - n.x,
                   y: a.y - n.y
              };
              let o = {
                   x: Math.ceil(l.x / s) / 2,
                   y: Math.ceil(l.y / s) / 2
              };
              let r = [];
              let c = game.closeObjects.filter(t => t.active && UTILS.getDistance(UTILS.findMiddlePoint(player, e), t) <= 500);
              for (let d = 0; d < o.x; d++) {
                   for (let p = 0; p < o.y; p++) {
                        let h = {
                             x: n.x + s * 2 * d,
                             y: n.y + s * 2 * p
                        };
                        if (h.x > 35 && h.x < 14365 && h.y > 35 && h.y < 14365) {
                             r.push(new PathfindNode(h.x, h.y, c, i, e));
                        }
                   }
              }
              let g = r.sort((e, t) => UTILS.getDistance(e, player) - UTILS.getDistance(t, player))[0];
              let $ = r.sort((t, i) => UTILS.getDistance(t, e) - UTILS.getDistance(i, e))[0];
              let m = [g];
              let u = [];
              let f = false;
              while (!f && m.length > 0) {
                   let y = m[0];
                   for (let x = 1; x < m.length; x++) {
                        let b = m[x];
                        if (b.fScore < y.fScore || b.fScore === y.fScore && b.fScore < y.fScore) {
                             y = b;
                        }
                   }
                   m = m.filter(e => e !== y);
                   u.push(y);
                   if (y === $) {
                        f = true;
                        break;
                   }
                   let k = this.getNeighbors(y, r, c);
                   for (let _ = 0; _ < k.length; _++) {
                        let v = k[_];
                        if (u.includes(v) || v.type === "wall") {
                             continue;
                        }
                        let w = y.gScore + 1;
                        let T = false;
                        if (m.includes(v)) {
                             if (w < v.gScore) {
                                  T = true;
                             }
                        } else {
                             m.push(v);
                             T = true;
                        }
                        if (T) {
                             v.parent = y;
                             v.gScore = w;
                             v.hScore = UTILS.getDistance(v, $);
                             v.fScore = v.gScore + v.hScore;
                        }
                   }
              }
              if (!f) {
                   if (window.devTesting) {
                        chicken.grid = r;
                   }
                   if (t) {
                        return r;
                   } else {
                        return undefined;
                   }
              }
              {
                   let S = [];
                   let I = $;
                   while (I !== g) {
                        S.unshift(I);
                        I.isPath = true;
                        I = I.parent;
                   }
                   S.unshift(g);
                   if (window.devTesting) {
                        chicken.grid = r;
                   }
                   if (t) {
                        return r;
                   } else {
                        return S;
                   }
              }
         }
         getNeighbors(e, t, i) {
              let s = [];
              let n = [{
                   x: -1,
                   y: 0
              }, {
                   x: 1,
                   y: 0
              }, {
                   x: 0,
                   y: -1
              }, {
                   x: 0,
                   y: 1
              }, {
                   x: -1,
                   y: -1
              }, {
                   x: 1,
                   y: -1
              }, {
                   x: -1,
                   y: 1
              }, {
                   x: 1,
                   y: 1
              }];
              let a = 10;
              for (let l = 0; l < n.length; l++) {
                   let o = n[l];
                   let r = e.x + o.x * (a * 2);
                   let c = e.y + o.y * (a * 2);
                   let d = t.find(e => e.x === r && e.y === c);
                   if (d) {
                        if (d.type != "space" || d.isOk) {
                             s.push(d);
                        } else if (!i.find(e => !e.trap && UTILS.getDistance(d, e) <= e.getScale() + 20)) {
                             s.push(d);
                        }
                   }
              }
              return s;
         }
         autoPush() {
              if (!scriptMenu.toggles.autopush || keys[16]) {
                   this.pushing = false;
                   return;
              }
              let e = game.enemies.all.filter(e => UTILS.getDistance(player, e) <= 250);
              let t;
              let i;
              let s = game.closeObjects.filter(e => e.active && (e.dmg && game.isFriendly(e.owner.sid) || e.type == 1 && e.y >= 12000) && UTILS.getDistance(e, player) <= scriptMenu.toggles.autoPushDistance);
              for (let n = 0; n < e.length; n++) {
                   let a = e[n];
                   if (a && a.trapData && a.trapData.active) {
                        let l = s.filter(e => UTILS.getDistance(e, a.trapData) <= 75 + e.getScale());
                        if (l.length) {
                             t = a;
                             i = l;
                             break;
                        }
                   }
              }
              if (i && t) {
                   let o = i.sort((e, t) => t.currentHealth - e.currentHealth).sort((e, i) => UTILS.getDistance(e, t) - UTILS.getDistance(i, t));
                   if (i.length == 1) {
                        o = o[0];
                   } else {
                        let r = o[0];
                        let c = o.filter(e => (e.type != 1 || !(e.y >= 12000)) && e.sid != r.sid).sort((e, t) => UTILS.getDistance(e, r) - UTILS.getDistance(t, r))[0];
                        let d = UTILS.findMiddlePoint(r, c);
                        o = UTILS.getDistance(d, r) <= 20 + r.getScale() && UTILS.getDistance(d, c) <= 20 + c.getScale() ? {
                             x: d.x,
                             y: d.y,
                             scale: (r.getScale() + c.getScale()) / 2 * 0.9,
                             double: true
                        } : o[0];
                   }
                   let p = o.type == 1 && o.y >= 12000;
                   if (o) {
                        let h = UTILS.getDirection(t, o);
                        let g = UTILS.getDistance(o, t) + 72;
                        let $ = {
                             x: o.x + Math.cos(h) * g,
                             y: o.y + Math.sin(h) * g
                        };
                        let m = o.scale + (p ? 64 : 96) - (o.double ? 10 : 0);
                        if (UTILS.getDistance($, player) <= 35) {
                             if ((g -= 18) <= m) {
                                  g = m;
                             }
                             $ = {
                                  x: o.x + Math.cos(h) * g,
                                  y: o.y + Math.sin(h) * g
                             };
                        }
                        if (game.closeObjects.find(e => e.active && e.dmg && !game.isFriendly(e.owner.sid) && UTILS.getDistance(e, $) <= e.getScale() + 35)) {
                             this.pushing &&= false;
                             return;
                        }
                        if (UTILS.getDistance($, player) <= 35) {
                             this.pushing = {
                                  first: $,
                                  last: o,
                                  dist: UTILS.getDistance(o, t),
                                  ang: UTILS.getDirection(o, player),
                                  victim: t,
                                  scale: o.scale
                             };
                             return UTILS.getDirection($, player);
                        }
                        {
                             let u = this.doPathFind($, {
                                  moreTrash: UTILS.findMiddlePoint(o, t)
                             });
                             if (u && u.length > 1) {
                                  this.pushing = {
                                       first: $,
                                       last: o,
                                       path: u,
                                       victim: t,
                                       dist: UTILS.getDistance(o, t),
                                       ang: UTILS.getDirection(o, player),
                                       scale: o.scale
                                  };
                                  return Math.atan2(u[1].y - u[0].y, u[1].x - u[0].x);
                             }
                             if (scriptMenu.toggles.pathfindOverride && UTILS.getDistance($, player) <= 175) {
                                  this.pushing = {
                                       first: $,
                                       last: o,
                                       dist: UTILS.getDistance(o, t),
                                       ang: UTILS.getDirection(o, player),
                                       victim: t,
                                       scale: o.scale
                                  };
                                  return Math.atan2($.y - player.y2, $.x - player.x2);
                             }
                        }
                        this.pushing &&= false;
                   } else {
                        this.pushing &&= false;
                   }
              } else {
                   this.pushing &&= false;
              }
         }
         tickMovement(e) {
              if (!keys[16] && player.trapData || effectsManager.effects.find(e => e.name == "freeze")) {
                   return;
              }
              let t = false;
              if (!player.trapData && scriptMenu.toggles.autoBrake) {
                   let i = UTILS.getDistance(player.vel, player) >= 4;
                   let s = this.getPredictedDistance(typeof e == "number" ? e : lastMoveDir, i ? 2 : 1);
                   if (s) {
                        let n = s.pos.obj;
                        if (n) {
                             let a = s.tmpPos[s.tmpPos.length - 1];
                             let l = s.tmpPos.length - 1;
                             let o = UTILS.getDistance(n, player) - (40 + n.scale);
                             if (o <= UTILS.getDistance(a, player)) {
                                  l--;
                             }
                             if (window.pingTime >= 100) {
                                  l--;
                             }
                             if (i) {
                                  l--;
                             }
                             if (l <= 0) {
                                  this.autoBrakeGameTick = game.tick;
                             } else {
                                  this.autoBrakeGameTick = game.tick + l;
                             }
                             if (this.alreadyCanHit(n) || o <= 0) {
                                  t = true;
                                  this.autoBrakeGameTick = game.tick;
                             }
                        }
                   }
              }
              if (e == "stop movement" || (typeof e == "number" || typeof lastMoveDir == "number") && (t || this.autoBrakeGameTick == game.tick)) {
                   if (this.movementDirection != "stop movement") {
                        this.movementDirection = "stop movement";
                        textManager.showText(player, 250, 35, 0, "#fff", "stop");
                        io.send("9", undefined);
                   }
              } else if (typeof e == "number") {
                   if (e != this.movementDirection) {
                        this.movementDirection = e;
                        io.send("9", e);
                   }
              } else if (this.autoaim == "ot") {
                   if (this.movementDirection != game.enemies.angle) {
                        this.movementDirection = game.enemies.angle;
                        io.send("9", game.enemies.angle);
                   }
              } else if (this.movementDirection != lastMoveDir) {
                   this.movementDirection = lastMoveDir;
                   io.send("9", lastMoveDir);
              }
         }
         canAutoObjBreak() {
              if (!scriptMenu.toggles.outOfTrapBreak) {
                   return false;
              }
              let e = this.equipBestBreakWeapon("", true);
              if (e != 10) {
                   return;
              }
              let t = items.weapons[e].range;
              let i = game.closeObjects.filter(e => e.active && (e.teleport || e.dmg || e.trap || e.boostSpeed) && !game.isFriendly(e.owner.sid) && UTILS.getDistance(e, player) - e.scale < t);
              let s = (i = i.sort((e, t) => e.currentHealth - t.currenthealth).sort((e, t) => UTILS.getDistance(e, player) - UTILS.getDistance(t, player)).sort((e, t) => e.dmg && !t.dmg ? -1 : !e.dmg && t.dmg ? 1 : e.trap && !t.trap ? -1 : !e.trap && t.trap ? 1 : 0))[0];
              if (s) {
                   if (i.length > 1) {
                        let n = UTILS.getDirection(s, player);
                        for (let a = 1; a < i.length; a++) {
                             let l = i[a];
                             let o = UTILS.getDirection(l, player);
                             let r = UTILS.findMiddlePoint(l, s);
                             let c = UTILS.getDirection(r, player);
                             if (UTILS.getAngleDist(c, n) <= config.gatherAngle && UTILS.getAngleDist(c, o) <= config.gatherAngle) {
                                  this.objBreakingTarget = {
                                       sids: [s.sid, l.sid],
                                       x: r.x,
                                       y: r.y,
                                       moreThanOneSpiek: true
                                  };
                                  return true;
                             }
                        }
                   }
                   this.objBreakingTarget = {
                        sid: s.sid,
                        x: s.x,
                        y: s.y
                   };
                   return true;
              }
              return false;
         }
         getPredictedDistance(e, t = 1) {
              if (typeof e != "number") {
                   return false;
              }
              let i = config.serverUpdateSpeed;
              let s = items.weapons[player.weaponIndex];
              let n = hats.find(e => e.id == player.skinIndex);
              let a = accessories.find(e => e.id == player.tailIndex);
              let l = (player.buildIndex >= 0 ? 0.5 : 1) * (s.spdMult || 1) * (n && n.spdMult || 1) * (a && a.spdMult || 1) * (player.y2 <= config.snowBiomeTop ? n && n.coldM ? 1 : config.snowSpeed : 1);
              let o = {
                   x: player.x2,
                   y: player.y2
              };
              let r = {
                   x: 0,
                   y: 0
              };
              let c = Math.cos(e);
              let d = Math.sin(e);
              let p = Math.sqrt(c * c + d * d);
              if (p != 0) {
                   c /= p;
                   d /= p;
              }
              r.x += c * player.speed * l * i;
              r.y += d * player.speed * l * i;
              t--;
              let h = [];
              while ((r.x != 0 || r.y != 0) && !isNaN(r.x) && !isNaN(r.y)) {
                   let g = Math.min(4, Math.max(1, Math.round(UTILS.getDistance({
                        x: 0,
                        y: 0
                   }, {
                        x: r.x * i,
                        y: r.y * i
                   }) / 40)));
                   let $ = 1 / g;
                   for (let m = 0; m < g; m++) {
                        if (r.x) {
                             o.x += r.x * i * $;
                        }
                        if (r.y) {
                             o.y += r.y * i * $;
                        }
                        let u = game.closeObjects.find(e => e.active && (e.teleport || !e.ignoreCollision) && UTILS.getDistance(e, o) <= e.getScale() + 35);
                        if (u) {
                             if (u.teleport || u.dmg && !game.isFriendly(u.owner.sid)) {
                                  o.obj = u;
                                  r.x = 0;
                                  r.y = 0;
                                  break;
                             }
                             let f = u.getScale() + 35;
                             let y = UTILS.getDirection(o, u);
                             o.x = u.x + f * Math.cos(y);
                             o.y = u.y + f * Math.sin(y);
                             r.x *= 0.75;
                             r.y *= 0.75;
                        }
                   }
                   h.push({
                        x: o.x,
                        y: o.y
                   });
                   if (r.x) {
                        r.x *= Math.pow(config.playerDecel, i);
                        if (r.x <= 0.01 && r.x >= -0.01) {
                             r.x = 0;
                        }
                   }
                   if (r.y) {
                        r.y *= Math.pow(config.playerDecel, i);
                        if (r.y <= 0.01 && r.y >= -0.01) {
                             r.y = 0;
                        }
                   }
                   if (t > 0) {
                        r.x += c * player.speed * l * i;
                        r.y += d * player.speed * l * i;
                        t--;
                   }
              }
              return {
                   tmpPos: h,
                   pos: o
              };
         }
         getNextTickRangeAddOn(e, t) {
              let i = this.rangeAddOnCache[e + ":" + t];
              if (!i) {
                   let s = hats.find(t => t.id == e);
                   let n = accessories.find(e => e.id == t);
                   let a = player.weaponIndex;
                   let l = (items.weapons[a].spdMult || 1) * (s && s.spdMult || 1) * (n && n.spdMult || 1);
                   i = this.rangeAddOnCache[e + ":" + t] = config.serverUpdateSpeed / 2 * l;
              }
              return i || 0;
         }
         alreadyCanHit(e) {
              let t = this.equipBestBreakWeapon("", true);
              let i = items.weapons[t].range;
              let s = this.getNextTickRangeAddOn(player.skinIndex, player.tailIndex);
              return UTILS.getDistance(e, player) - e.scale < i + s;
         }
         sendAim(e) {
              let t = botManager.playingAsData;
              if (t && t.socket.readyState == 1) {
                   botManager.sendToServer(t.socket, {
                        type: "packet",
                        sid: t.sid,
                        packetData: {
                             type: "D",
                             data: [e]
                        }
                   });
              } else {
                   io.send("D", e);
              }
         }
         sendAutoGather() {
              let e = botManager.playingAsData;
              if (e && e.socket.readyState == 1) {
                   botManager.sendToServer(e.socket, {
                        type: "packet",
                        sid: e.sid,
                        packetData: {
                             type: "K",
                             data: [1]
                        }
                   });
              } else {
                   io.send("K", 1, 1);
              }
         }
         sendHitOnce(e) {
              this.sendAutoGather();
              if (e) {
                   game.tickOut(() => {
                        this.sendAutoGather();
                   }, 2);
              } else {
                   game.nextTick(() => {
                        this.sendAutoGather();
                   });
              }
         }
         healthToHits(e, t) {
              let i = items.weapons[t];
              let s = i.projectile == null ? i.dmg : 0;
              let n;
              return Math.ceil(e / (s * (config.weaponVariants[player.weaponVariant]?.val || 1) * (i.sDmg || 1) * (player.skins[40] ? 3.3 : 1)));
         }
         bullHit() {
              this.preferedWeaponIndex = player.weapons[0];
              if (player.weaponIndex != player.weapons[0]) {
                   this.selectToBuild(player.weapons[0], true);
              }
              if (healer.reloadPercent(player, player.weapons[0]) == 1) {
                   if (this.pushing || player.weapons[0] != 7) {
                        hatSystem.storeEquip(7, 0, true);
                   } else {
                        hatSystem.storeEquip(this.checkHave(19, true), 1, true);
                   }
                   this.sendHitOnce();
              } else {
                   let e = () => {
                        if (player.skins[53] && this.pushing && this.pushing.dist <= 90 && healer.reloadPercent(player, 53) == 1) {
                             hatSystem.storeEquip(53, 0, true);
                        } else {
                             hatSystem.doBasicFunction(true);
                        }
                   };
                   if (player.weapons[0] == 7 && player.tailIndex != 11) {
                        e();
                   } else if (player.weapons[0] != 7) {
                        e();
                   }
                   if (!this.pushing && player.weapons[0] == 7) {
                        hatSystem.storeEquip(11, 1, true);
                   }
              }
              if (!!this.pushing || player.weapons[0] != 7) {
                   hatSystem.storeEquip(this.checkHave(19, true), 1, true);
              }
         }
         replaceable(e) {
              let t = Math.PI;
              let i = Math.PI / 12;
              let s = items.list[15].scale + 30;
              for (let n = 0; n < game.enemies.near.length; n++) {
                   let a = game.enemies.near[n];
                   if (a && UTILS.getDistance(a, player) <= 160) {
                        for (let l = 0; l <= t; l += i) {
                             let o = placer.calculatePosition(a, s, l);
                             if (objectManager.checkItemLocation(o.x, o.y, 52, 0.6, false, false, e) || (o = placer.calculatePosition(a, s, l + t), objectManager.checkItemLocation(o.x, o.y, 52, 0.6, false, false, e))) {
                                  return true;
                             }
                        }
                   }
              }
              return false;
         }
         manageTickBase() {
              if (inGame) {
                   this.setPlayerWeapons();
                   autoHit.resetActivity();
                   let e = this.autoPush();
                   this.objBreakingTarget = undefined;
                   placer.tickBase();
                   instaManager.tickBase();
                   if (autoHit.reverseSpiketick && this.autoaim != "bullhit") {
                        this.autoaim = false;
                        this.sendAutoGather();
                   }
                   let t = autoHit.checkForReverseSpiketick();
                   if (this.autoaim); else if (player.trapData && scriptMenu.toggles.inTrapBreak && (!scriptMenu.toggles.bullSpamInTrap || !attackState)) {
                        let i = this.equipBestBreakWeapon("autobreak", true);
                        let s = items.weapons[i];
                        let n = UTILS.getDistance(player.vel, player) >= 2 ? 4 : 0;
                        let a = game.closeObjects.filter(e => e.active && e.dmg && !game.isFriendly(e.owner.sid) && UTILS.getDistance(e, player) - e.scale <= s.range + n);
                        let l = (a = a.sort((e, t) => UTILS.getDistance(e, player) - UTILS.getDistance(t, player)).sort((e, t) => e.currentHealth - t.currentHealth))[0];
                        if (keys[16]) {
                             l = undefined;
                        }
                        if (l && this.healthToHits(player.trapData.currentHealth, i) < this.healthToHits(l.currentHealth, i) && !this.replaceable(player.trapData)) {
                             l = undefined;
                        }
                        if (l) {
                             let o = UTILS.getDirection(l, player);
                             for (let r = 1; r < a.length; r++) {
                                  let c = a[r];
                                  let d = UTILS.getDirection(c, player);
                                  let p = UTILS.findMiddlePoint(c, l);
                                  let h = UTILS.getDirection(p, player);
                                  if (UTILS.getAngleDist(h, o) <= config.gatherAngle && UTILS.getAngleDist(h, d) <= config.gatherAngle) {
                                       l = {
                                            x: p.x,
                                            y: p.y,
                                            currentHealth: Math.max(c.currentHealth, l.currentHealth)
                                       };
                                       break;
                                  }
                             }
                        }
                        i = this.equipBestBreakWeapon("autobreak", false, l);
                        this.preferedWeaponIndex = i;
                        this.trapAim = UTILS.getDirection(l || player.trapData, player);
                        if (healer.reloadPercent(player, i) == 1) {
                             hatSystem.storeEquip(40, 0, true);
                             this.sendHitOnce();
                        } else {
                             hatSystem.doBasicFunction(true);
                        }
                        if (![7, 8, 6].includes(player.weapons[0])) {
                             hatSystem.storeEquip(this.checkHave(19, true), 1, true);
                        }
                   } else {
                        let g = autoHit.autoInsta();
                        let $ = autoHit.autoHit();
                        if (!$ && !g && !t) {
                             autoHit.meleeSync();
                        }
                        if (t) {
                             chicken.autoaim = true;
                             autoHit.reverseSpiketick = true;
                             this.preferedWeaponIndex = 10;
                             if (player.weaponIndex != this.preferedWeaponIndex) {
                                  this.selectToBuild(this.preferedWeaponIndex, true);
                             }
                             hatSystem.storeEquip(40, 0, true);
                             this.sendAutoGather();
                        } else if ($) {
                             this.bullHit();
                        } else if (g) {
                             instaManager.startInsta(g);
                        } else if (instaManager.holdModeOT && typeof e != "number") {
                             e = instaManager.oneTickMovement();
                        } else if (scriptMenu.toggles.autoGrind && player.items[5]) {
                             if (player.weaponIndex != this.preferedWeaponIndex) {
                                  this.selectToBuild(this.preferedWeaponIndex, true);
                             }
                             if (healer.reloadPercent(player, this.preferedWeaponIndex) == 1) {
                                  hatSystem.storeEquip(40, 0, true);
                                  this.sendHitOnce();
                             } else {
                                  for (let m = 0; m < 4; m++) {
                                       placer.regCheckPlace(player.items[5], m * (Math.PI / 2));
                                  }
                                  hatSystem.doBasicFunction(true);
                             }
                             hatSystem.storeEquip(11, 1, true);
                        } else if (this.onClick.tank) {
                             let u = this.equipBestBreakWeapon();
                             this.preferedWeaponIndex = u;
                             if (healer.reloadPercent(player, u) == 1) {
                                  hatSystem.storeEquip(40, 0, true);
                                  this.sendHitOnce();
                             } else if (player.skins[53] && chicken.pushing && chicken.pushing.dist <= 90 && healer.reloadPercent(player, 53) == 1) {
                                  hatSystem.storeEquip(53, 0, true);
                             } else {
                                  hatSystem.doBasicFunction(true);
                             }
                        } else if (attackState) {
                             this.bullHit();
                        } else if (this.canAutoObjBreak() && (scriptMenu.toggles.ignoreSoldierWhenBreakingOutOfTrap || !hatSystem.velSoldier)) {
                             let f = this.equipBestBreakWeapon("");
                             this.preferedWeaponIndex = f;
                             if (healer.reloadPercent(player, f) == 1) {
                                  hatSystem.storeEquip(40, 0, true);
                                  this.sendHitOnce();
                             } else {
                                  hatSystem.doBasicFunction();
                             }
                        } else {
                             this.autoSelect();
                             hatSystem.doBasicFunction();
                        }
                   }
                   let y = this.getAttackDir(true);
                   if (typeof y == "number") {
                        this.sendAim(y);
                   }
                   this.tickMovement(e);
              }
         }
         manageBuildingBreak(e) {
              if (UTILS.getDistance(player, e) <= 300 && inGame) {
                   healer.doAntiSpiketick(e);
                   e.currentHealth = 0;
                   game.nextTick(() => {
                        placer.replace(e);
                   });
              }
              deathAnimationHandler.addObject(e);
         }
    }();
    function doPlayerUpdates(e) {
         let t = Date.now();
         for (let i = 0; i < players.length; i++) {
              players[i].forcePos = !players[i].visible;
              players[i].visible = false;
              if (document.getElementById("enemyradar" + players[i].sid)) {
                   document.getElementById("enemyradar" + players[i].sid).style.display = "none";
              }
         }
         for (let s = 0; s < e.length;) {
              let n = findPlayerBySID(e[s]);
              if (n) {
                   n.t1 = n.t2 === undefined ? t : n.t2;
                   n.t2 = t;
                   n.x1 = n.x;
                   n.y1 = n.y;
                   n.lastX = n.x2 || 0;
                   n.lastY = n.y2 || 0;
                   n.x2 = e[s + 1];
                   n.y2 = e[s + 2];
                   n.vel = {
                        x: n.x2 * 2 - n.lastX,
                        y: n.y2 * 2 - n.lastY
                   };
                   n.d1 = n.d2 === undefined ? e[s + 3] : n.d2;
                   n.d2 = e[s + 3];
                   n.dt = 0;
                   n.buildIndex = e[s + 4];
                   n.weaponIndex = e[s + 5];
                   n.weaponVariant = e[s + 6];
                   n.team = e[s + 7];
                   n.isLeader = e[s + 8];
                   n.skinIndex = e[s + 9];
                   n.tailIndex = e[s + 10];
                   n.iconIndex = e[s + 11];
                   n.zIndex = e[s + 12];
                   n.visible = true;
                   if (player == n || game.isAlly(n.sid)) {
                        if (player == n && n.skinIndex == 45 && !effectsManager.effects.find(e => e.name == "shame!")) {
                             effectsManager.addEffect("shame!", 30000 - game.tickSpeed, "https://i.imgur.com/ryNqa5q.png");
                        }
                   } else {
                        if (n.skinIndex > 0) {
                             n.skins[n.skinIndex] = 1;
                        }
                        if (n.tailIndex > 0) {
                             n.tails[n.tailIndex] = 1;
                        }
                        if (n.weaponIndex < 9 && n.primaryWeapon != 4 && n.secondaryWeapon != 13 && n.secondaryWeapon != 10 && n.secondaryWeapon != 14 && n.secondaryWeapon != 15 && n.spikeType.id != 9) {
                             n.secondaryWeapon = 15;
                             n.reloads[15] = 0;
                             n.secondaryVariant = 0;
                        }
                        game.enemies.all.push(n);
                        if (UTILS.getDistance(n, player) - 100 <= items.weapons[n.primaryWeapon].range) {
                             game.enemies.near.push(n);
                        }
                        chicken.drawTracer(n);
                   }
              }
              s += 13;
         }
    }
    function updatePlayers(e) {
         if (!botManager.playingAsData) {
              game.gameTick();
              doPlayerUpdates(e);
              game.closeObjects = gameObjects.filter(e => e.active && UTILS.getDistance(e, player) <= 1000);
              chicken.manageReloads();
              game.tickSpeed = Date.now() - game.lastTickUpdate;
              game.lastTickUpdate = Date.now();
              placer.mills();
              game.updateEnemies();
              game.manageTickBase();
              chicken.manageTickBase();
              game.buildingsHit = [];
              for (let t = 0; t < game.enemies.all.length; t++) {
                   game.enemies.all[t].damages = [];
              }
         }
         botManager.updateBots();
    }
    function findPlayerByID(e) {
         for (var t = 0; t < players.length; ++t) {
              if (players[t].id == e) {
                   return players[t];
              }
         }
         return null;
    }
    function findPlayerBySID(e) {
         for (let t = 0; t < players.length; t++) {
              if (players[t].sid == e) {
                   return players[t];
              }
         }
         return null;
    }
    function findAIBySID(e) {
         for (var t = 0; t < ais.length; ++t) {
              if (ais[t].sid == e) {
                   return ais[t];
              }
         }
         return null;
    }
    function findObjectBySid(e) {
         for (var t = 0; t < gameObjects.length; ++t) {
              if (gameObjects[t].sid == e) {
                   return gameObjects[t];
              }
         }
         return null;
    }
    function pingSocketResponse() {
         let e = Date.now() - lastPingSocket;
         if (player && e - window.pingTime >= 40 && e >= 90) {
              textManager.showText(player, 1000, 25, 0, "#f00", "Ping Spike");
         }
         window.pingTime = e;
    }
    function loadGameObject(e) {
         for (let t = 0; t < e.length;) {
              objectManager.add(e[t], e[t + 1], e[t + 2], e[t + 3], e[t + 4], e[t + 5], items.list[e[t + 6]], true, e[t + 7] >= 0 ? {
                   sid: e[t + 7]
              } : null);
              let i = gameObjects.find(i => i.sid == e[t]);
              let s = e[t + 6];
              let n = e[t + 7];
              let a = game.isFriendly(n);
              if (s == 15 && !a) {
                   i.hideFromEnemy = false;
              }
              if (items.list[s] && items.list[s].dmg && !a) {
                   let l = findPlayerBySID(n);
                   if (l && e[t] > l.spikeType.sid) {
                        l.spikeType.sid = e[t];
                        l.spikeType.id = s;
                   }
              }
              t += 8;
         }
    }
    function wiggleGameObject(e, t) {
         if (tmpObj = findObjectBySid(t)) {
              tmpObj.xWiggle += config.gatherWiggle * Math.cos(e);
              tmpObj.yWiggle += config.gatherWiggle * Math.sin(e);
              if (tmpObj.currentHealth) {
                   game.buildingsHit.push(tmpObj);
              }
         }
    }
    function shootTurret(e, t) {
         if (tmpObj = findObjectBySid(e)) {
              tmpObj.dir = t;
              tmpObj.xWiggle += config.gatherWiggle * Math.cos(t + Math.PI);
              tmpObj.yWiggle += config.gatherWiggle * Math.sin(t + Math.PI);
              tmpObj.turretReload = 2200;
         }
    }
    var inWindow = true;
    function addProjectile(e, t, i, s, n, a, l, o) {
         let r = {
              x: e - Math.cos(i) * 70,
              y: t - Math.sin(i) * 70
         };
         let c = {
              x: e,
              y: t
         };
         let d;
         let p = false;
         for (let h = 0; h < players.length; h++) {
              let g = players[h];
              if (g.visible) {
                   let $ = items.weapons[g.secondaryWeapon];
                   if (n == 1.5 && (UTILS.getDistance(g, c) <= 35 || UTILS.getDistance({
                        x: g.x,
                        y: g.y
                   }, c) <= 35)) {
                        d = g;
                        p = true;
                        break;
                   }
                   if ($ && $.projectile !== null && UTILS.getDistance(g, r) <= 35) {
                        d = g;
                        break;
                   }
              }
         }
         if (d) {
              let m = UTILS.getDistance(c, player);
              let u = UTILS.getDirection(player, c);
              if (p) {
                   d.reloads[53] = 2500;
                   d.turretHit = game.tick;
                   let f = items.weapons[d.primaryWeapon];
                   if (healer.checkIfUserCanOnetick(d) && UTILS.getAngleDist(i, u) <= 0.2 && UTILS.getDistance(d, player) - 95 <= f.range) {
                        hatSystem.addForcedAddOnValue(hatSystem.forceAddIndexs.otSoldier, 3);
                   }
                   if (UTILS.getAngleDist(i, u) <= 0.18) {
                        healer.addProjectile(d, 25, Math.ceil(Math.min(m, s) / 1.5));
                   }
              } else {
                   let y = n == 1.6 ? 9 : n == 2.5 ? 12 : n == 2 ? 13 : 15;
                   let x = items.weapons[y];
                   d.reloads[y] = x.speed;
                   d.secondaryWeapon = y;
                   d.secondaryHit = game.tick;
                   if (UTILS.getAngleDist(i, u) <= 0.18) {
                        healer.addProjectile(d, x.dmg, Math.ceil(Math.min(m, s) / n));
                   }
              }
         }
         if (inWindow) {
              projectileManager.addProjectile(e, t, i, s, n, a, d ? {
                   sid: d.sid
              } : null, null, l).sid = o;
         }
    }
    function remProjectile(e, t) {
         for (var i = 0; i < projectiles.length; ++i) {
              if (projectiles[i].sid == e) {
                   projectiles[i].range = t;
                   let s = projectiles[i].dmg;
                   let n = game.buildingsHit;
                   game.buildingsHit = [];
                   game.nextTick(() => {
                        for (let e = 0; e < n.length; e++) {
                             let t = n[e];
                             if (t && t.projDmg) {
                                  t.currentHealth -= s;
                                  t.lastHitTime = Date.now();
                                  if (scriptMenu.toggles.renderBuildingDamage) {
                                       renderBuildingDmgText(s, "player", tmpObj, t);
                                  }
                             }
                        }
                   });
              }
         }
    }
    function animateAI(e) {
         let t = findAIBySID(e);
         if (t && (t.startAnim(), t.name == "MOOSTAFA")) {
              let i = game.buildingsHit;
              game.buildingsHit = [];
              game.nextTick(() => {
                   for (let e = 0; e < i.length; e++) {
                        let s = i[e];
                        if (s) {
                             s.lastHitTime = Date.now();
                             s.currentHealth -= 232;
                             if (scriptMenu.toggles.renderBuildingDamage) {
                                  renderBuildingDmgText(232, "AI", t, s);
                             }
                        }
                   }
              });
         }
    }
    function loadAI(e) {
         for (var t = 0; t < ais.length; ++t) {
              ais[t].forcePos = !ais[t].visible;
              ais[t].visible = false;
         }
         if (e) {
              for (var i = Date.now(), t = 0; t < e.length;) {
                   let s = findAIBySID(e[t]);
                   if (s) {
                        s.index = e[t + 1];
                        s.t1 = s.t2 === undefined ? i : s.t2;
                        s.t2 = i;
                        s.x1 = s.x;
                        s.y1 = s.y;
                        s.x2 = e[t + 2];
                        s.y2 = e[t + 3];
                        s.d1 = s.d2 === undefined ? e[t + 4] : s.d2;
                        s.d2 = e[t + 4];
                        s.health = e[t + 5];
                        s.dt = 0;
                        s.visible = true;
                   } else {
                        (s = aiManager.spawn(e[t + 2], e[t + 3], e[t + 4], e[t + 1])).x2 = s.x;
                        s.y2 = s.y;
                        s.d2 = s.dir;
                        s.health = e[t + 5];
                        if (!aiManager.aiTypes[e[t + 1]].name) {
                             s.name = config.cowNames[e[t + 6]];
                        }
                        s.forcePos = true;
                        s.sid = e[t];
                        s.visible = true;
                   }
                   t += 7;
              }
         }
    }
    function removePlayer(e) {
         for (let t = 0; t < players.length; t++) {
              let i = players[t];
              if (i.id == e) {
                   scriptMenu.addLog("left", "", i.name, i.sid);
                   if (document.getElementById("enemyradar" + i.sid)) {
                        document.getElementById("enemyradar" + i.sid).remove();
                   }
                   players.splice(t, 1);
                   break;
              }
         }
    }
    function updateItems(e, t) {
         if (e) {
              if (t) {
                   let i = player.weapons.findIndex(e => chicken.preferedWeaponIndex == e);
                   player.weapons = e;
                   chicken.preferedWeaponIndex = player.weapons[i];
              } else {
                   player.items = e;
              }
         }
         for (let s = 0; s < items.list.length; ++s) {
              let n = items.weapons.length + s;
              document.getElementById("actionBarItem" + n).style.display = player.items.indexOf(items.list[s].id) >= 0 ? "inline-block" : "none";
         }
         for (let a = 0; a < items.weapons.length; ++a) {
              document.getElementById("actionBarItem" + a).style.display = player.weapons[items.weapons[a].type] == items.weapons[a].id ? "inline-block" : "none";
         }
    }
    function showItemInfo(e, t, i) {
         if (player && e) {
              UTILS.removeAllChildren(itemInfoHolder);
              itemInfoHolder.classList.add("visible");
              UTILS.generateElement({
                   id: "itemInfoName",
                   text: UTILS.capitalizeFirst(e.name),
                   parent: itemInfoHolder
              });
              UTILS.generateElement({
                   id: "itemInfoDesc",
                   text: e.desc,
                   parent: itemInfoHolder
              });
              if (i); else if (t) {
                   UTILS.generateElement({
                        class: "itemInfoReq",
                        text: e.type ? "secondary" : "primary",
                        parent: itemInfoHolder
                   });
              } else {
                   for (var s = 0; s < e.req.length; s += 2) {
                        UTILS.generateElement({
                             class: "itemInfoReq",
                             html: e.req[s] + "<span class='itemInfoReqVal'> x" + e.req[s + 1] + "</span>",
                             parent: itemInfoHolder
                        });
                   }
                   if (e.group.limit) {
                        UTILS.generateElement({
                             class: "itemInfoLmt",
                             text: (player.itemCounts[e.group.id] || 0) + "/" + (isSandbox && e.group.sandboxLimit || e.group.limit),
                             parent: itemInfoHolder
                        });
                   }
              }
         } else {
              itemInfoHolder.classList.remove("visible");
         }
    }
    function updateUpgrades(e, t) {
         let i = [];
         player.upgradePoints = e;
         player.upgrAge = t;
         if (e > 0) {
              UTILS.removeAllChildren(upgradeHolder);
              for (let s = 0; s < items.weapons.length; s++) {
                   let n = items.weapons[s];
                   if (n.age == t && (n.pre == undefined || player.weapons.indexOf(n.pre) >= 0)) {
                        UTILS.generateElement({
                             id: "upgradeItem" + s,
                             class: "actionBarItem",
                             onmouseout: function () {
                                  showItemInfo();
                             },
                             parent: upgradeHolder
                        }).style.backgroundImage = document.getElementById("actionBarItem" + s).style.backgroundImage;
                        i.push(s);
                   }
              }
              for (let a = 0; a < items.list.length; a++) {
                   if (items.list[a].age == t) {
                        let l = items.weapons.length + a;
                        UTILS.generateElement({
                             id: "upgradeItem" + l,
                             class: "actionBarItem",
                             onmouseout: function () {
                                  showItemInfo();
                             },
                             parent: upgradeHolder
                        }).style.backgroundImage = document.getElementById("actionBarItem" + l).style.backgroundImage;
                        i.push(l);
                   }
              }
              for (let o = 0; o < i.length; o++) {
                   let r = i[o];
                   let c = document.getElementById("upgradeItem" + r);
                   c.onmouseover = function () {
                        if (items.weapons[r]) {
                             showItemInfo(items.weapons[r], true);
                        } else {
                             showItemInfo(items.list[r - items.weapons.length]);
                        }
                   };
                   c.onclick = UTILS.checkTrusted(function () {
                        sendUpgrade(r);
                   });
                   if (scriptMenu.toggles.autoUpgrade) {
                        let d = false;
                        let p = parseInt(scriptMenu.toggles["7thSlot"]);
                        if (i.length == 1) {
                             sendUpgrade(r);
                        } else if (["17", "31", "23", p].find(e => c.id.includes(e))) {
                             sendUpgrade(r);
                        }
                        if (d) {
                             break;
                        }
                   }
                   UTILS.hookTouchEvents(c);
              }
              if (i.length) {
                   upgradeHolder.style.display = "block";
                   upgradeCounter.style.display = "block";
                   upgradeCounter.innerHTML = "SELECT ITEMS (" + Math.min(e, 8) + ")";
              } else {
                   upgradeHolder.style.display = "none";
                   upgradeCounter.style.display = "none";
                   showItemInfo();
              }
         } else {
              upgradeHolder.style.display = "none";
              upgradeCounter.style.display = "none";
              showItemInfo();
         }
    }
    function sendUpgrade(e) {
         io.send("H", e);
    }
    function updateStoreItems(e, t, i) {
         if (i) {
              if (e) {
                   player.tailIndex = t;
              } else {
                   player.tails[t] = 1;
              }
         } else if (e) {
              player.skinIndex = t;
         } else {
              player.skins[t] = 1;
         }
         if (game.shopList.length) {
              game.autoBuy(player.points);
         }
         if (storeMenu.style.display == "block") {
              generateStoreList();
         }
    }
    function createAlliance() {
         io.send("L", document.getElementById("allianceInput").value);
    }
    function generateStoreList() {
         if (player) {
              UTILS.removeAllChildren(storeHolder);
              var e = currentStoreIndex;
              for (var t = e ? accessories : hats, i = 0; i < t.length; ++i) {
                   if (!t[i].dontSell) {
                        (function (i) {
                             var s = UTILS.generateElement({
                                  id: "storeDisplay" + i,
                                  class: "storeItem",
                                  onmouseout: function () {
                                       showItemInfo();
                                  },
                                  onmouseover: function () {
                                       showItemInfo(t[i], false, true);
                                  },
                                  parent: storeHolder
                             });
                             UTILS.hookTouchEvents(s, true);
                             UTILS.generateElement({
                                  tag: "img",
                                  class: "hatPreview",
                                  src: "../img/" + (e ? "accessories/access_" : "hats/hat_") + t[i].id + (t[i].topSprite ? "_p" : "") + ".png",
                                  parent: s
                             });
                             UTILS.generateElement({
                                  tag: "span",
                                  text: t[i].name,
                                  parent: s
                             });
                             if (e ? player.tails[t[i].id] : player.skins[t[i].id]) {
                                  if ((e ? player.tailIndex : player.skinIndex) == t[i].id) {
                                       UTILS.generateElement({
                                            class: "joinAlBtn",
                                            style: "margin-top: 5px",
                                            text: "Unequip",
                                            onclick: function () {
                                                 hatSystem.storeEquip(0, e);
                                            },
                                            hookTouch: true,
                                            parent: s
                                       });
                                  } else {
                                       UTILS.generateElement({
                                            class: "joinAlBtn",
                                            style: "margin-top: 5px",
                                            text: "Equip",
                                            onclick: function () {
                                                 hatSystem.storeEquip(t[i].id, e);
                                            },
                                            hookTouch: true,
                                            parent: s
                                       });
                                  }
                             } else {
                                  UTILS.generateElement({
                                       class: "joinAlBtn",
                                       style: "margin-top: 5px",
                                       text: "Buy",
                                       onclick: function () {
                                            hatSystem.storeBuy(t[i].id, e);
                                       },
                                       hookTouch: true,
                                       parent: s
                                  });
                                  UTILS.generateElement({
                                       tag: "span",
                                       class: "itemPrice",
                                       text: t[i].price,
                                       parent: s
                                  });
                             }
                        })(i);
                   }
              }
         }
    }
    function addAlliance(e) {
         alliances.push(e);
         if (allianceMenu.style.display == "block") {
              showAllianceMenu();
         }
    }
    window.onblur = function () {
         inWindow = false;
    };
    window.onfocus = function () {
         inWindow = true;
         if (player && player.alive) {
              resetMoveDir();
              for (let e = 0; e < players.length; e++) {
                   players[e].resetReloads();
              }
         }
    };
    var allianceNotifications = [];
    var alliancePlayers = [];
    function updateNotifications() {
         if (allianceNotifications[0]) {
              var e = allianceNotifications[0];
              UTILS.removeAllChildren(noticationDisplay);
              noticationDisplay.style.display = "block";
              let t = chicken.chickenUsers.find(t => t.sid == e.sid);
              UTILS.generateElement({
                   class: "notificationText",
                   html: `${e.name}${t ? ` <span style="color: #f00;">(${t.name})</span>` : ""} {${e.sid}}`,
                   parent: noticationDisplay
              });
              UTILS.generateElement({
                   class: "notifButton",
                   html: "<i class='material-icons' style='font-size:28px;color:#cc5151;'>&#xE14C;</i>",
                   parent: noticationDisplay,
                   onclick: function () {
                        aJoinReq(0);
                   },
                   hookTouch: true
              });
              UTILS.generateElement({
                   class: "notifButton",
                   html: "<i class='material-icons' style='font-size:28px;color:#8ecc51;'>&#xE876;</i>",
                   parent: noticationDisplay,
                   onclick: function () {
                        aJoinReq(1);
                   },
                   hookTouch: true
              });
         } else {
              noticationDisplay.style.display = "none";
         }
    }
    function allianceNotification(e, t) {
         allianceNotifications.push({
              sid: e,
              name: t
         });
         updateNotifications();
    }
    function setPlayerTeam(e, t) {
         if (player) {
              player.team = e;
              player.isOwner = t;
              if (allianceMenu.style.display == "block") {
                   showAllianceMenu();
              }
         }
    }
    var alliancePlayers = [];
    function setAlliancePlayers(e) {
         alliancePlayers = e;
         let t = allianceNotifications.findIndex(e => alliancePlayers.includes(e.sid));
         if (t >= 0) {
              allianceNotifications.splice(t, 1);
              updateNotifications();
         }
         if (allianceMenu.style.display == "block") {
              showAllianceMenu();
         }
    }
    function updateLeaderboard(e) {
         UTILS.removeAllChildren(leaderboardData);
         var t = 1;
         for (var i = 0; i < e.length; i += 3) {
              (function (i) {
                   UTILS.generateElement({
                        class: "leaderHolder",
                        parent: leaderboardData,
                        children: [UTILS.generateElement({
                             class: "leaderboardItem",
                             style: `max-width: 220px; font-size: 14px; color: ${e[i] == playerSID ? "#fff" : chicken.chickenUsers.find(t => t.sid == e[i]) ? "#f00" : "rgb(255, 255, 255, .6"}`,
                             text: `${t}. ${e[i + 1] || "unknown"} {${e[i]}}`
                        }), UTILS.generateElement({
                             class: "leaderScore",
                             style: "font-size: 14px;",
                             text: UTILS.kFormat(e[i + 2]) || "0"
                        })]
                   });
              })(i);
              t++;
         }
    }
    function killObjects(e) {
         if (player) {
              objectManager.removeAllItems(e);
         }
    }
    function killObject(e) {
         let t = objectManager.disableBySid(e);
         if (t && player) {
              chicken.manageBuildingBreak(t);
         }
    }
    function updateAge(e, t, i) {
         if (e != undefined) {
              player.XP = e;
         }
         if (t != undefined) {
              player.maxXP = t;
         }
         if (i != undefined) {
              player.age = i;
         }
         if (i == config.maxAge) {
              ageText.innerHTML = "MAX AGE";
              ageBarBody.style.width = "100%";
         } else {
              ageText.innerHTML = "AGE " + player.age;
              ageBarBody.style.width = player.XP / player.maxXP * 100 + "%";
         }
    }
    function deleteAlliance(e) {
         for (var t = alliances.length - 1; t >= 0; t--) {
              if (alliances[t].sid == e) {
                   alliances.splice(t, 1);
              }
         }
         if (allianceMenu.style.display == "block") {
              showAllianceMenu();
         }
    }
    class MapPing {
         init(e, t) {
              this.scale = 0;
              this.x = e;
              this.y = t;
              this.active = true;
         }
         update(e, t) {
              if (this.active) {
                   this.scale += t * 0.05;
                   if (this.scale >= config.mapPingScale) {
                        this.active = false;
                   } else {
                        e.globalAlpha = 1 - Math.max(0, this.scale / config.mapPingScale);
                        e.beginPath();
                        e.arc(this.x / config.mapScale * mapDisplay.width, this.y / config.mapScale * mapDisplay.width, this.scale, 0, Math.PI * 2);
                        e.stroke();
                   }
              }
         }
    }
    function pingMap(e, t) {
         let i;
         for (var s = 0; s < mapPings.length; ++s) {
              if (!mapPings[s].active) {
                   i = mapPings[s];
                   break;
              }
         }
         if (!i) {
              i = new MapPing();
              mapPings.push(i);
         }
         i.init(e, t);
    }
    function updateMinimap(e) {
         minimapData = e;
    }
    async function autoTranslateMessage(e) {
         if (!scriptMenu.toggles.chatTranslate) {
              return e;
         }
         let t = "auto";
         let i = "en";
         if (e.includes("¯\\_(ツ)_/¯")) {
              return e;
         }
         let s = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=${t}&tl=${i}&dt=t&q=${encodeURIComponent(e)}`;
         try {
              let n = await fetch(s);
              if (!n.ok) {
                   return e;
              }
              {
                   let a = await n.json();
                   return a[0][0][0];
              }
         } catch (l) {
              return e;
         }
    }
    async function receiveChat(e, t, i) {
         let s = findPlayerBySID(e);
         if (s && Date.now() - s.lastChatDate >= 500) {
              s.lastChatDate = Date.now();
              let n = "#fff";
              if (t.includes("@@@@@")) {
                   t = "Spammed '@'";
                   n = "#ffc0cb";
              } else if (i) {
                   n = "#ffb400";
              }
              t = t.replace(/\/shrug|\/shrg|\/shurg|\/shrgu/g, "¯\\_(ツ)_/¯");
              let a = await autoTranslateMessage(t = scriptMenu.convertEmojis(t));
              let l = false;
              if (a !== t) {
                   t = a;
                   l = true;
                   n = "#ffc0cb";
              }
              s.chatMessages.unshift({
                   msg: t,
                   color: n,
                   duration: config.chatCountdown
              });
              let o = scriptMenu.toggles.chatLimit;
              if (s.chatMessages.length > o) {
                   s.chatMessages.splice(o);
              }
              if (!i) {
                   scriptMenu.addLog("chat", t, s.name, s.sid, l);
              }
         }
    }
    var gameObjectSprites = {};
    function getResSprite(e) {
         let t = scriptMenu.toggles.hyperPerformance;
         let i = e.y >= config.mapScale - config.snowBiomeTop ? 2 : e.y <= config.snowBiomeTop ? 1 : 0;
         let s = e.type + "_" + e.scale + "_" + i + (e.type == 0 ? e.colorType : "") + (scriptMenu.toggles.renderShadows ? "Shadow" : "") + t;
         let n = gameObjectSprites[s];
         if (!n) {
              var a = document.createElement("canvas");
              a.width = a.height = e.scale * 2.1 + outlineWidth;
              var l = a.getContext("2d");
              l.translate(a.width / 2, a.height / 2);
              l.rotate(UTILS.randFloat(0, Math.PI));
              l.strokeStyle = outlineColor;
              l.lineWidth = outlineWidth;
              if (scriptMenu.toggles.renderShadows) {
                   l.shadowBlur = 8;
                   l.shadowColor = t ? "rgb(0, 0, 255, .8)" : "rgb(0, 0, 0, .7)";
              }
              if (e.type == 0) {
                   for (var o = 0; o < 2; ++o) {
                        renderStar(l, Math.random() < 0.25 ? 5 : 7, c = tmpObj.scale * (o ? 0.5 : 1), c * 0.7);
                        let r = t ? "#0000ff" : i ? `hsl(191, 20%, ${85 + Math.floor(Math.random() * 10)}%)` : `hsl(80, 45%, ${38 + Math.floor(Math.random() * 10)}%)`;
                        l.fillStyle = t ? "#0000ff" : i ? o ? "#fff" : Math.random() > 0.5 ? r : "#e3f1f4" : o ? "#b4db62" : Math.random() > 0.5 ? r : "#9ebf57";
                        l.fill();
                        if (!o) {
                             l.stroke();
                        }
                   }
              } else if (e.type == 1) {
                   if (i == 2) {
                        l.fillStyle = t ? "#0000ff" : "#606060";
                        renderStar(l, 6, e.scale * 0.3, e.scale * 0.71);
                        l.fill();
                        l.stroke();
                        l.fillStyle = t ? "#0000ff" : "#89a54c";
                        renderCircle(0, 0, e.scale * 0.55, l);
                        l.fillStyle = t ? "#0000ff" : "#a5c65b";
                        renderCircle(0, 0, e.scale * 0.3, l, true);
                   } else {
                        renderBlob(l, 6, tmpObj.scale, tmpObj.scale * 0.7);
                        l.fillStyle = t ? "#0000ff" : i ? "#e3f1f4" : "#89a54c";
                        l.fill();
                        l.stroke();
                        l.fillStyle = t ? "#0000ff" : i ? "#6a64af" : "#c15555";
                        var c;
                        var d;
                        for (var p = 4, h = mathPI2 / p, o = 0; o < p; ++o) {
                             renderCircle((d = UTILS.randInt(tmpObj.scale / 3.5, tmpObj.scale / 2.3)) * Math.cos(h * o), d * Math.sin(h * o), UTILS.randInt(10, 12), l);
                        }
                   }
              } else if (e.type == 2 || e.type == 3) {
                   l.fillStyle = t ? "#0000ff" : e.type == 2 ? i == 2 ? "#938d77" : "#939393" : "#e0c655";
                   renderStar(l, 3, e.scale, e.scale);
                   l.fill();
                   l.stroke();
                   l.fillStyle = t ? "#0000ff" : e.type == 2 ? i == 2 ? "#b2ab90" : "#bcbcbc" : "#ebdca3";
                   renderStar(l, 3, e.scale * 0.55, e.scale * 0.65);
                   l.fill();
              }
              n = a;
              gameObjectSprites[s] = n;
         }
         return n;
    }
    function updateGame() {
         let e = players.find(e => e.sid == botManager.playingAsData?.sid) || player;
         if ((botManager.playingAsData || !scriptMenu.toggles.mouseless) && (!lastSent || now - lastSent >= 1000 / config.clientSendRate)) {
              lastSent = now;
              if (scriptMenu.toggles.mouseless) {
                   chicken.sendAim(chicken.getAttackDir(false, true));
              } else {
                   let t = chicken.mouseAimDir();
                   if (typeof t == "number") {
                        chicken.sendAim(t);
                   }
              }
         }
         if (singerManager.isSinging && keysActive()) {
              let i = singerManager.songChats[singerManager.songIndx];
              let s = singerManager.songAudios[singerManager.songIndx];
              singerManager.currentTime += delta;
              if (s.paused) {
                   s.play();
              }
              if (i[singerManager.syncChatIndx]) {
                   let n = i[singerManager.syncChatIndx];
                   if (singerManager.currentTime >= n.time) {
                        io.send("6", n.lyrics.slice(0, 30));
                        singerManager.syncChatIndx++;
                   }
              } else if (singerManager.currentTime >= s.duration * 1000 && singerManager.syncChatIndx >= 0) {
                   singerManager.syncChatIndx = 0;
                   singerManager.currentTime = 0;
                   singerManager.resetAllAudios();
                   singerManager.isSinging = false;
              }
         } else if (!keysActive() && singerManager.isSinging) {
              singerManager.songAudios[singerManager.songIndx].pause();
         }
         if (deathTextScale < 120) {
              deathTextScale += delta * 0.1;
              diedText.style.fontSize = Math.min(Math.round(deathTextScale), 120) + "px";
         }
         if (e) {
              let a;
              let l;
              let o = 0;
              let r = 0;
              a = UTILS.getDistance({
                   x: camX,
                   y: camY
              }, {
                   x: e.x + o,
                   y: e.y + r
              });
              l = UTILS.getDirection({
                   x: e.x + o,
                   y: e.y + r
              }, {
                   x: camX,
                   y: camY
              });
              let c = Math.min(a * 0.01 * delta, a);
              if (a > 0.05) {
                   camX += c * Math.cos(l);
                   camY += c * Math.sin(l);
              } else {
                   camX = e.x + o;
                   camY = e.y + r;
              }
         } else {
              mainMenuManager.tmpCamera.x += Math.cos(mainMenuManager.tmpCamera.dir) * 0.75 * delta;
              mainMenuManager.tmpCamera.y += Math.sin(mainMenuManager.tmpCamera.dir) * 0.75 * delta;
              if (mainMenuManager.tmpCamera.x <= 0 || mainMenuManager.tmpCamera.x >= config.mapScale) {
                   mainMenuManager.tmpCamera.x = Math.random() * config.mapScale;
                   mainMenuManager.tmpCamera.dir = Math.random() * Math.PI * 2;
              }
              if (mainMenuManager.tmpCamera.y <= 0 || mainMenuManager.tmpCamera.y >= config.mapScale) {
                   mainMenuManager.tmpCamera.y = Math.random() * config.mapScale;
                   mainMenuManager.tmpCamera.dir = Math.random() * Math.PI * 2;
              }
              camX = mainMenuManager.tmpCamera.x;
              camY = mainMenuManager.tmpCamera.y;
         }
         var d;
         var p = now - 1000 / config.serverUpdateRate;
         for (var h = 0; h < players.length + ais.length; ++h) {
              if ((tmpObj = players[h] || ais[h - players.length]) && tmpObj.visible) {
                   if (tmpObj.forcePos) {
                        tmpObj.x = tmpObj.x2;
                        tmpObj.y = tmpObj.y2;
                        tmpObj.dir = tmpObj.d2;
                   } else {
                        var g = tmpObj.t2 - tmpObj.t1;
                        var $ = (p - tmpObj.t1) / g;
                        var m = 170;
                        tmpObj.dt += delta;
                        var u = Math.min(1.7, tmpObj.dt / m);
                        var d = tmpObj.x2 - tmpObj.x1;
                        tmpObj.x = tmpObj.x1 + d * u;
                        d = tmpObj.y2 - tmpObj.y1;
                        tmpObj.y = tmpObj.y1 + d * u;
                        tmpObj.dir = Math.lerpAngle(tmpObj.d2, tmpObj.d1, Math.min(1.2, $));
                   }
              }
         }
         var f = camX - maxScreenWidth / 2;
         var y = camY - maxScreenHeight / 2;
         if (scriptMenu.toggles.hyperPerformance) {
              mainContext.fillStyle = "#ffff00";
              mainContext.fillRect(0, 0, maxScreenWidth, maxScreenHeight);
         } else if (config.snowBiomeTop - y <= 0 && config.mapScale - config.snowBiomeTop - y >= maxScreenHeight) {
              mainContext.fillStyle = "#b6db66";
              mainContext.fillRect(0, 0, maxScreenWidth, maxScreenHeight);
         } else if (config.mapScale - config.snowBiomeTop - y <= 0) {
              mainContext.fillStyle = "#dbc666";
              mainContext.fillRect(0, 0, maxScreenWidth, maxScreenHeight);
         } else if (config.snowBiomeTop - y >= maxScreenHeight) {
              mainContext.fillStyle = "#fff";
              mainContext.fillRect(0, 0, maxScreenWidth, maxScreenHeight);
         } else if (config.snowBiomeTop - y >= 0) {
              mainContext.fillStyle = "#fff";
              mainContext.fillRect(0, 0, maxScreenWidth, config.snowBiomeTop - y);
              mainContext.fillStyle = "#b6db66";
              mainContext.fillRect(0, config.snowBiomeTop - y, maxScreenWidth, maxScreenHeight - (config.snowBiomeTop - y));
         } else {
              mainContext.fillStyle = "#b6db66";
              mainContext.fillRect(0, 0, maxScreenWidth, config.mapScale - config.snowBiomeTop - y);
              mainContext.fillStyle = "#dbc666";
              mainContext.fillRect(0, config.mapScale - config.snowBiomeTop - y, maxScreenWidth, maxScreenHeight - (config.mapScale - config.snowBiomeTop - y));
         }
         if ((waterMult += waterPlus * config.waveSpeed * delta) >= config.waveMax) {
              waterMult = config.waveMax;
              waterPlus = -1;
         } else if (waterMult <= 1) {
              waterMult = waterPlus = 1;
         }
         mainContext.globalAlpha = 1;
         mainContext.fillStyle = "#dbc666";
         renderWaterBodies(f, y, mainContext, config.riverPadding);
         mainContext.fillStyle = "#91b2db";
         renderWaterBodies(f, y, mainContext, (waterMult - 1) * 250);
         mainContext.globalAlpha = 1;
         mainContext.strokeStyle = outlineColor;
         renderGameObjects(-1, f, y);
         mainContext.globalAlpha = 1;
         mainContext.lineWidth = outlineWidth;
         renderProjectiles(0, f, y);
         renderPlayers(f, y, 0);
         mainContext.globalAlpha = 1;
         let x = scriptMenu.toggles.renderShadows;
         for (var h = 0; h < ais.length; ++h) {
              if ((tmpObj = ais[h]).active && tmpObj.visible) {
                   tmpObj.animate(delta);
                   mainContext.save();
                   mainContext.translate(tmpObj.x - f, tmpObj.y - y);
                   mainContext.rotate(tmpObj.dir + tmpObj.dirPlus - Math.PI / 2);
                   if (x) {
                        mainContext.shadowBlur = 8;
                        mainContext.shadowColor = "rgb(0, 0, 0, .7)";
                   }
                   renderAI(tmpObj, mainContext);
                   mainContext.restore();
              }
         }
         game.manageTurretReload(delta);
         renderGameObjects(0, f, y);
         renderProjectiles(1, f, y);
         renderGameObjects(1, f, y);
         renderPlayers(f, y, 1);
         renderGameObjects(2, f, y);
         renderGameObjects(3, f, y);
         mainContext.fillStyle = "#000";
         mainContext.globalAlpha = 0.09;
         if (f <= 0) {
              mainContext.fillRect(0, 0, -f, maxScreenHeight);
         }
         if (config.mapScale - f <= maxScreenWidth) {
              var b = Math.max(0, -y);
              mainContext.fillRect(config.mapScale - f, b, maxScreenWidth - (config.mapScale - f), maxScreenHeight - b);
         }
         if (y <= 0) {
              mainContext.fillRect(-f, 0, maxScreenWidth + f, -y);
         }
         if (config.mapScale - y <= maxScreenHeight) {
              var k = Math.max(0, -f);
              var _ = 0;
              if (config.mapScale - f <= maxScreenWidth) {
                   _ = maxScreenWidth - (config.mapScale - f);
              }
              mainContext.fillRect(k, config.mapScale - y, maxScreenWidth - k - _, maxScreenHeight - (config.mapScale - y));
         }
         if (scriptMenu.toggles.renderBuildingHP) {
              mainContext.globalAlpha = 1;
              for (let v = 0; v < game.closeObjects.length; v++) {
                   let w = game.closeObjects[v];
                   if (w && w.active && w.currentHealth && w.currentHealth != w.health && Math.hypot(w.y - e.y, w.x - e.x) < 300 + w.scale) {
                        mainContext.fillStyle = darkOutlineColor;
                        mainContext.roundRect(w.x + w.xWiggle - f - config.healthBarWidth / 2 - config.healthBarPad, w.y + w.yWiggle - y - config.healthBarPad, config.healthBarWidth + config.healthBarPad * 2, 17, 8);
                        mainContext.fill();
                        mainContext.fillStyle = game.isMine(w.owner.sid) ? "#8ecc51" : game.isAlly(w.owner.sid) ? "#ffff00" : "#cc5151";
                        mainContext.roundRect(w.x + w.xWiggle - f - config.healthBarWidth / 2, w.y + w.yWiggle - y, config.healthBarWidth * (Math.max(0, w.currentHealth) / w.health), 17 - config.healthBarPad * 2, 7);
                        mainContext.fill();
                   }
              }
         }
         deathAnimationHandler.renderAnimations(mainContext, delta, f, y);
         if (scriptMenu.toggles.renderKnockbackVisualization) {
              for (let T = 0; T < kbSimulator.animations.length; T++) {
                   let S = kbSimulator.animations[T];
                   if (S) {
                        let I = UTILS.getDirection(S.pos.new, S.pos.old);
                        let B = UTILS.getDistance(S.pos.old, S.pos.new) * (1 - Math.max(0, S.duration) / S.maxDuration);
                        let D = {
                             x: S.pos.old.x + Math.cos(I) * B,
                             y: S.pos.old.y + Math.sin(I) * B
                        };
                        mainContext.save();
                        mainContext.translate(D.x - f, D.y - y);
                        renderPlayer(S, mainContext);
                        mainContext.restore();
                        S.duration -= delta;
                        if (S.duration <= -(S.maxDuration * 0.375)) {
                             kbSimulator.animations.splice(T, 1);
                        }
                   }
              }
         } else {
              kbSimulator.animations = [];
         }
         mainContext.globalAlpha = 1;
         if (scriptMenu.toggles.renderPlacements) {
              for (let E = 0; E < placer.markers.length; E++) {
                   let P = placer.markers[E];
                   if (P && !isNaN(P.x) && !isNaN(P.y)) {
                        mainContext.save();
                        mainContext.translate(P.x - f, P.y - y);
                        if (P.differentVisual) {
                             mainContext.fillStyle = P.id == e.items[2] ? "rgb(255, 0, 0, .45)" : "rgb(0, 255, 255, .45)";
                             renderCircle(0, 0, P.scale, mainContext, true, false);
                        } else {
                             mainContext.globalAlpha = P.name == "pit trap" ? 0.18 : 0.3;
                             mainContext.rotate(P.angle);
                             let A = getItemSprite(P);
                             mainContext.drawImage(A, -(A.width / 2), -(A.height / 2));
                        }
                        mainContext.restore();
                   }
              }
         }
         mainContext.globalAlpha = 1;
         mainContext.fillStyle = `rgba(0, 0, 70, ${scriptMenu.toggles.hyperPerformance ? 0 : 0.35})`;
         mainContext.fillRect(0, 0, maxScreenWidth, maxScreenHeight);
         mainContext.strokeStyle = darkOutlineColor;
         if (chicken.pushing) {
              let C = chicken.pushing;
              mainContext.save();
              mainContext.globalAlpha = 1;
              mainContext.lineWidth = 6;
              if (C.path) {
                   mainContext.beginPath();
                   mainContext.strokeStyle = "#00ffff";
                   mainContext.moveTo(e.x - f, e.y - y);
                   for (let L = 0; L < C.path.length; L++) {
                        let H = C.path[L];
                        if (H) {
                             mainContext.lineTo(H.x - f, H.y - y);
                        }
                   }
                   mainContext.stroke();
                   mainContext.beginPath();
                   mainContext.strokeStyle = "#fff";
                   mainContext.moveTo(C.path[C.path.length - 1].x - f, C.path[C.path.length - 1].y - y);
                   mainContext.lineTo(C.first.x - f, C.first.y - y);
                   mainContext.lineTo(C.last.x - f, C.last.y - y);
                   mainContext.stroke();
              } else {
                   mainContext.beginPath();
                   mainContext.strokeStyle = "#fff";
                   mainContext.moveTo(e.x - f, e.y - y);
                   mainContext.lineTo(C.first.x - f, C.first.y - y);
                   mainContext.lineTo(C.last.x - f, C.last.y - y);
                   mainContext.stroke();
              }
              mainContext.restore();
         }
         mainContext.globalAlpha = 1;
         if (chicken.grid) {
              for (let O = 0; O < chicken.grid.length; O++) {
                   let W = chicken.grid[O];
                   mainContext.save();
                   mainContext.translate(W.x - f, W.y - y);
                   mainContext.fillStyle = "rgb(0, 0, 0, .4)";
                   renderCircle(0, 0, 5, mainContext, true, false);
                   mainContext.restore();
              }
         }
         textManager.update(delta, mainContext, f, y);
         for (let j = 0; j < players.length + ais.length; j++) {
              let M = players[j] || ais[j - players.length];
              if (M && (M.isPlayer && inWindow && M.manageReloads(delta, M.visible), M.visible)) {
                   let R = (M.team ? "[" + M.team + "] " : "") + (M.name || "");
                   if (!scriptMenu.toggles.renderNames) {
                        R = "";
                   }
                   if (R != "") {
                        mainContext.font = (M.nameScale || 30) + "px Hammersmith One";
                        mainContext.fillStyle = "#fff";
                        mainContext.textBaseline = "middle";
                        mainContext.textAlign = "center";
                        mainContext.lineWidth = M.nameScale ? 11 : 8;
                        mainContext.lineJoin = "round";
                        mainContext.strokeText(R, M.x - f, M.y - y - M.scale - config.nameY);
                        mainContext.fillText(R, M.x - f, M.y - y - M.scale - config.nameY);
                   }
                   if (M.isLeader && iconSprites.crown.isLoaded) {
                        var F = config.crownIconScale;
                        var k = M.x - f - F / 2 - mainContext.measureText(R).width / 2 - config.crownPad;
                        mainContext.drawImage(iconSprites.crown, k, M.y - y - M.scale - config.nameY - F / 2 - 5, F, F);
                   }
                   if (M.iconIndex == 1 && iconSprites.skull.isLoaded) {
                        var F = config.crownIconScale;
                        var k = M.x - f - F / 2 + mainContext.measureText(R).width / 2 + config.crownPad;
                        mainContext.drawImage(iconSprites.skull, k, M.y - y - M.scale - config.nameY - F / 2 - 5, F, F);
                   }
                   if (M.isPlayer && game.enemies.nearest && (chicken.autoTriggerOneShot || instaManager.holdModeOT) && M.sid == game.enemies.nearest.sid && iconSprites.crosshair.isLoaded) {
                        F = config.playerScale * 2 - 10;
                        mainContext.drawImage(iconSprites.crosshair, M.x - f - F / 2, M.y - y - F / 2, F, F);
                   }
                   if (M.isPlayer) {
                        if (!botManager.botSids.includes(M.sid)) {
                             if (scriptMenu.toggles.renderReloadingBars) {
                                  if (M.reloads[M.secondaryWeapon] > 0) {
                                       let z = 1 - M.reloads[M.secondaryWeapon] / items.weapons[M.secondaryWeapon].speed;
                                       mainContext.fillStyle = darkOutlineColor;
                                       mainContext.roundRect(M.x - f + 2 - config.healthBarPad, M.y - y + M.scale + config.nameY - 13, 47 + config.healthBarPad * 2, 17, 10);
                                       mainContext.fill();
                                       mainContext.fillStyle = "#a5974c";
                                       mainContext.roundRect(M.x - f + 2, M.y - y + M.scale + config.nameY - 13 + config.healthBarPad, z * 47, 16 - config.healthBarPad * 2, 10);
                                       mainContext.fill();
                                  }
                                  if (M.reloads[M.primaryWeapon] > 0) {
                                       let V = 1 - M.reloads[M.primaryWeapon] / items.weapons[M.primaryWeapon].speed;
                                       mainContext.fillStyle = darkOutlineColor;
                                       mainContext.roundRect(M.x - f - 50 - config.healthBarPad, M.y - y + M.scale + config.nameY - 13, 47 + config.healthBarPad * 2, 17, 10);
                                       mainContext.fill();
                                       mainContext.fillStyle = "#a5974c";
                                       mainContext.roundRect(M.x - f - 50, M.y - y + M.scale + config.nameY - 13 + config.healthBarPad, V * 47, 16 - config.healthBarPad * 2, 10);
                                       mainContext.fill();
                                  }
                             }
                             let G = chicken.chickenUsers.find(e => e.sid == M.sid);
                             if (G && G.sid != e.sid) {
                                  let q = G.name.slice(0, 12) + (G.length >= 15 ? "..." : "");
                                  mainContext.textAlign = "center";
                                  mainContext.fillStyle = "#f00";
                                  mainContext.lineJoin = "round";
                                  mainContext.font = "15px Hammersmith One";
                                  mainContext.strokeStyle = darkOutlineColor;
                                  mainContext.lineWidth = 6;
                                  mainContext.strokeText(q, M.x - f, M.y - y - M.scale - config.nameY + 20);
                                  mainContext.fillText(q, M.x - f, M.y - y - M.scale - config.nameY + 20);
                             }
                             if (M.isPlayer && (M.sid == playerSID || !game.isAlly(M.sid))) {
                                  let K = M == player && keys[16] ? "true" : M.shameCount;
                                  if (!game.isFriendly(M.sid)) {
                                       K = M.primaryWeapon + " " + M.shameCount + " " + M.secondaryWeapon;
                                  }
                                  mainContext.textAlign = "center";
                                  mainContext.fillStyle = M == player && !keys[16] && M.shameCount > 5 ? "#f00" : "#fff";
                                  mainContext.lineJoin = "round";
                                  mainContext.font = "20px Hammersmith One";
                                  mainContext.strokeStyle = darkOutlineColor;
                                  mainContext.lineWidth = 6;
                                  mainContext.strokeText(K, M.x - f, M.y - y + M.scale + config.nameY + 30);
                                  mainContext.fillText(K, M.x - f, M.y - y + M.scale + config.nameY + 30);
                             }
                             if (scriptMenu.toggles.renderHealthText) {
                                  if (G) {
                                       if (G.sid == e.sid) {
                                            G = false;
                                       }
                                       if (!G.name) {
                                            G = false;
                                       }
                                  }
                                  let N = `[${M.health.toString().includes(".") ? UTILS.fixTo(M.health, 4) : M.health}${M.sid == playerSID ? `,${healer.healingPotential.toString().includes(".") ? UTILS.fixTo(healer.healingPotential, 4) : healer.healingPotential}` : ""}${game.isFriendly(M.sid) ? "" : `,${items.list[M.spikeType?.id || 9].dmg}`}]`;
                                  mainContext.textAlign = "center";
                                  mainContext.fillStyle = "#fff";
                                  mainContext.lineJoin = "round";
                                  mainContext.font = "20px Hammersmith One";
                                  mainContext.strokeStyle = darkOutlineColor;
                                  mainContext.lineWidth = 6;
                                  mainContext.strokeText(N, M.x - f, M.y - y - M.scale - config.nameY + (G ? 40 : 20));
                                  mainContext.fillText(N, M.x - f, M.y - y - M.scale - config.nameY + (G ? 40 : 20));
                             }
                        }
                        let X = "";
                        X = M.sid == playerSID ? keys[16] ? playerSID : packetManager.packets.sec : game.isAlly(M.sid) ? keys[16] ? `${M.sid}${pingTracker.data[M.id] ? `/${pingTracker.data[M.id].ping}` : "/0"}` : M.sid : `${M.sid}${pingTracker.data[M.id] ? `/${pingTracker.data[M.id].ping}` : "/0"}`;
                        mainContext.fillStyle = "#fff";
                        mainContext.lineJoin = "round";
                        mainContext.font = "18px Hammersmith One";
                        mainContext.strokeStyle = darkOutlineColor;
                        mainContext.lineWidth = 6;
                        mainContext.strokeText(X, M.x - f, M.y - y);
                        mainContext.fillText(X, M.x - f, M.y - y);
                   }
                   if (M.health > 0) {
                        mainContext.fillStyle = darkOutlineColor;
                        mainContext.roundRect(M.x - f - config.healthBarWidth - config.healthBarPad, M.y - y + M.scale + config.nameY, config.healthBarWidth * 2 + config.healthBarPad * 2, 17, 8);
                        mainContext.fill();
                        mainContext.fillStyle = M == player || M.team && M.team == e.team ? "#8ecc51" : "#cc5151";
                        mainContext.roundRect(M.x - f - config.healthBarWidth, M.y - y + M.scale + config.nameY + config.healthBarPad, config.healthBarWidth * 2 * (M.health / M.maxHealth), 17 - config.healthBarPad * 2, 7);
                        mainContext.fill();
                   }
              }
         }
         for (let U = 0; U < players.length; U++) {
              let Z = players[U];
              if (Z.visible) {
                   for (let Y = 0; Y < Z.chatMessages.length; Y++) {
                        let J = Z.chatMessages[Y];
                        if (J) {
                             J.duration -= delta;
                             mainContext.font = "28px Hammersmith One";
                             let Q = mainContext.measureText(J.msg);
                             mainContext.textBaseline = "middle";
                             mainContext.textAlign = "center";
                             let ee = Z.x - f;
                             if (J.add == null) {
                                  J.add = 0;
                             }
                             let et = Y * 44;
                             if (J.add < et) {
                                  J.add += et / 100 * delta;
                             } else {
                                  J.add = et;
                             }
                             let ei = Z.y - Z.scale - y - 90 - J.add;
                             let es = 37;
                             let en = Q.width + 17;
                             mainContext.fillStyle = scriptMenu.toggles.hyperPerformance ? "rgb(0, 0, 255, .8)" : "rgba(0, 0, 0, 0.2)";
                             mainContext.roundRect(ee - en / 2, ei - es / 2 + 10, en, es, 6);
                             mainContext.fill();
                             mainContext.fillStyle = J.color;
                             mainContext.fillText(J.msg, ee, ei + 10);
                             if (J.duration <= 0) {
                                  Z.chatMessages.splice(Y, 1);
                             }
                        }
                   }
              }
         }
         renderMinimap(delta);
         effectsManager.animate(delta);
    }
    function isOnScreen(e, t, i) {
         return e + i >= 0 && e - i <= maxScreenWidth && t + i >= 0 && t - i <= maxScreenHeight;
    }
    function renderProjectiles(e, t, i) {
         for (var s = 0; s < projectiles.length; ++s) {
              if ((tmpObj = projectiles[s]).active && tmpObj.layer == e) {
                   tmpObj.update(delta);
                   if (tmpObj.active && isOnScreen(tmpObj.x - t, tmpObj.y - i, tmpObj.scale)) {
                        mainContext.save();
                        mainContext.translate(tmpObj.x - t, tmpObj.y - i);
                        mainContext.rotate(tmpObj.dir);
                        renderProjectile(0, 0, tmpObj, mainContext, 1);
                        mainContext.restore();
                   }
              }
         }
    }
    CanvasRenderingContext2D.prototype.roundRect = function (e, t, i, s, n) {
         if (i < n * 2) {
              n = i / 2;
         }
         if (s < n * 2) {
              n = s / 2;
         }
         if (n < 0) {
              n = 0;
         }
         this.beginPath();
         this.moveTo(e + n, t);
         this.arcTo(e + i, t, e + i, t + s, n);
         this.arcTo(e + i, t + s, e, t + s, n);
         this.arcTo(e, t + s, e, t, n);
         this.arcTo(e, t, e + i, t, n);
         this.closePath();
         return this;
    };
    var projectileSprites = {};
    function renderProjectile(e, t, i, s, n) {
         if (i.src) {
              var a = items.projectiles[i.indx].src;
              var l = projectileSprites[a];
              if (!l) {
                   (l = new Image()).onload = function () {
                        this.isLoaded = true;
                   };
                   l.src = ".././img/weapons/" + a + ".png";
                   projectileSprites[a] = l;
              }
              if (l.isLoaded) {
                   s.drawImage(l, e - i.scale / 2, t - i.scale / 2, i.scale, i.scale);
              }
         } else if (i.indx == 1) {
              s.fillStyle = "#939393";
              renderCircle(e, t, i.scale, s);
         }
    }
    function renderWaterBodies(e, t, i, s) {
         var n = config.riverWidth + s;
         var a = config.mapScale / 2 - t - n / 2;
         if (a < maxScreenHeight && a + n > 0) {
              i.fillRect(0, a, maxScreenWidth, n);
         }
    }
    function renderMinimap(e) {
         if (player && player.alive) {
              mapContext.clearRect(0, 0, mapDisplay.width, mapDisplay.height);
              mapContext.strokeStyle = "#fff";
              mapContext.lineWidth = 4;
              for (var t = 0; t < mapPings.length; ++t) {
                   mapPings[t].update(mapContext, e);
              }
              mapContext.globalAlpha = 1;
              mapContext.fillStyle = "#fff";
              renderCircle(player.x / config.mapScale * mapDisplay.width, player.y / config.mapScale * mapDisplay.height, 7, mapContext, true);
              mapContext.fillStyle = "rgba(255,255,255,0.35)";
              if (player.team && minimapData) {
                   for (var t = 0; t < minimapData.length;) {
                        renderCircle(minimapData[t] / config.mapScale * mapDisplay.width, minimapData[t + 1] / config.mapScale * mapDisplay.height, 7, mapContext, true);
                        t += 2;
                   }
              }
              if (chickenSocketHandler.userPositions.length) {
                   for (let i = 0; i < chickenSocketHandler.userPositions.length; i++) {
                        let s = chickenSocketHandler.userPositions[i];
                        if (s && s.sid != player.sid) {
                             mapContext.globalAlpha = 1;
                             mapContext.fillStyle = "#ffff00";
                             renderCircle(s.x / config.mapScale * mapDisplay.width, s.y / config.mapScale * mapDisplay.height, 7, mapContext, true);
                        }
                   }
              }
              if (lastDeath) {
                   mapContext.fillStyle = "#fc5553";
                   mapContext.font = "34px Hammersmith One";
                   mapContext.textBaseline = "middle";
                   mapContext.textAlign = "center";
                   mapContext.fillText("x", lastDeath.x / config.mapScale * mapDisplay.width, lastDeath.y / config.mapScale * mapDisplay.height);
              }
              if (mapMarker) {
                   mapContext.fillStyle = "#fff";
                   mapContext.font = "34px Hammersmith One";
                   mapContext.textBaseline = "middle";
                   mapContext.textAlign = "center";
                   mapContext.fillText("x", mapMarker.x / config.mapScale * mapDisplay.width, mapMarker.y / config.mapScale * mapDisplay.height);
              }
         }
    }
    var aiSprites = {};
    function renderAI(e, t) {
         var i = e.index;
         var s = aiSprites[i];
         if (!s) {
              var n = new Image();
              n.onload = function () {
                   this.isLoaded = true;
                   this.onload = null;
              };
              n.src = ".././img/animals/" + e.src + ".png";
              s = n;
              aiSprites[i] = s;
         }
         if (s.isLoaded) {
              var a = e.scale * 1.2 * (e.spriteMlt || 1);
              t.drawImage(s, -a, -a, a * 2, a * 2);
         }
    }
    var volanco = {
         land: null,
         lava: null,
         animationTime: 0,
         x: 13960,
         y: 13960
    };
    function drawRegularPolygon(e, t, i) {
         let s = e.lineWidth || 0;
         let n = i / 2;
         e.beginPath();
         let a = Math.PI * 2 / t;
         for (let l = 0; l < t; l++) {
              let o = n + (n - s / 2) * Math.cos(a * l);
              let r = n + (n - s / 2) * Math.sin(a * l);
              e.lineTo(o, r);
         }
         e.closePath();
    }
    function drawVolancoImage() {
         let e = config.volanoScale * 2;
         let t = document.createElement("canvas");
         t.width = e;
         t.height = e;
         let i = t.getContext("2d");
         i.strokeStyle = "#3e3e3e";
         i.lineWidth = outlineWidth * 2;
         i.fillStyle = "#7f7f7f";
         drawRegularPolygon(i, 10, e);
         i.fill();
         i.stroke();
         volanco.land = t;
         let s = config.innerVolcanoScale * 2;
         let n = document.createElement("canvas");
         n.width = s;
         n.height = s;
         let a = n.getContext("2d");
         a.strokeStyle = outlineColor;
         a.lineWidth = outlineWidth * 1.6;
         a.fillStyle = "#f54e16";
         a.strokeStyle = "#f56f16";
         drawRegularPolygon(a, 10, s);
         a.fill();
         a.stroke();
         volanco.lava = n;
    }
    function renderGameObjects(e, t, i) {
         var s;
         var n;
         var a;
         for (var l = 0; l < gameObjects.length; l++) {
              if ((tmpObj = gameObjects[l]).active && (n = tmpObj.x + tmpObj.xWiggle - t, a = tmpObj.y + tmpObj.yWiggle - i, e == 0 && tmpObj.update(delta), tmpObj.layer == e && isOnScreen(n, a, tmpObj.scale + (tmpObj.blocker || 0)))) {
                   mainContext.globalAlpha = tmpObj.trap && scriptMenu.toggles.trapsAlwaysTransparent ? 0.6 : tmpObj.hideFromEnemy ? 0.6 : 1;
                   if (tmpObj.isItem) {
                        s = getItemSprite(tmpObj);
                        mainContext.save();
                        mainContext.translate(n, a);
                        mainContext.rotate(tmpObj.dir);
                        mainContext.drawImage(s, -(s.width / 2), -(s.height / 2));
                        if (tmpObj.blocker) {
                             mainContext.strokeStyle = "#db6e6e";
                             mainContext.globalAlpha = 0.3;
                             mainContext.lineWidth = 6;
                             renderCircle(0, 0, tmpObj.blocker, mainContext, false, true);
                        }
                        if (tmpObj.name == "turret") {
                             let o = 1 - tmpObj.turretReload / 2200;
                             mainContext.strokeStyle = "#fff";
                             mainContext.beginPath();
                             mainContext.arc(0, 0, tmpObj.scale * 0.6, 0, Math.PI * 2 * o);
                             mainContext.stroke();
                        }
                        if (chicken.objBreakingTarget && (chicken.objBreakingTarget.moreThanOneSpiek ? chicken.objBreakingTarget.sids.includes(tmpObj.sid) : chicken.objBreakingTarget.sid == tmpObj.sid) && !hatSystem.velSoldier) {
                             let r = chicken.equipBestBreakWeapon("", true);
                             if (healer.reloadPercent(player, r) + config.serverUpdateSpeed / items.weapons[r].speed >= 1) {
                                  mainContext.fillStyle = "#f00";
                                  mainContext.globalAlpha = 0.2;
                                  renderCircle(0, 0, tmpObj.scale, mainContext, true, false);
                             }
                        }
                        mainContext.restore();
                   } else {
                        s = getResSprite(tmpObj);
                        if (tmpObj.type == 4) {
                             mainContext.globalAlpha = 1;
                             volanco.animationTime += delta;
                             volanco.animationTime %= config.volcanoAnimationDuration;
                             let c = config.volcanoAnimationDuration / 2;
                             let d = 1.7 + Math.abs(c - volanco.animationTime) / c * 0.3;
                             let p = config.innerVolcanoScale * d;
                             mainContext.drawImage(volanco.land, n - config.volanoScale, a - config.volanoScale, config.volanoScale * 2, config.volanoScale * 2);
                             mainContext.drawImage(volanco.lava, n - p, a - p, p * 2, p * 2);
                        } else {
                             mainContext.globalAlpha = 1;
                             if (player && scriptMenu.toggles.treeFade && tmpObj.type == 0) {
                                  mainContext.fillStyle = "rgb(0, 0, 0, .4)";
                                  mainContext.strokeStyle = "rgb(0, 0, 0, .5)";
                                  renderCircle(n, a, tmpObj.scale * 0.6, mainContext, false, false);
                                  let h = 235 + tmpObj.scale;
                                  let g = (tmpObj.scale * 0.6 + 52.5) / h;
                                  let $ = Math.min(h, UTILS.getDistance({
                                       x: player.x,
                                       y: player.y
                                  }, tmpObj)) / h;
                                  mainContext.globalAlpha = Math.max($ - g * (1 - $), 0.15);
                             }
                             mainContext.drawImage(s, n - s.width / 2, a - s.height / 2);
                        }
                   }
              }
         }
    }
    drawVolancoImage();
    var moveKeys = {
         87: [0, -1],
         38: [0, -1],
         83: [0, 1],
         40: [0, 1],
         65: [-1, 0],
         37: [-1, 0],
         68: [1, 0],
         39: [1, 0]
    };
    function keysActive() {
         return (document.activeElement.tagName != "INPUT" || document.activeElement.type != "number" && document.activeElement.type != "text") && document.activeElement.id != "chickenChatBox" && allianceMenu.style.display != "block" && chatHolder.style.display != "flex";
    }
    class Bot {
         constructor(e, t, i) {
              this.manager = botManager;
              this.project = i;
              this.amount = t || 0;
              this.socket = e;
              e.onopen = () => {
                   this.manager.projects.find(e => e.link == i).isActive = true;
                   this.manager.requestBots(e, this.amount);
              };
              e.onmessage = t => {
                   let i = JSON.parse(t.data);
                   if (i.type == "canSendNow") {
                        this.manager.requestBots(e, this.amount);
                   } else if (i.type == "botSidRemove") {
                        let s = botManager.botSids.findIndex(e => e == i.sid);
                        if (s >= 0) {
                             botManager.botSids.splice(s, 1);
                        }
                   } else if (i.type == "botSid") {
                        botManager.botSids.push(i.sid);
                   } else if (i.type == "playingAS") {
                        botManager.playingAsData = {
                             socket: e,
                             sid: i.sid
                        };
                   } else if (i.type == "updatePlayers") {
                        doPlayerUpdates(i.data);
                   } else if (i.type == "addPlayer") {
                        addPlayer(i.data, false, true);
                   } else if (i.type == "loadObjects") {
                        loadGameObject(i.data);
                   } else if (i.type == "killObject") {
                        killObject(i.data);
                   } else if (i.type == "killObjects") {
                        killObjects(i.data);
                   } else if (i.type == "chat") {
                        receiveChat(...i.data);
                   } else if (i.type == "gatherAnimation") {
                        gatherAnimation(...i.data);
                   } else if (i.type == "wiggleGameObject") {
                        wiggleGameObject(...i.data);
                   }
              };
              e.onclose = () => {
                   let e = this.manager.bots.findIndex(e => e.project == this.project);
                   this.manager.bots.splice(e, 1);
                   this.manager.projects.find(e => e.link == i).isActive = false;
              };
         }
    }
    var botManager = new class {
         constructor() {
              this.addOn = 0;
              this.projects = [{
                   link: "coco-delirious-nut",
                   isActive: false
              }, {
                   link: "tartan-octagonal-buckthorn",
                   isActive: false
              }, {
                   link: "fixed-morning-holiday",
                   isActive: false
              }, {
                   link: "plant-roasted-bee",
                   isActive: false
              }, {
                   link: "rambunctious-momentous-diagnostic",
                   isActive: false
              }, {
                   link: "festive-handsomely-glue",
                   isActive: false
              }, {
                   link: "shine-wide-beret",
                   isActive: false
              }, {
                   link: "lacy-foggy-swift",
                   isActive: false
              }, {
                   link: "lace-cypress-plywood",
                   isActive: false
              }, {
                   link: "steady-eight-offer",
                   isActive: false
              }];
              this.bots = [];
              this.botSids = [];
         }
         getTokens(e) {
              let t = [];
              for (let i = 0; i < e; i++) {
                   let s = new Promise(async (e, t) => {
                        e(await altKeyManager.getToken());
                   });
                   t.push(s);
              }
              return Promise.all(t);
         }
         sendToServer(e, t) {
              if (e.readyState == 1) {
                   e.send(JSON.stringify(t));
              }
         }
         async requestBots(e, t) {
              let i = await this.getTokens(t);
              this.sendToServer(e, {
                   type: "add",
                   ip: window.wsAddress,
                   tokens: i
              });
         }
         getTargetArray() {
              if (!scriptMenu.toggles.botTargetSids) {
                   return [];
              }
              let e = [...new Set(scriptMenu.toggles.botTargetSids.split(",").map(Number))];
              return e.filter(e => !Number.isNaN(e));
         }
         getCircleAddOn() {
              let e = items.weapons[scriptMenu.toggles.botPrimaryWeapon];
              let t = hats.find(e => e.id == 6);
              let i = accessories.find(e => e.id == 11);
              return (e.spdMult || 1) * (t && t.spdMult || 1) * (i && i.spdMult || 1) * game.tickSpeed * 0.5 / scriptMenu.toggles.botCircleSize;
         }
         getBaseCirclingAngles() {
              let e = Math.PI * 2;
              let t = Math.PI / (this.amountOfBotsYouHaveInServer * 0.5);
              let i = [];
              this.addOn += this.getCircleAddOn();
              for (let s = 0; s < e; s += t) {
                   i.push(s + this.addOn);
              }
              return i;
         }
         updateBots() {
              updateCursorLocation();
              let e = this.getTargetArray();
              this.amountOfBotsYouHaveInServer = this.bots.filter(e => !e.disconnected).reduce((e, t) => e + t.amount, 0);
              if (!this.amountOfBotsYouHaveInServer) {
                   this.botSids = [];
              }
              let t = this.bots.length ? this.getBaseCirclingAngles() : [];
              let i = 0;
              for (let s = 0; s < this.bots.length; s++) {
                   let n = this.bots[s];
                   if (!n.disconnected) {
                        this.sendToServer(n.socket, {
                             type: "update",
                             msg: {
                                  ownerPos: {
                                       x: players.find(e => e.sid == botManager.playingAsData?.sid)?.x2 || player.x2,
                                       y: players.find(e => e.sid == botManager.playingAsData?.sid)?.y2 || player.y2,
                                       enemy: game.enemies.nearest ? {
                                            x: game.enemies.nearest.x2,
                                            y: game.enemies.nearest.y2
                                       } : undefined,
                                       buildings: botManager.playingAsData ? [] : gameObjects.filter(e => e.active && (e.trap || e.dmg) && e.owner.sid == player.sid && UTILS.getDistance(e, player) >= parseInt(scriptMenu.toggles.botBreakingRadius)),
                                       cursorLocation: chicken.cursorLocation
                                  },
                                  ownerTeam: player.team,
                                  botModule: scriptMenu.toggles.botModule,
                                  botMovement: scriptMenu.toggles.botMovementModule,
                                  targetType: scriptMenu.toggles.autoaimBotModule,
                                  circleRad: parseInt(scriptMenu.toggles.botCircleSize),
                                  playerDist: parseInt(scriptMenu.toggles.playerDistance),
                                  breakingRad: parseInt(scriptMenu.toggles.botBreakingRadius),
                                  primaryWeaponSelector: parseInt(scriptMenu.toggles.botPrimaryWeapon),
                                  targetSids: e,
                                  botNames: scriptMenu.toggles.botNames,
                                  autoplace: scriptMenu.toggles.botAutoplace,
                                  killOnSight: scriptMenu.toggles.botKillOnSight,
                                  fixedCircles: t.slice(i, i + 4)
                             }
                        });
                        i += 4;
                   }
              }
         }
         killChat(e) {
              for (let t = 0; t < this.bots.length; t++) {
                   let i = this.bots[t];
                   if (!i.disconnected) {
                        this.sendToServer(i.socket, {
                             type: "killChat",
                             name: e
                        });
                   }
              }
         }
         addBots(e) {
              let t = this.projects.filter(e => e.isActive && this.bots.find(e => e.project == e.link && e.amount < 4 && !e.disconnected));
              for (let i = 0; i < t.length && !(e <= 0); i++) {
                   let s = this.bots.find(e => e.project == t[i].link && !e.disconnected);
                   let n = 4 - s.amount;
                   e -= n;
                   s.amount += n;
                   this.requestBots(s.socket, n);
              }
              let a = this.projects.filter(e => !e.isActive);
              for (let l = 0; l < a.length && !(e <= 0); l++) {
                   let o = a[l];
                   let r = `wss://${o.link}.glitch.me/`;
                   let c = new WebSocket(r);
                   this.bots.push(new Bot(c, Math.min(e, 4), o.link));
                   e -= 4;
              }
         }
         removeBots(e) {
              let t = this.bots.filter(e => e.amount > 0 && !e.disconnected);
              for (let i = 0; i < t.length; i++) {
                   let s = t[i];
                   let n = Math.min(e, 4);
                   e -= n;
                   s.amount -= n;
                   if (s.amount <= 0) {
                        s.disconnected = true;
                   }
                   this.sendToServer(s.socket, {
                        type: "remove",
                        amount: n
                   });
                   if (e <= 0) {
                        break;
                   }
              }
         }
    }();
    var singerManager = new class {
         constructor() {
              this.songs = [{
                   label: "Don Toliver - TORE UP",
                   selected: true,
                   value: 0
              }, {
                   label: "V O E - Giants",
                   value: 1
              }, {
                   label: "Ace - Adrenaline",
                   value: 2
              }];
              this.syncChatIndx = 0;
              this.songChatPaths = ["DonToliver-ToreUp.json", "V_O_E-Giants.json", "Ace-Adrenaline.json"];
              this.songAudios = [new Audio("https://cdn.glitch.global/28f0537b-f314-4270-9a7e-9f8c6c223e95/DonToliver-TORE_UP.mp3?v=1720102520354"), new Audio("https://cdn.glitch.global/28f0537b-f314-4270-9a7e-9f8c6c223e95/V_O_E-Giants.mp3?v=1720102536082"), new Audio("https://cdn.glitch.global/28f0537b-f314-4270-9a7e-9f8c6c223e95/Ace-Adrenaline.mp3?v=1720102538472")];
              this.songChats = [];
              this.isSinging = false;
              this.currentTime = 0;
              for (let e = 0; e < this.songAudios.length; e++) {
                   this.songAudios[e].onerror = () => {
                        console.log("Failed loading: Song " + (e + 1));
                   };
              }
              this.fetchSongChats();
         }
         resetAllAudios() {
              for (let e = 0; e < this.songAudios.length; e++) {
                   let t = this.songAudios[e];
                   t.pause();
                   t.currentTime = 0;
              }
         }
         async fetchSongChats() {
              let e = await Promise.all(this.songChatPaths.map(e => fetch(`https://pond-hallowed-blackcurrant.glitch.me/song-chats?filePath=${e}`).then(e => e.json())));
              this.songChats = e;
         }
         toggle() {
              this.songIndx = scriptMenu.toggles.songType;
              this.isSinging = !this.isSinging;
              this.currentTime = 0;
              if (this.isSinging) {
                   let e = this.songAudios[this.songIndx];
                   e.currentTime = 0;
                   this.syncChatIndx = 0;
                   e.play();
              } else {
                   this.resetAllAudios();
              }
         }
    }();
    var scriptMenu = new class {
         constructor() {
              this.ignored = [];
              this.items = [];
              let e = document.createElement("script");
              e.src = "https://cdn.jsdelivr.net/npm/[email protected]/lib/js/emojione.min.js";
              document.body.appendChild(e);
              this.menu = document.createElement("div");
              this.menu.style = "position: absolute; opacity: 0; pointer-events: none; z-index: 1000; top: 50%; left: 50%; width: 700px; height: 475px; transform: translate(-50%, -50%); border-radius: 6px; background-color: rgba(0, 0, 0, .6); transition: all ease-in .5s; overflow: hidden;";
              this.tabHolder = document.createElement("div");
              this.tabHolder.style = "position: absolute; top: 0px; left: 0px; width: 212.5px; height: calc(100% - 40px); background-color: rgba(0, 0, 0, .1);";
              this.menu.appendChild(this.tabHolder);
              this.socketPing = document.createElement("div");
              this.socketPing.style = "justify-content: center; position: absolute; display: flex; align-items: center; bottom: 0px; left: 0px; width: 212.5px; height: 40px; background-color: rgba(0, 0, 0, 0.1); font-size: 12px; color: white;";
              this.socketPing.innerText = "Not connected";
              this.menu.appendChild(this.socketPing);
              this.itemHolder = document.createElement("div");
              this.itemHolder.style = "position: absolute; top: 0px; left: 212.5px; width: calc(100% - 212.5px); height: 100%; overflow: hidden;";
              this.menu.appendChild(this.itemHolder);
              this.toggles = {};
              this.keyBinds = {};
              this.keyBindsAction = {};
              document.body.appendChild(this.menu);
              this.darkModeElement = document.createElement("div");
              this.darkModeElement.style = "opacity: 0; position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; background-color: rgb(0, 0, 70, .25); pointer-events: none; transition: 5s; ";
              document.body.insertBefore(this.darkModeElement, this.menuElement);
              let t = this.initTabs([{
                   label: "Home",
                   icon: "https://i.imgur.com/Da9LKoE.png"
              }, {
                   label: "Combat",
                   icon: "https://i.imgur.com/sR5JnTE.png"
              }, {
                   label: "Defense",
                   icon: "https://i.imgur.com/0fz1qiE.png"
              }, {
                   label: "Visual",
                   icon: "https://i.imgur.com/cJOwD3n.png"
              }, {
                   label: "Bots",
                   icon: "https://i.imgur.com/g6p10wB.png"
              }, {
                   label: "Logs",
                   icon: "https://i.imgur.com/XWv7qI9.png"
              }, {
                   label: "Notes",
                   icon: "https://i.imgur.com/9fbjRuw.png"
              }]);
              this.initItems([[{
                   label: "Auto Upgrade",
                   id: "autoUpgrade",
                   type: "group toggle",
                   options: [{
                        label: "7th Slot",
                        id: "7thSlot",
                        type: "select",
                        options: [{
                             label: "Teleport",
                             selected: true,
                             value: 38
                        }, {
                             label: "Turret",
                             value: 33
                        }, {
                             label: "Healing Pad",
                             value: 35
                        }, {
                             label: "Blocker",
                             value: 37
                        }, {
                             label: "Platform",
                             value: 34
                        }]
                   }],
                   checked: true
              }, {
                   label: "Auto Grind",
                   id: "autoGrind",
                   type: "toggle"
              }, {
                   label: "Kill Chat",
                   id: "killChat",
                   type: "toggle"
              }, {
                   label: "Chat Translation",
                   id: "chatTranslate",
                   type: "toggle"
              }, {
                   label: "Mouseless",
                   id: "mouseless",
                   type: "toggle",
                   checked: true
              }, {
                   label: "Collect User Stats",
                   id: "collectStats",
                   type: "toggle",
                   checked: window.scriptVersion != "Dev"
              }, {
                   label: "Chat Message Limit",
                   id: "chatLimit",
                   type: "number",
                   value: 3,
                   max: 3,
                   min: 0
              }, {
                   label: "Placement",
                   type: "group",
                   options: [{
                        label: "Depth",
                        id: "placementDepth",
                        type: "number",
                        value: 16,
                        min: 0
                   }, {
                        label: "Throttle",
                        id: "placementThrottle",
                        type: "number",
                        value: 2,
                        max: 4,
                        min: 1
                   }, {
                        label: "Dual Angle Finding",
                        id: "dualAngleFinder",
                        type: "toggle",
                        checked: true
                   }]
              }, {
                   label: "Song Type",
                   id: "songType",
                   type: "select",
                   options: [...singerManager.songs]
              }, {
                   label: "Song Volume",
                   id: "songVolume",
                   type: "number",
                   max: 100,
                   min: 0,
                   value: 100,
                   margin: true
              }], [{
                   label: "Auto Place",
                   id: "autoplace",
                   type: "group toggle",
                   options: [{
                        label: "Preplacements",
                        id: "preplace",
                        type: "toggle",
                        checked: true
                   }, {
                        label: "Auto Placer Range",
                        id: "autoPlacerRange",
                        type: "number",
                        value: 400,
                        max: 14000,
                        size: 15,
                        min: 170
                   }]
              }, {
                   label: "Auto Push",
                   id: "autopush",
                   type: "group toggle",
                   options: [{
                        label: "Distance",
                        id: "autoPushDistance",
                        type: "number",
                        max: 800,
                        value: 300,
                        min: 0
                   }, {
                        label: "Override Pathfinding",
                        id: "pathfindOverride",
                        type: "toggle",
                        checked: true
                   }],
                   checked: true
              }, {
                   label: "Auto Hitting",
                   type: "group",
                   options: [{
                        label: "ATOS Key",
                        id: "atosKey",
                        key: "r",
                        type: "keybind",
                        logic() {
                             sendMapPing();
                        }
                   }, {
                        label: "Auto Insta",
                        id: "autoInsta",
                        type: "toggle",
                        checked: true
                   }, {
                        label: "Auto Bull Hits",
                        id: "autohit",
                        type: "toggle",
                        checked: true
                   }, {
                        label: "Melee Sync",
                        id: "doMeleeSync",
                        type: "toggle"
                   }, {
                        label: "Spiek Tick",
                        id: "spiekTick",
                        type: "group toggle",
                        checked: true,
                        options: [{
                             label: "Do with Daggers",
                             id: "doWithDaggers",
                             type: "toggle"
                        }]
                   }]
              }, {
                   label: "One Tick",
                   type: "group",
                   options: [{
                        label: "One Tick Key",
                        id: "oneTickKey",
                        type: "keybind",
                        key: "t",
                        logic() { }
                   }, {
                        label: "Auto One Tick",
                        id: "autoOneTick",
                        type: "group toggle",
                        options: [{
                             label: "Ignore Soldier",
                             id: "oneTickIgnoreSoldier",
                             type: "toggle"
                        }]
                   }]
              }, {
                   label: "Bullspam",
                   type: "group",
                   options: [{
                        label: "Allow Intrap",
                        id: "bullSpamInTrap",
                        type: "toggle"
                   }, {
                        label: "Safe Dagger Spamming",
                        id: "safeSoldierSpamming",
                        type: "toggle",
                        checked: true
                   }],
                   margin: true
              }], [{
                   label: "Auto Replace",
                   id: "autoreplace",
                   type: "toggle",
                   checked: true
              }, {
                   label: "Auto EMP",
                   id: "autoEMP",
                   type: "toggle",
                   checked: true
              }, {
                   label: "Auto Buy",
                   id: "autobuy",
                   type: "toggle",
                   checked: true
              }, {
                   label: "Healing",
                   type: "group",
                   options: [{
                        label: "Use Soldier-EMP Anti",
                        id: "soldierEMP",
                        type: "toggle",
                        checked: true
                   }, {
                        label: "Sensitive Healing",
                        id: "sensitiveHealing",
                        type: "toggle",
                        checked: true
                   }]
              }, {
                   label: "Auto Breaking",
                   type: "group",
                   options: [{
                        label: "In Trap",
                        id: "inTrapBreak",
                        type: "toggle",
                        checked: true
                   }, {
                        label: "Out of Trap",
                        id: "outOfTrapBreak",
                        type: "group toggle",
                        options: [{
                             label: "Ignore Soldier",
                             id: "ignoreSoldierWhenBreakingOutOfTrap",
                             type: "toggle",
                             checked: true
                        }],
                        checked: true
                   }]
              }, {
                   label: "Auto Brake",
                   id: "autoBrake",
                   type: "toggle",
                   checked: true,
                   margin: true
              }], [{
                   label: "Render Knockback Visualization",
                   id: "renderKnockbackVisualization",
                   type: "toggle",
                   checked: true
              }, {
                   label: "Health",
                   type: "group",
                   options: [{
                        label: "Render Building HP",
                        id: "renderBuildingHP",
                        type: "toggle",
                        checked: true
                   }, {
                        label: "Render Building Damage",
                        id: "renderBuildingDamage",
                        type: "toggle",
                        checked: true
                   }, {
                        label: "Render Health Text",
                        id: "renderHealthText",
                        type: "toggle",
                        checked: true
                   }]
              }, {
                   label: "GoL",
                   type: "group",
                   options: [{
                        label: "Render Player/AI Names",
                        id: "renderNames",
                        type: "toggle",
                        checked: true
                   }, {
                        label: "Tree Fade",
                        id: "treeFade",
                        type: "toggle",
                        checked: true
                   }, {
                        label: "Render Reloading Bars",
                        id: "renderReloadingBars",
                        type: "toggle",
                        checked: true
                   }, {
                        label: "Stack Damage/Heal Text",
                        id: "stackText",
                        type: "toggle"
                   }, {
                        label: "Hyper Performance",
                        id: "hyperPerformance",
                        type: "toggle"
                   }, {
                        label: "Render Shadows",
                        id: "renderShadows",
                        type: "toggle"
                   }, {
                        label: "Render Dark Overlay",
                        id: "renderDarkMode",
                        type: "toggle"
                   }, {
                        label: "Render Placements",
                        id: "renderPlacements",
                        type: "toggle",
                        checked: true
                   }]
              }, {
                   label: "Render All Traps Transparent",
                   id: "trapsAlwaysTransparent",
                   type: "toggle"
              }, {
                   label: "Render Real Direction",
                   id: "renderRealDir",
                   type: "toggle",
                   checked: true,
                   margin: true
              }], [{
                   label: "Bot Names",
                   id: "botNames",
                   type: "list"
              }, {
                   label: "General Module",
                   id: "botModule",
                   type: "select",
                   options: [{
                        label: "Musket Sync",
                        value: 0,
                        selected: true
                   }, {
                        label: "Bow Spam",
                        value: 1
                   }, {
                        label: "Object Breaker (Owner)",
                        value: 2
                   }, {
                        label: "Object Breaker (All)",
                        value: 3
                   }]
              }, {
                   label: "Movement Module",
                   id: "botMovementModule",
                   type: "select",
                   options: [{
                        label: "Follow Player",
                        selected: true,
                        value: "normal"
                   }, {
                        label: "Circle Player",
                        value: "circle"
                   }, {
                        label: "Follow Mouse",
                        value: "mouse"
                   }, {
                        label: "Stop Moving",
                        value: "stop"
                   }]
              }, {
                   label: "Autoaim Module",
                   id: "autoaimBotModule",
                   type: "select",
                   options: [{
                        label: "Nearest to Player",
                        value: "player"
                   }, {
                        label: "Nearest to Bot",
                        value: "bot"
                   }]
              }, {
                   label: "Primary Weapon",
                   id: "botPrimaryWeapon",
                   type: "select",
                   options: [{
                        label: "Short Sword",
                        selected: true,
                        value: 3
                   }, {
                        label: "Daggers",
                        value: 7
                   }, {
                        label: "Polearm",
                        value: 5
                   }, {
                        label: "Bat",
                        value: 6
                   }]
              }, {
                   label: "Bot Target Sids",
                   id: "botTargetSids",
                   type: "text",
                   size: 90,
                   value: ""
              }, {
                   label: "Circle Size",
                   id: "botCircleSize",
                   type: "number",
                   value: 300,
                   min: 35,
                   size: 10,
                   max: 6000
              }, {
                   label: "Player Distance",
                   id: "playerDistance",
                   type: "number",
                   value: 200,
                   min: 35,
                   size: 10,
                   max: 6000
              }, {
                   label: "Breaking Radius",
                   id: "botBreakingRadius",
                   type: "number",
                   value: 900,
                   min: 200,
                   size: 15,
                   max: 14000
              }, {
                   label: "Auto Place Traps",
                   id: "botAutoplace",
                   type: "toggle"
              }, {
                   label: "Kill-On Sight",
                   id: "botKillOnSight",
                   type: "toggle"
              }, {
                   label: "Mouse Movement",
                   id: "botMouseMovement",
                   type: "keybind",
                   key: "B",
                   logic() {
                        let e = document.getElementById("select:id:botMovementModule");
                        e.selectedIndex = 2;
                        let t = new Event("change", {
                             bubbles: true
                        });
                        e.dispatchEvent(t);
                        textManager.showText(player, 2000, 15, 0, "#fff", "Bot Movement");
                        textManager.showText({
                             x: player.x,
                             y: player.y + 20
                        }, 2000, 15, 0, "#fff", "Mouse");
                   }
              }, {
                   label: "Stop Movement",
                   id: "botStopMovement",
                   type: "keybind",
                   key: "O",
                   logic() {
                        let e = document.getElementById("select:id:botMovementModule");
                        e.selectedIndex = 3;
                        let t = new Event("change", {
                             bubbles: true
                        });
                        e.dispatchEvent(t);
                        textManager.showText(player, 2000, 15, 0, "#fff", "Bot Movement");
                        textManager.showText({
                             x: player.x,
                             y: player.y + 20
                        }, 2000, 15, 0, "#fff", "Stop");
                   }
              }, {
                   label: "Player Movement",
                   id: "botPlayerMovement",
                   type: "keybind",
                   key: "M",
                   logic() {
                        let e = document.getElementById("select:id:botMovementModule");
                        e.selectedIndex = 0;
                        let t = new Event("change", {
                             bubbles: true
                        });
                        e.dispatchEvent(t);
                        textManager.showText(player, 2000, 15, 0, "#fff", "Bot Movement");
                        textManager.showText({
                             x: player.x,
                             y: player.y + 20
                        }, 2000, 15, 0, "#fff", "Player");
                   }
              }, {
                   label: "Object Breaker (All)",
                   id: "botObjBreakerAll",
                   type: "keybind",
                   key: "b",
                   logic() {
                        let e = document.getElementById("select:id:botModule");
                        e.selectedIndex = 3;
                        let t = new Event("change", {
                             bubbles: true
                        });
                        e.dispatchEvent(t);
                        textManager.showText(player, 2000, 15, 0, "#fff", "Bot Module");
                        textManager.showText({
                             x: player.x,
                             y: player.y + 20
                        }, 2000, 15, 0, "#fff", "Obj Breaker (All)");
                   }
              }, {
                   label: "Object Breaker (Owner)",
                   id: "botObjBreakerOwner",
                   type: "keybind",
                   key: "o",
                   logic() {
                        let e = document.getElementById("select:id:botModule");
                        e.selectedIndex = 2;
                        let t = new Event("change", {
                             bubbles: true
                        });
                        e.dispatchEvent(t);
                        textManager.showText(player, 2000, 15, 0, "#fff", "Bot Module");
                        textManager.showText({
                             x: player.x,
                             y: player.y + 20
                        }, 2000, 15, 0, "#fff", "Obj Breaker (Owner)");
                   }
              }, {
                   label: "Musket Sync",
                   id: "botMusketSyncModule",
                   type: "keybind",
                   key: "m",
                   logic() {
                        let e = document.getElementById("select:id:botModule");
                        e.selectedIndex = 0;
                        let t = new Event("change", {
                             bubbles: true
                        });
                        e.dispatchEvent(t);
                        textManager.showText(player, 2000, 15, 0, "#fff", "Bot Module");
                        textManager.showText({
                             x: player.x,
                             y: player.y + 20
                        }, 2000, 15, 0, "#fff", "Musket Sync");
                   }
              }, {
                   label: "Target Nearest to Player",
                   id: "botTargetNearestToPlayerModule",
                   type: "keybind",
                   key: "G",
                   logic() {
                        let e = document.getElementById("select:id:autoaimBotModule");
                        e.selectedIndex = 0;
                        let t = new Event("change", {
                             bubbles: true
                        });
                        e.dispatchEvent(t);
                        textManager.showText(player, 2000, 15, 0, "#fff", "Target Type");
                        textManager.showText({
                             x: player.x,
                             y: player.y + 20
                        }, 2000, 15, 0, "#fff", "Player");
                   }
              }, {
                   label: "Target Nearest to Bot",
                   id: "botTargetNearestToSelfModule",
                   type: "keybind",
                   key: "T",
                   logic() {
                        let e = document.getElementById("select:id:autoaimBotModule");
                        e.selectedIndex = 1;
                        let t = new Event("change", {
                             bubbles: true
                        });
                        e.dispatchEvent(t);
                        textManager.showText(player, 2000, 15, 0, "#fff", "Target Type");
                        textManager.showText({
                             x: player.x,
                             y: player.y + 20
                        }, 2000, 15, 0, "#fff", "Bot");
                   }
              }, {
                   label: "Bot Trap Placer",
                   id: "botToggleTrapPlacer",
                   type: "keybind",
                   key: "p",
                   logic: () => {
                        document.getElementById("toggle:id:botAutoplace").click();
                        textManager.showText(player, 2000, 15, 0, "#fff", "Bot Autoplace");
                        textManager.showText({
                             x: player.x,
                             y: player.y + 20
                        }, 2000, 15, 0, "#fff", this.toggles.botAutoplace ? "Enabled" : "Disabled");
                   },
                   margin: true
              }], [], [{
                   label: "Chat commands",
                   type: "group",
                   options: [],
                   text: `
                   Chicken mod also has tons of chat commands!<br><br>
                   Use the ${this.highlightText("\"!cbot *message*\"")} command to make all active bots chat the message.<br>
                   Use the ${this.highlightText("\"!play *sid*\"")} command to play as a bot.<br>
                   Use the ${this.highlightText("\"!play stop\"")} command to stop playing as a bot.<br>
                   Use the ${this.highlightText("\"!clan\"")} command to quick create a clan.
                   Use the ${this.highlightText("\"!target/untarget *sid*\"")} command to target/untarget a sid for priority aimming for the bots.<br>
                   Use the ${this.highlightText("\"!ignore *sid/name*\"")} command to make the chatlogger ignore players with name/sid.<br>
                   Use the ${this.highlightText("\"!stop *sid/name*\"")} command to make the chatlogger stop ignoring players with name/sid.<br><br>
                   Please note that when ignoring/unignoring players with the name function of the command, values are case-sensitive.
                   `
              }, {
                   label: "Private chat",
                   type: "group",
                   options: [],
                   text: `
                   Chicken mod has its own built-in chat feature! You can chat with other users privately without outsiders knowing!<br><br>
                   Use the ${this.highlightText("\"Alt / Option\"")} key along with enter, to quick select the private chat box.<br>
                   Use the command ${this.highlightText("\"!clear\"")} on the private chatbox, to manually clear the chatlog<br><br>
                   You can also use the private chat inside the ${this.highlightText("Logs")} section of the menu!
                   `
              }, {
                   label: "Bots",
                   type: "group",
                   options: [],
                   text: `
                   ${this.highlightText("Playing as a bot")}: When playing as a bot, your main player becomes unresponsive and all inputs are redirected the to bot you are playing. Please also note that when playing as a bot, it may be impossible to return to playing normally because of object rendering glitches that mega refuses to fix.<br>
                   ${this.highlightText("Recommended bots to use")}: It is recommended to use at most ${this.highlightText("20")} bots. Although chicken mod supports up to 38, it may get laggy if your computer/wifi can't handle the mass amount of data transfer that's required to maintain bots.
                   `
              }, {
                   label: "Useful trivia",
                   type: "group",
                   options: [],
                   text: `
                   When autobreak is being dumb (breaking object when it's out of range), hold the ${this.highlightText("\"Shift\"")} key to force it to hit trap.<br>
                   If the script gets stuck/bugged, you can press the ${this.highlightText("\"Z\"")} key to try and debug the script. Please note that depending on the type of bug, the key might not always work.<br>
                   The ${this.highlightText("\"Melee Sync\"")} toggle only melee syncs with other chicken mod users (if they have the toggle on as well).<br><br>
                   The ${this.highlightText("\"X ms / X bots\"")} display on the menu are self-explanatory: X ms stands for your ping for chicken mod's built-in websocket, and X bots means the total amount of active bots in the server
                   `
              }, {
                   label: "Admin controls",
                   type: "group",
                   options: [],
                   text: `
                   If you are a chicken admin, to access the admin-console: <a href="https://pond-hallowed-blackcurrant.glitch.me/users">click here</a><br><br>
                   Use the command ${this.highlightText("\"!cinvis *boolean*\"")}, to hide your username from other chicken users.<br>
                   Use the command ${this.highlightText("\"!cjumpscare\"")}, to jumpscare other chicken mod users.<br>
                   Use the command ${this.highlightText("\"!cfreeze *sid* *duration=in_seconds*\"")}, freeze a chicken user for X seconds.<br>
                   Use the command ${this.highlightText("\"!ckick *sid*\"")}, kicks a chicken user from the game.
                   `
              }, {
                   label: "Credits",
                   type: "group",
                   options: [],
                   text: `
                   Credits goes to: ${this.highlightText("Me")}, ${this.highlightText("Myself")}, and ${this.highlightText("I")} for designing and coding the menu.<br>
                   Credits goes to: ${this.highlightText("Luchador")} and ${this.highlightText("ele5570")} for making the core logic that makes chicken mod, chicken mod!<br>
                   Credits goes to: ${this.highlightText("Mega")} for maintaining the script for years and keeping the script ${this.highlightText("\"up-to-date\"")}.<br>
                   <div style="font-size: 4px">self glaze op</div>
                   `,
                   margin: true
              }]], t);
         }
         highlightText(e) {
              return `<span style="color: #f00;">${e}</span>`;
         }
         loggerFunction(e) {
              if (e == "clear" || e == "autoclear") {
                   this.privateLogger.innerHTML = "";
                   this.chatLog.innerHTML = `
               <div style="font-size: 13px; margin-left: 5px; margin-top: 5px;">
               <span style="color: #fff">${this.getCurrentTime()} - </span>
               <span style="color: #ffff00">${e == "autoclear" ? "Auto cleared chat logger" : "Cleared chat logger"}</span>
               </div>
               `;
              } else {
                   this.chatLog.innerHTML += `
               <div style="font-size: 13px; margin-left: 5px; margin-top: 0px;">
               <span style="color: #fff">${this.getCurrentTime()} - </span>
               <span style="color: #9e9e9e">${e}</span>
               </div>
               `;
                   this.autoScroll(player.sid, player.name);
              }
         }
         convertEmojis(e) {
              return emojione.shortnameToUnicode(e);
         }
         changeTab(e, t) {
              this.oldTab.style.backgroundColor = null;
              this.oldTab.style.pointerEvents = null;
              e.style.backgroundColor = "rgba(255, 255, 255, .25)";
              e.style.pointerEvents = "none";
              this.oldTab = e;
              for (let i = 0; i < this.items.length; i++) {
                   this.items[i].style.top = `${(i - t) * 475}px`;
              }
         }
         initTabs(e) {
              this.tabHolder.innerHTML = `
               <div style="position: absolute; font-size: 25px; left: 50%; top: 20px; color: #fff; transform: translateX(-50%);">Chicken</div>
               <div style="position: absolute; font-size: 15px; right: 47.5px; top: 12.5px; color: #fff; text-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #fff, 0 0 40px #00f, 0 0 70px #00f, 0 0 80px #00f, 0 0 100px #00f, 0 0 150px #00f;">V4</div>
           `;
              for (let t = 0; t < e.length; t++) {
                   let i = e[t];
                   let s = document.createElement("div");
                   s.id = `tab:${t}`;
                   s.style = "cursor: pointer; transition: all linear .35s; display: flex; align-items: center; width: calc(100% - 20px); height: 30px; position: absolute; left: 10px; border-radius: 6px;";
                   s.style.top = `${t * 35 + 65}px`;
                   s.innerHTML = `
               <img src="${i.icon}" width="20" height="20" style="margin-left: 2px;">
               <div style="color: white; margin-left: 5px;">${i.label}</div>
               `;
                   s.onmouseout = () => {
                        if (s.id !== this.oldTab.id) {
                             s.style.backgroundColor = null;
                        }
                   };
                   s.onmouseover = function () {
                        this.style.backgroundColor = "rgba(255, 255, 255, .25)";
                   };
                   s.onclick = () => {
                        this.changeTab(s, t);
                   };
                   if (t == 0) {
                        s.style.backgroundColor = "rgba(255, 255, 255, .25)";
                        s.style.pointerEvents = "none";
                        this.oldTab = s;
                   }
                   this.tabHolder.appendChild(s);
              }
              return e;
         }
         getCurrentTime() {
              let e = new Date();
              let t = e.getHours();
              let i = e.getMinutes();
              let s;
              return `${t % 12 == 0 ? 12 : t % 12}:${i < 10 ? `0${i}` : i} ${t >= 12 ? "PM" : "AM"}`;
         }
         createTag(e, t, i) {
              let s = t.value;
              let n = document.createElement("div");
              n.style = "cursor: pointer; display: inline-block; font-size: 12px; background-color: rgba(255, 255, 255, 0.25); padding: 1px 6px 1px 6px; border-radius: 6px; margin: 3px;";
              n.innerHTML = s;
              n.onclick = () => {
                   let e = this.toggles[i].findIndex(e => e == s);
                   if (e >= 0) {
                        this.toggles[i].splice(e, 1);
                   }
                   n.remove();
              };
              e.insertBefore(n, t);
         }
         generateDefaultNames() {
              let e = ["Tamer", "Damper", "Vajra", "Punisher", "Spark", "Razdor", "Molot", "Ecu", "Gust", "Magnum", "Halo", "Jaw", "Claw", "Talon", "Atomizer", "Thunder", "Brisant", "Reaper", "Evora", "Veyron", "Glory", "Subduer", "Talon", "Punisher", "Lance", "Fengbao", "Leiming"];
              let t = ["Luchador", "Ochokochi", "Fenrir", "Fafnir", "Curie", "Indra", "Rook", "Ravana", "Hover", "Bulwark", "Lynx", "Ares", "Ao Jun", "Ophion", "Revenant", "Aether", "Nether", "Shenlou", "Pathfinder"];
              let i = [];
              for (let s = 0; s < 20; s++) {
                   let n;
                   let a = `${e[Math.floor(Math.random() * e.length)]}${t[Math.floor(Math.random() * t.length)]}`;
                   i.push(a.slice(0, 15));
              }
              return [...new Set(i)];
         }
         Builder(e, t, i, s) {
              if (e.type == "toggle") {
                   if (!e.id) {
                        throw Error("No ID found for ON/OFF TOGGLE");
                   }
                   let n = document.createElement("div");
                   n.style = "position: relative; color: white; display: flex; align-items: center; margin-left: 10px; width: calc(100% - 20px); height: 40px; background-color: rgba(0, 0, 0, .25); border-radius: 6px;";
                   if (s) {
                        n.style.position = "absolute";
                        n.style.top = `${i * 45 + 45}px`;
                   }
                   if (i > 0) {
                        n.style.marginTop = "5px";
                   }
                   if (e.margin) {
                        n.style.marginBottom = "10px";
                   }
                   n.innerHTML = `
               <div style="margin-left: 5px;">${e.label}</div>
               `;
                   let a = document.createElement("div");
                   a.id = `toggle:id:${e.id}`;
                   a.style = "position: absolute; cursor: pointer; display: flex; align-items: center; top: 5px; right: 10px; width: 55px; height: 30px; background-color: #ccc; border-radius: 16px; transition: 0.2s ease-out;";
                   let l = document.createElement("div");
                   l.style = "background-color: white; width: 22px; height: 22px; border-radius: 100%; position: absolute; transform: translateX(5px); transition: 0.2s ease-out;";
                   a.appendChild(l);
                   a.onclick = () => {
                        if (this.toggles[e.id] = !this.toggles[e.id]) {
                             a.style.backgroundColor = "#2196f3";
                             l.style.transform = "translateX(28px)";
                             if (e.id == "renderDarkMode") {
                                  this.darkModeElement.style.opacity = 1;
                             }
                        } else {
                             a.style.backgroundColor = "#ccc";
                             l.style.transform = "translateX(5px)";
                             if (e.id == "renderDarkMode") {
                                  this.darkModeElement.style.opacity = 0;
                             }
                        }
                   };
                   n.appendChild(a);
                   if (e.checked) {
                        a.click();
                   }
                   t.appendChild(n);
              } else if (e.type == "group") {
                   let o = e.options;
                   let r = document.createElement("div");
                   r.style = "position: relative; margin-left: 10px; width: calc(100% - 20px); background-color: rgba(0, 0, 0, .25); padding-top: 25px; padding-bottom: 7px; border-radius: 6px;";
                   if (e.margin) {
                        r.style.marginBottom = "10px";
                   }
                   let c = document.createElement("div");
                   c.style = "position: absolute; left: 0px; top: 4px; color: white; width: 100%; text-align: center;";
                   c.innerText = e.label;
                   r.appendChild(c);
                   let d = document.createElement("div");
                   if (e.text) {
                        d.style = "margin-left: 6px; color: white; max-width: calc(100% - 12px);";
                        d.innerHTML = e.text;
                        r.appendChild(d);
                   }
                   if (i > 0) {
                        r.style.marginTop = "7px";
                   }
                   for (let p = 0; p < o.length; p++) {
                        let h = o[p];
                        this.Builder(h, r, p);
                   }
                   t.appendChild(r);
              } else if (e.type == "number" || e.type == "text") {
                   let g = document.createElement("div");
                   g.style = "position: relative; color: white; display: flex; align-items: center; margin-left: 10px; width: calc(100% - 20px); height: 40px; background-color: rgba(0, 0, 0, .25); border-radius: 6px;";
                   if (i > 0) {
                        g.style.marginTop = "5px";
                   }
                   if (e.margin) {
                        g.style.marginBottom = "10px";
                   }
                   if (s) {
                        g.style.position = "absolute";
                        g.style.top = `${i * 45 + 45}px`;
                   }
                   g.innerHTML = `
               <div style="margin-left: 5px;">${e.label}</div>
               `;
                   let $ = document.createElement("input");
                   $.type = "text";
                   $.id = `input:id:${e.id}`;
                   $.style = `padding-left: 4px; box-shadow: none; outline: none; border: none; width: ${40 + (e.size || 0)}px; height: 30px; font-size: 16; border-radius: 4px; color: white; background-color: rgba(255, 255, 255, .25); position: absolute; right: 10px;`;
                   $.value = this.toggles[e.id] = e.value;
                   g.appendChild($);
                   $.onchange = () => {
                        if (e.type == "number") {
                             let t = parseInt($.value, 10);
                             if (isNaN(t) || t < e.min) {
                                  $.value = e.min;
                             } else if (t > e.max) {
                                  $.value = e.max;
                             }
                             if (e.id == "songVolume") {
                                  for (let i = 0; i < singerManager.songAudios.length; i++) {
                                       singerManager.songAudios[i].volume = parseInt($.value) / 100;
                                  }
                             }
                             this.toggles[e.id] = parseInt($.value);
                        } else {
                             this.toggles[e.id] = $.value;
                        }
                   };
                   t.appendChild(g);
              } else if (e.type == "group toggle") {
                   let m = document.createElement("div");
                   m.style = "position: relative; transition: .3s ease-in; color: white; display: flex; align-items: center; margin-left: 10px; width: calc(100% - 20px); height: 40px; background-color: rgba(0, 0, 0, .25); border-radius: 6px; overflow: hidden;";
                   if (i > 0) {
                        m.style.marginTop = "5px";
                   }
                   if (e.margin) {
                        m.style.marginBottom = "10px";
                   }
                   m.innerHTML = `
               <div style="display: flex; align-items: center; top: 0px; left: 5px; height: 40px; position: absolute;">${e.label}</div>
               `;
                   let u = document.createElement("div");
                   u.id = `toggle:id:${e.id}`;
                   u.style = "position: absolute; cursor: pointer; display: flex; align-items: center; top: 5px; right: 10px; width: 55px; height: 30px; background-color: #ccc; border-radius: 16px; transition: 0.2s ease-out;";
                   let f = document.createElement("div");
                   f.style = "background-color: white; width: 22px; height: 22px; border-radius: 100%; position: absolute; transform: translateX(5px); transition: 0.2s ease-out;";
                   u.appendChild(f);
                   u.onclick = () => {
                        let t = e.options.length;
                        if (this.toggles[e.id] = !this.toggles[e.id]) {
                             u.style.backgroundColor = "#2196f3";
                             f.style.transform = "translateX(28px)";
                             m.style.height = `${t * 45 + 55}px`;
                        } else {
                             u.style.backgroundColor = "#ccc";
                             f.style.transform = "translateX(5px)";
                             m.style.height = "40px";
                        }
                   };
                   for (let y = 0; y < e.options.length; y++) {
                        let x = e.options[y];
                        this.Builder(x, m, y, true);
                   }
                   m.appendChild(u);
                   if (e.checked) {
                        u.click();
                   }
                   t.appendChild(m);
              } else if (e.type == "select") {
                   let b = document.createElement("div");
                   b.style = "position: relative; color: white; display: flex; align-items: center; margin-left: 10px; width: calc(100% - 20px); height: 40px; background-color: rgba(0, 0, 0, .25); border-radius: 6px;";
                   if (i > 0) {
                        b.style.marginTop = "5px";
                   }
                   if (e.margin) {
                        b.style.marginBottom = "10px";
                   }
                   if (s) {
                        b.style.position = "absolute";
                        b.style.top = `${i * 45 + 45}px`;
                   }
                   b.innerHTML = `
               <div style="margin-left: 5px;">${e.label}</div>
               `;
                   let k = document.createElement("select");
                   k.id = `select:id:${e.id}`;
                   k.style = "padding-left: 4px; cursor: pointer; box-shadow: none; outline: none; border: none; height: 30px; font-size: 16; border-radius: 4px; color: white; background-color: rgba(255, 255, 255, .25); position: absolute; right: 10px;";
                   b.appendChild(k);
                   for (let _ = 0; _ < e.options.length; _++) {
                        let v = e.options[_];
                        k.innerHTML += `<option value="${v.value}" ${v.selected ? "selected" : ""}>${v.label}</option>`;
                        if (v.selected) {
                             this.toggles[e.id] = v.value;
                        }
                   }
                   k.onchange = () => {
                        this.toggles[e.id] = k.value;
                   };
                   t.appendChild(b);
              } else if (e.type == "list") {
                   let w = document.createElement("div");
                   w.style = "position: relative; color: white; display: flex; align-items: center; margin-left: 10px; width: calc(100% - 20px); height: 200px; background-color: rgba(0, 0, 0, .25); border-radius: 6px;";
                   if (e.margin) {
                        w.style.marginBottom = "10px";
                   }
                   let T = document.createElement("div");
                   T.style = "position: absolute; top: 3px; width: 100%; text-align: center;";
                   T.innerText = e.label;
                   w.appendChild(T);
                   let S = document.createElement("div");
                   S.style = "position: absolute; bottom: 10px; left: 10px; width: calc(100% - 20px); height: 160px; background-color: rgba(255, 255, 255, 0.25); border-radius: 6px; overflow: hidden; overflow-y: scroll;";
                   w.appendChild(S);
                   S.onclick = () => {
                        I.focus();
                   };
                   this.toggles[e.id] = this.generateDefaultNames();
                   let I = document.createElement("input");
                   I.maxLength = "15";
                   I.type = "text";
                   I.placeholder = "Enter here";
                   I.style = "color: white; background: none; height: 26px; border-radius: 6px; outline: none; box-shadow: none; border: none;";
                   S.appendChild(I);
                   document.addEventListener("keydown", t => {
                        if (document.activeElement === I && t.key == ",") {
                             if (I.value && !this.toggles[e.id].find(e => e == I.value)) {
                                  this.createTag(S, I, e.id);
                                  this.toggles[e.id].push(I.value);
                             }
                             I.blur();
                             I.value = "";
                        }
                   });
                   for (let B = 0; B < this.toggles[e.id].length; B++) {
                        I.value = this.toggles[e.id][B];
                        this.createTag(S, I, e.id);
                   }
                   I.value = "";
                   let D = document.createElement("div");
                   D.style = "font-size: 8px; position: absolute; top: 20px; left: 13px;";
                   D.innerText = "Enter a comma after each name";
                   w.appendChild(D);
                   t.appendChild(w);
              } else if (e.type == "keybind") {
                   let E = document.createElement("div");
                   E.style = "position: relative; color: white; display: flex; align-items: center; margin-left: 10px; width: calc(100% - 20px); height: 40px; background-color: rgba(0, 0, 0, .25); border-radius: 6px;";
                   if (i > 0) {
                        E.style.marginTop = "5px";
                   }
                   if (e.margin) {
                        E.style.marginBottom = "10px";
                   }
                   E.innerHTML = `
               <div style="margin-left: 5px;">${e.label}</div>
               `;
                   let P = document.createElement("button");
                   P.style = "color: white; top: 5px; cursor: pointer; outline: none; width: 50px; position: absolute; right: 10px; height: 30px; border: none; border-radius: 6px; background-color: rgba(255, 255, 255, .4);";
                   P.innerText = e.key;
                   this.keyBinds[e.id] = e.key;
                   this.keyBindsAction[e.id] = e.logic;
                   let A = false;
                   P.onclick = () => {
                        if (!A) {
                             P.innerText = "-";
                             let t = i => {
                                  if (i.key == "Escape") {
                                       this.keyBinds[e.id] = "N/A";
                                       P.innerText = "N/A";
                                       document.removeEventListener("keydown", t);
                                  } else if (i.key != "Shift" && i.key != "Alt" && i.key != "Meta" && i.key != "-") {
                                       this.keyBinds[e.id] = i.key;
                                       P.innerText = i.key;
                                       document.removeEventListener("keydown", t);
                                  }
                                  i.preventDefault();
                             };
                             A = true;
                             document.addEventListener("keydown", t);
                        }
                   };
                   E.appendChild(P);
                   t.appendChild(E);
              }
         }
         insertToggles(e, t) {
              for (let i = 0; i < e.length; i++) {
                   let s = e[i];
                   this.Builder(s, t, i);
              }
         }
         initItems(e, t) {
              for (let i = 0; i < t.length; i++) {
                   let s = document.createElement("div");
                   s.id = `item:${i}`;
                   s.style = `position: absolute; top: ${i * 475}px; left: 0px; width: 100%; height: 100%; transition: all ease-in .3s;`;
                   s.innerHTML = `<div style="margin-top: 7px; margin-left: 10px; font-size: 24px; color: white;">${t[i].label}</div>`;
                   if (i == 5) {
                        s.innerHTML += `
                   <div id="chatLog" style="position: absolute; top: 45px; left: 10px; width: calc(100% - 20px); height: calc(100% - 90px); border-radius: 6px; background-color: rgba(255, 255, 255, .1); overflow: hidden; overflow-y: scroll;"></div>
                   <input id="privChatBox" placeholder="To chat: click here or press 'Enter' key" style="color: white; box-shadow: none; outline: none; left: 10px; bottom: 10px; height: 30px; position: absolute; border-radius: 5px; width: calc(100% - 20px); background: rgb(255, 255, 255, .15); border: none;">
                   `;
                   }
                   if (i != 5) {
                        let n = document.createElement("div");
                        n.style = "position: relative; width: 100%; height: calc(100% - 37px); overflow: hidden; overflow-y: scroll;";
                        s.appendChild(n);
                        let a = e[i];
                        if (a) {
                             this.insertToggles(a, n);
                        }
                   }
                   this.items.push(s);
                   this.itemHolder.appendChild(s);
              }
              this.chatLog = document.getElementById("chatLog");
              this.privChatBox = document.getElementById("privChatBox");
              this.addLog("init");
              let l = document.createElement("style");
              l.innerHTML = `
               .chicken-chat-box {
                   color: white;
               }

               .chicken-chat-box::placeholder {
                   color: #ffc0cb;
               }
           `;
              document.body.appendChild(l);
              this.chickenChatBox = document.createElement("input");
              this.chickenChatBox.type = "text";
              this.chickenChatBox.classList.add("chicken-chat-box");
              this.chickenChatBox.placeholder = "Enter Message";
              this.chickenChatBox.style = "box-shadow: none; outline: none; padding: 6px; font-size: 20px; color: #fff; background-color: rgba(0, 0, 0, 0.25); border-radius: 4px; pointer-events: all; border: 0; margin-bottom: 10px;";
              chatHolder.insertBefore(this.chickenChatBox, chatHolder.firstChild);
              this.privateLogger = document.createElement("div");
              this.privateLogger.style = "pointer-events: all; position: absolute; width: 275px; max-height: 200px; bottom: 20px; left: 160px; overflow-y: scroll;";
              gameUI.appendChild(this.privateLogger);
              this.privateLogger.onmouseover = () => {
                   this.privateLogger.isHovered = true;
              };
              this.privateLogger.onmouseout = () => {
                   this.privateLogger.isHovered = false;
              };
         }
         autoScroll(e, t) {
              if (this.menu.style.opacity == 0) {
                   this.chatLog.scrollTop = this.chatLog.scrollHeight;
              } else if (this.oldTab.id != "tab:5") {
                   this.chatLog.scrollTop = this.chatLog.scrollHeight;
              } else if (e == player.sid && t == player.name) {
                   this.chatLog.scrollTop = this.chatLog.scrollHeight;
              }
              if (!this.privateLogger.isHovered) {
                   this.privateLogger.scrollTop = this.privateLogger.scrollHeight;
              }
         }
         addLog(e, t, i, s, n, a) {
              if (t) {
                   if (t.length > 100) {
                        return;
                   }
                   t = t.replace(/</g, "&lt;").replace(/>/g, "&gt;");
                   let l = 0;
                   for (let o = 0; o < t.length; o++) {
                        if (t[o] == "@" && ++l > 4) {
                             return;
                        }
                   }
                   if (s && this.ignored.includes(s)) {
                        return "Ignored Player";
                   }
                   if (i && this.ignored.find(e => typeof e == "string" && !!i.includes(e))) {
                        return "Ignored Player";
                   }
                   if (t && t.includes("WHY DIE XDDD '")) {
                        return "Ignored bot msg";
                   }
              }
              if (this.chatLog.scrollHeight >= 3500) {
                   this.loggerFunction("autoclear");
              }
              if (e == "init") {
                   this.chatLog.innerHTML += `
               <div style="font-size: 13px; margin-left: 5px; margin-top: 5px;">
               <span style="color: #fff">${this.getCurrentTime()} - </span>
               <span style="color: #0f0">Successfully imported chicken mod Lite </span>
               </div>
               `;
              } else if (e == "chat") {
                   this.chatLog.innerHTML += `
               <div style="font-size: 13px; margin-left: 5px;">
               <span style="color: #fff">${this.getCurrentTime()} - </span>
               <span style="color: #fff">${i} {${s}}${n ? "<span style=\"color: #f00\"> (translated)</span>" : ""}:</span>
               <span style="color: ${a || "#fff"}">${t}</span>
               </div>
               `;
                   this.autoScroll(s, i);
              } else if (e == "private") {
                   this.privateLogger.innerHTML += `
               <div style="font-size: 13px; margin-left: 5px;">
               <span style="color: #fff">${this.getCurrentTime()} - </span>
               <span style="color: #fff">${i} {${s}}:</span>
               <span style="color: ${a || "#fff"}">${t}</span>
               </div>
               `;
                   this.chatLog.innerHTML += `
               <div style="font-size: 13px; margin-left: 5px;">
               <span style="color: #fff">${this.getCurrentTime()} - </span>
               <span style="color: #fff">${i} {${s}}</span>
               <span style="color: #f00">(private message):</span>
               <span style="color: ${a || "#fff"}">${t}</span>
               </div>
               `;
                   this.autoScroll(s, i);
              } else if (e == "encountered") {
                   this.chatLog.innerHTML += `
               <div style="font-size: 13px; margin-left: 5px;">
               <span style="color: #fff">${this.getCurrentTime()} - </span>
               <span style="color: #ffff00">encountered: ${i} {${s}}</span>
               </div>
               `;
                   this.autoScroll(s, i);
              } else if (e == "death") {
                   this.chatLog.innerHTML += `
               <div style="font-size: 13px; margin-left: 5px;">
               <span style="color: #fff">${this.getCurrentTime()} - </span>
               <span style="color: #f00">${i} {${s}} has died ${s == playerSID ? t : ""}</span>
               </div>
               `;
                   this.autoScroll(s, i);
              } else if (e == "left") {
                   this.chatLog.innerHTML += `
               <div style="font-size: 13px; margin-left: 5px;">
               <span style="color: #fff">${this.getCurrentTime()} - </span>
               <span style="color: #f00">${i} {${s}} has left the game</span>
               </div>
               `;
                   this.autoScroll(s, i);
              }
         }
         toggleMenu() {
              if ((this.menu.style.opacity || 1) == 1) {
                   this.menu.style.opacity = 0;
                   this.menu.style.pointerEvents = "none";
              } else {
                   this.menu.style.opacity = 1;
                   this.menu.style.pointerEvents = "auto";
              }
         }
         doKeyBindActions(e) {
              for (let t in this.keyBindsAction) {
                   let i = this.keyBindsAction[t];
                   for (let s in this.keyBinds) {
                        if (s == t) {
                             let n;
                             if (this.keyBinds[s] == e.key) {
                                  i();
                             }
                             break;
                        }
                   }
              }
         }
    }();
    function keyDown(e) {
         let t = e.which || e.keyCode || 0;
         let i = e.key;
         if (t == 27) {
              hideAllWindows();
              scriptMenu.privChatBox.blur();
              scriptMenu.privChatBox.value = "";
              scriptMenu.toggleMenu();
         } else if (player && player.alive && keysActive() && !keys[t]) {
              keys[t] = 1;
              placer.hotkeys();
              if (t == 69) {
                   chicken.sendAutoGather();
              } else if (i == "=") {
                   maxScreenWidth = config.maxScreenWidth;
                   maxScreenHeight = config.maxScreenHeight;
                   resize();
                   updateCursorLocation();
              } else if (i == scriptMenu.keyBinds.oneTickKey) {
                   instaManager.holdModeOT = true;
              } else if (i == "P"); else if (i == "C") {
                   singerManager.toggle();
              } else if (i == "Z") {
                   keys = {};
                   gameObjectSprites = {};
                   itemSprites = {};
                   pingTracker.data = {};
                   hatSystem.resetAllForcedAddOns();
                   hatSystem.velSoldier = false;
                   hatSystem.spikeSoldier = false;
                   game.tick = 0;
                   game.tickBase = [];
                   game.doNextTick = [];
                   attackState = 0;
                   chicken.autoaim = false;
                   chicken.onClick.tank = false;
                   chicken.grid = undefined;
                   placer.markers = [];
                   game.buildingsHit = [];
                   kbSimulator.animations = [];
              } else if (i == "." && player.team) {
                   for (let s = 0; s < botManager.bots.length; s++) {
                        let n = botManager.bots[s];
                        if (!n.disconnected) {
                             botManager.sendToServer(n.socket, {
                                  type: "sync"
                             });
                        }
                   }
                   let a = botManager.playingAsData;
                   if (!a || a.socket.readyState != 1) {
                        io.send("S", 1);
                   }
              } else if (t == 67) {
                   updateMapMarker();
              } else if (player.weapons[t - 49] != undefined) {
                   chicken.preferedWeaponIndex = player.weapons[t - 49];
                   chicken.selectToBuild(player.weapons[t - 49], true);
              } else if (player.items[t - 49 - player.weapons.length] != undefined) {
                   chicken.selectToBuild(player.items[t - 49 - player.weapons.length]);
              } else if (t == 81) {
                   chicken.selectToBuild(player.items[0]);
              } else if (moveKeys[t]) {
                   sendMoveDir();
              } else if (t == 32) {
                   attackState = 1;
              } else if (i == "z") {
                   placer.mill.status = !placer.mill.status;
              } else {
                   scriptMenu.doKeyBindActions(e);
              }
         }
    }
    function keyUp(e) {
         if (player && player.alive) {
              let t = e.which || e.keyCode || 0;
              let i = e.key;
              if (t == 13) {
                   toggleChat();
              } else if (keysActive() && keys[t]) {
                   keys[t] = 0;
                   if (moveKeys[t]) {
                        sendMoveDir();
                   } else if (t == 32) {
                        attackState = 0;
                   } else if (i == scriptMenu.keyBinds.oneTickKey) {
                        instaManager.holdModeOT = false;
                   }
              }
         }
    }
    window.addEventListener("keydown", UTILS.checkTrusted(keyDown));
    window.addEventListener("keyup", UTILS.checkTrusted(keyUp));
    gameCanvas.addEventListener("mousedown", function (e) {
         if (e.button == 0) {
              chicken.onClick.tank = !chicken.onClick.tank;
         }
    }, false);
    var lastMoveDir = undefined;
    function getMoveDir() {
         let e = 0;
         let t = 0;
         for (let i in moveKeys) {
              let s = moveKeys[i];
              e += !!keys[i] * s[0];
              t += !!keys[i] * s[1];
         }
         if (e == 0 && t == 0) {
              return undefined;
         } else {
              return UTILS.fixTo(Math.atan2(t, e), 2);
         }
    }
    function sendMoveDir() {
         let e = getMoveDir();
         if (!scriptMenu.toggles.autoGrind && (lastMoveDir == undefined || e == undefined || Math.abs(e - lastMoveDir) > 0.3)) {
              let t = botManager.playingAsData;
              if (t && t.socket.readyState == 1) {
                   botManager.sendToServer(t.socket, {
                        type: "packet",
                        sid: t.sid,
                        packetData: {
                             type: "f",
                             data: [e]
                        }
                   });
              } else {
                   lastMoveDir = e;
              }
         }
    }
    function renderBuildingDmgText(e, t, i, s) {
         let n = e;
         let a = e;
         if (t == "player") {
              let l = healer.calculateWeaponDamage(i.primaryWeapon, i.primaryVariant);
              let o = healer.calculateWeaponDamage(i.secondaryWeapon, i.secondaryVariant);
              let r = [1, 3.3];
              let c = [l, o];
              for (let d = 0; d < c.length; d++) {
                   let p = c[d];
                   if (d != 1 || s.projDmg || !(i.secondaryWeapon >= 9) || i.secondaryWeapon == 14 || i.secondaryWeapon == 11 || i.secondaryWeapon == 10) {
                        r.forEach(e => {
                             let t = p * e;
                             if (d == 1 && i.secondaryWeapon == 10) {
                                  t *= 7.5;
                             }
                             if (t < n) {
                                  n = t;
                             }
                             if (t > a) {
                                  a = t;
                             }
                        });
                   }
              }
         } else {
              n = 0;
         }
         let h = (e - n) / (a - n) * 100;
         let g;
         g = (h = Math.min(Math.max(h, 0), 100)) >= 50 ? `rgb(255, ${Math.round((1 - (h - 50) / 50) * 255)}, 0)` : `rgb(${Math.round(h / 50 * 255)}, 255, 0)`;
         textManager.showText({
              x: s.x,
              y: s.y - 15
         }, 500, 20, 0, g, Math.abs(e.toString().includes(".") ? UTILS.fixTo(e, 3) : e), {
              BuildingDmg: true
         });
    }
    function gatherAnimation(e, t, i) {
         let s = findPlayerBySID(e);
         if (s && (s.startAnim(t, i), s.reloads[i] = items.weapons[i].speed, i < 9 ? s.primaryHit = game.tick : s.secondaryHit = game.tick, t)) {
              let n = game.buildingsHit;
              game.buildingsHit = [];
              game.nextTick(() => {
                   let e = items.weapons[i];
                   let t = e.projectile == null ? e.dmg : 0;
                   let a;
                   let l = t * (config.weaponVariants[s.weaponVariant]?.val || 1) * (e.sDmg || 1) * (s.skinIndex == 40 ? 3.3 : 1);
                   for (let o = 0; o < n.length; o++) {
                        let r = n[o];
                        if (r) {
                             r.lastHitTime = Date.now();
                             r.currentHealth -= l;
                             if (scriptMenu.toggles.renderBuildingDamage) {
                                  renderBuildingDmgText(l, "player", s, r);
                             }
                        }
                   }
              });
         }
    }
    function renderPlayers(e, t, i) {
         mainContext.globalAlpha = 1;
         let s = scriptMenu.toggles.renderShadows;
         let n = scriptMenu.toggles.renderRealDir;
         for (var a = 0; a < players.length; ++a) {
              let l = players[a];
              if (l.zIndex == i && (l.animate(delta), l.visible)) {
                   l.skinRot += delta * 0.002;
                   let o = (n || player != l ? l.dir : chicken.getAttackDir(false, true)) + l.dirPlus;
                   mainContext.save();
                   mainContext.translate(l.x - e, l.y - t);
                   mainContext.rotate(o);
                   if (s) {
                        mainContext.shadowBlur = 8;
                        mainContext.shadowColor = "rgb(0, 0, 0, .7)";
                   }
                   renderPlayer(l, mainContext);
                   mainContext.restore();
              }
         }
    }
    gameCanvas.addEventListener("wheel", function (e) {
         if (e.deltaY > 0) {
              maxScreenWidth *= 0.95;
              maxScreenHeight *= 0.95;
         } else {
              maxScreenWidth /= 0.95;
              maxScreenHeight /= 0.95;
         }
         resize();
         updateCursorLocation();
    });
    var toolSprites = {};
    function renderTool(e, t, i, s, n, a) {
         var l = e.src + (t || "") + (a ? "true" : "");
         var o = toolSprites[l];
         if (!o) {
              (o = new Image()).onload = function () {
                   this.isLoaded = true;
              };
              o.src = getTexturePackImg(l, "weapons", a, e);
              toolSprites[l] = o;
         }
         if (o.isLoaded) {
              n.drawImage(o, i + e.xOff - e.length / 2, s + e.yOff - e.width / 2, e.length, e.width);
         }
    }
    var skinSprites = {};
    var skinPointers = {};
    var emeraldSprites = {
         "hand axe": "https://i.imgur.com/99Xb4Lm.png",
         bat: "https://i.imgur.com/VlQlb1Z.png",
         "hunting bow": "https://i.imgur.com/2aW8Wmw.png",
         crossbow: "https://i.imgur.com/2JWfFFW.png",
         "repeater crossbow": "https://i.imgur.com/JuLVN8T.png",
         daggers: "https://i.imgur.com/4VedRsh.png",
         "mc grabby": "https://i.imgur.com/F1qfrLj.png",
         "great axe": "https://i.imgur.com/kGbXWqw.png",
         "great hammer": "https://i.imgur.com/6qCSFSZ.png",
         "tool hammer": "https://i.imgur.com/xnVbXSB.png",
         katana: "https://i.imgur.com/AZP6Aci.png",
         stick: "https://i.imgur.com/NbSpR2M.png",
         polearm: "https://i.imgur.com/HtWa9ez.png",
         "short sword": "https://i.imgur.com/gmrPsRk.png"
    };
    var newHatImgs = {
         7: "https://i.imgur.com/vAOzlyY.png",
         15: "https://i.imgur.com/YRQ8Ybq.png",
         40: "https://i.imgur.com/pe3Yx3F.png",
         26: "https://i.imgur.com/I0xGtyZ.png"
    };
    var newAccImgs = {
         18: "https://i.imgur.com/0rmN7L9.png",
         21: "https://i.imgur.com/4ddZert.png"
    };
    var newWeaponImgs = {
         sword_1_r: "https://i.imgur.com/V9dzAbF.png",
         samurai_1_r: "https://i.imgur.com/vxLZW0S.png"
    };
    function getTexturePackImg(e, t, i, s) {
         if (i && emeraldSprites[s.name]) {
              return emeraldSprites[s.name];
         } else if (newHatImgs[e] && t == "hat") {
              return newHatImgs[e];
         } else if (newAccImgs[e] && t == "acc") {
              return newAccImgs[e];
         } else if (newWeaponImgs[e] && t == "weapons") {
              return newWeaponImgs[e];
         } else if (t == "acc") {
              return ".././img/accessories/access_" + e + ".png";
         } else if (t == "hat") {
              return ".././img/hats/hat_" + e + ".png";
         } else {
              return ".././img/weapons/" + e + ".png";
         }
    }
    function renderSkin(e, t, i, s) {
         if (!(tmpSkin = skinSprites[e])) {
              var n = new Image();
              n.onload = function () {
                   this.isLoaded = true;
                   this.onload = null;
              };
              n.src = getTexturePackImg(e, "hat");
              skinSprites[e] = n;
              tmpSkin = n;
         }
         var a = i || skinPointers[e];
         if (!a) {
              for (var l = 0; l < hats.length; ++l) {
                   if (hats[l].id == e) {
                        a = hats[l];
                        break;
                   }
              }
              skinPointers[e] = a;
         }
         if (tmpSkin.isLoaded) {
              t.drawImage(tmpSkin, -a.scale / 2, -a.scale / 2, a.scale, a.scale);
         }
         if (!i && a.topSprite) {
              t.save();
              t.rotate(s.skinRot);
              renderSkin(e + "_top", t, a, s);
              t.restore();
         }
    }
    function renderPlayer(e, t) {
         (t = t || mainContext).lineWidth = outlineWidth;
         t.lineJoin = "miter";
         var i = Math.PI / 4 * (items.weapons[e.weaponIndex].armS || 1);
         var s = e.buildIndex < 0 && items.weapons[e.weaponIndex].hndS || 1;
         var n = e.buildIndex < 0 && items.weapons[e.weaponIndex].hndD || 1;
         if (e.tailIndex > 0) {
              renderTail(e.tailIndex, t, e);
         }
         let a = false;
         if (e == player) {
              let l = items.weapons[player.weaponIndex];
              if (player.weaponXP[player.weaponIndex] >= 18000 && emeraldSprites[l.name]) {
                   a = true;
              }
         }
         if (!!(e.buildIndex < 0) && !items.weapons[e.weaponIndex].aboveHand) {
              renderTool(items.weapons[e.weaponIndex], config.weaponVariants[e.weaponVariant].src, e.scale, 0, t, a);
              if (items.weapons[e.weaponIndex].projectile != undefined && !items.weapons[e.weaponIndex].hideProjectile) {
                   renderProjectile(e.scale, 0, items.projectiles[items.weapons[e.weaponIndex].projectile], mainContext);
              }
         }
         t.fillStyle = config.skinColors[e.skinColor];
         renderCircle(e.scale * Math.cos(i), e.scale * Math.sin(i), 14);
         renderCircle(e.scale * n * Math.cos(-i * s), e.scale * n * Math.sin(-i * s), 14);
         if (e.buildIndex < 0 && items.weapons[e.weaponIndex].aboveHand) {
              renderTool(items.weapons[e.weaponIndex], config.weaponVariants[e.weaponVariant].src, e.scale, 0, t, a);
              if (items.weapons[e.weaponIndex].projectile != undefined && !items.weapons[e.weaponIndex].hideProjectile) {
                   renderProjectile(e.scale, 0, items.projectiles[items.weapons[e.weaponIndex].projectile], mainContext);
              }
         }
         if (e.buildIndex >= 0) {
              var o = getItemSprite(items.list[e.buildIndex]);
              t.drawImage(o, e.scale - items.list[e.buildIndex].holdOffset, -o.width / 2);
         }
         renderCircle(0, 0, e.scale, t);
         if (e.skinIndex > 0) {
              t.rotate(Math.PI / 2);
              renderSkin(e.skinIndex, t, null, e);
         }
    }
    var fpsCount = 0;
    var fpsLast = 0;
    var fps = 0;
    function doUpdate() {
         fpsCount++;
         if (Date.now() - fpsLast >= 1000) {
              fps = fpsCount;
              fpsCount = 0;
              fpsLast = Date.now();
         }
         pingDisplay.innerText = `Ping: ${window.pingTime} | FPS: ${fps}`;
         delta = (now = Date.now()) - lastUpdate;
         lastUpdate = now;
         updateGame();
         window.requestAnimationFrame(doUpdate);
    }
    window.requestAnimationFrame = window.requestAnimationFrame || window.requestAnimationFrame || window.requestAnimationFrame || function (e) {
         window.setTimeout(e, 1000 / 60);
    };
    doUpdate();
})();