· 5 years ago · Feb 28, 2020, 06:02 PM
1var _0x29f1 = ["progress", "xp-data", "xpAtCurrentLevel", "xpAtNextLevel", "logout", "4e838c74", "onXpUpdate", "loadUserData", "listenForToken", "vanis_token", "onLoggedIn", "source", "loggedIn", "origin", "/me", "setAccountData", "updateProgress", "level", "/me/logout", "https://cdn.discordapp.com/avatars/", "https://cdn.discordapp.com/embed/avatars/0.png", "getAvatarUrl", "discordId", "discordAvatar", "getLevel", "getXp", "/login/discord", "Vanis token empty or undefined", "setToken", "src/components/account.vue", "16px", "skin", "selectedSkinIndex", "selectSkin", "getDefaultSkins", "localstorage.skins is not an array!", "$set", "saveSkins", "src/components/skins.vue", "social-container", "discord-link", "https://vanis.io/discord", "_blank", " Discord\r\n ", "fab fa-youtube", " Youtube\r\n ", "privacy.html", "Privacy Policy", "line", "/contact.html", "Contact Us", "6843da33", "src/components/privacy-tos.vue", "playerName", "Block", "Hide Name", "Hide Skin", "Mute", "click", "4dbee04d", "src/components/context-menu.vue", "leaderboard", "ping", "mass", "fps", "0875ad82", "src/components/stats.vue", "chatbox", "list", "messages", "message-row", "from", "message-from", "message-text", "textColor", "inputText", "100", "Type your message here", "keyCode", "enter", "Enter", "dataset", "trim", "#ffffff", "scrollBottom", "$nextTick", "scrollTop", "scrollHeight", "onVisibilityChange", "chat-focus", "src/components/chatbox.vue", "Leaderboard", "leaderboard-label", "color", "leaderboard-update", "updateLeaderboard", "leaderboard-show", "onLeaderboardShow", "8a0c31c6", "src/components/leaderboard.vue", "339660d2", "src/components/hud.vue", "4px", "0px", "fade-box", "Time Alive: ", "Players Eaten: ", "killCount", "btn", "continue", "onContinueClick", "isLoadingAd", "loadAd", "timeAlive", "min ", "highscore", "3249d726", "src/components/death-stats.vue", "b0b10308", "replay-controls", "Opacity ", "cellOpacity", "replay-slider", "105px", "inline-block", "replay-opacity-slider", "onCellOpacitySlide", "flex", "Packet ", "packetCount", "autoHideReplayControls", "checkbox", "replay-auto-hide-controls", "checked", "concat", "label", "Auto Hide Controls", "rangeIndex", "rangeMin", "rangeMax", "onSlideEnd", "onShow", "replayIndex", "src/components/replay-controls.vue", "ab-overlay", "content", "/img/sad.png", "3em", "Adblock Detected", "1.5em", "We use advertisements to fund our servers!", "0 0 10px black", "/img/ab.gif", "use", "component", "#app", "length", "push", "hasOwnProperty", "call", "shift", "apply", "splice", "exports", "defineProperty", "toStringTag", "Module", "__esModule", "object", "create", "default", "string", "prototype", "webpackJsonp", "bind", "slice", "clientVersion", "events", "settings", "renderer", "usingWebGL", "WEBGL", "skinLoader", "WebGL Renderer", "Canvas Renderer", "state", "gameObj", "loadAdinplay", "loadMenuAds", "body", "oncontextmenu", "target", "email", "showBackgroundImage", "backgroundImageUrl", "Texture", "start", "protocol", "playerId", "border", "instanceSeed", "timestamp", "spectating", "isAlive", "center", "splitCount", "replayUpdates", "replayUpdateIndex", "replay", "updateHistory", "nodes", "nodelist", "removedNodes", "rawMouse", "mouse", "createMassFont", "massTextPool", "modeId", "ticker", "Ticker", "add", "tick", "replaying", "$emit", "show-replay-controls", "minimapEnabled", "minimap-show", "chat-visible", "stats-visible", "actions", "move", "setupStats", "setupZoom", "zoom", "width", "height", "zoomScale", "zoomMin", "nextReplayPacket", "parseMessage", "replayMoveTo", "updateTime", "destroy", "replayUpdate", "clearNodes", "replay-index-change", "setupStage", "Container", "scene", "backgroundImageRepeat", "setBorder", "addChild", "cameraScale", "camera", "container", "scale", "set", "updateStats", "score", "round", "getAndReset", "stats-changed", "avgFps", "FPS", "everySecond", "app", "showDeathScreen", "stop", "running", "playButton", "eventListeners", "moveInterval", "playerManager", "leaderboard-hide", "minimap-hide", "minimap-destroy", "stats", "destroyBackgroundImage", "stage", "cells", "destroyCache", "pop", "showMenu", "stopMovement", "activeElement", "chatbox-input", "view", "focus", "toggleMenu", "setDeathStats", "deathStats", "now", "deltaTime", "update", "destroySprite", "pid", "nSize", "sort", "render", "cameraMoveSmoothing", "position", "updateMouse", "min", "pow", "cameraZoomSmoothing", "innerWidth", "pivot", "innerHeight", "getElementById", "nickname", "value", "skinurl", "teamtag", "utf8", "joinGame", "uint8", "write", "send", "sendJoinData", "uint8Array", "seededRandom", "sin", "floor", "getThumbnail", "RenderTexture", "addChildAt", "extract", "canvas", "createElement", "getContext", "beginPath", "rect", "fillStyle", "backgroundColor", "fill", "toDataURL", "charCodeAt", "addServerMessage", "chat-message", "#828282", "setTagId", "tagId", "levelUp", "toast", "fire", "You have reached level ", "#b37211", "getShortMass", "toString", "toFixed", "mixin", "top", "Continue", "then", "Swal", "https://vanis.io/img/background.png", "#101010", "test", "userDefinedSettings", "loadUserDefinedSettings", "getInternalSettings", "cellSize", "cellRenderSize", "cellScaleRatio", "parse", "loadUserDefinedSettings:", "message", "stringify", "game", "size", "newPositionScale", "removed", "texture", "sprite", "Sprite", "anchor", "gameData", "getMass", "drawDelay", "oSize", "getRadius", "onUpdate", "warn", "onDestroy", "indexOf", "Sprite already destroyed!", "transform", "insertInto", "locals", "database", "isConnected", "confirm", "You will be disconnected from current game before replay", "play", "Replay data is corrupted!", "instance", "text", "name", "This file is not a video file and only Vanis.io website can play it.<br>File consists of player positions and other game related data.", "data", "text/plain;charset=utf-8", "saveAs", ".vanis", "Are you sure that you want to delete this replay?", "removeItem", "replay-removed", "minimapSize", "minimapFPS", "minimapSmoothing", "Nunito", "Graphics", "beginFill", "drawCircle", "endFill", "minimapLocations", "autoDetectRenderer", "useWebGL", "high-performance", "plugins", "interval", "showMinimap", "minimap-positions", "updatePositions", "$off", "clear", "log", "removeChildren", "Minimap node not found!", "newPosition", "children", "globalAlpha", "#202020", "moveTo", "lineTo", "stroke", "middle", "toUpperCase", "fillText", "drawLocationGrid", "drawLocationCodes", "$on", "onMinimapShow", "onMinimapHide", "minimap-create-node", "createNode", "minimap-destroy-node", "destroyNode", "showLocations", "drawLocations", "$refs", "initRenderer", "minimap", "loadingAds", "feed", "split", "toggleNames", "toggleFood", "toggleMass", "spectateLockToggle", "save", "toggleChat", "setZoomLevel", "MOUSE0", "SPACE", "version", "pressHandlers", "resetObsoleteHotkeys", "load", "hotkeysVersion", "hotkeys", "Incompatible hotkeys", "loadHandlers", "loadHotkeys", "assign", "saveHotkeys", "reset", "get", "Invalid action name", "keys", "Invalid action in hotkeys", "feedMacro", "releaseHandlers", "press", "convertKey", "Unknown", "$createElement", "_self", "div", "show", "v-show", "locations", "transition", "fade", "showAnimation", "modal", "overlay", "close", "fas fa-times-circle close-button", "wrapper", "content fade", "Here should be something", "img", "replay-thumbnail", "image", "replay-header", "replay-name", "replay-button fas fa-cloud-download-alt", "stopPropagation", "downloadReplay", "replay-button fas fa-trash-alt", "deleteReplay", "utils", "customResolution", "string2hex", "resize", "interaction", "addEventListener", "neon", "basic", "hsl15", "ads", "getAd", "Ad with alias ", " not found!", "display", "refreshAd", "lastRefresh", "waitInterval", "pushAd", "elementId", "addAd", "vanis-io_300x250", "menu-banner", "vanis-io_728x90", "death-box", "vanis-io_300x250_2", "aiptag", "cmd", "gdprShowConsentTool", "onload", "src", "//api.adinplay.com/libs/aiptag/pub/VAN/vanis.io/tag.min.js", "head", "appendChild", "menu-box", "getUint16", "gameModeId", "getUint8", "getUint32", "visitedBefore", "0eaeaf66", "options", "src/components/modal.vue", "1dbc6ed9", "__file", "src/components/replay-item.vue", "4c95bd45", "src/components/minimap.vue", "PIXI", "prepareData", "clamp", "htmlEncode", "replace", "<", ">", "'", "foreground", "food", "visible", "foodVisible", "background", "backgroundGraphics", "setPosition", "addCell", "addFood", "lineStyle", "drawRect", "toggleBackgroundImage", "setBackgroundImage", "backgroundDefaultIfUnequal", "backgroundSprite", "backgroundImageOpacity", "players", "getPlayer", "Trying to get non-existing player", "addPlayer", "error", "Player already exists", "setPlayerData", "setName", "setSkin", "skinsEnabled", "updateSkinVisibility", "onSkinsChanged", "showSkins", "hideSkins", "shouldRenderSkin", "showSkin", "hideSkin", "delayedRemovePlayer", "lastUpdate", "packetId", "clearWhenShifted", "removePlayer", "clearCachedData", "Hind Madurai", "skinUrl", "cellContainer", "createCellContainer", "renderCell", "isMe", "onSameTag", "getCellColor", "BaseTexture", "cellContainer has unexpected sprites", "setNameColor", "nameColor", "hex2string", "nameColorCss", "Unnamed", "setNameSprite", "nameSprite", "Text", "updateText", "destroySkin", "skinSprite", "mask", "http:", "loadSkinAndRender", "abortSkinLoader", "Called loadSkin while other skin was loading", "abortSkinLoaderIfExist", "clearedFromCache", "cellBorderSize", "parent", "removeChild", "FPS: ", "Ping: ", " ms", "parseFromString", "text/xml", "BitmapText", "data:image/png;base64,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", "valid", "data:image/png;base64,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", "backgroundGraphics container missing!", "prepareMode", "loaders", "worker", "clearCallbacks", "callbacks", "removeLoaderCallback", "loadSkin", "createLoader", "postMessage", "onSkinLoaded", "4c7bbc581140c5b4832e.worker.js", "total", "count", "createInstance", "game-replays", "REPLAY", "map", "closeConnection", "initialDataPacket", "buffer", "REPLAY|", "setItem", "replay-added", "Replay saved!", "info", "catch", "replay.save", "Error saving replay", "fromCharCode", "getDate", "getFullYear", "getHours", "getMinutes", "getSeconds", "sendUint8", "setUint8", "connect", "chat-clear", "tFoL46WDlZuRja7W6qCl", "binaryType", "arraybuffer", "connectionUrl", "onclose", "Connection failed!", "onmessage", "onerror", "readyState", "lastWsUrl", "code", "Server restarting ...", "You have been disconnected", "reason", "initialData", "gen", "pingstamp", "fromColor", "warning", "type", "timer", "title", "find", "updateSkins", "getInt32", "xp-update", "getInt16", "Virus", "EjectedMass", "DeadCell", "player", "eatAnimation", "Prey not found:", "PlayerCell", "Food", "right", "showMass", "massText", "shortMass", "virus", "getTexture", "alpha", "undefined", "thisProgram", "quit", "preRun", "postRun", "function", "locateFile", "read", "normalize", "readFileSync", "readBinary", "argv", "arguments", "uncaughtException", "unhandledRejection", "exit", "inspect", "[Emscripten Module object]", "location", "href", "currentScript", "blob:", "substr", "lastIndexOf", "open", "GET", "responseText", "response", "readAsync", "status", "setWindowTitle", "print", "printErr", "no native wasm support detected", "Cannot call unknown function ", "every", "subarray", "decode", "utf-16le", "HEAP8", "HEAP16", "HEAP32", "HEAPU8", "HEAPU32", "HEAPF32", "HEAPF64", "TOTAL_MEMORY", "TOTAL_MEMORY should be larger than TOTAL_STACK, was ", "! (TOTAL_STACK=", "Memory", "func", "number", "arg", "dynCall_v", "dynCall_vi", "unshift", "monitorRunDependencies", "preloadedImages", "data:application/octet-stream;base64,", "startsWith", "wauth.wasm", "wasmBinary", "same-origin", "failed to load wasm binary file at '", "arrayBuffer", "asm", "wasm-instantiate", "instantiate", "falling back to ArrayBuffer instantiation", "instantiateWasm", "memory", "table", "__memory_base", "__table_base", "___errno_location", "OOM", "_gen", "_malloc", "stackRestore", "stackSave", "cwrap", "Program terminated with exit(", "calledRun", "onRuntimeInitialized", "setStatus", "run", "onAbort", "abort(", "abort", "preInit", "noExitRuntime", "js/wauth.wasm", "adminMode", "DOMMouseScroll", "wheel", "mousedown", "contextmenu", "mouseup", "keyup", "removeEventListener", "keydown", "context-menu", "clientX", "clientY", "preventDefault", "selectedPlayer", "button", "sendChatMessage", "/teleport ", "MOUSE", "findPlayerUnderMouse", "spectate", "release", "key", "ESCAPE", "ENTER", "shiftKey", "/virus ", "/freeze ", 'Mute player "', "/mute ", "Send", 'Send notification to player "', "/notify ", "/kick ", 'Ban player "', "/ban ", "wheelDelta", "/mass ", " -500", "setInt32", "lockLinesplit", "linesplit", "atan2", "cos", "moveWaitUntil", "detail", "targetPlayer", "sqrt", "toggleSkins", "namesEnabled", "showChat", "updateCamera", "seenNotifications", "seenList", "parseSeen", "isArray", "saveSeen", "notifications.saveSeen:", "isSeen", "includes", "setSeen", '" is already on the seen list', "ifNotSeen", "url", "vanisToken", "clearToken", "Vanis ", "https://vanis.io/api", "starfield", "random", "radius", "spawn", "angle", "speed", "forEach", "performance", "parentNode", "clearRect", "translate", "restore", "isModalOpen", "menu", "main-container", "fade two", "player-container", "onModalChange", "account", "skins", "_withStripped", "tab-menu", "tabs", "regionCodes", "selectedRegion", "selectRegion", "span", "NEW", "\r\n ", "server-list", "regionServers", "vanis-list-item", "gameState", "connectWait", "disableAutoConnect", "server-name", " / ", "server-load-error", "Failed to load servers", "gameMode", "loadServers", "getRegionCode", "Region code fetching failed, defaulting to EU", 'Region with code "', '" does not exist, defaulting to EU', "toLowerCase", "servers", "filter", "match", "FFA", "currentPlayers", "https://ipapi.co/json", "continent_code", "checkBadSkinUrl", "https://skins.vanis.io", "https://vanis.io/gameservers.json", "src/components/servers.vue", "tab fas fa-cog", "tab far fa-keyboard", "openModal", "tab fas fa-film", "replays3", "player-data", "row", "v-model", "1px", "model", "Tag", "composing", "input", "Skin Url", "onSkinUrlChange", "play-button", "fas fa-sync fa-spin", "Play", "spec-button", "activeModal", "closeModal", "-316px", "962px", "286px", "Advertisement", "settings-container", "webgl-options", "header", "p-check", "p-switch", "toggle", "isWebGLSupported", "Background Image", "Background image URL", "Background Repeat", "Use Default on Unequal Maps", "slider", "range", "0.1", "0.01", "backgroundOpacityChange", "nowrap", "8px", "Background Color:", "autoZoom", "Auto Zoom", "Skins Enabled", "Mass Visible", "Short Mass", "Food Visible", "Eat Animation", "Show Chat", "Show Minimap", "Show Minimap Locations", "\r\n Draw Delay: ", "\r\n ", "slider draw-delay", "200", "\r\n Camera Movement Speed: ", "cameraSpeed", "cameraZoomSpeed", "cameraZoomSpeedChange", "\r\n Version Hash: ", "\r\n ", "cf23", "spawnTransparency", "valueAsNumber", "src/components/settings.vue", "hotkey-container", "availableHotkeys", "action", "onMouseDown", "\r\n ", "reset-button2", "onResetClick", "fa fa-undo", "splitx2", "splitx3", "splitMax", "spectateLock", "saveReplay", "zoomLevel1", "zoomLevel3", "zoomLevel5", "Select Player", "blur", "src/components/hotkeys.vue", "file", "none", "onFile", "import-button", "replays", "loaded", "notification", "Press ", "hotkey", " in game to save last 10 seconds of gameplay.", "Click plus to import existing replays.", "red", "bold", "Replays are saved in browser memory for now!", "replay-item", "iterate", "https://vanis.io/img/replay-placeholder.png", "reverse", "endsWith", "alert", "Invalid file format!", "result", "getItem", "Replay with same name already exists!", "Error importing replay file", "readAsText", "getReplays", "4a996e52", "src/components/replays3.vue", "https://skins.vanis.io/s/vanis1", "getUserData", "skinClick", "modal-open", "discordLogin", "width=400, height=500", "Cannot spectate, player is still alive", "naturalWidth", "skinUrlChanged", "1bcde71e", "src/components/player.vue", "17px", "10px", "discord", "loading", "5px", " Loading\r\n ", "fab fa-discord", " Login with Discord\r\n ", "7px", "avatar", "avatarUrl", "player-info", "account-name", "Level ", " XP", "relative", "progress-bar"];
2
3! function (x, e) {
4 ! function (e) {
5 for (; --e;) x.push(x.shift())
6 }(++e)
7}(_0x29f1, 156);
8var _0x3227 = function (x, e) {
9 return _0x29f1[x -= 0]
10};
11! function (x) {
12 function e(e) {
13 for (var a, i, s = e[0], r = e[1], o = e[2], l = 0, d = []; l < s['length']; l++) i = s[l], _[i] && d['push'](_[i][0]), _[i] = 0;
14 for (a in r) Object.prototype['hasOwnProperty']['call'](r, a) && (x[a] = r[a]);
15 for (c && c(e); d['length'];) d['shift']()();
16 return n['push']['apply'](n, o || []), t()
17 }
18
19 function t() {
20 for (var x, e = 0; e < n['length']; e++) {
21 for (var t = n[e], a = !0, s = 1; s < t['length']; s++) {
22 var r = t[s];
23 0 !== _[r] && (a = !1)
24 }
25 a && (n['splice'](e--, 1), x = i(i.s = t[0]))
26 }
27 return x
28 }
29 var a = {},
30 _ = {
31 0: 0
32 },
33 n = [];
34
35 function i(e) {
36 if (a[e]) return a[e].exports;
37 var t = a[e] = {
38 i: e,
39 l: !1,
40 exports: {}
41 };
42 return x[e].call(t['exports'], t, t.exports, i), t.l = !0, t['exports']
43 }
44 i.m = x, i.c = a, i.d = function (x, e, t) {
45 i.o(x, e) || Object['defineProperty'](x, e, {
46 enumerable: !0,
47 get: t
48 })
49 }, i.r = function (x) {
50 "undefined" != typeof Symbol && Symbol.toStringTag && Object['defineProperty'](x, Symbol['toStringTag'], {
51 value: 'Module'
52 }), Object['defineProperty'](x, '__esModule', {
53 value: !0
54 })
55 }, i.t = function (x, e) {
56 if (1 & e && (x = i(x)), 8 & e) return x;
57 if (4 & e && typeof x === 'object' && x && x['__esModule']) return x;
58 var t = Object['create'](null);
59 if (i.r(t), Object['defineProperty'](t, 'default', {
60 enumerable: !0,
61 value: x
62 }), 2 & e && typeof x != 'string')
63 for (var a in x) i.d(t, a, function (e) {
64 return x[e]
65 }.bind(null, a));
66 return t
67 }, i.n = function (x) {
68 var e = x && x['__esModule'] ? function () {
69 return x['default']
70 } : function () {
71 return x
72 };
73 return i.d(e, "a", e), e
74 }, i.o = function (x, e) {
75 return Object['prototype']['hasOwnProperty']['call'](x, e)
76 }, i.p = "";
77 var s = window['webpackJsonp'] = window['webpackJsonp'] || [],
78 r = s.push['bind'](s);
79 s.push = e, s = s['slice']();
80 for (var o = 0; o < s['length']; o++) e(s[o]);
81 var c = r;
82 n.push([71, 1]), t()
83}([, function (x, e, t) {
84 var a = t(84),
85 _ = t(5),
86 n = t(53),
87 i = t(85),
88 s = t(86),
89 r = (t(88), t(89)),
90 o = t(9),
91 c = t(95),
92 l = t(12),
93 d = t(55),
94 f = t(3),
95 u = t(96),
96 h = t(56),
97 v = t(98),
98 p = {};
99
100 function b(x) {
101 var e = document['getElementById']('nickname')['value'],
102 t = document.getElementById('skinurl')
103 .value,
104 a = document['getElementById']('teamtag')['value'];
105 x.utf8(e), x['utf8'](t), x['utf8'](a)
106 }
107 p['clientVersion'] = 4, p['events'] = new l, p['settings'] = _, p['renderer'] = n, p['usingWebGL'] = n.type === PIXI.RENDERER_TYPE['WEBGL'], p['skinLoader'] = new u, console.log(p['usingWebGL'] ? 'WebGL Renderer' : 'Canvas Renderer'), p['state'] = {
108 connectionUrl: null,
109 isAlive: !1,
110 playButton: !1,
111 loadingAds: !1
112 }, localStorage['gameObj'] && (window['gameObj'] = p), h['loadAdinplay'](h['loadMenuAds']), document['body']['oncontextmenu'] = function (x) {
113 return x['target'] && x.target.id === 'email'
114 }, p['usingWebGL'] && _['showBackgroundImage'] && _['backgroundImageUrl'] && PIXI['Texture'].from(_['backgroundImageUrl']), p['start'] = function (x) {
115 if (!(x['protocol'] && x.instanceSeed && x['playerId'] && x['border'])) throw "Lacking mandatory data";
116 p.running = !0, p['protocol'] = x['protocol'], p.modeId = x.gameModeId || 0, p['instanceSeed'] = x.instanceSeed, p.pingstamp = 0, p['timestamp'] = 0, p.deltaTime = 0, p.playerId = x['playerId'], p.tagId = null, p['spectating'] = !1, p.state['isAlive'] = !1, p['center'] = {
117 x: 0,
118 y: 0
119 }, p.score = 0, p['splitCount'] = 0, p.moveWaitUntil = 0, p.replaying = !!x['replayUpdates'], p.replayUpdates = x['replayUpdates'], p['replayUpdateIndex'] = 0, p['replay']['updateHistory']['length'] = 0, p['nodes'] = {}, p['nodelist'] = [], p['removedNodes'] = [], p.oldNodes = {}, p['rawMouse'] = {}, p['mouse'] = {}, p.stopMovement = !1, p['border'] = x.border, p.setupZoom(p['border']), r['createMassFont'](), p['massTextPool'] = [], p.setupStage(), c.prepareMode(p, p['modeId']), p.playerManager = new s(p), p['ticker'] = new(PIXI['Ticker']), p['ticker']['add'](p['tick']), p['replaying'] ? (p.moveInterval = setInterval(p.replayUpdate, 40), p['events']['$emit']('show-replay-controls', p['replayUpdates']['length'])) : (_['minimapEnabled'] && p['events']['$emit']('minimap-show'), _.showChat && p['events']['$emit']('chat-visible', !0), p['events']['$emit']("leaderboard-show"), p['events']['$emit']('stats-visible', !0), p.moveInterval = setInterval(p['actions']['move'], 40), p['setupStats'](), p['state'].playButton = !0), p['ticker']['start'](), p.eventListeners(!0)
120 }, p['setupZoom'] = function (x) {
121 p['zoom'] = .3, x['width'] === x['height'] ? p['zoomScale'] = 2e4 / x['width'] : p['zoomScale'] = 1, p['zoomMin'] = .03 * p['zoomScale']
122 }, p['nextReplayPacket'] = function () {
123 var x = p['replayUpdateIndex'],
124 e = p['replayUpdates'][x];
125 p['parseMessage'](e), p.replayUpdateIndex++
126 }, p['replayMoveTo'] = function (x) {
127 var e = p['replayUpdates']['length'] - 1,
128 t = Math.floor(x * e);
129 p['replayUpdateIndex'] = t, p['nextReplayPacket']();
130 for (var a = p['timestamp'], _ = [], n = 0; n < p['nodelist'].length; n++) {
131 var i = p.nodelist[n];
132 i['updateTime'] !== a && _['push'](i)
133 }
134 for (var s = 0; s < _['length']; s++) _[s]['destroy']();
135 return t
136 }, p['replayUpdate'] = function () {
137 p.replayUpdateIndex >= p.replayUpdates['length'] && (p['clearNodes'](), p['replayUpdateIndex'] = 0), p['events']['$emit']('replay-index-change', p.replayUpdateIndex), p['nextReplayPacket']()
138 }, p['setupStage'] = function () {
139 var x = p.stage = new(PIXI['Container']),
140 e = p['scene'] = new i(p['border']);
141 p['usingWebGL'] && _['showBackgroundImage'] && _.backgroundImageUrl && e.setBackgroundImage(_.backgroundImageUrl, _['backgroundImageRepeat']), e['setBorder'](), x['addChild'](e.container), p['cameraScale'] = p['zoom'], p['camera'] = new a(p.scene['container']), p.camera['scale'].set(p['cameraScale']), p['camera'].position['set'](0)
142 }, p['updateStats'] = function (x) {
143 var e = p['score'],
144 t = Math['round'](p.avgFps['getAndReset']());
145 p['events']['$emit']('stats-changed', {
146 ping: x,
147 fps: t,
148 mass: e
149 })
150 }, p['setupStats'] = function () {
151 p['avgFps'] = new v, p['ticker'].add(() => {
152 p['avgFps']['add'](p.ticker['FPS'])
153 }), p['everySecond'] = setInterval(() => {
154 window['app'].showMenu || window['app']['showDeathScreen'] ? p['updateStats'](null) : p.ping()
155 }, 1e3)
156 }, p['clearNodes'] = function () {
157 for (; p['nodelist']['length'];) p['nodelist'][0]['destroy']()
158 }, p['stop'] = function () {
159 for (p['running'] = !1, p['state']['playButton'] = !1, p['eventListeners'](!1), p['state'].connectionUrl = null, p['ticker'].stop(), clearInterval(p['moveInterval']), clearInterval(p.everySecond), p['renderer'].clear(), p['playerManager'].destroy(), p['skinLoader'].clearCallbacks(), p['events'].$emit('stats-visible', !1), p['events']['$emit']('chat-visible', !1), p['events']['$emit']('leaderboard-hide'), p['events']['$emit']('minimap-hide'), p['events'].$emit('minimap-destroy'), p['events'].$emit('show-replay-controls', !1), p['stats'] && p['stats']['destroy'](), delete p['stats'], p.clearNodes(), p['scene'] && p['scene']['destroyBackgroundImage'](!1), p['stage']['destroy'](!0), o['cells']['destroyCache'](); p['massTextPool']['length'];) p['massTextPool']['pop']()['destroy'](!0)
160 }, p['showMenu'] = function (x, e) {
161 if (window.app['showDeathScreen']) return !1;
162 if (window.app['showMenu'] = x, p['stopMovement'] = x, x) e && h['loadMenuAds']();
163 else {
164 var t = document['activeElement'];
165 t && t.id === 'chatbox-input' || p['renderer']['view']['focus']()
166 }
167 return x
168 }, p['toggleMenu'] = function () {
169 var x = !window['app']['showMenu'];
170 p['showMenu'](x, !0)
171 }, p['showDeathScreen'] = function (x) {
172 window['app']['showDeathScreen'] = x
173 }, p['setDeathStats'] = function (x) {
174 window['app']['deathStats'] = x
175 }, p['tick'] = function (x) {
176 p['timestamp'] = Date['now'](), p['deltaTime'] = x;
177 for (var e = p['removedNodes']['length']; e--;) {
178 var t = p['removedNodes'][e];
179 t['update']() && (t['destroySprite'](), p['removedNodes']['splice'](e, 1))
180 }
181 for (var a = p.playerId, n = p['nodelist'], i = 0, s = 0, r = 0, o = 0, c = 0; c < n['length']; c++) {
182 var l = n[c];
183 if (l['update'](), l['pid'] === a) {
184 var d = l.getMass();
185 i += l.x * d, s += l.y * d, r += d, o += l['nSize']
186 }
187 }
188 if (p['scene']['sort'](), p['spectating']) i = p['center'].x, s = p.center.y, p['score'] = 0;
189 else {
190 if (!r) return p['renderer']['render'](p.stage), void(p['score'] = 0);
191 i /= r, s /= r, p['score'] = r
192 }
193 var f = _['cameraMoveSmoothing'] * p['deltaTime'];
194 if (p['camera']['position'].x = lerp(p['camera']['position'].x, i, f), p['camera']['position'].y = lerp(p['camera']['position'].y, s, f), p['timestamp'] >= p.moveWaitUntil && (p['updateMouse'](), p['splitCount'] = 0), _.autoZoom) {
195 var u = Math['min'](64 / o, 1);
196 p.cameraScale = p['zoom'] * Math['pow'](u, .27)
197 } else p['cameraScale'] = p['zoom'];
198 var h = lerp(p['camera'].scale.x, p.cameraScale, _['cameraZoomSmoothing'] * p['deltaTime']);
199 p['camera']['scale']['set'](h), p['renderer']['render'](p['stage'])
200 }, p['updateMouse'] = function () {
201 var x = p['rawMouse'].x,
202 e = p['rawMouse'].y,
203 t = 1 / p.camera['scale'].x,
204 a = 1 / p.camera['scale'].y,
205 _ = p.scene['container'];
206 p['mouse'].x = _.pivot.x + (x - window['innerWidth'] / 2) * t, p.mouse.y = _['pivot'].y + (e - window['innerHeight'] / 2) * a
207 }, p['joinGame'] = function (x, e) {
208 var t = new d;
209 t['uint8'](1), b(t);
210 var a = t['write']();
211 p['send'](a), p['spectating'] = !1
212 }, p['sendJoinData'] = function (x) {
213 x && 16 === x['length'] || (x = new Uint8Array(new ArrayBuffer(16)));
214 var e = new d;
215 e['uint8'](5), e['uint8'](p.clientVersion), e['uint8Array'](x), b(e);
216 var t = localStorage.vanisToken;
217 t && e['utf8'](t);
218 var a = e['write']();
219 p.send(a)
220 }, p['seededRandom'] = function (x) {
221 var e = 1e4 + p.instanceSeed,
222 t = Math['sin'](x) * e;
223 return t - Math['floor'](t)
224 }, p['getThumbnail'] = function () {
225 var x = p['scene']['container'],
226 e = new(PIXI['Container']);
227 e['pivot'].x = x.position.x, e['pivot'].y = x.position.y, e.position.x = 120, e['position'].y = 67.5, e['scale']['set'](.25), e['addChild'](x);
228 var t = PIXI['RenderTexture']['create'](240, 135);
229 p['renderer']['render'](e, t), p['stage']['addChildAt'](x, 0);
230 var a = p.renderer['extract']['canvas'](t),
231 n = document['createElement']('canvas');
232 n['width'] = 240, n.height = 135;
233 var i = n['getContext']("2d");
234 i['beginPath'](), i['rect'](0, 0, 240, 135), i['fillStyle'] = _['backgroundColor'], i['fill'](), i.drawImage(a, 0, 0, 240, 135);
235 var s = n['toDataURL']();
236 return t['destroy'](!0), s
237 }, p.sendChatMessage = function (x) {
238 for (var e = unescape(encodeURIComponent(x)), t = [99], a = 0; a < e['length']; a++) t['push'](e['charCodeAt'](a));
239 var _ = new Uint8Array(t)
240 .buffer;
241 p['send'](_)
242 }, p['addServerMessage'] = function (x) {
243 p['events']['$emit']('chat-message', {
244 text: x,
245 textColor: '#828282'
246 })
247 }, p['setTagId'] = function (x) {
248 return x || (x = null), x !== p['tagId'] && (p['tagId'] = x, !0)
249 }, p['levelUp'] = function (x) {
250 f['toast']['fire']({
251 title: 'You have reached level ' + x + "!",
252 background: '#b37211',
253 timer: 3e3
254 })
255 }, p['getShortMass'] = function (x) {
256 return x < 1e3 ? x['toString']() : (Math['round'](.001 * x * 10) / 10)['toFixed'](1) + "k"
257 }, x['exports'] = p
258}, , function (x, e, t) {
259 var a = t(190)['default'],
260 _ = a['mixin']({
261 toast: !0,
262 position: 'top',
263 showConfirmButton: !1,
264 showCloseButton: !0
265 });
266 window['Swal'] = a, x.exports = {
267 toast: _,
268 alert: function (x) {
269 a.fire({
270 text: x,
271 confirmButtonText: "OK"
272 })
273 },
274 confirm: function (x, e) {
275 var t = {
276 text: x,
277 showCancelButton: !0,
278 confirmButtonText: 'Continue'
279 };
280 a['fire'](t)['then'](x => {
281 x['value'] && e()
282 })
283 },
284 instance: a
285 }
286}, , function (x, e) {
287 var t = {
288 skinsEnabled: !0,
289 namesEnabled: !0,
290 foodVisible: !0,
291 showMass: !0,
292 shortMass: !0,
293 showLocations: !1,
294 useWebGL: !0,
295 spawnTransparency: !0,
296 drawDelay: 120,
297 cameraMoveSmoothing: .18,
298 cameraZoomSmoothing: .14,
299 cameraZoomSpeed: 10,
300 eatAnimation: !0,
301 doubleResolution: !0,
302 cellBorderSize: 1,
303 autoZoom: !1,
304 showChat: !0,
305 autoHideReplayControls: !1,
306 minimapEnabled: !0,
307 minimapSize: 220,
308 minimapFPS: 30,
309 minimapSmoothing: .08,
310 minimapLocations: !0,
311 showBackgroundImage: !0,
312 backgroundImageUrl: 'https://vanis.io/img/background.png',
313 backgroundImageRepeat: !0,
314 backgroundImageOpacity: .6,
315 backgroundColor: '#101010',
316 backgroundDefaultIfUnequal: !0
317 },
318 a = {
319 backgroundColor: function (x) {
320 return /^#[0-9A-F]{6}$/i ['test'](x)
321 }
322 };
323 x['exports'] = window['settings'] = new class {
324 constructor() {
325 this.getInternalSettings(), this['userDefinedSettings'] = this['loadUserDefinedSettings'](), Object.assign(this, t, this.userDefinedSettings)
326 } ['getInternalSettings']() {
327 this['cellSize'] = 512, this.cellNamePadding = 350, this['cellRenderSize'] = this['cellSize'] + this.cellNamePadding, this['cellScaleRatio'] = this.cellRenderSize / this['cellSize']
328 } ['loadUserDefinedSettings']() {
329 if (localStorage['settings']) try {
330 return JSON['parse'](localStorage.settings)
331 } catch (x) {
332 console.error('loadUserDefinedSettings:', x['message'])
333 }
334 return {}
335 }
336 set(x, e) {
337 if (this[x] === e) return !1;
338 var t = a[x];
339 return !(t && !t(e)) && (this[x] = e, this['userDefinedSettings'][x] = e, localStorage['settings'] = JSON['stringify'](this['userDefinedSettings']), !0)
340 }
341 }
342}, , , , function (x, e, t) {
343 var a = t(92),
344 _ = t(93);
345 x['exports'] = {
346 cells: a,
347 virus: _
348 }
349}, function (x, e, t) {
350 var a = t(1),
351 _ = t(9);
352 t(5);
353 x['exports'] = class {
354 constructor(x) {
355 this['game'] = a, this.id = x.id || 0, this.oSize = this['size'] = x['size'], this['updateTime'] = 0, this['newPositionScale'] = 1, this['removed'] = !1, this.texture = x['texture'] || _.cells.getTexture(0), this['sprite'] = new(PIXI['Sprite'])(this['texture']), this['sprite']['anchor']['set'](.5), this.sprite['gameData'] = this, this.x = this.ox = this['sprite']['position'].x = x.x, this.y = this.oy = this.sprite['position'].y = x.y
356 }
357 getRadius() {
358 return this.size
359 } ['getMass']() {
360 var x = this['nSize'];
361 return Math['floor'](x * x / 100)
362 } ['update']() {
363 var x = this['game']['settings']['drawDelay'],
364 e = (this['game'].timestamp - this['updateTime']) / x;
365 if (e = 0 > e ? 0 : 1 < e ? 1 : e, this['removed'] && (e >= 1 || this['texture'].clearedFromCache)) return !0;
366 this['size'] = e * (this.nSize - this['oSize']) + this.oSize, this['sprite']['width'] = this['sprite'].height = 2 * this['getRadius'](), this.sprite['position'].x = this.x = e * this['newPositionScale'] * (this.nx - this.ox) + this.ox, this['sprite'].position.y = this.y = e * this.newPositionScale * (this.ny - this.oy) + this.oy, this.onUpdate && this['onUpdate']()
367 } ['destroy'](x) {
368 if (this.removed) console['warn']("Cell already removed!");
369 else {
370 this['onDestroy'] && this['onDestroy']();
371 var e, t = this['game'].nodelist,
372 a = this['game']['nodes'];
373 (e = t['indexOf'](this)) >= 0 && t.splice(e, 1), delete a[this.id], this['removed'] = !0, x ? this['game'].removedNodes['push'](this) : this.destroySprite()
374 }
375 }
376 destroySprite() {
377 this['sprite'] ? (this['sprite']['destroy'](), this['sprite'] = null) : console['warn']('Sprite already destroyed!')
378 }
379 }
380}, , , , , function (x, e, t) {
381 var a = t(139);
382 typeof a === 'string' && (a = [[x.i, a, ""]]);
383 var _ = {
384 hmr: !0
385 };
386 _['transform'] = void 0, _['insertInto'] = void 0;
387 t(2)(a, _);
388 a['locals'] && (x['exports'] = a['locals'])
389}, function (x, e, t) {
390 "use strict";
391 var a = t(17),
392 _ = t.n(a);
393 e.default = _.a
394}, function (x, e) {
395 x.exports = {
396 data: () => ({
397 showAnimation: !1
398 })
399 }
400}, function (x, e, t) {
401 var a = t(141);
402 typeof a === 'string' && (a = [[x.i, a, ""]]);
403 var _ = {
404 hmr: !0,
405 transform: void 0,
406 insertInto: void 0
407 };
408 t(2)(a, _);
409 a['locals'] && (x['exports'] = a['locals'])
410}, function (x, e, t) {
411 var a = t(144);
412 typeof a === 'string' && (a = [[x.i, a, ""]]);
413 var _ = {
414 hmr: !0
415 };
416 _['transform'] = void 0, _.insertInto = void 0;
417 t(2)(a, _);
418 a['locals'] && (x.exports = a['locals'])
419}, function (x, e, t) {
420 var a = t(146);
421 "string" == typeof a && (a = [[x.i, a, ""]]);
422 var _ = {
423 hmr: !0
424 };
425 _['transform'] = void 0, _['insertInto'] = void 0;
426 t(2)(a, _);
427 a['locals'] && (x['exports'] = a['locals'])
428}, function (x, e, t) {
429 "use strict";
430 var a = t(22),
431 _ = t.n(a);
432 e['default'] = _.a
433}, function (x, e, t) {
434 var a = t(147),
435 _ = t(1),
436 n = t(3),
437 i = _['replay']['database'];
438 x['exports'] = {
439 props: ['replay'],
440 created: function () {},
441 methods: {
442 play(x) {
443 _['isConnected']() ? n['confirm']('You will be disconnected from current game before replay', () => {
444 this._play(x)
445 }) : this._play(x)
446 },
447 _play(x) {
448 try {
449 _['replay']['play'](x)
450 } catch (x) {
451 n.alert('Replay data is corrupted!')
452 }
453 },
454 downloadReplay(x) {
455 n['instance']['fire']({
456 input: 'text',
457 inputValue: x['name'],
458 showCancelButton: !0,
459 confirmButtonText: "Download",
460 html: 'This file is not a video file and only Vanis.io website can play it.<br>File consists of player positions and other game related data.'
461 })['then'](e => {
462 var t = e['value'];
463 if (t) {
464 var _ = new Blob([x['data']], {
465 type: 'text/plain;charset=utf-8'
466 });
467 a['saveAs'](_, t + '.vanis')
468 }
469 })
470 },
471 deleteReplay(x) {
472 n['confirm']('Are you sure that you want to delete this replay?', () => {
473 i['removeItem'](x, () => {
474 _['events'].$emit('replay-removed')
475 })
476 })
477 }
478 }
479 }
480}, function (x, e, t) {
481 var a = t(149);
482 typeof a === 'string' && (a = [[x.i, a, ""]]);
483 var _ = {
484 hmr: !0,
485 transform: void 0,
486 insertInto: void 0
487 };
488 t(2)(a, _);
489 a['locals'] && (x['exports'] = a['locals'])
490}, function (x, e, t) {
491 var a = t(151);
492 typeof a === 'string' && (a = [[x.i, a, ""]]);
493 var _ = {
494 hmr: !0,
495 transform: void 0
496 };
497 _['insertInto'] = void 0;
498 t(2)(a, _);
499 a['locals'] && (x.exports = a['locals'])
500}, function (x, e, t) {
501 var a = t(153);
502 typeof a === 'string' && (a = [[x.i, a, ""]]);
503 var _ = {
504 hmr: !0
505 };
506 _['transform'] = void 0, _.insertInto = void 0;
507 t(2)(a, _);
508 a.locals && (x['exports'] = a['locals'])
509}, function (x, e, t) {
510 var a = t(155);
511 typeof a === 'string' && (a = [[x.i, a, ""]]);
512 var _ = {
513 hmr: !0
514 };
515 _['transform'] = void 0, _.insertInto = void 0;
516 t(2)(a, _);
517 a['locals'] && (x['exports'] = a['locals'])
518}, function (x, e, t) {
519 var a = t(159);
520 typeof a === 'string' && (a = [[x.i, a, ""]]);
521 var _ = {
522 hmr: !0
523 };
524 _['transform'] = void 0, _['insertInto'] = void 0;
525 t(2)(a, _);
526 a.locals && (x.exports = a.locals)
527}, function (x, e, t) {
528 var a = t(161);
529 typeof a === 'string' && (a = [[x.i, a, ""]]);
530 var _ = {
531 hmr: !0
532 };
533 _['transform'] = void 0, _['insertInto'] = void 0;
534 t(2)(a, _);
535 a['locals'] && (x['exports'] = a['locals'])
536}, function (x, e, t) {
537 var a = t(163);
538 "string" == typeof a && (a = [[x.i, a, ""]]);
539 var _ = {
540 hmr: !0
541 };
542 _['transform'] = void 0, _['insertInto'] = void 0;
543 t(2)(a, _);
544 a.locals && (x.exports = a['locals'])
545}, function (x, e, t) {
546 var a = t(165);
547 typeof a === 'string' && (a = [[x.i, a, ""]]);
548 var _ = {
549 hmr: !0,
550 transform: void 0
551 };
552 _['insertInto'] = void 0;
553 t(2)(a, _);
554 a.locals && (x.exports = a.locals)
555}, function (x, e, t) {
556 var a = t(167);
557 typeof a === 'string' && (a = [[x.i, a, ""]]);
558 var _ = {
559 hmr: !0
560 };
561 _['transform'] = void 0, _.insertInto = void 0;
562 t(2)(a, _);
563 a.locals && (x['exports'] = a.locals)
564}, function (x, e, t) {
565 var a = t(169);
566 typeof a === 'string' && (a = [[x.i, a, ""]]);
567 var _ = {
568 hmr: !0
569 };
570 _['transform'] = void 0, _['insertInto'] = void 0;
571 t(2)(a, _);
572 a.locals && (x['exports'] = a['locals'])
573}, function (x, e, t) {
574 var a = t(171);
575 typeof a === 'string' && (a = [[x.i, a, ""]]);
576 var _ = {
577 hmr: !0
578 };
579 _['transform'] = void 0, _['insertInto'] = void 0;
580 t(2)(a, _);
581 a['locals'] && (x['exports'] = a.locals)
582}, function (x, e, t) {
583 var a = t(173);
584 typeof a === 'string' && (a = [[x.i, a, ""]]);
585 var _ = {
586 hmr: !0
587 };
588 _['transform'] = void 0, _['insertInto'] = void 0;
589 t(2)(a, _);
590 a['locals'] && (x['exports'] = a.locals)
591}, function (x, e, t) {
592 var a = t(175);
593 "string" == typeof a && (a = [[x.i, a, ""]]);
594 var _ = {
595 hmr: !0
596 };
597 _['transform'] = void 0, _.insertInto = void 0;
598 t(2)(a, _);
599 a['locals'] && (x['exports'] = a['locals'])
600}, function (x, e, t) {
601 "use strict";
602 var a = t(37),
603 _ = t.n(a);
604 e['default'] = _.a
605}, function (x, e, t) {
606 var a = t(1),
607 _ = t(5),
608 n = _['minimapSize'],
609 i = _['minimapFPS'],
610 s = _['minimapSmoothing'],
611 r = new(PIXI['Container']),
612 o = {};
613 x['exports'] = {
614 data: () => ({
615 showMinimap: !1,
616 showLocations: _['minimapLocations'],
617 interval: null
618 }),
619 methods: {
620 initRenderer(x) {
621 var e = PIXI['autoDetectRenderer']({
622 resolution: 1,
623 view: x,
624 width: n,
625 height: n,
626 forceCanvas: !_['useWebGL'],
627 antialias: !1,
628 powerPreference: 'high-performance',
629 transparent: !0
630 });
631 e['plugins'].interaction.destroy(), e.clear(), this['renderer'] = e
632 },
633 onMinimapShow() {
634 this['interval'] || (this['showMinimap'] = !0, a.events.$on('minimap-positions', this['updatePositions']), this['interval'] = setInterval(this.render, 1e3 / i))
635 },
636 onMinimapHide() {
637 this['interval'] && (this.showMinimap = !1, a['events']['$off']('minimap-positions', this['updatePositions']), clearInterval(this['interval']), this['interval'] = null)
638 },
639 destroyMinimap() {
640 r.destroy(!0), r = new(PIXI['Container']), this.renderer['clear']()
641 },
642 createNode(x, e, t, a) {
643 var _ = o[x];
644 _ && _['destroy'](!0);
645 t || (t = 16777215), a || (a = 16777215);
646 var n = new(PIXI['Container']);
647 n.newPosition = {}, n['addChild'](function (x) {
648 var e = new(PIXI['Graphics']);
649 return e['beginFill'](x), e['drawCircle'](0, 0, 5), e['endFill'](), e
650 }(a)), e && n['addChild'](function (x, e) {
651 var t = new PIXI.Text(x, {
652 strokeThickness: 4,
653 lineJoin: 'round',
654 fontFamily: 'Nunito',
655 fill: e,
656 fontSize: 12
657 });
658 return t['anchor']['set'](.5), t['pivot'].y = 15, t
659 }(e, t)), o[x] = n
660 },
661 destroyNode(x) {
662 var e = o[x];
663 e ? (e.destroy(!0), delete o[x]) : console['log']("Minimap: trying to destroy node which doesnt exist", x)
664 },
665 updatePositions(x) {
666 r['removeChildren']();
667 for (var e = 0; e < x.length; e++) {
668 var t = x[e],
669 a = o[t.pid];
670 a ? (a['newPosition'].x = t.x * n, a['newPosition'].y = t.y * n, r['addChild'](a)) : console['warn']('Minimap node not found!')
671 }
672 this['render']()
673 },
674 render() {
675 for (var x = r['children'], e = s * (30 / i), t = 0; t < x.length; t++) {
676 var a = x[t];
677 a.position.x = lerp(a.position.x, a['newPosition'].x, e), a['position'].y = lerp(a['position'].y, a['newPosition'].y, e)
678 }
679 this['renderer'].render(r)
680 },
681 drawLocationGrid(x, e) {
682 var t = n / e;
683 x['globalAlpha'] = .1, x.strokeStyle = '#202020', x['beginPath']();
684 for (var a = 1; a < e; a++) {
685 var _ = a * t;
686 x['moveTo'](_, 0), x['lineTo'](_, n), x['moveTo'](0, _), x['lineTo'](n, _)
687 }
688 x['stroke']()
689 },
690 drawLocationCodes(x, e) {
691 var t = n / e,
692 a = t / 2;
693 x.globalAlpha = .1, x.font = "14px Verdana", x.textAlign = "center", x.textBaseline = 'middle', x['fillStyle'] = "#ffffff";
694 for (var _ = 0; _ < e; _++)
695 for (var i = _ * t + a, s = 0; s < e; s++) {
696 var r = String.fromCharCode(97 + s)['toUpperCase']() + (_ + 1),
697 o = s * t + a;
698 x.strokeText(r, i, o), x['fillText'](r, i, o)
699 }
700 },
701 drawLocations(x) {
702 x['width'] = x['height'] = n;
703 var e = x.getContext("2d");
704 this['drawLocationGrid'](e, 5), this['drawLocationCodes'](e, 5)
705 }
706 },
707 created() {
708 a['events']['$on']('minimap-show', this['onMinimapShow']), a['events'].$on('minimap-hide', this['onMinimapHide']), a['events']['$on']("minimap-destroy", this.destroyMinimap), a['events'].$on('minimap-create-node', this['createNode']), a['events']['$on']('minimap-destroy-node', this['destroyNode']), a.events['$on']("minimap-show-locations", x => this['showLocations'] = x)
709 },
710 mounted() {
711 this['drawLocations'](this['$refs'].locations), this['initRenderer'](this.$refs['minimap'])
712 }
713 }
714}, function (x, e, t) {
715 var a = t(177);
716 typeof a === 'string' && (a = [[x.i, a, ""]]);
717 var _ = {
718 hmr: !0,
719 transform: void 0,
720 insertInto: void 0
721 };
722 t(2)(a, _);
723 a['locals'] && (x['exports'] = a.locals)
724}, function (x, e, t) {
725 var a = t(179);
726 typeof a === 'string' && (a = [[x.i, a, ""]]);
727 var _ = {
728 hmr: !0,
729 transform: void 0
730 };
731 _['insertInto'] = void 0;
732 t(2)(a, _);
733 a['locals'] && (x.exports = a['locals'])
734}, function (x, e, t) {
735 var a = t(181);
736 "string" == typeof a && (a = [[x.i, a, ""]]);
737 var _ = {
738 hmr: !0
739 };
740 _['transform'] = void 0, _['insertInto'] = void 0;
741 t(2)(a, _);
742 a['locals'] && (x.exports = a['locals'])
743}, function (x, e, t) {
744 var a = t(183);
745 typeof a === 'string' && (a = [[x.i, a, ""]]);
746 var _ = {
747 hmr: !0
748 };
749 _['transform'] = void 0, _['insertInto'] = void 0;
750 t(2)(a, _);
751 a['locals'] && (x.exports = a['locals'])
752}, function (x, e, t) {
753 var a = t(185);
754 "string" == typeof a && (a = [[x.i, a, ""]]);
755 var _ = {
756 hmr: !0,
757 transform: void 0
758 };
759 _['insertInto'] = void 0;
760 t(2)(a, _);
761 a['locals'] && (x['exports'] = a['locals'])
762}, function (x, e, t) {
763 var a = t(187);
764 typeof a === 'string' && (a = [[x.i, a, ""]]);
765 var _ = {
766 hmr: !0
767 };
768 _['transform'] = void 0, _['insertInto'] = void 0;
769 t(2)(a, _);
770 a['locals'] && (x['exports'] = a['locals'])
771}, function (x, e, t) {
772 var a = t(1),
773 _ = {
774 respawn: function () {
775 a['state']['loadingAds'] || (a['joinGame'](), a.showMenu(!1))
776 },
777 feed: a['actions']['feed'].bind(null),
778 feedMacro: a.actions.feed.bind(null, !0),
779 split: a['actions']['split'].bind(null, 1),
780 splitx2: a['actions']['split']['bind'](null, 2),
781 splitx3: a['actions'].split['bind'](null, 3),
782 splitMax: a['actions']['split'].bind(null, 4),
783 linesplit: a['actions'].linesplit,
784 lockLinesplit: a['actions'].lockLinesplit,
785 stopMovement: function () {
786 a['stopMovement'] = !a['stopMovement']
787 },
788 toggleSkins: a['actions'].toggleSkins,
789 toggleNames: a['actions']['toggleNames'],
790 toggleFood: a['actions']['toggleFood'],
791 toggleMass: a['actions']['toggleMass'],
792 spectateLock: a.actions['spectateLockToggle'],
793 selectPlayer: a['actions'].targetPlayer['bind'](null, !0),
794 saveReplay: a['replay']['save'],
795 toggleChat: a['actions']['toggleChat'],
796 zoomLevel1: a['actions']['setZoomLevel'].bind(null, 1),
797 zoomLevel2: a['actions']['setZoomLevel']['bind'](null, 2),
798 zoomLevel3: a['actions'].setZoomLevel.bind(null, 3),
799 zoomLevel4: a.actions['setZoomLevel']['bind'](null, 4),
800 zoomLevel5: a['actions']['setZoomLevel']['bind'](null, 5)
801 },
802 n = {
803 feed: "W",
804 feedMacro: 'MOUSE0',
805 split: 'SPACE',
806 splitx2: "G",
807 splitx3: "H",
808 splitMax: "T",
809 linesplit: "Z",
810 lockLinesplit: "",
811 respawn: "",
812 stopMovement: "",
813 toggleSkins: "",
814 toggleNames: "",
815 toggleMass: "",
816 spectateLock: "Q",
817 selectPlayer: "MOUSE1",
818 saveReplay: "R",
819 toggleChat: "",
820 zoomLevel1: "1",
821 zoomLevel2: "2",
822 zoomLevel3: "3",
823 zoomLevel4: "4",
824 zoomLevel5: "5"
825 };
826 x['exports'] = window['hotkeys'] = new class {
827 constructor() {
828 this['version'] = 2, this['pressHandlers'] = null, this.releaseHandlers = null, this['resetObsoleteHotkeys'](), this['load']()
829 } ['resetObsoleteHotkeys']() {
830 localStorage['hotkeysVersion'] != this.version && (localStorage['hotkeys'] && (console['log']('Incompatible hotkeys'), localStorage.removeItem('hotkeys')), localStorage['hotkeysVersion'] = this['version'])
831 } ['load']() {
832 this['hotkeys'] = this.loadHotkeys(), this['loadHandlers'](this['hotkeys'])
833 } ['loadHotkeys']() {
834 var x = Object.assign({}, n);
835 if (localStorage['hotkeys']) {
836 var e = JSON['parse'](localStorage['hotkeys']);
837 Object['assign'](x, e)
838 }
839 return x
840 } ['saveHotkeys'](x) {
841 localStorage['hotkeys'] = JSON.stringify(x)
842 } ['reset']() {
843 return localStorage['removeItem']('hotkeys'), this['load'](), this['hotkeys']
844 } ['get']() {
845 return this.hotkeys
846 }
847 set(x, e) {
848 if (_[x]) {
849 if (this.hotkeys[x] === e) return !0;
850 for (var t in this.hotkeys) this.hotkeys[t] === e && (this.hotkeys[t] = "");
851 return this['hotkeys'][x] = e, this['saveHotkeys'](this.hotkeys), this['loadHandlers'](this['hotkeys']), !0
852 }
853 console.log('Invalid action name', x)
854 }
855 loadHandlers(x) {
856 this['pressHandlers'] = {}, Object['keys'](x)
857 .forEach(e => {
858 var t = _[e];
859 if (t) {
860 var a = x[e];
861 this['pressHandlers'][a] = t
862 } else console['warn']('Invalid action in hotkeys', e)
863 }), this.releaseHandlers = {}, x['feedMacro'] && (this['releaseHandlers'][x.feedMacro] = a['actions']['feed'].bind(null, !1))
864 } ['press'](x) {
865 var e = this['pressHandlers'][x];
866 return !!e && (e(), !0)
867 }
868 release(x) {
869 var e = this['releaseHandlers'][x];
870 e && e()
871 } ['convertKey'](x) {
872 return x ? " " === x ? "SPACE" : x.toString()['toUpperCase']() : 'Unknown'
873 }
874 }
875}, , , function (x, e, t) {
876 "use strict";
877 var a = function () {
878 var x = this['$createElement'],
879 e = this['_self']._c || x;
880 return e('div', {
881 directives: [{
882 name: 'show',
883 rawName: 'v-show',
884 value: this['showMinimap'],
885 expression: 'showMinimap'
886 }],
887 staticClass: 'container'
888 }, [e("canvas", {
889 directives: [{
890 name: 'show',
891 rawName: "v-show",
892 value: this.showLocations,
893 expression: "showLocations"
894 }],
895 ref: 'locations',
896 attrs: {
897 id: 'locations'
898 }
899 }), this._v(" "), e("canvas", {
900 ref: 'minimap',
901 attrs: {
902 id: 'minimap'
903 }
904 })])
905 },
906 _ = [];
907 a._withStripped = !0, t.d(e, "a", function () {
908 return a
909 }), t.d(e, "b", function () {
910 return _
911 })
912}, function (x, e, t) {
913 "use strict";
914 var a = function () {
915 var x = this,
916 e = x['$createElement'],
917 t = x['_self']._c || e;
918 return t('transition', {
919 attrs: {
920 name: 'fade'
921 },
922 on: {
923 enter: function (e) {
924 x['showAnimation'] = !0
925 }
926 }
927 }, [t("div", {
928 staticClass: 'modal'
929 }, [t("div", {
930 staticClass: 'overlay',
931 on: {
932 click: function (e) {
933 x['$emit']('close')
934 }
935 }
936 }), x._v(" "), t("i", {
937 staticClass: 'fas fa-times-circle close-button',
938 on: {
939 click: function (e) {
940 x['$emit']('close')
941 }
942 }
943 }), x._v(" "), t('div', {
944 staticClass: 'wrapper'
945 }, [t('transition', {
946 attrs: {
947 name: 'scale'
948 }
949 }, [x['showAnimation'] ? t('div', {
950 staticClass: 'content fade'
951 }, [x._t('default', [x._v('Here should be something')])], 2) : x._e()])], 1)])])
952 },
953 _ = [];
954 a._withStripped = !0, t.d(e, "a", function () {
955 return a
956 }), t.d(e, "b", function () {
957 return _
958 })
959}, function (x, e, t) {
960 "use strict";
961 var a = function () {
962 var x = this,
963 e = x['$createElement'],
964 t = x['_self']._c || e;
965 return t("div", {
966 staticClass: "replay-item"
967 }, [t('div', {
968 staticClass: "replay-wrapper"
969 }, [t('img', {
970 staticClass: 'replay-thumbnail',
971 attrs: {
972 src: x['replay']['image']
973 },
974 on: {
975 click: function (e) {
976 x.play(x['replay']['data'])
977 }
978 }
979 }), x._v(" "), t('div', {
980 staticClass: 'replay-header'
981 }, [t("div", {
982 staticClass: 'replay-name'
983 }, [x._v(x._s(x['replay']['name']))]), x._v(" "), t("div", [t("i", {
984 staticClass: 'replay-button fas fa-cloud-download-alt',
985 on: {
986 click: function (e) {
987 e['stopPropagation'](), x['downloadReplay'](x.replay)
988 }
989 }
990 }), x._v(" "), t("i", {
991 staticClass: 'replay-button fas fa-trash-alt',
992 on: {
993 click: function (e) {
994 e.stopPropagation(), x['deleteReplay'](x['replay'].name)
995 }
996 }
997 })])])])])
998 },
999 _ = [];
1000 a._withStripped = !0, t.d(e, "a", function () {
1001 return a
1002 }), t.d(e, "b", function () {
1003 return _
1004 })
1005}, , , , function (x, e, t) {
1006 var a = t(5);
1007 PIXI['utils'].skipHello();
1008 var _ = document['getElementById']('canvas'),
1009 n = {
1010 resolution: a['customResolution'] || window.devicePixelRatio || 1,
1011 view: _,
1012 forceCanvas: !a.useWebGL,
1013 antialias: !1,
1014 powerPreference: "high-performance",
1015 backgroundColor: PIXI['utils']['string2hex'](a['backgroundColor'])
1016 },
1017 i = PIXI['autoDetectRenderer'](n);
1018
1019 function s() {
1020 i['resize'](window['innerWidth'], window.innerHeight)
1021 }
1022 s(), i['plugins']['interaction']['destroy'](), window['addEventListener']("resize", s), i['clear'](), x.exports = i
1023}, function (x, e) {
1024 e['neon'] = [16776960, 65280, 65535, 16711935], e['basic'] = [16711680, 16744448, 16776960, 8453888, 65280, 65408, 65535, 33023, 8323327, 16711935, 16711807], e['hsl15'] = [16711680, 16728064, 16744448, 16760576, 16776960, 12582656, 8453888, 4259584, 65280, 65344, 65408, 65471, 65535, 49151, 32767, 16639, 255, 4194559, 8323327, 12517631, 16711935, 16711871, 16711808, 16711744]
1025}, function (x, e) {
1026 function t() {
1027 this['data'] = []
1028 }
1029 x['exports'] = t, t['prototype']['write'] = function () {
1030 return new Uint8Array(this.data)
1031 }, t['prototype']['uint8'] = function (x) {
1032 this['data']['push'](x)
1033 }, t.prototype['uint8Array'] = function (x) {
1034 for (var e = 0; e < x['length']; e++) this.data['push'](x[e])
1035 }, t['prototype']['utf8'] = function (x) {
1036 x = unescape(encodeURIComponent(x));
1037 for (var e = 0; e < x['length']; e++) this.data['push'](x['charCodeAt'](e));
1038 this['data']['push'](0)
1039 }
1040}, function (x, e, t) {
1041 var a = new class {
1042 constructor() {
1043 this['ads'] = {}
1044 }
1045 addAd(x, e, t) {
1046 this['ads'][x] = {
1047 elementId: e,
1048 lastRefresh: 0,
1049 waitInterval: t || 0
1050 }
1051 } ['getAd'](x) {
1052 var e = this['ads'][x];
1053 return e || (console.warn('Ad with alias ' + x + ' not found!'), null)
1054 }
1055 pushAd(x) {
1056 aiptag.cmd['display'].push(function () {
1057 aipDisplayTag.display(x)
1058 })
1059 } ['refreshAd'](x) {
1060 var e = this.getAd(x);
1061 if (!e) return !1;
1062 var t = Date['now']();
1063 return !(e['lastRefresh'] + 1e3 * e['waitInterval'] > t || (e['lastRefresh'] = t, this['pushAd'](e['elementId']), 0))
1064 }
1065 };
1066 a['addAd']("menu-box", 'vanis-io_300x250', 30), a['addAd']('menu-banner', 'vanis-io_728x90', 30), a['addAd']('death-box', 'vanis-io_300x250_2', 30), x['exports'] = {
1067 loadAdinplay: function (x) {
1068 var e = window['aiptag'] = e || {};
1069 e['cmd'] = e.cmd || [], e.cmd['display'] = e.cmd['display'] || [], e['gdprShowConsentTool'] = !0;
1070 var t = document['createElement']("script");
1071 t['onload'] = x, t['src'] = '//api.adinplay.com/libs/aiptag/pub/VAN/vanis.io/tag.min.js', document['head']['appendChild'](t)
1072 },
1073 refreshAd: function (x) {
1074 return a.refreshAd(x)
1075 },
1076 loadMenuAds: function () {
1077 a['refreshAd']('menu-box'), a['refreshAd']('menu-banner')
1078 }
1079 }
1080}, function (x, e) {
1081 x.exports = {
1082 initialData: function (x) {
1083 var e = 1,
1084 t = {
1085 border: {}
1086 };
1087 return t['protocol'] = x['getUint8'](e, !0), e += 1, t['protocol'] >= 2 ? (t['gameModeId'] = x['getUint8'](e, !0), e += 1, t.instanceSeed = x.getUint16(e, !0), e += 2, t['playerId'] = x.getUint16(e, !0), e += 2, t['border'].width = x['getUint32'](e, !0), e += 4, t['border']['height'] = x['getUint32'](e, !0), e += 4) : function () {
1088 t['instanceSeed'] = x['getUint16'](e, !0), e += 2, t.playerId = x.getUint16(e, !0), e += 2;
1089 var a = x['getUint16'](e, !0);
1090 e += 2, t.border['width'] = a, t['border'].height = a
1091 }(), t
1092 }
1093 }
1094}, , , , , , function (x, e) {
1095 x['exports'] = {
1096 noop: function () {},
1097 isFirstVisit: !localStorage['visitedBefore'] && (localStorage['visitedBefore'] = !0, !0)
1098 }
1099}, , , , function (x, e, t) {
1100 "use strict";
1101 var a = t(48),
1102 _ = t(16),
1103 n = (t(140), t(0)),
1104 i = Object(n.a)(_['default'], a.a, a.b, !1, null, '0eaeaf66', null);
1105 i['options'].__file = 'src/components/modal.vue', e['default'] = i['exports']
1106}, function (x, e, t) {
1107 "use strict";
1108 var a = t(49),
1109 _ = t(21),
1110 n = (t(148), t(0)),
1111 i = Object(n.a)(_['default'], a.a, a.b, !1, null, '1dbc6ed9', null);
1112 i['options']['__file'] = 'src/components/replay-item.vue', e['default'] = i.exports
1113}, function (x, e, t) {
1114 "use strict";
1115 var a = t(47),
1116 _ = t(36),
1117 n = (t(176), t(0)),
1118 i = Object(n.a)(_['default'], a.a, a.b, !1, null, '4c95bd45', null);
1119 i['options']['__file'] = 'src/components/minimap.vue', e['default'] = i['exports']
1120}, , function (x, e, t) {
1121 "use strict";
1122 t.r(e);
1123 var a = t(70),
1124 _ = t(80),
1125 n = (t.n(_), t(81));
1126 t.n(n);
1127 window['PIXI'] = a, t(1), t(99), t(101), t(117), t(119), t(189), t(188)
1128}, , , , , , , , , function (x, e, t) {
1129 (function (x) {
1130 x['prepareData'] = function (x) {
1131 return new DataView(new ArrayBuffer(x))
1132 }, Number['prototype']['clamp'] = function (x, e) {
1133 return Math.min(Math.max(this, x), e)
1134 }, x.lerp = function (x, e, t) {
1135 return (1 - t) * x + t * e
1136 }, x['htmlEncode'] = function (x) {
1137 return x = x['replace'](/&/g, "&")['replace'](/</g, '<')['replace'](/>/g, '>')
1138 .replace(/'/g, ''')['replace'](/"/g, """)
1139 }
1140 })
1141 .call(this, t(7))
1142}, function (x, e, t) {
1143 var a = t(82);
1144 typeof a === 'string' && (a = [[x.i, a, ""]]);
1145 var _ = {
1146 hmr: !0
1147 };
1148 _['transform'] = void 0, _.insertInto = void 0;
1149 t(2)(a, _);
1150 a.locals && (x['exports'] = a['locals'])
1151}, function (x, e, t) {}, , function (x, e) {
1152 x['exports'] = class {
1153 constructor(x) {
1154 this['position'] = x['pivot'], this['scale'] = x['scale']
1155 }
1156 }
1157}, function (x, e, t) {
1158 var a = t(5);
1159 x['exports'] = class {
1160 constructor(x) {
1161 this['border'] = x, this['container'] = new(PIXI['Container']), this.background = new(PIXI['Container']), this['foreground'] = new(PIXI['Container']), this['container']['addChild'](this.background, this['foreground']), this.food = new(PIXI['Container']), this['food']['visible'] = a['foodVisible'], this.backgroundGraphics = new(PIXI['Container']), this.backgroundGraphics['visible'] = !1, this['background']['addChild'](this['backgroundGraphics']), this['background'].addChild(this.food), this.setPosition()
1162 } ['setPosition']() {
1163 this.container['position'].x = window.innerWidth / 2, this['container']['position'].y = window['innerHeight'] / 2
1164 }
1165 sort() {
1166 this['foreground']['children']['sort'](function (x, e) {
1167 return x = x['gameData'], e = e.gameData, x['size'] === e['size'] ? x.id - e.id : x['size'] - e['size']
1168 })
1169 } ['addCell'](x) {
1170 this['foreground'].addChild(x)
1171 } ['addFood'](x) {
1172 this['food']['addChild'](x)
1173 } ['setBorder']() {
1174 var x = this['border']['width'],
1175 e = this['border']['height'],
1176 t = x / 2,
1177 a = e / 2,
1178 _ = new(PIXI['Graphics']);
1179 _['lineStyle'](45, 0, 1, .5), _['drawRect'](0, 0, x, e), _['endFill'](), _['position'].set(-t, -a), this['background']['addChild'](_)
1180 } ['toggleBackgroundImage'](x) {
1181 x && !this.backgroundSprite ? this.setBackgroundImage(a['backgroundImageUrl'], a['backgroundImageRepeat']) : x || this['destroyBackgroundImage'](!0)
1182 } ['setBackgroundImage'](x, e) {
1183 if (this['border']['width'] !== this['border'].height && a['backgroundDefaultIfUnequal'] && (x = "https://vanis.io/img/background.png", e = !0), x) {
1184 var t = this['border']['width'],
1185 _ = this['border']['height'],
1186 n = PIXI['Texture'].from(x);
1187 if (this['backgroundSprite'] && this['destroyBackgroundImage'](this['backgroundSprite']['texture'] !== n), e) var i = new PIXI.TilingSprite(n, t, _);
1188 else(i = new PIXI.Sprite(n))
1189 .width = t, i.height = _;
1190 i['anchor']['set'](.5), this['background']['addChildAt'](i, 0), this['backgroundSprite'] = i, this['backgroundSprite'].alpha = a['backgroundImageOpacity']
1191 }
1192 } ['destroyBackgroundImage'](x) {
1193 this['backgroundSprite'] && (this['backgroundSprite']['destroy'](!!x), this['backgroundSprite'] = null)
1194 }
1195 clear() {
1196 this.foreground['removeChildren'](), this['food']['removeChildren']()
1197 } ['destroy']() {
1198 this['container']['destroy'](!0)
1199 }
1200 }
1201}, function (x, e, t) {
1202 var a = t(87);
1203 x['exports'] = class {
1204 constructor(x) {
1205 this['game'] = x, this['players'] = {}
1206 } ['getPlayer'](x) {
1207 var e = this.players[x] || null;
1208 return e || console['warn']('Trying to get non-existing player', x), e
1209 } ['addPlayer'](x) {
1210 return this['players'][x] && console['error']('Player already exists', x), this.players[x] = new a(this['game'], x), this['players'][x]
1211 } ['setPlayerData']({
1212 pid: x,
1213 nickname: e,
1214 skinUrl: t,
1215 nameColor: _,
1216 tagId: n
1217 }) {
1218 var i = this['players'][x];
1219 i || (i = this['players'][x] = new a(this['game'], x)), i['setName'](e, _);
1220 var s = i['setSkin'](t),
1221 r = i.setTagId(n);
1222 return this.game['settings']['skinsEnabled'] && (s || r) && i['updateSkinVisibility'](), i
1223 } ['onSkinsChanged'](x) {
1224 x ? this['showSkins']() : this['hideSkins']()
1225 }
1226 updateSkins(x) {
1227 if (this.game['settings']['skinsEnabled'])
1228 for (var e in this['players']) {
1229 var t = this['players'][e]; - 1 === x.indexOf(t) && t['updateSkinVisibility']()
1230 }
1231 } ['showSkins']() {
1232 for (var x in this['players']) {
1233 var e = this['players'][x];
1234 e['shouldRenderSkin'] && e['showSkin']()
1235 }
1236 }
1237 hideSkins() {
1238 for (var x in this['players']) this['players'][x]['hideSkin']()
1239 } ['delayedRemovePlayer'](x) {
1240 var e = this['players'][x],
1241 t = this['game']['replay']['updateHistory'][0];
1242 e && (t ? e.lastUpdate && e['lastUpdate']['packetId'] >= t['packetId'] ? e['lastUpdate']['clearWhenShifted']['push'](x) : this['removePlayer'](x) : this.removePlayer(x))
1243 } ['removePlayer'](x) {
1244 var e = this.players[x];
1245 e && (e['clearCachedData'](), delete this['players'][x])
1246 }
1247 destroy() {
1248 for (var x in this['players']) this['removePlayer'](x)
1249 }
1250 }
1251}, function (x, e, t) {
1252 var a = t(5),
1253 _ = t(54)['basic'],
1254 n = a['cellSize'],
1255 i = {
1256 fontFamily: 'Hind Madurai',
1257 fontSize: 80,
1258 lineJoin: 'round',
1259 fill: 16777215,
1260 stroke: !0,
1261 strokeThickness: 8
1262 };
1263
1264 function s(x) {
1265 x = x || 0;
1266 var e = new(PIXI['Graphics']);
1267 return e['lineStyle'](a['cellBorderSize'], 0, .5), e['beginFill'](x), e['drawCircle'](0, 0, a['cellSize'] / 2), e['endFill'](), e
1268 }
1269 x['exports'] = class {
1270 constructor(x, e) {
1271 this['game'] = x, this['pid'] = e, this['skinUrl'] = null, this['tagId'] = null, this.texture = PIXI['RenderTexture']['create'](n, n), this['cellContainer'] = this['createCellContainer'](), this['renderCell']()
1272 }
1273 get['isMe']() {
1274 return this['game']['playerId'] === this['pid']
1275 }
1276 get['onSameTag']() {
1277 return this.game['tagId'] === this['tagId']
1278 }
1279 get['shouldRenderSkin']() {
1280 return this['skinUrl'] && this.onSameTag
1281 }
1282 createCellContainer() {
1283 var x = new(PIXI['Container']),
1284 e = s(this['getCellColor']());
1285 return x.pivot['set'](-n / 2), x.addChild(e), x
1286 }
1287 createSkinSprite(x) {
1288 var e = new(PIXI['BaseTexture'])(x),
1289 t = new(PIXI['Texture'])(e),
1290 _ = new(PIXI['Sprite'])(t);
1291 return _['width'] = _['height'] = a['cellSize'], _.anchor['set'](.5), _
1292 }
1293 renderCell() {
1294 console.assert(this['cellContainer']['children'].length <= 3, 'cellContainer has unexpected sprites'), this.game.renderer['render'](this['cellContainer'], this['texture'], !0)
1295 }
1296 setTagId(x) {
1297 return x || (x = null), x !== this['tagId'] && (this['tagId'] = x, !0)
1298 } ['setNameColor'](x) {
1299 return x ? (x = parseInt(x, 16), this['nameColor'] = x, this.nameColorCss = PIXI['utils']['hex2string'](x)) : (this['nameColor'] = null, this['nameColorCss'] = null), this['nameColor']
1300 }
1301 setName(x, e) {
1302 x || (x = 'Unnamed');
1303 var t = "Unnamed" === x,
1304 a = t ? "" : x;
1305 this['name'] = x, t && (e = null);
1306 var _ = this['setNameColor'](e),
1307 n = _ || (this['isMe'] ? 16747520 : null);
1308 this['setNameSprite'](a), this['game']['events'].$emit('minimap-create-node', this['pid'], a, _, n)
1309 } ['setNameSprite'](x) {
1310 this['nameSprite'] ? this['nameSprite']['text'] = x : this.nameSprite = new(PIXI['Text'])(x, i), this['nameSprite']['updateText']()
1311 } ['destroySkin']() {
1312 return !!this['skinSprite'] && (this['skinSprite']['mask']['destroy'](!0), this.skinSprite['destroy'](!0), this['skinSprite'] = null, !0)
1313 }
1314 updateSkinVisibility() {
1315 this.shouldRenderSkin ? this['showSkin']() : this['hideSkin']()
1316 } ['setSkin'](x) {
1317 return (x = x ? x['replace']('http:', "https:")['replace']("/imgur.com", "/i.imgur.com") : null) !== this['skinUrl'] && (this.abortSkinLoaderIfExist(), this['destroySkin']() && this['renderCell'](), this['skinUrl'] = x, !0)
1318 } ['loadSkinAndRender']() {
1319 console.assert(!this['abortSkinLoader'], 'Called loadSkin while other skin was loading'), this['abortSkinLoaderIfExist'](), this['abortSkinLoader'] = this['game'].skinLoader.loadSkin(this['skinUrl'], x => {
1320 this['skinSprite'] = this.createSkinSprite(x), this.skinSprite['mask'] = s(), this['cellContainer']['addChild'](this.skinSprite['mask'], this['skinSprite']), this.renderCell()
1321 })
1322 } ['showSkin']() {
1323 this['skinSprite'] ? (this.skinSprite['visible'] = !0, this['renderCell']()) : this['loadSkinAndRender']()
1324 } ['hideSkin']() {
1325 this.abortSkinLoaderIfExist(), this['skinSprite'] && (this.skinSprite['visible'] = !1, this['renderCell']())
1326 }
1327 abortSkinLoaderIfExist() {
1328 this.abortSkinLoader && (this['abortSkinLoader'](), this.abortSkinLoader = null)
1329 }
1330 getCellColor() {
1331 var x = this['game']['seededRandom'](this.pid),
1332 e = Math.floor(x * _.length);
1333 return _[e]
1334 } ['clearCachedData']() {
1335 this['abortSkinLoaderIfExist'](), this['destroySkin'](), this.cellContainer['destroy'](!0), this['texture']['destroy'](!0), this.texture['clearedFromCache'] = !0, this['nameSprite'] && this['nameSprite']['destroy'](!0), this['game']['events']['$emit']('minimap-destroy-node', this['pid'])
1336 }
1337 }
1338}, function (x, e) {
1339 var t = 16,
1340 a = 16777215;
1341 x['exports'] = function () {
1342 var x = function () {
1343 var x = new(PIXI['Text'])("", {
1344 fill: a,
1345 fontSize: t
1346 });
1347 return {
1348 set: function (e) {
1349 x.text = e ? "Score: " + e : ""
1350 },
1351 text: x,
1352 destroy: function () {
1353 x.destroy(!0)
1354 }
1355 }
1356 }(),
1357 e = function () {
1358 var x = 0,
1359 e = 0,
1360 _ = new(PIXI['Text'])("", {
1361 fill: a,
1362 fontSize: t
1363 });
1364 return {
1365 set: function (t) {
1366 x += t, e++
1367 },
1368 text: _,
1369 update: function () {
1370 var t = x / e;
1371 _['text'] = 'FPS: ' + Math['floor'](t), x = e = 0
1372 },
1373 destroy: function () {
1374 _['destroy'](!0)
1375 }
1376 }
1377 }(),
1378 _ = function () {
1379 var x = new(PIXI['Text'])("", {
1380 fill: a,
1381 fontSize: t
1382 });
1383 return {
1384 set: function (e) {
1385 x['text'] = e ? 'Ping: ' + e + ' ms' : "Ping: -"
1386 },
1387 text: x,
1388 destroy: function () {
1389 x['destroy'](!0)
1390 }
1391 }
1392 }(),
1393 n = new PIXI.Container;
1394 return n['position']['set'](10), n['addChild'](x['text'], e['text'], _['text']), _['text'].position.y = 20, x['text']['position'].y = 40, {
1395 score: x,
1396 fps: e,
1397 ping: _,
1398 container: n,
1399 destroy: function () {
1400 var t = n['parent'];
1401 t && t['removeChild'](n), x['destroy'](), e['destroy'](), _['destroy']()
1402 }
1403 }
1404 }
1405}, function (x, e, t) {
1406 var a = t(90),
1407 _ = t(91),
1408 n = new Image;
1409 n['src'] = _, x['exports'] = {
1410 createMassFont: function () {
1411 var x = new(PIXI['BaseTexture'])(n),
1412 e = new(PIXI['Texture'])(x),
1413 t = (new DOMParser)['parseFromString'](a, 'text/xml');
1414 PIXI['BitmapText'].registerFont(t, e)
1415 }
1416 }
1417}, function (x, e) {
1418 x['exports'] = '<?xml version="1.0"?>\r\n<font>\r\n <info face="Mass Font" size="75" bold="1" italic="0" charset="" unicode="1" stretchH="100" smooth="1" aa="1" padding="0,0,0,0" spacing="1,1" outline="3"/>\r\n <common lineHeight="73" base="60" scaleW="256" scaleH="256" pages="1" packed="0" alphaChnl="1" redChnl="0" greenChnl="0" blueChnl="0"/>\r\n <pages>\r\n <page id="0" file="mass_0.png" />\r\n </pages>\r\n <chars count="12">\r\n <char id="46" x="151" y="49" width="18" height="17" xoffset="-2" yoffset="47" xadvance="15" page="0" chnl="15" />\r\n <char id="48" x="38" y="0" width="38" height="49" xoffset="-2" yoffset="15" xadvance="34" page="0" chnl="15" />\r\n <char id="49" x="227" y="0" width="27" height="47" xoffset="1" yoffset="16" xadvance="34" page="0" chnl="15" />\r\n <char id="50" x="151" y="0" width="37" height="48" xoffset="-2" yoffset="15" xadvance="34" page="0" chnl="15" />\r\n <char id="51" x="77" y="0" width="36" height="49" xoffset="-2" yoffset="15" xadvance="34" page="0" chnl="15" />\r\n <char id="52" x="74" y="50" width="39" height="47" xoffset="-3" yoffset="16" xadvance="34" page="0" chnl="15" />\r\n <char id="53" x="38" y="50" width="35" height="48" xoffset="-1" yoffset="16" xadvance="34" page="0" chnl="15" />\r\n <char id="54" x="189" y="0" width="37" height="48" xoffset="-1" yoffset="16" xadvance="34" page="0" chnl="15" />\r\n <char id="55" x="114" y="50" width="36" height="47" xoffset="-1" yoffset="16" xadvance="34" page="0" chnl="15" />\r\n <char id="56" x="114" y="0" width="36" height="49" xoffset="-1" yoffset="15" xadvance="34" page="0" chnl="15" />\r\n <char id="57" x="0" y="53" width="37" height="48" xoffset="-2" yoffset="15" xadvance="34" page="0" chnl="15" />\r\n <char id="107" x="0" y="0" width="37" height="52" xoffset="0" yoffset="11" xadvance="34" page="0" chnl="15" />\r\n </chars>\r\n</font>\r\n'
1419}, function (x, e) {
1420 x['exports'] = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAgAElEQVR4nO2db4wU553nP/addFLUhBdtkeG4k+xxZsgL5DBmW7fGLPIxG+2Ax+usZRuwxSx3u4MjIy0YhtiRzjImisLFzIBzcnIJ5ORgycPElhZlGOyVA3JmOXslxz2s5ZPW017sFwdNLM8L0q1I96ruxdPVVFdXVz1PdfX84/uRSlA91VW/fup5fs+/35/baE0O+DrwH4F1wJ8BPUAFeAf4PlCN+f5CsB54ALgPuBcjf5BPgSLwPvAucLmDsqwG/qR2/OfaeVgeX6ZyTZ6PgX+snXeSHPCfgM012XqArtA11wNyXQb+N/CvHZRpPfCnmPK6tyZTroVMReB3wD/R2Xdoi99W7sH8jm9wU36/XM8Bl4D/3qHn/w1wP/BYxN/LwCTwPPBF3E2eAk7WvuC1OEq1owjks/oFbTII/Jx4ucNHBTgNDNFc0dKyuna/07X728oSPMq13zKYkUxB7gaeA6YWiVyrgX3AOOnKq1L77r7aveaTu4H9wISj7JMZy5HHlIHNs68B3a1uktTww0cRo82yajxpyNVkcJE7qhK9jHmhabm7JkexDTmiGly7cvn4yj1Nw++EXDlMo/1VBvIEFUFU75clOdpX8JPAsxnJsw63OncN+BmwKvyjnoq6UT6f9wYGBryRkRHv/PnzXqlU8orFopfP5z0WfhRwd5TMAwMD3sTEhFcqlbwwpVLJm5iY8AYGBqIKZxYopJBjV5QcgNfb2+uNjIx409PTkfL4Mk1PT3tHjhzxent7W8m1OX0x1ZV707sdHh72pqenvXK53CRXuVz2isWiNzY25hUKhSzlGqRFjzUwMOCdOnXKKxaLXqVSaSnTqVOnWr3DCnA4dUm1JrHh+21lbGys3laC5To5ORlWAu3Ksy8oSz6f98bHxyPr2LVr17zu7u6gEmgYBdR7/3w+7508eTKyQvgEFIDHwimAAuaH1Av1wIEDsXKHqVQq3tjYWPC3+BWo30GOY4QqQm9vrzc2NhZZgW0ol8vegQMHoir2UIpyyhNSToVCwZuamloIuXLAAUINqLe31xsfH09VXpVKxRsfH49SnOMpyqoV6zAjnqaGXygUvImJCSvZIxRA2pFzkwLN5/NesVhs+WwbBVC0uZHnLQoFcDeBxm8jcxyzs7PhHs5WCewiMIQtFAptyZGhXD4Njd9X7gskV9M8Na7HcqVSqXiHDx8OK4FjDmXVil2YkU6D3GkUfAbtpp8IRdTf358oy3JSAKsIVOpCoeBdu3bN6UVEUalUvP7+/mDlKWI0fxz13v/YsWNty9BKrqGhIVe5wPQuk5CNkrSQ61qMXPmgLNRGa2lHSHGMj4+HFdMui7JqVX4No7u0Dd8not2sinl+EL/hNykiWwW6XBRAw0vp7u7OpPH7RCiBY8QP03ZR08Y2WjhDuWwWXp/1Zcu68cfI1bS4VJPzWWoKIMtevxXHjh0LD7VtFGaQJoXV39/vzc7OtiVXUiOMKLeWaw6uCnS5KIBdNeE7VqlDvy2pB1lHoKJMTk5mLk8LuYrEL77Nm1wRFStcXvXGlM/nOyqLT0gxVXBbcW9q/FmN7hwUQB4YI6LhDw8Pp1JEy0EBrML0MB0dcnuecw9S72k7OQrwPC885I4bBcybTJ7XVF7hUUBuvuXxvMgFN5vhdtO0KUuFZakAmqYetNHwbZ+9FBRAvfe3HfqHF6sKhYJVITr2IIm97ezsrHfkyBFv48aNDS/V34azfbGWc0jn3t/fDQmupLvsZERUrvDopEGmoaGh2PuVy+UmecBsEdqO+ixkiuJZMmj8/jblnj17vI0bN0btUETuxdeoLyy3u+aQUB5LSgE49/4hGRsanU0lcuxBmnq4FluMkYdtZbOs1P1hWeKImMc3HLY9dmh0ErUtWJeLGEXZYm+/4bAd/VnIFGQzgZ0l18ZfLBatZA+8u1bD/44sLC91BVB/OTa9f1KltrmHYw/S0MPt2bPHquG7yuR5VpW63osl9bQR94s8bO4Tmga02n5r6GH9etZiCy9WYdoocUuZwCh36xFKkKmpqVZGUq0afque38d5pGvDUlcATpU61Hv722YNVoM22jXUOJIWkv4c08NFWYnNYrZxHgd6a9fnML1iveKlkClKAVgP/0OVwjfoWc1Nf4YKlhXR0sqtYY7d3d3tFYvFKGXt+xz48oBxsHHqHR0UQH0EZ9voKpVKlFFUsM6dAr6DqRe92PspNCijrNYg4hTA7ZaCLRQ5YJN/8thj8abe1WqVEydO1E8xjhofY7zYjtc+46233qJajXdkDD1rE/Ga+zfAQeDva8+oAq8Bf43xbPPt3mcDsl0A3vBv8NFHH8XKkzXXr1/nxo0b/mkJeBvT+Mq1/5cAbty4wfXr17N4ZBXjsTYDcOXKFe69914uXLgQ/PuPga3AHswWmO8VeRmoF5BNWa1du7bhtMVl6zDvNgfw8ssvs3p1fFutVqt8+9vfZmxsLPjxDPAjoA/zvv8W+J+YejGLvXfnFxiPQQDeeOONmEuNLMePH2dmZsby9s10QgH4Djq2TgpxzhF3AmsA8vk8a9asiX1wpVLhs88+q59inF98Zmqf8dlnn1GpVGLvtWHDBrq764pyA8kryT/HVNqDwF8BT9fO4zTNPfX/3HNPzGXZ09XVxcqVK+unNP6+VbXPWLlyJV1dYU/hRj755JOG05hLvwAexbwLv9ZWa///rxhF2cq9txNl9SDGfZz+/n4eeOCB2Iv9xh9QWj59wCMYBXYEM9pLa+r7PjWFcenSJcrlaN1x/vx5tmzZwg9+8IOUjzFkrQDywDTwXUyh2DAIHCV66Pg1jF8169evp6enJ/ZGH374IVeuXKmf0uj7/EXtM65cucKHH34Ye68VK1Zw11131U9rsiTxG4wi+A2tG34OM6R9DvhL/8NQj9VEtVrl6tWr9VPgaszliYR+32pgNzc9/Powv5m77rqLFStWxN4r1CMndc9XgAFMTIkZ4CeY4X5cd7eKQC+eVFZgpZRWEej99+/fTy4X32Z/9rOfRTV+n69jYmY8jxl5FjFTPxfzbYB/odYWrly5wuuvv97wxzNnzrB27VoefPBBPvjgA8dbN5OlAsgBr2Lf8KMIjwTW1O7LmjVrEl9QxEsPK4BPWlzbRC6XC444cjVZXNhMtLtrBVPxf0hNudn0PqVSicuX651jCfh9xGVOv++ll14in68v4RzENMJ9wDPUyn3r1q2x5Z5SMX2Bedf31v79OOH6/0ItDkF3dzcbNmxIfICFUvoGZmRndc+ZmRl++MMfJj43QA/wd8BPMSNiW/dpfxpQBjNd/fTTTzl48CB33HEHO3fuZHZ2Nv4ODmSpAA5Te0n5fJ5isYjneYnH5GS94x8kMN+v4TTsc+yJEgk902XcOQT8Fgv/9EKhwE9/+tNE5XbixAnm5ub803eAzyMu+2cc1jn6+vr43ve+1/ARcKL2L93d3TzxxBOx93j33XeDveK7RCumdugH/pt/YjNPL5fLXLpUn0qXiS6r+6gtzm3atCnxnr/+9a/Zt28fxWKRcrncVI9LpRLT09McOXIkqFTBKILvYpSrrbv5DPAmwIULF+jp6WFsbCz4/v1rMiGLXYAhAr2c7erl5ORk8F5RawFOK6IWq+R1OVPsKNj6cLfq+Ru2sgYGBqzdch1MgesBIlzMpYvFYtN2ls332zS7taHBfsB2i87CjqMjq+1BZmdnveHh4ajRn+2UoJ+b0beC9/gVZpRm/Z47vQ3Y8JJsDRgijHXCPtIN20ZJLymiMkYVtJOhTEofbiclk0To5XnEmwH7C7DOzw/61ttaTWbgeBNHQ72yNUqyVErr6MB+exQRytVFCazDLCyWav8OYt6xU5vttAJw1tARlXqSZnsCJ7k6oQBS2jxkpgBmZ2fD5WTjRrqZwA5MpxxwQsqxHdfbKFI1fs+zVkpO9aBdUrqbx5GZAmh3DaCLWm/U39/PK6+8kviFcrnMww8/HFytn8HsD8+1/tatx/nz57nvvvuC5QTNC5tRTGNWoQHYvXs3586dy1S2M2fOsHv37uBHP8PYPWRBP3CWQL06e/Zs4hoJmLr1k5/8xD+tYobLUQuMTovL7ZLL5Th79iz9/fU+qQ+z67KQ8TSB9hXAarB/SdVqlV27dgW3L8qYhbKkSn3LsW3bNj7//HMOHDgQ/HgHdmsRr2DCUDM3N5epEjhz5gw7d+4MLkiVMFt5WTBEysbv162Awnwd+IcWl8+7/UXErssWjL3IgtL2LkB3dzevvfaaVePfu3dvcMW4DDxMZ2PNL2lyuRyjo6OMjzeEuBskebGtilnNr4JRAkeOHGlpVOLCjh07mJqaClbkHsy2VVyACxuGMIrLufFD0x59GfgftO5YnGwKsiK069IHfJMFHgW0pQDy+Txvvvlm4hYKwN69ezl9+rR/WsXMGdu3ZLgF2LFjR3C7FMwqcJyDUtMw+uLFi1bvyYZt27bx/vvvBy0lV2O2rWzDXIVpaPxDQ0NOjf/MmTOMjIz4p1XsbAusKZVKfP/73+f+++/njjvu4Lbbbqsfa9eu5fjx49bm0lu2bAmPAu7MSs60pFoEdNlmCi3M+I4nmcq1HBcBw4S2OVt5ljXEiu/kIpfjDkUrDgS+7w0NDTnJG1qM9LALBpp2dyl2a9c2/kKonqZZPF34RcBXX32Vvr5ko7/R0dGgdgbYi7GRX658Ts2s9fTp0w29hX/ccccd3H///Rw6dMjJkePo0aPBXvchjDVbkBxmcakP7IfRo6Oj7Nmzx9mpZPXq1bz55pvBHu1bGOs+W4aA0frJ0BCvvPKKdc9/7ty58GLkGWAk+urO4q+1JJVhLpdj69at9VPMNGBBcR4B/Pa3v03UdJ7X1PPbamefpWoHACHDqKTDdt/d8xLdlOtJSmxHaGG31jSRaBzClUW+CzCBLl0IGZG5vp9265X/HN912smtO4McAQtnB2BLm43fZylaAvokWgQGjwyiFTXEk0vhM98kj20E34ipUtIed90Qx/ZdBAmF//bLwSUuRdYdi1OE6Axiaiz8FCCOiGH/KOmGZtbOLZY4bf84uLlGMY1xC70tdKzArEL/JcaHvARmCHno0KFE+/0IN2W/97gTs6hEPp9ny5YtsfeJcG75EQH78rm5OXbu3Mno6GjTd8P09PSwfv36+inxDmGrMI5Q9S1kG/sRH38bMsA5zLTHxY4ka6cwJ1fzxUTmCuDcuXNZNX5wDALRhvNO9MMzdi6qUcUEifB9Hx6h1vAuX75MqVRyvd9Xav/24eA6HXIuGsWke9+MCWJyxv/DyMhIog2B47y2wbPPZgu5LuToaLjxnwF2svBGZH9c4OenJnMFMDg4yLFjDaP9g6RP03SV2l721atXE3vHiCgw4SAX1vu/Wfvfx/C5f++5ubngMyOJiVNQ31NO4cL7FjcjGZ0Ghgkszp04cSJN2UexGbOFCdh59vlEjCr9xh8vWDTtdizhwv0PLg+/evVqUPleBf6fy/ezpCNTgIMHD0YpgTTJLX9PdlF8VuHg/x0RXShrN9cFw+K3VTGxHcqQ2bB2FfAktaH/0NAQg4ODVl9sMaXc2eJyG5w6Fou9eyfX4gjSKLFM6FhMwAgl8Aru0VHajeLzYODPTlFuEqILBQmGQJvCRPpZ3+LaKO6kvbBnfuNdEOs2B/4Cs3VJd3c3R48etfpSxlNKn99TW3uxmXaF1jh8O/71mHc/SGBUkxS3Eppi/V1qdd184KwASqWS9Tz14MGDDA3VO/4cxmHExQvKKUhiLpdj//79wedt52ZUYOsoNxHPukS0AvBDoH0LM//ehlngmql9/iKm0ocjw67mZliw09QWzWzm7qFgntcDclkvbEWEAxvm5vaWH7Jsty+zjcJMWDD11wVWAzz99NNWveTMzEx4nx/MaNJ2i7VVKO7PgYtgpl0XL16MlSNUr3wZ/IW/SQILmjZxBUPTr9/FfmEecLYD6O3ttd4ujLCkigrQEMdizQvg9/xRocCdjza2AX1N1s4WZ+yRwRasc6CSCCvDdo6oZBzOyV3jtk1t4wpEvL80bsELHw/AxWYg4mW6LAo6R2+Zp8xATZV6amrKJUOMs1yeF2sI5OzjHleh/cPGnsBir9y5sdkkLXE4okYCqZKoht9xPp93ytbrmG+iFQuvAGyv92kzgIRzgsl5yA0Y2+Cmp6e9kZGRVvnhvN7e3npYMNvKkzAySRUOzA9dFVSYfsgyl5BiCYZAHUl5lYRFQs55TVwa0bHY5CyMYnEoAByGPp7X1ONci6gorWjQ1oskO7BTxqIOyBaViTdVOLB2STAFdjLpzhILBTBv9SpiFNxO/MTFowBcKlub6wH1YWSWJssxvy1ulDLvlTok27UWss1LOLAgEanYwr1aR0zNbbBMyV2vV50qswzWwcIsGgVQt+e21Z5taMIGW/esh2wRL+kYrZ00Ug230xIRGzBOtsgknPMkV9S7XOwKgGC9aic1eBQR9cpl5NuKRaMA6r1NG+sBtvnboUO+7imCNs5bUMmIEVdSYNCG0UmnGl1E42/Vqy0FBdBQZoB3+PDhtt9reB0Kt4jAcSwqBZCqV7YMbhFFgxupiyttFClfUseCfvi0SJs9G355Lai/U/+9njx5MjPZxsfHw0opTq6loAB8ORuUQKFQsM7dEKRcLkdlD86q8TuXaacVQEOvnHIq4Lor0KAE0viwVyoVb2xsLFyRbV9Sg6tvb2+vNzY25pXLZevnt6JcLkfJZdPzh2lQArRRoX2mpqaaEoiQrJSWigIAMxI4TMi2I5/Pe8PDw97ExIRXKpWanlOpVLxSqeSdOnUqqnz8MrLNCmSDawLeYBk0dbbtKoA8KRfo2kwsUcAUbMOPHBgYaPmiSqWSNzEx0Wqv3vUltQz6sXHjRm9kZMSbmJjwisVipCyeZxp7qVTyzp8/742MjETaLtTKNU2oLTDv5mSUjMEKHaU4fdkmJia87du3t6pQ4yQrpbSVNcujlUVgKx7DmHW3+9wyJkGobV5AF5oUvMURqQSzUACpFugySC11N6aA27HGq5D+JTkF/Ugh12ks8gsmkAOeIpsK7R9TGPt3W6WUprJmrQBcoxbfjTHVTlNuZUyWaDtvp/TYKtdYBZiFAoCUU4EMTCNzmN74NG6KwG9gQ7QXmtkPC/VzzItvt7L6ladducK0U6GDDf850inLhRgJuPb8reTuB/ZjEq6Ec/X5dakEnAK+Q2d6/I6RlQKAFFMBy5BLtqwn/kWVan/bj5vHngu9GAegEW7miY+SxW/sJeA88L3a9+YjTny4QkcpTl82v7w2zoNcYgFIq5mLRFt9HXO8T7hHzjLBpFh89NNc3yqY9QSXaYXIkDRztFbBDNPO92x7/110bt4dpdQ6xTrspi1+6DBbOlk+7cpZT2vd4vAVgTqBBcB2JGDTSFxGFS49f9rRRRpF4Bqp1YWGbUzLY9LivvNVPmnkHHe4R5Z75mKZMJ89WydHAmkav9+w4nrYher5beRsUEzDw8MN60OVSiXKuCgLk1mRMTlMqGu/d49a9S7X/jaGWcnOJiHdPLiUZhCvPYmGePgpk5MsWPmklHNX8DfH5RqIMMludwVfJPBvLa+7G7Mf/WeYsFdxdNUOPzb8dUyF+DW1lNW3KKswUx2nlOpLnFXAJmq/+dixY+zYsaPlxblcjtdee41Nmzb58RgfwoRje20eZL0lsYkJ+BjwY0ysu6TGH0UXJubcSdqzilrsQS/jyAG/oKYUXePhL2FWEQgE+sQTTyR+YfXq1Tz99NP1UxZB7rzlTJwC8O2i/xeBhp/P5zly5AjFYpFyuYzneQ1HuVymWCwyNjZGb29v8H5dwN9hYtCnjYSyVDlMzSrMJaX6MuBrOERi9rHMMSAyoJUCyGNWbV+gthBWKBSYmpriyy+/5Pnnn6evr4+urq6mL3Z1ddHX18czzzzDJ598Qrlc5sCBA8FLejAWZS55ApZyVzmEiSIL2GdVFmI+iFIAOUxSiLod8+HDh7l48SLbtrnPALq6uhgdHWV2dpZCoe5rkwN+ib0S+Hc4xM5fRPRj8iEAZg5smwxDiPkgSgEcJjBcnZyc5IUXXmh7vtrT08PFixeDeQIAjmI3Hfg3bT18YVgHvERt9DI0NMTBgwfjv7GEaZEXwCmzU8K9xDzQ8fhontcUDMQmPlo3lrkBWoUEdzzatQNoiDDTTtQgh23ATO0A2ojwNMnN2A6rMFt51tuTET78LnEiRBssVIRUGzfghVAA7dgAZBaXz0EBQIaWgLbvP6K8wzkfZAewRFjoGOlxVl91A5okBeCS8SbiyMICsMHSr91RlKMCgAxGArah3ltEu40qO1kCLnJSZ0kJhkByyZLiGAzEOghnigaTJQ0xEbKIFzhPv6dBbtv3H5rKJQVSlS/AIibTPGmFQiFtnrRWw72loACcoyJNTEwkltM8/J6GhCK27z8i05NNg5U34CKkoeLazP1shtk2FckyCSc4ROENKaZpbvokdCoAiI9TMJTJyUmrofY8KIB6MpGUQVw83NyVFQ9gkbEKhwrQIoHG3dzMlV5f8EmRVbZVRUqrAMJHp8JtOYVD8xXfIlAAqdKJtRnMVSwyrBfYPM8qEaRTzryYdNdBrEcoDlll24lvF8R56O/LuAgUQLtpu13DuYtFxu042mtfvXqVubm5+inweeiS9zE9LZcuXaJcLsfeb82aNeTz9R23NcBXrKWP4Je//CWVSoVSqcT09DRjY2MMDAxEXboN4+D0Y9qLvPtXmKi75PN5XnrppVijqdHRUU6fPt3G4zLlQYxpNuvXr6enpyfxC88995zvqQfwOvAPHZNOzAtOaa4seiSnKUXEOkB4RJFZIs6YpBsVjAWk67TAaeifJrNyB0cAzjs/EXkhbzWnrmWHjTtwEuFG80fMyIC5uTmuXr0a++UVK1Zw11131U8xI5IgmfkBdHV18cwzz/Dll18yNTUV9k14AeOybGsAlMMMf/vA+Pc/9dRTLS8ul8s8+uijwdHTQtMHPABG9gceeCDxCydOnAjK/xpG+YkljLMCsBiyV9sVKkRH/AC2bdvGxYsXOXz4cPDjHRhHKJuRwL3U5r82Q//Q0Dl+XtR5/EAdOYCtW7cm+nrMzMwwNTVVP8WsoWT9rsU8czuODhtdXV2sXLnSP+3BuLr2c7PRrCbgwBFy7Ggil8sFe/Uctd4+eAkmlgArV66MdEFOSy6X44UXXmB8fDyo1AaBvQlfXQU8SS3SzYMPPhjr4nvu3LngvH+hGz/AN3AM1BHq/d9Bvf+y4HbgC0zYLm7cuMH169djvxCK2JIDvgv8hpvmr9cI+L9nQFuLgjbs2LGDV199NfjRPuLnt38BPAGmAR09erTlheVymX379gU/ejm1oNmQwyz+rQbYtGlTYnAS9f7Ll9txnLMDPPXUU+EgH50kVVQZVwYHB4OuyqsxPXyUZeI6TGDUHMDTTz8d24BCQ/9zwBsZiZyWO4FvgZm67N+/P/ELFy9eDPb+F1Hvv+xw2rsPrgoPDw83rar39vZ627dv96ampqzMSkN79+EgIbEJNDZu3Oht3LjR2759ez0jb9o03ZauqNZOU0meiSl2Afwdi3YyKDmZfcs999ZgMw7GQFmToAAgZSz9gYEBb2pqykmWkJXbMRoXBJ22zpKMklIqgKAicHWYadfs2yZ2g1iCNARuyMKLzRaH5KC2qbSajkKhYO2TH2HpGKzwmfX+ZKMAXEcCzpZ/lqbaYhlQHwXQpsGNC21mB+7FZK3dCGznZkbepoQl+Xze6jfFGCZlZpDUDm2Wl9PwP0IZyvBnmRG0A5gmsEK9e/duzp3rfB6PSqXCZ599Vj/FbEvaMgu8VzsmMMPb7ZhFvD5Myu0ZMAuc+/btSzRNjjFMWqqBSYN8E4e9fy3+LX/ChkCvUMveMzc3x0MPPcSLL75Itdq5HZ/r169z48aN+ilmWzILLmOCjj5G7TdduXKFDz/8MPZLFnYJS5VVOCRXqVarvPXWW/VT4J/R1t+yI6wAqsBuAim8Dh8+zIYNGzhz5kxHBIhwLvpjxo/4VxwMk5Yx3wA2gLFd2LBhQ+zFpVKJy5cv10+pjaTE8iLKFHgO2Am8SE3jz87OsnPnTm677Ta2bt3KL37xC2ZmZiKNhj799FPOnz/Pnj17GB0dTRTgjTcatsUvoV6mU9yJg/GPhdenWAa0Sg5axXjH/R/gEYyNPABvv/02b7/9duKN8/k877zzTuw11Wo1aHhUBX7X4tJ1wJ8D92HcjScxPbsNijBjyuAe/+See+6JudQgxXxrkJQd+A3My/8n4H4c/OaT7OMhcpgZtQDYD+wBbqs9/3HgOGZI+g7wIfB/gS8xi4JgKvy/B/4Uk9H4b8EopS1btsTKFKGUkk0jFz9fAbaAXRmUy2UuXbpUP8UoXSFYD3wHOIVZEW7absPBmCi0xxwVjnsd8xzrPibikR8+Ky6opdMxj3YAToZeCbYQQgCmQfRjtg7rxjkpQ0u1Ci6xi9ree39/vzcxMdEQhtz2yOfz3smTJxNl8rxES8A8i0sB2NoAWMdUtCgDsYxImgLAzeH0HZgGsBYoYBpsg2+uP++3yX77+uuvB51kJoF/ibjsm9TyFG7dupXHH3+cxx9/HDAeaufOneO9997jD3/4A++9917DF/P5PGvXruXRRx9l586dVm7EFltfc5jf/TzGoWYh0vxWgb8HfgR8bPkdp/n/Rx991HCK5v+3HM5mt8PDw9bZhCJCS0U5mKxini3vHLMVpcU6zVkLmVxxsmBs09JQLDGiRgD9wFkshn35fJ5HHnmEQ4cOWQWUBNPLHjp0KLjF9DqmRwuzCod963aZmZlh9+7ddTExi5+2Pexi5is4WDC2aZkplhhhBbAO+OvwRf5w+qtf/Srr1q2jUCiwefPmVNF59u7dy4ULF/zTGUwIrqghZh/zEAcAIuP1vYuxilwOrMIholIHLTPFIpTDdIoAAAOQSURBVCSsAL6GCXOd6+/v5+zZs4n24i6EQmJXgUO07mWd7NbTUiqVePLJJ4PrETPA37B85r3thn3P2jJTLCLCloBO8QFtqVarHDx4kJGRkeDHe4ELLb4CDnbraWU6fvw49913Hx988IH/cRlja3DL9nohU+lPWD6KUEQQVgCZa/tSqcSWLVsYGxsLfjyKWWSM4xI1n4SHHnqIPXv2cP78+bYdk/yGf+edd3LgwIFgb1cCHsbewnCpsIbaSGrNmjUdG0mJ5YFTUo+k1eQDBw6Eg2JUAJdggvXV6+CRz+e97du3e2NjY9709LRXKpUidyAqlYpXKpW86elp78iRI15vb2+r/fSXaT9FmC1+8JV67AXLY5J0ATk2A79yfJZX+47Cf91i1A1d0iqAcrkc1fA9jJnuYAqZnsVEoc3E+CZw+JZ0WScKtaG+FehwtJMVqG4I5HAca+N5YomSSgH4Kbc62MP2YxJ5TpEiJFiEPAvV8IPYjgTS9vxhbEcC6vlvIW4LnecwedoHASYnJxkcNJ329evXqVar9cSbH3zwAe+9916TBV4A32LtV5httawWk3zPtq9jfBP+BOPm2kVzg65itrLKNRk+Bv6RxZGcQ4hFybO0Z+9eBn6OUSJacRJiCRK5+BZz+I1+iFrQCSHE4ic8BQjyLCaBpL9wdx0zpK5gtsw+wOwTf8JNP3whhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIcTC8P8Bu1yd761JewYAAAAASUVORK5CYII='
1421}, function (x, e, t) {
1422 var a = t(5),
1423 _ = t(53),
1424 n = {};
1425 x.exports = {
1426 getTexture: function (x) {
1427 var e = n[x];
1428 return e || (n[x] = function (x) {
1429 var e = a['cellSize'],
1430 t = e / 2,
1431 n = function (x, e) {
1432 var t = new(PIXI['Graphics']);
1433 return t.beginFill(e), t['drawCircle'](0, 0, x), t['endFill'](), t
1434 }(t, x);
1435 n['position']['set'](t);
1436 var i = PIXI['RenderTexture']['create'](e, e);
1437 return _['render'](n, i), i
1438 }(x))
1439 },
1440 destroyCache: function () {
1441 for (var x in n) n[x]['destroy'](!0), delete n[x]
1442 }
1443 }
1444}, function (x, e, t) {
1445 var a = new Image;
1446 a['src'] = t(94);
1447 var _ = n();
1448
1449 function n() {
1450 var x = new(PIXI['BaseTexture'])(a);
1451 return new(PIXI['Texture'])(x)
1452 }
1453 x['exports'] = {
1454 getTexture: function () {
1455 return _['valid'] && _ || (_ = n())
1456 }
1457 }
1458}, function (x, e) {
1459 x['exports'] = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAGkRJREFUeNrsnXm8VlW5x7/vGQDlMIgiigOgoqZQIjlrgmnZBKl5u1ct5zRn8VoWpDlnpEZoOZOal3srTb3dW93MUlFUBDQFTUNUJlFQpsN8zrp/PM/78fVlrz29+5yzN+f5fj7rc+Dde6+991rPb6/5WSWHkSOu1L9XWFK0Ey5cAQ2WQjVTArL4zlwNjNN/1wE/yNGzdWIBWagldHcww8HZDko1xHOtk29ZZbiuhvhK+kwz9Bktr3zBudBgCVRb+FmFQT/uYFCKOK4PEEc53JAivkH6LOU4Jlo+mUA6Iox00Fpl0KscnOegLmYc40PEUQ7jY8ZVp/deVXV9q4MjLL9MIO0ZejiYG2LUTzgYHBHHjTHEUQ43RsS1m97Td/1cfWbLOxNIu4Q7Yhj1agdjAkqTkoObE4ijHCYEtHPqHFzsoDnG9XdavplA4oYBDrZLee3nA6pWYeEZB3tWiGNCCnFUtifKItnDwdMJrm11cHTKd95O08wE0knCrxysd/BrrZ/H7YHq7WBeCsNe4+A7Dm6tQRzlcKuDS7WESnrtPAdbJegJG6lptN7BAyaQzhH6OVhXZTivaVUlynh+mYGBh4UnHZyrf9vqHvdGvONWDi7SNKm8bl0Npa4JpEBhXES7YZKDAwKuGxVheAsdrKjBcKc5GO1ghP6dVkNcK/R5fMdHB7zfAfruYSXTOBPI5h0aHLwT08hmOPiWgyYHfRwsCjn3AwfH6Nd/VgqDfl4FOKIijHLwXIq4ZulzHKPPFXTOIgdb67udqe8at4rW0JkEUupk8xCOA36b8JoVwDvAkJBzxgJTNc27AScCXwWaYsT/PHANsDLgWJNOPzkgRjyrgIeBB4C1Os3kQOA6z/mvADsBvRKmx/Ep0rCwc7E6m0D+CozIOM4/AzcALVW/DwFOAYaHXPsscK0at48mFeCBIefMACap0VdSD3wXOCrD9/0bMNIEsvmxlxpQKcM4FwAXAB94jncHRgOnBkwMfVZLjuYY9+muIjmo6veNKoxHQuLpA/wM2CHD994bmN0ZBFLXiUqPcz3icAFf/7jcDnwYcrwZmAycA8ys+P1pLTmaY96nWc9/quK3FzXeyRHxfAjclvL9WgieDXxeZzGaIpYgvbRdkOTRe+rXPqhNsBy4Sv8eC3wxZpx/AG7Sr3gcugPHANsCd+k7JKUHcCbwPvBQAoE1ABcneLf/1fh7AZcHtFNWaftlWYq8W25VrLblYeBw/YLO1Pr3TOC1kJLgfK1mBDETuEQF16hiOgg4DdjKc81c4FJgacJnr9N2wYYa3r9R37M14XV9gJ8Ag0JKmnu0s2GFPmNJr9k34PwLgImeuOqBPYFhGvYF9gGe1CqnCaQNWQD0D/h9NfAyMF3FM0P/vwGYBXwi4Jr1Wno8XZ0uQBfN5BOB/aquuVqvKVLylYCDtUToUvH7NKTn6zV9t+p3OiTgGoB/aJo2AkMrRDBc/79lwDMs8uSdCSQjtgcWJjh/A/AmsIfn+CLg5JAveknDNsAopJv4Ma1aFbF/owSMAY7UKtQjwBI+GhbwlVj3atoTIJJd9Jy47JAwD00gCRitVaysuA34rwTG1aDVh7UFbnd20yraxgQi/zpwdkb3/6oKsxACKVov1vAM41qnDe3YSaklTZHFgT7/hoQl4B8yfO/hRUqsoglkvwzjmkK6nqTOyApNryzY3wRSjBLkfrP7DkmvQpUgRXL7MwDoG1IazAL6ATtr2CYkrjnAPLP5RMwH3gAGh5yzRNP1beA9pJfrsKpztkG6mueaQLLl0yHHJiNTH0pI92JvFdP2wEDNkF2ArfX8uylmL1SHNmeRcZLr9f9LkR7CucBbSI/g+8jg4Wo9P0gg5VLEBNKO7Y8lFZnYrGEBMh5SB2yBjGT3UtG8YAJJJZDpiNfHRciIeDOwBv+g5ZKQvPytCaR9SpDF+sXy0Vohmve0mmCkYwMyGh6X1Zo//RLUBqyRnoJSSOPuZaTL1sgf6zV/gqpYpSK8QEeVINcQbxFQSdsT9fo3iNnEnzBotC8t2nlyZNXvvZCpQC3aZolT3X2Oj3wXb/YC2Scg0dIyx9oTuaVV88dnA0nokFpC3WaQAe+bHeaaJSSfeWxtkAxLj2azwVzTHFKKJKGpMwmke0bxvIZ0Mxr5ZY3mU63UdyaBZNX2ecca6LlnIzKyXkjyNg6yGBnEWxfxxdioYao10HOPQxxU9FV7C7O5FqArMk7SzwSyKTORZZwbYiS6CaM4LEDW3pQXoIXRCFwEHG0C2ZQNGlrNpjbb0sTFsIHcVJvz1otVR0FGWI02b7eYQDxfD6s6WSljAgn5cphADDqzQErY/uxGuvZyqSNu2tYMQLrtKkNvy28jIQciPpBfQNalTNN/v10kgfQPEENfy1sjI3ojk1wrJ7ouqRBLWTgL8ySQXsB9Kob+lodGO7MN8AUNZRaqWL5Jcv/BmQtkBbLnRk/LKyMn9Eccfdfs1imLRrrj4679ay2NDCMLO5hJBgPOWbVBZiIe19PwBuLj9fUMhWYUm/uQpbq7I36VB6eI48U8NdLjGvZi4O/I9Od/agNrFTIleoPZhaE1kvkaGhGPNE3a1tgN8bg/FNguIp4ZWTxMVs6rhxC8OB9kV6TJiB+l1chMXRsQNFLZq37UuyL+z/oA/wZ8JuDcT+nHOEKOrl1KkPLCpS0Cjs0GXrW8NTIqXcoTWlchbpxmBwhkLRntoZjVSPrGELX2wyYgGm1XogStG3mZjOZzZTnVxNco2png3YYMo1a2VPtK2yZuV4FM9/yeZrN6w4hDL49AZuRRID7V9kV2djWMrOlL8FSmXArklZB63/aWl0YbsL2nPfxKHgWyDhnbCGIAxffBZeSLOrWrat4kw23ysjDansg+5LORQZwgBhHcBWwYaelG8J7vuyPDCudn0fatRSB7Az9HPFb8LEQcIFMFulueGhnSpGIIYg+1yflqo0PaSyANwNeAx7We923iuYTcCuvJMrKll9pVlIi+jYyL/FVtt6EtBLId4nr+LeA3wMgUL7ST5amRITsmPH+E2u5basvbxbkoai7WQOA64DigS8oX+SdwJ9INbBMSjaxoBIYBZyKTGJOyHngQGItzc9MKZHvE/22SYsnpzZ9Ctg5egMzLt8mJRtaUtBa0A3ASsmFoV+JPbdoI7Ixzi9IKBGSzxeNiKnIp8AjwR2Q1l4nCaE+x9ERclo5GdjSOqvU8iHNfq6WKBfBZ4LGQ0mIZsqXvQ8g2WeZt3ehoGpAt/o5FuoJ7e0qVo3DusVoFUkKmswd1qW0ALiPDoX3DyJh9kb3dq0uTN4A9cOELQuL0Yjng9pCG0jLLAyPHLPNUtW6P0wSI2837S/w7OR1PB+3+YxgR1CNjH9WsUZsmK4F8APzac+wIzFOikU96axu6mt8iHUqZCYSQalYX4CBs1aCRL0pql0HVq9viRpJEIFPxrxo8lfQDiYbRFnQBTgn4/SXgmbYQSJjy+iATxKwUMfJSeuyOjIWkLj3SCOQBYKXn2AkmECNHAjkh4PdVwK/aUiDd8Lub39+jWMNob7ZGBgqreUttuE0EMhqZ4j4kRLWjrRQxclB6jPLY4RC14WOyFMhWyKTDh4neu/p4bPcoo2NpAP4l5Hg/ZFrU/USvJ4kUyBeQxSYnxXiwDcCfsEFDo2OpVzuMWlpxEvAypdKXQosjz1h7T+Am4PSYDzUHmAQ8bflj5IRDkOGHXWOcezcwBudWxBHIkcBdBHuMCOL3yLD9UssTI4eN9ZOBr8Q49x3gDJz7s08g3YHxwNkxG9rvArcAzwItlhdGjqtcBwLnEb3M1iHjJJfiXHOlQOqQJbGfjHnT/wbutVLDKFhp8k2khyuKl4F9cK613EhvBe6IceFK4HvARBOHUTCWao3ne/gHu8vcjnOt1VWsEuIaxbeV2gLEGdcybCmtUVxKiMugW5C17NU8AYwsL6Sqq6p/nQ40eyLuqXU4E4dRZBzijCRoV+Zm4PTKVYbV4yBzgLGeiHsA5yJeIwyjqHRVO+4RcGwszs2p/CFooHAiMMUT+d7Aidh0EqO41asT1Y6rmaK2T5RAWoHT8C+xHQXsZWltFJC9CO7FWgOcVm6YRwkExOPDOM+xXsC3SDgr0jA6mG5qt0E+osfh3BtBF4XNxZqArCIM4pPIYnjb88MoAnVqr0HjfFPV1kkqkBatavk2I/k6wfszGEbeGKT2Ws1arVq1pBEIiMO4KzzHmoAxWK+WkW+6qp0GbdNxJc69FlX0RLX6B0U0eswvlpFXyn6xfJ1KAymVSmkFUkK6vc6OeIj+1hYxckqJ8A1kzwJuCRNJXUjEE5ABlTCeRLa4MofVRh5pQWbnPhFyzjnABJ9IfAK5GZl3FcZTwI8RTxE2/cTII07tc7zaq4/zgZuDRBIkkJuACyNu/DRwA/55W4aRJ5rVXsNWvF6oth8qkJ8AF0fcbCrwIxOHUUCRXI9/bA/gIkqlG30C+TFwScRNnkX2LFxl6W0UVCTXqh37GEOp9ONqgVwHXBoR+TSN3MRhbA4ieT7knEsplX4EsmDqGvxT3Ms8CdyI7DtoGJsDPbTGdHjIOdfXEa+L9j9NHMZmxkpgcsQ5G+uAH2qRE8YJBK/AMoyi0pNwh4jX4tzl9T+U/zyOzFk5zHPyzsBgbdyst7Q1NoPq1Q+QDXaCuAHnvg9QFgjAX4AtEY90QfRHvNQ9ZyIxCkyTimN/z/HxOPfd8n8qBQKyH3oP4GDPxTsgkxdNJEZRxTGW4K0RAG7EuY/15lYLBOD/kFVXvuJnR2Ag0k1mIjGKJI7vhdj1T3Fuk3FA31ysMYSsstIS5jKC59gbRh7FcVlIzWiC2vwmBJUgZf6E7D14QEjDfSfgBaJdzRtGR1DSJsN3gEM950wELqr0hRWnBAGZCXkhcGvIOYch04VtwZSRR+qR9Uy+3tlfABf6xBElkLJIFkac87blg5Fj5oUcmx8mDvBvoFNmb2A6/nXnLyNzuNZZPhg5pSuyHmRowLF1wHCcm5WmBKkH7gkRxwrgpyYOI+esUztd4RHPPZRK9WkEcgn+wRSQ+VlzLf2NAjBX7TWI/QlZ5uGrYu2JbKjj8574ItJtZqWHUaSq1o+AfQKOrQWGBbkAqgupWvnEsQzZbMfEYRStqnWH2m813XxVrSCBXIh/tBFkv/TXLL2NAvKa2m8QBxHgi6G6ijUYeAnYwhPJLK2vWelhFLmq5evVWgN8qtKRdWUJUgLuDBHHSmTQ0MRhFL2qdSvBvVpbaFWrLkgg5xC+/HAFsBjbPMcoNiXgPfwrZA+lwidcXcXfMyIi3gG4T+tqjZbORgFpVPu9H5mV7uO0coO9sg2yJdINdl6MUuL3yD7pSyzNjYKwDXAy8OWQcxyy++1lOLc6qJEOcARwN7LmI4zFGtlUxAeqYeSRei01zgP6hZz3NrJXyOMfq495Bgp7IF4Wz4xZmtwHvG95YeSMvsA3Y5QadwL/jnMrN2mwRExWPFov3jHiQd4EJiG+T82RtZEHDgVOBXYJOWcBcAbO/dHboo9hzb2QFVcnR5y3AVmueyv+HXINo63phvTIHk14Z9K9yEKpZWGRxdn4ZjlwCjAaeDeih+AobK8Qo2NpAT4XIo7FasunEDztJLFAyjyKrA95OeScX5tAjA5mI/Abz7FX1IYfjRtZ0q3T1uPfs9Dpja0NYnQkYXY4kISeeJIK5CT8nkyeA5Za/hg5YCnBWxw0Ee5utGaBhG3o+R9Wehg5KkUmp7DhmgRyMPCpEMW+bgIxciSQf3hqNJ/E7163JoGEKe+XmJdFI3+N9Um1liJxBbI1siG7r+E+1UoPI2e0ajskaHnG15C5WZkJ5BT860QeI0Z/smF0AMuQXQuq6aY2nYlASsBZIccfxCYrGvmkRe0ziLOIsbYpjkA+iyzF9dXz+lg+GDmmD8GD17sBR0aWDjEaDg8Cx4b0FixDpgr/Ttsi5sja6GgagQPVbgcAvT2lxUM4d1wtAumvxt8Q46HWAx8CjwB/QOZwWcPdaC9KyMTaLyBzrbYCukRcsxEYiHML0gpkALJN9PH4XZAGlSrrkanv9wHzrY1itCH1yHKMbyBT3LsQz2/COmTO1jice7uWKhbIwpMztWGzc8IXmIs47Jpu1S8j42rUcLXLXRJcNw+4DbgLeI9w5+6xBVKp1tHIfPsjSObh5GpkN13DyIKRwOUJajWPAz/XJsBHNZoIgSSdi9UCPKSt/73x+xfyKdcwsmJ+jHPKvtyGqM0+lLS6X1fDA76KLITfETgXmB1y7ofaaDeMrFgOfOA5Nlttcwf9OzvtTeoyeNCVWnQNwe+z9w2g2fLUyJBValfVvK62eKvaZk3UZfjAXZHBlyDexNapG9myVu2qml3w70zQoQIZin+85B1k8phhZEWr2lU1DQQ7pu5wgewTcmyR5afRBvjsalgeBTLc8/t7Ggwja94n2GHh8DwKZF/P7/OxHiyjbVjuqWbtkzeBNGjPQRBvA6stL402YLXaV5L2cIcI5BP4F1S9h01aNNoG56m+d0MGsnMjkH1Djg0B9gK2RZxix51MZhjVlNR+eqg97RVSc8mkod6Q0YOH1fkO4SMvEu8jnhlfBf6p6m/WotImMhrVNCL71nRXQeymtZWhyATaMIYhzkRqU2RGdZ8ngM+kvHYO4qLldWCGNuqtSta5S4kdtVayO7AHsGuKeKYAh0VX0lybC6SkvQk9Mkicx4DrTCCdXiDfJ8Zy2AhWIisJW2sRSBZtkB5q2FnM1l1m9mFkYAfz1CZr/mhn0QZZwUdr1vsBn64K21l+G23Iu8ALVWFxVpE3ZPywi4H/0VBmxwDRbG35aqRgaYAY5rflDRva4aXma3i44repiNcJw4jLs8hmnO1KXQe9rG2yYxTCZuos3Q2jOAJpwEbZDROIl0YTSKen1E5t40IKpBUbJDRyJJCGnCVMo4YNMcVtjf3iUB/z49doAvEzDDgfcQtZHyPBf0PwghkjX+yEuK+N8kvQgjj/GNbZBeL78vcDvpQgnreRaQVWLct3m2J/4CvWSI9PVj6yBuSwFDQ2/QgPyCCels4kkKzYA/9KRiMfbAHsmUE8q0wgydkVWUxj5JfupFvP0anbIC8Sf7+R8nOO8Ai8L+Z3K8/09XyInyDZKtIXO5NAxqVo6C1Fdg2qZjCyjNca6vlsoAeVHsuQ7Qtyn2dFqWI5ZAOeIPZE+s6NfNZQ9gr4fXpRPmhFaoO84Pl9KNF70RkdQ1eC/eS+YG2Q9hNIP8Tzha+Xox7xk9SErFHeHtk/0byoJKcR8VCzSKtJqxAv674u2C01f0wgHSgQgG0QF0J1milb6W/bAwMRl/i7VLRhvo8swLF2S7L2xKeBKyraEXOQLQjeUtEsQTZLWo2Mmm+TIi/z9dIFs5D3CPaHNAXxtdUP2WR0J8KX9b6JbP5oWzIkq47fQXiX7VJkZsM7yPLrTyA7z1byPuLjKietW7fZlCAA04AvBvx+aEBGhLGLCukts/vY7ET0eMbWGvYJOWd60b4KRSLLovkks/lEfCPDj5wJpI3I8utzCNDL7D4WvRKW0O2VhyaQGr8+6/HvcNqNZDOHS0gvTtHnfm1B8pWbXyR45sMsTeMkPG8CaTsWAQs9x1YBzwATgdORNQVNiPdvn0i+QvggY0nTqJ826h9FthUu6rLgErJl96PAt/S96iLepxEYFfD7q8gYR5O2OU7XtH8af5f7Qgo2LaiIU8WnIU6JZyLOrmdqeB1/r9QvNPOq6QMcgPSCVRtSF6QX5iQ+vqXXUUgX8RSK1U1c0mrSUfpu/6phOvArNfj1Ae+0v6ZTUJo6ZDzpJQ2VH97BiAPqYRV/pxXui1LAgYAeJN//ukm/XE0Bx14CLtbMbtT69sHAqcjAYhBzgUuRbs0k1Kvx1DJI2agfgqTrI7YGxgODPMeXA/doKbxcn7EE3MSmvVKrgB0Qt7NtnXdtSzs4r25v0iTwKvx7RQzUEmIwMAZZxntxiDhQIzsjYQncHTgBuAjomfLde+r1J5Bsmn+DVoEGRTTEL9b3H6PpMdxzzX0pxEHuxLGZliBp2Qt4JaC+3VrDx+IK4KmIqlYJ2fjlnIov8TPA9SRbBNQEXMZHmxG9CPwc2Ygo6v6HAVemeL+gtHER7bpi0Q77gxSJvwBHZBjfQuCCkKpWd+AY4BQ2dULxHHBNTJE0AWPZ1J9xi5aMv8O/jLmPtr/6Z/TOf804Da2KlSNuSXHNcuDvnmP9gbMJ9sAyFLhKqzZBxw9A1sVE7WHRQ8870NOmOV3vM9Rz/GyPOP5Ouu25b+lMBtPZSpAGZILdzjHOnQ7cBkxGxgBeQSY/BjEO6d4EGWc4QUuOOO2EaVqSrPCI4wfAfjHiaUY86D8ArNHfDtG4q3kX2QV2HdKTdTYyETGKd5DpJpuPP7KIEgTX+cJYJ8kSFJod3O1gv4Drvhxy3YcOjnVwnoNZIef5wjQHoxyMqAijHDyfIq7ZDs7X5/nQc86ogPfbz8Fdmga+uMdtdvbgXGjojALp62BdVcbPcnCBg94R104KMZ6FDlakMOhyeMHBaBXHaP1/2rhW6vMEHZsU8Y69NC2qhb7OwbYmkM4R7nOw1sFkB4cnuK6Xg3kpDHa1g0scTIw47yn9+j8Vcs5EjWt1iueYF+MjUBkO1zRa6+D+zdIWTCCBYUANX8PPOWhNYJRTHOyu15Yc3FxDyTBB40DjnJLg2lYHn0/5zttqmplALMQKt8UwyGYHFzqoC7j+xhTiuLlCHOVQp/dojnH97ZZvJpD2Ck0O3gwxxr852DUijvEJxDE+Iq5d9Z6+69900MPyzQTSnmFEQFVrpYNzA770vnBDDHHcEDOukt57RUDVaqTllwmkI8KECkN8zMGgFHFcGyKO61PEN9DBn6vaLZZXJpAOCVtqd+xZCUqNoHB1gDiuqSG+koMz9dm6Wz6ZQDoylDKK58oKcVyZs2frtALpbFNN8s7l+vcqS4p8TDX5/wEAl6mZyRp+m1gAAAAASUVORK5CYII='
1460}, function (x, e) {
1461 var t = {
1462 5: function (x) {
1463 var e = x.border['width'],
1464 t = e / 2,
1465 a = x['border'].height / 2,
1466 _ = x['scene'] && x.scene.backgroundGraphics;
1467 if (_) {
1468 var n;
1469 _.visible = !0, (n = new(PIXI['Graphics']))['beginFill'](2593235, .1), n['lineStyle'](40, 0), n['drawRect'](0, 0, e, 3500), n['position']['set'](-t, -a), _.addChild(n), (n = new(PIXI['Graphics']))['beginFill'](2593235, .1), n.lineStyle(40, 0), n['drawRect'](0, 0, e, 2e3), n['position']['set'](-t, a - 2e3), _['addChild'](n)
1470 } else console['error']('backgroundGraphics container missing!')
1471 }
1472 };
1473 e['prepareMode'] = function (x, e) {
1474 var a = t[e];
1475 a && a(x)
1476 }
1477}, function (x, e, t) {
1478 var a = t(97);
1479 x['exports'] = class {
1480 constructor() {
1481 this['loaders'] = {}, this['worker'] = new a, this.worker['addEventListener']('message', this.onSkinLoaded.bind(this))
1482 }
1483 createLoader(x) {
1484 return {
1485 image: null,
1486 error: null,
1487 callbacks: [x]
1488 }
1489 } ['clearCallbacks']() {
1490 for (var x in this.loaders) this.loaders[x]['callbacks'] = []
1491 } ['removeLoaderCallback'](x, e) {
1492 var t = x['callbacks']['indexOf'](e);
1493 t >= 0 && x.callbacks.splice(t, 1)
1494 } ['loadSkin'](x, e) {
1495 var t = this['loaders'][x];
1496 return t ? t['image'] ? (e(t['image']), null) : t.error ? null : (t['callbacks']['push'](e), this['removeLoaderCallback']['bind'](this, t, e)) : (t = this.loaders[x] = this['createLoader'](e), this.worker['postMessage'](x), this['removeLoaderCallback']['bind'](this, t, e))
1497 } ['onSkinLoaded'](x) {
1498 var {
1499 skinUrl: e,
1500 bitmap: t,
1501 error: a
1502 } = x['data'], _ = this.loaders[e];
1503 if (a) return _['error'] = !0, void(_['callbacks'] = []);
1504 for (_['image'] = t; _.callbacks['length'];) _.callbacks['pop']()(t)
1505 }
1506 }
1507}, function (x, e, t) {
1508 x['exports'] = function () {
1509 return new Worker(t.p + '4c7bbc581140c5b4832e.worker.js')
1510 }
1511}, function (x, e) {
1512 x.exports = class {
1513 constructor() {
1514 this.total = 0, this.count = 0
1515 } ['add'](x) {
1516 this['total'] += x, this['count']++
1517 } ['getAndReset']() {
1518 var x = this['total'] / this.count;
1519 return this.count = this.total = 0, x
1520 }
1521 }
1522}, function (x, e, t) {
1523 var a = t(100),
1524 _ = t(1),
1525 n = t(3),
1526 i = t(57),
1527 s = t(55),
1528 r = [],
1529 o = a['createInstance']({
1530 name: 'game-replays'
1531 });
1532 var c = 3;
1533
1534 function l(x) {
1535 return btoa(String['fromCharCode']['apply'](null, new Uint8Array(x)))
1536 }
1537
1538 function d(x) {
1539 x = atob(x);
1540 for (var e = new ArrayBuffer(x['length']), t = new Uint8Array(e), a = 0; a < x['length']; a++) t[a] = x.charCodeAt(a);
1541 return new DataView(e)
1542 }
1543 _['replay'] = {
1544 database: o,
1545 updateHistory: r,
1546 addHistory: function (x) {
1547 if (r['push'](x), r['length'] > 200) {
1548 for (var e = r[0].clearWhenShifted; e.length;) _['playerManager']['removePlayer'](e['pop']());
1549 r['shift']()
1550 }
1551 },
1552 play: function (x) {
1553 var e = x['split']("|");
1554 e[0] === 'REPLAY' && (e = e['slice'](3));
1555 var t = e['map'](d),
1556 a = t['shift'](),
1557 s = t.shift();
1558 _['running'] && _['stop'](), _['closeConnection'](), n['toast']['close']();
1559 var r = i.initialData(a);
1560 r['replayUpdates'] = t, _['start'](r), _['parseMessage'](s), _['showMenu'](!1)
1561 },
1562 save: function () {
1563 var x = r;
1564 if (x['length']) {
1565 var e = [];
1566 for (var t in _['playerManager'].players) {
1567 var a = _.playerManager.players[t];
1568 a['lastUpdate'] && a['lastUpdate']['packetId'] >= x[0].packetId && e.push(a)
1569 }
1570 var i = l(_['initialDataPacket']['buffer']),
1571 d = function (x) {
1572 x = x['map'](x => {
1573 var e = {
1574 pid: x.pid,
1575 nickname: x['name'],
1576 skinUrl: x['skinUrl']
1577 };
1578 return x['tagId'] && (e['tagId'] = x['tagId']), e
1579 });
1580 var e = JSON.stringify(x),
1581 t = new s;
1582 return t.uint8(16), t['utf8'](e), l(t['write']())
1583 }(e),
1584 f = function (x) {
1585 var e = "";
1586 return x.forEach(x => {
1587 e += "|" + l(x.buffer)
1588 }), e
1589 }(x),
1590 u = function () {
1591 var x = new Date,
1592 e = x.getMonth() + 1,
1593 t = x['getDate'](),
1594 a = [x['getFullYear'](), (e > 9 ? "" : "0") + e, (t > 9 ? "" : "0") + t].join(""),
1595 _ = ("0" + x['getHours']())['slice'](-2),
1596 n = ("0" + x['getMinutes']())['slice'](-2),
1597 i = ("0" + x['getSeconds']())['slice'](-2),
1598 s = [_, n, i].join("");
1599 return a + "-" + s
1600 }(),
1601 h = _['getThumbnail'](),
1602 v = 'REPLAY|' + c + "|" + h + "|" + i + "|" + (d + f);
1603 o['setItem'](u, v, () => {
1604 _['events'].$emit('replay-added');
1605 var x = 'Replay saved!';
1606 _['addServerMessage'](x), n['toast']['fire']({
1607 type: 'info',
1608 title: x,
1609 timer: 1500
1610 })
1611 })['catch'](x => {
1612 console.error('replay.save', x);
1613 var e = 'Error saving replay';
1614 typeof x === 'string' ? e += ": " + x : x && x['message'] && (e += ": " + x.message), n['toast']['fire']({
1615 type: 'error',
1616 title: e
1617 })
1618 })
1619 }
1620 }
1621 }
1622}, , function (x, e, t) {
1623 var a = t(1),
1624 _ = t(3),
1625 n = t(102);
1626
1627 function i(x) {
1628 _['toast']['fire']({
1629 type: "error",
1630 title: x,
1631 timer: 5e3
1632 })
1633 }
1634
1635 function s() {
1636 a.ws && (a.ws['onmessage'] = null, a.ws['onclose'] = null, a.ws['onerror'] = null, a.ws['close']())
1637 }
1638
1639 function r() {
1640 3 === a.ws['readyState'] && a.connect(a['lastWsUrl'])
1641 }
1642
1643 function o(x) {
1644 if (a['running'] && a.stop(), 1003 === x['code']) setTimeout(r, 1500), _['toast']['fire']({
1645 type: "info",
1646 title: 'Server restarting ...',
1647 timer: 5e3
1648 });
1649 else {
1650 var e = 'You have been disconnected';
1651 x['reason'] && (e += " (" + x.reason + ")"), i(e)
1652 }
1653 a['showMenu'](!0, !0)
1654 }
1655
1656 function c() {
1657 return !(!a.ws || 1 !== a.ws['readyState'])
1658 }
1659 a['send'] = function (x) {
1660 c() ? a.ws['send'](x) : a['replaying'] || console.log("WebSocket not open?")
1661 }, a['sendUint8'] = function (x) {
1662 var e = prepareData(1);
1663 e['setUint8'](0, x), a['send'](e)
1664 }, a.ping = function () {
1665 a.pingstamp = Date.now();
1666 var x = prepareData(1);
1667 x['setUint8'](0, 3), a['send'](x)
1668 }, window['connect'] = a['connect'] = function (x) {
1669 a.lastWsUrl = x, a.running && a.stop(), s(), a['events']['$emit']('chat-clear');
1670 var e = a.ws = new WebSocket(x, 'tFoL46WDlZuRja7W6qCl');
1671 e['binaryType'] = 'arraybuffer', e.onopen = function () {
1672 c() && (a['state']['connectionUrl'] = x, e['onclose'] = o)
1673 }, e['onclose'] = function (x) {
1674 i('Connection failed!')
1675 }, e['onmessage'] = function (x) {
1676 n(new DataView(x.data))
1677 }
1678 }, a['closeConnection'] = s, a['isConnected'] = c
1679}, function (x, e, t) {
1680 var a = t(1),
1681 _ = t(3),
1682 n = t(103),
1683 i = t(57),
1684 s = t(110),
1685 r = t(111),
1686 o = t(112),
1687 c = t(113);
1688 t(116);
1689 var l = 1;
1690 x['exports'] = a['parseMessage'] = function (x) {
1691 function e() {
1692 for (var e, t = ""; 0 != (e = x['getUint16'](d, !0));) d += 2, t += String['fromCharCode'](e);
1693 return d += 2, t
1694 }
1695
1696 function t() {
1697 for (var e, t = ""; 0 != (e = x.getUint8(d, !0));) d += 1, t += String.fromCharCode(e);
1698 return d += 1, t
1699 }
1700 x['packetId'] = l++, x.clearWhenShifted = [];
1701 var d = 0;
1702 switch (x['getUint8'](d++)) {
1703 case 1:
1704 var f = i['initialData'](x);
1705 a['initialDataPacket'] = x, a['start'](f);
1706 break;
1707 case 2:
1708 var u = t(),
1709 h = c['gen'](u);
1710 a['sendJoinData'](h);
1711 break;
1712 case 3:
1713 var v = Date['now']() - a['pingstamp'];
1714 a['updateStats'](v);
1715 break;
1716 case 4:
1717 for (; m = x.getUint16(d, !0);) a['playerManager']['delayedRemovePlayer'](m), d += 2;
1718 break;
1719 case 6:
1720 a['sendUint8'](6);
1721 break;
1722 case 10:
1723 n(x);
1724 break;
1725 case 11:
1726 var p = o(a, x);
1727 a['events']['$emit']("leaderboard-update", p);
1728 break;
1729 case 12:
1730 var b = r(x);
1731 a['events']['$emit']("minimap-positions", b);
1732 break;
1733 case 13:
1734 var g = s(x),
1735 m = g.pid,
1736 y = g.text;
1737 if (!m) return void a['addServerMessage'](y);
1738 if (!(N = a['playerManager']['getPlayer'](m))) return void console['warn']("Received message from non-exiting player", m);
1739 var w = {
1740 pid: m,
1741 text: y,
1742 from: N['name']
1743 };
1744 N['nameColorCss'] && (w['fromColor'] = N.nameColorCss), a.events.$emit("chat-message", w);
1745 break;
1746 case 14:
1747 var A = x.getUint8(d++);
1748 if (f = {}, 2 & A) {
1749 var C = x['getUint8'](d++),
1750 k = {
1751 1: "success",
1752 2: 'error',
1753 3: 'warning',
1754 4: 'info'
1755 } [C];
1756 k && (f['type'] = k)
1757 }
1758 4 & A && (f['timer'] = x['getUint16'](d, !0), d += 2), f['title'] = htmlEncode(t()), _.toast.fire(f);
1759 break;
1760 case 15:
1761 for (; m = x['getUint16'](d, !0), d += 2, m;) {
1762 var I = e(),
1763 S = t();
1764 a['playerManager']['setPlayerData']({
1765 pid: m,
1766 nickname: I,
1767 skinUrl: S
1768 })
1769 }
1770 break;
1771 case 16:
1772 var B = t(),
1773 L = decodeURIComponent(escape(B)),
1774 M = JSON['parse'](L),
1775 P = M['find'](x => x['pid'] === a['playerId']),
1776 E = !1;
1777 P && (E = a['setTagId'](P['tagId']));
1778 for (var T = [], R = 0; R < M['length']; R++) {
1779 var N = a['playerManager']['setPlayerData'](M[R]);
1780 T['push'](N)
1781 }
1782 E && (a['events'].$emit('minimap-positions', []), a['playerManager']['updateSkins'](T));
1783 break;
1784 case 17:
1785 a['center'].x = x.getInt32(d, !0), d += 4, a['center'].y = x['getInt32'](d, !0), d += 4;
1786 break;
1787 case 18:
1788 a['replay']['updateHistory']['length'] = 0, a['clearNodes']();
1789 break;
1790 case 19:
1791 var H = x.getUint8(d++),
1792 O = x['getUint32'](d, !0);
1793 if (d += 4, a['events'].$emit('xp-update', O), H) {
1794 var D = x.getUint16(d, !0);
1795 d += 2, a['levelUp'](D)
1796 }
1797 break;
1798 case 20:
1799 var U = x['getUint16'](d, !0);
1800 d += 2;
1801 var X = x['getUint16'](d, !0);
1802 d += 2;
1803 var Q = x['getUint32'](d, !0);
1804 d += 4, a['state']['loadingAds'] = !0, setTimeout(() => {
1805 a['state']['isAlive'] ? a['state'].loadingAds = !1 : (a['showMenu'](!1), a['setDeathStats']({
1806 timeAlive: U,
1807 killCount: X,
1808 highscore: Q
1809 }), a['showDeathScreen'](!0))
1810 }, 900)
1811 }
1812 }
1813}, function (x, e, t) {
1814 var a = t(1),
1815 _ = t(104),
1816 n = t(5);
1817 x['exports'] = function (x) {
1818 var e = a['nodes'],
1819 t = a['nodelist'];
1820 a['timestamp'] = Date['now']();
1821 for (var i, s, r = 1, o = !a['spectating'] && !a.replaying, c = (a['state']['isAlive'], !1);;) {
1822 var l = x['getUint8'](r++);
1823 if (0 === l) break;
1824 1 === l ? (s = x['getUint16'](r), r += 2, s === a['playerId'] && (c = !0)) : s = null, i = x['getUint32'](r), r += 4;
1825 var d = x.getInt32(r);
1826 r += 4;
1827 var f = x['getInt32'](r);
1828 r += 4;
1829 var u = x['getInt16'](r);
1830 r += 2;
1831 var h = null;
1832 if (e['hasOwnProperty'](i))(h = e[i])['update'](), h.ox = h.x, h.oy = h.y, h['oSize'] = h.size;
1833 else {
1834 var v = {
1835 id: i,
1836 x: d,
1837 y: f,
1838 size: u
1839 };
1840 switch (l) {
1841 case 1:
1842 var p = a['playerManager']['getPlayer'](s);
1843 v['texture'] = p['texture'], h = new _.PlayerCell(v, p), a.scene['addCell'](h['sprite']);
1844 break;
1845 case 2:
1846 h = new(_['Virus'])(v), a['scene']['addCell'](h.sprite);
1847 break;
1848 case 3:
1849 h = new(_['EjectedMass'])(v), a['scene']['addCell'](h['sprite']);
1850 break;
1851 case 4:
1852 h = new _.Food(v), a['scene']['addFood'](h.sprite);
1853 break;
1854 case 5:
1855 h = new(_['DeadCell'])(v), a['scene']['addCell'](h['sprite']);
1856 break;
1857 default:
1858 console['error']("Received invalid cell type", l)
1859 }
1860 t['push'](h), e[i] = h, h.ka = d, h.la = f
1861 }
1862 h.nx = d, h.ny = f, h['nSize'] = u, h['updateTime'] = a['timestamp'], o && h.player && (h['player'].lastUpdate = x)
1863 }
1864 for (o && a['replay'].addHistory(x), a.state.isAlive = c; i = x['getUint32'](r), r += 4, 0 !== i;) e[i] && e[i]['destroy']();
1865 for (; i = x.getUint32(r), r += 4, 0 !== i;) {
1866 var b = e[i],
1867 g = x['getUint32'](r);
1868 r += 4;
1869 var m = e[g];
1870 if (b)
1871 if (m) {
1872 b['destroy'](n['eatAnimation']), b.ox = b.x, b.oy = b.y, b['oSize'] = b['size'];
1873 var y = b['size'] / m['nSize'];
1874 y = 0 > y ? 0 : 1 < y ? 1 : y, b['newPositionScale'] = y, b.nx = m.x, b.ny = m.y, b['nSize'] = 0, b['updateTime'] = a.timestamp
1875 } else b['destroy']();
1876 else a['replaying'] || console['warn']('Prey not found:', i)
1877 }
1878 }
1879}, function (x, e, t) {
1880 e['PlayerCell'] = t(105), e['Food'] = t(106), e['Virus'] = t(107), e['EjectedMass'] = t(108), e['DeadCell'] = t(109)
1881}, function (x, e, t) {
1882 var a = t(10);
1883 x['exports'] = class extends a {
1884 constructor(x, e) {
1885 super(x), this.player = e, this.pid = e['pid']
1886 }
1887 onUpdate() {
1888 var x = this.game['settings'];
1889 x.namesEnabled && !this['nameSprite'] && this['player'] && this.player['nameSprite'] && (this['nameSprite'] = new PIXI.Sprite(this['player']['nameSprite']['texture']), this['nameSprite']['anchor']['set'](.5), this.sprite['addChild'](this['nameSprite'])), x['showMass'] && !this['massText'] && (this['massText'] = this.game['massTextPool']['shift']() || function () {
1890 var x = new(PIXI['BitmapText'])("", {
1891 font: "75px Mass Font",
1892 align: 'right'
1893 });
1894 return x['anchor'].x = .5, x['anchor'].y = -.45, x
1895 }(), this['sprite'].addChild(this['massText']));
1896 var e = this['game']['cameraScale'] * this['size'] * this['game'].renderer.resolution > 40;
1897 if (this['nameSprite'] && (this.nameSprite['visible'] = x.namesEnabled && e), this['massText'])
1898 if (x.showMass && e) {
1899 var t = this.getMass();
1900 x['shortMass'] && (t = this.game['getShortMass'](t)), this['massText']['text'] = t, this.massText.visible = !0
1901 } else this['massText']['visible'] && (this['massText']['visible'] = !1)
1902 } ['onDestroy']() {
1903 this['massText'] && (this.sprite.removeChild(this['massText']), this.game['massTextPool']['push'](this.massText))
1904 }
1905 }
1906}, function (x, e, t) {
1907 t(1);
1908 var a = t(10),
1909 _ = t(9),
1910 n = t(54)['neon'];
1911 x['exports'] = class extends a {
1912 constructor(x) {
1913 var e = n[x.id % n['length']];
1914 x['texture'] = _['cells'].getTexture(e), super(x)
1915 }
1916 }
1917}, function (x, e, t) {
1918 t(1);
1919 var a = t(10),
1920 _ = t(9);
1921 x['exports'] = class extends a {
1922 constructor(x) {
1923 x['texture'] = _['virus'].getTexture(), super(x)
1924 }
1925 }
1926}, function (x, e, t) {
1927 t(1);
1928 var a = t(10),
1929 _ = t(9);
1930 x.exports = class extends a {
1931 constructor(x) {
1932 x['texture'] = _.cells['getTexture'](16753920), super(x)
1933 }
1934 }
1935}, function (x, e, t) {
1936 t(1);
1937 var a = t(10),
1938 _ = t(9);
1939 x['exports'] = class extends a {
1940 constructor(x) {
1941 x.texture = _['cells']['getTexture'](4210752), super(x), this['sprite']['alpha'] = .5
1942 }
1943 }
1944}, function (x, e) {
1945 x['exports'] = function (x) {
1946 var e = 1,
1947 t = x['getInt16'](e, !0);
1948 e += 2;
1949 for (var a = "", _ = ""; 0 != (_ = x.getUint16(e, !0));) e += 2, a += String['fromCharCode'](_);
1950 return {
1951 pid: t,
1952 text: a
1953 }
1954 }
1955}, function (x, e) {
1956 x.exports = function (x) {
1957 for (var e = 1, t = [];;) {
1958 var a = x.getUint16(e, !0);
1959 if (e += 2, !a) break;
1960 var _ = x['getUint8'](e, !0) / 255;
1961 e += 1;
1962 var n = x['getUint8'](e, !0) / 255;
1963 e += 1, t['push']({
1964 pid: a,
1965 x: _,
1966 y: n
1967 })
1968 }
1969 return t
1970 }
1971}, function (x, e) {
1972 x['exports'] = function (x, e) {
1973 for (var t = 1, a = [];;) {
1974 var _ = e.getUint16(t, !0);
1975 if (t += 2, !_) break;
1976 var n = x['playerManager']['getPlayer'](_);
1977 n && a['push']({
1978 text: n['name'],
1979 color: n['nameColorCss'] || "#ffffff"
1980 })
1981 }
1982 return a
1983 }
1984}, function (_0x442e07, _0xa22c0d, _0x250210) {
1985 (function (_0x1bc013, _0x5dd66c) {
1986 var _0x490317 = typeof _0x490317 !== 'undefined' ? _0x490317 : {},
1987 _0x546dba = {},
1988 _0x24e73f;
1989 for (_0x24e73f in _0x490317) _0x490317['hasOwnProperty'](_0x24e73f) && (_0x546dba[_0x24e73f] = _0x490317[_0x24e73f]);
1990 _0x490317.arguments = [], _0x490317['thisProgram'] = "./this.program", _0x490317['quit'] = function (x, e) {
1991 throw e
1992 }, _0x490317['preRun'] = [], _0x490317['postRun'] = [];
1993 var _0x419bfe = !1,
1994 _0x4c34a3 = !1,
1995 _0x18b20c = !1,
1996 _0x4e73eb = !1,
1997 _0x22524f = !1;
1998 _0x419bfe = typeof window === 'object', _0x4c34a3 = typeof importScripts === 'function', _0x4e73eb = typeof _0x1bc013 === 'object' && 'function' == 'function', _0x18b20c = _0x4e73eb && !_0x419bfe && !_0x4c34a3, _0x22524f = !_0x419bfe && !_0x18b20c && !_0x4c34a3;
1999 var _0x36e0ac = "",
2000 _0x48413e, _0x1cf266;
2001
2002 function _0x4157b9(x) {
2003 return _0x490317['locateFile'] ? _0x490317['locateFile'](x, _0x36e0ac) : _0x36e0ac + x
2004 }
2005 _0x18b20c ? (_0x36e0ac = _0x5dd66c + "/", _0x490317['read'] = function (x, e) {
2006 var t;
2007 return _0x48413e || (_0x48413e = _0x250210(114)), _0x1cf266 || (_0x1cf266 = _0x250210(115)), x = _0x1cf266['normalize'](x), t = _0x48413e['readFileSync'](x), e ? t : t['toString']()
2008 }, _0x490317['readBinary'] = function (x) {
2009 var e = _0x490317['read'](x, !0);
2010 return e.buffer || (e = new Uint8Array(e)), _0xbeb161(e['buffer']), e
2011 }, _0x1bc013['argv']['length'] > 1 && (_0x490317['thisProgram'] = _0x1bc013['argv'][1].replace(/\\/g, "/")), _0x490317['arguments'] = _0x1bc013['argv']['slice'](2), _0x442e07['exports'] = _0x490317, _0x1bc013.on('uncaughtException', function (x) {
2012 if (!(x instanceof _0x14d5b8)) throw x
2013 }), _0x1bc013.on('unhandledRejection', _0x27df98), _0x490317['quit'] = function (x) {
2014 _0x1bc013['exit'](x)
2015 }, _0x490317['inspect'] = function () {
2016 return '[Emscripten Module object]'
2017 }) : _0x22524f ? (typeof read != 'undefined' && (_0x490317['read'] = function (x) {
2018 return read(x)
2019 }), _0x490317['readBinary'] = function (x) {
2020 var e;
2021 return typeof readbuffer === 'function' ? new Uint8Array(readbuffer(x)) : (_0xbeb161(typeof (e = read(x, "binary")) === 'object'), e)
2022 }, "undefined" != typeof scriptArgs ? _0x490317['arguments'] = scriptArgs : typeof arguments != 'undefined' && (_0x490317['arguments'] = arguments), typeof quit === 'function' && (_0x490317['quit'] = function (x) {
2023 quit(x)
2024 })) : (_0x419bfe || _0x4c34a3) && (_0x4c34a3 ? _0x36e0ac = self['location']['href'] : document.currentScript && (_0x36e0ac = document['currentScript']['src']), _0x36e0ac = 0 !== _0x36e0ac['indexOf']('blob:') ? _0x36e0ac['substr'](0, _0x36e0ac['lastIndexOf']("/") + 1) : "", _0x490317.read = function (x) {
2025 var e = new XMLHttpRequest;
2026 return e['open']('GET', x, !1), e['send'](null), e['responseText']
2027 }, _0x4c34a3 && (_0x490317['readBinary'] = function (x) {
2028 var e = new XMLHttpRequest;
2029 return e['open']('GET', x, !1), e.responseType = 'arraybuffer', e['send'](null), new Uint8Array(e['response'])
2030 }), _0x490317['readAsync'] = function (x, e, t) {
2031 var a = new XMLHttpRequest;
2032 a['open']('GET', x, !0), a.responseType = 'arraybuffer', a['onload'] = function () {
2033 200 == a['status'] || 0 == a['status'] && a['response'] ? e(a['response']) : t()
2034 }, a['onerror'] = t, a.send(null)
2035 }, _0x490317['setWindowTitle'] = function (x) {
2036 document['title'] = x
2037 });
2038 var _0x4b1fa2 = _0x490317['print'] || (typeof console !== 'undefined' ? console['log']['bind'](console) : "undefined" != typeof print ? print : null),
2039 _0x262581 = _0x490317['printErr'] || (typeof printErr !== 'undefined' ? printErr : typeof console !== 'undefined' && console['warn']['bind'](console) || _0x4b1fa2);
2040 for (_0x24e73f in _0x546dba) _0x546dba['hasOwnProperty'](_0x24e73f) && (_0x490317[_0x24e73f] = _0x546dba[_0x24e73f]);
2041 _0x546dba = void 0;
2042 var _0x43948f = {
2043 "f64-rem": function (x, e) {
2044 return x % e
2045 },
2046 debugger: function () {}
2047 },
2048 _0x560388 = new Array(0),
2049 _0x5a4043, _0x270b98;
2050 "object" != typeof WebAssembly && _0x262581('no native wasm support detected');
2051 var _0x2b7231 = !1,
2052 _0xc98827 = 0;
2053
2054 function _0xbeb161(x, e) {
2055 x || _0x27df98("Assertion failed: " + e)
2056 }
2057
2058 function _0x528ce3(x) {
2059 var e = _0x490317["_" + x];
2060 return _0xbeb161(e, 'Cannot call unknown function ' + x + ", make sure it is exported"), e
2061 }
2062
2063 function _0x1d15e8(x, e, t, a, _) {
2064 var n = {
2065 string: function (x) {
2066 var e = 0;
2067 if (null !== x && void 0 !== x && 0 !== x) {
2068 var t = 1 + (x.length << 2);
2069 _0x268b33(x, e = _0x2fd2a5(t), t)
2070 }
2071 return e
2072 },
2073 array: function (x) {
2074 var e = _0x2fd2a5(x.length);
2075 return _0x3e1c70(x, e), e
2076 }
2077 };
2078 var i = _0x528ce3(x),
2079 s = [],
2080 r = 0;
2081 if (a)
2082 for (var o = 0; o < a['length']; o++) {
2083 var c = n[t[o]];
2084 c ? (0 === r && (r = _0x3ba50c()), s[o] = c(a[o])) : s[o] = a[o]
2085 }
2086 var l = i['apply'](null, s);
2087 return l = function (x) {
2088 return "string" === e ? _0x30d95b(x) : "boolean" === e ? Boolean(x) : x
2089 }(l), 0 !== r && _0x1b6b37(r), l
2090 }
2091
2092 function _0x5a4004(x, e, t, a) {
2093 var _ = (t = t || [])['every'](function (x) {
2094 return "number" === x
2095 });
2096 return e !== 'string' && _ && !a ? _0x528ce3(x) : function () {
2097 return _0x1d15e8(x, e, t, arguments, a)
2098 }
2099 }
2100 var _0x3e2ae6 = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0;
2101
2102 function _0x354eba(x, e, t) {
2103 for (var a = e + t, _ = e; x[_] && !(_ >= a);) ++_;
2104 if (_ - e > 16 && x['subarray'] && _0x3e2ae6) return _0x3e2ae6['decode'](x['subarray'](e, _));
2105 for (var n = ""; e < _;) {
2106 var i = x[e++];
2107 if (128 & i) {
2108 var s = 63 & x[e++];
2109 if (192 != (224 & i)) {
2110 var r = 63 & x[e++];
2111 if ((i = 224 == (240 & i) ? (15 & i) << 12 | s << 6 | r : (7 & i) << 18 | s << 12 | r << 6 | 63 & x[e++]) < 65536) n += String['fromCharCode'](i);
2112 else {
2113 var o = i - 65536;
2114 n += String['fromCharCode'](55296 | o >> 10, 56320 | 1023 & o)
2115 }
2116 } else n += String.fromCharCode((31 & i) << 6 | s)
2117 } else n += String['fromCharCode'](i)
2118 }
2119 return n
2120 }
2121
2122 function _0x30d95b(x, e) {
2123 return x ? _0x354eba(_0x391a47, x, e) : ""
2124 }
2125
2126 function _0x3df1da(x, e, t, a) {
2127 if (!(a > 0)) return 0;
2128 for (var _ = t, n = t + a - 1, i = 0; i < x['length']; ++i) {
2129 var s = x['charCodeAt'](i);
2130 if (s >= 55296 && s <= 57343) s = 65536 + ((1023 & s) << 10) | 1023 & x['charCodeAt'](++i);
2131 if (s <= 127) {
2132 if (t >= n) break;
2133 e[t++] = s
2134 } else if (s <= 2047) {
2135 if (t + 1 >= n) break;
2136 e[t++] = 192 | s >> 6, e[t++] = 128 | 63 & s
2137 } else if (s <= 65535) {
2138 if (t + 2 >= n) break;
2139 e[t++] = 224 | s >> 12, e[t++] = 128 | s >> 6 & 63, e[t++] = 128 | 63 & s
2140 } else {
2141 if (t + 3 >= n) break;
2142 e[t++] = 240 | s >> 18, e[t++] = 128 | s >> 12 & 63, e[t++] = 128 | s >> 6 & 63, e[t++] = 128 | 63 & s
2143 }
2144 }
2145 return e[t] = 0, t - _
2146 }
2147
2148 function _0x268b33(x, e, t) {
2149 return _0x3df1da(x, _0x391a47, e, t)
2150 }
2151 var _0x3a2d59 = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : void 0;
2152
2153 function _0x3e1c70(x, e) {
2154 _0x53134a.set(x, e)
2155 }
2156 var _0xabe46c = 65536,
2157 _0x394076, _0x53134a, _0x391a47, _0x1c5927, _0x314038, _0x5178cf, _0x1c7e08, _0x11777f, _0x3c52c5;
2158
2159 function _0x4adea5() {
2160 _0x490317['HEAP8'] = _0x53134a = new Int8Array(_0x394076), _0x490317['HEAP16'] = _0x1c5927 = new Int16Array(_0x394076), _0x490317['HEAP32'] = _0x5178cf = new Int32Array(_0x394076), _0x490317['HEAPU8'] = _0x391a47 = new Uint8Array(_0x394076), _0x490317.HEAPU16 = _0x314038 = new Uint16Array(_0x394076), _0x490317['HEAPU32'] = _0x1c7e08 = new Uint32Array(_0x394076), _0x490317['HEAPF32'] = _0x11777f = new Float32Array(_0x394076), _0x490317['HEAPF64'] = _0x3c52c5 = new Float64Array(_0x394076)
2161 }
2162 var _0x4e999c = 5245792,
2163 _0x12703e = 2880,
2164 _0x33c299 = 5242880,
2165 _0x58cebf = _0x490317['TOTAL_MEMORY'] || 16777216;
2166
2167 function _0xb00a9d(x) {
2168 for (; x['length'] > 0;) {
2169 var e = x.shift();
2170 if ("function" != typeof e) {
2171 var t = e['func'];
2172 typeof t === 'number' ? void 0 === e['arg'] ? _0x490317['dynCall_v'](t) : _0x490317['dynCall_vi'](t, e.arg) : t(void 0 === e.arg ? null : e.arg)
2173 } else e()
2174 }
2175 }
2176 _0x58cebf < _0x33c299 && _0x262581('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + _0x58cebf + '! (TOTAL_STACK=' + _0x33c299 + ")"), _0x490317.buffer ? _0x394076 = _0x490317.buffer : typeof WebAssembly === 'object' && typeof WebAssembly['Memory'] === 'function' ? (_0x5a4043 = new(WebAssembly['Memory'])({
2177 initial: _0x58cebf / _0xabe46c,
2178 maximum: _0x58cebf / _0xabe46c
2179 }), _0x394076 = _0x5a4043['buffer']) : _0x394076 = new ArrayBuffer(_0x58cebf), _0x4adea5(), _0x5178cf[_0x12703e >> 2] = _0x4e999c;
2180 var _0x489aaf = [],
2181 _0x44027a = [],
2182 _0x348b24 = [],
2183 _0x14c0ea = [],
2184 _0x4b725d = !1;
2185
2186 function _0x36fd2e() {
2187 if (_0x490317['preRun'])
2188 for (typeof _0x490317['preRun'] == 'function' && (_0x490317['preRun'] = [_0x490317['preRun']]); _0x490317['preRun'].length;) _0x43ebab(_0x490317['preRun'].shift());
2189 _0xb00a9d(_0x489aaf)
2190 }
2191
2192 function _0x29b2aa() {
2193 _0x4b725d = !0, _0xb00a9d(_0x44027a)
2194 }
2195
2196 function _0x4e0c0c() {
2197 _0xb00a9d(_0x348b24)
2198 }
2199
2200 function _0x476025() {
2201 if (_0x490317['postRun'])
2202 for ("function" == typeof _0x490317['postRun'] && (_0x490317['postRun'] = [_0x490317.postRun]); _0x490317['postRun']['length'];) _0x1bdf49(_0x490317.postRun['shift']());
2203 _0xb00a9d(_0x14c0ea)
2204 }
2205
2206 function _0x43ebab(x) {
2207 _0x489aaf.unshift(x)
2208 }
2209
2210 function _0x1bdf49(x) {
2211 _0x14c0ea['unshift'](x)
2212 }
2213 var _0x704d78 = 0,
2214 _0x528231 = null,
2215 _0x54333a = null;
2216
2217 function _0x20c98d(x) {
2218 _0x704d78++, _0x490317.monitorRunDependencies && _0x490317['monitorRunDependencies'](_0x704d78)
2219 }
2220
2221 function _0x387f6c(x) {
2222 if (_0x704d78--, _0x490317['monitorRunDependencies'] && _0x490317['monitorRunDependencies'](_0x704d78), 0 == _0x704d78 && (null !== _0x528231 && (clearInterval(_0x528231), _0x528231 = null), _0x54333a)) {
2223 var e = _0x54333a;
2224 _0x54333a = null, e()
2225 }
2226 }
2227 _0x490317['preloadedImages'] = {}, _0x490317.preloadedAudios = {};
2228 var _0x4f638c = 'data:application/octet-stream;base64,';
2229
2230 function _0x336a7d(x) {
2231 return String['prototype']['startsWith'] ? x['startsWith'](_0x4f638c) : 0 === x.indexOf(_0x4f638c)
2232 }
2233 var _0x2fb5c9 = 'wauth.wasm';
2234
2235 function _0x4a4c30() {
2236 try {
2237 if (_0x490317['wasmBinary']) return new Uint8Array(_0x490317['wasmBinary']);
2238 if (_0x490317['readBinary']) return _0x490317.readBinary(_0x2fb5c9);
2239 throw "both async and sync fetching of the wasm failed"
2240 } catch (x) {
2241 _0x27df98(x)
2242 }
2243 }
2244
2245 function _0xab3496() {
2246 return _0x490317['wasmBinary'] || !_0x419bfe && !_0x4c34a3 || typeof fetch !== 'function' ? new Promise(function (x, e) {
2247 x(_0x4a4c30())
2248 }) : fetch(_0x2fb5c9, {
2249 credentials: 'same-origin'
2250 })
2251 .then(function (x) {
2252 if (!x.ok) throw 'failed to load wasm binary file at \'' + _0x2fb5c9 + "'";
2253 return x['arrayBuffer']()
2254 })['catch'](function () {
2255 return _0x4a4c30()
2256 })
2257 }
2258
2259 function _0x39fd39(x) {
2260 var e = {
2261 env: x,
2262 global: {
2263 NaN: NaN,
2264 Infinity: 1 / 0
2265 },
2266 "global.Math": Math,
2267 asm2wasm: _0x43948f
2268 };
2269
2270 function t(x, e) {
2271 var t = x['exports'];
2272 _0x490317['asm'] = t, _0x387f6c('wasm-instantiate')
2273 }
2274
2275 function a(x) {
2276 t(x['instance'])
2277 }
2278
2279 function _(x) {
2280 return _0xab3496()['then'](function (x) {
2281 return WebAssembly['instantiate'](x, e)
2282 })['then'](x, function (x) {
2283 _0x262581("failed to asynchronously prepare wasm: " + x), _0x27df98(x)
2284 })
2285 }
2286 if (_0x20c98d("wasm-instantiate"), _0x490317['instantiateWasm']) try {
2287 return _0x490317['instantiateWasm'](e, t)
2288 } catch (x) {
2289 return _0x262581("Module.instantiateWasm callback failed with error: " + x), !1
2290 }
2291 return function () {
2292 if (_0x490317['wasmBinary'] || typeof WebAssembly.instantiateStreaming !== 'function' || _0x336a7d(_0x2fb5c9) || typeof fetch !== 'function') return _(a);
2293 fetch(_0x2fb5c9, {
2294 credentials: 'same-origin'
2295 })['then'](function (x) {
2296 return WebAssembly.instantiateStreaming(x, e)['then'](a, function (x) {
2297 _0x262581("wasm streaming compile failed: " + x), _0x262581('falling back to ArrayBuffer instantiation'), _(a)
2298 })
2299 })
2300 }(), {}
2301 }
2302
2303 function _0x529ecb() {
2304 return _0x53134a.length
2305 }
2306
2307 function _0x2a112d(_0x5179bd) {
2308 return 0 | eval(_0x30d95b(_0x5179bd))
2309 }
2310
2311 function _0x5c62f8(x) {
2312 return _0x490317['___errno_location'] && (_0x5178cf[_0x490317['___errno_location']() >> 2] = x), x
2313 }
2314
2315 function _0x4d6a6f(x) {
2316 _0x27df98('OOM')
2317 }
2318
2319 function _0x30f597(x) {
2320 _0x4d6a6f(x)
2321 }
2322 _0x336a7d(_0x2fb5c9) || (_0x2fb5c9 = _0x4157b9(_0x2fb5c9)), _0x490317['asm'] = function (x, e, t) {
2323 return e['memory'] = _0x5a4043, e['table'] = _0x270b98 = new WebAssembly.Table({
2324 initial: 0,
2325 maximum: 0,
2326 element: "anyfunc"
2327 }), e['__memory_base'] = 1024, e['__table_base'] = 0, _0x39fd39(e)
2328 };
2329 var _0x2d8a30 = {},
2330 _0xc65420 = {
2331 b: _0x5c62f8,
2332 f: _0x529ecb,
2333 e: _0x30f597,
2334 d: _0x2a112d,
2335 c: _0x4d6a6f,
2336 a: _0x12703e
2337 },
2338 _0xeb0639 = _0x490317['asm'](_0x2d8a30, _0xc65420, _0x394076);
2339 _0x490317['asm'] = _0xeb0639;
2340 var _0x42e54f = _0x490317['___errno_location'] = function () {
2341 return _0x490317.asm.g.apply(null, arguments)
2342 },
2343 _0x3ab114 = _0x490317._free = function () {
2344 return _0x490317.asm.h.apply(null, arguments)
2345 },
2346 _0x4908ee = _0x490317['_gen'] = function () {
2347 return _0x490317['asm'].i.apply(null, arguments)
2348 },
2349 _0x21ba38 = _0x490317['_malloc'] = function () {
2350 return _0x490317.asm.j['apply'](null, arguments)
2351 },
2352 _0x2fd2a5 = _0x490317.stackAlloc = function () {
2353 return _0x490317['asm'].k['apply'](null, arguments)
2354 },
2355 _0x1b6b37 = _0x490317['stackRestore'] = function () {
2356 return _0x490317['asm'].l['apply'](null, arguments)
2357 },
2358 _0x3ba50c = _0x490317['stackSave'] = function () {
2359 return _0x490317['asm'].m['apply'](null, arguments)
2360 };
2361
2362 function _0x14d5b8(x) {
2363 this.name = "ExitStatus", this['message'] = 'Program terminated with exit(' + x + ")", this['status'] = x
2364 }
2365
2366 function _0x3d0fd4(x) {
2367 function e() {
2368 _0x490317['calledRun'] || (_0x490317.calledRun = !0, _0x2b7231 || (_0x29b2aa(), _0x4e0c0c(), _0x490317['onRuntimeInitialized'] && _0x490317.onRuntimeInitialized(), _0x476025()))
2369 }
2370 x = x || _0x490317['arguments'], _0x704d78 > 0 || (_0x36fd2e(), _0x704d78 > 0 || _0x490317.calledRun || (_0x490317['setStatus'] ? (_0x490317.setStatus("Running..."), setTimeout(function () {
2371 setTimeout(function () {
2372 _0x490317.setStatus("")
2373 }, 1), e()
2374 }, 1)) : e()))
2375 }
2376
2377 function _0x27df98(x) {
2378 throw _0x490317['onAbort'] && _0x490317.onAbort(x), void 0 !== x ? (_0x4b1fa2(x), _0x262581(x), x = '"' + x + '"') : x = "", _0x2b7231 = !0, _0xc98827 = 1, 'abort(' + x + "). Build with -s ASSERTIONS=1 for more info."
2379 }
2380 if (_0x490317['asm'] = _0xeb0639, _0x490317.ccall = _0x1d15e8, _0x490317['cwrap'] = _0x5a4004, _0x14d5b8['prototype'] = new Error, _0x14d5b8.prototype.constructor = _0x14d5b8, _0x54333a = function x() {
2381 _0x490317['calledRun'] || _0x3d0fd4(), _0x490317['calledRun'] || (_0x54333a = x)
2382 }, _0x490317['run'] = _0x3d0fd4, _0x490317['abort'] = _0x27df98, _0x490317['preInit'])
2383 for (typeof _0x490317['preInit'] == 'function' && (_0x490317['preInit'] = [_0x490317['preInit']]); _0x490317['preInit']['length'] > 0;) _0x490317['preInit']['pop']()();
2384 _0x490317['noExitRuntime'] = !0, _0x3d0fd4(), _0xa22c0d['gen'] = function (x) {
2385 for (var e = x['length'], t = _0x490317['_malloc'](e), a = new Uint8Array(_0x490317.HEAPU8['buffer'], t, e), _ = 0; _ < e; _++) a[_] = x.charCodeAt(_);
2386 _0x490317['_gen'](t, e);
2387 var n = new Uint8Array(new ArrayBuffer(e));
2388 return n['set'](a), _0x3ab114(t), n
2389 }
2390 })['call'](this, _0x250210(13), "/")
2391}, , , function (x, e, t) {
2392 x['exports'] = t.p + 'js/wauth.wasm'
2393}, function (x, e, t) {
2394 var a = t(1),
2395 _ = (t(118), t(44)),
2396 n = t(3),
2397 i = a['renderer']['view'],
2398 s = {},
2399 r = localStorage['adminMode'],
2400 o = /firefox/i ['test'](navigator.userAgent),
2401 c = _0x3227(o ? "0x297" : "0x298");
2402
2403 function l() {
2404 var x = a['actions'].findPlayerUnderMouse(),
2405 e = x && x.player;
2406 e && a.events['$emit']('context-menu', event, e)
2407 }
2408
2409 function d() {
2410 a['scene']['setPosition']()
2411 }
2412
2413 function f(x) {
2414 a.rawMouse.x = x['clientX'], a['rawMouse'].y = x['clientY'], a['updateMouse']()
2415 }
2416
2417 function u(x) {
2418 if (x['preventDefault'](), i['focus'](), x.shiftKey && r && a['selectedPlayer'] && 0 === x['button']) a['sendChatMessage']('/teleport ' + a['selectedPlayer'] + " " + a['mouse'].x + " " + a.mouse.y);
2419 else {
2420 var e = 'MOUSE' + x.button;
2421 if (a['spectating'] && 0 === x['button']) {
2422 var t = a['actions']['findPlayerUnderMouse']();
2423 t && a['actions']['spectate'](t.pid)
2424 } else _.press(e)
2425 }
2426 }
2427
2428 function h(x) {
2429 var e = 'MOUSE' + x['button'];
2430 _['release'](e), s[e] = !1
2431 }
2432
2433 function v(x) {
2434 var e = _['convertKey'](x['key']);
2435 if (!(s[e] || x.target !== document.body && x['target'] !== i))
2436 if (s[e] = !0, e !== 'ESCAPE') {
2437 if (e !== 'ENTER') return x['shiftKey'] && r ? ("V" === e && a['sendChatMessage']('/virus ' + a.mouse.x + " " + a['mouse'].y), void(a.selectedPlayer && ("F" === e && a['sendChatMessage']('/freeze ' + a.selectedPlayer), "K" === e && function (x) {
2438 var e = a['playerManager'].players[x];
2439 if (!e) return;
2440 var t = 'Kick player "' + htmlEncode(e['name']) + '"';
2441 n['confirm'](t, () => {
2442 a.sendChatMessage('/kick ' + x)
2443 })
2444 }(a['selectedPlayer']), "B" === e && function (x) {
2445 var e = a.playerManager.players[x];
2446 if (!e) return;
2447 var t = 'Ban player \"' + htmlEncode(e['name']) + '"';
2448 n['confirm'](t, () => {
2449 a.sendChatMessage('/ban ' + x)
2450 })
2451 }(a.selectedPlayer), "N" === e && function (x) {
2452 var e = a['playerManager']['players'][x];
2453 if (!e) return;
2454 n['instance']['fire']({
2455 input: "text",
2456 showCancelButton: !0,
2457 confirmButtonText: 'Send',
2458 html: 'Send notification to player \"' + htmlEncode(e['name']) + '"'
2459 })
2460 .then(e => {
2461 var t = e.value;
2462 t && a['sendChatMessage']('/notify ' + x + " " + t)
2463 })
2464 }(a.selectedPlayer), "M" === e && function (x) {
2465 var e = a['playerManager']['players'][x];
2466 if (!e) return;
2467 var t = 'Mute player \"' + htmlEncode(e.name) + '"';
2468 n.confirm(t, () => {
2469 a.sendChatMessage('/mute ' + x)
2470 })
2471 }(a['selectedPlayer'])))) : void(x['target'] === i && _['press'](e) && x['preventDefault']());
2472 a['events']['$emit']("chat-focus")
2473 } else a['replaying'] ? (s = {}, a['stop'](), a['showMenu'](!0)) : a.toggleMenu()
2474 }
2475
2476 function p(x) {
2477 var e = _['convertKey'](x['key']);
2478 _.release(e), s[e] = !1
2479 }
2480
2481 function b(x) {
2482 x['shiftKey'] && r && a['selectedPlayer'] ? x['wheelDelta'] < 0 ? a['sendChatMessage']('/mass ' + a['selectedPlayer'] + " +500") : a['sendChatMessage']('/mass ' + a['selectedPlayer'] + ' -500') : a['actions']['zoom'](x)
2483 }
2484 a.eventListeners = function (x) {
2485 x ? (window['addEventListener']("resize", d), i['addEventListener']('mousedown', u), i['addEventListener'](c, b), i['addEventListener']('contextmenu', l), document['addEventListener']('mouseup', h), document.body['addEventListener']("mousemove", f), document['body']['addEventListener']("keydown", v), document.body['addEventListener']('keyup', p)) : (window.removeEventListener('resize', d), i.removeEventListener('mousedown', u), i['removeEventListener'](c, b), i['removeEventListener']('contextmenu', l), document.removeEventListener("mouseup", h), document['body']['removeEventListener']("mousemove", f), document.body['removeEventListener']('keydown', v), document['body']['removeEventListener']('keyup', p))
2486 }
2487}, function (x, e, t) {
2488 var a = t(1),
2489 _ = t(5),
2490 n = a['actions'] = {};
2491 n['spectate'] = (x => {
2492 a.spectating = !0;
2493 var e = prepareData(x ? 3 : 1);
2494 e['setUint8'](0, 2), x && e.setInt16(1, x, !0), a['send'](e)
2495 }), n['spectateLockToggle'] = function () {
2496 a.sendUint8(10)
2497 }, n['move'] = (() => {
2498 var x = a['stopMovement'] ? a['camera']['position'] : a['mouse'],
2499 e = prepareData(9);
2500 e['setUint8'](0, 16), e.setInt32(1, x.x, !0), e['setInt32'](5, x.y, !0), a.send(e)
2501 }), n['feed'] = function (x) {
2502 var e;
2503 arguments.length ? ((e = prepareData(2))
2504 .setUint8(0, 21), e['setUint8'](1, +x)) : (e = prepareData(1))
2505 .setUint8(0, 21), a['send'](e)
2506 }, n['lockLinesplit'] = (() => {
2507 a.sendUint8(15)
2508 }), n['linesplit'] = (() => {
2509 var x = a['mouse'],
2510 e = x.x - a['camera']['position'].x,
2511 t = x.y - a['camera'].position.y,
2512 _ = Math['atan2'](t, e);
2513 x.x = x.x + 1e5 * Math['cos'](_), x.y = x.y + 1e5 * Math['sin'](_), n['split'](3), a.moveWaitUntil = Date['now']() + 1e3
2514 }), n['split'] = (x => {
2515 n['move'](), msg = prepareData(2), msg['setUint8'](0, 17), msg['setUint8'](1, x), a.send(msg), a['splitCount'] += x, a['splitCount'] <= 2 ? a['moveWaitUntil'] = Date['now']() + 300 : (a.moveWaitUntil = 0, a.splitCount = 0)
2516 }), n['zoom'] = (x => {
2517 var e = 1 - _.cameraZoomSpeed / 100,
2518 t = 0;
2519 x['wheelDelta'] ? t = x['wheelDelta'] / -120 : x['detail'] && (t = x['detail'] / 3);
2520 var n = Math['pow'](e, t),
2521 i = (a['zoom'] * n)['clamp'](a['zoomMin'], 1);
2522 a['zoom'] = i
2523 }), n['setZoomLevel'] = function (x) {
2524 var e = .8 / Math['pow'](2, x - 1) * a['zoomScale'];
2525 a.zoom = e
2526 }, n['targetPlayer'] = (() => {
2527 var x = n['findPlayerUnderMouse'](!0);
2528 x && (a['selectedPlayer'] = x['pid'])
2529 }), n.findPlayerUnderMouse = (x => {
2530 for (var e = a['mouse'], t = null, _ = 1 / 0, n = a['nodelist'].filter(x => x['pid'])['sort']((x, e) => x['size'] - e['size']), i = 0; i < n['length']; i++) {
2531 var s = n[i],
2532 r = s.x - e.x,
2533 o = s.y - e.y,
2534 c = Math['sqrt'](Math.abs(r * r + o * o)) - s['getRadius']();
2535 if (x) c < _ && (_ = c, t = s);
2536 else if (c <= 0) return s
2537 }
2538 return t
2539 }), n['toggleSkins'] = function (x) {
2540 x = void 0 === x ? !_.skinsEnabled : x, _.set('skinsEnabled', x), a['playerManager']['onSkinsChanged'](x)
2541 }, n['toggleNames'] = function (x) {
2542 x = void 0 === x ? !_['namesEnabled'] : x, _.set('namesEnabled', x)
2543 }, n['toggleFood'] = function (x) {
2544 x = void 0 === x ? !_['foodVisible'] : x, _['set']('foodVisible', x), a.scene['food'].visible = x
2545 }, n.toggleChat = function () {
2546 var x = !_.showChat;
2547 _['set']('showChat', x), a['running'] && a['events']['$emit']('chat-visible', x)
2548 }, n.toggleMass = function () {
2549 var x = !_.showMass;
2550 _['set']('showMass', x)
2551 }
2552}, function (x, e, t) {
2553 t(1)
2554}, , , , , , , , , , , , , , , , , , , function (x, e, t) {
2555 "use strict";
2556 var a = t(15);
2557 t.n(a)
2558 .a
2559}, function (x, e, t) {}, function (x, e, t) {
2560 "use strict";
2561 var a = t(18);
2562 t.n(a)
2563 .a
2564}, function (x, e, t) {}, function (x, e) {
2565 var t = 'seenNotifications';
2566 x['exports'] = new class {
2567 constructor() {
2568 this['seenList'] = this['parseSeen'](localStorage[t])
2569 } ['parseSeen'](x) {
2570 if (!x) return [];
2571 try {
2572 var e = JSON.parse(x);
2573 if (Array['isArray'](e)) return e
2574 } catch (x) {
2575 console.error("notifications.parseSeen:", x['message'])
2576 }
2577 return []
2578 } ['saveSeen']() {
2579 try {
2580 localStorage[t] = JSON['stringify'](this['seenList'])
2581 } catch (x) {
2582 console.error('notifications.saveSeen:', x['message'])
2583 }
2584 } ['isSeen'](x) {
2585 return this['seenList']['includes'](x)
2586 } ['setSeen'](x) {
2587 this['isSeen'](x) ? console['warn']('Key "' + x + '\" is already on the seen list') : (this['seenList']['push'](x), this['saveSeen']())
2588 } ['ifNotSeen'](x, e) {
2589 this['isSeen'](x) || e(this.setSeen['bind'](this, x))
2590 }
2591 }
2592}, function (x, e, t) {
2593 "use strict";
2594 var a = t(19);
2595 t.n(a)
2596 .a
2597}, function (x, e, t) {}, function (x, e, t) {
2598 "use strict";
2599 var a = t(20);
2600 t.n(a)
2601 .a
2602}, function (x, e, t) {}, , function (x, e, t) {
2603 "use strict";
2604 var a = t(23);
2605 t.n(a)
2606 .a
2607}, function (x, e, t) {}, function (x, e, t) {
2608 "use strict";
2609 var a = t(24);
2610 t.n(a)
2611 .a
2612}, function (x, e, t) {}, function (x, e, t) {
2613 "use strict";
2614 var a = t(25);
2615 t.n(a)
2616 .a
2617}, function (x, e, t) {}, function (x, e, t) {
2618 "use strict";
2619 var a = t(26);
2620 t.n(a)
2621 .a
2622}, function (x, e, t) {}, function (x, e, t) {
2623 var a = t(11);
2624 var _ = localStorage.vanisToken || null;
2625 x.exports = new class {
2626 constructor(x, e) {
2627 this['url'] = x, this['vanisToken'] = e
2628 }
2629 setToken(x) {
2630 this['vanisToken'] = x, localStorage['vanisToken'] = x
2631 } ['clearToken']() {
2632 this['vanisToken'] = null, delete localStorage['vanisToken']
2633 }
2634 async call(x, e) {
2635 return (await a({
2636 method: x,
2637 url: this['url'] + e,
2638 headers: {
2639 Authorization: 'Vanis ' + this['vanisToken']
2640 }
2641 }))['data']
2642 } ['get'](x) {
2643 return this['call']('GET', x)
2644 }
2645 }('https://vanis.io/api', _)
2646}, function (x, e) {
2647 var t = .1;
2648 x.exports = {
2649 getXp: function (x) {
2650 return Math.round(x * x / (t * t))
2651 },
2652 getLevel: function (x) {
2653 return Math['floor'](Math['sqrt'](x) * t)
2654 }
2655 }
2656}, function (x, e, t) {
2657 "use strict";
2658 var a = t(27);
2659 t.n(a)
2660 .a
2661}, function (x, e, t) {}, function (x, e, t) {
2662 "use strict";
2663 var a = t(28);
2664 t.n(a)
2665 .a
2666}, function (x, e, t) {}, function (x, e, t) {
2667 "use strict";
2668 var a = t(29);
2669 t.n(a)
2670 .a
2671}, function (x, e, t) {}, function (x, e, t) {
2672 "use strict";
2673 var a = t(30);
2674 t.n(a)
2675 .a
2676}, function (x, e, t) {}, function (x, e, t) {
2677 "use strict";
2678 var a = t(31);
2679 t.n(a)
2680 .a
2681}, function (x, e, t) {}, function (x, e, t) {
2682 "use strict";
2683 var a = t(32);
2684 t.n(a)
2685 .a
2686}, function (x, e, t) {}, function (x, e, t) {
2687 "use strict";
2688 var a = t(33);
2689 t.n(a)
2690 .a
2691}, function (x, e, t) {}, function (x, e, t) {
2692 "use strict";
2693 var a = t(34);
2694 t.n(a)
2695 .a
2696}, function (x, e, t) {}, function (x, e, t) {
2697 "use strict";
2698 var a = t(35);
2699 t.n(a)
2700 .a
2701}, function (x, e, t) {}, function (x, e, t) {
2702 "use strict";
2703 var a = t(38);
2704 t.n(a)
2705 .a
2706}, function (x, e, t) {}, function (x, e, t) {
2707 "use strict";
2708 var a = t(39);
2709 t.n(a)
2710 .a
2711}, function (x, e, t) {}, function (x, e, t) {
2712 "use strict";
2713 var a = t(40);
2714 t.n(a)
2715 .a
2716}, function (x, e, t) {}, function (x, e, t) {
2717 "use strict";
2718 var a = t(41);
2719 t.n(a)
2720 .a
2721}, function (x, e, t) {}, function (x, e, t) {
2722 "use strict";
2723 var a = t(42);
2724 t.n(a)
2725 .a
2726}, function (x, e, t) {}, function (x, e, t) {
2727 "use strict";
2728 var a = t(43);
2729 t.n(a)
2730 .a
2731}, function (x, e, t) {}, function (x, e, t) {
2732 var a, _, n, i, s = t(1),
2733 r = document['getElementById']('starfield'),
2734 o = r['getContext']("2d");
2735
2736 function c() {
2737 a = r['width'] = window.innerWidth, _ = r['height'] = window.innerHeight, n = a / 2, i = _ / 2
2738 }
2739
2740 function l() {
2741 var x = a,
2742 e = _;
2743 return {
2744 x: Math['random']() * x * 2 - x,
2745 y: Math['random']() * e * 2 - e
2746 }
2747 }
2748 window['addEventListener']('resize', c), c();
2749 class d {
2750 constructor(x) {
2751 this['spawn'](x)
2752 } ['spawn'](x) {
2753 this.x = x.x, this.y = x.y, this['angle'] = Math['atan2'](this.y, this.x), this.radius = .1, this['speed'] = .4 + 3.3 * Math.random()
2754 } ['update'](x) {
2755 var e = this['speed'] * x;
2756 this.x += Math['cos'](this['angle']) * e, this.y += Math['sin'](this['angle']) * e, this['radius'] += .0035 * e
2757 }
2758 }
2759 for (var f = [], u = 0; u < 220; u++) {
2760 var h = l();
2761 f['push'](new d(h))
2762 }
2763
2764 function v(x) {
2765 o['beginPath'](), o.fillStyle = "#00b8ff", o['globalAlpha'] = .9, f['forEach'](e => {
2766 e['update'](x),
2767 function (x) {
2768 var e = n + x['radius'],
2769 t = i + x['radius'];
2770 return x.x < -e || x.x > e || x.y < -t || x.y > t
2771 }(e) && e['spawn'](l()), o['moveTo'](e.x, e.y), o.arc(e.x, e.y, e.radius, 0, 2 * Math.PI)
2772 }), o.fill()
2773 }
2774 var p = 0,
2775 b = 0;
2776 setTimeout(function x(e) {
2777 if (s['running']) return window['removeEventListener']('resize', c), void r['parentNode']['removeChild'](r);
2778 var t = window['performance'] && window['performance']['now'] ? window['performance']['now']() : Date['now']();
2779 p || (p = b = t);
2780 e = (t - b) / 6;
2781 var l = t - p - 550;
2782 if (l > 0) {
2783 var d = l / 1e3;
2784 d > 1.2 && (d = 1.2), e /= Math['pow'](3, d)
2785 }
2786 requestAnimationFrame(x), o['clearRect'](0, 0, a, _), o['save'](), o['translate'](n, i), v(e), o['restore'](), b = t
2787 }, 100)
2788}, function (x, e, t) {
2789 "use strict";
2790 t.r(e);
2791 var a = t(12),
2792 _ = t.n(a),
2793 n = t(66),
2794 i = t.n(n),
2795 s = function () {
2796 var x = this['$createElement'],
2797 e = this['_self']._c || x;
2798 return e('transition', {
2799 attrs: {
2800 name: this['isModalOpen'] || this.gameState['isAlive'] ? "" : 'menu'
2801 }
2802 }, [e("div", {
2803 attrs: {
2804 id: 'main-container'
2805 }
2806 }, [e("div", {
2807 staticClass: "bar"
2808 }, [e("div", {
2809 attrs: {
2810 id: 'vanis-io_728x90'
2811 }
2812 })]), this._v(" "), e("servers", {
2813 staticClass: 'fade two'
2814 }), this._v(" "), e('player-container', {
2815 staticClass: 'fade two',
2816 on: {
2817 "modal-open": this['onModalChange']
2818 }
2819 }), this._v(" "), e('account', {
2820 staticClass: 'fade'
2821 }), this._v(" "), e('skins')], 1)])
2822 };
2823 s['_withStripped'] = !0;
2824 var r = function () {
2825 var x = this,
2826 e = x['$createElement'],
2827 t = x['_self']._c || e;
2828 return t("div", {
2829 attrs: {
2830 id: 'tab-menu'
2831 }
2832 }, [t("div", {
2833 staticClass: 'tabs'
2834 }, x._l(x['regionCodes'], function (e, a) {
2835 return t("div", {
2836 key: a,
2837 staticClass: "tab",
2838 class: {
2839 active: x['selectedRegion'] === e
2840 },
2841 on: {
2842 click: function (t) {
2843 x['selectRegion'](e)
2844 }
2845 }
2846 }, ["AS" === e ? t('span', {
2847 staticClass: "new-badge"
2848 }, [x._v('NEW')]) : x._e(), x._v(' ' + x._s(e) + "\r\n ")])
2849 })), x._v(" "), t('div', {
2850 staticClass: 'server-list'
2851 }, [x._l(x['regionServers'], function (e, a) {
2852 return t('div', {
2853 key: a,
2854 staticClass: 'vanis-list-item',
2855 class: {
2856 active: x['gameState']['connectionUrl'] === e['url'], "cursor-loading": x['connectWait']
2857 },
2858 on: {
2859 click: function (t) {
2860 x['connect'](e.url), x['disableAutoConnect']()
2861 }
2862 }
2863 }, [t('div', {
2864 staticClass: 'server-name'
2865 }, [x._v(x._s(e['name']))]), x._v(" "), t('div', [x._v(x._s(e.currentPlayers) + ' / ' + x._s(e.maxPlayers))])])
2866 }), x._v(" "), x['error'] ? t('div', {
2867 staticClass: 'server-load-error'
2868 }, [x._v('Failed to load servers')]) : x._e()], 2)])
2869 };
2870 r['_withStripped'] = !0;
2871 var o = t(11),
2872 c = t(1),
2873 l = t(3),
2874 {
2875 noop: d
2876 } = t(63),
2877 f = {
2878 FFA: 1,
2879 Instant: 2,
2880 Megasplit: 3,
2881 Crazy: 4,
2882 "Self-Feed": 5
2883 };
2884
2885 function u(x, e) {
2886 var t = (f[x['gameMode']] || 99) - (f[e['gameMode']] || 99);
2887 return 0 !== t ? t : x['name'] < e['name'] ? -1 : x['name'] > e['name'] ? 1 : 0
2888 }
2889 var h = {
2890 data: () => ({
2891 regionCodes: ["EU", "NA", "AS"],
2892 connectWait: !1,
2893 gameState: c.state,
2894 selectedRegion: "",
2895 error: null,
2896 servers: []
2897 }),
2898 created() {
2899 this['loadServers'](x => {
2900 c['isConnected']() || localStorage['disableAutoConnect'] || setTimeout(this.connectEmptyFFA, 1e3)
2901 }), this.interval = setInterval(() => {
2902 this['loadServers']()
2903 }, 6e4), this['getRegionCode'](x => {
2904 x || (console['error']('Region code fetching failed, defaulting to EU'), x = "EU"), this['regionCodes'].includes(x) || (console.error('Region with code \"' + x + '\" does not exist, defaulting to EU'), x = "EU"), this['selectRegion'](x)
2905 })
2906 },
2907 destroyed() {
2908 clearInterval(this['interval'])
2909 },
2910 computed: {
2911 regionServers: function () {
2912 var x = this['selectedRegion']['toLowerCase']();
2913 return this['servers']['filter'](e => {
2914 var t = e.url['toLowerCase']()['match'](/game-([a-z]{2})/);
2915 if (t && t[1] === x) return !0
2916 })
2917 }
2918 },
2919 methods: {
2920 disableAutoConnect() {
2921 localStorage['disableAutoConnect'] = !0
2922 },
2923 connectEmptyFFA() {
2924 var x = this['regionServers'].filter(x => x['gameMode'] === 'FFA')
2925 .sort((x, e) => x['currentPlayers'] - e.currentPlayers);
2926 if (!x['length']) return !1;
2927 this.connect(x[0]['url'])
2928 },
2929 selectRegion(x) {
2930 localStorage.regionCode = x, this['selectedRegion'] = x
2931 },
2932 getRegionCode(x) {
2933 var e = localStorage.regionCode;
2934 e ? x(e) : o.get('https://ipapi.co/json')['then'](e => {
2935 var t = e['data']['continent_code'];
2936 x(t)
2937 })['catch'](e => {
2938 x(null)
2939 })
2940 },
2941 connect(x) {
2942 this['connectWait'] || (this['connectWait'] = !0, l.toast['close'](), this['checkBadSkinUrl'](), c['connect'](x), setTimeout(() => {
2943 this['connectWait'] = !1
2944 }, 1e3))
2945 },
2946 checkBadSkinUrl() {
2947 var x = document['getElementById']('skinurl')['value'];
2948 x && !x['startsWith']('https://skins.vanis.io') && l['toast'].fire({
2949 type: 'error',
2950 title: "Invalid skin url! Use skins.vanis.io",
2951 timer: 5e3
2952 })
2953 },
2954 loadServers(x) {
2955 x = x || d, o.get('https://vanis.io/gameservers.json')['then'](e => {
2956 var t = e['data'];
2957 this['servers'] = t.sort(u), this['error'] = null, x(!0)
2958 })['catch'](e => {
2959 this.servers = [], this['error'] = e, x(!1)
2960 })
2961 }
2962 }
2963 },
2964 v = (t(138), t(0)),
2965 p = Object(v.a)(h, r, [], !1, null, "0647fbb0", null);
2966 p.options['__file'] = 'src/components/servers.vue';
2967 var b = p['exports'],
2968 g = function () {
2969 var x = this,
2970 e = x['$createElement'],
2971 t = x['_self']._c || e;
2972 return t("div", {
2973 attrs: {
2974 id: 'player-container'
2975 }
2976 }, [t('div', {
2977 staticClass: 'tabs'
2978 }, [t("i", {
2979 staticClass: 'tab fas fa-cog',
2980 on: {
2981 click: function (e) {
2982 x.openModal('settings')
2983 }
2984 }
2985 }), x._v(" "), t("i", {
2986 staticClass: 'tab far fa-keyboard',
2987 on: {
2988 click: function (e) {
2989 x['openModal']('hotkeys')
2990 }
2991 }
2992 }), x._v(" "), t("i", {
2993 staticClass: 'tab fas fa-film',
2994 on: {
2995 click: function (e) {
2996 x.openModal('replays3')
2997 }
2998 }
2999 })]), x._v(" "), t('div', {
3000 attrs: {
3001 id: 'player-data'
3002 }
3003 }, [x._m(0), x._v(" "), t("div", {
3004 staticClass: 'row'
3005 }, [t("input", {
3006 directives: [{
3007 name: "model",
3008 rawName: 'v-model',
3009 value: x['nickname'],
3010 expression: 'nickname'
3011 }],
3012 staticStyle: {
3013 flex: "2",
3014 "min-width": '1px'
3015 },
3016 attrs: {
3017 id: 'nickname',
3018 type: 'text',
3019 placeholder: "Nickname",
3020 maxlength: "15"
3021 },
3022 domProps: {
3023 value: x['nickname']
3024 },
3025 on: {
3026 change: x.onNicknameChange,
3027 input: function (e) {
3028 e.target.composing || (x['nickname'] = e['target']['value'])
3029 }
3030 }
3031 }), x._v(" "), t("input", {
3032 directives: [{
3033 name: 'model',
3034 rawName: 'v-model',
3035 value: x.teamtag,
3036 expression: "teamtag"
3037 }],
3038 staticStyle: {
3039 flex: "1",
3040 "min-width": '1px'
3041 },
3042 attrs: {
3043 id: 'teamtag',
3044 type: 'text',
3045 placeholder: 'Tag',
3046 maxlength: "15"
3047 },
3048 domProps: {
3049 value: x['teamtag']
3050 },
3051 on: {
3052 change: x.onTeamTagChange,
3053 input: function (e) {
3054 e['target']['composing'] || (x['teamtag'] = e.target.value)
3055 }
3056 }
3057 })]), x._v(" "), t('input', {
3058 directives: [{
3059 name: 'model',
3060 rawName: 'v-model',
3061 value: x['skinUrl'],
3062 expression: 'skinUrl'
3063 }],
3064 attrs: {
3065 id: 'skinurl',
3066 type: 'text',
3067 placeholder: 'Skin Url'
3068 },
3069 domProps: {
3070 value: x['skinUrl']
3071 },
3072 on: {
3073 change: x['onSkinUrlChange'],
3074 input: function (e) {
3075 e['target']['composing'] || (x['skinUrl'] = e['target']['value'])
3076 }
3077 }
3078 }), x._v(" "), t('div', {
3079 attrs: {
3080 id: "game-buttons"
3081 }
3082 }, [t('button', {
3083 attrs: {
3084 id: 'play-button',
3085 disabled: !x['gameState']['playButton'] || x.gameState['loadingAds']
3086 },
3087 on: {
3088 click: x.play
3089 }
3090 }, [x.gameState['loadingAds'] ? t("i", {
3091 staticClass: 'fas fa-sync fa-spin'
3092 }) : [x._v('Play')]], 2), x._v(" "), t('button', {
3093 attrs: {
3094 id: 'spec-button',
3095 disabled: x['gameState']['isAlive'] || !x['gameState']['playButton'] || x.gameState['loadingAds']
3096 },
3097 on: {
3098 click: function (e) {
3099 x['spectate']()
3100 }
3101 }
3102 }, [t("i", {
3103 staticClass: "fa fa-eye"
3104 })])])]), x._v(" "), x['activeModal'] === 'settings' ? t('modal', {
3105 on: {
3106 close: function (e) {
3107 x['closeModal']()
3108 }
3109 }
3110 }, [t('settings')], 1) : x._e(), x._v(" "), x.activeModal === 'hotkeys' ? t('modal', {
3111 on: {
3112 close: function (e) {
3113 x['closeModal']()
3114 }
3115 }
3116 }, [t('hotkeys')], 1) : x._e(), x._v(" "), x.activeModal === 'replays3' ? t("modal", {
3117 staticStyle: {
3118 "margin-left": '-316px',
3119 width: '962px'
3120 },
3121 on: {
3122 close: function (e) {
3123 x['closeModal']()
3124 }
3125 }
3126 }, [t('replays3')], 1) : x._e()], 1)
3127 },
3128 m = [function () {
3129 var x = this['$createElement'],
3130 e = this._self._c || x;
3131 return e('div', {
3132 staticStyle: {
3133 "text-align": 'center',
3134 height: '286px'
3135 }
3136 }, [e('div', {
3137 staticStyle: {
3138 padding: "4px"
3139 }
3140 }, [this._v('Advertisement')]), this._v(" "), e('div', {
3141 attrs: {
3142 id: 'vanis-io_300x250'
3143 }
3144 })])
3145 }];
3146 g['_withStripped'] = !0;
3147 var y = t(67),
3148 w = function () {
3149 var x = this,
3150 e = x.$createElement,
3151 t = x['_self']._c || e;
3152 return t('div', {
3153 staticClass: 'settings-container'
3154 }, [t('div', {
3155 staticClass: 'webgl-options'
3156 }, [t('div', {
3157 staticClass: 'header'
3158 }, [t('p-check', {
3159 staticClass: 'p-switch',
3160 attrs: {
3161 disabled: !x.isWebGLSupported
3162 },
3163 on: {
3164 change: function (e) {
3165 x['toggle']("useWebGL")
3166 }
3167 },
3168 model: {
3169 value: x['useWebGL'],
3170 callback: function (e) {
3171 x['useWebGL'] = e
3172 },
3173 expression: 'useWebGL'
3174 }
3175 }, [x._v("GPU Rendering\r\n "), x['isWebGLSupported'] ? x._e() : [x._v("(unsupported)")]], 2)], 1), x._v(" "), t('div', {
3176 staticClass: "options"
3177 }, [t('p-check', {
3178 staticClass: "p-switch",
3179 attrs: {
3180 disabled: !x['useWebGL']
3181 },
3182 on: {
3183 change: function (e) {
3184 x['toggle']('showBackgroundImage')
3185 }
3186 },
3187 model: {
3188 value: x['showBackgroundImage'],
3189 callback: function (e) {
3190 x['showBackgroundImage'] = e
3191 },
3192 expression: 'showBackgroundImage'
3193 }
3194 }, [x._v('Background Image')]), x._v(" "), t('input', {
3195 directives: [{
3196 name: 'model',
3197 rawName: "v-model",
3198 value: x['backgroundImageUrl'],
3199 expression: "backgroundImageUrl"
3200 }],
3201 attrs: {
3202 type: 'text',
3203 disabled: !x['showBackgroundImage'] || !x.useWebGL,
3204 placeholder: 'Background image URL'
3205 },
3206 domProps: {
3207 value: x.backgroundImageUrl
3208 },
3209 on: {
3210 blur: function (e) {
3211 x['toggle']('backgroundImageUrl')
3212 },
3213 input: function (e) {
3214 e['target']['composing'] || (x.backgroundImageUrl = e['target']['value'])
3215 }
3216 }
3217 }), x._v(" "), t("p-check", {
3218 staticClass: 'p-switch',
3219 attrs: {
3220 disabled: !x['showBackgroundImage'] || !x['useWebGL']
3221 },
3222 on: {
3223 change: function (e) {
3224 x['toggle']("backgroundImageRepeat")
3225 }
3226 },
3227 model: {
3228 value: x.backgroundImageRepeat,
3229 callback: function (e) {
3230 x['backgroundImageRepeat'] = e
3231 },
3232 expression: 'backgroundImageRepeat'
3233 }
3234 }, [x._v('Background Repeat')]), x._v(" "), t('p-check', {
3235 staticClass: 'p-switch',
3236 attrs: {
3237 disabled: !x['showBackgroundImage'] || !x['useWebGL']
3238 },
3239 on: {
3240 change: function (e) {
3241 x['toggle']('backgroundDefaultIfUnequal')
3242 }
3243 },
3244 model: {
3245 value: x['backgroundDefaultIfUnequal'],
3246 callback: function (e) {
3247 x['backgroundDefaultIfUnequal'] = e
3248 },
3249 expression: 'backgroundDefaultIfUnequal'
3250 }
3251 }, [x._v('Use Default on Unequal Maps')]), x._v(" "), t('div', {
3252 class: {
3253 "disabled-content": !x['showBackgroundImage'] || !x['useWebGL']
3254 }
3255 }, [x._v("\r\n Background Opacity: " + x._s(x['backgroundImageOpacity']) + "\r\n "), t("input", {
3256 staticClass: 'slider',
3257 attrs: {
3258 type: 'range',
3259 min: '0.1',
3260 max: "1",
3261 step: '0.01'
3262 },
3263 domProps: {
3264 value: x.backgroundImageOpacity
3265 },
3266 on: {
3267 input: function (e) {
3268 x['backgroundOpacityChange'](e)
3269 }
3270 }
3271 })]), x._v(" "), t('div', {
3272 staticStyle: {
3273 display: "flex"
3274 }
3275 }, [t('div', {
3276 staticStyle: {
3277 "white-space": 'nowrap',
3278 "margin-right": '8px',
3279 "align-self": "center"
3280 }
3281 }, [x._v('Background Color:')]), x._v(" "), t('input', {
3282 directives: [{
3283 name: 'model',
3284 rawName: "v-model",
3285 value: x.backgroundColor,
3286 expression: 'backgroundColor'
3287 }],
3288 attrs: {
3289 type: 'text'
3290 },
3291 domProps: {
3292 value: x['backgroundColor']
3293 },
3294 on: {
3295 change: function (e) {
3296 x['toggle']('backgroundColor')
3297 },
3298 input: function (e) {
3299 e['target'].composing || (x.backgroundColor = e['target']['value'])
3300 }
3301 }
3302 })])], 1)]), x._v(" "), t('p-check', {
3303 staticClass: 'p-switch',
3304 on: {
3305 change: function (e) {
3306 x['toggle']('autoZoom')
3307 }
3308 },
3309 model: {
3310 value: x['autoZoom'],
3311 callback: function (e) {
3312 x['autoZoom'] = e
3313 },
3314 expression: 'autoZoom'
3315 }
3316 }, [x._v('Auto Zoom')]), x._v(" "), t("p-check", {
3317 staticClass: 'p-switch',
3318 on: {
3319 change: function (e) {
3320 x.toggle('skinsEnabled')
3321 }
3322 },
3323 model: {
3324 value: x['skinsEnabled'],
3325 callback: function (e) {
3326 x['skinsEnabled'] = e
3327 },
3328 expression: "skinsEnabled"
3329 }
3330 }, [x._v('Skins Enabled')]), x._v(" "), t('p-check', {
3331 staticClass: 'p-switch',
3332 on: {
3333 change: function (e) {
3334 x['toggle']('namesEnabled')
3335 }
3336 },
3337 model: {
3338 value: x['namesEnabled'],
3339 callback: function (e) {
3340 x['namesEnabled'] = e
3341 },
3342 expression: "namesEnabled"
3343 }
3344 }, [x._v("Names Enabled")]), x._v(" "), t('p-check', {
3345 staticClass: 'p-switch',
3346 on: {
3347 change: function (e) {
3348 x.toggle("showMass")
3349 }
3350 },
3351 model: {
3352 value: x['showMass'],
3353 callback: function (e) {
3354 x['showMass'] = e
3355 },
3356 expression: 'showMass'
3357 }
3358 }, [x._v('Mass Visible')]), x._v(" "), t("p-check", {
3359 staticClass: 'p-switch',
3360 on: {
3361 change: function (e) {
3362 x['toggle']('shortMass')
3363 }
3364 },
3365 model: {
3366 value: x['shortMass'],
3367 callback: function (e) {
3368 x.shortMass = e
3369 },
3370 expression: "shortMass"
3371 }
3372 }, [x._v('Short Mass')]), x._v(" "), t('p-check', {
3373 staticClass: 'p-switch',
3374 on: {
3375 change: function (e) {
3376 x.toggle("foodVisible")
3377 }
3378 },
3379 model: {
3380 value: x['foodVisible'],
3381 callback: function (e) {
3382 x['foodVisible'] = e
3383 },
3384 expression: 'foodVisible'
3385 }
3386 }, [x._v('Food Visible')]), x._v(" "), t('p-check', {
3387 staticClass: 'p-switch',
3388 on: {
3389 change: function (e) {
3390 x.toggle('eatAnimation')
3391 }
3392 },
3393 model: {
3394 value: x['eatAnimation'],
3395 callback: function (e) {
3396 x['eatAnimation'] = e
3397 },
3398 expression: "eatAnimation"
3399 }
3400 }, [x._v('Eat Animation')]), x._v(" "), t("p-check", {
3401 staticClass: 'p-switch',
3402 on: {
3403 change: function (e) {
3404 x['toggle']('showChat')
3405 }
3406 },
3407 model: {
3408 value: x['showChat'],
3409 callback: function (e) {
3410 x['showChat'] = e
3411 },
3412 expression: 'showChat'
3413 }
3414 }, [x._v('Show Chat')]), x._v(" "), t('p-check', {
3415 staticClass: 'p-switch',
3416 on: {
3417 change: function (e) {
3418 x['toggle']('minimapEnabled')
3419 }
3420 },
3421 model: {
3422 value: x['minimapEnabled'],
3423 callback: function (e) {
3424 x['minimapEnabled'] = e
3425 },
3426 expression: 'minimapEnabled'
3427 }
3428 }, [x._v('Show Minimap')]), x._v(" "), t('p-check', {
3429 staticClass: "p-switch",
3430 on: {
3431 change: function (e) {
3432 x['toggle']('minimapLocations')
3433 }
3434 },
3435 model: {
3436 value: x['minimapLocations'],
3437 callback: function (e) {
3438 x['minimapLocations'] = e
3439 },
3440 expression: "minimapLocations"
3441 }
3442 }, [x._v('Show Minimap Locations')]), x._v(" "), t('div', [x._v(' Draw Delay: ' + x._s(x['drawDelay']) + ' '), t('input', {
3443 staticClass: 'slider draw-delay',
3444 attrs: {
3445 type: 'range',
3446 min: "60",
3447 max: '200',
3448 step: "5"
3449 },
3450 domProps: {
3451 value: x.drawDelay
3452 },
3453 on: {
3454 input: function (e) {
3455 x.drawDelayChange(e)
3456 }
3457 }
3458 })]), x._v(" "), t("div", [x._v(' Camera Movement Speed: ' + x._s(x['cameraSpeed']) + ' '), t('input', {
3459 staticClass: "slider",
3460 attrs: {
3461 type: 'range',
3462 min: '0.1',
3463 max: "1",
3464 step: '0.01'
3465 },
3466 domProps: {
3467 value: x['cameraSpeed']
3468 },
3469 on: {
3470 input: function (e) {
3471 x.cameraSpeedChange(e)
3472 }
3473 }
3474 })]), x._v(" "), t('div', [x._v("\r\n Camera Zooming Speed: " + x._s(x['cameraZoomSpeed']) + ' '), t("input", {
3475 staticClass: 'slider',
3476 attrs: {
3477 type: 'range',
3478 min: "1",
3479 max: "20",
3480 step: "1"
3481 },
3482 domProps: {
3483 value: x.cameraZoomSpeed
3484 },
3485 on: {
3486 input: function (e) {
3487 x['cameraZoomSpeedChange'](e)
3488 }
3489 }
3490 })]), x._v(" "), t("div", {
3491 staticStyle: {
3492 margin: "0"
3493 }
3494 }, [x._v(' Version Hash: ' + x._s(x.clientHash) + ' ')])], 1)
3495 };
3496 w._withStripped = !0;
3497 var A = t(1),
3498 C = t(5),
3499 k = t(3),
3500 I = t(142),
3501 S = ["doubleResolution", "useWebGL"],
3502 B = PIXI['utils']['isWebGLSupported'](),
3503 L = B && C['useWebGL'],
3504 M = {
3505 data: () => ({
3506 clientHash: 'cf23',
3507 isWebGLSupported: B,
3508 showChat: C['showChat'],
3509 drawDelay: C.drawDelay,
3510 skinsEnabled: C['skinsEnabled'],
3511 namesEnabled: C.namesEnabled,
3512 showMass: C['showMass'],
3513 shortMass: C.shortMass,
3514 foodVisible: C['foodVisible'],
3515 spawnTransparency: C['spawnTransparency'],
3516 useWebGL: L,
3517 eatAnimation: C['eatAnimation'],
3518 showLocations: C['showLocations'],
3519 cameraSpeed: C['cameraMoveSmoothing'],
3520 cameraZoomSpeed: C.cameraZoomSpeed,
3521 doubleResolution: C.doubleResolution,
3522 showBackgroundImage: C['showBackgroundImage'],
3523 backgroundColor: C['backgroundColor'],
3524 backgroundImageUrl: C['backgroundImageUrl'],
3525 backgroundImageRepeat: C['backgroundImageRepeat'],
3526 backgroundImageOpacity: C.backgroundImageOpacity,
3527 backgroundDefaultIfUnequal: C.backgroundDefaultIfUnequal,
3528 minimapEnabled: C.minimapEnabled,
3529 minimapLocations: C['minimapLocations'],
3530 autoZoom: C.autoZoom
3531 }),
3532 methods: {
3533 toggle: function (x) {
3534 var e = this[x];
3535 if (C.set(x, e))
3536 if (S['includes'](x)) k.confirm("Refresh page to activate changes?", () => {
3537 setTimeout(() => {
3538 location.reload()
3539 }, 500)
3540 });
3541 else if ("backgroundColor" !== x)
3542 if (x !== 'minimapLocations') {
3543 if (A['running']) switch (x) {
3544 case 'skinsEnabled':
3545 A['playerManager'].onSkinsChanged(e);
3546 break;
3547 case 'foodVisible':
3548 A['scene']['food']['visible'] = e;
3549 break;
3550 case 'showBackgroundImage':
3551 A.scene.toggleBackgroundImage(e);
3552 break;
3553 case 'backgroundImageUrl':
3554 A['scene']['setBackgroundImage'](e, C['backgroundImageRepeat']);
3555 break;
3556 case 'backgroundImageRepeat':
3557 A['scene']['setBackgroundImage'](C['backgroundImageUrl'], e);
3558 break;
3559 case 'backgroundDefaultIfUnequal':
3560 A['scene'].setBackgroundImage(C['backgroundImageUrl'], C['backgroundImageRepeat']);
3561 break;
3562 case 'minimapEnabled':
3563 e ? A['events']['$emit']('minimap-show') : A['events']['$emit']("minimap-hide");
3564 break;
3565 case 'showChat':
3566 A['events']['$emit']('chat-visible', e)
3567 }
3568 } else A['events']['$emit']("minimap-show-locations", e);
3569 else {
3570 var t = PIXI['utils']['string2hex'](e);
3571 A.renderer['backgroundColor'] = t
3572 }
3573 },
3574 drawDelayChange: function (x) {
3575 this.drawDelay = x.target.valueAsNumber, C.set('drawDelay', this['drawDelay'])
3576 },
3577 cameraSpeedChange: function (x) {
3578 this['cameraSpeed'] = x['target'].valueAsNumber, C['set']('cameraMoveSmoothing', this.cameraSpeed)
3579 },
3580 cameraZoomSpeedChange: function (x) {
3581 this.cameraZoomSpeed = x['target']['valueAsNumber'], C.set("cameraZoomSpeed", this['cameraZoomSpeed'])
3582 },
3583 backgroundOpacityChange: function (x) {
3584 this.backgroundImageOpacity = x['target']['valueAsNumber'], C['set']('backgroundImageOpacity', this.backgroundImageOpacity), A['scene'] && A['scene']['backgroundSprite'] && (A['scene']['backgroundSprite']['alpha'] = this['backgroundImageOpacity'])
3585 }
3586 },
3587 created: function () {
3588 var x = 'backgroundDefaultIfUnequal';
3589 A['running'] && A['border']['width'] !== A.border.height && !I['isSeen'](x) && (k['instance'].fire({
3590 html: "Custom backgrounds might look stretched on this gamemode.<br>To enable them, turn off setting <i>Use Default on Unequal Maps.</i>",
3591 confirmButtonText: "OK"
3592 }), I['setSeen'](x))
3593 }
3594 },
3595 P = (t(143), Object(v.a)(M, w, [], !1, null, null, null));
3596 P['options']['__file'] = 'src/components/settings.vue';
3597 var E = P.exports,
3598 T = function () {
3599 var x = this,
3600 e = x['$createElement'],
3601 t = x['_self']._c || e;
3602 return t('div', {
3603 attrs: {
3604 id: 'hotkey-container'
3605 }
3606 }, [t('div', {
3607 staticClass: 'hotkeys'
3608 }, x._l(x['availableHotkeys'], function (e, a) {
3609 return t('div', {
3610 key: a,
3611 staticClass: 'row'
3612 }, [t("span", {
3613 staticClass: 'action'
3614 }, [x._v(x._s(a))]), x._v(" "), t('span', {
3615 staticClass: "bind",
3616 attrs: {
3617 tabindex: "0"
3618 },
3619 on: {
3620 mousedown: function (t) {
3621 x['onMouseDown'](t, e)
3622 },
3623 keydown: function (t) {
3624 t['preventDefault'](), x.onKeyDown(t, e)
3625 }
3626 }
3627 }, [x._v(' ' + x._s(x['hotkeys'][e]) + ' ')])])
3628 })), x._v(" "), t("div", {
3629 staticClass: "footer"
3630 }, [t('span', {
3631 staticClass: 'reset-button2',
3632 on: {
3633 click: x['onResetClick']
3634 }
3635 }, [t("i", {
3636 staticClass: 'fa fa-undo'
3637 }), x._v(" Reset\r\n ")])])])
3638 };
3639 T._withStripped = !0;
3640 var R = t(44),
3641 N = t(3);
3642 var H = {
3643 data: () => ({
3644 availableHotkeys: function () {
3645 var x = {
3646 Feed: "feed",
3647 "Feed Macro": 'feedMacro',
3648 Split: 'split',
3649 "Double Split": 'splitx2',
3650 "Triple Split": 'splitx3',
3651 "Split Max": 'splitMax',
3652 "Diagonal Linesplit": 'linesplit',
3653 "Lock Linesplit": 'lockLinesplit',
3654 "Stop Movement": 'stopMovement',
3655 Respawn: "respawn",
3656 "Toggle Skins": 'toggleSkins',
3657 "Toggle Names": "toggleNames",
3658 "Toggle Food": 'toggleFood',
3659 "Toggle Mass": "toggleMass",
3660 "Spectate Lock": 'spectateLock',
3661 "Save Replay": 'saveReplay',
3662 "Chat Toggle": 'toggleChat',
3663 "Zoom Level 1": 'zoomLevel1',
3664 "Zoom Level 2": "zoomLevel2",
3665 "Zoom Level 3": 'zoomLevel3',
3666 "Zoom Level 4": "zoomLevel4",
3667 "Zoom Level 5": 'zoomLevel5'
3668 };
3669 return localStorage.adminMode && (x['Select Player'] = "selectPlayer"), x
3670 }(),
3671 hotkeys: R['get']()
3672 }),
3673 methods: {
3674 onResetClick: function () {
3675 N['confirm']("Are you sure you want to reset all binds?", () => {
3676 this.hotkeys = R['reset']()
3677 })
3678 },
3679 onMouseDown: function (x, e) {
3680 if (x.target === document['activeElement']) {
3681 var t = 'MOUSE' + x['button'];
3682 R.set(e, t) && (x['preventDefault'](), x['target']['blur']())
3683 }
3684 },
3685 onKeyDown: function (x, e) {
3686 var t = R['convertKey'](x.key);
3687 t !== 'ESCAPE' && t !== 'ENTER' ? R['set'](e, t) && x['target']['blur']() : x['target'].blur()
3688 }
3689 },
3690 filters: {
3691 hotkeyText: function (x) {
3692 var e = {
3693 32: "SPACE",
3694 MOUSE0: 'MOUSE0'
3695 } [x];
3696 return e || String['fromCharCode'](x)
3697 }
3698 }
3699 },
3700 O = (t(145), Object(v.a)(H, T, [], !1, null, null, null));
3701 O['options']['__file'] = 'src/components/hotkeys.vue';
3702 var D = O['exports'],
3703 U = function () {
3704 var x = this,
3705 e = x['$createElement'],
3706 t = x._self._c || e;
3707 return t('div', {
3708 staticClass: 'container'
3709 }, [t("input", {
3710 ref: 'file',
3711 staticStyle: {
3712 display: 'none'
3713 },
3714 attrs: {
3715 type: "file",
3716 accept: ".vanis"
3717 },
3718 on: {
3719 change: function (e) {
3720 x['onFile'](e)
3721 }
3722 }
3723 }), x._v(" "), t('div', {
3724 staticClass: "replays"
3725 }, [t('div', {
3726 staticClass: 'import-button',
3727 on: {
3728 click: function (e) {
3729 x['$refs']['file'].click()
3730 }
3731 }
3732 }, [x._v("+")]), x._v(" "), !x['replays'].length && x['loaded'] ? t("div", {
3733 staticClass: 'notification'
3734 }, [t("div", [x._v('Press ' + x._s(x['hotkey']) + ' in game to save last 10 seconds of gameplay.')]), x._v(" "), t("div", [x._v('Click plus to import existing replays.')]), x._v(" "), t("div", {
3735 staticStyle: {
3736 color: 'red',
3737 "font-weight": 'bold'
3738 }
3739 }, [x._v('Replays are saved in browser memory for now!')])]) : x._e(), x._v(" "), x._l(x['replays'], function (x, e) {
3740 return t('replay-item', {
3741 key: e,
3742 attrs: {
3743 replay: x
3744 }
3745 })
3746 })], 2)])
3747 };
3748 U['_withStripped'] = !0;
3749 var X = t(68),
3750 Q = t(1),
3751 V = t(44),
3752 j = t(3),
3753 z = Q['replay']['database'],
3754 Z = {
3755 data: () => ({
3756 loaded: !1,
3757 replays: [],
3758 hotkey: V['get']()['saveReplay']
3759 }),
3760 components: {
3761 replayItem: X['default']
3762 },
3763 methods: {
3764 getReplays() {
3765 var x = [];
3766 z['iterate']((e, t) => {
3767 var a = {
3768 name: t,
3769 data: e
3770 };
3771 e['startsWith']('REPLAY') ? a['image'] = e.split("|")[2] : a['image'] = 'https://vanis.io/img/replay-placeholder.png', x['push'](a)
3772 }, () => {
3773 this['replays'] = x['reverse'](), this.loaded = !0
3774 })
3775 },
3776 onFile(x) {
3777 var e = x['target'].files[0];
3778 if (x['target'] && (x['target']['value'] = null), e)
3779 if (e['name']['endsWith']('.vanis')) {
3780 var t = new FileReader;
3781 t['onload'] = (x => {
3782 var t = x['target']['result'],
3783 a = e['name']['replace'](/\.vanis$/, "");
3784 z['getItem'](a)
3785 .then(x => {
3786 x ? j['alert']('Replay with same name already exists!') : z['setItem'](a, t, this.getReplays)
3787 })['catch'](x => {
3788 j['alert']('Error importing replay file')
3789 })
3790 }), t['readAsText'](e)
3791 } else j['alert']('Invalid file format!')
3792 }
3793 },
3794 created() {
3795 Q['events'].$on("replay-added", this['getReplays']), Q['events'].$on('replay-removed', this['getReplays']), this['getReplays']()
3796 },
3797 beforeDestroy() {
3798 Q['events']['$off']('replay-added', this['getReplays']), Q['events']['$off']('replay-removed', this['getReplays'])
3799 }
3800 },
3801 F = (t(150), Object(v.a)(Z, U, [], !1, null, '4a996e52', null));
3802 F['options'].__file = 'src/components/replays3.vue';
3803 var Y = F['exports'],
3804 G = (t(11), t(1)),
3805 W = t(3),
3806 K = {
3807 components: {
3808 modal: y['default'],
3809 settings: E,
3810 hotkeys: D,
3811 replays3: Y
3812 },
3813 data: () => ({
3814 activeModal: "",
3815 showSettings: !1,
3816 showHotkeys: !1,
3817 gameState: G['state'],
3818 nickname: typeof localStorage['nickname'] === 'string' ? localStorage['nickname'] : "",
3819 teamtag: localStorage['teamtag'] || "",
3820 skinUrl: "string" == typeof localStorage.skinUrl ? localStorage['skinUrl'] : 'https://skins.vanis.io/s/vanis1'
3821 }),
3822 created: function () {
3823 this['getUserData'](), G.events['$on']('skinClick', x => {
3824 this['skinUrl'] = x
3825 })
3826 },
3827 methods: {
3828 openModal: function (x) {
3829 this.activeModal = x, this['$emit']('modal-open', !0)
3830 },
3831 closeModal: function () {
3832 this.activeModal = "", this.$emit('modal-open', !1)
3833 },
3834 login: function () {
3835 var x = "https://vanis.io/api/login/discord";
3836 window.open(x, 'discordLogin', 'width=400, height=500');
3837 console['log'](x)
3838 },
3839 getUserData: function () {},
3840 play: function (x) {
3841 x.isTrusted && (this['gameState'].isAlive || G.joinGame(), G['showMenu'](!1))
3842 },
3843 spectate: function () {
3844 this['gameState']['isAlive'] ? console['warn']('Cannot spectate, player is still alive') : (G.actions['spectate'](), G['showMenu'](!1))
3845 },
3846 skinLoaded: function () {
3847 var x = this['$refs'].skin;
3848 x && (x['naturalWidth'] > 2048 || x.naturalHeight > 2048) && W['instance'].fire({
3849 html: "Your skin images size is too large.<br>Preferred skin size is 512x512px<br>Size is limited to 2048x2048px.",
3850 confirmButtonText: "OK"
3851 })
3852 },
3853 onSkinUrlChange() {
3854 if (this['skinUrl']['length'] > 80) return this['skinUrl'] = "", void W['alert']("Skin url too long.");
3855 G['events']['$emit']('skinUrlChanged', this['skinUrl'])
3856 },
3857 onTeamTagChange() {
3858 localStorage['setItem']('teamtag', this.teamtag)
3859 },
3860 onNicknameChange() {
3861 localStorage['setItem']("nickname", this['nickname'])
3862 }
3863 }
3864 },
3865 J = (t(152), Object(v.a)(K, g, m, !1, null, '1bcde71e', null));
3866 J['options']['__file'] = 'src/components/player.vue';
3867 var q = J['exports'],
3868 $ = function () {
3869 var x = this,
3870 e = x['$createElement'],
3871 t = x['_self']._c || e;
3872 return t('div', {
3873 staticStyle: {
3874 padding: '17px'
3875 }
3876 }, [x['account'] ? x._e() : t('div', [t('div', {
3877 staticStyle: {
3878 "margin-top": "6px",
3879 "margin-bottom": '10px'
3880 }
3881 }, [x._v("Login to your account with Discord to save your in-game progress.")]), x._v(" "), t('div', {
3882 staticClass: 'discord',
3883 on: {
3884 click: function (e) {
3885 x.openDiscordLogin()
3886 }
3887 }
3888 }, [x['loading'] ? [x['loading'] ? t("i", {
3889 staticClass: 'fas fa-sync fa-spin',
3890 staticStyle: {
3891 "margin-right": '5px'
3892 }
3893 }) : x._e(), x._v(' Loading ')] : [t("i", {
3894 staticClass: 'fab fa-discord'
3895 }), x._v(' Login with Discord ')]], 2)]), x._v(" "), x['account'] ? t("div", {
3896 staticClass: "account"
3897 }, [t('div', {
3898 staticStyle: {
3899 "margin-bottom": '7px'
3900 }
3901 }, [t('img', {
3902 staticClass: 'avatar',
3903 attrs: {
3904 src: x['account']['avatarUrl']
3905 }
3906 }), x._v(" "), t('div', {
3907 staticClass: 'player-info'
3908 }, [t("div", {
3909 attrs: {
3910 id: 'account-name'
3911 }
3912 }, [x._v(x._s(x['account'].discordName))]), x._v(" "), t('div', [x._v('Level ' + x._s(x['account'].level))]), x._v(" "), t('div', [x._v(x._s(x['account'].xp) + ' XP')])])]), x._v(" "), t('div', {
3913 staticStyle: {
3914 position: 'relative'
3915 }
3916 }, [t('progress-bar', {
3917 staticClass: "xp-progress",
3918 attrs: {
3919 progress: x['progress']
3920 }
3921 }), x._v(" "), t('div', {
3922 staticClass: 'xp-data'
3923 }, [t('div', {
3924 staticStyle: {
3925 flex: "1",
3926 "margin-left": "8px"
3927 }
3928 }, [x._v(x._s(x['xpAtCurrentLevel']))]), x._v(" "), t("div", {
3929 staticStyle: {
3930 "margin-right": '7px'
3931 }
3932 }, [x._v(x._s(x['xpAtNextLevel']))])])], 1), x._v(" "), t('div', {
3933 staticClass: 'logout',
3934 on: {
3935 click: function (e) {
3936 x['logout']()
3937 }
3938 }
3939 }, [t("i", {
3940 staticClass: "fas fa-sign-out-alt"
3941 }), x._v(" Logout\r\n ")])]) : x._e()])
3942 };
3943 $._withStripped = !0;
3944 var xx = function () {
3945 var x = this['$createElement'],
3946 e = this['_self']._c || x;
3947 return e('div', {
3948 staticClass: "progress progress-striped"
3949 }, [e('div', {
3950 staticClass: "progress-bar",
3951 style: {
3952 width: 100 * this['progress'] + "%"
3953 }
3954 })])
3955 };
3956 xx._withStripped = !0;
3957 var ex = {
3958 props: ["progress"]
3959 },
3960 tx = (t(154), Object(v.a)(ex, xx, [], !1, null, '4e838c74', null));
3961 tx['options']['__file'] = "src/components/progressBar.vue";
3962 var ax = tx['exports'],
3963 _x = t(156),
3964 nx = (t(11), t(3)),
3965 ix = t(1),
3966 sx = t(157),
3967 rx = {
3968 components: {
3969 progressBar: ax
3970 },
3971 data: () => ({
3972 account: null,
3973 progress: 0,
3974 xpAtCurrentLevel: 0,
3975 xpAtNextLevel: 0,
3976 loading: !1
3977 }),
3978 created: function () {
3979 ix['events']['$on']('xp-update', this['onXpUpdate']), _x['vanisToken'] && this['loadUserData'](), this['listenForToken']()
3980 },
3981 beforeDestroy() {
3982 ix['events'].$off('xp-update', this['onXpUpdate'])
3983 },
3984 methods: {
3985 listenForToken() {
3986 window['addEventListener']('message', x => {
3987 var e = x['data']['vanis_token'];
3988 e && (this['onLoggedIn'](e), x['source']['postMessage']('loggedIn', x['origin']))
3989 })
3990 },
3991 async loadUserData() {
3992 this['loading'] = !0;
3993 try {
3994 var x = await _x.get('/me')
3995 } catch (x) {
3996 this['loading'] = !1;
3997 var e = x['response'];
3998 return void(e && (console.error("Account:", e['data']), 401 === e.status && _x.clearToken()))
3999 }
4000 this['setAccountData'](x), this['updateProgress'](this['account'].xp, this['account']['level']), this['loading'] = !1
4001 },
4002 async logout() {
4003 try {
4004 await _x['get']('/me/logout')
4005 } catch (e) {
4006 var x = e.response;
4007 x && 401 !== x['status'] && nx['alert']("Error: " + e.message)
4008 }
4009 _x.clearToken(), this['account'] = null
4010 },
4011 getAvatarUrl: (x, e) => e ? 'https://cdn.discordapp.com/avatars/' + x + "/" + e + ".png" : 'https://cdn.discordapp.com/embed/avatars/0.png',
4012 setAccountData(x) {
4013 x['avatarUrl'] = this['getAvatarUrl'](x['discordId'], x['discordAvatar']), this.account = x
4014 },
4015 onXpUpdate: function (x) {
4016 if (this.account) {
4017 var e = sx['getLevel'](x);
4018 this['account'].xp = x, this.account['level'] = e, this.updateProgress(x, e)
4019 }
4020 },
4021 updateProgress(x, e) {
4022 this.xpAtCurrentLevel = sx['getXp'](e), this['xpAtNextLevel'] = sx['getXp'](e + 1), this['progress'] = (x - this['xpAtCurrentLevel']) / (this['xpAtNextLevel'] - this['xpAtCurrentLevel'])
4023 },
4024 openDiscordLogin: function () {
4025 var x = _x['url'] + '/login/discord';
4026 window['open'](x, "", 'width=400, height=500')
4027 },
4028 onLoggedIn(x) {
4029 console.assert(x, 'Vanis token empty or undefined'), _x['setToken'](x), this.loadUserData()
4030 }
4031 }
4032 },
4033 ox = (t(158), Object(v.a)(rx, $, [], !1, null, "661435cd", null));
4034 ox['options']['__file'] = 'src/components/account.vue';
4035 var cx = ox['exports'],
4036 lx = function () {
4037 var x = this,
4038 e = x['$createElement'],
4039 t = x['_self']._c || e;
4040 return t('div', {
4041 staticClass: "fade",
4042 staticStyle: {
4043 padding: '16px'
4044 },
4045 attrs: {
4046 id: 'skins'
4047 }
4048 }, x._l(x.skins, function (e, a) {
4049 return t('img', {
4050 key: a,
4051 staticClass: 'skin',
4052 class: {
4053 selected: x['selectedSkinIndex'] === a
4054 },
4055 attrs: {
4056 src: e,
4057 alt: ""
4058 },
4059 on: {
4060 click: function (e) {
4061 x['selectSkin'](a)
4062 }
4063 }
4064 })
4065 }))
4066 };
4067 lx['_withStripped'] = !0;
4068 var dx = t(1),
4069 fx = {
4070 data: () => ({
4071 selectedSkinIndex: 0,
4072 skins: []
4073 }),
4074 created: function () {
4075 dx['events'].$on('skinUrlChanged', this.onSkinUrlChanged['bind'](this)), this['skins'] = this.loadSkins() || this['getDefaultSkins']();
4076 var x = Number(localStorage.selectedSkinIndex) || 0;
4077 this['selectSkin'](x)
4078 },
4079 methods: {
4080 loadSkins() {
4081 var x = localStorage['skins'];
4082 if (!x) return !1;
4083 try {
4084 var e = JSON['parse'](x)
4085 } catch (x) {
4086 return console['error']("Error parsing saved skins", x['message']), !1
4087 }
4088 return Array['isArray'](e) ? e : (console['error']('localstorage.skins is not an array!'), !1)
4089 },
4090 getDefaultSkins() {
4091 for (var x = [], e = 0; e < 9; e++) x['push']('https://skins.vanis.io/s/vanis1');
4092 return x
4093 },
4094 onSkinUrlChanged(x) {
4095 this['$set'](this['skins'], this['selectedSkinIndex'], x), this['saveSkins']()
4096 },
4097 selectSkin(x) {
4098 this['selectedSkinIndex'] = x, localStorage['selectedSkinIndex'] = x;
4099 var e = this['skins'][x];
4100 dx['events']['$emit']('skinClick', e)
4101 },
4102 saveSkins() {
4103 localStorage['skins'] = JSON['stringify'](this['skins'])
4104 }
4105 }
4106 },
4107 ux = (t(160), Object(v.a)(fx, lx, [], !1, null, "1c614894", null));
4108 ux['options']['__file'] = 'src/components/skins.vue';
4109 var hx = ux['exports'],
4110 vx = t(1),
4111 px = {
4112 data: () => ({
4113 isModalOpen: !1,
4114 selectedTab: 'servers',
4115 gameState: vx['state']
4116 }),
4117 methods: {
4118 onModalChange: function (x) {
4119 this['isModalOpen'] = x
4120 }
4121 },
4122 components: {
4123 servers: b,
4124 playerContainer: q,
4125 account: cx,
4126 skins: hx
4127 }
4128 },
4129 bx = (t(162), Object(v.a)(px, s, [], !1, null, "ebed1606", null));
4130 bx['options']['__file'] = "src/components/main-container.vue";
4131 var gx = bx['exports'],
4132 mx = function () {
4133 var x = this['$createElement'];
4134 this._self._c;
4135 return this._m(0)
4136 },
4137 yx = [function () {
4138 var x = this.$createElement,
4139 e = this['_self']._c || x;
4140 return e("div", {
4141 staticClass: 'social-container'
4142 }, [e("a", {
4143 staticClass: 'discord-link',
4144 attrs: {
4145 href: 'https://vanis.io/discord',
4146 target: '_blank'
4147 }
4148 }, [e("i", {
4149 staticClass: "fab fa-discord"
4150 }), this._v(' Discord ')]), this._v(" "), e("a", {
4151 staticClass: "youtube-link",
4152 attrs: {
4153 href: "https://www.youtube.com/channel/UCuWJ0czBKaNcQ5MByoimLBw",
4154 target: '_blank'
4155 }
4156 }, [e("i", {
4157 staticClass: 'fab fa-youtube'
4158 }), this._v(' Youtube ')])])
4159 }];
4160 mx['_withStripped'] = !0;
4161 t(164);
4162 var wx = Object(v.a)({}, mx, yx, !1, null, "4d0670e9", null);
4163 wx['options']['__file'] = "src/components/social-links.vue";
4164 var Ax = wx['exports'],
4165 Cx = function () {
4166 var x = this.$createElement;
4167 this['_self']._c;
4168 return this._m(0)
4169 },
4170 kx = [function () {
4171 var x = this['$createElement'],
4172 e = this['_self']._c || x;
4173 return e('div', {
4174 staticClass: "container"
4175 }, [e("a", {
4176 attrs: {
4177 href: 'privacy.html',
4178 target: '_blank'
4179 }
4180 }, [this._v('Privacy Policy')]), this._v(" "), e("span", {
4181 staticClass: 'line'
4182 }, [this._v("|")]), this._v(" "), e("a", {
4183 attrs: {
4184 href: "tos.html",
4185 target: '_blank'
4186 }
4187 }, [this._v("Terms of Service")]), this._v(" "), e('span', {
4188 staticClass: 'line'
4189 }, [this._v("|")]), this._v(" "), e("a", {
4190 attrs: {
4191 href: '/contact.html',
4192 target: "_blank"
4193 }
4194 }, [this._v('Contact Us')])])
4195 }];
4196 Cx['_withStripped'] = !0;
4197 var Ix = {
4198 data() {}
4199 },
4200 Sx = (t(166), Object(v.a)(Ix, Cx, kx, !1, null, '6843da33', null));
4201 Sx.options.__file = 'src/components/privacy-tos.vue';
4202 var Bx = Sx['exports'],
4203 Lx = function () {
4204 var x = this['$createElement'],
4205 e = this._self._c || x;
4206 return this['show'] ? e('div', {
4207 staticClass: "context-menu fade",
4208 style: {
4209 top: this.y + "px",
4210 left: this.x + "px"
4211 }
4212 }, [e('div', {
4213 staticClass: "player-name"
4214 }, [this._v(this._s(this['playerName']))]), this._v(" "), e("div", [this._v('Block')]), this._v(" "), e('div', {
4215 on: {
4216 click: this.hideName
4217 }
4218 }, [this._v('Hide Name')]), this._v(" "), e('div', {
4219 on: {
4220 click: this['hideSkin']
4221 }
4222 }, [this._v('Hide Skin')]), this._v(" "), e('div', [this._v("Kick")]), this._v(" "), e('div', [this._v("Ban")]), this._v(" "), e('div', [this._v('Mute')])]) : this._e()
4223 };
4224 Lx['_withStripped'] = !0;
4225 t(1);
4226 var Mx = {
4227 data: () => ({
4228 show: !1,
4229 playerName: "",
4230 x: 100,
4231 y: 55
4232 }),
4233 methods: {
4234 open: function (x, e) {
4235 this.player = e, this['playerName'] = e.name, this.x = x['clientX'], this.y = x['clientY'], this['show'] = !0, document['addEventListener']('click', x => {
4236 this['show'] = !1
4237 }, {
4238 once: !0
4239 })
4240 },
4241 hideName: function () {
4242 this['player']['setName'](""), this['player']['render']()
4243 },
4244 hideSkin: function () {
4245 this.player['setSkin'](""), this['player'].render()
4246 }
4247 },
4248 created() {}
4249 },
4250 Px = (t(168), Object(v.a)(Mx, Lx, [], !1, null, '4dbee04d', null));
4251 Px['options']['__file'] = 'src/components/context-menu.vue';
4252 var Ex = Px.exports,
4253 Tx = function () {
4254 var x = this['$createElement'],
4255 e = this._self._c || x;
4256 return e('div', {
4257 attrs: {
4258 id: "hud"
4259 }
4260 }, [e('stats'), this._v(" "), e("chatbox"), this._v(" "), e('leaderboard'), this._v(" "), e('minimap')], 1)
4261 };
4262 Tx['_withStripped'] = !0;
4263 var Rx = function () {
4264 var x = this['$createElement'],
4265 e = this._self._c || x;
4266 return e('div', {
4267 directives: [{
4268 name: 'show',
4269 rawName: 'v-show',
4270 value: this['visible'],
4271 expression: 'visible'
4272 }],
4273 staticClass: 'stats'
4274 }, [e('div', [this._v('FPS: ' + this._s(this.fps || "-"))]), this._v(" "), e('div', [this._v("Ping: " + this._s(this['ping'] || "-"))]), this._v(" "), e("div", {
4275 directives: [{
4276 name: 'show',
4277 rawName: 'v-show',
4278 value: this['mass'],
4279 expression: "mass"
4280 }]
4281 }, [this._v("Mass: " + this._s(this.mass))])])
4282 };
4283 Rx['_withStripped'] = !0;
4284 var Nx = t(1),
4285 Hx = {
4286 data: () => ({
4287 visible: !1,
4288 ping: 0,
4289 fps: 0,
4290 mass: 0
4291 }),
4292 created() {
4293 Nx['events']['$on']('stats-visible', x => this['visible'] = x), Nx.events.$on('stats-changed', x => {
4294 this['ping'] = x['ping'] || 0, this['fps'] = x.fps || 0, x['mass'] ? Nx.settings.shortMass ? this.mass = Nx['getShortMass'](x.mass) : this['mass'] = x['mass'] : this['mass'] = 0
4295 })
4296 }
4297 },
4298 Ox = (t(170), Object(v.a)(Hx, Rx, [], !1, null, '0875ad82', null));
4299 Ox['options']['__file'] = 'src/components/stats.vue';
4300 var Dx = Ox.exports,
4301 Ux = function () {
4302 var x = this,
4303 e = x.$createElement,
4304 t = x['_self']._c || e;
4305 return t('div', {
4306 directives: [{
4307 name: "show",
4308 rawName: "v-show",
4309 value: x['visible'],
4310 expression: 'visible'
4311 }],
4312 attrs: {
4313 id: 'chatbox'
4314 }
4315 }, [t('div', {
4316 ref: 'list',
4317 attrs: {
4318 id: "message-list"
4319 },
4320 on: {
4321 click: function (e) {
4322 x.onChatClick(e)
4323 }
4324 }
4325 }, x._l(x['messages'], function (e, a) {
4326 return t('div', {
4327 key: a,
4328 staticClass: 'message-row'
4329 }, [e['from'] ? t("span", {
4330 staticClass: 'message-from',
4331 style: {
4332 color: e['fromColor']
4333 },
4334 attrs: {
4335 "data-pid": e['pid']
4336 }
4337 }, [x._v(x._s(e.from) + ":")]) : x._e(), x._v(" "), t('span', {
4338 staticClass: 'message-text',
4339 style: {
4340 color: e['textColor']
4341 }
4342 }, [x._v(x._s(e.text))])])
4343 })), x._v(" "), t('input', {
4344 directives: [{
4345 name: "model",
4346 rawName: "v-model",
4347 value: x['inputText'],
4348 expression: 'inputText'
4349 }],
4350 ref: 'input',
4351 attrs: {
4352 id: "chatbox-input",
4353 type: "text",
4354 maxlength: '100',
4355 placeholder: 'Type your message here'
4356 },
4357 domProps: {
4358 value: x.inputText
4359 },
4360 on: {
4361 keydown: function (e) {
4362 if (!('button' in e) && x._k(e['keyCode'], 'enter', 13, e['key'], 'Enter')) return null;
4363 x['sendChatMessage']()
4364 },
4365 input: function (e) {
4366 e['target'].composing || (x['inputText'] = e['target']['value'])
4367 }
4368 }
4369 })])
4370 };
4371 Ux['_withStripped'] = !0;
4372 var Xx = t(1),
4373 Qx = {
4374 data: () => ({
4375 visible: !1,
4376 inputText: "",
4377 messages: []
4378 }),
4379 methods: {
4380 onChatClick(x) {
4381 var e = x['target']['dataset']['pid'];
4382 e && (Xx.selectedPlayer = e)
4383 },
4384 sendChatMessage() {
4385 var x = this['inputText']['trim']();
4386 x && (Xx.selectedPlayer && (x = x['replace'](/\$pid/g, Xx['selectedPlayer'])), Xx['sendChatMessage'](x), this.inputText = ""), Xx['renderer']['view'].focus()
4387 },
4388 onChatMessage(x) {
4389 var e = '#ffffff';
4390 x['fromColor'] = x.fromColor || e, x['textColor'] = x['textColor'] || e, this['messages']['push'](x), this['messages']['length'] > 30 && this['messages'].shift(), this.$nextTick(this['scrollBottom'])
4391 },
4392 onVisibilityChange(x) {
4393 this.visible = x, x && this['$nextTick'](this['scrollBottom'])
4394 },
4395 focusChat() {
4396 this['visible'] && this['$refs']['input']['focus']()
4397 },
4398 clearChat() {
4399 this.messages = []
4400 },
4401 scrollBottom() {
4402 var x = this['$refs'].list;
4403 x['scrollTop'] = x['scrollHeight']
4404 }
4405 },
4406 created() {
4407 Xx['events']['$on']('chat-visible', this['onVisibilityChange']), Xx['events'].$on('chat-focus', this.focusChat), Xx['events']['$on']('chat-message', this.onChatMessage), Xx['events']['$on']('chat-clear', this.clearChat)
4408 }
4409 },
4410 Vx = (t(172), Object(v.a)(Qx, Ux, [], !1, null, "4900a413", null));
4411 Vx['options']['__file'] = 'src/components/chatbox.vue';
4412 var jx = Vx['exports'],
4413 zx = function () {
4414 var x = this,
4415 e = x['$createElement'],
4416 t = x['_self']._c || e;
4417 return t('div', {
4418 directives: [{
4419 name: "show",
4420 rawName: "v-show",
4421 value: x.visible,
4422 expression: 'visible'
4423 }],
4424 attrs: {
4425 id: 'leaderboard'
4426 }
4427 }, [t('div', {
4428 staticClass: "leaderboard-title"
4429 }, [x._v('Leaderboard')]), x._v(" "), t('div', x._l(x.leaderboard, function (e, a) {
4430 return t('div', {
4431 key: a,
4432 staticClass: 'leaderboard-label',
4433 style: {
4434 color: e['color']
4435 }
4436 }, [x._v(x._s(a + 1) + ". " + x._s(e['text']))])
4437 }))])
4438 };
4439 zx._withStripped = !0;
4440 var Zx = t(1),
4441 Fx = (t(5), {
4442 data: () => ({
4443 visible: !1,
4444 leaderboard: []
4445 }),
4446 methods: {
4447 updateLeaderboard(x) {
4448 this['leaderboard'] = x
4449 },
4450 onLeaderboardShow() {
4451 this['visible'] || (Zx['events']['$on']('leaderboard-update', this['updateLeaderboard']), this['visible'] = !0)
4452 },
4453 onLeaderboardHide() {
4454 this.visible && (Zx['events'].$off('leaderboard-update', this['updateLeaderboard']), this['leaderboard'] = [], this.visible = !1)
4455 }
4456 },
4457 created() {
4458 Zx.events.$on('leaderboard-show', this['onLeaderboardShow']), Zx['events'].$on("leaderboard-hide", this.onLeaderboardHide)
4459 }
4460 }),
4461 Yx = (t(174), Object(v.a)(Fx, zx, [], !1, null, '8a0c31c6', null));
4462 Yx['options'].__file = 'src/components/leaderboard.vue';
4463 var Gx = Yx.exports,
4464 Wx = {
4465 components: {
4466 stats: Dx,
4467 chatbox: jx,
4468 minimap: t(69)['default'],
4469 leaderboard: Gx
4470 },
4471 data: () => ({})
4472 },
4473 Kx = (t(178), Object(v.a)(Wx, Tx, [], !1, null, '339660d2', null));
4474 Kx['options']['__file'] = 'src/components/hud.vue';
4475 var Jx = Kx['exports'],
4476 qx = function () {
4477 var x = this,
4478 e = x['$createElement'],
4479 t = x._self._c || e;
4480 return t('transition', {
4481 attrs: {
4482 name: "menu"
4483 }
4484 }, [t("div", {
4485 staticClass: 'container'
4486 }, [t("div", {
4487 staticClass: "fade-box box-1"
4488 }, [t('div', {
4489 staticStyle: {
4490 padding: '4px'
4491 }
4492 }, [x._v('Advertisement')]), x._v(" "), t('div', {
4493 staticStyle: {
4494 padding: '10px',
4495 "padding-top": '0px'
4496 }
4497 }, [t('div', {
4498 attrs: {
4499 id: 'vanis-io_300x250_2'
4500 }
4501 })])]), x._v(" "), x['stats'] ? t('div', {
4502 staticClass: 'fade-box',
4503 class: {
4504 scroll: x.isLoadingAd
4505 }
4506 }, [t("div", {
4507 staticStyle: {
4508 padding: "15px"
4509 }
4510 }, [t('div', [x._v('Time Alive: ' + x._s(x.timeAlive))]), x._v(" "), t('div', [x._v("Highscore: " + x._s(x.highscore))]), x._v(" "), t("div", [x._v('Players Eaten: ' + x._s(x['stats']['killCount']))]), x._v(" "), t('btn', {
4511 staticClass: 'continue',
4512 nativeOn: {
4513 click: function (e) {
4514 return x['onContinueClick'](e)
4515 }
4516 }
4517 }, [x._v('Continue')])], 1)]) : x._e()])])
4518 };
4519 qx['_withStripped'] = !0;
4520 var $x = t(1),
4521 xe = t(56),
4522 ee = {
4523 props: ["stats"],
4524 data: () => ({
4525 isLoadingAd: !1
4526 }),
4527 methods: {
4528 loadAd: function () {
4529 this['isLoadingAd'] = xe['refreshAd']('death-box')
4530 },
4531 onContinueClick: function () {
4532 $x.state['loadingAds'] = !1, $x['showDeathScreen'](!1), $x['showMenu'](!0)
4533 }
4534 },
4535 watch: {
4536 stats: function () {
4537 this['loadAd']()
4538 }
4539 },
4540 computed: {
4541 timeAlive: function () {
4542 var x = this.stats['timeAlive'];
4543 if (x < 60) return x + "s";
4544 var e = x % 60;
4545 return Math['floor'](x / 60) + 'min ' + e + "s"
4546 },
4547 highscore: function () {
4548 var x = this.stats['highscore'];
4549 return $x['getShortMass'](x)
4550 }
4551 }
4552 },
4553 te = (t(180), Object(v.a)(ee, qx, [], !1, null, '3249d726', null));
4554 te.options['__file'] = 'src/components/death-stats.vue';
4555 var ae = te['exports'],
4556 _e = function () {
4557 var x = this['$createElement'];
4558 return (this['_self']._c || x)('button', {
4559 staticClass: 'btn'
4560 }, [this._t('default', [this._v('Here should be something')])], 2)
4561 };
4562 _e['_withStripped'] = !0;
4563 var ne = {},
4564 ie = (t(182), Object(v.a)(ne, _e, [], !1, null, 'b0b10308', null));
4565 ie['options']['__file'] = "src/components/btn.vue";
4566 var se = ie['exports'],
4567 re = function () {
4568 var x = this,
4569 e = x['$createElement'],
4570 t = x._self._c || e;
4571 return x['show'] ? t('div', {
4572 class: {
4573 "auto-hide": x.autoHideReplayControls
4574 },
4575 attrs: {
4576 id: 'replay-controls'
4577 }
4578 }, [t('div', {
4579 staticStyle: {
4580 "text-align": 'right'
4581 }
4582 }, [t('div', [x._v('Opacity ' + x._s(x['cellOpacity']) + "%")]), x._v(" "), t('div', [t('input', {
4583 directives: [{
4584 name: "model",
4585 rawName: 'v-model',
4586 value: x['cellOpacity'],
4587 expression: 'cellOpacity'
4588 }],
4589 staticClass: 'replay-slider',
4590 staticStyle: {
4591 width: '105px',
4592 display: 'inline-block'
4593 },
4594 attrs: {
4595 id: 'replay-opacity-slider',
4596 type: 'range',
4597 min: "10",
4598 max: '100'
4599 },
4600 domProps: {
4601 value: x['cellOpacity']
4602 },
4603 on: {
4604 input: x['onCellOpacitySlide'],
4605 __r: function (e) {
4606 x['cellOpacity'] = e['target'].value
4607 }
4608 }
4609 })])]), x._v(" "), t('div', {
4610 staticStyle: {
4611 "margin-bottom": '5px',
4612 display: 'flex'
4613 }
4614 }, [t('div', {
4615 staticStyle: {
4616 flex: "1"
4617 }
4618 }, [x._v('Packet ' + x._s(x.replayIndex) + ' / ' + x._s(x['packetCount']))]), x._v(" "), t("div", {
4619 staticStyle: {
4620 "margin-right": '10px'
4621 }
4622 }, [t('input', {
4623 directives: [{
4624 name: 'model',
4625 rawName: 'v-model',
4626 value: x['autoHideReplayControls'],
4627 expression: 'autoHideReplayControls'
4628 }],
4629 attrs: {
4630 type: 'checkbox',
4631 id: 'replay-auto-hide-controls'
4632 },
4633 domProps: {
4634 checked: Array['isArray'](x['autoHideReplayControls']) ? x._i(x['autoHideReplayControls'], null) > -1 : x['autoHideReplayControls']
4635 },
4636 on: {
4637 change: [function (e) {
4638 var t = x['autoHideReplayControls'],
4639 a = e['target'],
4640 _ = !!a['checked'];
4641 if (Array['isArray'](t)) {
4642 var n = x._i(t, null);
4643 a.checked ? n < 0 && (x.autoHideReplayControls = t['concat']([null])) : n > -1 && (x.autoHideReplayControls = t['slice'](0, n)['concat'](t['slice'](n + 1)))
4644 } else x['autoHideReplayControls'] = _
4645 }, x.saveAutoHideControls]
4646 }
4647 }), x._v(" "), t('label', {
4648 attrs: {
4649 for: 'replay-auto-hide-controls'
4650 }
4651 }, [x._v('Auto Hide Controls')])])]), x._v(" "), t('input', {
4652 directives: [{
4653 name: 'model',
4654 rawName: 'v-model',
4655 value: x['rangeIndex'],
4656 expression: 'rangeIndex'
4657 }],
4658 staticClass: 'replay-slider',
4659 attrs: {
4660 type: 'range',
4661 min: x['rangeMin'],
4662 max: x['rangeMax']
4663 },
4664 domProps: {
4665 value: x['rangeIndex']
4666 },
4667 on: {
4668 input: x.onSlide,
4669 change: x['onSlideEnd'],
4670 __r: function (e) {
4671 x.rangeIndex = e.target['value']
4672 }
4673 }
4674 })]) : x._e()
4675 };
4676 re['_withStripped'] = !0;
4677 var oe = t(1),
4678 ce = {
4679 data: () => ({
4680 show: !1,
4681 autoHideReplayControls: oe['settings']['autoHideReplayControls'],
4682 drawDelay: oe['settings']['drawDelay'],
4683 cellOpacity: 100,
4684 rangeMin: 0,
4685 rangeIndex: 0,
4686 rangeMax: 1e3,
4687 replayIndex: 0,
4688 packetCount: 0
4689 }),
4690 created: function () {
4691 oe['events']['$on']('show-replay-controls', this['onShow']), oe['events']['$on']('replay-index-change', this.onReplayIndexChange)
4692 },
4693 methods: {
4694 onShow(x) {
4695 x ? (this['show'] = !0, this['packetCount'] = x - 1) : (this['show'] = !1, this['cellOpacity'] = 100, this.rangeIndex = 0, this['packetCount'] = 0)
4696 },
4697 onReplayIndexChange(x) {
4698 var e = x / this['packetCount'];
4699 this['rangeIndex'] = Math['floor'](e * this.rangeMax), this['replayIndex'] = x
4700 },
4701 onSlide(x) {
4702 oe.moveInterval && (clearInterval(oe['moveInterval']), oe['moveInterval'] = null), this['replayIndex'] = oe.replayMoveTo(this.rangeIndex / this.rangeMax)
4703 },
4704 onSlideEnd(x) {
4705 oe['moveInterval'] || (oe['moveInterval'] = setInterval(oe['replayUpdate'], 40))
4706 },
4707 onCellOpacitySlide() {
4708 oe['scene']['foreground']['alpha'] = this.cellOpacity / 100
4709 },
4710 saveAutoHideControls() {
4711 oe['settings']['set']('autoHideReplayControls', this['autoHideReplayControls'])
4712 }
4713 }
4714 },
4715 le = (t(184), Object(v.a)(ce, re, [], !1, null, "c2c2ac08", null));
4716 le.options.__file = 'src/components/replay-controls.vue';
4717 var de = le['exports'],
4718 fe = function () {
4719 var x = this['$createElement'],
4720 e = this['_self']._c || x;
4721 return this['show'] ? e('div', {
4722 attrs: {
4723 id: 'ab-overlay'
4724 }
4725 }, [this._m(0)]) : this._e()
4726 },
4727 ue = [function () {
4728 var x = this.$createElement,
4729 e = this['_self']._c || x;
4730 return e('div', {
4731 staticClass: 'content'
4732 }, [e('img', {
4733 staticStyle: {
4734 width: "120px"
4735 },
4736 attrs: {
4737 src: '/img/sad.png'
4738 }
4739 }), this._v(" "), e("p", {
4740 staticStyle: {
4741 "font-size": '3em'
4742 }
4743 }, [this._v('Adblock Detected')]), this._v(" "), e("p", {
4744 staticStyle: {
4745 "font-size": '1.5em',
4746 "margin-bottom": "15px"
4747 }
4748 }, [this._v('We use advertisements to fund our servers!')]), this._v(" "), e("img", {
4749 staticStyle: {
4750 "border-radius": '4px',
4751 "box-shadow": '0 0 10px black'
4752 },
4753 attrs: {
4754 src: '/img/ab.gif'
4755 }
4756 })])
4757 }];
4758 fe['_withStripped'] = !0;
4759 var he = t(11),
4760 {
4761 isFirstVisit: ve
4762 } = t(63),
4763 pe = {
4764 data: () => ({
4765 show: !1
4766 }),
4767 created() {
4768 ve ? console['log']("Welcome to Vanis.io!") : he['get']("/ads.js")['then'](x => {})['catch'](x => {
4769 x['response'] || (this['show'] = !0)
4770 })
4771 }
4772 },
4773 be = (t(186), Object(v.a)(pe, fe, ue, !1, null, "1611deb4", null));
4774 be['options']['__file'] = "src/components/ab-overlay.vue";
4775 var ge = be.exports;
4776 _.a['use'](i.a), _.a['component']('btn', se), window['app'] = new _.a({
4777 el: '#app',
4778 data: {
4779 showMenu: !0,
4780 showDeathScreen: !1,
4781 deathStats: null
4782 },
4783 components: {
4784 mainContainer: gx,
4785 socialLinks: Ax,
4786 privacyTos: Bx,
4787 contextMenu: Ex,
4788 hud: Jx,
4789 deathStats: ae,
4790 replayControls: de,
4791 abOverlay: ge
4792 }
4793 })
4794}]);