Alpha-Ware 40 bot mod! (Patched)

Up to 40 bots hack (more with VPN), autoheal, macros, and command keys!

// ==UserScript==
// @name         Alpha-Ware 40 bot mod! (Patched)
// @namespace    D_Alpha
// @match        *://moomoo.io/*
// @match        *://dev.moomoo.io/*
// @match        *://sandbox.moomoo.io/*
// @description  Up to 40 bots hack (more with VPN), autoheal, macros, and command keys! 
// @author       D_Alpha
// @grant        none
// @licence      MIT
// @version 0.0.1.20240222210506
// ==/UserScript==

let AutoAim = false;
let mouseX;
let mouseY;
let width;
let height;
let Hacks = true;
setInterval(() => {
    if(clanToggle == 1 && Hacks) {
        doNewSend(["9", [null]]);
        doNewSend(["8", [animate(false, 5)]])
    }
}, 200);

setInterval(() => {
    if(messageToggle == 1 && Hacks) {
        doNewSend(["ch", [animate(true, 5)]])
    }
}, 200);

setInterval(() => {
    if(hatToggle && Hacks) {
        if(oldHat != normalHat) {
            armor(normalHat);
        }
        if(oldAcc != normalAcc) {
            acc(normalAcc);
        }
        oldHat = normalHat;
        oldAcc = normalAcc
    }
}, 25);

function normal() {
    hat(normalHat, normalAcc);
}

let coreURL = new URL(window.location.href);
window.sessionStorage.force = coreURL.searchParams.get("fc");

var nearestEnemy;
var nearestEnemyAngle;
var isEnemyNear;
var instaSpeed = 190;
var primary;
var secondary;
var foodType;
var wallType;
var spikeType;
var millType;
var mineType;
var OGClan = [];
var boostType;
var turretType;
var spawnpadType;
var tick = 1;
var oldHat;
var oldAcc;
var enemiesNear;
var normalHat;
var normalAcc;
var ws;
var MSG = false;
var msgpack5 = msgpack;
var boostDir;
var PremiumMap = false;
let myPlayer = {
    id: null,
    x: null,
    y: null,
    dir: null,
    object: null,
    weapon: null,
    clan: null,
    isLeader: null,
    hat: null,
    accessory: null,
    isSkull: null
};

var MHat = false;
var allMooMooObjects = {};
let healSpeed = 73;
var messageToggle = 0;
var clanToggle = 0;
let healToggle = 1;
let hatToggle = 1;
var log = true;
var heal = false;
var HealthToggle = 1;
var names = [];
var buildings = [];
var theirPrimary = [], theirSecondary = [];
document.msgpack = msgpack;
function n(){
    this.buffer = new Uint8Array([0]);
    this.buffer.__proto__ = new Uint8Array;
    this.type = 0;
}

WebSocket.prototype.oldSend = WebSocket.prototype.send;
WebSocket.prototype.send = function(m){
    if (!ws){
        document.ws = this;

        ws = this;
        socketFound(this);
    }
    this.oldSend(m);
};


function socketFound(socket){
    socket.addEventListener('message', function(message){
        handleMessage(message);
    });
}

function handleMessage(m){
    let temp = msgpack5.decode(new Uint8Array(m.data));
    let moduel;
    if(temp.length > 1) {
        moduel = [temp[0], ...temp[1]];
        if (moduel[1] instanceof Array){
            moduel = moduel;
        }
    } else {
        moduel = temp;
    }
    let FunctionID = moduel[0];
    if(!moduel) {return};

    if(FunctionID === "io-init") {
        let cvs = document.getElementById("gameCanvas");
        width = cvs.clientWidth;
        height = cvs.clientHeight;
        (window).resize(function() {
            width = cvs.clientWidth;
            height = cvs.clientHeight;
        });
        cvs.addEventListener("mousemove", e => {
            mouseX = e.clientX;
            mouseY = e.clientY;
        });
    }

    if (FunctionID == "1" && myPlayer.id == null){
        myPlayer.id = moduel[1];
    }
    if(FunctionID == "ch" && moduel[1] == myPlayer.id) {
        if ("/join " == moduel[2].substring(0, 6)) {
            var w = moduel[2].substring(6);
            doNewSend(["10", [w]]);
            setTimeout(function () {
                chat("Requested : " + w)
            }, 500)
        }
        if ("/clan " == moduel[2].substring(0, 6)) {
            var t = moduel[2].substring(6);
            doNewSend(["8", [t]]);
            setTimeout(function () {
                chat("Created : " + t)
            }, 500)
        }
        if ("/unclan" == moduel[2].substring(0, 7)) {
            if(myPlayer.clan == undefined) return setTimeout(chat("You are not in a clan"), 500);
            if(myPlayer.clan == null) return setTimeout(chat("You are not in a clan"), 500);
            OGClan = myPlayer.clan;
            doNewSend(["9", [null]]);
            setTimeout(function () {
                chat("Left : " + OGClan)
                OGClan = [];
            }, 500)
        }
        if ("/track" == moduel[2].substring(0, 6)) {
            log = !log;
            setTimeout(function () {
                chat("Player Tracker : " + log)
            }, 500)
        }
 if ("/log" == moduel[2].substring(0, 4)) {
            log = !log;
            setTimeout(function () {
                chat("Player Tracker : " + log)
            }, 500)
        }
    }
    if(FunctionID == "2" && moduel[1] != myPlayer.id && Hacks && log) {// supermod stuff
        if(null != names[moduel[1][1]]){
            if(names[moduel[1][1]] != moduel[1][2]){
                console.log("{", names[moduel[1][1]], "} => {", moduel[1][2], "} [", moduel[1][1], "]");
                chat("{" + names[moduel[1][1]] + "} => {" + moduel[1][2] + "}");
            }else{
                console.log("{", names[moduel[1][1]], "} SubtoD_Alpha");
                chat("{" + names[moduel[1][1]] + "} SubtoD_Alpha");
            }
        }else{
            console.log("{", moduel[1][2], "} [", moduel[1][1], "]");
            chat("{" + moduel[1][2] + "} [" + moduel[1][1] + "]");
            names[moduel[1][1]] = moduel[1][2];
            theirPrimary[moduel[1][1]] = 0;
            theirSecondary[moduel[1][1]] = void 0;
        }
    }
    if(FunctionID == "13" && moduel[1] != myPlayer.id && Hacks && log) { // supermod stuff
        for (var r = 0; r < buildings.length; r++) buildings[r][7] == moduel[1] && (buildings.splice(r, 1), r--);
        if(names[moduel[1]]) {
            console.log("{", names[moduel[1]], "} DidnotsubtoD_Alpha");
            chat("{" + names[moduel[1]] + "} DidnotsubtoD_Alpha");
            names[moduel[1]] = void 0;
        }else{
            console.log("[", moduel[1], "] DidnotsubtoD_Alpha");
            theirPrimary[moduel[1]] = 0;
            theirSecondary[moduel[1]] = void 0;
        }
    }
    if(FunctionID == "6") {
        for (var a = 0; a < moduel[1].length / 8; a++) {
            var i = moduel[1].slice(8 * a, 8 * a + 8);
            buildings.push(i)
        }
    }
    if (FunctionID == "33") {
        enemiesNear = [];
        for(let i = 0; i < moduel[1].length / 13; i++) {
            let playerInfo = moduel[1].slice(13*i, 13*i+13);
            if(playerInfo[0] == myPlayer.id) {
                myPlayer.x = playerInfo[1];
                myPlayer.y = playerInfo[2];
                myPlayer.dir = playerInfo[3];
                myPlayer.object = playerInfo[4];
                myPlayer.weapon = playerInfo[5];
                myPlayer.clan = playerInfo[7];
                myPlayer.isLeader = playerInfo[8];
                myPlayer.hat = playerInfo[9];
                myPlayer.accessory = playerInfo[10];
                myPlayer.isSkull = playerInfo[11];
            } else if(playerInfo[7] != myPlayer.clan || playerInfo[7] === null) {
                enemiesNear.push(playerInfo);
            }
        }
    }

    isEnemyNear = false;
    if (enemiesNear) {
        nearestEnemy = enemiesNear.sort((a, b) => dist(a, myPlayer) - dist(b, myPlayer))[0];
    }
    if (nearestEnemy) {
        nearestEnemyAngle = Math.atan2(nearestEnemy[2] - myPlayer.y, nearestEnemy[1] - myPlayer.x);
        if (Math.sqrt(Math.pow((myPlayer.y - nearestEnemy[2]), 2) + Math.pow((myPlayer.x - nearestEnemy[1]), 2)) < 300) {
            isEnemyNear = true;
            if(AutoAim == false && myPlayer.hat != 7 && myPlayer.hat != 53) {
                normalHat = 6;
                if(primary != 8) {
                    normalAcc = 21;
                }
            };
        }
    }
    if(isEnemyNear == false && AutoAim == false) {
        normalAcc = 11;
        if (myPlayer.y < 2400){
            normalHat = 15;
        } else if (myPlayer.y > 6850 && myPlayer.y < 7550){
            normalHat = 31;
        } else {
            normalHat = 12;
        }
    }
    if (!nearestEnemy) {
        nearestEnemyAngle = myPlayer.dir;
    }
    update();
}
function doNewSend(sender){
    ws.send(new Uint8Array(Array.from(msgpack5.encode(sender))));
}

function storeBuy(newHat, newAcc) {
    doNewSend(["13c", [1, newHat, 0]]);
    doNewSend(["13c", [1, newAcc, 1]]);
}

function storeEquip(newHat, newAcc) {
    doNewSend(["13c", [0, newHat, 0]]);
    doNewSend(["13c", [0, 0, 1]]);
   doNewSend(["13c", [0, newAcc, 1]]);
}

function armor(id) {
    doNewSend(["13c", [0, id, 0]]);
}
function acc(id) {
    doNewSend(["13c", [0, id, 1]]);
}
function chat(string) {
    doNewSend(["ch", [string]]);
}
function hat(newHat, newAcc) {
   if(Hacks) {
    if (window.location.host == "sandbox.moomoo.io") {
        storeBuy(newHat, newAcc);
    }
    storeEquip(newHat, newAcc);
   }
}
function _place(id, angle = Math.atan2(mouseY - height / 2, mouseX - width / 2)) {
   if(Hacks) {
    doNewSend(["5", [id, null]]);
    doNewSend(["c", [1, angle]]);
    doNewSend(["c", [0, angle]]);
    doNewSend(["5", [myPlayer.weapon, true]]);
   }
}

function boostSpike() {
   if(Hacks) {
    if(boostDir == null) {
        boostDir = nearestEnemyAngle;
    }
    _place(spikeType, boostDir + toRad(90));
    _place(spikeType, boostDir - toRad(90));
    _place(boostType, boostDir);
    doNewSend(["33", [boostDir]]);
   }
}

var repeater = function(key, action, interval) {
    let _isKeyDown = false;
    let _intervalId = undefined;

    return {
        start(keycode) {
            if(keycode == key && document.activeElement.id.toLowerCase() !== 'chatbox') {
                _isKeyDown = true;
                if(_intervalId === undefined) {
                    _intervalId = setInterval(() => {
                        action();
                        if(!_isKeyDown){
                            clearInterval(_intervalId);
                            _intervalId = undefined;
                            console.log("claered");
                        }
                    }, interval);
                }
            }
        },

        stop(keycode) {
            if(keycode == key && document.activeElement.id.toLowerCase() !== 'chatbox') {
                _isKeyDown = false;
            }
        }
    };


}
const foodPlacer = repeater(81, () => {_place(foodType)}, 0);
const spawnPlacer = repeater(48, () => {_place(spawnpadType)}, 0);
const wallPlacer = repeater(52, () => {_place(wallType)}, 0);
const boostSpiker = repeater(71, boostSpike, 0);
document.addEventListener('keydown', (e)=>{
    foodPlacer.start(e.keyCode);
    wallPlacer.start(e.keyCode);
    spawnPlacer.start(e.keyCode);
    boostSpiker.start(e.keyCode);

    function quad(type, amount, ang) {
        for (let i = 0; i < amount; i++){
            let angle = myPlayer.dir + toRad(i * ang);
            _place(type, angle)
        }
    }
    function double(id) {
        _place(id, myPlayer.dir + toRad(45));
        _place(id, myPlayer.dir - toRad(45));
    }

    if (e.keyCode == 77 && document.activeElement.id.toLowerCase() !== 'chatbox') {
        if (myPlayer.y < 2400){
            hat(15, 11);
        } else if (myPlayer.y > 6850 && myPlayer.y < 7550){
            hat(31, 11);
        } else {
            hat(12, 11);
        }
    }
    if(e.keyCode == 38 && document.activeElement.id.toLowerCase() !== 'chatbox') {
        messageToggle = !messageToggle;
        message.count = 0;
    }
    if(e.keyCode == 40 && document.activeElement.id.toLowerCase() !== 'chatbox') {
        clanToggle = !clanToggle;
        clan.count = 0;
    }
})

document.addEventListener('keyup', (e)=>{
    foodPlacer.stop(e.keyCode);
    spawnPlacer.stop(e.keyCode);
    wallPlacer.stop(e.keyCode);
    boostSpiker.stop(e.keyCode);
    if(e.keyCode == 71 && document.activeElement.id.toLowerCase() !== 'chatbox') {
        setTimeout( () => {
            doNewSend(["33", [null]]);
            boostDir = null;
        }, 10);
    }
})


function isElementVisible(e) {
    return (e.offsetParent !== null);
}


function toRad(angle) {
    return angle * 0.01745329251;
}

function dist(a, b){
    return Math.sqrt( Math.pow((b.y-a[2]), 2) + Math.pow((b.x-a[1]), 2) );
}
let message = {
    count: 0,
    max: 55,
    speed: 1000,
    chats: [
        'You need to subscribe to D_Alpha',
    'you need to subscribe to D_Omega',
    'like and subscribe to D_Alpha',
    'like and sunscribe to D_Omega',
    'Sub to D_Alpha YT',
    'Sub to D_Omega YT',
    ]
};
setInterval(() => {
    if(messageToggle) {
        message.count++
        if(message.count == message.max){
            message.count = 0;
        }
    }
}, message.speed);
function makeClan(length) {
    var result = '';
    var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    var charactersLength = characters.length;
    for ( var i = 0; i < length; i++ ) {
      result += characters.charAt(Math.floor(Math.random() * charactersLength));
   }
   return result;
}
let clan = {
    count: 0,
    max: 5,
    speed: 0,
    chats: [makeClan(7)]
};
/*
setInterval(() => {
    if(clanToggle) {
        clan.count++
        if(clan.count == clan.max){
            clan.count = 0;
        }
    }
});
*/
function animate(space, chance) {
    let result = '';
    let characters;
    if(space) {
        characters = message.chats[message.count];
    } else {
        characters = makeClan(7);
    }
    if(space) {
        characters = characters.padStart((30 - characters.length) / 2 + characters.length)
        characters = characters.padEnd(30);
    }
    let count = 0;
    for (let i = 0; i < characters.length; i++ ) {
        if(Math.floor(Math.random() * chance) == 0 && characters.charAt(i) != "_" && count < 0 && characters.charAt(i) != "_") {
            result += "_";
            count++
        } else {
            result += characters.charAt(i);
        }
    }
    return result;
}

function update() {
    for (let i=0;i<9;i++){
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
            primary = i;
        }
    }

    for (let i=9;i<16;i++){
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
            secondary = i;
        }
    }

    for (let i=16;i<19;i++){
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
            foodType = i - 16;
        }
    }

    for (let i=19;i<22;i++){
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
            wallType = i - 16;
        }
    }

    for (let i=22;i<26;i++){
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
            spikeType = i - 16;
        }
    }

    for (let i=26;i<29;i++){
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
            millType = i - 16;
        }
    }

    for (let i=29;i<31;i++){
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
            mineType = i - 16;
        }
    }

    for (let i=31;i<33;i++){
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
            boostType = i - 16;
        }
    }

    for (let i=33;i<39;i++){
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString())) && i != 36){
            turretType = i - 16;
        }
    }
    spawnpadType = 36;
    for (let i=36;i<37;i++){
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
            spawnpadType = i - 16;
        }
    }
}
var Progress = 0;
function loading() {
    setInterval(() => {
       if(Progress != 99) {
        Progress++
       }else{
       setTimeout(() => {
        Progress++
       },100);
       }
        $(".loadingBar").val(Progress)
    },19);
    document.getElementById("loadingText").innerHTML = '<progress id="loadingText" value="0" max="100" class="loadingBar"></progress>'
}
loading()
let AntiInvis = {}
let { rotate } = CanvasRenderingContext2D.prototype
AntiInvis.init = function() {
    AntiInvis.toggler = true
    AntiInvis.opacity = 0.7// 0.7 opacity to check for invis
    AntiInvis.invisibleAngle = 38e38
}
AntiInvis.init()
AntiInvis.getFixedDir = function(angle) {
    return Math.atan2(Math.sin(angle), Math.cos(angle))
}
AntiInvis.isAbnormalDir = function(angle) {
    if (angle <= -AntiInvis.invisibleAngle || angle >= AntiInvis.invisibleAngle) {
        return true
    }
    return false
}
AntiInvis.setOpacity = function(opacity) {
    this.globalAlpha = opacity
}
CanvasRenderingContext2D.prototype.rotate = function(angle) {
    if (AntiInvis.isAbnormalDir(angle) && AntiInvis.toggler) {
        angle = AntiInvis.getFixedDir(angle)
        AntiInvis.setOpacity.call(this, AntiInvis.opacity)
        return rotate.call(this, angle)
    }

    return rotate.apply(this, arguments)
}
var testing;
function afk(src, cb=()=>{}) {
    let s = document.createElement("SCRIPT");
    s.src = src;
    document.body.appendChild(s);
    s.onload = cb;
}
/*
afk("https://eight-evening-slug.glitch.me/moomoo.js", () => {
    //ScriptWorker();
});*/
var DisableKeys = false;
document.title = "a";
let Wish = 0;
let Fixed = [];
document.rarar = 15;
let CPS = 1;
let Nighte = 0;
let Spinner = true;
let AutoPlace = false;
let AutoHeal = true
let InvisProj = true;
let InvisItem = true;
let AssassinGear = false;
let AutoBreak = true;
let Aim360 = false;
let HatLoop = false;
let Mill = {x: null, y: null, z: false, k: null};
let UI = true;
let qMode = false;

!(function(e) {
    var t = {};

    function n(i) {
        if (t[i]) return t[i].exports;
        var r = (t[i] = {
            i: i,
            l: !1,
            exports: {}
        });
        return e[i].call(r.exports, r, r.exports, n), (r.l = !0), r.exports;
    }
    (n.m = e),
        (n.c = t),
        (n.d = function(e, t, i) {
        n.o(e, t) || Object.defineProperty(e, t, {
            enumerable: !0,
            get: i
        });
    }),
        (n.r = function(e) {
        "undefined" != typeof Symbol &&
            Symbol.toStringTag &&
            Object.defineProperty(e, Symbol.toStringTag, {
            value: "Module"
        }),
            Object.defineProperty(e, "__esModule", {
            value: !0
        });
    }),
        (n.t = function(e, t) {
        if ((1 & t && (e = n(e)), 8 & t)) return e;
        if (4 & t && "object" == typeof e && e && e.__esModule) return e;
        var i = Object.create(null);
        if (
            (n.r(i),
             Object.defineProperty(i, "default", {
                enumerable: !0,
                value: e
            }),
             2 & t && "string" != typeof e)
        )
            for (var r in e)
                n.d(
                    i,
                    r,
                    function(t) {
                        return e[t];
                    }.bind(null, r),
                );
        return i;
    }),
        (n.n = function(e) {
        var t =
            e && e.__esModule ?
            function() {
                return e.default;
            } :
        function() {
            return e;
        };
        return n.d(t, "a", t), t;
    }),
        (n.o = function(e, t) {
        return Object.prototype.hasOwnProperty.call(e, t);
    }),
        (n.p = ""),
        n((n.s = 21));
})([
    function(e, t, n) {
        var i = (t.global = n(25)),
            r = (t.hasBuffer = i && !!i.isBuffer),
            s = (t.hasArrayBuffer = "undefined" != typeof ArrayBuffer),
            a = (t.isArray = n(5));
        t.isArrayBuffer = s ?
            function(e) {
            return e instanceof ArrayBuffer || p(e);
        } :
        m;
        var o = (t.isBuffer = r ? i.isBuffer : m),
            c = (t.isView = s ? ArrayBuffer.isView || y("ArrayBuffer", "buffer") : m);
        (t.alloc = d),
            (t.concat = function(e, n) {
            n ||
                ((n = 0),
                 Array.prototype.forEach.call(e, function(e) {
                n += e.length;
            }));
            var i = (this !== t && this) || e[0],
                r = d.call(i, n),
                s = 0;
            return (
                Array.prototype.forEach.call(e, function(e) {
                    s += f.copy.call(e, r, s);
                }),
                r
            );
        }),
            (t.from = function(e) {
            return "string" == typeof e ?
                function(e) {
                var t = 3 * e.length,
                    n = d.call(this, t),
                    i = f.write.call(n, e);
                return t !== i && (n = f.slice.call(n, 0, i)), n;
            }.call(this, e) :
            g(this).from(e);
        });
        var l = (t.Array = n(28)),
            h = (t.Buffer = n(29)),
            u = (t.Uint8Array = n(30)),
            f = (t.prototype = n(6));

        function d(e) {
            return g(this).alloc(e);
        }
        var p = y("ArrayBuffer");

        function g(e) {
            return o(e) ? h : c(e) ? u : a(e) ? l : r ? h : s ? u : l;
        }

        function m() {
            return !1;
        }

        function y(e, t) {
            return (
                (e = "[object " + e + "]"),
                function(n) {
                    return null != n && {}.toString.call(t ? n[t] : n) === e;
                }
            );
        }
    },
    function(e, t, n) {
        var i = n(5);
        (t.createCodec = o),
            (t.install = function(e) {
            for (var t in e) s.prototype[t] = a(s.prototype[t], e[t]);
        }),
            (t.filter = function(e) {
            return i(e) ?
                (function(e) {
                return (
                    (e = e.slice()),
                    function(n) {
                        return e.reduce(t, n);
                    }
                );

                function t(e, t) {
                    return t(e);
                }
            })(e) :
            e;
        });
        var r = n(0);

        function s(e) {
            if (!(this instanceof s)) return new s(e);
            (this.options = e), this.init();
        }

        function a(e, t) {
            return e && t ?
                function() {
                return e.apply(this, arguments), t.apply(this, arguments);
            } :
            e || t;
        }

        function o(e) {
            return new s(e);
        }
        (s.prototype.init = function() {
            var e = this.options;
            return e && e.uint8array && (this.bufferish = r.Uint8Array), this;
        }),
            (t.preset = o({
            preset: !0
        }));
    },
    function(e, t, n) {
        var i = n(3).ExtBuffer,
            r = n(32),
            s = n(33),
            a = n(1);

        function o() {
            var e = this.options;
            return (
                (this.encode = (function(e) {
                    var t = s.getWriteType(e);
                    return function(e, n) {
                        var i = t[typeof n];
                        if (!i)
                            throw new Error('Unsupported type "' + typeof n + '": ' + n);
                        i(e, n);
                    };
                })(e)),
                e && e.preset && r.setExtPackers(this),
                this
            );
        }
        a.install({
            addExtPacker: function(e, t, n) {
                n = a.filter(n);
                var r = t.name;
                r && "Object" !== r ?
                    ((this.extPackers || (this.extPackers = {}))[r] = s) :
                (this.extEncoderList || (this.extEncoderList = [])).unshift([t, s]);

                function s(t) {
                    return n && (t = n(t)), new i(t, e);
                }
            },
            getExtPacker: function(e) {
                var t = this.extPackers || (this.extPackers = {}),
                    n = e.constructor,
                    i = n && n.name && t[n.name];
                if (i) return i;
                for (
                    var r = this.extEncoderList || (this.extEncoderList = []),
                    s = r.length,
                    a = 0; a < s; a++
                ) {
                    var o = r[a];
                    if (n === o[0]) return o[1];
                }
            },
            init: o,
        }),
            (t.preset = o.call(a.preset));
    },
    function(e, t, n) {
        t.ExtBuffer = function e(t, n) {
            if (!(this instanceof e)) return new e(t, n);
            (this.buffer = i.from(t)), (this.type = n);
        };
        var i = n(0);
    },
    function(e, t) {
        (t.read = function(e, t, n, i, r) {
            var s,
                a,
                o = 8 * r - i - 1,
                c = (1 << o) - 1,
                l = c >> 1,
                h = -7,
                u = n ? r - 1 : 0,
                f = n ? -1 : 1,
                d = e[t + u];
            for (
                u += f, s = d & ((1 << -h) - 1), d >>= -h, h += o; h > 0; s = 256 * s + e[t + u], u += f, h -= 8
            );
            for (
                a = s & ((1 << -h) - 1), s >>= -h, h += i; h > 0; a = 256 * a + e[t + u], u += f, h -= 8
            );
            if (0 === s) s = 1 - l;
            else {
                if (s === c) return a ? NaN : (1 / 0) * (d ? -1 : 1);
                (a += Math.pow(2, i)), (s -= l);
            }
            return (d ? -1 : 1) * a * Math.pow(2, s - i);
        }),
            (t.write = function(e, t, n, i, r, s) {
            var a,
                o,
                c,
                l = 8 * s - r - 1,
                h = (1 << l) - 1,
                u = h >> 1,
                f = 23 === r ? Math.pow(2, -24) - Math.pow(2, -77) : 0,
                d = i ? 0 : s - 1,
                p = i ? 1 : -1,
                g = t < 0 || (0 === t && 1 / t < 0) ? 1 : 0;
            for (
                t = Math.abs(t),
                isNaN(t) || t === 1 / 0 ?
                ((o = isNaN(t) ? 1 : 0), (a = h)) :
                ((a = Math.floor(Math.log(t) / Math.LN2)),
                 t * (c = Math.pow(2, -a)) < 1 && (a--, (c *= 2)),
                 (t += a + u >= 1 ? f / c : f * Math.pow(2, 1 - u)) * c >= 2 &&
                 (a++, (c /= 2)),
                 a + u >= h ?
                 ((o = 0), (a = h)) :
                 a + u >= 1 ?
                 ((o = (t * c - 1) * Math.pow(2, r)), (a += u)) :
                 ((o = t * Math.pow(2, u - 1) * Math.pow(2, r)), (a = 0))); r >= 8; e[n + d] = 255 & o, d += p, o /= 256, r -= 8
            );
            for (
                a = (a << r) | o, l += r; l > 0; e[n + d] = 255 & a, d += p, a /= 256, l -= 8
            );
            e[n + d - p] |= 128 * g;
        });
    },
    function(e, t) {
        var n = {}.toString;
        e.exports =
            Array.isArray ||
            function(e) {
            return "[object Array]" == n.call(e);
        };
    },
    function(e, t, n) {
        var i = n(31);
        (t.copy = c),
            (t.slice = l),
            (t.toString = function(e, t, n) {
            return (!a && r.isBuffer(this) ? this.toString : i.toString).apply(
                this,
                arguments,
            );
        }),
            (t.write = (function(e) {
            return function() {
                return (this[e] || i[e]).apply(this, arguments);
            };
        })("write"));
        var r = n(0),
            s = r.global,
            a = r.hasBuffer && "TYPED_ARRAY_SUPPORT" in s,
            o = a && !s.TYPED_ARRAY_SUPPORT;

        function c(e, t, n, s) {
            var a = r.isBuffer(this),
                c = r.isBuffer(e);
            if (a && c) return this.copy(e, t, n, s);
            if (o || a || c || !r.isView(this) || !r.isView(e))
                return i.copy.call(this, e, t, n, s);
            var h = n || null != s ? l.call(this, n, s) : this;
            return e.set(h, t), h.length;
        }

        function l(e, t) {
            var n = this.slice || (!o && this.subarray);
            if (n) return n.call(this, e, t);
            var i = r.alloc.call(this, t - e);
            return c.call(this, i, 0, e, t), i;
        }
    },
    function(e, t, n) {
        (function(e) {
            !(function(t) {
                var n,
                    i = "undefined",
                    r = i !== typeof e && e,
                    s = i !== typeof Uint8Array && Uint8Array,
                    a = i !== typeof ArrayBuffer && ArrayBuffer,
                    o = [0, 0, 0, 0, 0, 0, 0, 0],
                    c =
                    Array.isArray ||
                    function(e) {
                        return (
                            !!e && "[object Array]" == Object.prototype.toString.call(e)
                        );
                    },
                    l = 4294967296;

                function h(e, c, h) {
                    var b = c ? 0 : 4,
                        x = c ? 4 : 0,
                        S = c ? 0 : 3,
                        T = c ? 1 : 2,
                        I = c ? 2 : 1,
                        E = c ? 3 : 0,
                        M = c ? y : v,
                        A = c ? k : w,
                        P = O.prototype,
                        B = "is" + e,
                        C = "_" + B;
                    return (
                        (P.buffer = void 0),
                        (P.offset = 0),
                        (P[C] = !0),
                        (P.toNumber = R),
                        (P.toString = function(e) {
                            var t = this.buffer,
                                n = this.offset,
                                i = _(t, n + b),
                                r = _(t, n + x),
                                s = "",
                                a = !h && 2147483648 & i;
                            for (a && ((i = ~i), (r = l - r)), e = e || 10;;) {
                                var o = (i % e) * l + r;
                                if (
                                    ((i = Math.floor(i / e)),
                                     (r = Math.floor(o / e)),
                                     (s = (o % e).toString(e) + s),
                                     !i && !r)
                                )
                                    break;
                            }
                            return a && (s = "-" + s), s;
                        }),
                        (P.toJSON = R),
                        (P.toArray = u),
                        r && (P.toBuffer = f),
                        s && (P.toArrayBuffer = d),
                        (O[B] = function(e) {
                            return !(!e || !e[C]);
                        }),
                        (t[e] = O),
                        O
                    );

                    function O(e, t, r, c) {
                        return this instanceof O ?
                            (function(e, t, r, c, h) {
                            if (
                                (s &&
                                 a &&
                                 (t instanceof a && (t = new s(t)),
                                  c instanceof a && (c = new s(c))),
                                 t || r || c || n)
                            ) {
                                if (!p(t, r))
                                    (h = r), (c = t), (r = 0), (t = new(n || Array)(8));
                                (e.buffer = t),
                                    (e.offset = r |= 0),
                                    i !== typeof c &&
                                    ("string" == typeof c ?
                                     (function(e, t, n, i) {
                                    var r = 0,
                                        s = n.length,
                                        a = 0,
                                        o = 0;
                                    "-" === n[0] && r++;
                                    for (var c = r; r < s;) {
                                        var h = parseInt(n[r++], i);
                                        if (!(h >= 0)) break;
                                        (o = o * i + h),
                                            (a = a * i + Math.floor(o / l)),
                                            (o %= l);
                                    }
                                    c && ((a = ~a), o ? (o = l - o) : a++),
                                        j(e, t + b, a),
                                        j(e, t + x, o);
                                })(t, r, c, h || 10) :
                                     p(c, h) ?
                                     g(t, r, c, h) :
                                     "number" == typeof h ?
                                     (j(t, r + b, c), j(t, r + x, h)) :
                                     c > 0 ?
                                     M(t, r, c) :
                                     c < 0 ?
                                     A(t, r, c) :
                                     g(t, r, o, 0));
                            } else e.buffer = m(o, 0);
                        })(this, e, t, r, c) :
                        new O(e, t, r, c);
                    }

                    function R() {
                        var e = this.buffer,
                            t = this.offset,
                            n = _(e, t + b),
                            i = _(e, t + x);
                        return h || (n |= 0), n ? n * l + i : i;
                    }

                    function j(e, t, n) {
                        (e[t + E] = 255 & n),
                            (n >>= 8),
                            (e[t + I] = 255 & n),
                            (n >>= 8),
                            (e[t + T] = 255 & n),
                            (n >>= 8),
                            (e[t + S] = 255 & n);
                    }

                    function _(e, t) {
                        return (
                            16777216 * e[t + S] +
                            (e[t + T] << 16) +
                            (e[t + I] << 8) +
                            e[t + E]
                        );
                    }
                }

                function u(e) {
                    var t = this.buffer,
                        i = this.offset;
                    return (
                        (n = null),
                        !1 !== e && 0 === i && 8 === t.length && c(t) ? t : m(t, i)
                    );
                }

                function f(t) {
                    var i = this.buffer,
                        s = this.offset;
                    if (((n = r), !1 !== t && 0 === s && 8 === i.length && e.isBuffer(i)))
                        return i;
                    var a = new r(8);
                    return g(a, 0, i, s), a;
                }

                function d(e) {
                    var t = this.buffer,
                        i = this.offset,
                        r = t.buffer;
                    if (
                        ((n = s),
                         !1 !== e && 0 === i && r instanceof a && 8 === r.byteLength)
                    )
                        return r;
                    var o = new s(8);
                    return g(o, 0, t, i), o.buffer;
                }

                function p(e, t) {
                    var n = e && e.length;
                    return (t |= 0), n && t + 8 <= n && "string" != typeof e[t];
                }

                function g(e, t, n, i) {
                    (t |= 0), (i |= 0);
                    for (var r = 0; r < 8; r++) e[t++] = 255 & n[i++];
                }

                function m(e, t) {
                    return Array.prototype.slice.call(e, t, t + 8);
                }

                function y(e, t, n) {
                    for (var i = t + 8; i > t;)(e[--i] = 255 & n), (n /= 256);
                }

                function k(e, t, n) {
                    var i = t + 8;
                    for (n++; i > t;)(e[--i] = (255 & -n) ^ 255), (n /= 256);
                }

                function v(e, t, n) {
                    for (var i = t + 8; t < i;)(e[t++] = 255 & n), (n /= 256);
                }

                function w(e, t, n) {
                    var i = t + 8;
                    for (n++; t < i;)(e[t++] = (255 & -n) ^ 255), (n /= 256);
                }
                h("Uint64BE", !0, !0),
                    h("Int64BE", !0, !1),
                    h("Uint64LE", !1, !0),
                    h("Int64LE", !1, !1);
            })("string" != typeof t.nodeName ? t : this || {});
        }.call(this, n(11).Buffer));
    },
    function(e, t, n) {
        var i = n(3).ExtBuffer,
            r = n(35),
            s = n(17).readUint8,
            a = n(36),
            o = n(1);

        function c() {
            var e = this.options;
            return (
                (this.decode = (function(e) {
                    var t = a.getReadToken(e);
                    return function(e) {
                        var n = s(e),
                            i = t[n];
                        if (!i)
                            throw new Error(
                                "Invalid type: " + (n ? "0x" + n.toString(16) : n),
                            );
                        return i(e);
                    };
                })(e)),
                e && e.preset && r.setExtUnpackers(this),
                this
            );
        }
        o.install({
            addExtUnpacker: function(e, t) {
                (this.extUnpackers || (this.extUnpackers = []))[e] = o.filter(t);
            },
            getExtUnpacker: function(e) {
                return (
                    (this.extUnpackers || (this.extUnpackers = []))[e] ||
                    function(t) {
                        return new i(t, e);
                    }
                );
            },
            init: c,
        }),
            (t.preset = c.call(o.preset));
    },
    function(e, t, n) {
        t.encode = function(e, t) {
            var n = new i(t);
            return n.write(e), n.read();
        };
        var i = n(10).EncodeBuffer;
    },
    function(e, t, n) {
        t.EncodeBuffer = r;
        var i = n(2).preset;

        function r(e) {
            if (!(this instanceof r)) return new r(e);
            if (e && ((this.options = e), e.codec)) {
                var t = (this.codec = e.codec);
                t.bufferish && (this.bufferish = t.bufferish);
            }
        }
        n(14).FlexEncoder.mixin(r.prototype),
            (r.prototype.codec = i),
            (r.prototype.write = function(e) {
            this.codec.encode(this, e);
        });
    },
    function(e, t, n) {
        "use strict";
        (function(e) {
            /*!
             * The buffer module from node.js, for the browser.
             *
             * @author   Feross Aboukhadijeh <http://feross.org>
             * @license  MIT
             */
            var i = n(26),
                r = n(4),
                s = n(27);

            function a() {
                return c.TYPED_ARRAY_SUPPORT ? 2147483647 : 1073741823;
            }

            function o(e, t) {
                if (a() < t) throw new RangeError("Invalid typed array length");
                return (
                    c.TYPED_ARRAY_SUPPORT ?
                    ((e = new Uint8Array(t)).__proto__ = c.prototype) :
                    (null === e && (e = new c(t)), (e.length = t)),
                    e
                );
            }

            function c(e, t, n) {
                if (!(c.TYPED_ARRAY_SUPPORT || this instanceof c))
                    return new c(e, t, n);
                if ("number" == typeof e) {
                    if ("string" == typeof t)
                        throw new Error(
                            "If encoding is specified then the first argument must be a string",
                        );
                    return u(this, e);
                }
                return l(this, e, t, n);
            }

            function l(e, t, n, i) {
                if ("number" == typeof t)
                    throw new TypeError('"value" argument must not be a number');
                return "undefined" != typeof ArrayBuffer && t instanceof ArrayBuffer ?
                    (function(e, t, n, i) {
                    if ((t.byteLength, n < 0 || t.byteLength < n))
                        throw new RangeError("'offset' is out of bounds");
                    if (t.byteLength < n + (i || 0))
                        throw new RangeError("'length' is out of bounds");
                    return (
                        (t =
                         void 0 === n && void 0 === i ?
                         new Uint8Array(t) :
                         void 0 === i ?
                         new Uint8Array(t, n) :
                         new Uint8Array(t, n, i)),
                        c.TYPED_ARRAY_SUPPORT ?
                        ((e = t).__proto__ = c.prototype) :
                        (e = f(e, t)),
                        e
                    );
                })(e, t, n, i) :
                "string" == typeof t ?
                    (function(e, t, n) {
                    if (
                        (("string" == typeof n && "" !== n) || (n = "utf8"),
                         !c.isEncoding(n))
                    )
                        throw new TypeError(
                            '"encoding" must be a valid string encoding',
                        );
                    var i = 0 | p(t, n),
                        r = (e = o(e, i)).write(t, n);
                    return r !== i && (e = e.slice(0, r)), e;
                })(e, t, n) :
                (function(e, t) {
                    if (c.isBuffer(t)) {
                        var n = 0 | d(t.length);
                        return 0 === (e = o(e, n)).length || t.copy(e, 0, 0, n), e;
                    }
                    if (t) {
                        if (
                            ("undefined" != typeof ArrayBuffer &&
                             t.buffer instanceof ArrayBuffer) ||
                            "length" in t
                        )
                            return "number" != typeof t.length ||
                                (function(e) {
                                return e != e;
                            })(t.length) ?
                                o(e, 0) :
                            f(e, t);
                        if ("Buffer" === t.type && s(t.data)) return f(e, t.data);
                    }
                    throw new TypeError(
                        "First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.",
                    );
                })(e, t);
            }

            function h(e) {
                if ("number" != typeof e)
                    throw new TypeError('"size" argument must be a number');
                if (e < 0) throw new RangeError('"size" argument must not be negative');
            }

            function u(e, t) {
                if ((h(t), (e = o(e, t < 0 ? 0 : 0 | d(t))), !c.TYPED_ARRAY_SUPPORT))
                    for (var n = 0; n < t; ++n) e[n] = 0;
                return e;
            }

            function f(e, t) {
                var n = t.length < 0 ? 0 : 0 | d(t.length);
                e = o(e, n);
                for (var i = 0; i < n; i += 1) e[i] = 255 & t[i];
                return e;
            }

            function d(e) {
                if (e >= a())
                    throw new RangeError(
                        "Attempt to allocate Buffer larger than maximum size: 0x" +
                        a().toString(16) +
                        " bytes",
                    );
                return 0 | e;
            }

            function p(e, t) {
                if (c.isBuffer(e)) return e.length;
                if (
                    "undefined" != typeof ArrayBuffer &&
                    "function" == typeof ArrayBuffer.isView &&
                    (ArrayBuffer.isView(e) || e instanceof ArrayBuffer)
                )
                    return e.byteLength;
                "string" != typeof e && (e = "" + e);
                var n = e.length;
                if (0 === n) return 0;
                for (var i = !1;;)
                    switch (t) {
                        case "ascii":
                        case "latin1":
                        case "binary":
                            return n;
                        case "utf8":
                        case "utf-8":
                        case void 0:
                            return z(e).length;
                        case "ucs2":
                        case "ucs-2":
                        case "utf16le":
                        case "utf-16le":
                            return 2 * n;
                        case "hex":
                            return n >>> 1;
                        case "base64":
                            return H(e).length;
                        default:
                            if (i) return z(e).length;
                            (t = ("" + t).toLowerCase()), (i = !0);
                    }
            }

            function g(e, t, n) {
                var i = e[t];
                (e[t] = e[n]), (e[n] = i);
            }

            function m(e, t, n, i, r) {
                if (0 === e.length) return -1;
                if (
                    ("string" == typeof n ?
                     ((i = n), (n = 0)) :
                     n > 2147483647 ?
                     (n = 2147483647) :
                     n < -2147483648 && (n = -2147483648),
                     (n = +n),
                     isNaN(n) && (n = r ? 0 : e.length - 1),
                     n < 0 && (n = e.length + n),
                     n >= e.length)
                ) {
                    if (r) return -1;
                    n = e.length - 1;
                } else if (n < 0) {
                    if (!r) return -1;
                    n = 0;
                }
                if (("string" == typeof t && (t = c.from(t, i)), c.isBuffer(t)))
                    return 0 === t.length ? -1 : y(e, t, n, i, r);
                if ("number" == typeof t)
                    return (
                        (t &= 255),
                        c.TYPED_ARRAY_SUPPORT &&
                        "function" == typeof Uint8Array.prototype.indexOf ?
                        r ?
                        Uint8Array.prototype.indexOf.call(e, t, n) :
                        Uint8Array.prototype.lastIndexOf.call(e, t, n) :
                        y(e, [t], n, i, r)
                    );
                throw new TypeError("val must be string, number or Buffer");
            }

            function y(e, t, n, i, r) {
                var s,
                    a = 1,
                    o = e.length,
                    c = t.length;
                if (
                    void 0 !== i &&
                    ("ucs2" === (i = String(i).toLowerCase()) ||
                     "ucs-2" === i ||
                     "utf16le" === i ||
                     "utf-16le" === i)
                ) {
                    if (e.length < 2 || t.length < 2) return -1;
                    (a = 2), (o /= 2), (c /= 2), (n /= 2);
                }

                function l(e, t) {
                    return 1 === a ? e[t] : e.readUInt16BE(t * a);
                }
                if (r) {
                    var h = -1;
                    for (s = n; s < o; s++)
                        if (l(e, s) === l(t, -1 === h ? 0 : s - h)) {
                            if ((-1 === h && (h = s), s - h + 1 === c)) return h * a;
                        } else -1 !== h && (s -= s - h), (h = -1);
                } else
                    for (n + c > o && (n = o - c), s = n; s >= 0; s--) {
                        for (var u = !0, f = 0; f < c; f++)
                            if (l(e, s + f) !== l(t, f)) {
                                u = !1;
                                break;
                            }
                        if (u) return s;
                    }
                return -1;
            }

            function k(e, t, n, i) {
                n = Number(n) || 0;
                var r = e.length - n;
                i ? (i = Number(i)) > r && (i = r) : (i = r);
                var s = t.length;
                if (s % 2 != 0) throw new TypeError("Invalid hex string");
                i > s / 2 && (i = s / 2);
                for (var a = 0; a < i; ++a) {
                    var o = parseInt(t.substr(2 * a, 2), 16);
                    if (isNaN(o)) return a;
                    e[n + a] = o;
                }
                return a;
            }

            function v(e, t, n, i) {
                return V(z(t, e.length - n), e, n, i);
            }

            function w(e, t, n, i) {
                return V(
                    (function(e) {
                        for (var t = [], n = 0; n < e.length; ++n)
                            t.push(255 & e.charCodeAt(n));
                        return t;
                    })(t),
                    e,
                    n,
                    i,
                );
            }

            function b(e, t, n, i) {
                return w(e, t, n, i);
            }

            function x(e, t, n, i) {
                return V(H(t), e, n, i);
            }

            function S(e, t, n, i) {
                return V(
                    (function(e, t) {
                        for (
                            var n, i, r, s = [], a = 0; a < e.length && !((t -= 2) < 0);
                            ++a
                        )
                            (i = (n = e.charCodeAt(a)) >> 8),
                                (r = n % 256),
                                s.push(r),
                                s.push(i);
                        return s;
                    })(t, e.length - n),
                    e,
                    n,
                    i,
                );
            }

            function T(e, t, n) {
                return 0 === t && n === e.length ?
                    i.fromByteArray(e) :
                i.fromByteArray(e.slice(t, n));
            }

            function I(e, t, n) {
                n = Math.min(e.length, n);
                for (var i = [], r = t; r < n;) {
                    var s,
                        a,
                        o,
                        c,
                        l = e[r],
                        h = null,
                        u = l > 239 ? 4 : l > 223 ? 3 : l > 191 ? 2 : 1;
                    if (r + u <= n)
                        switch (u) {
                            case 1:
                                l < 128 && (h = l);
                                break;
                            case 2:
                                128 == (192 & (s = e[r + 1])) &&
                                    (c = ((31 & l) << 6) | (63 & s)) > 127 &&
                                    (h = c);
                                break;
                            case 3:
                                (s = e[r + 1]),
                                    (a = e[r + 2]),
                                    128 == (192 & s) &&
                                    128 == (192 & a) &&
                                    (c = ((15 & l) << 12) | ((63 & s) << 6) | (63 & a)) >
                                    2047 &&
                                    (c < 55296 || c > 57343) &&
                                    (h = c);
                                break;
                            case 4:
                                (s = e[r + 1]),
                                    (a = e[r + 2]),
                                    (o = e[r + 3]),
                                    128 == (192 & s) &&
                                    128 == (192 & a) &&
                                    128 == (192 & o) &&
                                    (c =
                                     ((15 & l) << 18) |
                                     ((63 & s) << 12) |
                                     ((63 & a) << 6) |
                                     (63 & o)) > 65535 &&
                                    c < 1114112 &&
                                    (h = c);
                        }
                    null === h ?
                        ((h = 65533), (u = 1)) :
                    h > 65535 &&
                        ((h -= 65536),
                         i.push(((h >>> 10) & 1023) | 55296),
                         (h = 56320 | (1023 & h))),
                        i.push(h),
                        (r += u);
                }
                return (function(e) {
                    var t = e.length;
                    if (t <= E) return String.fromCharCode.apply(String, e);
                    for (var n = "", i = 0; i < t;)
                        n += String.fromCharCode.apply(String, e.slice(i, (i += E)));
                    return n;
                })(i);
            }
            (t.Buffer = c),
                (t.SlowBuffer = function(e) {
                return +e != e && (e = 0), c.alloc(+e);
            }),
                (t.INSPECT_MAX_BYTES = 50),
                (c.TYPED_ARRAY_SUPPORT =
                 void 0 !== e.TYPED_ARRAY_SUPPORT ?
                 e.TYPED_ARRAY_SUPPORT :
                 (function() {
                try {
                    var e = new Uint8Array(1);
                    return (
                        (e.__proto__ = {
                            __proto__: Uint8Array.prototype,
                            foo: function() {
                                return 42;
                            },
                        }),
                        42 === e.foo() &&
                        "function" == typeof e.subarray &&
                        0 === e.subarray(1, 1).byteLength
                    );
                } catch (e) {
                    return !1;
                }
            })()),
                (t.kMaxLength = a()),
                (c.poolSize = 8192),
                (c._augment = function(e) {
                return (e.__proto__ = c.prototype), e;
            }),
                (c.from = function(e, t, n) {
                return l(null, e, t, n);
            }),
                c.TYPED_ARRAY_SUPPORT &&
                ((c.prototype.__proto__ = Uint8Array.prototype),
                 (c.__proto__ = Uint8Array),
                 "undefined" != typeof Symbol &&
                 Symbol.species &&
                 c[Symbol.species] === c &&
                 Object.defineProperty(c, Symbol.species, {
                value: null,
                configurable: !0,
            })),
                (c.alloc = function(e, t, n) {
                return (function(e, t, n, i) {
                    return (
                        h(t),
                        t <= 0 ?
                        o(e, t) :
                        void 0 !== n ?
                        "string" == typeof i ?
                        o(e, t).fill(n, i) :
                        o(e, t).fill(n) :
                        o(e, t)
                    );
                })(null, e, t, n);
            }),
                (c.allocUnsafe = function(e) {
                return u(null, e);
            }),
                (c.allocUnsafeSlow = function(e) {
                return u(null, e);
            }),
                (c.isBuffer = function(e) {
                return !(null == e || !e._isBuffer);
            }),
                (c.compare = function(e, t) {
                if (!c.isBuffer(e) || !c.isBuffer(t))
                    throw new TypeError("Arguments must be Buffers");
                if (e === t) return 0;
                for (
                    var n = e.length, i = t.length, r = 0, s = Math.min(n, i); r < s;
                    ++r
                )
                    if (e[r] !== t[r]) {
                        (n = e[r]), (i = t[r]);
                        break;
                    }
                return n < i ? -1 : i < n ? 1 : 0;
            }),
                (c.isEncoding = function(e) {
                switch (String(e).toLowerCase()) {
                    case "hex":
                    case "utf8":
                    case "utf-8":
                    case "ascii":
                    case "latin1":
                    case "binary":
                    case "base64":
                    case "ucs2":
                    case "ucs-2":
                    case "utf16le":
                    case "utf-16le":
                        return !0;
                    default:
                        return !1;
                }
            }),
                (c.concat = function(e, t) {
                if (!s(e))
                    throw new TypeError('"list" argument must be an Array of Buffers');
                if (0 === e.length) return c.alloc(0);
                var n;
                if (void 0 === t)
                    for (t = 0, n = 0; n < e.length; ++n) t += e[n].length;
                var i = c.allocUnsafe(t),
                    r = 0;
                for (n = 0; n < e.length; ++n) {
                    var a = e[n];
                    if (!c.isBuffer(a))
                        throw new TypeError(
                            '"list" argument must be an Array of Buffers',
                        );
                    a.copy(i, r), (r += a.length);
                }
                return i;
            }),
                (c.byteLength = p),
                (c.prototype._isBuffer = !0),
                (c.prototype.swap16 = function() {
                var e = this.length;
                if (e % 2 != 0)
                    throw new RangeError("Buffer size must be a multiple of 16-bits");
                for (var t = 0; t < e; t += 2) g(this, t, t + 1);
                return this;
            }),
                (c.prototype.swap32 = function() {
                var e = this.length;
                if (e % 4 != 0)
                    throw new RangeError("Buffer size must be a multiple of 32-bits");
                for (var t = 0; t < e; t += 4)
                    g(this, t, t + 3), g(this, t + 1, t + 2);
                return this;
            }),
                (c.prototype.swap64 = function() {
                var e = this.length;
                if (e % 8 != 0)
                    throw new RangeError("Buffer size must be a multiple of 64-bits");
                for (var t = 0; t < e; t += 8)
                    g(this, t, t + 7),
                        g(this, t + 1, t + 6),
                        g(this, t + 2, t + 5),
                        g(this, t + 3, t + 4);
                return this;
            }),
                (c.prototype.toString = function() {
                var e = 0 | this.length;
                return 0 === e ?
                    "" :
                0 === arguments.length ?
                    I(this, 0, e) :
                function(e, t, n) {
                    var i = !1;
                    if (((void 0 === t || t < 0) && (t = 0), t > this.length))
                        return "";
                    if (
                        ((void 0 === n || n > this.length) && (n = this.length),
                         n <= 0)
                    )
                        return "";
                    if ((n >>>= 0) <= (t >>>= 0)) return "";
                    for (e || (e = "utf8");;)
                        switch (e) {
                            case "hex":
                                return P(this, t, n);
                            case "utf8":
                            case "utf-8":
                                return I(this, t, n);
                            case "ascii":
                                return M(this, t, n);
                            case "latin1":
                            case "binary":
                                return A(this, t, n);
                            case "base64":
                                return T(this, t, n);
                            case "ucs2":
                            case "ucs-2":
                            case "utf16le":
                            case "utf-16le":
                                return B(this, t, n);
                            default:
                                if (i) throw new TypeError("Unknown encoding: " + e);
                                (e = (e + "").toLowerCase()), (i = !0);
                        }
                }.apply(this, arguments);
            }),
                (c.prototype.equals = function(e) {
                if (!c.isBuffer(e)) throw new TypeError("Argument must be a Buffer");
                return this === e || 0 === c.compare(this, e);
            }),
                (c.prototype.inspect = function() {
                var e = "",
                    n = t.INSPECT_MAX_BYTES;
                return (
                    this.length > 0 &&
                    ((e = this.toString("hex", 0, n).match(/.{2}/g).join(" ")),
                     this.length > n && (e += " ... ")),
                    "<Buffer " + e + ">"
                );
            }),
                (c.prototype.compare = function(e, t, n, i, r) {
                if (!c.isBuffer(e)) throw new TypeError("Argument must be a Buffer");
                if (
                    (void 0 === t && (t = 0),
                     void 0 === n && (n = e ? e.length : 0),
                     void 0 === i && (i = 0),
                     void 0 === r && (r = this.length),
                     t < 0 || n > e.length || i < 0 || r > this.length)
                )
                    throw new RangeError("out of range index");
                if (i >= r && t >= n) return 0;
                if (i >= r) return -1;
                if (t >= n) return 1;
                if (this === e) return 0;
                for (
                    var s = (r >>>= 0) - (i >>>= 0),
                    a = (n >>>= 0) - (t >>>= 0),
                    o = Math.min(s, a),
                    l = this.slice(i, r),
                    h = e.slice(t, n),
                    u = 0; u < o;
                    ++u
                )
                    if (l[u] !== h[u]) {
                        (s = l[u]), (a = h[u]);
                        break;
                    }
                return s < a ? -1 : a < s ? 1 : 0;
            }),
                (c.prototype.includes = function(e, t, n) {
                return -1 !== this.indexOf(e, t, n);
            }),
                (c.prototype.indexOf = function(e, t, n) {
                return m(this, e, t, n, !0);
            }),
                (c.prototype.lastIndexOf = function(e, t, n) {
                return m(this, e, t, n, !1);
            }),
                (c.prototype.write = function(e, t, n, i) {
                if (void 0 === t)(i = "utf8"), (n = this.length), (t = 0);
                else if (void 0 === n && "string" == typeof t)
                    (i = t), (n = this.length), (t = 0);
                else {
                    if (!isFinite(t))
                        throw new Error(
                            "Buffer.write(string, encoding, offset[, length]) is no longer supported",
                        );
                    (t |= 0),
                        isFinite(n) ?
                        ((n |= 0), void 0 === i && (i = "utf8")) :
                    ((i = n), (n = void 0));
                }
                var r = this.length - t;
                if (
                    ((void 0 === n || n > r) && (n = r),
                     (e.length > 0 && (n < 0 || t < 0)) || t > this.length)
                )
                    throw new RangeError("Attempt to write outside buffer bounds");
                i || (i = "utf8");
                for (var s = !1;;)
                    switch (i) {
                        case "hex":
                            return k(this, e, t, n);
                        case "utf8":
                        case "utf-8":
                            return v(this, e, t, n);
                        case "ascii":
                            return w(this, e, t, n);
                        case "latin1":
                        case "binary":
                            return b(this, e, t, n);
                        case "base64":
                            return x(this, e, t, n);
                        case "ucs2":
                        case "ucs-2":
                        case "utf16le":
                        case "utf-16le":
                            return S(this, e, t, n);
                        default:
                            if (s) throw new TypeError("Unknown encoding: " + i);
                            (i = ("" + i).toLowerCase()), (s = !0);
                    }
            }),
                (c.prototype.toJSON = function() {
                return {
                    type: "Buffer",
                    data: Array.prototype.slice.call(this._arr || this, 0),
                };
            });
            var E = 4096;

            function M(e, t, n) {
                var i = "";
                n = Math.min(e.length, n);
                for (var r = t; r < n; ++r) i += String.fromCharCode(127 & e[r]);
                return i;
            }

            function A(e, t, n) {
                var i = "";
                n = Math.min(e.length, n);
                for (var r = t; r < n; ++r) i += String.fromCharCode(e[r]);
                return i;
            }

            function P(e, t, n) {
                var i = e.length;
                (!t || t < 0) && (t = 0), (!n || n < 0 || n > i) && (n = i);
                for (var r = "", s = t; s < n; ++s) r += F(e[s]);
                return r;
            }

            function B(e, t, n) {
                for (var i = e.slice(t, n), r = "", s = 0; s < i.length; s += 2)
                    r += String.fromCharCode(i[s] + 256 * i[s + 1]);
                return r;
            }

            function C(e, t, n) {
                if (e % 1 != 0 || e < 0) throw new RangeError("offset is not uint");
                if (e + t > n)
                    throw new RangeError("Trying to access beyond buffer length");
            }

            function O(e, t, n, i, r, s) {
                if (!c.isBuffer(e))
                    throw new TypeError('"buffer" argument must be a Buffer instance');
                if (t > r || t < s)
                    throw new RangeError('"value" argument is out of bounds');
                if (n + i > e.length) throw new RangeError("Index out of range");
            }

            function R(e, t, n, i) {
                t < 0 && (t = 65535 + t + 1);
                for (var r = 0, s = Math.min(e.length - n, 2); r < s; ++r)
                    e[n + r] =
                        (t & (255 << (8 * (i ? r : 1 - r)))) >>> (8 * (i ? r : 1 - r));
            }

            function j(e, t, n, i) {
                t < 0 && (t = 4294967295 + t + 1);
                for (var r = 0, s = Math.min(e.length - n, 4); r < s; ++r)
                    e[n + r] = (t >>> (8 * (i ? r : 3 - r))) & 255;
            }

            function _(e, t, n, i, r, s) {
                if (n + i > e.length) throw new RangeError("Index out of range");
                if (n < 0) throw new RangeError("Index out of range");
            }

            function U(e, t, n, i, s) {
                return s || _(e, 0, n, 4), r.write(e, t, n, i, 23, 4), n + 4;
            }

            function D(e, t, n, i, s) {
                return s || _(e, 0, n, 8), r.write(e, t, n, i, 52, 8), n + 8;
            }
            (c.prototype.slice = function(e, t) {
                var n,
                    i = this.length;
                if (
                    ((e = ~~e) < 0 ? (e += i) < 0 && (e = 0) : e > i && (e = i),
                     (t = void 0 === t ? i : ~~t) < 0 ?
                     (t += i) < 0 && (t = 0) :
                     t > i && (t = i),
                     t < e && (t = e),
                     c.TYPED_ARRAY_SUPPORT)
                )
                    (n = this.subarray(e, t)).__proto__ = c.prototype;
                else {
                    var r = t - e;
                    n = new c(r, void 0);
                    for (var s = 0; s < r; ++s) n[s] = this[s + e];
                }
                return n;
            }),
                (c.prototype.readUIntLE = function(e, t, n) {
                (e |= 0), (t |= 0), n || C(e, t, this.length);
                for (var i = this[e], r = 1, s = 0; ++s < t && (r *= 256);)
                    i += this[e + s] * r;
                return i;
            }),
                (c.prototype.readUIntBE = function(e, t, n) {
                (e |= 0), (t |= 0), n || C(e, t, this.length);
                for (var i = this[e + --t], r = 1; t > 0 && (r *= 256);)
                    i += this[e + --t] * r;
                return i;
            }),
                (c.prototype.readUInt8 = function(e, t) {
                return t || C(e, 1, this.length), this[e];
            }),
                (c.prototype.readUInt16LE = function(e, t) {
                return t || C(e, 2, this.length), this[e] | (this[e + 1] << 8);
            }),
                (c.prototype.readUInt16BE = function(e, t) {
                return t || C(e, 2, this.length), (this[e] << 8) | this[e + 1];
            }),
                (c.prototype.readUInt32LE = function(e, t) {
                return (
                    t || C(e, 4, this.length),
                    (this[e] | (this[e + 1] << 8) | (this[e + 2] << 16)) +
                    16777216 * this[e + 3]
                );
            }),
                (c.prototype.readUInt32BE = function(e, t) {
                return (
                    t || C(e, 4, this.length),
                    16777216 * this[e] +
                    ((this[e + 1] << 16) | (this[e + 2] << 8) | this[e + 3])
                );
            }),
                (c.prototype.readIntLE = function(e, t, n) {
                (e |= 0), (t |= 0), n || C(e, t, this.length);
                for (var i = this[e], r = 1, s = 0; ++s < t && (r *= 256);)
                    i += this[e + s] * r;
                return i >= (r *= 128) && (i -= Math.pow(2, 8 * t)), i;
            }),
                (c.prototype.readIntBE = function(e, t, n) {
                (e |= 0), (t |= 0), n || C(e, t, this.length);
                for (var i = t, r = 1, s = this[e + --i]; i > 0 && (r *= 256);)
                    s += this[e + --i] * r;
                return s >= (r *= 128) && (s -= Math.pow(2, 8 * t)), s;
            }),
                (c.prototype.readInt8 = function(e, t) {
                return (
                    t || C(e, 1, this.length),
                    128 & this[e] ? -1 * (255 - this[e] + 1) : this[e]
                );
            }),
                (c.prototype.readInt16LE = function(e, t) {
                t || C(e, 2, this.length);
                var n = this[e] | (this[e + 1] << 8);
                return 32768 & n ? 4294901760 | n : n;
            }),
                (c.prototype.readInt16BE = function(e, t) {
                t || C(e, 2, this.length);
                var n = this[e + 1] | (this[e] << 8);
                return 32768 & n ? 4294901760 | n : n;
            }),
                (c.prototype.readInt32LE = function(e, t) {
                return (
                    t || C(e, 4, this.length),
                    this[e] |
                    (this[e + 1] << 8) |
                    (this[e + 2] << 16) |
                    (this[e + 3] << 24)
                );
            }),
                (c.prototype.readInt32BE = function(e, t) {
                return (
                    t || C(e, 4, this.length),
                    (this[e] << 24) |
                    (this[e + 1] << 16) |
                    (this[e + 2] << 8) |
                    this[e + 3]
                );
            }),
                (c.prototype.readFloatLE = function(e, t) {
                return t || C(e, 4, this.length), r.read(this, e, !0, 23, 4);
            }),
                (c.prototype.readFloatBE = function(e, t) {
                return t || C(e, 4, this.length), r.read(this, e, !1, 23, 4);
            }),
                (c.prototype.readDoubleLE = function(e, t) {
                return t || C(e, 8, this.length), r.read(this, e, !0, 52, 8);
            }),
                (c.prototype.readDoubleBE = function(e, t) {
                return t || C(e, 8, this.length), r.read(this, e, !1, 52, 8);
            }),
                (c.prototype.writeUIntLE = function(e, t, n, i) {
                (e = +e),
                    (t |= 0),
                    (n |= 0),
                    i || O(this, e, t, n, Math.pow(2, 8 * n) - 1, 0);
                var r = 1,
                    s = 0;
                for (this[t] = 255 & e; ++s < n && (r *= 256);)
                    this[t + s] = (e / r) & 255;
                return t + n;
            }),
                (c.prototype.writeUIntBE = function(e, t, n, i) {
                (e = +e),
                    (t |= 0),
                    (n |= 0),
                    i || O(this, e, t, n, Math.pow(2, 8 * n) - 1, 0);
                var r = n - 1,
                    s = 1;
                for (this[t + r] = 255 & e; --r >= 0 && (s *= 256);)
                    this[t + r] = (e / s) & 255;
                return t + n;
            }),
                (c.prototype.writeUInt8 = function(e, t, n) {
                return (
                    (e = +e),
                    (t |= 0),
                    n || O(this, e, t, 1, 255, 0),
                    c.TYPED_ARRAY_SUPPORT || (e = Math.floor(e)),
                    (this[t] = 255 & e),
                    t + 1
                );
            }),
                (c.prototype.writeUInt16LE = function(e, t, n) {
                return (
                    (e = +e),
                    (t |= 0),
                    n || O(this, e, t, 2, 65535, 0),
                    c.TYPED_ARRAY_SUPPORT ?
                    ((this[t] = 255 & e), (this[t + 1] = e >>> 8)) :
                    R(this, e, t, !0),
                    t + 2
                );
            }),
                (c.prototype.writeUInt16BE = function(e, t, n) {
                return (
                    (e = +e),
                    (t |= 0),
                    n || O(this, e, t, 2, 65535, 0),
                    c.TYPED_ARRAY_SUPPORT ?
                    ((this[t] = e >>> 8), (this[t + 1] = 255 & e)) :
                    R(this, e, t, !1),
                    t + 2
                );
            }),
                (c.prototype.writeUInt32LE = function(e, t, n) {
                return (
                    (e = +e),
                    (t |= 0),
                    n || O(this, e, t, 4, 4294967295, 0),
                    c.TYPED_ARRAY_SUPPORT ?
                    ((this[t + 3] = e >>> 24),
                     (this[t + 2] = e >>> 16),
                     (this[t + 1] = e >>> 8),
                     (this[t] = 255 & e)) :
                    j(this, e, t, !0),
                    t + 4
                );
            }),
                (c.prototype.writeUInt32BE = function(e, t, n) {
                return (
                    (e = +e),
                    (t |= 0),
                    n || O(this, e, t, 4, 4294967295, 0),
                    c.TYPED_ARRAY_SUPPORT ?
                    ((this[t] = e >>> 24),
                     (this[t + 1] = e >>> 16),
                     (this[t + 2] = e >>> 8),
                     (this[t + 3] = 255 & e)) :
                    j(this, e, t, !1),
                    t + 4
                );
            }),
                (c.prototype.writeIntLE = function(e, t, n, i) {
                if (((e = +e), (t |= 0), !i)) {
                    var r = Math.pow(2, 8 * n - 1);
                    O(this, e, t, n, r - 1, -r);
                }
                var s = 0,
                    a = 1,
                    o = 0;
                for (this[t] = 255 & e; ++s < n && (a *= 256);)
                    e < 0 && 0 === o && 0 !== this[t + s - 1] && (o = 1),
                        (this[t + s] = (((e / a) >> 0) - o) & 255);
                return t + n;
            }),
                (c.prototype.writeIntBE = function(e, t, n, i) {
                if (((e = +e), (t |= 0), !i)) {
                    var r = Math.pow(2, 8 * n - 1);
                    O(this, e, t, n, r - 1, -r);
                }
                var s = n - 1,
                    a = 1,
                    o = 0;
                for (this[t + s] = 255 & e; --s >= 0 && (a *= 256);)
                    e < 0 && 0 === o && 0 !== this[t + s + 1] && (o = 1),
                        (this[t + s] = (((e / a) >> 0) - o) & 255);
                return t + n;
            }),
                (c.prototype.writeInt8 = function(e, t, n) {
                return (
                    (e = +e),
                    (t |= 0),
                    n || O(this, e, t, 1, 127, -128),
                    c.TYPED_ARRAY_SUPPORT || (e = Math.floor(e)),
                    e < 0 && (e = 255 + e + 1),
                    (this[t] = 255 & e),
                    t + 1
                );
            }),
                (c.prototype.writeInt16LE = function(e, t, n) {
                return (
                    (e = +e),
                    (t |= 0),
                    n || O(this, e, t, 2, 32767, -32768),
                    c.TYPED_ARRAY_SUPPORT ?
                    ((this[t] = 255 & e), (this[t + 1] = e >>> 8)) :
                    R(this, e, t, !0),
                    t + 2
                );
            }),
                (c.prototype.writeInt16BE = function(e, t, n) {
                return (
                    (e = +e),
                    (t |= 0),
                    n || O(this, e, t, 2, 32767, -32768),
                    c.TYPED_ARRAY_SUPPORT ?
                    ((this[t] = e >>> 8), (this[t + 1] = 255 & e)) :
                    R(this, e, t, !1),
                    t + 2
                );
            }),
                (c.prototype.writeInt32LE = function(e, t, n) {
                return (
                    (e = +e),
                    (t |= 0),
                    n || O(this, e, t, 4, 2147483647, -2147483648),
                    c.TYPED_ARRAY_SUPPORT ?
                    ((this[t] = 255 & e),
                     (this[t + 1] = e >>> 8),
                     (this[t + 2] = e >>> 16),
                     (this[t + 3] = e >>> 24)) :
                    j(this, e, t, !0),
                    t + 4
                );
            }),
                (c.prototype.writeInt32BE = function(e, t, n) {
                return (
                    (e = +e),
                    (t |= 0),
                    n || O(this, e, t, 4, 2147483647, -2147483648),
                    e < 0 && (e = 4294967295 + e + 1),
                    c.TYPED_ARRAY_SUPPORT ?
                    ((this[t] = e >>> 24),
                     (this[t + 1] = e >>> 16),
                     (this[t + 2] = e >>> 8),
                     (this[t + 3] = 255 & e)) :
                    j(this, e, t, !1),
                    t + 4
                );
            }),
                (c.prototype.writeFloatLE = function(e, t, n) {
                return U(this, e, t, !0, n);
            }),
                (c.prototype.writeFloatBE = function(e, t, n) {
                return U(this, e, t, !1, n);
            }),
                (c.prototype.writeDoubleLE = function(e, t, n) {
                return D(this, e, t, !0, n);
            }),
                (c.prototype.writeDoubleBE = function(e, t, n) {
                return D(this, e, t, !1, n);
            }),
                (c.prototype.copy = function(e, t, n, i) {
                if (
                    (n || (n = 0),
                     i || 0 === i || (i = this.length),
                     t >= e.length && (t = e.length),
                     t || (t = 0),
                     i > 0 && i < n && (i = n),
                     i === n)
                )
                    return 0;
                if (0 === e.length || 0 === this.length) return 0;
                if (t < 0) throw new RangeError("targetStart out of bounds");
                if (n < 0 || n >= this.length)
                    throw new RangeError("sourceStart out of bounds");
                if (i < 0) throw new RangeError("sourceEnd out of bounds");
                i > this.length && (i = this.length),
                    e.length - t < i - n && (i = e.length - t + n);
                var r,
                    s = i - n;
                if (this === e && n < t && t < i)
                    for (r = s - 1; r >= 0; --r) e[r + t] = this[r + n];
                else if (s < 1e3 || !c.TYPED_ARRAY_SUPPORT)
                    for (r = 0; r < s; ++r) e[r + t] = this[r + n];
                else Uint8Array.prototype.set.call(e, this.subarray(n, n + s), t);
                return s;
            }),
                (c.prototype.fill = function(e, t, n, i) {
                if ("string" == typeof e) {
                    if (
                        ("string" == typeof t ?
                         ((i = t), (t = 0), (n = this.length)) :
                         "string" == typeof n && ((i = n), (n = this.length)),
                         1 === e.length)
                    ) {
                        var r = e.charCodeAt(0);
                        r < 256 && (e = r);
                    }
                    if (void 0 !== i && "string" != typeof i)
                        throw new TypeError("encoding must be a string");
                    if ("string" == typeof i && !c.isEncoding(i))
                        throw new TypeError("Unknown encoding: " + i);
                } else "number" == typeof e && (e &= 255);
                if (t < 0 || this.length < t || this.length < n)
                    throw new RangeError("Out of range index");
                if (n <= t) return this;
                var s;
                if (
                    ((t >>>= 0),
                     (n = void 0 === n ? this.length : n >>> 0),
                     e || (e = 0),
                     "number" == typeof e)
                )
                    for (s = t; s < n; ++s) this[s] = e;
                else {
                    var a = c.isBuffer(e) ? e : z(new c(e, i).toString()),
                        o = a.length;
                    for (s = 0; s < n - t; ++s) this[s + t] = a[s % o];
                }
                return this;
            });
            var L = /[^+\/0-9A-Za-z-_]/g;

            function F(e) {
                return e < 16 ? "0" + e.toString(16) : e.toString(16);
            }

            function z(e, t) {
                var n;
                t = t || 1 / 0;
                for (var i = e.length, r = null, s = [], a = 0; a < i; ++a) {
                    if ((n = e.charCodeAt(a)) > 55295 && n < 57344) {
                        if (!r) {
                            if (n > 56319) {
                                (t -= 3) > -1 && s.push(239, 191, 189);
                                continue;
                            }
                            if (a + 1 === i) {
                                (t -= 3) > -1 && s.push(239, 191, 189);
                                continue;
                            }
                            r = n;
                            continue;
                        }
                        if (n < 56320) {
                            (t -= 3) > -1 && s.push(239, 191, 189), (r = n);
                            continue;
                        }
                        n = 65536 + (((r - 55296) << 10) | (n - 56320));
                    } else r && (t -= 3) > -1 && s.push(239, 191, 189);
                    if (((r = null), n < 128)) {
                        if ((t -= 1) < 0) break;
                        s.push(n);
                    } else if (n < 2048) {
                        if ((t -= 2) < 0) break;
                        s.push((n >> 6) | 192, (63 & n) | 128);
                    } else if (n < 65536) {
                        if ((t -= 3) < 0) break;
                        s.push((n >> 12) | 224, ((n >> 6) & 63) | 128, (63 & n) | 128);
                    } else {
                        if (!(n < 1114112)) throw new Error("Invalid code point");
                        if ((t -= 4) < 0) break;
                        s.push(
                            (n >> 18) | 240,
                            ((n >> 12) & 63) | 128,
                            ((n >> 6) & 63) | 128,
                            (63 & n) | 128,
                        );
                    }
                }
                return s;
            }

            function H(e) {
                return i.toByteArray(
                    (function(e) {
                        if (
                            (e = (function(e) {
                                return e.trim ? e.trim() : e.replace(/^\s+|\s+$/g, "");
                            })(e).replace(L, "")).length < 2
                        )
                            return "";
                        for (; e.length % 4 != 0;) e += "=";
                        return e;
                    })(e),
                );
            }

            function V(e, t, n, i) {
                for (var r = 0; r < i && !(r + n >= t.length || r >= e.length); ++r)
                    t[r + n] = e[r];
                return r;
            }
        }.call(this, n(12)));
    },
    function(e, t) {
        var n;
        n = (function() {
            return this;
        })();
        try {
            n = n || new Function("return this")();
        } catch (e) {
            "object" == typeof window && (n = window);
        }
        e.exports = n;
    },
    function(e, t) {
        for (var n = (t.uint8 = new Array(256)), i = 0; i <= 255; i++) n[i] = r(i);

        function r(e) {
            return function(t) {
                var n = t.reserve(1);
                t.buffer[n] = e;
            };
        }
    },
    function(e, t, n) {
        (t.FlexDecoder = s), (t.FlexEncoder = a);
        var i = n(0),
            r = "BUFFER_SHORTAGE";

        function s() {
            if (!(this instanceof s)) return new s();
        }

        function a() {
            if (!(this instanceof a)) return new a();
        }

        function o() {
            throw new Error("method not implemented: write()");
        }

        function c() {
            throw new Error("method not implemented: fetch()");
        }

        function l() {
            return this.buffers && this.buffers.length ?
                (this.flush(), this.pull()) :
            this.fetch();
        }

        function h(e) {
            (this.buffers || (this.buffers = [])).push(e);
        }

        function u() {
            return (this.buffers || (this.buffers = [])).shift();
        }

        function f(e) {
            return function(t) {
                for (var n in e) t[n] = e[n];
                return t;
            };
        }
        (s.mixin = f({
            bufferish: i,
            write: function(e) {
                var t = this.offset ?
                    i.prototype.slice.call(this.buffer, this.offset) :
                this.buffer;
                (this.buffer = t ? (e ? this.bufferish.concat([t, e]) : t) : e),
                    (this.offset = 0);
            },
            fetch: c,
            flush: function() {
                for (; this.offset < this.buffer.length;) {
                    var e,
                        t = this.offset;
                    try {
                        e = this.fetch();
                    } catch (e) {
                        if (e && e.message != r) throw e;
                        this.offset = t;
                        break;
                    }
                    this.push(e);
                }
            },
            push: h,
            pull: u,
            read: l,
            reserve: function(e) {
                var t = this.offset,
                    n = t + e;
                if (n > this.buffer.length) throw new Error(r);
                return (this.offset = n), t;
            },
            offset: 0,
        })),
            s.mixin(s.prototype),
            (a.mixin = f({
            bufferish: i,
            write: o,
            fetch: function() {
                var e = this.start;
                if (e < this.offset) {
                    var t = (this.start = this.offset);
                    return i.prototype.slice.call(this.buffer, e, t);
                }
            },
            flush: function() {
                for (; this.start < this.offset;) {
                    var e = this.fetch();
                    e && this.push(e);
                }
            },
            push: h,
            pull: function() {
                var e = this.buffers || (this.buffers = []),
                    t = e.length > 1 ? this.bufferish.concat(e) : e[0];
                return (e.length = 0), t;
            },
            read: l,
            reserve: function(e) {
                var t = 0 | e;
                if (this.buffer) {
                    var n = this.buffer.length,
                        i = 0 | this.offset,
                        r = i + t;
                    if (r < n) return (this.offset = r), i;
                    this.flush(),
                        (e = Math.max(e, Math.min(2 * n, this.maxBufferSize)));
                }
                return (
                    (e = Math.max(e, this.minBufferSize)),
                    (this.buffer = this.bufferish.alloc(e)),
                    (this.start = 0),
                    (this.offset = t),
                    0
                );
            },
            send: function(e) {
                var t = e.length;
                if (t > this.minBufferSize) this.flush(), this.push(e);
                else {
                    var n = this.reserve(t);
                    i.prototype.copy.call(e, this.buffer, n);
                }
            },
            maxBufferSize: 65536,
            minBufferSize: 2048,
            offset: 0,
            start: 0,
        })),
            a.mixin(a.prototype);
    },
    function(e, t, n) {
        t.decode = function(e, t) {
            var n = new i(t);
            return n.write(e), n.read();
        };
        var i = n(16).DecodeBuffer;
    },
    function(e, t, n) {
        t.DecodeBuffer = r;
        var i = n(8).preset;

        function r(e) {
            if (!(this instanceof r)) return new r(e);
            if (e && ((this.options = e), e.codec)) {
                var t = (this.codec = e.codec);
                t.bufferish && (this.bufferish = t.bufferish);
            }
        }
        n(14).FlexDecoder.mixin(r.prototype),
            (r.prototype.codec = i),
            (r.prototype.fetch = function() {
            return this.codec.decode(this);
        });
    },
    function(e, t, n) {
        var i = n(4),
            r = n(7),
            s = r.Uint64BE,
            a = r.Int64BE;
        (t.getReadFormat = function(e) {
            var t = o.hasArrayBuffer && e && e.binarraybuffer,
                n = e && e.int64;
            return {
                map: l && e && e.usemap ? u : h,
                array: f,
                str: d,
                bin: t ? g : p,
                ext: m,
                uint8: y,
                uint16: v,
                uint32: b,
                uint64: S(8, n ? E : T),
                int8: k,
                int16: w,
                int32: x,
                int64: S(8, n ? M : I),
                float32: S(4, A),
                float64: S(8, P),
            };
        }),
            (t.readUint8 = y);
        var o = n(0),
            c = n(6),
            l = "undefined" != typeof Map;

        function h(e, t) {
            var n,
                i = {},
                r = new Array(t),
                s = new Array(t),
                a = e.codec.decode;
            for (n = 0; n < t; n++)(r[n] = a(e)), (s[n] = a(e));
            for (n = 0; n < t; n++) i[r[n]] = s[n];
            return i;
        }

        function u(e, t) {
            var n,
                i = new Map(),
                r = new Array(t),
                s = new Array(t),
                a = e.codec.decode;
            for (n = 0; n < t; n++)(r[n] = a(e)), (s[n] = a(e));
            for (n = 0; n < t; n++) i.set(r[n], s[n]);
            return i;
        }

        function f(e, t) {
            for (var n = new Array(t), i = e.codec.decode, r = 0; r < t; r++)
                n[r] = i(e);
            return n;
        }

        function d(e, t) {
            var n = e.reserve(t),
                i = n + t;
            return c.toString.call(e.buffer, "utf-8", n, i);
        }

        function p(e, t) {
            var n = e.reserve(t),
                i = n + t,
                r = c.slice.call(e.buffer, n, i);
            return o.from(r);
        }

        function g(e, t) {
            var n = e.reserve(t),
                i = n + t,
                r = c.slice.call(e.buffer, n, i);
            return o.Uint8Array.from(r).buffer;
        }

        function m(e, t) {
            var n = e.reserve(t + 1),
                i = e.buffer[n++],
                r = n + t,
                s = e.codec.getExtUnpacker(i);
            if (!s)
                throw new Error("Invalid ext type: " + (i ? "0x" + i.toString(16) : i));
            return s(c.slice.call(e.buffer, n, r));
        }

        function y(e) {
            var t = e.reserve(1);
            return e.buffer[t];
        }

        function k(e) {
            var t = e.reserve(1),
                n = e.buffer[t];
            return 128 & n ? n - 256 : n;
        }

        function v(e) {
            var t = e.reserve(2),
                n = e.buffer;
            return (n[t++] << 8) | n[t];
        }

        function w(e) {
            var t = e.reserve(2),
                n = e.buffer,
                i = (n[t++] << 8) | n[t];
            return 32768 & i ? i - 65536 : i;
        }

        function b(e) {
            var t = e.reserve(4),
                n = e.buffer;
            return 16777216 * n[t++] + (n[t++] << 16) + (n[t++] << 8) + n[t];
        }

        function x(e) {
            var t = e.reserve(4),
                n = e.buffer;
            return (n[t++] << 24) | (n[t++] << 16) | (n[t++] << 8) | n[t];
        }

        function S(e, t) {
            return function(n) {
                var i = n.reserve(e);
                return t.call(n.buffer, i, !0);
            };
        }

        function T(e) {
            return new s(this, e).toNumber();
        }

        function I(e) {
            return new a(this, e).toNumber();
        }

        function E(e) {
            return new s(this, e);
        }

        function M(e) {
            return new a(this, e);
        }

        function A(e) {
            return i.read(this, e, !1, 23, 4);
        }

        function P(e) {
            return i.read(this, e, !1, 52, 8);
        }
    },
    function(e, t, n) {
        !(function(t) {
            e.exports = t;
            var n = "listeners",
                i = {
                    on: function(e, t) {
                        return a(this, e).push(t), this;
                    },
                    once: function(e, t) {
                        var n = this;
                        return (i.originalListener = t), a(n, e).push(i), n;

                        function i() {
                            s.call(n, e, i), t.apply(this, arguments);
                        }
                    },
                    off: s,
                    emit: function(e, t) {
                        var n = this,
                            i = a(n, e, !0);
                        if (!i) return !1;
                        var r = arguments.length;
                        if (1 === r)
                            i.forEach(function(e) {
                                e.call(n);
                            });
                        else if (2 === r)
                            i.forEach(function(e) {
                                e.call(n, t);
                            });
                        else {
                            var s = Array.prototype.slice.call(arguments, 1);
                            i.forEach(function(e) {
                                e.apply(n, s);
                            });
                        }
                        return !!i.length;
                    },
                };

            function r(e) {
                for (var t in i) e[t] = i[t];
                return e;
            }

            function s(e, t) {
                var i;
                if (arguments.length) {
                    if (t) {
                        if ((i = a(this, e, !0))) {
                            if (
                                !(i = i.filter(function(e) {
                                    return e !== t && e.originalListener !== t;
                                })).length
                            )
                                return s.call(this, e);
                            this[n][e] = i;
                        }
                    } else if ((i = this[n]) && (delete i[e], !Object.keys(i).length))
                        return s.call(this);
                } else delete this[n];
                return this;
            }

            function a(e, t, i) {
                if (!i || e[n]) {
                    var r = e[n] || (e[n] = {});
                    return r[t] || (r[t] = []);
                }
            }
            r(t.prototype), (t.mixin = r);
        })(
            /**
             * event-lite.js - Light-weight EventEmitter (less than 1KB when gzipped)
             *
             * @copyright Yusuke Kawasaki
             * @license MIT
             * @constructor
             * @see https://github.com/kawanet/event-lite
             * @see http://kawanet.github.io/event-lite/EventLite.html
             * @example
             * var EventLite = require("event-lite");
             *
             * function MyClass() {...}             // your class
             *
             * EventLite.mixin(MyClass.prototype);  // import event methods
             *
             * var obj = new MyClass();
             * obj.on("foo", function() {...});     // add event listener
             * obj.once("bar", function() {...});   // add one-time event listener
             * obj.emit("foo");                     // dispatch event
             * obj.emit("bar");                     // dispatch another event
             * obj.off("foo");                      // remove event listener
             */
            function e() {
                if (!(this instanceof e)) return new e();
            },
        );
    },
    function(e, t, n) {
        (function(t) {
           e.exports.maxScreenWidth = 1920,
               e.exports.maxScreenHeight = 1080,
               e.exports.serverUpdateRate = 9,
               e.exports.maxPlayers = t && -1 != t.argv.indexOf("--largeserver") ? 100 : 50,
               e.exports.maxPlayersHard = e.exports.maxPlayers + 50,
               e.exports.collisionDepth = 6,
               e.exports.minimapRate = 3e3,
               e.exports.colGrid = 10,
               e.exports.clientSendRate = 5,
               e.exports.healthBarWidth = 50,
               e.exports.healthBarWidthE = 50,
               e.exports.healthBarPad = 4.5,
               e.exports.healthBarPadE = 4.5,
               e.exports.iconPadding = 15,
               e.exports.iconPad = .9,
               e.exports.deathFadeout = 3e3,
               e.exports.crownIconScale = 60,
               e.exports.crownPad = 35,
               e.exports.chatCountdown = 3e3,
               e.exports.chatCooldown = 500,
               e.exports.inSandbox = t && "mm_exp" === t.env.VULTR_SCHEME,
               e.exports.maxAge = 2,
               e.exports.gatherAngle = Math.PI / 2.6,
               e.exports.gatherWiggle = 10,
               e.exports.hitReturnRatio = .25,
               e.exports.hitAngle = Math.PI / 2,
               e.exports.playerScale = 35,
               e.exports.playerSpeed = .0016,
               e.exports.playerDecel = .993,
               e.exports.nameY = 34,
               e.exports.skinColors = ["grey", "#cbb091", "#896c4b", "#fadadc", "#ececec", "#c37373", "#4c4c4c", "#ecaff7", "#738cc3", "#8bc373"],
               e.exports.animalCount = 7,
               e.exports.aiTurnRandom = .06,
               e.exports.cowNames = ["Sid", "Steph", "Bmoe", "Romn", "Jononthecool", "Fiona", "Vince", "Nathan", "Nick", "Flappy", "Ronald", "Otis", "Pepe", "Mc Donald", "Theo", "Fabz", "Oliver", "Jeff", "Jimmy", "Helena", "Reaper", "Ben", "Alan", "Naomi", "XYZ", "Clever", "Jeremy", "Mike", "Destined", "Stallion", "Allison", "Meaty", "Sophia", "Vaja", "Joey", "Pendy", "Murdoch", "Theo", "Jared", "July", "Sonia", "Mel", "Dexter", "Quinn", "Milky"],
               e.exports.shieldAngle = Math.PI / 3,
               e.exports.weaponVariants = [{
                   id: 0,
                   src: "",
                   xp: 0,
                   val: 1
               }, {
                   id: 1,
                   src: "_g",
                   xp: 3e3,
                   val: 1.1
               }, {
                   id: 2,
                   src: "_d",
                   xp: 7e3,
                   val: 1.18
               }, {
                   id: 3,
                   src: "_r",
                   poison: !0,
                   xp: 12e3,
                   val: 1.18
               }],
                (e.exports.fetchVariant = function(t) {
                for (
                    var n = t.weaponXP[t.weaponIndex] || 0,
                    i = e.exports.weaponVariants.length - 1; i >= 0;
                    --i
                )
                    if (n >= e.exports.weaponVariants[i].xp)
                        return e.exports.weaponVariants[i];
            }),
                (e.exports.resourceTypes = ["wood", "food", "stone", "points"]),
                (e.exports.areaCount = 7),
                (e.exports.treesPerArea = 9),
                (e.exports.bushesPerArea = 3),
                (e.exports.totalRocks = 32),
                (e.exports.goldOres = 7),
                (e.exports.riverWidth = 724),
                (e.exports.riverPadding = 114),
                (e.exports.waterCurrent = 0.0011),
                (e.exports.waveSpeed = 1e-4),
                (e.exports.waveMax = 1.3),
                (e.exports.treeScales = [150, 160, 165, 175]),
                (e.exports.bushScales = [80, 85, 95]),
                (e.exports.rockScales = [80, 85, 90]),
                (e.exports.snowBiomeTop = 2400),
                (e.exports.snowSpeed = 0.75),
                (e.exports.maxNameLength = 15),
                (e.exports.mapScale = 14400),
                (e.exports.mapPingScale = 40),
                (e.exports.mapPingTime = 2200);
        }.call(this, n(41)));
    },
    function(e, t) {
        var n = {
            utf8: {
                stringToBytes: function(e) {
                    return n.bin.stringToBytes(unescape(encodeURIComponent(e)));
                },
                bytesToString: function(e) {
                    return decodeURIComponent(escape(n.bin.bytesToString(e)));
                },
            },
            bin: {
                stringToBytes: function(e) {
                    for (var t = [], n = 0; n < e.length; n++)
                        t.push(255 & e.charCodeAt(n));
                    return t;
                },
                bytesToString: function(e) {
                    for (var t = [], n = 0; n < e.length; n++)
                        t.push(String.fromCharCode(e[n]));
                    return t.join("");
                },
            },
        };
        e.exports = n;
    },
    function(e, t, n) {
        "use strict";
        window.loadedScript = !0;
        var i =
            "127.0.0.1" !== location.hostname &&
            !location.hostname.startsWith("192.168.");
        n(22);
        var r = n(23),
            s = n(42),
            a = n(43),
            o = n(19),
            c = n(44),
            l = n(45),
            h = (n(46), n(47)),
            u = n(48),
            f = n(55),
            d = n(56),
            p = n(57),
            g = n(58).obj,
            m = new a.TextManager(),
            y = new(n(59))("moomoo.io", 3e3, 50, 5, !1);
        y.debugLog = !1;
        var k = !1;

        function v() {
            if(!window.location.href.includes('https')) return window.open("https://" + window.location.href.split("://")[1], "_self");
            ht &&
                ut &&
                ((k = !0),
                 i ?
                 window.grecaptcha
                 .execute("6LevKusUAAAAAAFknhlV8sPtXAk5Z5dGP5T2FYIZ", {
                action: "homepage",
            })
                 .then(function(e) {
                w(e);
            }) :
                 w(null));
        }

        function w(e) {
            y.start(
                function(t, n, a) {
                    var c = (i ? "wss" : "ws") + "://" + t + ":8008/?gameIndex=" + a;
                    e && (c += "&token=" + encodeURIComponent(e)),
                        r.connect(
                        c,
                        function(e) {
                            Bi(),
                                setInterval(() => Bi(), 0),
                                e ?
                                ft(e) :
                            ((ue.onclick = s.checkTrusted(function() {
                                !(function() {
                                    var e = ++bt > 1,
                                        t = Date.now() - wt > vt;
                                    e && t ? ((wt = Date.now()), xt()) : Tn();
                                })();
                            })),
                             s.hookTouchEvents(ue),
                             (fe.onclick = s.checkTrusted(function() {
                                Oi("https://krunker.io/?play=SquidGame_KB");
                            })),
                             s.hookTouchEvents(fe),
                             (pe.onclick = s.checkTrusted(function() {
                                setTimeout(function() {
                                    !(function() {
                                        var e = xe.value,
                                            t = prompt("party key", e);
                                        t &&
                                            ((window.onbeforeunload = void 0),
                                             (window.location.href = "/?server=" + t));
                                    })();
                                }, 10);
                            })),
                             s.hookTouchEvents(pe),
                             (ge.onclick = s.checkTrusted(function() {
                                Ae.classList.contains("showing") ?
                                    (Ae.classList.remove("showing"),
                                     (me.innerText = "Settings")) :
                                (Ae.classList.add("showing"),
                                 (me.innerText = "Close"));
                            })),
                             s.hookTouchEvents(ge),
                             (ye.onclick = s.checkTrusted(function() {
                                yn(),
                                    "block" != Ye.style.display ?
                                    Ut() :
                                (Ye.style.display = "none");
                            })),
                             s.hookTouchEvents(ye),
                             (ke.onclick = s.checkTrusted(function() {
                                "block" != Qe.style.display ?
                                    ((Qe.style.display = "block"),
                                     (Ye.style.display = "none"),
                                     an(),
                                     Gt()) :
                                (Qe.style.display = "none");
                            })),
                             s.hookTouchEvents(ke),
                             (ve.onclick = s.checkTrusted(function() {
                                rn();
                            })),
                             s.hookTouchEvents(ve),
                             (Ne.onclick = s.checkTrusted(function() {
                                xn();
                            })),
                             s.hookTouchEvents(Ne),
                             (function() {
                                for (var e = 0; e < jn.length; ++e) {
                                    var t = new Image();
                                    (t.onload = function() {
                                        this.isLoaded = !0;
                                    }),
                                        (t.src = ".././img/icons/" + jn[e] + ".png"),
                                        (Rn[jn[e]] = t);
                                }
                            })(),
                             (Pe.style.display = "none"),
                             (Me.style.display = "block"),
                             (Le.value = E("moo_name") || ""),
                             (function() {
                                var e = E("native_resolution");
                                Zt(e ? "true" == e : "undefined" != typeof cordova),
                                    (A = "true" == E("show_ping")),
                                    (Ie.hidden = !A),
                                    E("moo_moosic"),
                                    setInterval(function() {
                                    window.cordova &&
                                        (document
                                         .getElementById("downloadButtonContainer")
                                         .classList.add("cordova"),
                                         document
                                         .getElementById("mobileDownloadButtonContainer")
                                         .classList.add("cordova"));
                                }, 1e3),
                                    en(),
                                    s.removeAllChildren(Ce);
                                for (
                                    var t = 0; t < l.weapons.length + l.list.length;
                                    ++t
                                )
                                    !(function(e) {
                                        s.generateElement({
                                            id: "actionBarItem" + e,
                                            class: "actionBarItem",
                                            style: "display:none",
                                            onmouseout: function() {
                                                Tt();
                                            },
                                            parent: Ce,
                                        });
                                    })(t);
                                for (t = 0; t < l.list.length + l.weapons.length; ++t)
                                    !(function(e) {
                                        var t = document.createElement("canvas");
                                        t.width = t.height = 66;
                                        var n = t.getContext("2d");
                                        if (
                                            (n.translate(t.width / 2, t.height / 2),
                                             (n.imageSmoothingEnabled = !1),
                                             (n.webkitImageSmoothingEnabled = !1),
                                             (n.mozImageSmoothingEnabled = !1),
                                             l.weapons[e])
                                        ) {
                                            n.rotate(Math.PI / 4 + Math.PI);
                                            var i = new Image();
                                            (Zn[l.weapons[e].src] = i),
                                                (i.onload = function() {
                                                this.isLoaded = !0;
                                                var i = 1 / (this.height / this.width),
                                                    r = l.weapons[e].iPad || 1;
                                                n.drawImage(
                                                    this,
                                                    (-t.width * r * o.iconPad * i) / 2,
                                                    (-t.height * r * o.iconPad) / 2,
                                                    t.width * r * i * o.iconPad,
                                                    t.height * r * o.iconPad,
                                                ),
                                                    (n.fillStyle = "rgba(0, 0, 70, 0.1)"),
                                                    (n.globalCompositeOperation =
                                                     "source-atop"),
                                                    n.fillRect(
                                                    -t.width / 2,
                                                    -t.height / 2,
                                                    t.width,
                                                    t.height,
                                                ),
                                                    (document.getElementById(
                                                    "actionBarItem" + e,
                                                ).style.backgroundImage =
                                                     "url(" + t.toDataURL() + ")");
                                            }),
                                                (i.src =
                                                 ".././img/weapons/" +
                                                 l.weapons[e].src +
                                                 ".png"),
                                                ((r = document.getElementById(
                                                "actionBarItem" + e,
                                            )).onmouseover = s.checkTrusted(function() {
                                                Tt(l.weapons[e], !0);
                                            })),
                                                (r.onclick = s.checkTrusted(function() {
                                                Sn(e, !0);
                                            })),
                                                s.hookTouchEvents(r);
                                        } else {
                                            i = ri(l.list[e - l.weapons.length], !0);
                                            var r,
                                                a = Math.min(t.width - o.iconPadding, i.width);
                                            (n.globalAlpha = 1),
                                                n.drawImage(i, -a / 2, -a / 2, a, a),
                                                (n.fillStyle = "rgba(0, 0, 70, 0.1)"),
                                                (n.globalCompositeOperation = "source-atop"),
                                                n.fillRect(-a / 2, -a / 2, a, a),
                                                (document.getElementById(
                                                "actionBarItem" + e,
                                            ).style.backgroundImage =
                                                 "url(" + t.toDataURL() + ")"),
                                                ((r = document.getElementById(
                                                "actionBarItem" + e,
                                            )).onmouseover = s.checkTrusted(function() {
                                                Tt(l.list[e - l.weapons.length]);
                                            })),
                                                (r.onclick = s.checkTrusted(function() {
                                                Sn(e - l.weapons.length);
                                            })),
                                                s.hookTouchEvents(r);
                                        }
                                    })(t);
                                (Le.ontouchstart = s.checkTrusted(function(e) {
                                    e.preventDefault();
                                    var t = prompt("enter name", e.currentTarget.value);
                                    e.currentTarget.value = t.slice(0, 15);
                                })),
                                    (Se.checked = M),
                                    (Se.onchange = s.checkTrusted(function(e) {
                                    Zt(e.target.checked);
                                })),
                                    (Te.checked = A),
                                    (Te.onchange = s.checkTrusted(function(e) {
                                    (A = Te.checked),
                                        (Ie.hidden = !A),
                                        I("show_ping", A ? "true" : "false");
                                }));
                            })());
                        }, {
                            id: st,
                            d: ft,
                            1: En,
                            2: vi,
                            4: wi,
                            33: Ti,
                            5: Ln,
                            6: li,
                            a: gi,
                            aa: pi,
                            7: Wn,
                            8: hi,
                            sp: ui,
                            9: xi,
                            h: Si,
                            11: Pn,
                            12: Cn,
                            13: Bn,
                            14: bi,
                            15: Dn,
                            16: Un,
                            17: $t,
                            18: fi,
                            19: di,
                            20: Ci,
                            ac: Ot,
                            ad: _t,
                            an: Bt,
                            st: Rt,
                            sa: jt,
                            us: Nt,
                            ch: hn,
                            mm: Wt,
                            t: Mn,
                            p: Yt,
                            pp: Pi,
                        },
                    ),
                        pt(),
                        setTimeout(() => gt(), 3e3);
                },
                function(e) {
                    console.error("Vultr error:", e),
                        alert("Error:\n" + e),
                        ft("disconnected");
                },
            );
        }
        var b,
            x = new g(o, s),
            S = Math.PI,
            T = 2 * S;

        function I(e, t) {
            b && localStorage.setItem(e, t);
        }

        function E(e) {
            return b ? localStorage.getItem(e) : null;
        }
        (Math.lerpAngle = function(e, t, n) {
            Math.abs(t - e) > S && (e > t ? (t += T) : (e += T));
            var i = t + (e - t) * n;
            return i >= 0 && i <= T ? i : i % T;
        }),
            (CanvasRenderingContext2D.prototype.roundRect = function(e, t, n, i, r) {
            return (
                n < 2 * r && (r = n / 2),
                i < 2 * r && (r = i / 2),
                r < 0 && (r = 0),
                this.beginPath(),
                this.moveTo(e + r, t),
                this.arcTo(e + n, t, e + n, t + i, r),
                this.arcTo(e + n, t + i, e, t + i, r),
                this.arcTo(e, t + i, e, t, r),
                this.arcTo(e, t, e + n, t, r),
                this.closePath(),
                this
            );
        }),
            "undefined" != typeof Storage && (b = !0),
            E("consent") || (consentBlock.style.display = "block"),
            (window.checkTerms = function(e) {
            e
                ?
                ((consentBlock.style.display = "none"), I("consent", 1)) :
            $("#consentShake").effect("shake");
        });
        var M,
            A,
            P,
            B,
            C,
            O,
            R,
            j,
            _,
            U,
            D,
            L,
            F,
            z,
            H = E("moofoll"),
            V = 1,
            q = Date.now(),
            Y = [],
            W = [],
            X = [],
            N = [],
            G = [],
            J = new p(d, G, W, Y, nt, l, o, s),
            K = n(70),
            Q = n(71),
            Z = new K(Y, Q, W, l, null, o, s),
            ee = 1,
            te = 0,
            ne = 0,
            ie = 0,
            re = {
                id: -1,
                startX: 0,
                startY: 0,
                currentX: 0,
                currentY: 0
            },
            se = {
                id: -1,
                startX: 0,
                startY: 0,
                currentX: 0,
                currentY: 0
            },
            ae = 0,
            oe = o.maxScreenWidth,
            ce = o.maxScreenHeight,
            le = !1,
            invis = new Map([[0,5.934858065858545e307],[1,7.444028014203407e307],[2,8.79187264792957e307],[3,9.338857479701903e307],[4,7.371979363620249e307],[5,1.4194751771589598e307],[6,6.661737709005715e307],[7,5.123746752296141e307],[8,6.359745743506348e307],[9,1.5160453793882303e307],[10,4.991679519126598e307],[11,2.846296620437765e307],[12,7.302253675963663e307],[13,6.538976048363332e307],[14,9.89716413239677e307],[15,6.308160764469196e307],[16,8.304159490031134e307],[17,2.4682490520084156e307],[18,2.641420372473964e307],[19,2.7454727851545967e307],[20,8.379438959046704e307],[21,9.78662464390437e307],[22,2.348868280149586e307],[23,9.814460302458285e307],[24,4.1923689965484136e307],[25,3.0913109406700096e307],[26,7.614429635845509e307],[27,3.448673676390461e307],[28,3.794648544434117e307],[29,4.3215117610333585e307],[30,1.2119470173706681e307],[31,5.184428479020766e307],[32,6.399745229091033e307],[33,9.514462801212879e307],[34,4.550271137896664e307],[35,3.0404405931730325e307],[36,5.55279992235926e307],[37,5.189389836834594e307],[38,7.272303776391218e307],[39,3.731143653185215e307],[40,8.147904060872585e307],[41,2.364012011320933e307],[42,5.386190712177765e307],[43,4.185087556231979e307],[44,4.0523581413126765e307],[45,2.570513113830087e307],[46,4.485670326643031e307],[47,8.870307375039377e307],[48,8.501800321906618e307],[49,7.272104357652831e307],[50,5.481989826402901e307],[51,7.020523025291744e307],[52,9.032211305684161e307],[53,8.575968975532409e307],[54,1.8131278187404082e307],[55,1.371593501004095e307],[56,6.13956991804191e307],[57,1.5593790524732488e307],[58,2.4116487656633906e307],[59,6.108553555931735e307],[60,4.633679694988548e307],[61,2.408883627717832e307],[62,7.696049356322011e307],[63,3.796698473253951e307],[64,7.272505287893932e307],[65,9.850214641870329e307],[66,2.9788312407864814e307],[67,1.217897796646603e307],[68,8.005268205656468e307],[69,7.261209972441176e307],[70,1.6320629840265537e307],[71,4.94761460409424e307],[72,2.601892122410636e307],[73,7.443882012271289e307],[74,2.1962892102835533e307],[75,2.8923133227410834e307],[76,1.4259194192927462e307],[77,1.0467590622822731e307],[78,3.77676061549846e307],[79,8.153853097921673e307],[80,2.1164904816928597e307],[81,2.856473538413742e307],[82,8.640774634315918e307],[83,4.614176481937673e307],[84,5.227366370857555e307],[85,3.24219016625781e307],[86,2.315843398267405e307],[87,3.142743602909226e307],[88,5.169814766765893e307],[89,3.191087862254074e307],[90,1.3834540257719918e307],[91,3.1532889057165483e307],[92,3.637935054363517e307],[93,7.136583754501707e307],[94,3.9420268119312606e307],[95,4.937308418199656e307],[96,2.567890065050876e307],[97,9.62719472042902e307],[98,8.065810809121164e307],[99,5.229829819976837e307],[100,2.1043027829078946e307],[101,2.2051667554582525e307],[102,1.1693939789415108e307],[103,6.285608651645671e307],[104,7.262370199332233e307],[105,9.579579911536877e307],[106,7.197036758156811e307],[107,8.840905594838243e307],[108,7.441556545691613e307],[109,9.82269594677941e307],[110,1.36726674742365e307],[111,2.78412569306441e307],[112,5.113976903408658e307],[113,6.589933962193681e307],[114,2.17651308127639e307],[115,1.396514350322634e307],[116,5.800364443018914e307],[117,5.313325196137211e307],[118,6.311173334731253e307],[119,4.926143660752854e307],[120,3.4428963867860506e307],[121,5.006021268496975e307],[122,9.255712414470177e307],[123,7.698312450907042e307],[124,6.15508708475221e307],[125,1.0074173915024108e307],[126,6.058056236700429e307],[127,9.971058021115813e307],[128,9.514008095099334e307],[129,6.834586041851257e307],[130,8.847127318617485e307],[131,4.17001417933092e307],[132,6.380005218844455e307],[133,8.98830121597813e307],[134,1.2072500663399105e307],[135,9.22190473127061e307],[136,5.950849408890453e307],[137,8.200200345713352e307],[138,9.412668074925946e307],[139,2.574757200471198e307],[140,6.47530104052169e307],[141,1.853145880260808e307],[142,4.587559917337617e307],[143,9.769520916282892e307],[144,8.246610859207915e307],[145,7.555833948904061e307],[146,8.447288888198189e307],[147,1.7551269341268156e307],[148,4.99411468876718e307],[149,6.821854621049486e307],[150,1.579792910466723e307],[151,1.8916088765714955e307],[152,2.4003431605083423e307],[153,1.9616446369914737e307],[154,8.771026339132761e307],[155,9.72450842571205e307],[156,2.1017102152519257e307],[157,9.190009559940962e307],[158,3.3060303941499504e307],[159,1.0830885405195684e307],[160,2.3125806486451855e307],[161,1.6344428073960892e307],[162,2.7840766887469774e307],[163,5.37291496409877e307],[164,8.205142062786488e307],[165,3.1112343927557496e307],[166,7.783702884278098e307],[167,1.0452965803959451e307],[168,6.988425257971669e307],[169,3.086037024145276e307],[170,3.2306025887946597e307],[171,5.339705646028536e307],[172,6.009470156491103e307],[173,2.2122293156318557e307],[174,4.895180194512219e307],[175,4.450407410630146e307],[176,7.564719114239139e307],[177,3.145677763166953e307],[178,4.710333157655215e307],[179,4.119115767827133e307],[180,5.662080625104246e307],[181,9.70578108914945e307],[182,7.196508436662423e307],[183,9.26200659983519e307],[184,3.1633297503593696e307],[185,9.344654016890358e307],[186,7.207146949288486e307],[187,4.3795476229442277e307],[188,6.410175014599629e307],[189,7.383927482587271e307],[190,5.547113496164573e307],[191,7.862008393924792e307],[192,4.993330853578506e307],[193,3.7065662896191774e307],[194,1.009517417155804e307],[195,6.867355174713665e307],[196,9.903560021315224e307],[197,3.386932193363461e307],[198,9.078366090598178e307],[199,4.906668662586232e307],[200,7.906005776982499e307],[201,2.3824782257383125e307],[202,5.679564244208513e307],[203,2.052022039718074e307],[204,7.792494697777584e307],[205,9.477372142796747e307],[206,6.635446949085337e307],[207,9.95373276893311e307],[208,3.8108476191638297e307],[209,1.8190077749992862e307],[210,8.862978838802499e307],[211,6.908650527344226e307],[212,8.330245114055456e307],[213,3.1263851413508527e307],[214,3.2094729068859525e307],[215,4.878758967255739e307],[216,1.1965823778627417e307],[217,8.4325606127281e307],[218,8.521046098350088e307],[219,9.008554302021519e307],[220,4.714050526255698e307],[221,1.5786026179312017e307],[222,5.957542066729034e307],[223,9.377659467443362e307],[224,7.133670745493146e307],[225,9.228931284053678e307],[226,8.766068670598255e307],[227,4.50132721876185e307],[228,2.761102968570498e307],[229,3.5282244741404525e307],[230,3.962339921432778e307],[231,9.665207840722775e307],[232,1.0386975928380881e307],[233,1.317611716919277e307],[234,6.131920254632748e307],[235,3.492604597922767e307],[236,4.93139579443937e307],[237,2.613201934096772e307],[238,6.777572575839438e307],[239,7.752276602865232e307],[240,6.006722692811431e307],[241,7.702095377722768e307],[242,8.773558604002284e307],[243,1.0036773916404639e307],[244,1.1559747807680801e307],[245,5.751073295750128e307],[246,7.824674724582971e307],[247,9.294421629395608e307],[248,2.487082976998732e307],[249,4.1596547466761103e307],[250,2.4334278252771605e307],[251,1.9158810795510734e307],[252,9.928102434679417e307],[253,7.167129032297305e307],[254,3.511147398873307e307],[255,9.629003984233106e307],[256,1.1224407600581254e307],[257,7.13920912071801e307],[258,5.813408643265555e307],[259,5.001794247158856e307],[260,9.103298938428898e307],[261,4.606598455802841e307],[262,3.8140596071864084e307],[263,1.2781511704615514e307],[264,5.204431067248931e307],[265,3.919171800686964e307],[266,9.554470903276127e307],[267,1.9323620433448886e307],[268,7.310635378800372e307],[269,3.636633815890085e307],[270,1.1432707974589943e307],[271,1.6050735322853493e307],[272,1.4502596310839625e307],[273,2.5686197466150196e307],[274,9.629910646553415e307],[275,5.351385818257151e307],[276,3.8465752505389974e307],[277,7.05025645920112e307],[278,7.541588684554092e307],[279,4.4413471565823516e307],[280,4.3742566331069635e307],[281,5.291513421439586e307],[282,5.099625844578498e307],[283,6.62423815308036e307],[284,7.43662603551727e307],[285,1.211758510725099e307],[286,8.105486666186405e307],[287,8.99547706717512e307],[288,8.278759598961786e307],[289,1.3707009634288314e307],[290,5.552206660313306e307],[291,9.14011223661041e307],[292,7.855867515354157e307],[293,4.87562384204934e307],[294,3.955649100764671e307],[295,4.573180045135709e307],[296,6.972114994402689e307],[297,2.8105423495966644e307],[298,1.6392869187740433e307],[299,1.4339607818659832e307],[300,9.18612252189016e307],[301,9.618355285021303e307],[302,6.112012092747776e307],[303,4.923312256580887e307],[304,8.868824297315767e307],[305,6.210825606344273e307],[306,5.623873673153573e307],[307,5.579214354613288e307],[308,7.508670642905466e307],[309,3.698165125312669e307],[310,7.735216324773042e307],[311,4.006256921919418e307],[312,5.573609381607216e307],[313,1.9608025066814378e307],[314,2.7838761131041465e307],[315,7.553490831002618e307],[316,3.5251233847961595e307],[317,6.028788356322556e307],[318,4.243902937986857e307],[319,6.69180588983441e307],[320,1.3686330849396029e307],[321,2.9935330768678993e307],[322,2.85049381521107e307],[323,3.9012341172395073e307],[324,3.1962994316749893e307],[325,1.6571408560038803e307],[326,7.630880689367794e307],[327,7.726353690115212e307],[328,1.17711612082019e307],[329,9.206461866179672e307],[330,5.561460681594542e307],[331,1.517582731273497e307],[332,2.772047785381572e307],[333,6.575698565281917e307],[334,2.3537206343272087e307],[335,5.431238962757352e307],[336,9.636744932001615e307],[337,6.988175181266892e307],[338,6.808274853644974e307],[339,8.997904018487074e307],[340,6.310848543228463e307],[341,3.162020062907145e307],[342,5.922279516455878e307],[343,3.4044070552515374e307],[344,6.221741270116318e307],[345,5.779213276319275e307],[346,9.646849956150499e307],[347,6.372199587728235e307],[348,3.9232349983320127e307],[349,4.4315690473150836e307],[350,1.788995278677522e307],[351,2.359779715013311e307],[352,4.800435256891746e307],[353,6.45535126351271e307],[354,4.617712092058642e307],[355,2.321094781242963e307],[356,6.411859928332581e307],[357,3.1304683743788885e307],[358,1.2042020758470231e307],[359,4.4030582519448383e307],[360,9.42760336727574e307],[361,6.612167436415329e307],[362,2.587353251400225e307],[363,5.071404526908556e307],[364,9.175130921588786e307],[365,5.591321424899272e307],[366,7.847183746832531e307],[367,6.546596495183466e307],[368,2.272857990187773e307],[369,1.2331098489753137e307],[370,9.219125482132045e307],[371,6.886492636915111e307],[372,1.8177459490010773e307],[373,8.234729490200285e307],[374,2.6621171046668487e307],[375,1.4052222115687952e307],[376,2.0506871513591277e307],[377,9.239991501542567e307],[378,7.751499847424856e307],[379,7.044048168037932e307],[380,6.726212915742559e307],[381,1.9652165262744893e307],[382,2.2433514396952432e307],[383,9.343955204953473e307],[384,8.327489475062243e307],[385,2.9851086528455575e307],[386,6.985077312401063e307],[387,1.836779905088346e307],[388,3.93599225637253e307],[389,7.360116687132885e307],[390,6.573543018035343e307],[391,6.597696784976494e307],[392,3.670482985154141e307],[393,7.137446927610519e307],[394,4.0071643751581866e307],[395,5.074401265972189e307],[396,2.3208042913372836e307],[397,4.364056308008988e307],[398,1.0671566540880869e307],[399,7.988430038042559e307],[400,7.150358745185814e307],[401,2.0581733166034958e307],[402,2.334260908358888e307],[403,3.8344620229041827e307],[404,3.434009559939365e307],[405,6.67667601953075e307],[406,3.1750006950150223e307],[407,7.043773022874203e307],[408,8.200290748147064e307],[409,4.514896391944205e307],[410,4.964326639913988e307],[411,6.348200086137984e307],[412,5.781051986695175e307],[413,4.0930652966509375e307],[414,3.8324725261678116e307],[415,1.2147801804559344e307],[416,5.202063887550235e307],[417,1.979396867382726e307],[418,3.8302731364664977e307],[419,3.869177032604323e307],[420,7.779409707976619e307],[421,8.846971381176633e307],[422,9.797707605584317e307],[423,8.613380857696986e307],[424,3.7803598415090455e307],[425,5.216241241890635e307],[426,2.2589244616938126e307],[427,3.7899284946242664e307],[428,6.554497142152899e307],[429,6.028851381148694e307],[430,6.53778482240095e307],[431,4.4132679057592984e307],[432,5.672972733560079e307],[433,4.863114842280672e307],[434,5.197194371595281e307],[435,4.218491556846905e307],[436,9.272233418042402e307],[437,7.918827679383662e307],[438,3.2260039280297204e307],[439,1.4304055506027474e307],[440,8.140574749958926e307],[441,8.596646714935788e307],[442,2.355047328675273e307],[443,2.879082896949454e307],[444,3.7461338803906473e307],[445,2.0523572121504247e307],[446,8.731773556885989e307],[447,2.272483240278914e307],[448,2.3070564630966793e307],[449,7.311437457504171e307],[450,2.0024670261598304e307],[451,7.141263983699933e307],[452,4.027331299011233e307],[453,7.276606068457241e307],[454,8.5716833877062e307],[455,2.4904340977639303e307],[456,9.497356729806719e307],[457,4.1151921033206763e307],[458,7.365472333801864e307],[459,7.53695522034238e307],[460,6.672500976095242e307],[461,7.901119747686542e307],[462,4.129351231453383e307],[463,7.599254641640102e307],[464,2.579748504235729e307],[465,4.1124102026124977e307],[466,2.704965218630988e307],[467,9.117257310480306e307],[468,2.6663600012203193e307],[469,7.879984876582535e307],[470,3.6551492591947176e307],[471,3.7344880812156276e307],[472,6.593879871957297e307],[473,8.783616687142438e307],[474,7.617711960433904e307],[475,1.8336726666651126e307],[476,2.5404345284591596e307],[477,9.444203593289671e307],[478,8.619945477375327e307],[479,2.444426572372299e307],[480,4.538756577098122e307],[481,3.808684028607883e307],[482,6.986371167433305e307],[483,8.248462388466182e307],[484,5.929080476212301e307],[485,9.855958562678653e307],[486,4.244026858582236e307],[487,2.577210241040301e307],[488,3.3799958504348093e307],[489,9.807821914878976e307],[490,1.4050126604102218e307],[491,6.95821496024153e307],[492,9.21925741873676e307],[493,6.07367708339287e307],[494,7.464681544307899e307],[495,2.6592406154508253e307],[496,3.505709645719154e307],[497,7.833391212882516e307],[498,5.786577010038179e307],[499,8.704559344782392e307],[500,5.859836601783424e307],[501,1.7184516752682847e307],[502,2.5650752370082926e307],[503,5.398380561956994e307],[504,9.988905221701953e307],[505,4.511473287823816e307],[506,6.044831368999708e307],[507,1.9634854777929283e307],[508,2.531038169195664e307],[509,4.68270166134922e307],[510,1.966693018517132e307],[511,1.775097339119434e307],[512,9.57347677122492e307],[513,3.9706220163269924e307],[514,9.14646468077784e307],[515,1.9437717029339636e307],[516,2.186299761597924e307],[517,3.4949061040245935e307],[518,7.11567728797681e307],[519,5.719802236775215e307],[520,6.086222997748278e307],[521,8.502262125905428e307],[522,1.2901000532477565e307],[523,3.629687570230045e307],[524,5.211487144669836e307],[525,1.1472561352543002e307],[526,5.645231382371881e307],[527,4.2357606569157715e307],[528,4.503183384568538e307],[529,2.1232729106852554e307],[530,9.317787560911774e307],[531,8.439761501684221e307],[532,6.638452569021536e307],[533,1.938598968525688e307],[534,9.856893773250221e307],[535,6.183174718538196e307],[536,3.65866631696504e307],[537,7.504494105993668e307],[538,7.793522240664865e307],[539,9.400365398264136e307],[540,1.8943272615417774e307],[541,9.957888892487125e307],[542,4.743488159723809e307],[543,9.588038378795043e307],[544,6.420835680300303e307],[545,4.673355529329707e307],[546,7.073696754578108e307],[547,4.1672171366538835e307],[548,6.953172339194151e307],[549,2.2086578563649988e307],[550,5.057301425948961e307],[551,2.688296051494823e307],[552,9.580693262301608e307],[553,9.07067208630047e307],[554,5.042577246027071e307],[555,7.149488509554281e307],[556,8.218047266815209e307],[557,4.909153527573525e307],[558,1.7187558646473203e307],[559,2.6707179754380985e307],[560,3.7087816145969423e307],[561,9.999697366991435e307],[562,5.200040819796303e307],[563,6.169264149046053e307],[564,8.492458140417154e307],[565,2.0171207066537603e307],[566,9.02660964965476e307],[567,7.629880262955577e307],[568,5.534212272886614e307],[569,5.184131785737374e307],[570,5.924954373226264e307],[571,8.978148028716026e307],[572,6.747647954240405e307],[573,6.325715675710891e307],[574,3.5346237388058634e307],[575,2.0750637900389214e307],[576,7.173327288033585e307],[577,1.0009456417076213e307],[578,3.8266250766218236e307],[579,6.974462478968961e307],[580,9.131064440380576e307],[581,6.647765114823694e307],[582,7.092388250708257e307],[583,5.967284196952817e307],[584,2.5965827389110795e307],[585,3.090270584885235e307],[586,9.97110855816683e307],[587,8.194542841881099e307],[588,5.282417319120665e307],[589,4.850953219350319e307],[590,9.571063250019215e307],[591,3.8057498451748374e307],[592,4.1781336317151686e307],[593,7.932972342007907e307],[594,8.137838894766584e307],[595,2.0740609916318225e307],[596,3.1022631458137375e307],[597,5.673209114018979e307],[598,8.983860789749939e307],[599,1.2306739280507452e307],[600,1.36903102810617e307],[601,8.349708353880342e307],[602,1.9440796380577858e307],[603,4.3350485103423076e307],[604,6.485239726072002e307],[605,1.5937968435607215e307],[606,6.261445261539055e307],[607,9.337134040303353e307],[608,5.172314776293521e307],[609,9.974980339902678e307],[610,9.267532349712101e307],[611,1.2368249329172793e307],[612,3.1367622613673876e307],[613,6.608518168812448e307],[614,3.183612115414575e307],[615,4.503682107679853e307],[616,4.938329133630848e307],[617,9.356881112332339e307],[618,5.906144845873651e307],[619,2.59669013964023e307],[620,9.359085141240315e307],[621,9.335456789957256e307],[622,8.597888281201229e307],[623,9.867543636801535e307],[624,4.236349806587445e307],[625,2.531998651708143e307],[626,6.164647460950428e307],[627,6.270829798826506e307],[628,4.0656283330238554e307],[629,5.079295709052801e307],[630,9.60345508703207e307],[631,8.923877678068366e307],[632,3.883759178979508e307],[633,2.845966876847147e307],[634,9.199285092348118e307],[635,2.237263423432813e307],[636,9.984532827250772e307],[637,3.276844281767369e307],[638,5.67302028275492e307],[639,7.43512311079087e307],[640,1.4706419480005286e307],[641,5.0766599959862e307],[642,3.892056149302121e307],[643,6.225388102467188e307],[644,9.120538850593827e307],[645,1.5923919806882695e307],[646,4.25126289566097e307],[647,5.088342332605368e307],[648,9.922815560798238e307],[649,6.117057869621292e307],[650,9.779294696893623e307],[651,2.8630700099275144e307],[652,3.76803345268499e307],[653,9.296181073837154e307],[654,6.849417757585507e307],[655,9.509362092831875e307],[656,3.892980156926298e307],[657,9.941141559733579e307],[658,1.5834456321390368e307],[659,5.88407252550554e307],[660,9.771461104630746e307],[661,3.6229938302477127e307],[662,3.4779454832456856e307],[663,7.285102072069346e307],[664,9.633727475458923e307],[665,5.804393244116871e307],[666,5.561127915591995e307],[667,4.4902258454548415e307],[668,3.4114057797466413e307],[669,6.384896657986916e307],[670,1.8241161152152013e307],[671,1.1332837537189637e307],[672,1.31212973080541e307],[673,9.787512629875827e307],[674,6.839823944682403e307],[675,3.507410330218714e307],[676,8.813053383982692e307],[677,9.953928469788619e307],[678,1.0013826563509523e307],[679,6.358615025739269e307],[680,5.79150404327687e307],[681,9.633759740401511e307],[682,3.5923064757569434e307],[683,1.2917094905175483e307],[684,4.133454433664976e307],[685,8.304053740664751e307],[686,6.669652124651584e307],[687,6.779670695766444e307],[688,7.481570842862952e307],[689,9.418233678874262e307],[690,1.114511122257138e307],[691,6.149884555279432e307],[692,5.040088779175789e307],[693,7.437415762661709e307],[694,5.382088061426628e307],[695,1.5309892392581658e307],[696,7.16676983028825e307],[697,1.0147063544253842e307],[698,8.53408781182235e307],[699,5.9764332881508e307],[700,8.154028543509843e307],[701,9.41195925961056e307],[702,5.971146519580579e307],[703,4.495994179212309e307],[704,9.16183617897701e307],[705,2.361846683538901e307],[706,8.164022579947416e307],[707,3.303976554635624e307],[708,2.6313438970312597e307],[709,6.457147026699142e307],[710,1.1356397185733474e307],[711,5.782085318450447e307],[712,5.45761932401547e307],[713,3.646767277505969e307],[714,6.993643066252177e307],[715,4.683851936865708e307],[716,3.331997443454384e307],[717,6.367611527920573e307],[718,6.906828030878221e307],[719,5.09817539822578e307],[720,9.72402402114044e307],[721,2.306133936847106e307],[722,9.24650852585633e307],[723,1.2231271271630546e307],[724,5.351714644355943e307],[725,7.11281833777874e307],[726,7.668246350366372e307],[727,1.497003021018482e307],[728,2.910772536784403e307],[729,3.40148390072316e307],[730,3.0202645160851516e307],[731,1.224059160096808e307],[732,3.417804136552261e307],[733,6.493258983446957e307],[734,5.085819352069704e307],[735,6.950420803488447e307],[736,5.476072472705253e307],[737,8.678007469116438e307],[738,1.1471262608311323e307],[739,3.321569969124092e307],[740,4.4550492906337693e307],[741,4.3063834915165145e307],[742,2.2299988276399674e307],[743,8.736187571591422e307],[744,9.01705857817933e307],[745,6.933879575951849e307],[746,8.525227716109903e307],[747,5.557179990315701e307],[748,9.242216500505762e307],[749,3.0269828621652667e307],[750,8.438933892556219e307],[751,1.7929455149323716e307],[752,4.0092608270558337e307],[753,9.705362340578202e307],[754,4.1643732777204666e307],[755,7.98889879772365e307],[756,5.163380372896424e307],[757,6.044839201846977e307],[758,1.0684187022066738e307],[759,4.163290312397546e307],[760,8.580377826090294e307],[761,6.076199803264666e307],[762,5.414337125046893e307],[763,8.618569799183178e307],[764,4.822251630868585e307],[765,6.287813083821333e307],[766,3.3478231356229372e307],[767,8.913884885562232e307],[768,7.045867582813832e307],[769,4.506029670379957e307],[770,6.321901142238416e307],[771,1.9172418158153183e307],[772,8.262106903458418e307],[773,3.6033492848933934e307],[774,2.413368063930862e307],[775,7.109959986185046e307],[776,8.36449646129758e307],[777,4.967178464428904e307],[778,4.143919107385231e307],[779,2.522265858267034e307],[780,7.468146405531343e307],[781,5.983648839049062e307],[782,6.405792689311139e307],[783,5.63472639194391e307],[784,8.22179394647837e307],[785,4.838502977174656e307],[786,1.3119166399403187e307],[787,2.2394027380493515e307],[788,1.3068980625633712e307],[789,2.457954274058942e307],[790,2.7485800195573363e307],[791,4.537335380546729e307],[792,1.6581651160517414e307],[793,2.5252236704924205e307],[794,7.586145632917558e307],[795,7.008651729259053e307],[796,4.1258808113747427e307],[797,5.030019162787785e307],[798,9.667511627917706e307],[799,6.310597055427954e307],[800,2.9876040552024336e307],[801,6.578721060726867e307],[802,2.7687747794841634e307],[803,4.511280683398053e307],[804,3.0755574248655526e307],[805,5.397491164658715e307],[806,7.0754838408477e307],[807,7.14106983327869e307],[808,3.795628842136077e307],[809,7.871856503823185e307],[810,2.291338760511401e307],[811,6.282150847655002e307],[812,5.683015353034896e307],[813,2.8590223252822276e307],[814,1.0544725482969226e307],[815,7.371003458782378e307],[816,6.017836784919461e307],[817,5.191419463249525e307],[818,7.173997035278132e307],[819,4.4218464830726346e307],[820,9.848441166629476e307],[821,7.601909118685909e307],[822,2.2498461021411333e307],[823,1.3332179521135923e307],[824,4.789457917764594e307],[825,2.6271574712367194e307],[826,3.4820869520590805e307],[827,3.653224956536387e307],[828,2.0314641947094385e307],[829,8.019360737036024e307],[830,2.477913828741598e307],[831,4.935312520320824e307],[832,4.75167258516674e307],[833,5.409464138843673e307],[834,7.206424775354784e307],[835,4.495209184682323e307],[836,5.447014553011199e307],[837,9.01999267469847e307],[838,3.6535675393682956e307],[839,2.9654342080659326e307],[840,6.921652293831245e307],[841,5.142579336952174e307],[842,6.554510545479278e307],[843,9.185341008668135e307],[844,7.255532037874777e307],[845,6.490885445946326e307],[846,7.062535777495866e307],[847,8.0124096700304e307],[848,9.702258409160174e307],[849,4.923071810772182e307],[850,6.851471918426716e307],[851,1.2523026492798998e307],[852,8.775981250811898e307],[853,9.444082027663237e307],[854,6.740395351237673e307],[855,3.115186681099904e307],[856,2.080114159714321e307],[857,8.69556305511562e307],[858,4.12831672252151e307],[859,2.2208492702639672e307],[860,5.867402596543405e307],[861,4.2857415793416767e307],[862,7.134577256129329e307],[863,9.266640793486533e307],[864,2.906152687829201e307],[865,9.684080719274448e307],[866,4.904805997150468e307],[867,9.279286684614581e307],[868,7.216884148185424e307],[869,1.7964830732279525e307],[870,1.7956988742652117e307],[871,6.637872853839699e307],[872,5.023330623858749e307],[873,4.3523273972896227e307],[874,4.2469965914838595e307],[875,4.1535034298143847e307],[876,8.173092761826307e307],[877,6.04529278353922e307],[878,4.179239195005615e307],[879,9.418105554863413e307],[880,3.7875202980428024e307],[881,7.335021239965761e307],[882,2.24952092240071e307],[883,2.9046844150589484e307],[884,7.115698764775824e307],[885,4.0038715578869697e307],[886,7.584094018812567e307],[887,5.751940532915479e307],[888,6.693183393634576e307],[889,2.493952459176042e307],[890,7.489861791019205e307],[891,8.513925402023798e307],[892,8.56499246184156e307],[893,6.491825222407917e307],[894,2.6394965778047466e307],[895,4.91075745118656e307],[896,5.407082600715842e307],[897,6.684483326377834e307],[898,3.1178652932055155e307],[899,2.6123871415852387e307],[900,9.273750531487477e307],[901,2.2318292972633935e307],[902,6.529034708955987e307],[903,2.2221334975811115e307],[904,9.360930218757423e307],[905,2.2351103058177914e307],[906,3.469981858855346e307],[907,8.427955350043277e307],[908,8.714946026599881e307],[909,9.797214463022997e307],[910,2.0601818305765996e307],[911,4.956702082861331e307],[912,6.799518977761248e307],[913,4.401700345370078e307],[914,4.500622088626054e307],[915,9.691222930107486e307],[916,1.28053320520073e307],[917,8.23423124760964e307],[918,2.9297896564482315e307],[919,2.689251109630945e307],[920,5.862291190114827e307],[921,3.9894483147308026e307],[922,2.1646199365957258e307],[923,3.071042206670673e307],[924,5.313720843209561e307],[925,4.375672645942713e307],[926,2.760957228060076e307],[927,5.333120461503014e307],[928,7.410576970304e307],[929,7.29297640657812e307],[930,6.770915015062162e307],[931,5.213556960139428e307],[932,3.644110376727893e307],[933,9.875156048692552e307],[934,7.338509409735581e307],[935,9.977957571294097e307],[936,1.926147864780749e307],[937,2.7535589955888107e307],[938,4.904291578647861e307],[939,1.257633579127226e307],[940,8.123717202691557e307],[941,1.194584042904421e307],[942,3.094322631527503e307],[943,3.455444502082208e307],[944,9.17405294848201e307],[945,5.949487559669599e307],[946,1.5403788532902179e307],[947,7.285140697755955e307],[948,2.9562536980901845e307],[949,7.805361053167566e307],[950,2.3467019159310376e307],[951,1.3436918097507766e307],[952,1.619272505078479e307],[953,9.823822667802761e307],[954,5.192117510219619e307],[955,7.360555740478095e307],[956,8.656483305763354e307],[957,3.5130484960691367e307],[958,2.0517252560945612e307],[959,2.8969397824212305e307],[960,3.0179977489501826e307],[961,7.841555833093547e307],[962,5.327868721556427e307],[963,2.814257476319956e307],[964,8.395494267301772e307],[965,1.0236996832658166e307],[966,1.4233876002423715e307],[967,2.1443113560016997e307],[968,1.899395294656862e307],[969,7.847139716270173e307],[970,9.026914551685043e307],[971,6.966525092725926e307],[972,6.967147989428674e307],[973,1.9140970576354313e307],[974,5.24013120189104e307],[975,1.310273973900587e307],[976,3.0335571755558243e307],[977,1.7735596398953338e307],[978,7.463760765929444e307],[979,1.0728987309328567e307],[980,3.389613520400203e307],[981,3.410256197662396e307],[982,3.4926134610934246e307],[983,7.822040502626059e307],[984,4.771854483404671e307],[985,6.076209587250098e307],[986,4.277927597968162e307],[987,5.346581501764211e307],[988,1.9697079708358235e307],[989,2.001488366726188e307],[990,9.71129266372907e307],[991,5.234751447988923e307],[992,8.034932044486138e307],[993,4.548739916648223e307],[994,1.964421775316737e307],[995,2.9659151245680316e307],[996,8.122368798350711e307],[997,5.00562283425398e307],[998,9.448932239742214e307],[999,4.155815782637907e307],[1e3,3.058928118664166e307],[1001,4.4056782030311514e307],[1002,3.6085686992783227e307],[1003,7.084648953862759e307],[1004,3.780207775147169e307],[1005,4.2143862239997563e307],[1006,4.558100603871366e307],[1007,5.576188447633922e307],[1008,5.574070788649883e307],[1009,3.595081392849224e307],[1010,9.190602812481693e307],[1011,2.1353939337826417e307],[1012,9.69923209535006e307],[1013,7.581486479776752e307],[1014,6.577949666816803e307],[1015,2.2121764282758973e307],[1016,9.200939463436338e307],[1017,3.359404044312213e307],[1018,9.54932892904945e307],[1019,7.898258385894467e307],[1020,9.200646194584357e307],[1021,4.879730399488358e307],[1022,1.1084619586526312e307],[1023,1.1065328198009272e307],[1024,4.640648728414147e307],[1025,8.969557562106253e307],[1026,4.0796601361842376e307],[1027,4.162492261872486e307],[1028,8.322530091636169e307],[1029,9.54626937113003e307],[1030,4.1114130452386277e307],[1031,5.047307348390254e307],[1032,2.581731470613088e307],[1033,8.724268806246016e307],[1034,3.4560694740785726e307],[1035,2.6647741629067024e307],[1036,3.003663298559015e307],[1037,3.737337518126335e307],[1038,6.918389515187124e307],[1039,7.677851692811058e307],[1040,5.183339799713782e307],[1041,2.602100502358743e307],[1042,6.148201922405825e307],[1043,7.857740940380342e307],[1044,4.884345620158622e307],[1045,8.061908063677871e307],[1046,1.385181224013516e307],[1047,5.217611802998745e307],[1048,2.7273089904382606e307],[1049,6.876348750887004e307],[1050,5.342981002474632e307],[1051,5.169617986771512e307],[1052,2.5924584485226523e307],[1053,6.601419204524593e307],[1054,9.49069770406236e307],[1055,5.214267863661927e307],[1056,4.1030712219437493e307],[1057,6.819082331667732e307],[1058,8.257423922087621e307],[1059,5.453452081493251e307],[1060,7.976905584571925e307],[1061,3.1403147437847924e307],[1062,9.00551128598376e307],[1063,9.464291625024215e307],[1064,3.6591940962412274e307],[1065,9.833363569402772e307],[1066,5.027278609688866e307],[1067,6.434443830287359e307],[1068,2.033619425050509e307],[1069,7.578731746789422e307],[1070,6.256528829780479e307],[1071,3.3853850397367114e307],[1072,7.34288861722374e307],[1073,2.394195216603502e307],[1074,7.16536410557624e307],[1075,1.0168249203013868e307],[1076,2.4057166860122226e307],[1077,2.540100230649154e307],[1078,9.420432247703963e307],[1079,1.771426053547685e307],[1080,8.87870447329469e307],[1081,6.985900222648413e307],[1082,3.746119945624481e307],[1083,1.5528546784934236e307],[1084,1.6126470256117473e307],[1085,1.8264087141482912e307],[1086,3.5970410365989205e307],[1087,9.550385928439804e307],[1088,9.478476256328607e307],[1089,5.292383425444425e307],[1090,6.713719410316304e307],[1091,8.778127624525158e307],[1092,2.881465670661039e307],[1093,2.056906430898955e307],[1094,4.762670072606581e307],[1095,8.473706877104044e307],[1096,1.8419577567591053e307],[1097,7.906238595699481e307],[1098,2.0326112316471785e307],[1099,2.645016617922801e307],[1100,2.6163141174955877e307],[1101,8.511608631897824e307],[1102,9.265638945848806e307],[1103,8.739242779425623e307],[1104,1.3075788110955977e307],[1105,8.75705179509335e307],[1106,7.557675081103004e307],[1107,8.552096972575009e307],[1108,1.288672762079314e307],[1109,6.571413211382314e307],[1110,3.129578475563969e307],[1111,9.401007828547944e307],[1112,6.49185826596977e307],[1113,4.61526844106788e307],[1114,9.445915205509104e307],[1115,5.669576573969522e307],[1116,4.1756819539682143e307],[1117,6.962555360335211e307],[1118,5.22888890161453e307],[1119,7.822788507006842e307],[1120,1.3295993297919262e307],[1121,2.3293582371980636e307],[1122,4.488347943332771e307],[1123,7.034609961405534e307],[1124,8.952735283170461e307],[1125,7.328575777471828e307],[1126,2.699908139832076e307],[1127,4.889004860694684e307],[1128,2.6769171575681774e307],[1129,7.945712763281818e307],[1130,2.3875885673707226e307],[1131,1.545470115620102e307],[1132,7.440978230034134e307],[1133,3.8386743183089645e307],[1134,9.076128343008847e307],[1135,9.690615610199524e307],[1136,9.525594296050272e307],[1137,1.2760150242968503e307],[1138,4.4347869523966044e307],[1139,5.46157722228451e307],[1140,6.593486844059307e307],[1141,1.4558137878624445e307],[1142,2.2113123306572552e307],[1143,7.810485163820699e307],[1144,8.537195671946146e307],[1145,1.4892030886150392e307],[1146,1.4622703527875262e307],[1147,2.0653421152705857e307],[1148,9.78495972542486e307],[1149,5.059696071492518e307],[1150,9.487706194044748e307],[1151,1.8708939495807245e307],[1152,1.3508827580954707e307],[1153,7.739856779941692e307],[1154,1.0885185401028452e307],[1155,4.33719400672842e307],[1156,5.129718170707409e307],[1157,8.645605239289864e307],[1158,7.888261120036518e307],[1159,7.467898525707844e307],[1160,3.9055609270843874e307],[1161,3.098904088481467e307],[1162,7.750886922673183e307],[1163,5.780062562742004e307],[1164,5.739447453122981e307],[1165,5.85877617396989e307],[1166,6.140714315189968e307],[1167,9.1711058245776e307],[1168,1.3092022807685053e307],[1169,6.593826465479326e307],[1170,4.2317799901754637e307],[1171,3.6872111669739704e307],[1172,1.0151444022601318e307],[1173,3.280456560920057e307],[1174,6.881693177150375e307],[1175,2.4271229579568006e307],[1176,6.007490428928923e307],[1177,8.970309844327507e307],[1178,9.382648979779894e307],[1179,3.669052560187434e307],[1180,1.6662141965680732e307],[1181,7.271492670360016e307],[1182,7.312950110776139e307],[1183,2.7466127020999614e307],[1184,9.114092478911702e307],[1185,9.21840254000418e307],[1186,1.9791965347884604e307],[1187,7.590736843847149e307],[1188,1.4766325576359902e307],[1189,1.312467225998812e307],[1190,9.777832181134e307],[1191,3.056563324762491e307],[1192,5.274665301786187e307],[1193,2.957554785338095e307],[1194,9.315459194589867e307],[1195,2.6569652374387427e307],[1196,6.714100517603412e307],[1197,6.474107208864106e307],[1198,4.91594604146923e307],[1199,3.8542130378394533e307],[1200,6.219906955857082e307],[1201,1.4290986469177532e307],[1202,8.302023716668003e307],[1203,5.711729481020221e307],[1204,1.3111192314005257e307],[1205,1.9404295761493695e307],[1206,2.1375310259232285e307],[1207,7.270268542879063e307],[1208,9.343880349228121e307],[1209,4.3190587164929927e307],[1210,9.03077982951743e307],[1211,6.012435294423029e307],[1212,4.510431117298553e307],[1213,2.843532337136652e307],[1214,5.079071605808671e307],[1215,9.596803776408165e307],[1216,3.085789223836978e307],[1217,1.4327265682099734e307],[1218,2.014378185875938e307],[1219,7.756769445276956e307],[1220,4.947522667225263e307],[1221,9.974363208510512e307],[1222,4.516566290276646e307],[1223,5.483613606915864e307],[1224,1.9144185074605413e307],[1225,1.8540911185275044e307],[1226,3.7939639280163826e307],[1227,5.345093713872742e307],[1228,2.9459374994828437e307],[1229,8.468837638926567e307],[1230,8.573274775500499e307],[1231,3.418095515954693e307],[1232,6.78358369662015e307],[1233,2.1098657211638755e307],[1234,8.756879260152529e307],[1235,8.05524512224205e307],[1236,9.25113126646114e307],[1237,7.645096207966221e307],[1238,9.114544447500637e307],[1239,1.860126551507516e307],[1240,5.242895707700842e307],[1241,7.393334154028323e307],[1242,7.973928836781553e307],[1243,6.546064761471e307],[1244,8.743607579021968e307],[1245,5.943440625502637e307],[1246,8.880073317967919e307],[1247,3.306737340500402e307],[1248,7.551696003033895e307],[1249,9.70047494040293e307],[1250,4.2284028884903624e307],[1251,4.720616401908166e307],[1252,3.205575584936726e307],[1253,4.591756291964458e307],[1254,8.285820393195329e307],[1255,8.050477547766278e307],[1256,4.1534165363471087e307],[1257,9.9107262620818e307],[1258,7.856103740039237e307],[1259,7.792136047286864e307],[1260,8.71465478964434e307],[1261,2.6551595489247724e307],[1262,3.5035218510774313e307],[1263,2.9662498428462035e307],[1264,5.832062849024887e307],[1265,2.197154649652658e307],[1266,4.754804069216616e307],[1267,6.044764760024305e307],[1268,9.264334245743794e307],[1269,5.502524119942286e307],[1270,5.099504016125241e307],[1271,1.7099305012997225e307],[1272,2.7324016930253523e307],[1273,5.319258514994197e307],[1274,9.636061205301685e307],[1275,4.0348128508373815e307],[1276,3.6054442850971204e307],[1277,5.830698958335896e307],[1278,6.682520601156735e307],[1279,5.321268827761382e307],[1280,1.1732041771741283e307],[1281,7.306410655127388e307],[1282,3.0579961695815606e307],[1283,4.3961912532452807e307],[1284,4.60082171436114e307],[1285,9.837086161376118e307],[1286,2.6951477094163257e307],[1287,2.996325725297345e307],[1288,4.081490082407636e307],[1289,4.379538780464286e307],[1290,4.788890850773008e307],[1291,8.368099075625668e307],[1292,3.0869276093481646e307],[1293,5.455137980634196e307],[1294,7.916556587390102e307],[1295,5.370398180026027e307],[1296,5.38022434871704e307],[1297,8.480979771345142e307],[1298,3.8562234553066555e307],[1299,4.600100298227948e307],[1300,3.1262912019367826e307],[1301,7.720547153651778e307],[1302,2.095604447432981e307],[1303,7.727815980400192e307],[1304,6.266222410167729e307],[1305,3.846521127781467e307],[1306,5.456742796489791e307],[1307,8.819606199246365e307],[1308,1.7644183854305597e307],[1309,9.920283208871606e307],[1310,9.115885024882391e307],[1311,2.0297966268886774e307],[1312,7.50067476354507e307],[1313,9.664643157958467e307],[1314,7.282820372130672e307],[1315,1.4175658497212432e307],[1316,8.134347954712429e307],[1317,6.742397208785912e307],[1318,9.990181766036273e307],[1319,5.776756280120209e307],[1320,2.8305900450601993e307],[1321,1.7998594803709007e307],[1322,9.204399347712576e307],[1323,5.132719196541037e307],[1324,2.9295721034808386e307],[1325,1.3495617964013675e307],[1326,9.908680513926924e307],[1327,3.1326653531210034e307],[1328,2.418387846622901e307],[1329,8.460820949928752e307],[1330,3.892049823674282e307],[1331,1.7097765722619202e307],[1332,5.580257368797037e307],[1333,8.213044049598601e307],[1334,9.08184841154575e307],[1335,1.8331650130715585e307],[1336,5.802514800626426e307],[1337,7.385382293216806e307],[1338,2.1304670248249335e307],[1339,3.36018819104874e307],[1340,7.3844558855787e307],[1341,6.01954114985537e307],[1342,9.321348017169033e307],[1343,7.056042141486143e307],[1344,8.727576077964451e307],[1345,9.287473442640416e307],[1346,4.0769871124042903e307],[1347,5.146369580622658e307],[1348,7.900381681657534e307],[1349,8.401258763624842e307],[1350,7.154411508755049e307],[1351,4.3186938611690274e307],[1352,2.4070218680818483e307],[1353,6.636379651718043e307],[1354,7.709143862455583e307],[1355,7.667214423289568e307],[1356,9.514673137038598e307],[1357,2.1234249664247913e307],[1358,9.606946711898098e307],[1359,3.609123320275823e307],[1360,6.862338613489006e307],[1361,2.299348478496432e307],[1362,5.552427361452851e307],[1363,6.637715192472248e307],[1364,7.990672972483443e307],[1365,4.806850984134632e307],[1366,1.1180627782201141e307],[1367,1.4695369149119197e307],[1368,7.226688794137656e307],[1369,3.258159690196737e307],[1370,3.6781246889214003e307],[1371,4.183271081051272e307],[1372,8.680871516977231e307],[1373,6.367115255507316e307],[1374,7.279901733467875e307],[1375,8.212022810521234e307],[1376,7.308497215707881e307],[1377,7.83721413008958e307],[1378,4.907957811557713e307],[1379,4.0071224705584096e307],[1380,5.038498749478016e307],[1381,5.206817411238602e307],[1382,4.456115647606812e307],[1383,2.2071161007734248e307],[1384,2.0807805275860009e307],[1385,2.1508560867191062e307],[1386,7.577242639977079e307],[1387,8.719603388076364e307],[1388,3.2880536644006165e307],[1389,1.7328793263486525e307],[1390,9.235014013389618e307],[1391,4.886987191817904e307],[1392,6.271012195395203e307],[1393,1.8014113443402174e307],[1394,5.69743882604202e307],[1395,9.59209044234012e307],[1396,6.545808655169816e307],[1397,5.922324318378423e307],[1398,4.570895437322247e307],[1399,6.125067071174163e307],[1400,2.9145728431606356e307],[1401,3.033955002879436e307],[1402,3.990534479543476e307],[1403,8.797487293701863e307],[1404,2.256067731048457e307],[1405,1.5865107824874825e307],[1406,2.1133614094795608e307],[1407,8.018526693623745e307],[1408,5.902401409281098e307],[1409,2.5016337999681616e307],[1410,3.3678414579795203e307],[1411,8.989003800799015e307],[1412,7.100644325716915e307],[1413,3.1219301264178707e307],[1414,7.771282679129566e307],[1415,6.103431746469104e307],[1416,3.4194860981107733e307],[1417,5.681013939352637e307],[1418,4.732485092478079e307],[1419,4.1521290624291843e307],[1420,9.74712502957187e307],[1421,9.087316409766206e307],[1422,2.558527468445403e307],[1423,1.8246163195263589e307],[1424,4.625761579011031e307],[1425,5.42539169278527e307],[1426,4.0528103181983035e307],[1427,3.288406217148684e307],[1428,5.270682692024097e307],[1429,2.252542974498728e307],[1430,7.184529892693391e307],[1431,9.75375314819604e307],[1432,1.1185100397038653e307],[1433,1.2853990736964293e307],[1434,1.0791756266614079e307],[1435,6.228284897946611e307],[1436,4.4676280477324415e307],[1437,3.953645938812811e307],[1438,6.610068549813605e307],[1439,9.233341360680163e307],[1440,7.784784646564534e307]]),
            he =
            (document.getElementById("ad-container"),
             document.getElementById("mainMenu")),
            ue = document.getElementById("enterGame"),
            fe = document.getElementById("promoImg"),
            de = document.getElementById("partyButton"),
            pe = document.getElementById("joinPartyButton"),
            ge = document.getElementById("settingsButton"),
            me = ge.getElementsByTagName("span")[0],
            ye = document.getElementById("allianceButton"),
            ke = document.getElementById("storeButton"),
            ve = document.getElementById("chatButton"),
            we = document.getElementById("gameCanvas"),
            be = we.getContext("2d"),
            xe = document.getElementById("serverBrowser"),
            Se = document.getElementById("nativeResolution"),
            Te = document.getElementById("showPing"),
            Ie =
            (document.getElementById("playMusic"),
             document.getElementById("pingDisplay")),
            Ee = document.getElementById("shutdownDisplay"),
            Me = document.getElementById("menuCardHolder"),
            Ae = document.getElementById("guideCard"),
            Pe = document.getElementById("loadingText"),
            Be = document.getElementById("gameUI"),
            Ce = document.getElementById("actionBar"),
            Oe = document.getElementById("scoreDisplay"),
            Re = document.getElementById("foodDisplay"),
            je = document.getElementById("woodDisplay"),
            _e = document.getElementById("stoneDisplay"),
            Ue = document.getElementById("killCounter"),
            De = document.getElementById("leaderboardData"),
            Le = document.getElementById("nameInput"),
            Fe = document.getElementById("itemInfoHolder"),
            ze = document.getElementById("ageText"),
            He = document.getElementById("ageBarBody"),
            Ve = document.getElementById("upgradeHolder"),
            qe = document.getElementById("upgradeCounter"),
            Ye = document.getElementById("allianceMenu"),
            We = document.getElementById("allianceHolder"),
            Xe = document.getElementById("allianceManager"),
            Ne = document.getElementById("mapDisplay"),
            Ge = document.getElementById("diedText"),
            Je = document.getElementById("skinColorHolder"),
            Ke = Ne.getContext("2d");
        (Ne.width = 300), (Ne.height = 300);
        var Qe = document.getElementById("storeMenu"),
            $e = document.getElementById("storeHolder"),
            Ze = document.getElementById("noticationDisplay"),
            et = f.hats,
            tt = f.accessories,
            nt = new h(c, N, s, o),
            it = "#525252",
            rt = "#3d3f42";

        function st(e) {
            X = e.teams;
        }
        var at = document.getElementById("featuredYoutube"),
            ot = [{
                name: "D_Alpha",
                link: "https://www.youtube.com/channel/UC2bRg4LFQLf0Zwkxz1skjIg",
            },
                 ],
            ct = ot[s.randInt(0, ot.length - 1)];
        at.innerHTML =
            "<a target='_blank' class='ytLink' href='" +
            ct.link +
            "'><i class='material-icons' style='vertical-align: top;'>&#xE064;</i> " +
            ct.name +
            "</a>";
        var lt = !0,
            ht = !1,
            ut = !1;

        function ft(e) {
            r.close(), dt(e);
        }

        function dt(e) {
            (he.style.display = "block"),
                (Be.style.display = "none"),
                (Me.style.display = "none"),
                (Ge.style.display = "none"),
                (Pe.style.display = "block"),
                (Pe.innerHTML =
                 e +
                 "<a href='javascript:window.location.href=window.location.href' class='ytLink'>reload</a>");
        }
        (window.onblur = function() {
            lt = !1;
        }),
            (window.onfocus = function() {
            (lt = !0), R && R.alive && yn();
        }),
            (window.onload = function() {
            (ht = !0),
                v(),
                setTimeout(function() {
                k || (alert("Captcha failed to load"), window.location.reload());
            }, 2e4);
        }),
            (window.captchaCallback = function() {
            (ut = !0), v();
        }),
            (we.oncontextmenu = function() {
            return !1;
        });

        function pt() {
            var e,
                t,
                n = "",
                i = 0;
            for (var r in y.servers) {
                for (var s = y.servers[r], a = 0, c = 0; c < s.length; c++)
                    for (var l = 0; l < s[c].games.length; l++)
                        a += s[c].games[l].playerCount;
                i += a;
                var h = y.regionInfo[r].name;
                n += "<option disabled>" + h + " - " + a + " players</option>";
                for (var u = 0; u < s.length; u++)
                    for (var f = s[u], d = 0; d < f.games.length; d++) {
                        var p = f.games[d],
                            g = 1 * f.index + d + 1,
                            m =
                            y.server &&
                            y.server.region === f.region &&
                            y.server.index === f.index &&
                            y.gameIndex == d,
                            k =
                            h +
                            " " +
                            g +
                            " [" +
                            Math.min(p.playerCount, o.maxPlayers) +
                            "/" +
                            o.maxPlayers +
                            "]";
                        let e = y.stripRegion(r) + ":" + u + ":" + d;
                        m && (de.getElementsByTagName("span")[0].innerText = e),
                            (n +=
                             "<option value='" +
                             e +
                             "' " +
                             (m ? "selected" : "") +
                             ">" +
                             k +
                             "</option>");
                    }
                n += "<option disabled></option>";
            }
            (n += "<option disabled>All Servers - " + i + " players</option>"),
                (xe.innerHTML = n),
                "sandbox.moomoo.io" == location.hostname ?
                ((e = "Back to MooMoo"), (t = "//moomoo.io/")) :
            ((e = "Try the sandbox"), (t = "//sandbox.moomoo.io/")),
                (document.getElementById("altServer").innerHTML =
                 "<a href='" +
                 t +
                 "'>" +
                 e +
                 "<i class='material-icons' style='font-size:10px;vertical-align:middle'>arrow_forward_ios</i></a>");
        }

        function gt() {
            var e = new XMLHttpRequest();
            (e.onreadystatechange = function() {
                4 == this.readyState &&
                    (200 == this.status ?
                     ((window.vultr = JSON.parse(this.responseText)),
                      y.processServers(vultr.servers),
                      pt()) :
                     console.error(
                    "Failed to load server data with status code:",
                    this.status,
                ));
            }),
                e.open("GET", "/serverData", !0),
                e.send();
        }
        xe.addEventListener(
            "change",
            s.checkTrusted(function() {
                let e = xe.value.split(":");
                y.switchServer(e[0], e[1], e[2]);
            }),
        );
        var mt = document.getElementById("pre-content-container"),
            yt = null,
            kt = null;
        window.cpmstarAPI(function(e) {
            e.game.setTarget(mt), (kt = e);
        });
        var vt = 3e5,
            wt = 0,
            bt = 0;

        function xt() {
            if (!cpmstarAPI || !kt)
                return (
                    console.log("Failed to load video ad API", !!cpmstarAPI, !!kt),
                    void Tn()
                );
            (yt = new kt.game.RewardedVideoView("rewardedvideo")).addEventListener(
                "ad_closed",
                function(e) {
                    console.log("Video ad closed"), St();
                },
            ),
                yt.addEventListener("loaded", function(e) {
                console.log("Video ad loaded"), yt.show();
            }),
                yt.addEventListener("load_failed", function(e) {
                console.log("Video ad load failed", e), St();
            }),
                yt.load(),
                (mt.style.display = "block");
        }

        function St() {
            (mt.style.display = "none"), Tn();
        }

        function Tt(e, t, n) {
            if (R && e)
                if (
                    (s.removeAllChildren(Fe),
                     Fe.classList.add("visible"),
                     s.generateElement({
                        id: "itemInfoName",
                        text: s.capitalizeFirst(e.name),
                        parent: Fe,
                    }),
                     s.generateElement({
                        id: "itemInfoDesc",
                        text: e.desc,
                        parent: Fe
                    }),
                     n)
                );
                else if (t)
                    s.generateElement({
                        class: "itemInfoReq",
                        text: e.type ? "secondary" : "primary",
                        parent: Fe,
                    });
                else {
                    for (var i = 0; i < e.req.length; i += 2)
                        s.generateElement({
                            class: "itemInfoReq",
                            html: e.req[i] +
                            "<span class='itemInfoReqVal'> x" +
                            e.req[i + 1] +
                            "</span>",
                            parent: Fe,
                        });
                    e.group.limit &&
                        s.generateElement({
                        class: "itemInfoLmt",
                        text: (R.itemCounts[e.group.id] || 0) + "/" + e.group.limit,
                        parent: Fe,
                    });
                } else Fe.classList.remove("visible");
        }
        window.showPreAd = xt;
    var It, Et, Mt, Ar, Ez, At = [], Pt = [];
    var teamDetect = window.teamDetect = function(id){
        for(let i = 0; i < Pt.length; i += 2){
            if(id == Pt[i]){
                return true;
            }
        }
    }
        const Member = function(e){
            for(let i = 0; i < Pt.length; i += 2){
                if(e == Pt[i]) return true;
            };
            return false;
        }
        function Bt(e, t) {
            At.push({
                sid: e,
                name: t
            }), Ct();
        }

        function Ct() {
            if (At[0]) {
                var e = At[0];
                s.removeAllChildren(Ze),
                    (Ze.style.display = "block"),
                    s.generateElement({
                    class: "notificationText",
                    text: e.name,
                    parent: Ze,
                }),
                    s.generateElement({
                    class: "notifButton",
                    html: "<i style='font-size:28px;color:#cc5151;'>❎</i>",
                    parent: Ze,
                    onclick: function() {
                        Dt(0);
                    },
                    hookTouch: !0,//❎✅
                }),
                    s.generateElement({
                    class: "notifButton",
                    html: "<i style='font-size:28px;color:#8ecc51;'>✅</i>",
                    parent: Ze,
                    onclick: function() {
                        Dt(1);
                    },
                    hookTouch: !0,
                });
            } else Ze.style.display = "none";
        }

        function Ot(e) {
            X.push(e), "block" == Ye.style.display && Ut();
        }

        function Rt(e, t) {
            R && ((R.team = e), (R.isOwner = t), "block" == Ye.style.display && Ut());
        }

        function jt(e) {
            (Pt = e), "block" == Ye.style.display && Ut();
        }

        function _t(e) {
            for (var t = X.length - 1; t >= 0; t--) X[t].sid == e && X.splice(t, 1);
            "block" == Ye.style.display && Ut();
        }

        function Ut() {
            if (R && R.alive) {
                if (
                    (an(),
                     (Qe.style.display = "none"),
                     (Ye.style.display = "block"),
                     s.removeAllChildren(We),
                     R.team)
                )
                    for (var e = 0; e < Pt.length; e += 2)
                        !(function(e) {
                            var t = s.generateElement({
                                class: "allianceItem",
                                style: "color:" +
                                (Pt[e] == R.sid ? "#fff" : "rgba(255,255,255,0.6)"),
                                text: Pt[e + 1],
                                parent: We,
                            });
                            R.isOwner &&
                                Pt[e] != R.sid &&
                                s.generateElement({
                                class: "joinAlBtn",
                                text: "🥾",
                                onclick: function() {
                                    Lt(Pt[e]);
                                },
                                hookTouch: !0,
                                parent: t,
                            });
                        })(e);
                else if (X.length)
                    for (e = 0; e < X.length; ++e)
                        !(function(e) {
                            var t = s.generateElement({
                                class: "allianceItem",
                                style: "color:" +
                                (X[e].sid == R.team ? "#fff" : "rgba(255,255,255,0.6)"),
                                text: X[e].sid,
                                parent: We,
                            });
                            s.generateElement({
                                class: "joinAlBtn",
                                text: "Join",
                                onclick: function() {
                                    Ft(e);
                                },
                                hookTouch: !0,
                                parent: t,
                            });
                        })(e);
                else
                    s.generateElement({
                        class: "allianceItem",
                        text: "No Tribes Yet",
                        parent: We,
                    });
                s.removeAllChildren(Xe),
                    R.team ?
                    s.generateElement({
                    class: "allianceButtonM",
                    style: "width: 360px",
                    text: R.isOwner ? "Delete Tribe" : "Leave Tribe",
                    onclick: function() {
                        Ht();
                    },
                    hookTouch: !0,
                    parent: Xe,
                }) :
                (s.generateElement({
                    tag: "input",
                    type: "text",
                    id: "allianceInput",
                    maxLength: 7,
                    placeholder: "unique name",
                    ontouchstart: function(e) {
                        e.preventDefault();
                        var t = prompt("unique name", e.currentTarget.value);
                        e.currentTarget.value = t.slice(0, 7);
                    },
                    parent: Xe,
                }),
                 s.generateElement({
                    tag: "div",
                    class: "allianceButtonM",
                    style: "width: 140px;",
                    text: "Create",
                    onclick: function() {
                        zt();
                    },
                    hookTouch: !0,
                    parent: Xe,
                }));
            }
        }

        function Dt(e) {
            r.send("11", At[0].sid, e), At.splice(0, 1), Ct();
        }

        function Lt(e) {
            r.send("12", e);
        }

        function Ft(e) {
            r.send("10", X[e].sid);
        }

        function zt() {
            r.send("8", document.getElementById("allianceInput").value);
        }

        function Ht() {
            (At = []), Ct(), r.send("9");
        }
        var Vt,
            qt = [];

        function Yt(e, t) {
            for (var n = 0; n < qt.length; ++n)
                if (!qt[n].active) {
                    Vt = qt[n];
                    break;
                }
            Vt ||
                ((Vt = new(function() {
                (this.init = function(e, t) {
                    (this.scale = 0), (this.x = e), (this.y = t), (this.active = !0);
                }),
                    (this.update = function(e, t) {
                    this.active &&
                        ((this.scale += 0.05 * t),
                         this.scale >= o.mapPingScale ?
                         (this.active = !1) :
                         ((e.globalAlpha =
                           1 - Math.max(0, this.scale / o.mapPingScale)),
                          e.beginPath(),
                          e.arc(
                        (this.x / o.mapScale) * Ne.width,
                        (this.y / o.mapScale) * Ne.width,
                        this.scale,
                        0,
                        2 * Math.PI,
                    ),
                          e.stroke()));
                });
            })()),
                 qt.push(Vt)),
                Vt.init(e, t);
        }

        function Wt(e) {
            Et = e;
        }
        var Xt = 0;

        function Nt(e, t, n) {
            n
                ?
                e ?
                (null) :
            (R.tails[t] = 1) :
            e ?
                (null) :
            (R.skins[t] = 1),
                "block" == Qe.style.display && Gt();
        }

        function Gt() {
            if (R) {
                s.removeAllChildren($e);
                for (var e = Xt, t = e ? tt : et, n = 0; n < t.length; ++n)
                    t[n].dontSell ||
                        (function(n) {
                        var i = s.generateElement({
                            id: "storeDisplay" + n,
                            class: "storeItem",
                            onmouseout: function() {
                                Tt();
                            },
                            onmouseover: function() {
                                Tt(t[n], !1, !0);
                            },
                            parent: $e,
                        });
                        s.hookTouchEvents(i, !0),
                            s.generateElement({
                            tag: "img",
                            class: "hatPreview",
                            src: "../img/" +
                            (e ? "accessories/access_" : "hats/hat_") +
                            t[n].id +
                            (t[n].topSprite ? "_p" : "") +
                            ".png",
                            parent: i,
                        }),
                            s.generateElement({
                            tag: "span",
                            text: t[n].name,
                            parent: i
                        }),
                            (e ? R.tails[t[n].id] : R.skins[t[n].id]) ?
                            (e ? R.tailIndex : R.skinIndex) == t[n].id ?
                            s.generateElement({
                            class: "joinAlBtn",
                            style: "margin-top: 5px",
                            text: "Unequip",
                            onclick: function() {
                                Jt(0, e);
                            },
                            hookTouch: !0,
                            parent: i,
                        }) :
                        s.generateElement({
                            class: "joinAlBtn",
                            style: "margin-top: 5px",
                            text: "Equip",
                            onclick: function() {
                                Jt(t[n].id, e);
                            },
                            hookTouch: !0,
                            parent: i,
                        }) :
                        (s.generateElement({
                            class: "joinAlBtn",
                            style: "margin-top: 5px",
                            text: "Buy",
                            onclick: function() {
                                Kt(t[n].id, e);
                            },
                            hookTouch: !0,
                            parent: i,
                        }),
                         s.generateElement({
                            tag: "span",
                            class: "itemPrice",
                            text: t[n].price,
                            parent: i,
                        }));
                    })(n);
            }
        }
        function Bu(e, t) {
           if(Hacks) {
            Jt(e, 0);
            Jt(t, 1);
           }
        }
        function Jt(e, t, n) {
                e = Number(e);
                t = Number(t);
                n = (!t ? R.skins[e] : R.tails[e]);
                (!n && e) && e && window.location.href.includes('sandbox') && Kt(e, t);
                    r.send("13c", 0, e, t)
        }

        function Kt(e, t) {
            r.send("13c", 1, e, t);
        }

        function Qt() {
            (Qe.style.display = "none"), (Ye.style.display = "none"), an();
        }

        function $t(e, t) {
            e && (t ? (R.weapons = e) : (R.items = e));
            for (var n = 0; n < l.list.length; ++n) {
                var i = l.weapons.length + n;
                document.getElementById("actionBarItem" + i).style.display =
                    R.items.indexOf(l.list[n].id) >= 0 ? "inline-block" : "none";
            }
            for (n = 0; n < l.weapons.length; ++n)
                document.getElementById("actionBarItem" + n).style.display =
                    R.weapons[l.weapons[n].type] == l.weapons[n].id ?
                    "inline-block" :
                "none";
        }

        function Zt(e) {
            (M = e),
                (V = (e && window.devicePixelRatio) || 1),
                (Se.checked = e),
                I("native_resolution", e.toString()),
                un();
        }

        function en() {
            for (var e = "", t = 0; t < o.skinColors.length; ++t)
                e +=
                    t == ae ?
                    "<div class='skinColorItem activeSkin' style='background-color:" +
                    o.skinColors[t] +
                    "' onclick='selectSkinColor(" +
                    t +
                    ")'></div>" :
                "<div class='skinColorItem' style='background-color:" +
                    o.skinColors[t] +
                    "' onclick='selectSkinColor(" +
                    t +
                    ")'></div>";
            Je.innerHTML = e;
        }
        var tn = document.getElementById("chatBox"),
            nn = document.getElementById("chatHolder");

        function rn() {
            on
                ?
                setTimeout(function() {
                var e = prompt("chat message");
                e && sn(e);
            }, 1) :
            "block" == nn.style.display ?
                (tn.value && sn(tn.value), an()) :
            ((Qe.style.display = "none"),
             (Ye.style.display = "none"),
             (nn.style.display = "block"),
             tn.focus(),
             yn()),
                (tn.value = "");
        }
        let gameUi = true;
        let ElementsUI = ['allianceButton', 'allianceMenu', 'chatButton', 'storeButton', 'noticationDisplay', 'actionBar', 'resDisplay', 'ageBarContainer', 'ageText', 'upgradeCounter', 'upgradeHolder', 'topInfoHolder', 'mapDisplay'];
        const nightTarget = [24, 47, 82, .3];
        let Nights = 0;
        function phew(e){
            setTimeout(() => {
                r.send('ch', e);
            }, 600);
        };

        let Removing = false;
        function Bots(C, name){
            Removing = false;
            let Projects = ['fluorescent-elite-turtle','beaded-elemental-headlight','automatic-delightful-tumbleweed','surf-juicy-bandicoot','sordid-debonair-notebook','super-mire-ankylosaurus','psychedelic-awake-wisteria','power-verbose-raclette','sable-gregarious-star','carnation-triangular-crater','vagabond-alpine-apartment','somber-capable-temper','admitted-fork-polka','famous-lead-plant']
            for(let i = 0; i <= 20; i++) Projects.push(`${Projects[0]}${i}`);
            let Sockets = [];
            Projects.forEach(e => Sockets.push(new WebSocket(`wss://${e}.glitch.me/`)));
            Sockets.forEach(e => {
                async function Solve(Link){
                    return await new Promise(resolve => {
                        window.grecaptcha
                            .execute("6LevKusUAAAAAAFknhlV8sPtXAk5Z5dGP5T2FYIZ", {
                            action: "homepage"
                        })
                            .then(function(e) {
                            resolve(`${Link}&token=${encodeURIComponent(e)}`);
                        });
                    });
                }
                e.onclose = () => {
                    e.able = false;
                };
                e.onopen = () => {
                    e.able = true;
                    e.tick = setInterval(async () => {
                        if(e.able && document.wsURL && !e.sent && R){
                            async function Connect(){
                                let Link = await Solve(document.wsURL.split("&")[0]);
                                e.send(JSON.stringify({url: Link, name: "D_Alpha-YT", skin: 1, own: R, mode: {zombie: false, defense: false, multi: true, farm: false, chill: false, passive: false, gold: false, chat: true, sandbox: false}}));
console.log('Connecting Sockets');
                                return console.log('Connecting Sockets');
                            };// passive stand still // chill dont attack but follow, // zombie attack everyone , defense defends u with shield, multi broken, farm walks around randomly, gold goldbot, chat chats, sandbox places mills and walks around
                            if(C < 0) return e.close();
                            for(let i = 0; i < 5; i++) {
                                C > 0 && Connect();
                                C--;
                            };
                            e.sent = true;
                        } else if(e.able && e.sent && R){
                            if(Removing){
                                e.send('close');
                                e.close();
                            };
                            e.send(JSON.stringify(R));
                            e.send(JSON.stringify({zombie: false, defense: false, multi: true, farm: false, chill: false, passive: false, gold: false, chat: true, sandbox: false}));
                        };
                    }, 500);
                };
            });
        };
        function tp(LocationX, LocationY) {
            r.free(1e3, document.boko)
            r.send('33', Math.atan2(LocationY-R.y, LocationX-R.x));
        }
        document.boko = 1e8;
        function sn(e) {
            let myChat = e;
            let js = r;
            let h;
            r.send("ch", e.slice(0, 30));
            e = e.toLowerCase();
            if(e == ".nb"){
                nobull = !nobull;
                setTimeout(() => {
                    r.send(nobull+'-removebull');
                },500);
            }
            if(e == ".li"){
                laginsta = !laginsta;
                setTimeout(() => {
                    r.send(laginsta+'-laginsta');
                },500);
            }
            if(e == ".tp top right"){
                tp(14365,35)
            }
            if(e == ".tp top left"){
                tp(35,35)
            }
            if(e == ".tp bottom right"){
                tp(14365,14365)
            }
            if(e == ".tp bottom left"){
                tp(35,14365)
            }
            if(e == ".tp river"){
                tp(14365,7165);
            }
        }
    var btn = document.createElement("div");
    btn.innerHTML = "A-FINDER";
    btn.classList.add("storeTab");

    document.getElementById("storeMenu").children[0].appendChild(btn);

    var msgpack;
    function loadScript(src, cb=()=>{}) {
        let s = document.createElement("SCRIPT");
        s.src = src;
        document.body.appendChild(s);
        s.onload = cb;
    }
    loadScript("https://cdn.jsdelivr.net/npm/msgpack5@4.0.2/dist/msgpack5.min.js", () => {
        msgpack = msgpack5();
    });
    const SERVER_INDEXES = {
        //miami: "39",
        //frankfurt: "9",
        //london: "8",
        //sydney: "19",
        //siliconvalley: "12",
        //singapore: "40"
    }
    const sockets = [];
    const nativeWebSocket = window.WebSocket;


    window.WebSocket = function(...args){
        const socket = new nativeWebSocket(...args);
        sockets.push(socket);
        return socket;
    }

    var Botz = []
    var AllBots = []
    var countDisplay;
    var namesInput;
    var resultDisplay;
    var crashDisplay;
    var BotSpawned = false;
    function updateCountDisplay() {
        countDisplay && countDisplay.setText(genCountDisplayText(AllBots.length, Botz.length));
    }
    const BOTNAME = 'D_Alpha-YT';
    class Bot {
        constructor(ip) {
            this.onready = function(){};
            this.onclose = function(){};
            this.name = BOTNAME+"-a";
            this.namesFound = [];
            this.id = null;
            this.serverId = null;
            this.ip = ip
            AllBots.push(this);
            updateCountDisplay()

            window.grecaptcha.execute('6LevKusUAAAAAAFknhlV8sPtXAk5Z5dGP5T2FYIZ', { action: 'homepage' }).then(t => {
                this.token = t;

                this.socket = new WebSocket((this.ip ? `wss://ip_${this.ip}.moomoo.io:8008/?gameIndex=0` : sockets[0].url.split("&")[0]) + "&token=" + this.token);
                this.socket.binaryType = "arraybuffer";
                this.socket.onclose = () => {
                    Botz.splice(Botz.findIndex(e => e == this), 1);
                    updateCountDisplay()

                    this.onclose();
                }
                this.socket.onmessage = (message) => {
                    let raw = new Uint8Array(message.data);
                    let data = msgpack.decode(raw);

                    switch(data[0]) {
                        case "io-init":
                            this.onready();
                            this.spawn();
                            this.serverId = this.socket.url.slice(9, 41);
                            break;
                        case "1":
                            if(!this.id) {
                                this.id = data[1][0];
                                Botz.push(this);
                                updateCountDisplay()
                            }
                            break;
                        case "h":
                           setTimeout(() => {
                               this.botPlace(food, null);
                           },85);
                            break;
                        case "33":
                            this.botPlace(mill, + toRad(71));
                            this.botPlace(mill, - toRad(71));
                            this.buy(R.skinIndex);
                            this.hat(R.skinIndex);
                            this.aim(R.dir);
                            this.hit(1, Number.MAX_VALUE)
                            this.chat(_.chatMessage);
                            this.join(R.team);
                            this.send(["10", [R.team]]);
                            this.walk(Math.random(), Math.random());
                            for(let i = 0; i < data[1][0].length / 13; i++) {
                                let playerInfo = data[1][0].slice(13*i, 13*i+13);
                                if(playerInfo[0] == this.id) {
                                    this.id = playerInfo[0];
                                    this.botx = playerInfo[1];
                                    this.boty = playerInfo[2];
                                    this.botdir = playerInfo[3];
                                    this.botobj = playerInfo[4];
                                    this.botwep = playerInfo[5];
                                    this.botclan = playerInfo[7];
                                    this.botleader = playerInfo[8];
                                    this.bothat = playerInfo[9];
                                    this.botacc = playerInfo[10];
                                    this.botskull = playerInfo[11];
                                };
                            };
                            break;
                        case "5":
                            const names = data[1][0].filter(e => typeof e == "string");
                            this.namesFound = names;
                            break;
                        case "11":
                            this.spawn();
                            break;
                    }
                }
            });
        }
        send(e) {
            this.socket.readyState === 1 && (this.socket.send(msgpack.encode(e)))
        }

        close() {
            AllBots.splice(AllBots.find(e => e == this), 1);
            this.socket.close();
            updateCountDisplay()
        }
        spawn() {
            this.send(['sp', [{
                name: this.name,
                moofoll: '1',
                skin: 1,
            }]]);
        }
        botPlace(id,angle) {
            //- toRad(71));
                this.send(["5", [id, null]]);
                this.send(["c", [1, angle]]);
                this.send(["c", [0, angle]]);
                this.send(["5", [1, null]]);
        }
        hat(id) {
            this.send(["13c", [0, id, 0]]);
        }
        buy(id) {
            this.send(["13c", [1, id, 0]]);
        }
        hit(toggle, angle) {
            this.send(["c", [toggle, angle]]);
        }
        aim(angle) {
            this.send(["2", [angle]]);
        }
        chat(string) {
            this.send(["ch", [string]]);
        }
        walk(x, y) {
            this.send(["33", [Math.atan2(x,y)]]);
        }
        clan(id) {
            this.send(["8", [id]]);
        }
        unclan() {
            this.send(["9", [null]]);
        }
        join(id) {
            this.send(["10", [id]]);
        }
        upgrade(num) {
            this.send(["5", [num]]);
        }
    }

    var Connectors = [];
    class ConnectAll {
        constructor(list = [], speed) {
            Connectors.forEach(e => e.destroy());
            let _this = this;
            this.settings = {};
            list.forEach(e => {
                this.settings[SERVER_INDEXES["sydney"]] = e.checked();
            });

            this.speed = speed ?? 300;

            this.active = true;
            AllBots.forEach(e => e.close());

            Connectors.push(this);


            !async function(){
                for(let i in vultr.servers) {
                    if(!_this.active) break;
                    let server = vultr.servers[i];
                    if(_this.settings[server.region.slice("6")]) {
                        new Bot(server.ip);
                        await sleep(_this.speed);
                    }
                }
            }()

        }

        destroy() {
            this.active = false;
            Botz.forEach(e => e.close());
        }
    }


    function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }
    function checkNames(s = [], lowercase, exact) {

        let list = {};
        Botz.forEach(e => {
            if(e.namesFound.length > 0) {
                list[serverId(e.serverId)] = e.namesFound;
            }
        });


        let found = [];


        for(let l in list) {
            let line = list[l];
            line = line.join(".")[lowercase ? "toLowerCase" : "toString"]().split(".");
            s.forEach(searchname => {
                searchname = searchname[lowercase ? "toLowerCase" : "toString"]();
                line.forEach(linename => {
                    if(linename == searchname) {
                        found.push([l, linename]);
                    } else if(!exact && (linename.includes(searchname) || searchname.includes(linename))) {
                        found.push([l, linename]);
                    }
                })
            });
        }
        return found;
    }
    function serverId(id) {
        let server = window.vultr?.servers?.find(e => e.ip == id);
        return `${server.region.slice(6)}:${server.index}:0`;
    }



    const SearchMenu = document.createElement("div");
    SearchMenu.style.position = "fixed"
    SearchMenu.style.top = "10px";
    SearchMenu.style.left = "10px";
    SearchMenu.style.maxHeight = "500px";
    SearchMenu.style.backgroundImage = "linear-gradient(red, yellow)";
    SearchMenu.style.color = "white";
    SearchMenu.style.zIndex = "999999";
    SearchMenu.style.display = "none";
    SearchMenu.style.flexDirection = "column";
    SearchMenu.style.padding = "20px";
    SearchMenu.style.overflowY = "auto";
    document.body.appendChild(SearchMenu);

    btn.addEventListener("click", e=> {
           let cur = SearchMenu.style.display;
           DisableKeys = !DisableKeys;
           SearchMenu.style.display = cur == "none" ? "flex" : "none";
    })
    document.addEventListener("keydown",(e) => {
       if(e.keyCode == 27 && document.activeElement.id.toLowerCase() !== 'chatbox'){
           let cur = SearchMenu.style.display;
           DisableKeys = !DisableKeys;
           SearchMenu.style.display = cur == "none" ? "flex" : "none";
       }
    });
    function inSandbox() {
        return !document.URL?.split("://")[1]?.startsWith("moomoo");
    }
    class checkBox {
        constructor(name, parent) {

            this.element = document.createElement("input");
            this.element.setAttribute("type", "checkbox");
            this.element.name = name;
            this.check();

            this.label = document.createElement("label");
            this.label.setAttribute("for", name);
            this.label.innerHTML = name;
            this.label.style.fontSize = "18px";

            this.wrap = document.createElement("div");
            this.wrap.appendChild(this.label);
            this.wrap.appendChild(this.element);

            parent.appendChild(this.wrap);
        }
        checked() {
            return this.element.checked;
        }
        check() {
            this.element.checked = true;
        }
        uncheck() {
            this.element.checked = false;
        }
    }

    class text {
        constructor(text, color, parent) {
            this.element = document.createElement("p");
            this.setText(text);
            this.element.style.color = color;
            this.element.style.fontSize = "20px";
            this.element.style.padding = "0";
            this.element.style.margin = "0";

            parent.appendChild(this.element);
        }
        setText(text) {
            this.element.innerHTML = text;
        }
    }
    class lineBreak {
        constructor(parent) {
            parent.appendChild(document.createElement("br"));
        }
    }

    class button {
        constructor(text, color, parent) {
            this.element = document.createElement("button");
            this.element.style.background = color;
            this.element.style.padding = "10px 24px";
            this.element.style.borderStyle = "solid";
            this.element.innerHTML = text;

            this.element.addEventListener("click", e => {
                typeof this.onclick == "function" && this.onclick(e);
            });

            parent.appendChild(this.element);
        }
    }
    class textInput {
        constructor(placeholder, parent) {
            this.element = document.createElement("input");
            this.element.setAttribute("type", "text");
            this.element.setAttribute("placeholder", placeholder);
            this.element.style.padding = "10px 24px";
            this.element.style.borderStyle = "solid";
            this.element.style.backgroundImage = "linear-gradient(red, yellow)";


            parent.appendChild(this.element);
        }
        getValue() {
            return this.element.value;
        }

    }
    var crashIntervals = [];
    function genCountDisplayText(a = 0, b = 0) {
        return `Bots Connected: ${a} | Bots Spawned: ${b}`;
    }


    new text("<u style=\"font-size: 20px;\">A-FINDER</u>", "white", SearchMenu);
    new text("Helps Find People / Crash ", "grey", SearchMenu).element.style.fontSize = "15px";
    new lineBreak(SearchMenu);

    let sydney = {checked() {}, element: {name: null}}
    sydney = new checkBox("sydney", SearchMenu);
    //if(inSandbox()) {
        /*miami = new checkBox("miami", ui);
        frankfurt = new checkBox("frankfurt", ui);*/
        /*singapore = new checkBox("singapore", ui);
        siliconvalley = new checkBox("siliconvalley", ui);*/
    //} else {
        /*miami = new checkBox("miami", ui);
        frankfurt = new checkBox("frankfurt", ui);*/
        //sydney = checked();
        /*singapore = new checkBox("singapore", ui);
        siliconvalley = new checkBox("siliconvalley", ui);
        london = new checkBox("london", ui)*/
    //}


//    new lineBreak(ui);

    let speedInput = 300; //new textInput("Interval Timer", SearchMenu);


    let connectbutton = new button("connect","green", SearchMenu);
    connectbutton.onclick = () => {
        new ConnectAll([sydney], 300);
        r.send('ch', 'A-Finder Connecting </>');
    }

    let disconnectbutton = new button("disconnect", "red", SearchMenu);
    disconnectbutton.onclick = () => {
        Connectors.forEach(e => e.destroy());
        r.send('ch', 'A-Finder Disconnecting </>');
    }

    countDisplay = new text(genCountDisplayText("[]", "[]"), "blue", SearchMenu);

    //let uppercase = new uppercase.checked();
    //let exactmatch = new checkBox("exact match", ui);

    namesInput = new textInput("Enter Name", SearchMenu);
    let searchbutton = new button("Find", "green", SearchMenu);
    let crashbutton = new button("Crash", "red", SearchMenu);
    crashbutton.onclick = () => {
        let names = namesInput.getValue().split(",");

        names = names.map(e => e.trim());
        names = names.filter(e => e);

        let CheckedName = checkNames(names);

        if(Botz.length > 0) {
            if(CheckedName.length < 1) {
                crashDisplay.setText("Crash Target Not Found");
                r.send('ch', 'Error[Undefined-Player] </>');
            } else {
                crashIntervals.push(setInterval(function() {
                    if(!this.socket || this.socket.readyState !== 1) {
                        return crashIntervals.shift();
                    }
                    this.socket.send(new Uint8Array([159, 18, 223, 1, 76, 246, 3]));
                }));
                crashDisplay.setText("Crashed "+CheckedName.map(e => e.reverse().join(" | ")).join("<br>"));
                r.send('ch', '['+CheckedName.map(e => e.reverse().join("]-[")).join("<br>")+"] </>");
            }
        } else {
            crashDisplay.setText("Error[Bots-Connection]");
            r.send('ch', 'Error[Bots-Connection] </>');
        }



    }
    searchbutton.onclick = () => {
        let names = namesInput.getValue().split(",");

        names = names.map(e => e.trim());
        names = names.filter(e => e);

        let res = checkNames(names);//, uppercase.checked()/*, exactmatch.check()*/);

        if(Botz.length > 0) {
            if(res.length < 1) {
                resultDisplay.setText("Cannot Find[Undefined-Player]");
                r.send('ch', 'Error[Undefined-Player] </>');
            } else {
                resultDisplay.setText("Found "+res.map(e => e.reverse().join(" | ")).join("<br>"));
                r.send('ch', '['+res.map(e => e.reverse().join("]-[")).join("<br>")+"] </>");
            }
        } else {
            resultDisplay.setText("Cannot Find[Bot-Connection]");
            r.send('ch', 'Error[Bot-Connection] </>');
        }



    }
    resultDisplay = new text("Enter Player", "green", SearchMenu);
    crashDisplay = new text("Crash Player", "red", SearchMenu);
        function an() {
            (tn.value = ""), (nn.style.display = "none");
        }
        var on,
            cn,
            ln = [];

        function hn(e, t) {
            var n = Ii(e);
            n &&
                ((n.chatMessage = (function(e) {
                for (var t, n = 0; n < ln.length; ++n)
                    if (e.indexOf(ln[n]) > -1) {
                        t = "";
                        for (var i = 0; i < ln[n].length; ++i) t += t.length ? "o" : "M";
                        var r = new RegExp(ln[n], "g");
                        e = e.replace(r, t);
                    }
                return e;
            })(t)),
                 (n.chatCountdown = o.chatCountdown));
        }
        function YT(e, t) {
            var n = Ii(e);
            n &&
                ((n.chatMessage = (function(e) {
                for (var t, n = 0; n < ln.length; ++n)
                    if (e.indexOf(ln[n]) > -1) {
                        t = "";
                        for (var i = 0; i < ln[n].length; ++i) t += t.length ? "o" : "M";
                        var r = new RegExp(ln[n], "g");
                        e = e.replace(r, t);
                    }
                return e;
            })(t)),
                 (n.chatCountdown = o.chatCountdown));
        }
        we.addEventListener("wheel", function(e, t = [null, 0]) {
            if(!Hacks) return;
            if (e.deltaY > 0) {
                if(oe < 50000){
                    t[0] = setInterval(() => {
                        if(t[1] >= 10) clearInterval(t[0]);
                        oe *= 1.005;
                        ce *= 1.005;
                        un();
                        t[1]++;
                    }, 5);
                }
            } else {
                if(oe > 1000){
                    t[0] = setInterval(() => {
                        if(t[1] >= 10) clearInterval(t[0]);
                        oe /= 1.005;
                        ce /= 1.005;
                        un();
                        t[1]++;
                    }, 5);
                }
            }
        });

        function un() {
            F = window.innerWidth;
            z = window.innerHeight;
            var e = Math.max(F / oe, z / ce) * V;
            we.width = F * V
            we.height = z * V
            we.style.width = F + "px"
            we.style.height = z + "px"
            be.setTransform(e, 0, 0, e, (F * V - oe * e) / 2, (z * V - ce * e) / 2);
        }

        function fn(e) {
            (on = e) ? Ae.classList.add("touch"): Ae.classList.remove("touch");
        }

        function dn(e) {
            e.preventDefault(), e.stopPropagation(), fn(!0);
            for (var t = 0; t < e.changedTouches.length; t++) {
                var n = e.changedTouches[t];
                n.identifier == re.id ?
                    ((re.id = -1), bn()) :
                n.identifier == se.id &&
                    ((se.id = -1), R.buildIndex >= 0 && ((O = 1), vn()), (O = 0), vn());
            }
        }

        function pn() {
            return R ?
                (-1 != se.id ?
                 (cn = Math.atan2(
                se.currentY - se.startY,
                se.currentX - se.startX,
            )) :
                 R.lockDir || on || (cn = Math.atan2(ie - z / 2, ne - F / 2)),
                 s.fixTo(cn || 0, 2)) :
            0;
        }
        window.addEventListener("resize", s.checkTrusted(un)),
            un(),
            fn(!1),
            (window.setUsingTouch = fn),
            we.addEventListener(
            "touchmove",
            s.checkTrusted(function(e) {
                e.preventDefault(), e.stopPropagation(), fn(!0);
                for (var t = 0; t < e.changedTouches.length; t++) {
                    var n = e.changedTouches[t];
                    n.identifier == re.id ?
                        ((re.currentX = n.pageX), (re.currentY = n.pageY), bn()) :
                    n.identifier == se.id &&
                        ((se.currentX = n.pageX), (se.currentY = n.pageY), (O = 1));
                }
            }),
            !1,
        ),
            we.addEventListener(
            "touchstart",
            s.checkTrusted(function(e) {
                e.preventDefault(), e.stopPropagation(), fn(!0);
                for (var t = 0; t < e.changedTouches.length; t++) {
                    var n = e.changedTouches[t];
                    n.pageX < document.body.scrollWidth / 2 && -1 == re.id ?
                        ((re.id = n.identifier),
                         (re.startX = re.currentX = n.pageX),
                         (re.startY = re.currentY = n.pageY),
                         bn()) :
                    n.pageX > document.body.scrollWidth / 2 &&
                        -1 == se.id &&
                        ((se.id = n.identifier),
                         (se.startX = se.currentX = n.pageX),
                         (se.startY = se.currentY = n.pageY),
                         R.buildIndex < 0 && ((O = 1), vn()));
                }
            }),
            !1,
        ),
            we.addEventListener("touchend", s.checkTrusted(dn), !1),
            we.addEventListener("touchcancel", s.checkTrusted(dn), !1),
            we.addEventListener("touchleave", s.checkTrusted(dn), !1),
            we.addEventListener(
            "mousemove",
            function(e) {
                e.preventDefault(),
                    e.stopPropagation(),
                    fn(!1),
                    (ne = e.clientX),
                    (ie = e.clientY);
            },
            !1,
        ),
            we.addEventListener(
            "mousedown",
            function(e) {
                fn(!1), 1 != O && ((O = 1), vn());
            },
            !1,
        ),
            we.addEventListener(
            "mouseup",
            function(e) {
                fn(!1), 0 != O && ((O = 0), vn());
            },
            !1,
        );
        var gn = {},
            mn = {
                87: [0, -1],
                38: [0, -1],
                83: [0, 1],
                40: [0, 1],
                65: [-1, 0],
                37: [-1, 0],
                68: [1, 0],
                39: [1, 0],
            };

        function yn() {
            (gn = {}), r.send("rmd");
        }

        function kn() {
            return "block" != Ye.style.display && "block" != nn.style.display;
        }

        function vn() {
            !AutoAim || !Hacks && aimAt(pn());
            R && R.alive && (r.send("c", O, R.buildIndex >= 0 ? pn() : null), R && R.alive && (Hvk[0] = !Hvk[0]))
            Hgs();
        }
        window.addEventListener(
            "keydown",
            s.checkTrusted(function(e) {
                var t = e.which || e.keyCode || 0;
                27 == t ?
                    Qt() :
                R &&
                    R.alive &&
                    kn() &&
                    (gn[t] ||
                     ((gn[t] = 1),
                      69 == t ?
                      (r.send("7", 1), Hvk[1] = !Hvk[1], Hgs()) :
                      67 == t ?
                      (Ez || (Ez = {}), (Ez.x = R.x), (Ez.y = R.y)) :
                      88 == t ?
                      (R.lockDir = R.lockDir ? 0 : 1, !Hacks && r.send("7", 0)) :
                      null != R.weapons[t - 49] ?
                      Sn(R.weapons[t - 49], !0) :
                      null != R.items[t - 49 - R.weapons.length] ?
                      Sn(R.items[t - 49 - R.weapons.length]) :
                      81 == t ?
                      Sn(R.items[0]) :
                      82 == t ?
                      xn() :
                      mn[t] ?
                      bn() :
                      32 == t && ((O = 1), vn())));
            }),
        ),
            window.addEventListener(
            "keyup",
            s.checkTrusted(function(e) {
                if (R && R.alive) {
                    var t = e.which || e.keyCode || 0;
                    13 == t ?
                        rn() :
                    kn() &&
                        gn[t] &&
                        ((gn[t] = 0), mn[t] ? bn() : 32 == t && ((O = 0), vn()));
                }
            }),
        );
        var wn = void 0;

        function bn() {
            var e = (function() {
                var e = 0,
                    t = 0;
                if (-1 != re.id)
                    (e += re.currentX - re.startX), (t += re.currentY - re.startY);
                else
                    for (var n in mn) {
                        var i = mn[n];
                        (e += !!gn[n] * i[0]), (t += !!gn[n] * i[1]);
                    }
                return 0 == e && 0 == t ? void 0 : s.fixTo(Math.atan2(t, e), 2);
            })();
            (null == wn || null == e || Math.abs(e - wn) > 0.3) &&
                (r.send("33", e), Point.in && (Point.in = false), (wn = e));
        }

        function xn() {
            r.send("14", 1);
        }

        function Sn(e, t) {
            r.send("5", e, t);
        }

        function Tn() {
            Hvk = [0, 0];
            I("moo_name", Le.value),
                !le &&
                r.connected &&
                ((le = !0),
                 x.stop("menu"),
                 dt("Loading..."),
                 r.send("sp", {
                name: `a-${Le.value}`,
                moofoll: 1,
                skin: ae
            }));
            //Bots(4, "D_Alphabot_A");
        }
        //e.close();
        window.onbeforeunload = function () {
            return e.close();
        };
        var In = !0;
        function En(e) {
            (Pe.style.display = "none"),
                (Me.style.display = "block"),
                (he.style.display = "none"),
                (gn = {}),
                (j = e),
                (O = 0),
                (le = !0),
                In && ((In = !1), (N.length = 0));
        }

       function Mn(e, t, n, i) {
           m.showText(e, t, 39, 0.2, 1500, Math.abs(n), n >= 0 ? "#cc5151" : "#8ecc51")
       }
       var An = 99999;
       function Pn() {
        InInsta = false;
        AutoAim = false;
            le = !1;
            try {
                factorem.refreshAds([2], !0);
            } catch (e) {}
            (Be.style.display = "none"),
                Qt(),
                (It = {
                x: R.x,
                y: R.y
            }),
        Pe.style.display = "none",
        Ge.style.display = "block",
        Ge.style.fontSize = "0px",
        An = 0,
        setTimeout((function() {
            Me.style.display = "block",
            he.style.display = "block",
            Ge.style.display = "none"
        }
        ), o.deathFadeout),
        gt()
        }

        function Bn(e) {
            R && nt.removeAllItems(e);
        }

        async function Cn(e, t, n, i) {
            nt.disableBySid(e);
           if(AutoPlace) {
            if(R.items[4] != 15 || InInsta) return;
            if(window.location.href.includes('sandbox') && AutoPlace && !InInsta && (_ = Mi(e)) && R && [6, 7, 8, 9, 15].includes(_.id) && Math.hypot(R.x2 - _.x, R.y2 - _.y) <= _.scale + 250)
                if(Enemy && Math.hypot(R.y2 - Enemy.y2, R.x2 - Enemy.x2) <= 300){
                    if(AutoPlace && R.reloads[0].done && Math.hypot(Enemy.x2 - _.x, Enemy.y2 - _.y) <= 50 && _.id == 15 && _.owner.sid == R.sid && (R.team && Member(_.owner.sid))){
                        place(R.items[2], Math.atan2(_.y - R.y2, _.x - R.x2));
                        await Next();
                        Jt(0, 1);
                        Bu(7, 18);
                        r.send("c", true);
                        r.send("c", false);
                        await Next();
                        Os();
                    };
                    let Spam = ([7, 8, 9].includes(R.items[2]) && (Hvk[0] || Hvk[1]) && R.weaponIndex == 4 && _.id == 15 && Math.hypot(c.x - Enemy.x2, c.y - Enemy.y2) <= 100)
                    e = (Keys[86] || Spam) ? R.items[2] : R.items[4];
                    let t = N.filter(c => c.isItem && c.active && !c.dontGather && (c.owner.sid == R.sid || (R.team && Member(c.owner.sid))) && [6, 7, 8, 9, 15].includes(c.id) && Math.hypot(c.x - _.x, c.y - _.y) <= 350);
                    t && (t = t.sort((a, b) => Math.hypot(a.x - _.x, a.y - _.y) - Math.hypot(b.x - _.x, b.y - _.y)));
                    if(t && t[0]){
                        n = Math.atan2(Enemy.y2 - t[0].y, Enemy.x2 - t[0].x);
                        i = Math.hypot(t[0].y - Enemy.y2, t[0].x - Enemy.x2) + 3;
                        let ra = {x: t[0].x + Math.cos(n) * i, y: t[0].y + Math.sin(n) * i};
                       if(AutoPlace){
                        place(R.items[2], Math.atan2(ra.y - R.y2, ra.x - R.x2));
                        for(let i = 0; i < 40; i += 5) place(R.items[2], Math.atan2(ra.y - R.y2, ra.x - R.x2) + Degree(i)), place(R.items[2], Math.atan2(ra.y - R.y2, ra.x - R.x2) - Degree(i));
                       }
                    } else {
                        if(AutoPlace){
                        place(e, Math.atan2(_.y - R.y2, _.x - R.x2));
                        for(let i = 0; i < 50; i += 5) place(e, Math.atan2(_.y - R.y2, _.x - R.x2) + Degree(i)), place(e, Math.atan2(_.y - R.y2, _.x - R.x2) - Degree(i));
                        }
                    };
                };
           }
        }
        function On() {
           Oe.innerText = R.points,
               Re.innerText = R.food,
               je.innerText = R.wood,
               _e.innerText = R.stone,
               Ue.innerText = R.kills
            //document.querySelector("#scoreDisplay").innerHTML = Smoothie(Math.round(Tf.points), 1e6);
        }
        var Rn = {},
            jn = ["crown", "skull"],
            _n = [];

        function Un(e, t) {
            if (((R.upgradePoints = e), (R.upgrAge = t), e > 0)) {
                (_n.length = 0), s.removeAllChildren(Ve);
                for (var n = 0; n < l.weapons.length; ++n)
                    l.weapons[n].age == t &&
                        (null == l.weapons[n].pre ||
                         R.weapons.indexOf(l.weapons[n].pre) >= 0) &&
                        ((s.generateElement({
                        id: "upgradeItem" + n,
                        class: "actionBarItem",
                        onmouseout: function() {
                            Tt();
                        },
                        parent: Ve,
                    }).style.backgroundImage = document.getElementById(
                        "actionBarItem" + n,
                    ).style.backgroundImage),
                         _n.push(n));
                for (n = 0; n < l.list.length; ++n)
                    if (
                        l.list[n].age == t &&
                        (null == l.list[n].pre || R.items.indexOf(l.list[n].pre) >= 0)
                    ) {
                        var i = l.weapons.length + n;
                        (s.generateElement({
                            id: "upgradeItem" + i,
                            class: "actionBarItem",
                            onmouseout: function() {
                                Tt();
                            },
                            parent: Ve,
                        }).style.backgroundImage = document.getElementById(
                            "actionBarItem" + i,
                        ).style.backgroundImage),
                            _n.push(i);
                    }
                for (n = 0; n < _n.length; n++)
                    !(function(e) {
                        var t = document.getElementById("upgradeItem" + e);
                        (t.onmouseover = function() {
                            l.weapons[e] ?
                                Tt(l.weapons[e], !0) :
                            Tt(l.list[e - l.weapons.length]);
                        }),
                            (t.onclick = s.checkTrusted(function() {
                            r.send("6", e);
                        })),
                            s.hookTouchEvents(t);
                    })(_n[n]);
                _n.length ?
                    ((Ve.style.display = "block"),
                     (qe.style.display = "block"),
                     (qe.innerHTML = "SELECT ITEMS (" + e + ")")) :
                ((Ve.style.display = "none"), (qe.style.display = "none"), Tt());
            } else(Ve.style.display = "none"), (qe.style.display = "none"), Tt();
        }

        function Dn(e, t, n) {
            null != e && (R.XP = e),
                null != t && (R.maxXP = t),
                null != n && (R.age = n),
                n == o.maxAge ?
                ((ze.innerHTML = "MAX AGE"), (He.style.width = "100%")) :
            ((ze.innerHTML = "AGE " + R.age),
             (He.style.width = (R.XP / R.maxXP) * 100 + "%"));
        }

        function Ln(e) {
            s.removeAllChildren(De);
            for (var t = 1, n = 0; n < e.length; n += 3)
                !(function(n) {
                    s.generateElement({
                        class: "leaderHolder",
                        parent: De,
                        children: [
                            s.generateElement({// lb id
                                //                     (_.isLeader = e[n + 8]), (_.skinIndex = e[n + 9]),
                                class: "leaderboardItem",
                                style: "color:" + (e[n] == j ? "#fff" : "rgba(255,255,255,0.6)"),
                                text: t + `. ` + ("" != e[n + 1] ? e[n + 1] : "unknown"),
                            }),
                            s.generateElement({
                                class: "leaderScore",
                                text: s.kFormat(e[n + 2]) || "",
                            }),
                        ],
                    });
                })(n),
                    t++;
        }

        function Fn(e, t, n, i) {
            be.save(), be.setTransform(1, 0, 0, 1, 0, 0), be.scale(V, V);
            var r = 50;
            be.beginPath(),
                be.arc(e, t, r, 0, 2 * Math.PI, !1),
                be.closePath(),
                (be.fillStyle = "rgba(255, 255, 255, 0.3)"),
                be.fill(),
                (r = 50);
            var s = n - e,
                a = i - t,
                o = Math.sqrt(Math.pow(s, 2) + Math.pow(a, 2)),
                c = o > r ? o / r : 1;
            (s /= c),
                (a /= c),
                be.beginPath(),
                be.arc(e + s, t + a, 0.5 * r, 0, 2 * Math.PI, !1),
                be.closePath(),
                (be.fillStyle = "white"),
                be.fill(),
                be.restore();
        }

        function zn(e, t, n) {
            for (var i = 0; i < G.length; ++i)
                (_ = G[i]).active &&
                    _.layer == e &&
                    (_.update(P),
                     _.active &&
                     ki(_.x - t, _.y - n, _.scale) &&
                     (be.save(),
                      be.translate(_.x - t, _.y - n),
                      be.rotate(_.dir),
                      Vn(0, 0, _, be, 1),
                      be.restore()));
        }
        var Hn = {};

        function Vn(e, t, n, i, r) {
            if (n.src) {
                var s = l.projectiles[n.indx].src,
                    a = Hn[s];
                a ||
                    (((a = new Image()).onload = function() {
                    this.isLoaded = !0;
                }),
                     (a.src = ".././img/weapons/" + s + ".png"),
                     (Hn[s] = a)),
                    a.isLoaded &&
                    i.drawImage(a, e - n.scale / 2, t - n.scale / 2, n.scale, n.scale);
            } else 1 == n.indx && ((i.fillStyle = "#939393"), si(e, t, n.scale, i));
        }

        function qn(e, t, n, i) {
            var r = o.riverWidth + i,
                s = o.mapScale / 2 - t - r / 2;
            s < ce && s + r > 0 && n.fillRect(0, s, oe, r);
        }
        document.spinIn = 0;
        function Yn(e, t, n) {
            document.spinIn += .0003 * P;
            for (var i, r, s, a = 0; a < N.length; ++a)
                (_ = N[a]).active &&
                    ((r = _.x + _.xWiggle - t),
                     (s = _.y + _.yWiggle - n),
                     0 == e && _.update(P),
                     _.layer == e &&
                     ki(r, s, _.scale + (_.blocker || 0)) &&
                     ((be.globalAlpha = _.id == 15 ? .6 : 1),
                      _.isItem ?
                      ((i = ri(_)),
                       be.save(),
                       be.translate(r, s),
                       be.rotate(_.dir > 1e308 || _.dir < -1e308 ? Math.atan2(Math.sin(_.dir), Math.cos(_.dir)) : _.dir),
                       be.drawImage(i, -i.width / 2, -i.height / 2),
                       _.blocker &&
                       ((be.strokeStyle = "#db6e6e"),
                        (be.globalAlpha = 0.3),
                        (be.lineWidth = 6),
                        si(0, 0, _.blocker, be, !1, !0)),
                       be.restore(),
                        R && R.alive && _.owner.sid == R.sid && Math.hypot(R.x2 - _.x, R.y2 - _.y) <= 150 && console.log(Math.atan2(R.x2 - _.x, R.y2 - _.y)),
                       Hacks && UI && R && _.health > 0 && Reach(Math.hypot(R.x2 - _.x, R.y2 - _.y) - (_.getScale ? _.getScale() : _.scale) - 35, Math.atan2(_.y - R.y2, _.x - R.x2)) && br(be, r + 20, s - 10, R.sid == _.owner.sid || (R.team && Member(_.owner.sid)) ? "#8ecc51" : "#cc5151", _.healthMov, _.maxHealth, -20)) :
                      ((i = ni(_)),
                       be.drawImage(i, r - i.width / 2, s - i.height / 2))));
        }
        function Reach(e, t, n){
            n = (l.weapons[R.weaponIndex].range ? l.weapons[R.weaponIndex].range : l.weapons[R.weapons[0]].range);
            return Boolean(e <= n)
        };
        function Hsl(e, t, i, r, g, l, n = 0){
            n = e / (t / Math.abs(r - i));
            return `hsl(${Math.max(r > i ? (i + n) : (Math.max(r, i) - n), Math.min(r, i))}, ${g ? g : 100}%, ${l ? l : 50}%)`;
        };
        async function avh(){
            setTimeout(() => {
                Bu(7, 18);
                Sn(R.weapons[0], true);
                r.send('c', true);
                r.send('c', false);
                AutoAim = true;
                setTimeout(() => {
                    Os();
                    AutoAim = false;
                }, 120);
            }, 120);
        };
        function Wn(e, t, n, i) {
            if(!i) return Fixed.push({indicator: Wn, data: [e, t, n, true]});
            (_ = Ii(e)) && (_.gather(n, Number(n > 8), l.weapons[n]), _.startAnim(t, n), R.health < 60 && Enemy && Enemy.sid == _.sid && Math.hypot(_.y2 - R.y2, _.x2 - R.x2) <= l.weapons[n].range + 70 && _.skinIndex == 7 && [3, 4, 5].includes(n) && R.skinIndex == 11 && R.tailIndex == 21 && R.reloads[0].done && avh());
        }
        function ahs(e){
            if(e < Math.PI * 2 && e > -Math.PI * 2) return e;
            e < 0 && (Math.abs(e));
            return e - Math.floor(e / (Math.PI * 2)) * (Math.PI * 2);
        };
        function Xn(e, t, n) {
            be.globalAlpha = 1;
            for (var i = 0; i < W.length; ++i)
                (_ = W[i]).zIndex == n &&
                    (_.animate(P),
                     _.visible &&
                     ((_.skinRot += 0.002 * P),
                      (L = (R == _ ? pn() : Math.atan2(Math.sin(_.dir), Math.cos(_.dir))) + _.dirPlus),
                      be.save(),
                      be.translate(_.x - e, _.y - t),
                      be.rotate(L),
                      Nn(_, be),
                      be.restore()));
        }

        function Nn(e, t) {
            ((t = t || be).lineWidth = 5.5), (t.lineJoin = "miter");
            var n = (Math.PI / 4) * (l.weapons[e.weaponIndex].armS || 1),
                i = (e.buildIndex < 0 && l.weapons[e.weaponIndex].hndS) || 1,
                r = (e.buildIndex < 0 && l.weapons[e.weaponIndex].hndD) || 1;
            if (
                (e.tailIndex > 0 &&
                 (function(e, t, n) {
                    if (!(Gn = Qn[e])) {
                        var i = new Image();
                        (i.onload = function() {
                            (this.isLoaded = !0), (this.onload = null);
                        }),
                            (i.src = ".././img/accessories/access_" + e + ".png"),
                            (Qn[e] = i),
                            (Gn = i);
                    }
                    var r = $n[e];
                    if (!r) {
                        for (var s = 0; s < tt.length; ++s)
                            if (tt[s].id == e) {
                                r = tt[s];
                                break;
                            }
                        $n[e] = r;
                    }
                    Gn.isLoaded &&
                        (t.save(),
                         t.translate(-20 - (r.xOff || 0), 0),
                         r.spin && t.rotate(n.skinRot),
                         t.drawImage(Gn, -r.scale / 2, -r.scale / 2, r.scale, r.scale),
                         t.restore());
                })(e.tailIndex, t, e),
                 e.buildIndex < 0 &&
                 !l.weapons[e.weaponIndex].aboveHand &&
                 (ei(
                    l.weapons[e.weaponIndex],
                    o.weaponVariants[e.weaponVariant].src,
                    e.scale,
                    0,
                    t,
                ),
                  null == l.weapons[e.weaponIndex].projectile ||
                  l.weapons[e.weaponIndex].hideProjectile ||
                  Vn(
                    e.scale,
                    0,
                    l.projectiles[l.weapons[e.weaponIndex].projectile],
                    be,
                )),
                 (t.fillStyle = o.skinColors[e.skinColor]),
                 si(e.scale * Math.cos(n), e.scale * Math.sin(n), 14),
                 si(e.scale * r * Math.cos(-n * i), e.scale * r * Math.sin(-n * i), 14),
                 e.buildIndex < 0 &&
                 l.weapons[e.weaponIndex].aboveHand &&
                 (ei(
                    l.weapons[e.weaponIndex],
                    o.weaponVariants[e.weaponVariant].src,
                    e.scale,
                    0,
                    t,
                ),
                  null == l.weapons[e.weaponIndex].projectile ||
                  l.weapons[e.weaponIndex].hideProjectile ||
                  Vn(
                    e.scale,
                    0,
                    l.projectiles[l.weapons[e.weaponIndex].projectile],
                    be,
                )),
                 e.buildIndex >= 0)
            ) {
                var s = ri(l.list[e.buildIndex]);
                t.drawImage(s, e.scale - l.list[e.buildIndex].holdOffset, -s.width / 2);
            }
            t.beginPath(),
                t.arc(0, 0, 35, 0, 2 * Math.PI),
                t.fill(),
                t.stroke(),
                e.skinIndex > 0 &&
                (t.rotate(Math.PI / 2),
                 (function e(t, n, i, r) {
                if (!(Gn = Jn[t])) {
                    var s = new Image();
                    (s.onload = function() {
                        (this.isLoaded = !0), (this.onload = null);
                    }),
                        (s.src = ".././img/hats/hat_" + t + ".png"),
                        (Jn[t] = s),
                        (Gn = s);
                }
                var a = i || Kn[t];
                if (!a) {
                    for (var o = 0; o < et.length; ++o)
                        if (et[o].id == t) {
                            a = et[o];
                            break;
                        }
                    Kn[t] = a;
                }
                be.globalAlpha = .75
                Gn.isLoaded &&
                    n.drawImage(Gn, -a.scale / 2, -a.scale / 2, a.scale, a.scale),
                    !i &&
                    a.topSprite &&
                    (n.save(),
                     n.rotate(r.skinRot),
                     e(t + "_top", n, a, r),
                     n.restore());
            })(e.skinIndex, t, null, e));
        }
        var Gn,
            Jn = {},
            Kn = {},
            Qn = {},
            $n = {},
            Zn = {};

        function ei(e, t, n, i, r) {
            var s = e.src + (t || ""),
                a = Zn[s];
            a ||
                (((a = new Image()).onload = function() {
                this.isLoaded = !0;
            }),
                 (a.src = ".././img/weapons/" + s + ".png"),
                 (Zn[s] = a)),
                a.isLoaded &&
                r.drawImage(
                a,
                n + e.xOff - e.length / 2,
                i + e.yOff - e.width / 2,
                e.length,
                e.width,
            );
        }
        var ti = {};

        function ni(e) {
            var t =
                e.y >= o.mapScale - o.snowBiomeTop ?
                2 :
            e.y <= o.snowBiomeTop ?
                1 :
            0,
                n = e.type + "_" + e.scale + "_" + t,
                i = ti[n];
            if (!i) {
                var r = document.createElement("canvas");
                r.width = r.height = 2.1 * e.scale + 5.5;
                var a = r.getContext("2d");
                if (
                    (a.translate(r.width / 2, r.height / 2),
                     a.rotate(s.randFloat(0, Math.PI)),
                     (a.strokeStyle = it),
                     (a.lineWidth = 5.5),
                     0 == e.type)
                )
                    for (var c, l = 0; l < 2; ++l)
                        ai(a, 7, (c = _.scale * (l ? 0.5 : 1)), 0.7 * c),
                            (a.fillStyle = t ?
                             l ?
                             "#fff" :
                             "#e3f1f4" :
                             l ?
                             "#b4db62" :
                             "#9ebf57"),
                            a.fill(),
                            l || a.stroke();
                else if (1 == e.type)
                    if (2 == t)
                        (a.fillStyle = "#606060"),
                            ai(a, 6, 0.3 * e.scale, 0.71 * e.scale),
                            a.fill(),
                            a.stroke(),
                            (a.fillStyle = "#89a54c"),
                            si(0, 0, 0.55 * e.scale, a),
                            (a.fillStyle = "#a5c65b"),
                            si(0, 0, 0.3 * e.scale, a, !0);
                    else {
                        var h;
                        !(function(e, t, n, i) {
                            var r,
                                a = (Math.PI / 2) * 3,
                                o = Math.PI / 6;
                            e.beginPath(), e.moveTo(0, -i);
                            for (var c = 0; c < 6; c++)
                                (r = s.randInt(n + 0.9, 1.2 * n)),
                                    e.quadraticCurveTo(
                                    Math.cos(a + o) * r,
                                    Math.sin(a + o) * r,
                                    Math.cos(a + 2 * o) * i,
                                    Math.sin(a + 2 * o) * i,
                                ),
                                    (a += 2 * o);
                            e.lineTo(0, -i), e.closePath();
                        })(a, 0, _.scale, 0.7 * _.scale),
                            (a.fillStyle = t ? "#e3f1f4" : "#89a54c"),
                            a.fill(),
                            a.stroke(),
                            (a.fillStyle = t ? "#6a64af" : "#c15555");
                        var u = T / 4;
                        for (l = 0; l < 4; ++l)
                            si(
                                (h = s.randInt(_.scale / 3.5, _.scale / 2.3)) * Math.cos(u * l),
                                h * Math.sin(u * l),
                                s.randInt(10, 12),
                                a,
                            );
                    }
                else
                    (2 != e.type && 3 != e.type) ||
                        ((a.fillStyle =
                          2 == e.type ? (2 == t ? "#938d77" : "#939393") : "#e0c655"),
                         ai(a, 3, e.scale, e.scale),
                         a.fill(),
                         a.stroke(),
                         (a.fillStyle =
                          2 == e.type ? (2 == t ? "#b2ab90" : "#bcbcbc") : "#ebdca3"),
                         ai(a, 3, 0.55 * e.scale, 0.65 * e.scale),
                         a.fill());
                (i = r), (ti[n] = i);
            }
            return i;
        }
       var ii = [];
       function ri(e, t) {
           var n = ii[e.id];
           if (!n || t) {
               var i = document.createElement("canvas");
               i.width = i.height = 2.5 * e.scale + 5.5 + (l.list[e.id].spritePadding || 0);
               var r = i.getContext("2d");
               if (r.translate(i.width / 2, i.height / 2),
                   r.rotate(t ? 0 : Math.PI / 2),
                   r.strokeStyle = it,
                   r.lineWidth = 5.5 * (t ? i.width / 81 : 1),
                   "apple" == e.name) {
                   r.fillStyle = "#c15555",
                       si(0, 0, e.scale, r),
                       r.fillStyle = "#89a54c";
                   var a = -Math.PI / 2;
                   !function(e, t, n, i, r) {
                       var s = e + 25 * Math.cos(i)
                       , a = t + 25 * Math.sin(i);
                       r.moveTo(e, t),
                           r.beginPath(),
                           r.quadraticCurveTo((e + s) / 2 + 10 * Math.cos(i + Math.PI / 2), (t + a) / 2 + 10 * Math.sin(i + Math.PI / 2), s, a),
                           r.quadraticCurveTo((e + s) / 2 - 10 * Math.cos(i + Math.PI / 2), (t + a) / 2 - 10 * Math.sin(i + Math.PI / 2), e, t),
                           r.closePath(),
                           r.fill(),
                           r.stroke()
                   }(e.scale * Math.cos(a), e.scale * Math.sin(a), 0, a + Math.PI / 2, r)
               } else if ("cookie" == e.name) {
                   r.fillStyle = "#cca861",
                       si(0, 0, e.scale, r),
                       r.fillStyle = "#937c4b";
                   for (var o = T / (h = 4), c = 0; c < h; ++c)
                       si((u = s.randInt(e.scale / 2.5, e.scale / 1.7)) * Math.cos(o * c), u * Math.sin(o * c), s.randInt(4, 5), r, !0)
               } else if ("cheese" == e.name) {
                   var h, u;
                   for (r.fillStyle = "#f4f3ac",
                        si(0, 0, e.scale, r),
                        r.fillStyle = "#c3c28b",
                        o = T / (h = 4),
                        c = 0; c < h; ++c)
                       si((u = s.randInt(e.scale / 2.5, e.scale / 1.7)) * Math.cos(o * c), u * Math.sin(o * c), s.randInt(4, 5), r, !0)
               } else if ("wood wall" == e.name || "stone wall" == e.name || "castle wall" == e.name) {
                   r.fillStyle = "castle wall" == e.name ? "#83898e" : "wood wall" == e.name ? "#a5974c" : "#939393";
                   var f = "castle wall" == e.name ? 4 : 3;
                   ai(r, f, 1.1 * e.scale, 1.1 * e.scale),
                       r.fill(),
                       r.stroke(),
                       r.fillStyle = "castle wall" == e.name ? "#9da4aa" : "wood wall" == e.name ? "#c9b758" : "#bcbcbc",
                       ai(r, f, .65 * e.scale, .65 * e.scale),
                       r.fill()
               } else if ("spikes" == e.name || "greater spikes" == e.name || "poison spikes" == e.name || "spinning spikes" == e.name) {
                   r.fillStyle = "poison spikes" == e.name ? "#7b935d" : "#939393";
                   var d = .6 * e.scale;
                   ai(r, "spikes" == e.name ? 5 : 6, e.scale, d),
                       r.fill(),
                       r.stroke(),
                       r.fillStyle = "#a5974c",
                       si(0, 0, d, r),
                       r.fillStyle = "#c9b758",
                       si(0, 0, d / 2, r, !0)
               } else if ("windmill" == e.name || "faster windmill" == e.name || "power mill" == e.name)
                r.fillStyle = "#a5974c",
                si(0, 0, e.scale, r),
                r.fillStyle = "#c9b758",
                ci(0, 0, 1.5 * e.scale, 29, 4, r),
                r.fillStyle = "#a5974c",
                si(0, 0, .5 * e.scale, r);
               else if ("mine" == e.name)
                   r.fillStyle = "#939393",
                       ai(r, 4, e.scale, e.scale),
                       r.fill(),
                       r.stroke(),
                       r.fillStyle = "#bcbcbc",
                       ai(r, 4, .55 * e.scale, .65 * e.scale),
                       r.fill();
               else if ("sapling" == e.name)
                   for (c = 0; c < 2; ++c)
                       ai(r, 7, d = e.scale * (c ? .5 : 1), .7 * d),
                           r.fillStyle = c ? "#b4db62" : "#9ebf57",
                           r.fill(),
                           c || r.stroke();
               else if ("pit trap" == e.name)
                   r.fillStyle = "#a5974c",
                       ai(r, 4, 1.1 * e.scale, 1.1 * e.scale),
                       r.fill(),
                       r.stroke(),
                       r.fillStyle = it,
                       ai(r, 4, .65 * e.scale, .65 * e.scale),
                       r.fill();
               else if ("boost pad" == e.name)
                   r.fillStyle = "#7e7f82",
                       oi(0, 0, 2 * e.scale, 2 * e.scale, r),
                       r.fill(),
                       r.stroke(),
                       r.fillStyle = "#dbd97d",
                       function(e, t) {
                       t = t || be;
                       var n = e * (Math.sqrt(3) / 2);
                       t.beginPath(),
                           t.moveTo(0, -n / 2),
                           t.lineTo(-e / 2, n / 2),
                           t.lineTo(e / 2, n / 2),
                           t.lineTo(0, -n / 2),
                           t.fill(),
                           t.closePath()
                   }(1 * e.scale, r);
               else if ("turret" == e.name)
                   r.fillStyle = "#a5974c",
                       si(0, 0, e.scale, r),
                       r.fill(),
                       r.stroke(),
                       r.fillStyle = "#939393",
                       oi(0, -25, .9 * e.scale, 50, r),
                       si(0, 0, .6 * e.scale, r),
                       r.fill(),
                       r.stroke();
               else if ("platform" == e.name) {
                   r.fillStyle = "#cebd5f";
                   var p = 2 * e.scale
                   , g = p / 4
                   , m = -e.scale / 2;
                   for (c = 0; c < 4; ++c)
                       oi(m - g / 2, 0, g, 2 * e.scale, r),
                           r.fill(),
                           r.stroke(),
                           m += p / 4
               } else
                   "healing pad" == e.name ? (r.fillStyle = "#7e7f82",
                                              oi(0, 0, 2 * e.scale, 2 * e.scale, r),
                                              r.fill(),
                                              r.stroke(),
                                              r.fillStyle = "#db6e6e",
                                              ci(0, 0, .65 * e.scale, 20, 4, r, !0)) : "spawn pad" == e.name ? (r.fillStyle = "#7e7f82",
                                                                                                                oi(0, 0, 2 * e.scale, 2 * e.scale, r),
                                                                                                                r.fill(),
                                                                                                                r.stroke(),
                                                                                                                r.fillStyle = "#71aad6",
                                                                                                                si(0, 0, .6 * e.scale, r)) : "blocker" == e.name ? (r.fillStyle = "#7e7f82",
                si(0, 0, e.scale, r),
                r.fill(),
                r.stroke(),
                r.rotate(Math.PI / 4),
                r.fillStyle = "#db6e6e",
                ci(0, 0, .65 * e.scale, 20, 4, r, !0)) : "teleporter" == e.name && (r.fillStyle = "#7e7f82",
                                                                                    si(0, 0, e.scale, r),
                                                                                    r.fill(),
                                                                                    r.stroke(),
                                                                                    r.rotate(Math.PI / 4),
                                                                                    r.fillStyle = "#d76edb",
                                                                                    si(0, 0, .5 * e.scale, r, !0));
            n = i,
            t || (ii[e.id] = n)
        }
        return n
    }

        function si(e, t, n, i, r, s) {
            (i = i || be).beginPath(),
                i.arc(e, t, n, 0, 2 * Math.PI),
                s || i.fill(),
                r || i.stroke();
        }

        function ai(e, t, n, i) {
            var r,
                s,
                a = (Math.PI / 2) * 3,
                o = Math.PI / t;
            e.beginPath(), e.moveTo(0, -n);
            for (var c = 0; c < t; c++)
                (r = Math.cos(a) * n),
                    (s = Math.sin(a) * n),
                    e.lineTo(r, s),
                    (a += o),
                    (r = Math.cos(a) * i),
                    (s = Math.sin(a) * i),
                    e.lineTo(r, s),
                    (a += o);
            e.lineTo(0, -n), e.closePath();
        }

        function oi(e, t, n, i, r, s) {
            r.fillRect(e - n / 2, t - i / 2, n, i),
                s || r.strokeRect(e - n / 2, t - i / 2, n, i);
        }

        function ci(e, t, n, i, r, s, a) {
            s.save(), s.translate(e, t), (r = Math.ceil(r / 2));
            for (var o = 0; o < r; o++)
                oi(0, 0, 2 * n, i, s, a), s.rotate(Math.PI / r);
            s.restore();
        }

        function li(e){
            let c = [];
            for(var t = 0; t < e.length; t += 8){
                e[t + 7] >= 0 && R && e[t + 7] != R.sid && (!R.team || !Member(e[t + 7])) && c.push({id: e[t + 6], x: e[t + 1], y: e[t + 2], sid: e[t + 7]});
                nt.add(e[t], e[t + 1], e[t + 2], e[t + 3], e[t + 4], e[t + 5], l.list[e[t + 6]], !0, e[t + 7] >= 0 ? {sid: e[t + 7]} : null);
            };
            if(!Hacks) return;
            for(let v in c){
                if(v > 0 && c[v].id == 16){
                    let g = Ii(c[v].sid);
                    let hfh;
                    if(AutoPlace && !InInsta && g && g.y2 && (hfh = g.moveDir - Math.PI) && Math.hypot(g.y2 - c[v].y, g.x2 - c[v].x) <= 400 && s.getAngleDist(s.getDirection(R.x2, R.y2, g.x2, g.y2), hfh) <= Math.PI / 3 && Math.hypot(g.y2 - R.y2, g.x2 - R.x2) <= 300){
                        place(R.items[2], hfh)
                        place(R.items[2], hfh + Math.PI / 2);
                        place(R.items[2], hfh - Math.PI / 2);
                    };
                };
            };
        };

        function hi(e, t) {
            (_ = Mi(t)) &&
                ((_.hitTime = Date.now()), (_.xWiggle += o.gatherWiggle * Math.cos(e)),
                 (_.yWiggle += o.gatherWiggle * Math.sin(e)));
        }

        function rq(x, y, dir, obj, owner, scale, range, skipMov = true){
            if(!obj || !obj.scale) return false;
            !owner && (owner = {sid: -1, x: -1, y: -1, team: null});
            scale = obj.scale;
            range = obj.range;
            for(let u = 0; u < range; u += 35){
                let o, f, h, e = Y, t = W, c = [];
                if (skipMov) {
                    skipMov = !1;
                } else {
                    x += u * Math.cos(dir);
                    y += u * Math.sin(dir);
                    range -= u;
                    if(range <= 0){
                        x += range * Math.cos(dir)
                        y += range * Math.sin(dir)
                        u = 1
                        range = 0
                        return false;
                    };
                    for (c.length = 0,
                         f = 0; f < e.length + t.length; ++f)
                        !(o = e[f] || t[f - e.length]).alive || o == owner || owner.team && o.team == owner.team || s.lineInRect(o.x2 - o.scale, o.y2 - o.scale, o.x2 + o.scale, o.y2 + o.scale, x, y, x + u * Math.cos(dir), y + u * Math.sin(dir)) && c.push(o);
                    for (var d = nt.getGridArrays(x, y, scale), p = 0; p < d.length; ++p)
                        for (var g = 0; g < d[p].length; ++g)
                            h = (o = d[p][g]).getScale(),
                                o.active && c.indexOf(o) < 0 && !o.ignoreCollision && s.lineInRect(o.x - h, o.y - h, o.x + h, o.y + h, x, y, x + u * Math.cos(dir), y + u * Math.sin(dir)) && c.push(o);
                    if (c.length > 0) {
                        var m = null,
                            yz = null,
                            k = null;
                        for (f = 0; f < c.length; ++f)
                            k = s.getDistance(x, y, c[f].x, c[f].y),
                                (null == yz || k < yz) && (yz = k,
                                                           m = c[f]);
                        return m;
                        if (m.isPlayer || m.isAI) {
                            var v = .3 * (m.weightM || 1);
                            null != m.weaponIndex && i.weapons[m.weaponIndex].shield && s.getAngleDist(dir + Math.PI, m.dir) <= r.shieldAngle || null;
                        }
                    }
                }
            };
        };

        function ui(e, t, p) {
            if(!p) return Fixed.push({indicator: ui, data: [e, t, l]});
            (_ = Mi(e)) &&
                ((_.dir = t),
                 (_.xWiggle += o.gatherWiggle * Math.cos(t + Math.PI)),
                 (_.yWiggle += o.gatherWiggle * Math.sin(t + Math.PI)),
                 (_.shootCount = 0), e = rq(_.y, _.y, t, p.projectiles[1], _), e && console.log(e.name));
        }

        function fi(e, t, n, i, r, s, a, o) {
            lt && (J.addProjectile(e, t, Math.atan2(Math.sin(n), Math.cos(n)), i, r, s, null, null, a).sid = o);
            px(e, t, n, i, r, s, a, o);
        };
        let inFlight = [];

        class Projectile {
            constructor(o, x, y, n, r, t, s){
                this.x = e;
                this.y = y;
                this.dir = n;
                this.estimate = t;
                this.speed = s.speed;
                this.scale = s.scale;
                this.dmg = s.dmg;
                this.owner = o;
                this.original = s;
                this.at = Date.now();
                this.active = true;
                this.oldUpdate = Date.now();
            };
            update(){
                if(!this.active) return;
                if(Date.now() - this.at >= 2e3) return;
                this.x = this.x + (Date.now() - this.oldUpdate) * Math.cos(this.dir);
                this.y = this.y + (Date.now() - this.oldUpdate) * Math.sin(this.dir);
                this.estimate = Math.ceil((Math.hypot(R.x2 - this.x, R.y2 - this.y) - this.scale) / (this.speed * (1e3 / 9)));
                let Future = rq(this.y, this.y, this.dir, this.original, this.owner);
                (this.estimate <= 0 || !Future || Future.sid != R.sid || !Future.isPlayer) && (this.active = false);
                this.oldUpdate = Date.now();
            };
        };
        let SafeDefense = 0;
        function ProjectileSafety(e, t, n, i){
            e = 0;
            t = e;
            SafeDefense = e + t;
            if(inFlight.length < 1) return;
            for(let a of inFlight) a.active && (a.estimate <= 2 ? (e += a.dmg) : (t += a.dmg)); /* Sorting damage into preventable and not */
            SafeDefense = e + t;
            if(e >= 100 * (R.skinIndex == 6 ? 1.25 : 1)) {
                Ji();
                return console.log(`Death by projectiles?`);
            };
            if((t * .75 + e) >= 100) {
                //Bu(6, 17);
                setTimeout(() => {
                    Ji();
                    setTimeout(() => {
                        Ji();
                    }, 120);
                }, 120);
                return console.log(`Preventing death by projectiles.`);
            };
        };
        function px(e, t, n, i, rs, s, a, o, p, m) {
            if(!p) return Fixed.push({indicator: px, data: [e, t, n, i, rs, s, a, o, l]});
            m = Number(i == 700 && rs == 1.5);
            for(let Musketeer of W){
                if(Musketeer.visible && ((!m && p.weapons[Musketeer.weaponIndex].projectile !== undefined && Musketeer.d2 - n == 0 && [69, 70, 71, 72].includes(Math.round(Math.hypot(Musketeer.y2 - t, Musketeer.x2 - e))) || (m && Musketeer.reloads[2] == 23 && Musketeer.skinIndex == 53 && Number(Math.round(Math.hypot(Musketeer.y2 - t, Musketeer.x2 - e))) <= 5)))) {
                    if(m){ /* Projectile is by turret gear */
                        Musketeer.reloads[2] = 0;
                        Hacks && Musketeer.reloads[0].rarity > 1 && [4, 5].includes(Musketeer.reloads[0].id) && Math.hypot(R.x2 - Musketeer.x2, R.y2 - Musketeer.y2) > 130 && Math.hypot(R.x2 - Musketeer.x2, R.y2 - Musketeer.y2) < 300 && zwh();
                    } else {
                        Musketeer.reloads[1].count = 1
                        Musketeer.reloads[1].done = false;
                        if(Musketeer.sid == R.sid || (R.team && Member(Musketeer.sid))) return;
                        let Target = rq(e, t, n, p.projectiles[Number(p.weapons[Musketeer.weaponIndex].projectile)], Musketeer);
                        let Ammo = p.projectiles[Number(p.weapons[Musketeer.weaponIndex].projectile)];
                        if(Target && Target.isPlayer && Target.sid == R.sid) inFlight.push(new Projectile(Musketeer, x, y, n, Math.hypot(R.x2 - e, R.y2 - t), Math.ceil((Math.hypot(R.x2 - e, R.y2 - t) - Ammo.scale) / (Ammo.speed * (1e3 / 9))), Ammo))
                    };
                };
            }
        };
        async function zwh(){
            //Jt(6, 0);
            await Next();
            //Jt(6, 0);
            await Next();
            //Jt(6, 0);
            await Next();
        };
        function di(e, t) {
            for (var n = 0; n < G.length; ++n) G[n].sid == e && (G[n].range = t);
        }

        function pi(e) {
            (_ = Ei(e)) && _.startAnim();
        }

        function gi(e) {
            for (var t = 0; t < Y.length; ++t)
                (Y[t].forcePos = !Y[t].visible), (Y[t].visible = !1);
            if (e) {
                var n = Date.now();
                for (t = 0; t < e.length;)
                    (_ = Ei(e[t])) ?
                        ((_.index = e[t + 1]),
                         (_.t1 = void 0 === _.t2 ? n : _.t2),
                         (_.t2 = n),
                         (_.x1 = _.x),
                         (_.y1 = _.y),
                         (_.x2 = e[t + 2]),
                         (_.y2 = e[t + 3]),
                         (_.d1 = void 0 === _.d2 ? e[t + 4] : _.d2),
                         (_.d2 = e[t + 4]),
                         (_.health = e[t + 5]),
                         (_.dt = 0),
                         (_.visible = !0)) :
                    (((_ = Z.spawn(e[t + 2], e[t + 3], e[t + 4], e[t + 1])).x2 = _.x),
                     (_.y2 = _.y),
                     (_.d2 = _.dir),
                     (_.health = e[t + 5]),
                     Z.aiTypes[e[t + 1]].name || (_.name = o.cowNames[e[t + 6]]),
                     (_.forcePos = !0),
                     (_.sid = e[t]),
                     (_.visible = !0)),
                        (t += 7);
            }
        }
        var mi = {};

        function yi(e, t) {
            var n = e.index,
                i = mi[n];
            if (!i) {
                var r = new Image();
                (r.onload = function() {
                    (this.isLoaded = !0), (this.onload = null);
                }),
                    (r.src = ".././img/animals/" + e.src + ".png"),
                    (i = r),
                    (mi[n] = i);
            }
            if (i.isLoaded) {
                var s = 1.2 * e.scale * (e.spriteMlt || 1);
                t.drawImage(i, -s, -s, 2 * s, 2 * s);
            }
        }

        function ki(e, t, n) {
            return e + n >= 0 && e - n <= oe && t + n >= 0 && t - n <= ce;
        }

        function vi(e, t) {
            var n = (function(e) {
                for (var t = 0; t < W.length; ++t)
                    if (W[t].id == e) return W[t];
                return null;
            })(e[0]);
            n || ((n = new u(e[0], e[1], o, s, J, nt, W, Y, l, et, tt)), W.push(n)),
                n.spawn(t ? H : null),
                (n.visible = !1),
                (n.x2 = void 0),
                (n.y2 = void 0),
                n.setData(e),
                t &&
                ((U = (R = n).x),
                 (D = R.y),
                 $t(),
                 On(),
                 Dn(),
                 Un(0),
                 (Be.style.display = "block"));
        }

        function wi(e) {
            for (var t = 0; t < W.length; t++)
                if (W[t].id == e) {
                    W.splice(t, 1);
                    break;
                }
        }

        function bi(e, t) {
            R && (R.itemCounts[e] = t);
        }

        function xi(e, t, n) {
            R && ((R[e] = t), n && On());
        }
        let BullTimer = 0;
        /*
    function anti(am) {
        for(let i = 0; i < am; i++) place(R.items[0], null);
        equip(22,19);
        setTimeout(() => {
         equip(6,21);
        },170);
    }*/

    function OptimisedAnti() {
       /*
        if(R.health < 100 && R.health > 75) playerAnti = "normal";
        if(R.health < 75 && R.health > 55) playerAnti = "barb";
        if(R.health > 55) playerAnti = "emp";
        if(R.health < 35) playerAnti = "autoq";
        if(R.health > 1) playerAnti = "normal";*/
        if(R.health < 65 && R.health > 55 && nearestEnemy.hat == 7) {
            equip(26, 19);
            place(foodType);
            place(foodType, null);
        }
        if(R.health < 55) {
            equip(22, 19);
            place(foodType);
            place(foodType);
        }
        if(R.health < 50) {
           place(foodType);
           place(foodType);
           place(foodType);
           place(foodType);
        }
    }
        var HealTick = 0;
        function Si(e, t) {
            (_ = Ii(e)) && (t <= _.health ? (_.hitTime = Wish) : _.buildItem(),
                            _.health = t,
                            t - _.health == ((R.skinIndex == 7 ? -5 : 0) + (R.tailIndex == 13 ? 3 : 0)) && (inBullTick = false, !InInsta ? equip(6, 21) : null, BullTimer = Wish));
        if(AutoHeal && Hacks) {
            if(R.health < 100 && R.health > 0){
                setTimeout(() => {
                    r.send('5', R.items[0], null);
                    r.send('c', 1, null);
                    r.send('c', 0, null);
                    r.send('5', R.weaponIndex, true);
                },100);
            }
        }
        }
        function onBuild(e, t, n, i, r, p){
            p = (Math.pow, Math.sqrt);
            n = e.x - t.x;
            i = e.y - t.y;
            r = e.scale + (t.getScale ? t.getScale() : t.scale);
            return (p(n * n + i * i) - r < 0)
        };
    const invisible = (e, n) => {
        return e = (e % (2 * Math.PI) + 2 * Math.PI) % (2 * Math.PI), e = Math.round(e / (2 * Math.PI / invis.size)),
            null !== (n = invis.get(e)) && void 0 !== n ? n : null;
    };
        const aimAt = (e) => {
           if(Hacks) {
            lastAim = e;
            r.send('2', e);
           }else{
           r.send('2', pn());
           }
        };
        function Aim() {
           if(Hacks) {
            !AutoAim && !InInsta && !Spinner && aimAt(invisible(2 * Math.PI * Math.random()));
            (R.weaponIndex == 11) && aimAt(Number.MAX_VALUE);
           }
        }
        let lastAim;
        function place(e, t = pn()){
           if(Hacks) {
            if(InvisItem) t = invisible(t);
            if(qMode) return NoGap(t);
            r.send('5', e, null)
            r.send('c', 1, t)
            r.send('c', 0, t)
            r.send('5', R.weaponIndex, true);
            r.send('2', lastAim);
           }
        };
        function Placer(){
            if(Date.now() - Updated >= 70 || !Hacks) return;
            for(let i = 0; i < CPS; i++){
            Keys[86] && place(R.items[2]);
            Keys[78] && place(R.items[3]);
            Keys[70] && place(R.items[4]);
            Keys[72] && place(R.items[5]);
            };
        };
        function wear(id) {
            r.send('13c', 0, id, 0);
        }
        var slightLag = false;
       function SlightLag(timer) {
          setTimeout(() => {
            if(slightLag) {
                r.wave(20)
            }
        },timer);
    }
        function Degree(e){
            return Math.PI / 180 * e;
        };
        function Mills(nr){ nt.checkItemLocation
            const a = 10 === R.items[3] ? 1.115820407 : 1.141422642,
                  s = [ ...Array(3) ].map((e, t) => R.moveDir + (t - 1) * a),
                  l = s.map((e, t) => Hq(R.items[3], e, R, true));
            if(!Hq(R.items[3], R.moveDir, R, true)) return;
            if(InvisItem) InvisItem = false, nr = true;
            Hq(R.items[3], s[1], R) && (l[1] = !0, l[0] = !1);
            const f = l.reduce((e, t) => e + t, 0);
            0 !== f && (!(f > 0) || l[1]) && (s.forEach((e, t) => {
                l[t] && place(R.items[3], e);
            }));
            nr && (InvisItem = true)
               Mill = {y: R.y2, x: R.x2, z: true, k: R.moveDir};
        };
        function Hq(e, t, R, n, i, r) {
           if(!InInsta){
            if(n) r = true;
            n = l.list[e];
            if(!n) return;
            i = (35 + n.scale + (e.placeOffset || 0));
            if(r) return n && nt.checkItemLocation(R.x2 + Math.cos(t) * i, R.y2 + Math.sin(t) * i, n.scale, .6, n.id, false)
            n && nt.checkItemLocation(R.x2 + Math.cos(t) * i, R.y2 + Math.sin(t) * i, n.scale, .6, n.id, false) && place(e, t);
           }
        };
        let defaultSpam = 0;
        function Avg(e, t, n, m, r){
            if(!R.items[4] || InInsta || !AutoPlace) return null;
            t = N.filter(c => c.isItem && c.active && !c.dontGather && (c.owner.sid == R.sid || (R.team && Member(c.owner.sid))) && [6, 7, 8, 9, 15].includes(c.id) && Math.hypot(c.x - e.x2, c.y - e.y) <= 250);
            t && (t = t.sort((a, b) => Math.hypot(a.x - e.x, a.y - e.y) - Math.hypot(b.x - e.x, b.y - e.y))[0]);
            if(t && t[0]){
                n = Math.atan2(e.y2 - t[0].y, e.x2 - t[0].x);
                m = Math.hypot(t[0].y - e.y2, t[0].x - e.x2) + 3;
                r = {x: t[0].x + Math.cos(n) * m, y: t[0].y + Math.sin(n) * m};
                if(AutoPlace){
                place(R.items[2], Math.atan2(r.y - R.y2, r.x - R.x2));
                for(let i = 0; i < 50; i += 5) place(R.items[2], Math.atan2(r.y - R.y2, r.x - R.x2) + Degree(i)), place(R.items[2], Math.atan2(r.y - R.y2, r.x - R.x2) - Degree(i));
                }
            };
            t = Math.atan2(e.y - R.y2, e.x - R.x2);
            n = R.x2 + Math.cos(t) * 80;
            m = R.y2 + Math.sin(t) * 80;
            if(Math.hypot(m - e.y2, n - e.x2) <= 50 && AutoPlace){
                Hq(R.items[4], t, R);
                for(let i = 50; i < 120; i += 5) Hq(R.items[2], t + Degree(i), R);
            };
            if(wn !== undefined && Math.hypot(R.x2 - e.x2, R.y2 - e.y2) <= 150 && AutoPlace){
                defaultSpam = Wish;
                for(let i = 0; i < Degree(160); i += Math.PI / 4) Hq(R.items[Math.random() * 4 <= 2 ? 4 : 2], wn + i, R);
                for(let i = 0; i < Degree(160); i += Math.PI / 4) Hq(R.items[Math.random() * 4 <= 2 ? 4 : 2], wn - i, R);
            }
            r = N.find(c => c.isItem && c.active && !c.dontGather && c.owner.sid == R.sid && c.id == 15 && Math.hypot(c.x - e.x2, c.y - e.y2) <= 70);
            if(!r || Math.hypot(r.y - R.y2, r.x - R.x2) > 70) return null;
           if(AutoPlace){
            for(let i = 70; i < 170; i += 5){
                Hq(R.items[2], Math.atan2(r.y - R.y2, r.x - R.x2) + Degree(i), R);
                Hq(R.items[2], Math.atan2(r.y - R.y2, r.x - R.x2) - Degree(i), R);
            };
           }
        };
        setInterval(Placer, 0);
        let Shine = false;
        let Enemy;
        let Point = {in: false, r: 384};
        let Keys = new Array(100);
         var SpamDash = false;
        document.addEventListener('keydown', (e) => KeyMessage(e));
        document.addEventListener('keyup', (e) => (Keys[e.keyCode] = false));
        async function KeyMessage(e){
            if(["allianceinput", 'chatbox', 'nameinput'].includes(document.activeElement.id.toLowerCase())) return null;
            if(DisableKeys) return null;
            Keys[e.keyCode] = true;
            if(!Hacks) return;
            switch(e.keyCode){
                case 9:
                    r.free(100);
                    break;
                case 74:
                    slightLag = !slightLag;
                    r.send('ch', slightLag+('-Lagger </>'));
                    break;
                case 192:
                    SpamDash = !SpamDash;
                    if(SpamDash){
                    var level = prompt('Level of packets','100');
                    var time = prompt('Interval ms time','1000');
                    }
                    r.send('ch', SpamDash+"-waver </>");
                    setInterval(() => {
                    if(SpamDash){
                       r.free(level);
                    }
                   },time);
                    break;
            };
        };
        document.beks = 10;
        document.vex = 1e8;
        document.bd = 4;
        function NoGap(e){
            let Init = Gap[e] ? Gap[e] : Math.PI / 4;
            for(i = wn + Init; i < Math.PI * 2 + wn + Init; i += Init) place(R.items[2], i);
        };
        let Gap = []; 1.3500232038615632
        // 0.007838565599999958 per scale+
        Gap[6] = 1.3424536955948967; // small spike | 49
        Gap[7] = 1.3738079579948965; // greater spike | 52
        Gap[8] = 1.3738079579948965; // poison spike | 52
        Gap[9] = 1.3738079579948965; // spinning spike | 52
        Gap[10] = 1.115820407; // windmill | 45
        Gap[11] = 1.141422642; // faster windmill | 47
        Gap[12] = 1.141422642;// power windmill | 47
        Gap[15] = 1.3581308267948966; // trap | 50
        Gap[16] = 1.3581308267948966; // trap | 50
        let Ran = function(){};
        let Next = function(){
            return new Promise((e) => (Ran = e))
        }
        let InInsta = false;
        function delay(a) {
            return new Promise(resolve => setTimeout(resolve, a));
        }
        document.ke = 70;
        document.le = 14;
        document.gaka = 3;
       var nobull = 0;
       var laginsta = false;
        document.hah = false;
        async function Walking(e, t, n, i, y){
            t = Math.atan2(R.y2 - Enemy.y2, R.x2 - Enemy.x2);
            n = {x: e.x2 + Math.cos(t) * Point.r, y: e.y2 + Math.sin(t) * Point.r};
            i = Math.hypot(n.y - R.y2, n.x - R.x2);
            y = Math.atan2(n.y - R.y2, n.x - R.x2);
            if(i <= document.qkw){
                r.send("33", null);
                document.hah && Jt(0, 0);
                Sn(R.weapons[0], true);
                await Next();
                if([Point.r - 1, Point.r].includes(Math.round(Math.hypot(Enemy.y - R.y2, Enemy.x - R.x2)))) {
                    Point.in = false;
                    return;
                };
            };
            r.send('33', y);
            Walked = Date.now();
            Jt(0, 1);
            if(Date.now() - StartedWalking >= 2e3) {
                StartedWalking = Date.now();
                e = false;
            };
            Sn(e && i <= 35 ? R.weapons[1] : R.weapons[0], true);
            Jt(!e ? 12 : i <= 35 ? 40 : 0, 0);
            Jt(!e ? 11 : i <= 35 ? 0 : 0, 1);
            await Next();
            Enemy && Point.in && Walking(Enemy);
        };
        document.qkw = 1;
        let Spam = [0, 0];
        setInterval(() => {
            Spam[0] && Sn(R.weapons[0], true);
            Spam[1] && Sn(R.weapons[1], true);
        }, 25);
        async function bowInsta(){
            if(InInsta) return;
            InInsta = true;
            AutoAim = true;
            setTimeout(() => {
                equip(53, 19);
                r.send("6", 9);
                setTimeout(() => {
                    r.send('7', 1);
                    Sn(R.weapons[1], true);
                    setTimeout(() => {
                        r.send("6", 38);
                        r.send("6", 12);
                        setTimeout(() => {
                            r.send("6", 15);
                            setTimeout(() => {
                                equip(0, 0);
                                equip(6, 21);
                                Sn(R.weapons[0], true);
                                r.send('7', 1);
                                AutoAim = false;
                                InInsta = false;
                            }, 1e3 / 9);
                        }, 1e3 / 9);
                    }, 1e3 / 9);
                }, 1e3 / 9);
            }, 1e3 / 9);
        };
        async function Insta(e, t){
            if(InInsta) return null;
            if(R.items[4] != 16 || R.weapons[0] != 5 || ![9, 12, 13].includes(R.weapons[1])){
                InInsta = true;
                await Next();
                AutoAim = true;
                InInsta = true;
                r.send('c', 1, null);
                equip(0, 1);
                equip(7, 18);
                Spam[0] = true;
                Sn(R.weapons[0], true);
                await delay(document.ke);
                r.free(document.le);
                equip(53, 19);
                Spam[0] = false;
                Spam[1] = true;
                Sn(R.weapons[1], true);
                for(let i = 0; i < document.gaka; i++) await Next();
                Spam[1] = false;
                r.send('c', 0, null);
                Sn(R.weapons[0], true);
                Os();
                InInsta = false;
                AutoAim = false;
                chat: "Sub to D_Alpha!"
                return;
            };
            if(!Enemy) return;
            InInsta = true;
            setTimeout(() => {
                Bu(53, 21);
                setTimeout(() => {
                    e = Math.atan2(Enemy.y2 - R.y2, Enemy.x2 - R.x2);
                    place(R.items[4], e);
                    Spam[1] = true;
                    Bu(12, 11);
                    R.weapons[1] && Sn(R.weapons[1], true);
                    r.send('c', true);
                    r.send('33', e);
                    Aiming = true;
                    setTimeout(() => {
                        e = Math.atan2(Enemy.y2 - R.y2, Enemy.x2 - R.x2);
                        Bu(7, 19);
                        Spam[1] = false;
                        Sn(R.weapons[0], true);
                        Spam[0] = true;
                        r.send('33', e);
                        setTimeout(() => {
                            Aiming = false;
                            Spam[0] = false;
                            r.send('c', false);
                            r.send('33', null);
                            Os();
                            InInsta = false;
                        }, 1e3 / 9);
                    }, 1e3 / 9);
                }, 1e3 / 9);
            }, 1e3 / 9);
        };
        async function InvisBoost(e){
            if(R.skins[40] && R.items[4] != 16 && ((R.weapons[0] == 5 && R.reloads[0].rarity > 1) || R.weapons[1] == 10)) return;
            r.send('33', e);
            place(R.items[4], e);
            Jt(40, 0);
            r.send("7", 1);
            r.send("c", 1, Number.MAX_VALUE);
            aimAt(Number.MAX_VALUE);
            await Next();
            r.send("7", 1);
            r.send("c", 0);
            Os();
        };
        const BackPotential = async function(e, t, i, r, k, d, n = Enemy){
            /*
            1. When a player is not near it should place 3 mills.
            2. If a player is near but infront of you it should do spikes.
            3. If a player is behind it should do traps.
            4. If there's a player in your screen, but he isn't near do traps.
            */
           if(AutoPlace) {
            t = (!n ? R.items[3] : n && Math.hypot(n.y2 - R.y2, n.x2 - R.x2) >= 350 ? R.items[4] : R.items[2]);
            if(t === R.items[2]){
                i = Math.atan2(e.y - R.y2, e.x - R.x2);
                r = Math.atan2(n.y - R.y2, n.x - R.x2);
                k = Math.abs(i - r);
                t = k <= Math.PI ? R.items[2] : t;
                for(i = 0; i <= Math.PI * 2; i += Math.PI / 32) Hq(t, i, R);
            };
           }
        };
        let Walked = Date.now();
        let StartedWalking = Date.now();
        let Trapped = false;
        let Updated = Date.now();
        let lastSync = Date.now();
        const Sync = async function(a){
           return;
           if(Date.now() - lastSync < 250) return;
           lastSync = Date.now();
           if(!a){
           r.send('2', 198.849251);
           setTimeout(() => r.send('2', 198.849251), 25);
           setTimeout(() => r.send('2', 198.849251), 60);
           await Next();
           console.log(R.d2)
           };
           AutoAim = true;
           Bu(7, 18);
           Sn(R.weapons[0], true);
           r.send('c', true);
           r.send('c', false);
           await Next();
           Bu(6, 21);
           Sn(R.weapons[0], true);
           AutoAim = false;
        };
       function storeBuy(newHat, newAcc) {
           r.send("13c", 1, newHat, 0);
           r.send("13c", 1, newAcc, 1);
       }

       function storeEquip(newHat, newAcc) {
           r.send("13c", 0, newHat, 0);
           r.send("13c", 0, 0, 1);
           r.send("13c", 0, newAcc, 1);
       }

       function equip(newHat, newAcc) {
          if(Hacks) {
           if (window.location.host == "sandbox.moomoo.io") {
               storeBuy(newHat, newAcc);
           }
           storeEquip(newHat, newAcc);
          }
       }
       var soldierKey = 90;//z
       var bullKey = 66;//b
       var tankKey = 67;//c
       var biomeKey = 77;//m
       var unequipKey = 16;//shift
    var hasBot = true;
    var advantageMod = false;
    document.addEventListener("keydown", function(e){
            if(["allianceinput", 'chatbox', 'nameinput'].includes(document.activeElement.id.toLowerCase())) return null;
            if(DisableKeys) return null;
       if(document.activeElement.id.toLowerCase() !== 'chatbox' && document.getElementById("mainMenu").style.display == "none" && !Hacks && advantageMod){
           if(e.key == "="){
               Sn(primary, true);
               window.storeEquip(7);
               setTimeout(() => {
                r.send('c', 1);
                setTimeout(() => {
               Sn(secondary, true);
               window.storeEquip(53);
                },60);
               },260);
               setTimeout(() => {
                   setTimeout(() => {
               r.send('c', 0);
                   },40);
               setTimeout(() => {
               window.storeEquip(0)
               },350);
               },350);
           }
           var DoingTank = false
           , DoingSoldier = false;
           if(e.key == "c" && !DoingSoldier){
               DoingTank = true;
               setTimeout(() => {
               window.storeEquip(40);
               },150);
               setTimeout(() => {
               DoingTank = false;
               },250);
           }
           if(e.key == "z" && !DoingTank){
               DoingSoldier = true;
               setTimeout(() => {
               window.storeEquip(6);
               },150);
               setTimeout(() => {
               DoingSoldier = false;
               },250);
           }
    if(e.key == "r"){
        //for(let i = 0; i < cps; i++){
    r.send("c", 1);
    r.send("c", 0);
    setTimeout(() => {
    },100);
        //}
    }
    if(e.key == "f"){
        //for(let i = 0; i < cps; i++){
    r.send("c", 1);
    r.send("c", 0);
    setTimeout(() => {
    },100);
        //}
    }
    if(e.key == "n"){
        //for(let i = 0; i < cps; i++){
    r.send("c", 1);

    r.send("c", 0);
    setTimeout(() => {

    },100);
        //}
    }
    if(e.key == "h"){
      //  for(let i = 0; i < cps; i++){
    r.send("c", 1);

    r.send("c", 0);
    setTimeout(() => {

    },100);
       // }
    }
        if(e.key == " "){
          r.send("c", 1);
        }
        if(e.keyCode == 86){
        r.send("5", R.items[2]);
        r.send("c", 1);

        r.send("c", 0);
        setTimeout(() => {

        },100);
        }
        if(e.keyCode == 81){
        if(R.health < 55){
        r.send("5", R.items[0]);
        r.send("c", 1);
        r.send("c", 0);
        }
        }
        if(e.keyCode == 82){
        r.send("5", R.items[2])
        }
        if(e.keyCode == 70){
        r.send("5", R.items[4])
        r.send("c", 1);

        r.send("c", 0);
        setTimeout(() => {

        },100);
        }
        if(e.key == "n"){
        r.send("5", millType)
        }
        if(e.key == "h"){
        r.send("5", turretType)
        }
    if(e.key == "1"){
    for(let i = 0; i < 10; i++) {
        Sn(primary, true);
    }
   }
    if(e.key == "2"){
    for(let i = 0; i < 10; i++) {
        Sn(secondary, true);
    }
   }
  }
       if(e.keyCode == 220 && document.activeElement.id.toLowerCase() !== 'chatbox' && document.getElementById("mainMenu").style.display == "none"){
           Hacks = !Hacks;
        if(!Hacks){
            Jt(0, 1)
            oe = 1920;
            ce = 1080;
            un();
        };
           r.send('ch', Hacks+"-hacks");
       }
       if(e.key == "l" && document.activeElement.id.toLowerCase() !== 'chatbox' && document.getElementById("mainMenu").style.display == "none"){
           autopush = !autopush;
           Hacks ? r.send('ch', autopush+"-autopush") : alert(autopush+"-autopush");
       }
       if(e.key == "]" && !Hacks && document.activeElement.id.toLowerCase() !== 'chatbox' && document.getElementById("mainMenu").style.display == "none"){
           advantageMod = !advantageMod;
           alert(advantageMod+"-advantage");
       }
       if(e.key == "u" && document.activeElement.id.toLowerCase() !== 'chatbox' && document.getElementById("mainMenu").style.display == "none"){
           Removing = true;
           hasBot = false;
           r.send('ch', "Warning[D_Alphas-Removed] </>");
       }
       if(e.key == "i" && document.activeElement.id.toLowerCase() !== 'chatbox' && document.getElementById("mainMenu").style.display == "none"){
           var botCount = prompt('BotCount[1-40]');
           Bots(botCount, "D_Alphabot_A");
           hasBot = true;
           r.send('ch', `Warning[Connecting D_Alpha-[${botCount}]D_Alpha] </>`);
       }
      if(document.activeElement.id.toLowerCase() !== 'chatbox' && document.getElementById("mainMenu").style.display == "none" && Hacks){
        if(e.key == "y") { // lag insta
            AutoAim = true;
            InInsta = true;
            if(R.health < 25) return place(R.items[0]);
            doNewSend(["5", [primary, true]]);
            equip(nearestEnemy.hat == 11 ? 6 : 7, 21);
            r.wave(23)
            doNewSend(["c", [1]]);
            setTimeout( () => {
                r.wave(15)
               if(R.health < 25) return place(R.items[0]);
                equip(nearestEnemy.hat == 22 ? 11 : 53, 21);
                r.wave(10)
                doNewSend(["5", [secondary, true]]);
            }, instaSpeed - 110);

            setTimeout( () => {
                doNewSend(["c", [0]]);
                doNewSend(["5", [primary, true]]);
               if(isEnemyNear) {
                equip(6, 21);
               }else{
                equip(6, 11);
               }
                InInsta = false;
                AutoAim = false;
            }, instaSpeed);
        }
        if(e.key == "r") {
            AutoAim = true;
            InInsta = true;
            doNewSend(["5", [primary, true]]);
            equip(nearestEnemy.hat == 11 ? 6 : 7, 21);
            doNewSend(["c", [1]]);
            setTimeout( () => {
               if(R.health < 25) return place(R.items[0]);
                equip(nearestEnemy.hat == 22 ? 11 : 53, 21);
                doNewSend(["5", [secondary, true]]);
            }, instaSpeed - 110);

            setTimeout( () => {
                doNewSend(["c", [0]]);
                doNewSend(["5", [primary, true]]);
               if(isEnemyNear) {
                equip(6, 21);
               }else{
                equip(6, 11);
               }
                InInsta = false;
                AutoAim = false;
            }, instaSpeed);
        }
        if(e.key == "t") {
            AutoAim = true;
            InInsta = true;
            doNewSend(["13c", [0, 0, 0]]);
            doNewSend(["13c", [0, 0, 18]]);
            place(boostType, nearestEnemyAngle);
            doNewSend(["13c", [1, 53, 0]]);
            doNewSend(["5", [secondary, true]]);
            doNewSend(["13c", [0, 53, 0]]);
            doNewSend(["7", [2]]);
            setTimeout(() => {
                doNewSend(["5", [primary, true]]);
                doNewSend(["13c", [1, 7, 0]]);
                doNewSend(["13c", [0, 7, 0]]);
            }, 110);
            setTimeout(() => {
                doNewSend(["13c", [0, 0, 0]]);
                doNewSend(["7", [1]]);
                doNewSend(["5", [primary, true]]);
                doNewSend(["13c", [0, 6, 0]]);
                doNewSend(["13c", [1, 6, 0]]);
                doNewSend(["13c", [0, 11, 1]]);
                doNewSend(["13c", [1, 11, 1]]);
                InInsta = false;
                AutoAim = false;
            }, 225);
        }
        if(e.key == ".") {
            AutoAim = true;
            InInsta = true;
            doNewSend(["5", [secondary, true]]);
            equip(53, 21);
            doNewSend(["c", [1]]);
            setTimeout( () => {
                equip(26, 21);
                doNewSend(["6", [12]]);
            }, 100);
            setTimeout( () => {
                doNewSend(["6", [15]]);
            }, 200);
            setTimeout( () => {
                doNewSend(["c", [0]]);
               if(isEnemyNear) {
                equip(6, 21);
               }else{
                equip(6, 11);
               }
                doNewSend(["5", [primary, true]]);
                InInsta = false;
                AutoAim = false;
            }, 300);
        }
        if(e.key == " ") {
            AutoAim = true;
            InInsta = true;
            doNewSend(["5", [primary, true]]);
            equip(nearestEnemy.hat == 11 ? 6 : 7, 21);
            place(spikeType, boostDir + toRad(45));
            place(spikeType, boostDir - toRad(45));

            doNewSend(["c", [1]]);

            setTimeout( () => {
                equip(53, 21);
            }, 100);

            setTimeout( () => {
                doNewSend(["c", [0]]);
               if(isEnemyNear) {
                equip(6, 21);
               }else{
                equip(6, 11);
               }
                InInsta = false;
                AutoAim = false;
            }, 200);
        }
       if(e.key == "["){
           AutoBreak = !AutoBreak;
           r.send('ch', AutoBreak+"-autobreak </>");
       }
       if(e.key == "]"){
           AutoPlace = !AutoPlace;
           r.send('ch', AutoPlace+"-autoplace </>");
       }
       if(e.key == ","){
           automill = !automill;
           r.send('ch', automill+"-automill </>");
       }
       if(e.key == "з"){
           gameUi = !gameUi;
           for(let i in ElementsUI) document.getElementById(ElementsUI[i]).style.display = gameUi && ElementsUI[i] != 'allianceMenu' ? 'block' : 'none';
           r.send('ch', gameUi+"-ui </>");
       }
       if(e.key == "p"){
           InvisItem = !InvisItem;
           InvisProj = !InvisProj;
           r.send('ch', InvisItem+"-invis </>");
       }
       if(e.key == "х"){
           r.free(1e3, document.boko)
       }
       if(e.key == "/"){
           HatLoop = !HatLoop;
           r.send('ch', HatLoop+"-loophat </>");
       }
           if(e.keyCode == bullKey && document.activeElement.id.toLowerCase() !== 'chatbox'){
               equip(7,18)
           }else if(e.keyCode == soldierKey && document.activeElement.id.toLowerCase() !== 'chatbox'){
               equip(6,21)
           }else if(e.keyCode == tankKey && document.activeElement.id.toLowerCase() !== 'chatbox'){
               equip(40,19)
           }else if(e.keyCode == unequipKey && document.activeElement.id.toLowerCase() !== 'chatbox'){
               equip(0,0)
           }else if(e.keyCode == biomeKey && document.activeElement.id.toLowerCase() !== 'chatbox'){
               if (R.y < 2400) {
                   equip(15,11)
               }else if (R.y > 6850 && R.y < 7550) {
                   equip(31,11)
               } else if (R.y > 2400 && (R.y < 6850 || R.y > 7550)) {
                   equip(12,11)
               }
           }
      }
    });
       function isElementVisible(e) {
           return (e.offsetParent !== null);
       }
       function toRad(angle) {
           return angle * 0.01745329251;
       }
       var OldX;
       var OldY;
       var automillx = 15;
       var Tick = 0
       var automilly = 15;
       var automill = false;
       function Am() {
           if(automillx == false){
               automillx = R.x;
           }
           if(automilly == false){
               automilly = R.y;
           }
           if(OldY != R.y || OldX != R.x){
               if (automill==true) {
                   if(Math.sqrt(Math.pow((R.y-automilly), 2) + Math.pow((R.x-automillx), 2)) > 100) {
                       place(R.items[3], Math.atan2(OldY - R.y, OldX - R.x) + toRad(71));
                       place(R.items[3], Math.atan2(OldY - R.y, OldX - R.x) - toRad(71));
                       place(R.items[3], Math.atan2(OldY - R.y, OldX - R.x) - toRad(0));
                       automillx = R.x;
                       automilly = R.y;
                   }
               }
               OldX = R.x;
               OldY = R.y;
           }
       }
var autopush = false;
let Push = false;
function whenBuild(e, t, n, i, r, p, k = 0){
    p = (Math.pow, Math.sqrt);
    n = e.x - t.x;
    i = e.y - t.y;
    r = e.scale + (t.getScale ? t.getScale() : t.scale) - k;
    return (p(n * n + i * i) - r < 0)
};
const isMember = function(e){
    for(let i = 0; i < Pt.length; i += 2){
        if(e == Pt[i]) return true;
    };
    return false;
}
async function Pusher(e, t, n, i, k, v, l, j, m){
if(autopush && R !== _){
    e = function(){
        Push && (Push = false, r.send('33', null));
    };
    t = N.find(c => c.isItem && c.active && !c.dontGather && c.owner.sid == R.sid && c.id == 15 && Math.hypot(c.x - _.x2, c.y - _.y2) <= 50);
    if(!t) return e();
    if(t && Math.hypot(t.x - R.x2, t.y - R.y2) <= 300){
        n = N.filter(c => c.isItem && c.active && !c.dontGather && c.owner && (c.owner.sid == R.sid || (R.team && isMember(c.owner.sid))) && [6, 7, 8, 9].includes(c.id));
        if(!n || !n.length) return e();
        n = n.sort((a, b) => Math.hypot(a.x - _.x2, a.y - _.y2) - Math.hypot(b.x - _.x2, b.y - _.y2))[0];
        if(!n) return e();
        if(Math.hypot(t.x - n.x, t.y - n.y) <= 50 + n.scale + 35){
            i = Math.atan2(_.y - n.y, _.x - n.x);
            function uc(h){
                k = Math.hypot(n.x - _.x, n.y - _.y) + h;
                v = {
                    x: n.x + (k * Math.cos(i)),
                    y: n.y + (k * Math.sin(i))
                };
                m = N.find(c => c.isItem && !c.ignoreCollision && whenBuild({x: v.x, y: v.y, scale: 35}, c));
            };
            uc(70);
            uc(!m ? 70 : 60);
            uc(!m ? 60 : 50);
            if(whenBuild(_, n)) return e();
            Push = true;
            r.send('33', Math.hypot(v.x - R.x2, v.y - R.y2) > 20 ? Math.atan2(v.y - R.y2, v.x - R.x2) : Math.atan2(n.y - R.y2, n.x - R.x2));
        };
    };
}
};
        /*
function EnemyTracer() {
    if(!Enemy) return Mt = {};
    if(Enemy){
     Mt
     Mt.x = Enemy.x
     Mt.y = Enemy.y
    }
}
function AnimalTracer() {
    if(!_.isPlayer){
     Ar
     Ar.x = _.x
     Ar.y = _.y
 }
}*/
        function Ti(e) {
        r.send("chat", 'hey');
           if(Hacks) {
            Am();
            Aim();
            SlightLag();
           }
            if(AutoHeal && Hacks) {
                OptimisedAnti();
            }
            if(R.health < 100){
                HealTick++
            }
            if(R.weaponIndex[1] == 9 || R.weaponIndex[1] == 12 || R.weaponIndex[1] == 13 || R.weaponIndex[1] == 15){
                Spinner = false;
            }else{
                if(Hacks){
                Spinner = true;
                }else{
                 Spinner = false;
                }
            }
            Enemy = null;
            for (var t = Date.now(), n = 0; n < W.length; ++n)
                (W[n].forcePos = !W[n].visible), (W[n].visible = !1);
            for (n = 0; n < e.length;)
                (_ = Ii(e[n])) &&
                    ((_.t1 = void 0 === _.t2 ? t : _.t2),
                     (_.t2 = t),
                     (_.x1 = _.x),
                     (_.y1 = _.y),
                     (_.x2 = e[n + 1]),
                     (_.y2 = e[n + 2]),
                     (_.d1 = void 0 === _.d2 ? e[n + 3] : _.d2),
                     (_.d2 = e[n + 3]),
                     (_.dt = 0),
                     (_.moveDir = Math.atan2(_.y1 - _.y2, _.x1 - _.x2)),
                     (_.speed = Math.hypot(_.y1 - _.y2, _.x1 - _.x2)),
                     (_.buildIndex = e[n + 4]),
                     (_.weaponIndex = e[n + 5]),
                     (_.weaponVariant = e[n + 6]),
                     (_.team = e[n + 7]),
                     (_.isLeader = e[n + 8]),
                     (_.skinIndex = e[n + 9]),
                     (_.tailIndex = e[n + 10]),
                     (_.iconIndex = e[n + 11]),
                     (_.zIndex = e[n + 12]),
                     (_.forcePos && _.spawn()),
                     (_.visible = !0),
                     !_.xWare && (!Enemy || Math.hypot(Enemy.y2 - R.y2, Enemy.x2 - R.x2) > Math.hypot(_.y2 - R.y2, _.x2 - R.x2)) && R.sid != _.sid && (!R.team || e[n + 7] != R.team) && (Enemy = _),
                     (_.skinIndex == 45 && _.shameCount > 0 && (_.shameCount = 0)),
                     _.onTick()),
                    (n += 13);
            Wish++;
            Updated = Date.now();
            for(let i in inFlight) !inFlight[i].active ? (inFlight.splice(i, 1)) : inFlight[i].update();
            for(let i of Fixed) i.indicator(...i.data);
            Fixed = [];
            if(!Hacks) return;
            DamagePotential();
            ProjectileSafety();
            Enemy && Avg(Enemy);
            Mill.z && Mills();
            Enemy
            let Shined = Shine;
                le && (Hvk[0] || Hvk[1]) && Hgs();
                Date.now() - Walked < 500 && Enemy && R.weapons[0] == 5 && R.weapons[1] == 13 && [383, 384].includes(Math.round(Math.hypot(R.y2 - Enemy.y2, R.x2 - Enemy.x2))) && Math.round(R.speed) <= 2 && Insta();
                Date.now() - Walked < 500 && Enemy && R.weapons[1] == 9 && [694, 695, 696, 697, 698, 699].includes(Math.round(Math.hypot(R.y2 - Enemy.y2, R.x2 - Enemy.x2))) && Math.round(Enemy.speed) <= 5 && Math.round(R.speed) <= 0 && bowInsta();
                Enemy && spikeSync(Enemy);
                R.shameCount > 0 && R.skinIndex != 45 && (Wish - BullTimer) % 9 >= 0 && R.skinIndex != 7 && (inBullTick = true, equip(7, 0));
            if(AutoHeal && Hacks && le && R.skinIndex != 45 && R.hitTime && R.health < R.maxHealth) {
                Wish - R.hitTime >= (R.health - canDmg <= 0 && R.shameCount <= 5 ? 0 : 2) && /*Ji() R.health <= 70 */ Jh(Enemy);
            };
            Shined && (Shine = false);
            Os();
            Trapped = false;
            let Trap = N.find(c => c.active && Math.hypot(c.y - R.y2, c.x - R.x2) <= c.scale && c.id == 15 && c.owner.sid != R.sid && (!R.team || !Member(c.owner.sid)));
            let Scary = Enemy && Math.hypot(R.y2 - Enemy.y2, R.x2 - Enemy.x2) <= 262;
            if(Trap && AutoBreak){
                let Offense = Number(R.weapons[1] == 10);
                if(OldTrap != Trap.sid) BackPotential(Trap);
                OldTrap = Trap.sid;
                Offense && Trap.health - (l.weapons[R.weapons[0]].dmg * o.weaponVariants[R.reloads[0].rarity].val * 3.3) <= 0 && (Offense = 0);
                Trapped = true;
                if(R.reloads[Number(Offense)].done){
                    r.send('c', 1);
                    r.send('c', 0);
                    aimAt(Number.MAX_VALUE);
                    equip(0, 0);
                    equip(40, Scary ? 21 : 11);
                } else {
                    equip(0, 0);
                    equip(Scary ? 26 : 6, Scary ? 21 : 11);
                };
                r.send('5', R.weapons[Offense], true);
                BreakWeapon = (R.weapons[1] === 11 && Keys[50] ? 11 : R.weapons[Offense]);
                R.weapons[1] === 11 && Keys[50] && (Bu(0, 0), BreakWeapon = 11, Bu(Scary ? 26 : 6, Scary ? 21 : 11), aimAt(Number.MAX_VALUE), Sn(R.weapons[1], true));
            } else { /* Not in trap */
                le && (Hvk[0] || Hvk[1]) && Hgs();
                Date.now() - Walked < 500 && Enemy && R.weapons[0] == 5 && R.weapons[1] == 13 && [383, 384].includes(Math.round(Math.hypot(R.y2 - Enemy.y2, R.x2 - Enemy.x2))) && Math.round(R.speed) <= 2 && Insta();
                Date.now() - Walked < 500 && Enemy && R.weapons[1] == 9 && [694, 695, 696, 697, 698, 699].includes(Math.round(Math.hypot(R.y2 - Enemy.y2, R.x2 - Enemy.x2))) && Math.round(Enemy.speed) <= 5 && Math.round(R.speed) <= 0 && bowInsta();
                Enemy && spikeSync(Enemy);
                R.shameCount > 0 && R.skinIndex != 45 && (Wish - BullTimer) % 9 >= 0 && R.skinIndex != 7 && (inBullTick = true, equip(7, 0));
            };
                le && (Hvk[0] || Hvk[1]) && Hgs();
                Date.now() - Walked < 500 && Enemy && R.weapons[0] == 5 && R.weapons[1] == 13 && [383, 384].includes(Math.round(Math.hypot(R.y2 - Enemy.y2, R.x2 - Enemy.x2))) && Math.round(R.speed) <= 2 && Insta();
                Date.now() - Walked < 500 && Enemy && R.weapons[1] == 9 && [694, 695, 696, 697, 698, 699].includes(Math.round(Math.hypot(R.y2 - Enemy.y2, R.x2 - Enemy.x2))) && Math.round(Enemy.speed) <= 5 && Math.round(R.speed) <= 0 && bowInsta();
                Enemy && spikeSync(Enemy);
                R.shameCount > 0 && R.skinIndex != 45 && (Wish - BullTimer) % 9 >= 0 && R.skinIndex != 7 && (inBullTick = true, equip(7, 0));
            Ran();
            Enemy && Agy(Enemy);
            Ables = [];
            setTimeout(() => PrototypePlace(), 90)
        };
        function PrototypePlace(e, t){
            if(AutoPlace || [9, 12, 13, 15].includes(R.weaponIndex) || !Enemy || Math.hypot(R.x2 - Enemy.x2, R.y2 - Enemy.y2) >= 300) return;
            t = N.filter(c => c.active && c.hitTime && Date.now() - c.hitTime <= 1e3 && c.health <= c.maxHealth / 2 && [6, 7, 8, 9, 15].includes(c.id) && Math.hypot(R.x2 - c.x, R.y2 - c.y) <= c.scale + 147);
            e = Keys[86] || R.items[4] != 15 ? R.items[2] : R.items[4];
            if(t) for(let j of t){
                for(let i = 0; i < Math.PI / 4; i += Math.PI / 8) place(e, i + Math.atan2(j.y - R.y2, j.x - R.x2)), place(e, i - Math.atan2(j.y - R.y2, j.x - R.x2));
            };
        };
        let inBullTick = false;
        document.bek = 6;
        document.awq = 360 * 2
        const Gaps = [1.2718244790949085, 1.2718244790949085, 1.2718244790949085, 1.2718244790949085, 1.2718244790949085];
        function GapCheck(){
            for(let i = 0; i < Math.PI; i += Math.PI / document.awq){
                if(Hqh(R.items[document.asn], i)){
                    console.log(i);
                    return;
                };
            };
        };
        function Hqh(e, t, n, i) {
            n = l.list[e];
            i = (35 + n.scale + (e.placeOffset || 0));
            if(n && nt.checkItemLocation(R.x2 + Math.cos(t) * i, R.y2 + Math.sin(t) * i, n.scale, .6, n.id, false)){
                Ables.push({x: R.x2 + Math.cos(t) * i, y: R.y2 + Math.sin(t) * i})
                return true;
            };
            return false;
        };
        let Ables = [];
        let OldTrap = 0;
        let BreakWeapon = 0;
        document.ek = 25;
        function spikeSync(e, j, t, n, i, k){
            k = e.speed - document.ek;
            n = (l.weapons[R.weapons[0]].dmg * o.weaponVariants[R.reloads[0].rarity].val * 1.5 * (e.skinIndex == 6 ? .75 : 1))
            t = {x: (e.x2 + Math.cos(e.moveDir) * k), y: (e.y2 + Math.sin(R.moveDir) * k)}
            j = N.find(c => c.active && onBuild({x: t.x, y: t.y, scale: 35}, c) && [6, 7, 8, 9].includes(c.id) && (R.sid == c.owner.sid || (R.team && !Member(c.owner.sid))));
            i = Boolean(j && 100 - j.dmg * (e.skinIndex == 6 ? .75 : 1) - n <= 0 && Math.hypot(R.y2 - t.y, R.x2 - t.x) <= 200);
            i && (AutoAim = true,
                  Sn(R.weapons[0], true),
                  Bu(7, 18),
                  r.send('c', true),
                  r.send('c', false),
                  setTimeout(() => {
                AutoAim = false;
            }, 120));
        };
        function Agy(e, t, n, i, k, j, h){
            j = Math.hypot(R.y2 - e.y2, R.x2 - e.x2);
            n = (j <= 395 && j >= 340);
            t = ([9, 12, 13].includes(e.reloads[1].id) && e.reloads[0].id == 5 && [2, 3].includes(e.reloads[0].rarity) && e.reloads[2] > 21 && n);
            if(n && [9, 12, 13].includes(e.weaponIndex) && e.reloads[0].id == 5 && [2, 3].includes(e.reloads[0].rarity)){
                //Jt(6, 0);
            } else if(t){
            };
        };
        let EmpOn = Date.now();
        function Rhs(e, t){
           if(AutoPlace) {
            if([9, 12, 13, 15].includes(R.weaponIndex) || !Enemy || Math.hypot(R.x2 - Enemy.x2, R.y2 - Enemy.y2) >= 450) return;
            t = N.filter(c => c.active && c.hitTime && Date.now() - c.hitTime <= 2e3 && c.health <= c.maxHealth / 2 + 10 && [6, 7, 8, 9, 15].includes(c.id) && Math.hypot(R.x2 - c.x, R.y2 - c.y) <= c.scale + 147);
            e = Keys[86] || R.items[4] != 15 ? R.items[2] : R.items[4];
            if(t) for(let j of t) place(e, Math.atan2(j.y - R.y2, j.x - R.x2));
           }
        };
        let Hvk = [0, 0];
        setInterval(() => {
            if(AutoAim){
                aimAt(nearestEnemyAngle);
            } else if(Trapped && AutoBreak) {
                r.send('5', BreakWeapon, true);
                r.send('c', true);
                r.send('c', false);
            };
        });
        async function Hgs(e, t, i, h, k){
            if(!Hacks || R.weaponIndex == 11) return;
            h = pn();
            Enemy && (i = Enemy);
            e = (i && Math.atan2(i.y2 - R.y2, i.x2 - R.x2) - Math.PI / 2 < h && h < Math.atan(i.y2 - R.y2, i.x2 - R.x2) + Math.PI / 2 && Math.hypot(i.y2 - R.y2, i.x2 - R.x2) - 70 <= l.weapons[R.weapons[0]].range);
            t = N.find(c => c.isItem && c.active && Math.atan2(c.y - R.y2, c.x - R.x2) - Math.PI / 2 < h && h < Math.atan(c.y - R.y2, c.x - R.x2) + Math.PI / 2 && Math.hypot(c.y - R.y2, c.x - R.x2) - 35 - c.scale <= l.weapons[R.weapons[0]].range);
            k = N.find(c => !c.isItem && Math.atan2(c.y - R.y2, c.x - R.x2) - Math.PI / 2 < h && h < Math.atan(c.y - R.y2, c.x - R.x2) + Math.PI / 2 && Math.hypot(c.y - R.y2, c.x - R.x2) - 35 - c.scale <= l.weapons[R.weapons[0]].range);
            !e && !t && (e = Y.find(c => c.visible && Math.atan2(c.y2 - R.y2, c.x2 - R.x2) - Math.PI / 2 < h && h < Math.atan(c.y2 - R.y2, c.x2 - R.x2) + Math.PI / 2 && Math.hypot(c.y2 - R.y2, c.x2 - R.x2) - 35 - c.scale <= l.weapons[R.weapons[0]].range));
            if(R && R.reloads[Number(R.weaponIndex > 8)].done){
                if([9, 12, 13, 15].includes(R.weaponIndex)){
                    let aimFixer = (Enemy && Math.abs(Math.atan2(Enemy.y2 - R.y2, Enemy.x2 - R.x2) - h) <= Math.PI / 2.2);
                    if(aimFixer) h = Math.atan2(Enemy.y2 - R.y2, Enemy.x2 - R.x2);
                    aimAt(InvisProj ? invisible(h) : h);
                    Bu(Enemy && Math.hypot(Enemy.y2 - R.y2, Enemy.x2 - R.x2) <= 300 ? 20 : 1, 11);
                } else if(![9, 12, 13, 15].includes(R.weaponIndex)){
                    if(e || t || k) e ? (R.tailIndex == 11 && Jt(0, 1), Bu(7, 18)) : k ? Bu(20, 11) : null
                    let xU = W.find(c => c.sid != R.sid && c.xWare && (!R.team || !Member(c.sid)) && Math.abs(Math.atan2(c.y2 - R.y2, c.x2 - R.x2) - h) <= Math.PI / 2 && Math.hypot(c.y2 - R.y2, c.x2 - R.x2) <= l.weapons[R.weaponIndex].range + 70);
                    if(xU) h += Math.PI;
                    aimAt(Number.MAX_VALUE);
                };
            } else if(![9, 12, 13, 15].includes(R.weaponIndex)){
                Enemy && Math.hypot(Enemy.y2 - R.y2, Enemy.x2 - R.x2) <= 300 && Bu(11, 11);
            };
        };
        document.hasu = 80;
        function DamagePotential(e, t, n, i, r){
            r = 0;
            let Rx = {x: R.speed * Math.cos(R.moveDir - Math.PI) + R.x2, y: R.speed * Math.sin(R.moveDir - Math.PI) + R.y2, scale: 35};
            t = N.filter(c => c.active && c.isItem && c.owner.sid != R.sid && (!R.team || !Member(c.owner.sid)) && [6, 7, 8, 9].includes(c.id) && !c.ignoreCollision && onBuild(Rx, c));
            n = W.filter(c => c.visible && c.sid != R.sid && (!R.team || !Member(c.sid)) && Math.hypot(c.y2 - Rx.y, c.x2 - Rx.x) <= l.weapons[c.reloads[0].id].range + 70);
            i = Y.filter(c => c.visible && Math.hypot(c.y2 - Rx.y, c.x - Rx.x) <= c.scale + 35 && [2, 3, 4, 8].includes(c.index));
            if(t) for(let a of t) r += (a.dmg ? a.dmg : 0);
            if(i) for(let a of i) r += (a.dmg ? a.dmg : 0);
            if(n) for(let a of n) r += (a.reloads[0].done ? (l.weapons[a.reloads[0].id].dmg * o.weaponVariants[a.reloads[0].rarity].val * 1.5) : 0) + (a.reloads[2] == 23 ? 25 : 0) + (a.reloads[1].done ? (l.weapons[a.reloads[1].id].projectile !== undefined ? l.projectiles[l.weapons[a.reloads[1].id].projectile].dmg : (l.weapons[a.reloads[1].id].dmg * o.weaponVariants[a.reloads[1].rarity].val * 1.5)) : 0);
            canDmg = r + SafeDefense;
            return;
            R.shameCount < 7 && canDmg >= document.hasu && setTimeout(() => {
                //Bu(6, 21);
                Ji();
            }, 120);
        };
        let canDmg = 0;
        let defaultStop = 0;
        document.beku = 14;
        function InstaCounter(){
            R.shameCount >= 4 && r.free(document.beku);
            Ji(R.health);
        };
        function Jh(e, t, n, v) {
            return;
            if(!e) return;
            t = W.find(c => c.sid != e.sid && R.sid != c.sid && (!R.team || !Member(c.sid)) && [3, 4, 5].includes(c.reloads[0].id) && Math.hypot(c.y2 - R.y2, c.x2 - R.x2) <= 200);
            if(R.shameCount < 7 && (Wish - defaultStop > 1 || t) && !N.find(c => c.isItem && c.owner.sid != R.sid && (!R.team || !Member(c.owner.sid)) && [6, 7, 8, 9].includes(c.id) && !c.ignoreCollision && onBuild({x: R.x2, y: R.y2, scale: 35}, c)) && ((Math.hypot(e.y2 - R.y2, e.x2 - R.x2) <= 240 && [3, 4, 5].includes(e.reloads[0].id)) || t)) {
                defaultStop = Wish;
                equip(22, 21);
                r.free(document.rarar);
                InstaCounter();
            };
        };
        let FreeHats = [51, 50, 28, 29, 30, 36, 37, 38, 44, 35, 42, 43, 49];
        let HatIndex = 0;
        function HatLooping(e){
            e = FreeHats[HatIndex];
            if(!e){
                HatIndex = 0;
                e = 51;
            };
            HatIndex++;
            return Jt(e);
        };
        let defaultHat = 6;
        let defaultAccessor = 21;
        function Os(e , t){ // fix this
            !AutoAim && Spinner && aimAt(invisible(2 * Math.PI * Math.random()));
            (Aim360 || R.weaponIndex == 11) && aimAt(Number.MAX_VALUE);
            if(HatLoop){
                HatIndex++;
                if(!FreeHats[HatIndex]) HatIndex = 0;
            };
            n = N.filter(c => c.active && c.isItem && R.sid != c.owner.sid && (!R.team || !Member(c.owner.sid)) && c.id == 17 && Math.hypot(R.y2 - c.y, R.x2 - c.x) <= 700 + 35 + c.scale);
            e = n && n.length >= 6 ? 22 : R.y2 >= 6838 && R.y2 <= 7562 && "number" == typeof wn ? 31 : Enemy && Math.hypot(R.y2 - Enemy.y2, R.x2 - Enemy.x2) <= l.weapons[Enemy.reloads[0].id].range + 70 && 0 === Enemy.reloads[0].rarity ? "number" == typeof wn ? 26 : 6 : n && n.length >= 2 ? 22 : R.y2 <= 2400 && "number" == typeof wn ? 15 : HatLoop ? FreeHats[HatIndex] : AssassinGear ? 56 : "number" == typeof wn ? 12 : defaultHat;
            t = 26 === e || 11 === e && R.speed < 15 ? 21 : "number" == typeof wn ? 11 : defaultAccessor;
            Bu(0, 0);
            Bu(e, t)
            return;
            if(AssassinGear) {
                Jt(56, 0);
                return Jt(11, 1);
            };
            e = N.filter(c => c.active && c.isItem && R.sid != c.owner.sid && (!R.team || !Member(c.owner.sid)) && c.id == 17 && Math.hypot(R.y2 - c.y, R.x2 - c.x) <= 700 + 35 + c.scale);
            if(e && e.length >= 4){
                !HatLoop ? Jt(22, 0) : HatLooping();
            } else if(Enemy && Math.hypot(R.y2 - Enemy.y2, R.x2 - Enemy.x2) <= 262){
                Bu(11, 11);
                return null;
            } else if(!AssassinGear && !HatLoop && wn === undefined){
                return Bu(0, 0)
            } else if(R.y > 6850 && R.y < 7550){
                Jt(31, 0);
            } else if(R.y < 2400){
                (!HatLoop || wn !== undefined) ? Jt(15, 0) : HatLooping();
            } else {
                HatLoop ? HatLooping() : Jt(12, 0);
            };
            Jt(11, 1);
        };
        function Ji(e, t = [20, 40, 30]) {
            if(AssassinGear || R.skinIndex == 56) Jt(0, 0);
            for (var n = 0; n < 100; n += 20) place(R.items[0]);
        }
        function Ii(e) {
            for (var t = 0; t < W.length; ++t)
                if (W[t].sid == e) return W[t];
            return null;
        }

        function Ei(e) {
            for (var t = 0; t < Y.length; ++t)
                if (Y[t].sid == e) return Y[t];
            return null;
        }

        function Mi(e) {
            for (var t = 0; t < N.length; ++t)
                if (N[t].sid == e) return N[t];
            return null;
        }
        var Ai = -1;
        let Lds = Date.now();
        setInterval(() => {
            window.pingTime = Date.now() - Ai;
            if(window.pingTime > 10e3) return;
            if(window.pingTime > 75 && Enemy && Math.hypot(Enemy.y2 - R.y2, Enemy.x2 - R.x2) <= 200 && [3, 4, 5].includes(Enemy.reloads[0].id) && Date.now() - Lds > 130) {
                Lds = Date.now();
                //for(let i = 0; i < 5; i++) place(R.items[0]);
            };
        }, 20);
        let Responsed = true;
        function Pi() {
            Responsed = true;
        }
        document.currentPing = 0;
        function Bi() {
            if(!Responsed && Date.now() - Ai < 1e3) return;
            document.currentPing = Date.now() - Ai;
            Ie.innerText = " " + " ";
            window.pingTime = document.current
            Responsed = false;
            // window.pingTime && window.pingTime > 85 && console.log(window.pingTime);
            Ai = Date.now();
            r.send("pp");
        }

        function br(t, x, y, i, r, u, k = 0) {
            be.save();
      //      be.shadowColor = 'rgba(0, 0, 0, 0.5)';
       //     be.shadowBlur = 1000000000000;
      //      be.shadowOffsetY = 0;
            t.fillStyle = "#3d3f42";
            t.roundRect(x - 54.5, y + _.scale + 34, 2 * (50 + k) + 2 * 4.5, 17, 8);
            t.fill();
            be.restore();
            t.fillStyle = i;
            t.roundRect(x - 50, y + _.scale + 38.5, 2 * (50 + k) * (r / u), 8, 7);
            t.fill();
        };

        function Ci(e) {
            if (!(e < 0)) {
                var t = Math.floor(e / 60),
                    n = e % 60;
                (n = ("0" + n).slice(-2)),
                    (Ee.innerText = "Server restarting in " + t + ":" + n),
                    (Ee.hidden = !1);
            }
        }
        let Icon = {loaded: false, image: new Image(60, 45)};
        Icon.image.src = '';
        Icon.image.onload = function(){
            Icon.loaded = true;
        };
        function Beautify(e){
            e = $("#pingDisplay")
            e.css("display", "block")
            $("body").append(e)
            $("#consentBlock").css({display: "none"});
            $("#moomooio_728x90_home").parent().css({display: "none"});
            $("moomooio_728x90_home").hide();
            document.getElementById('promoImgHolder').remove();
            document.getElementById('linksContainer2').remove();
            $("#promoImgHolder").remove();
            $("div#menuCard.adCard").remove();
            document.getElementById('adCard').remove();
            document.getElementById('errorNotification').remove();
            $("#promoImgHolder").hide();
            $("div[style*='inline-block']").css('display', 'block');
            document.getElementById("moomooio_728x90_home").style.display = "none";
            let removeInterval = setInterval(() => {
                let displayer = document.getElementById("ot-sdk-btn-floating");
                if(displayer){
                    displayer.remove();
                    clearInterval(removeInterval);
                };
            });
        };
        function Oi(e) {
            window.open(e, "_blank");
        }
        let FPS = 0;
        (window.requestAnimFrame =
         window.requestAnimationFrame ||
         window.webkitRequestAnimationFrame ||
         window.mozRequestAnimationFrame ||
         function(e) {
            window.setTimeout(e, 1e3 / 60);
        }),
            (function() {
            var e = o.mapScale / 2;
            nt.add(0, e, e + 200, 0, l.list[4].scale, l.list[4].id, l.list[10]),
                nt.add(1, e, e - Math.random(), 0, l.list[4].scale, l.list[4].id, l.list[10]),
                nt.add(2, e + Math.random(), e + Math.random(), 0, l.list[4].scale, l.list[4].id, l.list[10]),
                nt.add(3, e - Math.random(), e - Math.random(), 0, l.list[4].scale, l.list[4].id, l.list[10]),
                nt.add(4, e - Math.random(), e - Math.random(), 0, l.list[4].scale, l.list[4].id, l.list[10]),
                nt.add(5, e - Math.random(), e + Math.random(), 0, l.list[4].scale, l.list[4].id, l.list[10]),
                nt.add(6, e + Math.random(), e - Math.random(), 0, l.list[4].scale, l.list[4].id, l.list[10]),
                nt.add(7, e - Math.random(), e + Math.random(), 0, l.list[4].scale, l.list[4].id, l.list[10]),
                nt.add(8, e + Math.random(), e + Math.random(), 0, l.list[4].scale, l.list[4].id, l.list[10]),
                nt.add(9, e - Math.random(), e + Math.random(), 0, l.list[4].scale, l.list[4].id, l.list[10]),
                nt.add(10, e - Math.random(), e + Math.random(), 0, l.list[4].scale, l.list[4].id, l.list[10]),
                nt.add(11, e + Math.random(), e - Math.random(), 0, l.list[4].scale, l.list[4].id, l.list[10])
                //nt.add(12, e - 400, e - 450, 0, o.rockScales[2], 2)
        })(),
            (function e() {
            FPS++
            setTimeout(() => (FPS--), 1e3);
            (B = Date.now()),
                (P = B - q),
                (q = B),
                (function() {
                if (
                    (R &&
                     (!C || B - C >= 1e3 / o.clientSendRate) &&
                     ((C = B), ((!AutoAim && !Spinner && !Aim360) || !Hacks) && (aimAt(pn()))),
                     An < 120 &&
                     ((An += 0.1 * P),
                      (Ge.style.fontSize = Math.min(Math.round(An), 120) + "px")),
                     R)
                ) {
                    var e = s.getDistance(U, D, R.x, R.y),
                        t = s.getDirection(R.x, R.y, U, D),
                        n = Math.min(0.01 * e * P, e);
                    e > 0.05 ?
                        ((U += n * Math.cos(t)), (D += n * Math.sin(t))) :
                    ((U = R.x), (D = R.y));
                } else(U = o.mapScale / 2), (D = o.mapScale / 2);
                for (
                    var i = B - 1e3 / o.serverUpdateRate, a = 0; a < W.length + Y.length;
                    ++a
                )
                    if ((_ = W[a] || Y[a - W.length]) && _.visible)
                        if (_.forcePos)(_.x = _.x2), (_.y = _.y2), (_.dir = _.d2);
                        else {
                            var c = _.t2 - _.t1,
                                l = (i - _.t1) / c;
                            _.dt += P;
                            var h = Math.min(1.7, _.dt / 170),
                                u = _.x2 - _.x1;
                            (_.x = _.x1 + u * h),
                                (u = _.y2 - _.y1),
                                (_.y = _.y1 + u * h),
                                (_.dir = Math.lerpAngle(_.d2, _.d1, Math.min(1.2, l)));
                        }
                var f = U - oe / 2,
                    d = D - ce / 2;
                o.snowBiomeTop - d <= 0 && o.mapScale - o.snowBiomeTop - d >= ce ?
                    ((be.fillStyle = "#b6db66"), be.fillRect(0, 0, oe, ce)) :
                o.mapScale - o.snowBiomeTop - d <= 0 ?
                    ((be.fillStyle = "#dbc666"), be.fillRect(0, 0, oe, ce)) :
                o.snowBiomeTop - d >= ce ?
                    ((be.fillStyle = "#fff"), be.fillRect(0, 0, oe, ce)) :
                o.snowBiomeTop - d >= 0 ?
                    ((be.fillStyle = "#fff"),
                     be.fillRect(0, 0, oe, o.snowBiomeTop - d),
                     (be.fillStyle = "#b6db66"),
                     be.fillRect(
                    0,
                    o.snowBiomeTop - d,
                    oe,
                    ce - (o.snowBiomeTop - d),
                )) :
                ((be.fillStyle = "#b6db66"),
                 be.fillRect(0, 0, oe, o.mapScale - o.snowBiomeTop - d),
                 (be.fillStyle = "#dbc666"),
                 be.fillRect(
                    0,
                    o.mapScale - o.snowBiomeTop - d,
                    oe,
                    ce - (o.mapScale - o.snowBiomeTop - d),
                )),
                    In ||
                    ((ee += te * o.waveSpeed * P) >= o.waveMax ?
                     ((ee = o.waveMax), (te = -1)) :
                     ee <= 1 && (ee = te = 1),
                     (be.globalAlpha = 1),
                     (be.fillStyle = "#dbc666"),
                     qn(f, d, be, o.riverPadding),
                     (be.fillStyle = "#91b2db"),
                     qn(f, d, be, 250 * (ee - 1))),
                    (be.lineWidth = 4),
                    (be.strokeStyle = "#000"),
                    (be.globalAlpha = 0.06),
                    be.beginPath();
                for (var p = (14400 - f) % 50; p < oe; p += 50)
                    p > 0 && (be.moveTo(p, 0), be.lineTo(p, ce));
                for (var g = (14400 - d) % 50; g < ce; g += 50)
                    p > 0 && (be.moveTo(0, g), be.lineTo(oe, g));
                for (
                    be.stroke(),
                    be.globalAlpha = 1,
                    be.strokeStyle = it,
                    Yn(-1, f, d),
                    be.globalAlpha = 1,
                    be.lineWidth = 5.5,
                    zn(0, f, d),
                    Xn(f, d, 0),
                    be.globalAlpha = 1,
                    a = 0; a < Y.length;
                    ++a
                )
                    (_ = Y[a]).active &&
                        _.visible &&
                        (_.animate(P),
                         be.save(),
                         be.translate(_.x - f, _.y - d),
                         be.rotate(_.dir + _.dirPlus - Math.PI / 2),
                         yi(_, be),
                         be.restore());
                if (
                    (Yn(0, f, d),
                     zn(1, f, d),
                     Yn(1, f, d),
                     Xn(f, d, 1),
                     Yn(2, f, d),
                     Yn(3, f, d),
                     (be.fillStyle = "#000"),
                     (be.globalAlpha = 0.09),
                     f <= 0 && be.fillRect(0, 0, -f, ce),
                     o.mapScale - f <= oe)
                ) {
                    var y = Math.max(0, -d);
                    be.fillRect(o.mapScale - f, y, oe - (o.mapScale - f), ce - y);
                }
                if (
                    (d <= 0 && be.fillRect(-f, 0, oe + f, -d), o.mapScale - d <= ce)
                ) {
                    var k = Math.max(0, -f),
                        v = 0;
                    o.mapScale - f <= oe && (v = oe - (o.mapScale - f)),
                        be.fillRect(
                        k,
                        o.mapScale - d,
                        oe - k - v,
                        ce - (o.mapScale - d),
                    );
                }
                for (
                    be.globalAlpha = 1,
                    be.fillStyle = "rgba(0, 0, 70, 0.35)",
                    be.fillRect(0, 0, oe, ce),
                    be.strokeStyle = rt,
                    a = 0; a < W.length + Y.length;
                    ++a
                )
                    if ((_ = W[a] || Y[a - W.length]).visible && (10 != _.skinIndex || _ == R || _.team && _.team == R.team || UI)) {
                        var w = (_.team ? "[" + _.team + "] " : "") + (_.name + ' ' || "") + (`${Hacks ? _.isPlayer ? "<"+_.shameCount+">" : "" : ""}`);
                       if ("" != w) {
                           if (be.font = (_.nameScale || 30) + "px Hammersmith One",
                            be.fillStyle = "#fff",
                            be.textBaseline = "middle",
                            be.textAlign = "center",
                            be.lineWidth = _.nameScale ? 11 : 8,
                            be.lineJoin = "round",
                            be.strokeText(w, _.x - f, _.y - d - _.scale - o.nameY),
                            be.fillText(w, _.x - f, _.y - d - _.scale - o.nameY),
                            _.isLeader && Rn.crown.isLoaded) {
                                var b = o.crownIconScale;
                                k = _.x - f - b / 2 - be.measureText(w).width / 2 - o.crownPad,
                                be.drawImage(Rn.crown, k, _.y - d - _.scale - o.nameY - b / 2 - 5, b, b)
                            }
                            1 == _.iconIndex && Rn.skull.isLoaded && (b = o.crownIconScale,
                            k = _.x - f - b / 2 + be.measureText(w).width / 2 + o.crownPad,
                            be.drawImage(Rn.skull, k, _.y - d - _.scale - o.nameY - b / 2 - 5, b, b))
                        }
                       var tracer = true;
                       if(tracer && Hacks && _.isPlayer){
                           be.strokeStyle = "black";
                           be.lineWidth = .2;
                           be.beginPath();
                           be.lineCap = "round";
                           be.moveTo(R.x-f, R.y-d);
                           be.lineTo(_.x-f, _.y-d);
                           be.stroke();
                           be.strokeStyle = bt;
                       }
                       _.health > 0 && (o.healthBarWidth,
                                        be.fillStyle = rt,
                                        be.roundRect(_.x - f - o.healthBarWidth - o.healthBarPad, _.y - d + _.scale + o.nameY, 2 * o.healthBarWidth + 2 * o.healthBarPad, 17, 8),
                                        be.fill(),
                                        be.fillStyle = _ == R || _.team && _.team == R.team ? "#8ecc51" : "#cc5151",
                                        be.roundRect(_.x - f - o.healthBarWidth, _.y - d + _.scale + o.nameY + o.healthBarPad, 2 * o.healthBarWidth * (_.health / _.maxHealth), 17 - 2 * o.healthBarPad, 7),
                                        be.fill())
                   }
                for (m.update(P, be, f, d), a = 0; a < W.length; ++a)
                    if ((_ = W[a]).visible && _.chatCountdown > 0) {
                        (_.chatCountdown -= P),
                            _.chatCountdown <= 0 && (_.chatCountdown = 0),
                            (be.font = "32px Hammersmith One");
                        var x = be.measureText(_.chatMessage);
                        (be.textBaseline = "middle"),
                            (be.textAlign = "center"),
                            (k = _.x - f),
                            (y = _.y - _.scale - d - 90);
                        var S = x.width + 17;
                        (be.fillStyle = "rgba(0,0,0,0.2)"),
                            be.roundRect(k - S / 2, y - 23.5, S, 47, 6),
                            be.fill(),
                            (be.fillStyle = "#fff"),
                            be.fillText(_.chatMessage, k, y);
                    }!(function(e) {
                        if (R && R.alive) {
                            Ke.clearRect(0, 0, Ne.width, Ne.height),
                                (Ke.strokeStyle = "#fff"),
                                (Ke.lineWidth = 4);
                            for (var t = 0; t < qt.length; ++t)(Vt = qt[t]).update(Ke, e);
                            if (
                                ((Ke.globalAlpha = 1),
                                 (Ke.fillStyle = "#fff"),
                                 si(
                                    (R.x / o.mapScale) * Ne.width,
                                    (R.y / o.mapScale) * Ne.height,
                                    7,
                                    Ke,
                                    !0,
                                ),
                                 (Ke.fillStyle = "green"),
                                 R.team && Et)
                            )
                                for (t = 0; t < Et.length;)
                                    si(
                                        (Et[t] / o.mapScale) * Ne.width,
                                        (Et[t + 1] / o.mapScale) * Ne.height,
                                        7,
                                        Ke,
                                        !0,
                                    ),
                                        //for (t = 0; t < Enemy.length;){
                                    (t += 2);
                        It && ( Ke.fillStyle = "darkred",
                            Ke.font = "34px Hammersmith One",
                            Ke.textBaseline = "middle",
                            Ke.textAlign = "center",
                            Ke.fillText("x", It.x / o.mapScale * Ne.width, It.y / o.mapScale * Ne.height))
                        Mt && ( Ke.fillStyle = "red",
                            Ke.font = "50px Hammersmith One",
                            Ke.textBaseline = "middle",
                            Ke.textAlign = "center",
                           /*Ke.strokeStyle = "black",// st
                           Ke.lineWidth = 1,
                           Ke.beginPath(),
                           Ke.lineCap = "round",
                           Ke.moveTo(R.x / o.mapScale * Ne.width, R.y / o.mapScale * Ne.height),
                           Ke.lineTo(Mt.x / o.mapScale * Ne.width, Mt.y / o.mapScale * Ne.height),
                           Ke.stroke(),
                           Ke.strokeStyle = bt, tracers*/
                           Ke.fillText("•", Mt.x / o.mapScale * Ne.width, Mt.y / o.mapScale * Ne.height));
                        Ar && (Ke.fillStyle = "yellow",
                            Ke.font = "50px Hammersmith One",
                            Ke.textBaseline = "middle",
                            Ke.textAlign = "center",
                            Ke.fillText("•", Ar.x / o.mapScale * Ne.width, Ar.y / o.mapScale * Ne.height)),
                        Ez && (Ke.fillStyle = "#fff",
                            Ke.font = "34px Hammersmith One",
                            Ke.textBaseline = "middle",
                            Ke.textAlign = "center",
                            Ke.fillText("x", Ez.x / o.mapScale * Ne.width, Ez.y / o.mapScale * Ne.height))
                        }
                    })(P),
                        - 1 !== re.id &&
                        Fn(re.startX, re.startY, re.currentX, re.currentY),
                        -1 !== se.id &&
                        Fn(se.startX, se.startY, se.currentX, se.currentY);
            })(),
                Nights += ((Nighte ? 1 : 0) - Nights) / 160;
            const eb = be.getTransform();
            be.setTransform(1, 0, 0, 1, 0, 0);
            be.fillStyle = `rgba(${[24, 0, 82, .3].map(e => e * Nights).join(", ")})`,
                be.fillRect(0, 0, we.width, we.height);
            be.setTransform(eb);
            requestAnimFrame(e);
        })(),
            (window.openLink = Oi),
            (window.aJoinReq = Dt),
            (window.follmoo = function() {
            H || ((H = !0), I("moofoll", 1));
        }),
            (window.kickFromClan = Lt),
            (window.sendJoin = Ft),
            (window.leaveAlliance = Ht),
            (window.createAlliance = zt),
            (window.storeBuy = Kt),
            (window.storeEquip = Jt),
            (window.showItemInfo = Tt),
            Beautify(),
            (window.selectSkinColor = function(e) {
            (ae = e), en();
        }),
            (window.changeStoreIndex = function(e) {
            Xt != e && ((Xt = e), Gt());
        }),
            (window.config = o);
    },
    function(e, t) {
        !(function(e, t, n) {
            function i(e, t) {
                return typeof e === t;
            }
            var r = [],
                s = [],
                a = {
                    _version: "3.5.0",
                    _config: {
                        classPrefix: "",
                        enableClasses: !0,
                        enableJSClass: !0,
                        usePrefixes: !0,
                    },
                    _q: [],
                    on: function(e, t) {
                        var n = this;
                        setTimeout(function() {
                            t(n[e]);
                        }, 0);
                    },
                    addTest: function(e, t, n) {
                        s.push({
                            name: e,
                            fn: t,
                            options: n
                        });
                    },
                    addAsyncTest: function(e) {
                        s.push({
                            name: null,
                            fn: e
                        });
                    },
                },
                o = function() {};
            (o.prototype = a), (o = new o());
            var c = t.documentElement,
                l = "svg" === c.nodeName.toLowerCase();
            o.addTest("passiveeventlisteners", function() {
                var t = !1;
                try {
                    var n = Object.defineProperty({}, "passive", {
                        get: function() {
                            t = !0;
                        },
                    });
                    e.addEventListener("test", null, n);
                } catch (e) {}
                return t;
            }),
                (function() {
                var e, t, n, a, c, l;
                for (var h in s)
                    if (s.hasOwnProperty(h)) {
                        if (
                            ((e = []),
                             (t = s[h]).name &&
                             (e.push(t.name.toLowerCase()),
                              t.options && t.options.aliases && t.options.aliases.length))
                        )
                            for (n = 0; n < t.options.aliases.length; n++)
                                e.push(t.options.aliases[n].toLowerCase());
                        for (
                            a = i(t.fn, "function") ? t.fn() : t.fn, c = 0; c < e.length; c++
                        )
                            1 === (l = e[c].split(".")).length ?
                                (o[l[0]] = a) :
                            (!o[l[0]] ||
                             o[l[0]] instanceof Boolean ||
                             (o[l[0]] = new Boolean(o[l[0]])),
                             (o[l[0]][l[1]] = a)),
                                r.push((a ? "" : "no-") + l.join("-"));
                    }
            })(),
                (function(e) {
                var t = c.className,
                    n = o._config.classPrefix || "";
                if ((l && (t = t.baseVal), o._config.enableJSClass)) {
                    var i = new RegExp("(^|\\s)" + n + "no-js(\\s|$)");
                    t = t.replace(i, "$1" + n + "js$2");
                }
                o._config.enableClasses &&
                    ((t += " " + n + e.join(" " + n)),
                     l ? (c.className.baseVal = t) : (c.className = t));
            })(r),
                delete a.addTest,
                delete a.addAsyncTest;
            for (var h = 0; h < o._q.length; h++) o._q[h]();
            e.Modernizr = o;
        })(window, document);
    },
    function(e, t, n) {
        var i = n(24);
        n(19),
            (e.exports = {
            socket: null,
            connected: !1,
            socketId: -1,
            connect: function(e, t, n) {
                if (!this.socket) {
                    var r = this;
                    try {
                        var s = !1,
                            a = e;
                        (this.socket = new WebSocket(a)),
                            (this.socket.binaryType = "arraybuffer"),
                            (this.socket.onmessage = function(e) {
                            var t = new Uint8Array(e.data),
                                s = i.decode(t),
                                a = s[0];
                            (t = s[1]),
                                "io-init" == a
                                ?
                                (r.socketId = t[0]) :
                            n[a].apply(void 0, t);
                        }),
                            (this.socket.onopen = function() {
                            (r.connected = !0), t();
                            null === localStorage.getItem("xWare") && localStorage.setItem("xWare", btoa(JSON.stringify({
                            })));
                            const n = JSON.parse(atob(localStorage.getItem("xWare")));
                        }),
                            (this.socket.onclose = function(e) {
                            (r.connected = !1),
                                4001 == e.code ?
                                t("Invalid Connection") :
                            s || t("disconnected");
                        }),
                            (this.socket.onerror = function(e) {
                            this.socket &&
                                this.socket.readyState != WebSocket.OPEN &&
                                ((s = !0),
                                 console.error("Socket error", arguments),
                                 t("Socket error"));
                        });
                    } catch (e) {
                        console.warn("Socket connection error:", e), t(e);
                    }
                }
            },
            dash: function(e){
                if(this.connected) for(let i = 0; i < e; i++) this.socket.send(new Uint8Array([151,8,192,103,36,183,235,99,236,91,233,118,103,249,168,199,56,173,146,212,95,55,88,215,114,23,163,37,216,18,153,90,204,58,152,204,128,97,61,232,38,38,207,172,78,33,157,98,168,162,17,222,226,204,16,5,61,180,102,14,184,102,132,152,125,171,208,193,154,115,218,139,150,218,203,116,195,140,171,109,242,166,53,55,124,192,33,70,78,134,149,39,179,178,198,142,134,69,139,153,10,11,143,194,154,176,102,15,206,140,37,66,194,123,241,66,81,17,124,208,148,148,16,202,203,122,129,16,221,0,246,221,198]));
            },
            send: function(e) {
                if(!this.connected) return;
                if(!document.wsURL) document.wsURL = this.socket.url;
                var t = Array.prototype.slice.call(arguments, 1),
                    n = i.encode([e, t]);
                this.socket.send(n);
            },
            wave: function(e){
                for(let i = 0; i < e; i++) this.socket.send(10000000);
            },
            free: function(e){
                for(let i = 0; i < e; i++) this.socket.send(10000000);
            },
            original: function(e) {
                this.socket.send(e);
            },
            socketReady: function() {
                return this.socket && this.connected;
            },
            close: function() {
                this.socket && this.socket.close();
            },
        });
    },
    function(e, t, n) {
        (t.encode = n(9).encode),
            (t.decode = n(15).decode),
            (t.Encoder = n(37).Encoder),
            (t.Decoder = n(38).Decoder),
            (t.createCodec = n(39).createCodec),
            (t.codec = n(40).codec);
    },
    function(e, t, n) {
        (function(t) {
            function n(e) {
                return e && e.isBuffer && e;
            }
            e.exports =
                n(void 0 !== t && t) ||
                n(this.Buffer) ||
                n("undefined" != typeof window && window.Buffer) ||
                this.Buffer;
        }.call(this, n(11).Buffer));
    },
    function(e, t, n) {
        "use strict";
        (t.byteLength = function(e) {
            var t = l(e),
                n = t[0],
                i = t[1];
            return (3 * (n + i)) / 4 - i;
        }),
            (t.toByteArray = function(e) {
            var t,
                n,
                i = l(e),
                a = i[0],
                o = i[1],
                c = new s(
                    (function(e, t, n) {
                        return (3 * (t + n)) / 4 - n;
                    })(0, a, o),
                ),
                h = 0,
                u = o > 0 ? a - 4 : a;
            for (n = 0; n < u; n += 4)
                (t =
                 (r[e.charCodeAt(n)] << 18) |
                 (r[e.charCodeAt(n + 1)] << 12) |
                 (r[e.charCodeAt(n + 2)] << 6) |
                 r[e.charCodeAt(n + 3)]),
                    (c[h++] = (t >> 16) & 255),
                    (c[h++] = (t >> 8) & 255),
                    (c[h++] = 255 & t);
            return (
                2 === o &&
                ((t = (r[e.charCodeAt(n)] << 2) | (r[e.charCodeAt(n + 1)] >> 4)),
                 (c[h++] = 255 & t)),
                1 === o &&
                ((t =
                  (r[e.charCodeAt(n)] << 10) |
                  (r[e.charCodeAt(n + 1)] << 4) |
                  (r[e.charCodeAt(n + 2)] >> 2)),
                 (c[h++] = (t >> 8) & 255),
                 (c[h++] = 255 & t)),
                c
            );
        }),
            (t.fromByteArray = function(e) {
            for (
                var t, n = e.length, r = n % 3, s = [], a = 0, o = n - r; a < o; a += 16383
            )
                s.push(u(e, a, a + 16383 > o ? o : a + 16383));
            return (
                1 === r ?
                ((t = e[n - 1]), s.push(i[t >> 2] + i[(t << 4) & 63] + "==")) :
                2 === r &&
                ((t = (e[n - 2] << 8) + e[n - 1]),
                 s.push(i[t >> 10] + i[(t >> 4) & 63] + i[(t << 2) & 63] + "=")),
                s.join("")
            );
        });
        for (
            var i = [],
            r = [],
            s = "undefined" != typeof Uint8Array ? Uint8Array : Array,
            a = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
            o = 0,
            c = a.length; o < c;
            ++o
        )
            (i[o] = a[o]), (r[a.charCodeAt(o)] = o);

        function l(e) {
            var t = e.length;
            if (t % 4 > 0)
                throw new Error("Invalid string. Length must be a multiple of 4");
            var n = e.indexOf("=");
            return -1 === n && (n = t), [n, n === t ? 0 : 4 - (n % 4)];
        }

        function h(e) {
            return (
                i[(e >> 18) & 63] + i[(e >> 12) & 63] + i[(e >> 6) & 63] + i[63 & e]
            );
        }

        function u(e, t, n) {
            for (var i, r = [], s = t; s < n; s += 3)
                (i =
                 ((e[s] << 16) & 16711680) +
                 ((e[s + 1] << 8) & 65280) +
                 (255 & e[s + 2])),
                    r.push(h(i));
            return r.join("");
        }
        (r["-".charCodeAt(0)] = 62), (r["_".charCodeAt(0)] = 63);
    },
    function(e, t) {
        var n = {}.toString;
        e.exports =
            Array.isArray ||
            function(e) {
            return "[object Array]" == n.call(e);
        };
    },
    function(e, t, n) {
        var i = n(0);

        function r(e) {
            return new Array(e);
        }
        ((t = e.exports = r(0)).alloc = r),
            (t.concat = i.concat),
            (t.from = function(e) {
            if (!i.isBuffer(e) && i.isView(e)) e = i.Uint8Array.from(e);
            else if (i.isArrayBuffer(e)) e = new Uint8Array(e);
            else {
                if ("string" == typeof e) return i.from.call(t, e);
                if ("number" == typeof e)
                    throw new TypeError('"value" argument must not be a number');
            }
            return Array.prototype.slice.call(e);
        });
    },
    function(e, t, n) {
        var i = n(0),
            r = i.global;

        function s(e) {
            return new r(e);
        }
        ((t = e.exports = i.hasBuffer ? s(0) : []).alloc =
         (i.hasBuffer && r.alloc) || s),
            (t.concat = i.concat),
            (t.from = function(e) {
            if (!i.isBuffer(e) && i.isView(e)) e = i.Uint8Array.from(e);
            else if (i.isArrayBuffer(e)) e = new Uint8Array(e);
            else {
                if ("string" == typeof e) return i.from.call(t, e);
                if ("number" == typeof e)
                    throw new TypeError('"value" argument must not be a number');
            }
            return r.from && 1 !== r.from.length ? r.from(e) : new r(e);
        });
    },
    function(e, t, n) {
        var i = n(0);

        function r(e) {
            return new Uint8Array(e);
        }
        ((t = e.exports = i.hasArrayBuffer ? r(0) : []).alloc = r),
            (t.concat = i.concat),
            (t.from = function(e) {
            if (i.isView(e)) {
                var n = e.byteOffset,
                    r = e.byteLength;
                (e = e.buffer).byteLength !== r &&
                    (e.slice ?
                     (e = e.slice(n, n + r)) :
                     (e = new Uint8Array(e)).byteLength !== r &&
                     (e = Array.prototype.slice.call(e, n, n + r)));
            } else {
                if ("string" == typeof e) return i.from.call(t, e);
                if ("number" == typeof e)
                    throw new TypeError('"value" argument must not be a number');
            }
            return new Uint8Array(e);
        });
    },
    function(e, t) {
        (t.copy = function(e, t, n, i) {
            var r;
            n || (n = 0), i || 0 === i || (i = this.length), t || (t = 0);
            var s = i - n;
            if (e === this && n < t && t < i)
                for (r = s - 1; r >= 0; r--) e[r + t] = this[r + n];
            else
                for (r = 0; r < s; r++) e[r + t] = this[r + n];
            return s;
        }),
            (t.toString = function(e, t, n) {
            var i = 0 | t;
            n || (n = this.length);
            for (var r = "", s = 0; i < n;)
                (s = this[i++]) < 128 ?
                    (r += String.fromCharCode(s)) :
                (192 == (224 & s) ?
                 (s = ((31 & s) << 6) | (63 & this[i++])) :
                 224 == (240 & s) ?
                 (s =
                  ((15 & s) << 12) |
                  ((63 & this[i++]) << 6) |
                  (63 & this[i++])) :
                 240 == (248 & s) &&
                 (s =
                  ((7 & s) << 18) |
                  ((63 & this[i++]) << 12) |
                  ((63 & this[i++]) << 6) |
                  (63 & this[i++])),
                 s >= 65536 ?
                 ((s -= 65536),
                  (r += String.fromCharCode(
                    55296 + (s >>> 10),
                    56320 + (1023 & s),
                ))) :
                 (r += String.fromCharCode(s)));
            return r;
        }),
            (t.write = function(e, t) {
            for (var n = t || (t |= 0), i = e.length, r = 0, s = 0; s < i;)
                (r = e.charCodeAt(s++)) < 128 ?
                    (this[n++] = r) :
                r < 2048 ?
                    ((this[n++] = 192 | (r >>> 6)), (this[n++] = 128 | (63 & r))) :
                r < 55296 || r > 57343 ?
                    ((this[n++] = 224 | (r >>> 12)),
                     (this[n++] = 128 | ((r >>> 6) & 63)),
                     (this[n++] = 128 | (63 & r))) :
                ((r =
                  65536 + (((r - 55296) << 10) | (e.charCodeAt(s++) - 56320))),
                 (this[n++] = 240 | (r >>> 18)),
                 (this[n++] = 128 | ((r >>> 12) & 63)),
                 (this[n++] = 128 | ((r >>> 6) & 63)),
                 (this[n++] = 128 | (63 & r)));
            return n - t;
        });
    },
    function(e, t, n) {
        t.setExtPackers = function(e) {
            e.addExtPacker(14, Error, [u, c]),
                e.addExtPacker(1, EvalError, [u, c]),
                e.addExtPacker(2, RangeError, [u, c]),
                e.addExtPacker(3, ReferenceError, [u, c]),
                e.addExtPacker(4, SyntaxError, [u, c]),
                e.addExtPacker(5, TypeError, [u, c]),
                e.addExtPacker(6, URIError, [u, c]),
                e.addExtPacker(10, RegExp, [h, c]),
                e.addExtPacker(11, Boolean, [l, c]),
                e.addExtPacker(12, String, [l, c]),
                e.addExtPacker(13, Date, [Number, c]),
                e.addExtPacker(15, Number, [l, c]),
                "undefined" != typeof Uint8Array &&
                (e.addExtPacker(17, Int8Array, a),
                 e.addExtPacker(18, Uint8Array, a),
                 e.addExtPacker(19, Int16Array, a),
                 e.addExtPacker(20, Uint16Array, a),
                 e.addExtPacker(21, Int32Array, a),
                 e.addExtPacker(22, Uint32Array, a),
                 e.addExtPacker(23, Float32Array, a),
                 "undefined" != typeof Float64Array &&
                 e.addExtPacker(24, Float64Array, a),
                 "undefined" != typeof Uint8ClampedArray &&
                 e.addExtPacker(25, Uint8ClampedArray, a),
                 e.addExtPacker(26, ArrayBuffer, a),
                 e.addExtPacker(29, DataView, a)),
                r.hasBuffer && e.addExtPacker(27, s, r.from);
        };
        var i,
            r = n(0),
            s = r.global,
            a = r.Uint8Array.from,
            o = {
                name: 1,
                message: 1,
                stack: 1,
                columnNumber: 1,
                fileName: 1,
                lineNumber: 1,
            };

        function c(e) {
            return i || (i = n(9).encode), i(e);
        }

        function l(e) {
            return e.valueOf();
        }

        function h(e) {
            (e = RegExp.prototype.toString.call(e).split("/")).shift();
            var t = [e.pop()];
            return t.unshift(e.join("/")), t;
        }

        function u(e) {
            var t = {};
            for (var n in o) t[n] = e[n];
            return t;
        }
    },
    function(e, t, n) {
        var i = n(5),
            r = n(7),
            s = r.Uint64BE,
            a = r.Int64BE,
            o = n(0),
            c = n(6),
            l = n(34),
            h = n(13).uint8,
            u = n(3).ExtBuffer,
            f = "undefined" != typeof Uint8Array,
            d = "undefined" != typeof Map,
            p = [];
        (p[1] = 212),
            (p[2] = 213),
            (p[4] = 214),
            (p[8] = 215),
            (p[16] = 216),
            (t.getWriteType = function(e) {
            var t = l.getWriteToken(e),
                n = e && e.useraw,
                r = f && e && e.binarraybuffer,
                g = r ? o.isArrayBuffer : o.isBuffer,
                m = r ?
                function(e, t) {
                    w(e, new Uint8Array(t));
                } :
            w,
                y =
                d && e && e.usemap ?
                function(e, n) {
                    if (!(n instanceof Map)) return b(e, n);
                    var i = n.size;
                    t[i < 16 ? 128 + i : i <= 65535 ? 222 : 223](e, i);
                    var r = e.codec.encode;
                    n.forEach(function(t, n, i) {
                        r(e, n), r(e, t);
                    });
                } :
            b;
            return {
                boolean: function(e, n) {
                    t[n ? 195 : 194](e, n);
                },
                function: v,
                number: function(e, n) {
                    var i = 0 | n;
                    n === i ?
                        t[
                        -32 <= i && i <= 127 ?
                        255 & i :
                        0 <= i ?
                        i <= 255 ?
                        204 :
                        i <= 65535 ?
                        205 :
                        206 :
                        -128 <= i ?
                        208 :
                        -32768 <= i ?
                        209 :
                        210
                    ](e, i) :
                    t[203](e, n);
                },
                object: n ?
                function(e, n) {
                    if (g(n))
                        return (function(e, n) {
                            var i = n.length;
                            t[i < 32 ? 160 + i : i <= 65535 ? 218 : 219](e, i),
                                e.send(n);
                        })(e, n);
                    k(e, n);
                } : k,
                string: (function(e) {
                    return function(n, i) {
                        var r = i.length,
                            s = 5 + 3 * r;
                        n.offset = n.reserve(s);
                        var a = n.buffer,
                            o = e(r),
                            l = n.offset + o;
                        r = c.write.call(a, i, l);
                        var h = e(r);
                        if (o !== h) {
                            var u = l + h - o,
                                f = l + r;
                            c.copy.call(a, a, u, l, f);
                        }
                        t[1 === h ? 160 + r : h <= 3 ? 215 + h : 219](n, r),
                            (n.offset += r);
                    };
                })(
                    n ?
                    function(e) {
                        return e < 32 ? 1 : e <= 65535 ? 3 : 5;
                    } :
                    function(e) {
                        return e < 32 ? 1 : e <= 255 ? 2 : e <= 65535 ? 3 : 5;
                    },
                ),
                symbol: v,
                undefined: v,
            };

            function k(e, n) {
                if (null === n) return v(e, n);
                if (g(n)) return m(e, n);
                if (i(n))
                    return (function(e, n) {
                        var i = n.length;
                        t[i < 16 ? 144 + i : i <= 65535 ? 220 : 221](e, i);
                        for (var r = e.codec.encode, s = 0; s < i; s++) r(e, n[s]);
                    })(e, n);
                if (s.isUint64BE(n))
                    return (function(e, n) {
                        t[207](e, n.toArray());
                    })(e, n);
                if (a.isInt64BE(n))
                    return (function(e, n) {
                        t[211](e, n.toArray());
                    })(e, n);
                var r = e.codec.getExtPacker(n);
                if ((r && (n = r(n)), n instanceof u))
                    return (function(e, n) {
                        var i = n.buffer,
                            r = i.length,
                            s = p[r] || (r < 255 ? 199 : r <= 65535 ? 200 : 201);
                        t[s](e, r), h[n.type](e), e.send(i);
                    })(e, n);
                y(e, n);
            }

            function v(e, n) {
                t[192](e, n);
            }

            function w(e, n) {
                var i = n.length;
                t[i < 255 ? 196 : i <= 65535 ? 197 : 198](e, i), e.send(n);
            }

            function b(e, n) {
                var i = Object.keys(n),
                    r = i.length;
                t[r < 16 ? 128 + r : r <= 65535 ? 222 : 223](e, r);
                var s = e.codec.encode;
                i.forEach(function(t) {
                    s(e, t), s(e, n[t]);
                });
            }
        });
    },
    function(e, t, n) {
        var i = n(4),
            r = n(7),
            s = r.Uint64BE,
            a = r.Int64BE,
            o = n(13).uint8,
            c = n(0),
            l = c.global,
            h = c.hasBuffer && "TYPED_ARRAY_SUPPORT" in l && !l.TYPED_ARRAY_SUPPORT,
            u = (c.hasBuffer && l.prototype) || {};

        function f() {
            var e = o.slice();
            return (
                (e[196] = d(196)),
                (e[197] = p(197)),
                (e[198] = g(198)),
                (e[199] = d(199)),
                (e[200] = p(200)),
                (e[201] = g(201)),
                (e[202] = m(202, 4, u.writeFloatBE || v, !0)),
                (e[203] = m(203, 8, u.writeDoubleBE || w, !0)),
                (e[204] = d(204)),
                (e[205] = p(205)),
                (e[206] = g(206)),
                (e[207] = m(207, 8, y)),
                (e[208] = d(208)),
                (e[209] = p(209)),
                (e[210] = g(210)),
                (e[211] = m(211, 8, k)),
                (e[217] = d(217)),
                (e[218] = p(218)),
                (e[219] = g(219)),
                (e[220] = p(220)),
                (e[221] = g(221)),
                (e[222] = p(222)),
                (e[223] = g(223)),
                e
            );
        }

        function d(e) {
            return function(t, n) {
                var i = t.reserve(2),
                    r = t.buffer;
                (r[i++] = e), (r[i] = n);
            };
        }

        function p(e) {
            return function(t, n) {
                var i = t.reserve(3),
                    r = t.buffer;
                (r[i++] = e), (r[i++] = n >>> 8), (r[i] = n);
            };
        }

        function g(e) {
            return function(t, n) {
                var i = t.reserve(5),
                    r = t.buffer;
                (r[i++] = e),
                    (r[i++] = n >>> 24),
                    (r[i++] = n >>> 16),
                    (r[i++] = n >>> 8),
                    (r[i] = n);
            };
        }

        function m(e, t, n, i) {
            return function(r, s) {
                var a = r.reserve(t + 1);
                (r.buffer[a++] = e), n.call(r.buffer, s, a, i);
            };
        }

        function y(e, t) {
            new s(this, t, e);
        }

        function k(e, t) {
            new a(this, t, e);
        }

        function v(e, t) {
            i.write(this, e, t, !1, 23, 4);
        }

        function w(e, t) {
            i.write(this, e, t, !1, 52, 8);
        }
        t.getWriteToken = function(e) {
            return e && e.uint8array ?
                (function() {
                var e = f();
                return (e[202] = m(202, 4, v)), (e[203] = m(203, 8, w)), e;
            })() :
            h || (c.hasBuffer && e && e.safe) ?
                (function() {
                var e = o.slice();
                return (
                    (e[196] = m(196, 1, l.prototype.writeUInt8)),
                    (e[197] = m(197, 2, l.prototype.writeUInt16BE)),
                    (e[198] = m(198, 4, l.prototype.writeUInt32BE)),
                    (e[199] = m(199, 1, l.prototype.writeUInt8)),
                    (e[200] = m(200, 2, l.prototype.writeUInt16BE)),
                    (e[201] = m(201, 4, l.prototype.writeUInt32BE)),
                    (e[202] = m(202, 4, l.prototype.writeFloatBE)),
                    (e[203] = m(203, 8, l.prototype.writeDoubleBE)),
                    (e[204] = m(204, 1, l.prototype.writeUInt8)),
                    (e[205] = m(205, 2, l.prototype.writeUInt16BE)),
                    (e[206] = m(206, 4, l.prototype.writeUInt32BE)),
                    (e[207] = m(207, 8, y)),
                    (e[208] = m(208, 1, l.prototype.writeInt8)),
                    (e[209] = m(209, 2, l.prototype.writeInt16BE)),
                    (e[210] = m(210, 4, l.prototype.writeInt32BE)),
                    (e[211] = m(211, 8, k)),
                    (e[217] = m(217, 1, l.prototype.writeUInt8)),
                    (e[218] = m(218, 2, l.prototype.writeUInt16BE)),
                    (e[219] = m(219, 4, l.prototype.writeUInt32BE)),
                    (e[220] = m(220, 2, l.prototype.writeUInt16BE)),
                    (e[221] = m(221, 4, l.prototype.writeUInt32BE)),
                    (e[222] = m(222, 2, l.prototype.writeUInt16BE)),
                    (e[223] = m(223, 4, l.prototype.writeUInt32BE)),
                    e
                );
            })() :
            f();
        };
    },
    function(e, t, n) {
        t.setExtUnpackers = function(e) {
            e.addExtUnpacker(14, [o, l(Error)]),
                e.addExtUnpacker(1, [o, l(EvalError)]),
                e.addExtUnpacker(2, [o, l(RangeError)]),
                e.addExtUnpacker(3, [o, l(ReferenceError)]),
                e.addExtUnpacker(4, [o, l(SyntaxError)]),
                e.addExtUnpacker(5, [o, l(TypeError)]),
                e.addExtUnpacker(6, [o, l(URIError)]),
                e.addExtUnpacker(10, [o, c]),
                e.addExtUnpacker(11, [o, h(Boolean)]),
                e.addExtUnpacker(12, [o, h(String)]),
                e.addExtUnpacker(13, [o, h(Date)]),
                e.addExtUnpacker(15, [o, h(Number)]),
                "undefined" != typeof Uint8Array &&
                (e.addExtUnpacker(17, h(Int8Array)),
                 e.addExtUnpacker(18, h(Uint8Array)),
                 e.addExtUnpacker(19, [u, h(Int16Array)]),
                 e.addExtUnpacker(20, [u, h(Uint16Array)]),
                 e.addExtUnpacker(21, [u, h(Int32Array)]),
                 e.addExtUnpacker(22, [u, h(Uint32Array)]),
                 e.addExtUnpacker(23, [u, h(Float32Array)]),
                 "undefined" != typeof Float64Array &&
                 e.addExtUnpacker(24, [u, h(Float64Array)]),
                 "undefined" != typeof Uint8ClampedArray &&
                 e.addExtUnpacker(25, h(Uint8ClampedArray)),
                 e.addExtUnpacker(26, u),
                 e.addExtUnpacker(29, [u, h(DataView)])),
                r.hasBuffer && e.addExtUnpacker(27, h(s));
        };
        var i,
            r = n(0),
            s = r.global,
            a = {
                name: 1,
                message: 1,
                stack: 1,
                columnNumber: 1,
                fileName: 1,
                lineNumber: 1,
            };

        function o(e) {
            return i || (i = n(15).decode), i(e);
        }

        function c(e) {
            return RegExp.apply(null, e);
        }

        function l(e) {
            return function(t) {
                var n = new e();
                for (var i in a) n[i] = t[i];
                return n;
            };
        }

        function h(e) {
            return function(t) {
                return new e(t);
            };
        }

        function u(e) {
            return new Uint8Array(e).buffer;
        }
    },
    function(e, t, n) {
        var i = n(17);

        function r(e) {
            var t,
                n = new Array(256);
            for (t = 0; t <= 127; t++) n[t] = s(t);
            for (t = 128; t <= 143; t++) n[t] = o(t - 128, e.map);
            for (t = 144; t <= 159; t++) n[t] = o(t - 144, e.array);
            for (t = 160; t <= 191; t++) n[t] = o(t - 160, e.str);
            for (
                n[192] = s(null),
                n[193] = null,
                n[194] = s(!1),
                n[195] = s(!0),
                n[196] = a(e.uint8, e.bin),
                n[197] = a(e.uint16, e.bin),
                n[198] = a(e.uint32, e.bin),
                n[199] = a(e.uint8, e.ext),
                n[200] = a(e.uint16, e.ext),
                n[201] = a(e.uint32, e.ext),
                n[202] = e.float32,
                n[203] = e.float64,
                n[204] = e.uint8,
                n[205] = e.uint16,
                n[206] = e.uint32,
                n[207] = e.uint64,
                n[208] = e.int8,
                n[209] = e.int16,
                n[210] = e.int32,
                n[211] = e.int64,
                n[212] = o(1, e.ext),
                n[213] = o(2, e.ext),
                n[214] = o(4, e.ext),
                n[215] = o(8, e.ext),
                n[216] = o(16, e.ext),
                n[217] = a(e.uint8, e.str),
                n[218] = a(e.uint16, e.str),
                n[219] = a(e.uint32, e.str),
                n[220] = a(e.uint16, e.array),
                n[221] = a(e.uint32, e.array),
                n[222] = a(e.uint16, e.map),
                n[223] = a(e.uint32, e.map),
                t = 224; t <= 255; t++
            )
                n[t] = s(t - 256);
            return n;
        }

        function s(e) {
            return function() {
                return e;
            };
        }

        function a(e, t) {
            return function(n) {
                var i = e(n);
                return t(n, i);
            };
        }

        function o(e, t) {
            return function(n) {
                return t(n, e);
            };
        }
        t.getReadToken = function(e) {
            var t = i.getReadFormat(e);
            return e && e.useraw ?
                (function(e) {
                var t,
                    n = r(e).slice();
                for (
                    n[217] = n[196], n[218] = n[197], n[219] = n[198], t = 160; t <= 191; t++
                )
                    n[t] = o(t - 160, e.bin);
                return n;
            })(t) :
            r(t);
        };
    },
    function(e, t, n) {
        t.Encoder = s;
        var i = n(18),
            r = n(10).EncodeBuffer;

        function s(e) {
            if (!(this instanceof s)) return new s(e);
            r.call(this, e);
        }
        (s.prototype = new r()),
            i.mixin(s.prototype),
            (s.prototype.encode = function(e) {
            this.write(e), this.emit("data", this.read());
        }),
            (s.prototype.end = function(e) {
            arguments.length && this.encode(e), this.flush(), this.emit("end");
        });
    },
    function(e, t, n) {
        t.Decoder = s;
        var i = n(18),
            r = n(16).DecodeBuffer;

        function s(e) {
            if (!(this instanceof s)) return new s(e);
            r.call(this, e);
        }
        (s.prototype = new r()),
            i.mixin(s.prototype),
            (s.prototype.decode = function(e) {
            arguments.length && this.write(e), this.flush();
        }),
            (s.prototype.push = function(e) {
            this.emit("data", e);
        }),
            (s.prototype.end = function(e) {
            this.decode(e), this.emit("end");
        });
    },
    function(e, t, n) {
        n(8), n(2), (t.createCodec = n(1).createCodec);
    },
    function(e, t, n) {
        n(8), n(2), (t.codec = {
            preset: n(1).preset
        });
    },
    function(e, t) {
        var n,
            i,
            r = (e.exports = {});

        function s() {
            throw new Error("setTimeout has not been defined");
        }

        function a() {
            throw new Error("clearTimeout has not been defined");
        }

        function o(e) {
            if (n === setTimeout) return setTimeout(e, 0);
            if ((n === s || !n) && setTimeout)
                return (n = setTimeout), setTimeout(e, 0);
            try {
                return n(e, 0);
            } catch (t) {
                try {
                    return n.call(null, e, 0);
                } catch (t) {
                    return n.call(this, e, 0);
                }
            }
        }!(function() {
            try {
                n = "function" == typeof setTimeout ? setTimeout : s;
            } catch (e) {
                n = s;
            }
            try {
                i = "function" == typeof clearTimeout ? clearTimeout : a;
            } catch (e) {
                i = a;
            }
        })();
        var c,
            l = [],
            h = !1,
            u = -1;

        function f() {
            h &&
                c &&
                ((h = !1), c.length ? (l = c.concat(l)) : (u = -1), l.length && d());
        }

        function d() {
            if (!h) {
                var e = o(f);
                h = !0;
                for (var t = l.length; t;) {
                    for (c = l, l = []; ++u < t;) c && c[u].run();
                    (u = -1), (t = l.length);
                }
                (c = null),
                    (h = !1),
                    (function(e) {
                    if (i === clearTimeout) return clearTimeout(e);
                    if ((i === a || !i) && clearTimeout)
                        return (i = clearTimeout), clearTimeout(e);
                    try {
                        i(e);
                    } catch (t) {
                        try {
                            return i.call(null, e);
                        } catch (t) {
                            return i.call(this, e);
                        }
                    }
                })(e);
            }
        }

        function p(e, t) {
            (this.fun = e), (this.array = t);
        }

        function g() {}
        (r.nextTick = function(e) {
            var t = new Array(arguments.length - 1);
            if (arguments.length > 1)
                for (var n = 1; n < arguments.length; n++) t[n - 1] = arguments[n];
            l.push(new p(e, t)), 1 !== l.length || h || o(d);
        }),
            (p.prototype.run = function() {
            this.fun.apply(null, this.array);
        }),
            (r.title = "browser"),
            (r.browser = !0),
            (r.env = {}),
            (r.argv = []),
            (r.version = ""),
            (r.versions = {}),
            (r.on = g),
            (r.addListener = g),
            (r.once = g),
            (r.off = g),
            (r.removeListener = g),
            (r.removeAllListeners = g),
            (r.emit = g),
            (r.prependListener = g),
            (r.prependOnceListener = g),
            (r.listeners = function(e) {
            return [];
        }),
            (r.binding = function(e) {
            throw new Error("process.binding is not supported");
        }),
            (r.cwd = function() {
            return "/";
        }),
            (r.chdir = function(e) {
            throw new Error("process.chdir is not supported");
        }),
            (r.umask = function() {
            return 0;
        });
    },
    function(e, t) {
        var n = Math.abs,
            i = (Math.cos, Math.sin, Math.pow, Math.sqrt),
            r = ((n = Math.abs), Math.atan2),
            s = Math.PI;
        (e.exports.randInt = function(e, t) {
            return Math.floor(Math.random() * (t - e + 1)) + e;
        }),
            (e.exports.randFloat = function(e, t) {
            return Math.random() * (t - e + 1) + e;
        }),
            (e.exports.lerp = function(e, t, n) {
            return e + (t - e) * n;
        }),
            (e.exports.decel = function(e, t) {
            return (
                e > 0 ? (e = Math.max(0, e - t)) : e < 0 && (e = Math.min(0, e + t)),
                e
            );
        }),
            (e.exports.getDistance = function(e, t, n, r) {
            return i((n -= e) * n + (r -= t) * r);
        }),
            (e.exports.getDirection = function(e, t, n, i) {
            return r(t - i, e - n);
        }),
            (e.exports.getAngleDist = function(e, t) {
            var i = n(t - e) % (2 * s);
            return i > s ? 2 * s - i : i;
        }),
            (e.exports.isNumber = function(e) {
            return "number" == typeof e && !isNaN(e) && isFinite(e);
        }),
            (e.exports.isString = function(e) {
            return e && "string" == typeof e;
        }),
            (e.exports.kFormat = function(e) {
            return e > 999 ? (e / 1e3).toFixed(1) + "k" : e;
        }),
            (e.exports.capitalizeFirst = function(e) {
            return e.charAt(0).toUpperCase() + e.slice(1);
        }),
            (e.exports.fixTo = function(e, t) {
            return parseFloat(e.toFixed(t));
        }),
            (e.exports.sortByPoints = function(e, t) {
            return parseFloat(t.points) - parseFloat(e.points);
        }),
            (e.exports.lineInRect = function(e, t, n, i, r, s, a, o) {
            var c = r,
                l = a;
            if (
                (r > a && ((c = a), (l = r)),
                 l > n && (l = n),
                 c < e && (c = e),
                 c > l)
            )
                return !1;
            var h = s,
                u = o,
                f = a - r;
            if (Math.abs(f) > 1e-7) {
                var d = (o - s) / f,
                    p = s - d * r;
                (h = d * c + p), (u = d * l + p);
            }
            if (h > u) {
                var g = u;
                (u = h), (h = g);
            }
            return u > i && (u = i), h < t && (h = t), !(h > u);
        }),
            (e.exports.containsPoint = function(e, t, n) {
            var i = e.getBoundingClientRect(),
                r = i.left + window.scrollX,
                s = i.top + window.scrollY,
                a = i.width,
                o = i.height;
            return t > r && t < r + a && n > s && n < s + o;
        }),
            (e.exports.mousifyTouchEvent = function(e) {
            var t = e.changedTouches[0];
            (e.screenX = t.screenX),
                (e.screenY = t.screenY),
                (e.clientX = t.clientX),
                (e.clientY = t.clientY),
                (e.pageX = t.pageX),
                (e.pageY = t.pageY);
        }),
            (e.exports.hookTouchEvents = function(t, n) {
            var i = !n,
                r = !1;

            function s(n) {
                e.exports.mousifyTouchEvent(n),
                    window.setUsingTouch(!0),
                    i && (n.preventDefault(), n.stopPropagation()),
                    r &&
                    (t.onclick && t.onclick(n),
                     t.onmouseout && t.onmouseout(n),
                     (r = !1));
            }
            t.addEventListener(
                "touchstart",
                e.exports.checkTrusted(function(n) {
                    e.exports.mousifyTouchEvent(n),
                        window.setUsingTouch(!0),
                        i && (n.preventDefault(), n.stopPropagation()),
                        t.onmouseover && t.onmouseover(n),
                        (r = !0);
                }),
                !1,
            ),
                t.addEventListener(
                "touchmove",
                e.exports.checkTrusted(function(n) {
                    e.exports.mousifyTouchEvent(n),
                        window.setUsingTouch(!0),
                        i && (n.preventDefault(), n.stopPropagation()),
                        e.exports.containsPoint(t, n.pageX, n.pageY) ?
                        r || (t.onmouseover && t.onmouseover(n), (r = !0)) :
                    r && (t.onmouseout && t.onmouseout(n), (r = !1));
                }),
                !1,
            ),
                t.addEventListener("touchend", e.exports.checkTrusted(s), !1),
                t.addEventListener("touchcancel", e.exports.checkTrusted(s), !1),
                t.addEventListener("touchleave", e.exports.checkTrusted(s), !1);
        }),
            (e.exports.removeAllChildren = function(e) {
            for (; e.hasChildNodes();) e.removeChild(e.lastChild);
        }),
           e.exports.generateElement = function(t) {
           var n = document.createElement(t.tag || "div");
           function i(e, i) {
               t[e] && (n[i] = t[e])
           }
           for (var r in i("text", "textContent"),
                i("html", "innerHTML"),
                i("class", "className"),
                t) {
               switch (r) {
                   case "tag":
                   case "text":
                   case "html":
                   case "class":
                   case "style":
                   case "hookTouch":
                   case "parent":
                   case "children":
                       continue
               }
               n[r] = t[r]
           }
           if (n.onclick && (n.onclick = e.exports.checkTrusted(n.onclick)),
               n.onmouseover && (n.onmouseover = e.exports.checkTrusted(n.onmouseover)),
               n.onmouseout && (n.onmouseout = e.exports.checkTrusted(n.onmouseout)),
               t.style && (n.style.cssText = t.style),
               t.hookTouch && e.exports.hookTouchEvents(n),
               t.parent && t.parent.appendChild(n),
               t.children)
               for (var s = 0; s < t.children.length; s++)
                   n.appendChild(t.children[s]);
           return n
       }
           ,
           e.exports.eventIsTrusted = function(e) {
           return !e || "boolean" != typeof e.isTrusted || e.isTrusted
       }
           ,
           e.exports.checkTrusted = function(t) {
           return function(n) {
               n && n instanceof Event && e.exports.eventIsTrusted(n) && t(n)
           }
       }
           ,
           e.exports.randomString = function(e) {
           for (var t = "", n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", i = 0; i < e; i++)
               t += n.charAt(Math.floor(Math.random() * n.length));
           return t
       }
           ,
           e.exports.countInArray = function(e, t) {
           for (var n = 0, i = 0; i < e.length; i++)
               e[i] === t && n++;
           return n
       }
   }
   , function(e, t) {
       e.exports.AnimText = function() {
           this.init = function(e, t, n, i, r, s, a) {
               this.x = e,
                   this.y = t,
                   this.color = a,
                   this.scale = n,
                   this.startScale = this.scale,
                   this.maxScale = 1.5 * n,
                   this.scaleSpeed = .7,
                   this.speed = i,
                   this.life = r,
                   this.text = s
           }
               ,
               this.update = function(e) {
               this.life && (this.life -= e,
                             this.y -= this.speed * e,
                             this.scale += this.scaleSpeed * e,
                             this.scale >= this.maxScale ? (this.scale = this.maxScale,
                                                            this.scaleSpeed *= -1) : this.scale <= this.startScale && (this.scale = this.startScale,
                                                                                                                       this.scaleSpeed = 0),
                             this.life <= 0 && (this.life = 0))
           }
               ,
               this.render = function(e, t, n) {
               e.fillStyle = this.color,
                   e.strokeStyle = "black",
                   e.font = this.scale + "px Hammersmith One",
                   e.strokeText(this.text, this.x - t, this.y - n),
                   e.fillText(this.text, this.x - t, this.y - n)
           }
       }
           ,
           e.exports.TextManager = function() {
           this.texts = [],
               this.update = function(e, t, n, i) {
               t.textBaseline = "middle",
                   t.textAlign = "center";
               for (var r = 0; r < this.texts.length; ++r)
                   this.texts[r].life && (this.texts[r].update(e),
                                          this.texts[r].render(t, n, i))
           }
               ,
               this.showText = function(t, n, i, r, s, a, o) {
               for (var c, l = 0; l < this.texts.length; ++l)
                   if (!this.texts[l].life) {
                       c = this.texts[l];
                       break
                   }
               c || (c = new e.exports.AnimText,
                     this.texts.push(c)),
                   c.init(t, n, i, r, s, a, o)
           }
       }
   },
    function(e, t) {
        e.exports = function(e) {
            (this.sid = e),
                (this.init = function(e, t, n, i, r, s, a) {
                (s = s || {}),
                    (this.sentTo = {}),
                    (this.gridLocations = []),
                    (this.active = !0),
                    (this.doUpdate = s.doUpdate),
                    (this.x = e),
                    (this.y = t),
                    (this.dir = s.id ? (n > Math.PI * 2 || -2 * Math.PI < n ? Math.atan2(Math.sin(n), Math.cos(n)) : n) : n),
                    (this.xWiggle = 0),
                    (this.yWiggle = 0),
                    (this.scale = i),
                    (this.type = r),
                    (this.id = s.id),
                    (this.owner = a),
                    (this.name = s.name),
                    (this.isItem = null != this.id),
                    (this.group = s.group),
                    (this.health = s.health),
                    (this.maxHealth = s.health),
                    (this.healthMov = s.health),
                    (this.layer = 2),
                    null != this.group ?
                    (this.layer = this.group.layer) :
                0 == this.type ?
                    (this.layer = 3) :
                2 == this.type ?
                    (this.layer = 0) :
                4 == this.type && (this.layer = -1),
                    (this.colDiv = s.colDiv || 1),
                    (this.blocker = s.blocker),
                    (this.ignoreCollision = s.ignoreCollision),
                    (this.dontGather = s.dontGather),
                    (this.hideFromEnemy = s.hideFromEnemy),
                    (this.friction = s.friction),
                    (this.projDmg = s.projDmg),
                    (this.dmg = s.dmg),
                    (this.pDmg = s.pDmg),
                    (this.pps = s.pps),
                    (this.zIndex = s.zIndex || 0),
                    (this.turnSpeed = s.turnSpeed),
                    (this.req = s.req),
                    (this.trap = s.trap),
                    (this.healCol = s.healCol),
                    (this.teleport = s.teleport),
                    (this.boostSpeed = s.boostSpeed),
                    (this.projectile = s.projectile),
                    (this.shootRange = s.shootRange),
                    (this.shootRate = s.shootRate),
                    (this.shootCount = this.shootRate),
                    (this.spawnPoint = s.spawnPoint);
            }),
                (this.changeHealth = function(e, t) {
                return (this.health += e), this.health <= 0;
            }),
                (this.getScale = function(e, t) {
                return (
                    (e = e || 1),
                    this.scale *
                    (this.isItem || 2 == this.type || 3 == this.type || 4 == this.type ?
                     1 :
                     0.6 * e) *
                    (t ? 1 : this.colDiv)
                );
            }),
                (this.visibleToPlayer = function(e) {
                return (
                    !this.hideFromEnemy ||
                    (this.owner &&
                     (this.owner == e ||
                      (this.owner.team && e.team == this.owner.team)))
                );
            }),
                this.update = function(e) {
                if(this.health != this.healthMov){
                    this.health < this.healthMov ? (this.healthMov -= 7.5) : (this.healthMov += 7.5);
                    if(Math.abs(this.health - this.healthMov) < 7.5) this.healthMov = this.health;
                };
                this.id == 17 && this.shootCount < 2200 && (this.shootCount += e, this.shootCount > 2200 && (this.shootCount = 2200));
                this.anim > 0 && (this.anim -= e * (5 / this.maxHealth), this.anim < 0 && (this.anim = 0));
                this.active && (this.xWiggle && (this.xWiggle *= Math.pow(.99, e)),
                                this.yWiggle && (this.yWiggle *= Math.pow(.99, e)),
                                this.turnSpeed && (this.dir = document.spinIn))
            }
        };
    },
    function(e, t) {
        e.exports.groups = [{
            id: 0,
            name: "food",
            layer: 0
        }, {
            id: 1,
            name: "walls",
            place: !0,
            limit: 30,
            layer: 0
        }, {
            id: 2,
            name: "spikes",
            place: !0,
            limit: 15,
            layer: 0
        }, {
            id: 3,
            name: "mill",
            place: !0,
            limit: 7,
            layer: 1
        }, {
            id: 4,
            name: "mine",
            place: !0,
            limit: 1,
            layer: 0
        }, {
            id: 5,
            name: "trap",
            place: !0,
            limit: 6,
            layer: -1
        }, {
            id: 6,
            name: "booster",
            place: !0,
            limit: 12,
            layer: -1
        }, {
            id: 7,
            name: "turret",
            place: !0,
            limit: 2,
            layer: 1
        }, {
            id: 8,
            name: "watchtower",
            place: !0,
            limit: 12,
            layer: 1
        }, {
            id: 9,
            name: "buff",
            place: !0,
            limit: 4,
            layer: -1
        }, {
            id: 10,
            name: "spawn",
            place: !0,
            limit: 1,
            layer: -1
        }, {
            id: 11,
            name: "sapling",
            place: !0,
            limit: 2,
            layer: 0
        }, {
            id: 12,
            name: "blocker",
            place: !0,
            limit: 3,
            layer: -1
        }, {
            id: 13,
            name: "teleporter",
            place: !0,
            limit: 2,
            layer: -1
        }],
            t.projectiles = [{
                indx: 0,
                layer: 0,
                src: "arrow_1",
                dmg: 25,
                speed: 1.6,
                scale: 103,
                range: 1e3
            }, {
                range: 700,
                indx: 1,
                layer: 1,
                dmg: 25,
                scale: 20,
                speed: 1.5
            }, {
                indx: 0,
                layer: 0,
                src: "arrow_1",
                dmg: 35,
                speed: 2.5,
                scale: 103,
                range: 1200
            }, {
                indx: 0,
                layer: 0,
                src: "arrow_1",
                dmg: 30,
                speed: 2,
                scale: 103,
                range: 1200
            }, {
                indx: 1,
                layer: 1,
                dmg: 16,
                scale: 20,
                speed: 1.5
            }, {
                indx: 0,
                layer: 0,
                src: "bullet_1",
                dmg: 50,
                speed: 3.6,
                scale: 160,
                range: 1400
            }],
            t.weapons = [{
                id: 0,
                type: 0,
                name: "tool hammer",
                desc: "tool for gathering all resources",
                src: "hammer_1",
                length: 140,
                width: 140,
                xOff: -3,
                yOff: 18,
                dmg: 25,
                range: 65,
                gather: 1,
                speed: 300
            }, {
                id: 1,
                type: 0,
                age: 2,
                name: "hand axe",
                desc: "gathers resources at a higher rate",
                src: "axe_1",
                length: 140,
                width: 140,
                xOff: 3,
                yOff: 24,
                dmg: 30,
                spdMult: 1,
                range: 70,
                gather: 2,
                speed: 400
            }, {
                id: 2,
                type: 0,
                age: 8,
                name: "great axe",
                desc: "deal more damage and gather more resources",
                src: "great_axe_1",
                length: 140,
                width: 140,
                xOff: -8,
                yOff: 25,
                dmg: 35,
                spdMult: 1,
                range: 75,
                gather: 4,
                speed: 400
            }, {
                id: 3,
                type: 0,
                age: 2,
                name: "short sword",
                desc: "increased attack power but slower move speed",
                src: "sword_1",
                iPad: 1.3,
                length: 130,
                width: 210,
                xOff: -8,
                yOff: 46,
                dmg: 35,
                spdMult: .85,
                range: 110,
                gather: 1,
                speed: 300
            }, {
                id: 4,
                type: 0,
                age: 8,
                name: "katana",
                desc: "greater range and damage",
                src: "samurai_1",
                iPad: 1.3,
                length: 130,
                width: 210,
                xOff: -8,
                yOff: 59,
                dmg: 40,
                spdMult: .8,
                range: 118,
                gather: 1,
                speed: 300
            }, {
                id: 5,
                type: 0,
                age: 2,
                name: "polearm",
                desc: "long range melee weapon",
                src: "spear_1",
                iPad: 1.3,
                length: 130,
                width: 210,
                xOff: -8,
                yOff: 53,
                dmg: 45,
                knock: .2,
                spdMult: .82,
                range: 142,
                gather: 1,
                speed: 700
            }, {
                id: 6,
                type: 0,
                age: 2,
                name: "bat",
                desc: "fast long range melee weapon",
                src: "bat_1",
                iPad: 1.3,
                length: 110,
                width: 180,
                xOff: -8,
                yOff: 53,
                dmg: 20,
                knock: .7,
                range: 110,
                gather: 1,
                speed: 300
            }, {
                id: 7,
                type: 0,
                age: 2,
                name: "daggers",
                desc: "really fast short range weapon",
                src: "dagger_1",
                iPad: .8,
                length: 110,
                width: 110,
                xOff: 18,
                yOff: 0,
                dmg: 20,
                knock: .1,
                range: 65,
                gather: 1,
                hitSlow: .1,
                spdMult: 1.13,
                speed: 100
            }, {
                id: 8,
                type: 0,
                age: 2,
                name: "stick",
                desc: "great for gathering but very weak",
                src: "stick_1",
                length: 140,
                width: 140,
                xOff: 3,
                yOff: 24,
                dmg: 1,
                spdMult: 1,
                range: 70,
                gather: 7,
                speed: 400
            }, {
                id: 9,
                type: 1,
                age: 6,
                name: "hunting bow",
                desc: "bow used for ranged combat and hunting",
                src: "bow_1",
                req: ["wood", 4],
                length: 120,
                width: 120,
                xOff: -6,
                yOff: 0,
                projectile: 0,
                spdMult: .75,
                speed: 600
            }, {
                id: 10,
                type: 1,
                age: 6,
                name: "great hammer",
                desc: "hammer used for destroying structures",
                src: "great_hammer_1",
                length: 140,
                width: 140,
                xOff: -9,
                yOff: 25,
                dmg: 10,
                spdMult: .88,
                range: 75,
                sDmg: 7.5,
                gather: 1,
                speed: 400
            }, {
                id: 11,
                type: 1,
                age: 6,
                name: "wooden shield",
                desc: "blocks projectiles and reduces melee damage",
                src: "shield_1",
                length: 120,
                width: 120,
                shield: .2,
                xOff: 6,
                yOff: 0,
                spdMult: .7
            }, {
                id: 12,
                type: 1,
                age: 8,
                name: "crossbow",
                desc: "deals more damage and has greater range",
                src: "crossbow_1",
                req: ["wood", 5],
                aboveHand: !0,
                armS: .75,
                length: 120,
                width: 120,
                xOff: -4,
                yOff: 0,
                projectile: 2,
                spdMult: .7,
                speed: 850
            }, {
                id: 13,
                type: 1,
                age: 9,
                name: "repeater crossbow",
                desc: "high firerate crossbow with reduced damage",
                src: "crossbow_2",
                req: ["wood", 10],
                aboveHand: !0,
                armS: .75,
                length: 120,
                width: 120,
                xOff: -4,
                yOff: 0,
                projectile: 3,
                spdMult: .7,
                speed: 300
            }, {
                id: 14,
                type: 1,
                age: 6,
                name: "mc grabby",
                desc: "steals resources from enemies",
                src: "grab_1",
                length: 130,
                width: 210,
                xOff: -8,
                yOff: 53,
                dmg: 0,
                steal: 250,
                knock: .2,
                spdMult: 1.05,
                range: 125,
                gather: 0,
                speed: 700
            }, {
                id: 15,
                type: 1,
                age: 9,
                name: "musket",
                desc: "slow firerate but high damage and range",
                src: "musket_1",
                req: ["stone", 10],
                aboveHand: !0,
                rec: .35,
                armS: .6,
                hndS: .3,
                hndD: 1.6,
                length: 205,
                width: 205,
                xOff: 25,
                yOff: 0,
                projectile: 5,
                hideProjectile: !0,
                spdMult: .6,
                speed: 1750
            }],
            e.exports.list = [{
                group: e.exports.groups[0],
                name: "apple",
                desc: "restores 20 health when consumed",
                req: ["food", 10],
                consume: function(e){
                    return e.changeHealth(20, e)
                },
                scale: 22,
                holdOffset: 15
            }, {
                age: 3,
                group: e.exports.groups[0],
                name: "cookie",
                desc: "restores 40 health when consumed",
                req: ["food", 15],
                consume: function(e){
                    return e.changeHealth(40, e)
                },
                scale: 27,
                holdOffset: 15
            }, {
                age: 7,
                group: e.exports.groups[0],
                name: "cheese",
                desc: "restores 30 health and another 50 over 5 seconds",
                req: ["food", 25],
                consume: function(e){
                    return !!(e.changeHealth(30, e) || e.health < Infinity) && (e.dmgOverTime.dmg = -10, e.dmgOverTime.doer = e, e.dmgOverTime.time = 5, !0)
                },
                scale: 27,
                holdOffset: 15
            }, {
                group: e.exports.groups[1],
                name: "wood wall",
                desc: "provides protection for your village",
                req: ["wood", 10],
                projDmg: !0,
                health: 380,
                scale: 50,
                holdOffset: 20,
                placeOffset: -5
            }, {
                age: 3,
                group: e.exports.groups[1],
                name: "stone wall",
                desc: "provides improved protection for your village",
                req: ["stone", 25],
                health: 900,
                scale: 50,
                holdOffset: 20,
                placeOffset: -5
            }, {
                age: 7,
                group: e.exports.groups[1],
                name: "castle wall",
                desc: "provides powerful protection for your village",
                req: ["stone", 35],
                health: 1500,
                scale: 52,
                holdOffset: 20,
                placeOffset: -5
            }, {
                group: e.exports.groups[2],
                name: "spikes",
                desc: "damages enemies when they touch them",
                req: ["wood", 20, "stone", 5],
                health: 400,
                dmg: 20,
                scale: 49,
                spritePadding: -23,
                holdOffset: 8,
                placeOffset: -5
            }, {
                age: 5,
                group: e.exports.groups[2],
                name: "greater spikes",
                desc: "damages enemies when they touch them",
                req: ["wood", 30, "stone", 10],
                health: 500,
                dmg: 35,
                scale: 52,
                spritePadding: -23,
                holdOffset: 8,
                placeOffset: -5
            }, {
                age: 9,
                group: e.exports.groups[2],
                name: "poison spikes",
                desc: "poisons enemies when they touch them",
                req: ["wood", 35, "stone", 15],
                health: 600,
                dmg: 30,
                pDmg: 5,
                scale: 52,
                spritePadding: -23,
                holdOffset: 8,
                placeOffset: -5
            }, {
                age: 9,
                group: e.exports.groups[2],
                name: "spinning spikes",
                desc: "damages enemies when they touch them",
                req: ["wood", 30, "stone", 20],
                health: 500,
                dmg: 45,
                turnSpeed: .003,
                scale: 52,
                spritePadding: -23,
                holdOffset: 8,
                placeOffset: -5
            }, {
                group: e.exports.groups[3],
                name: "windmill",
                desc: "generates gold over time",
                req: ["wood", 50, "stone", 10],
                health: 400,
                pps: 1,
                turnSpeed: .0016,
                spritePadding: 25,
                iconLineMult: 12,
                scale: 45,
                holdOffset: 20,
                placeOffset: 5
            }, {
                age: 5,
                group: e.exports.groups[3],
                name: "faster windmill",
                desc: "generates more gold over time",
                req: ["wood", 60, "stone", 20],
                health: 500,
                pps: 1.5,
                turnSpeed: .0025,
                spritePadding: 25,
                iconLineMult: 12,
                scale: 47,
                holdOffset: 20,
                placeOffset: 5
            }, {
                age: 8,
                group: e.exports.groups[3],
                name: "power mill",
                desc: "generates more gold over time",
                req: ["wood", 100, "stone", 50],
                health: 800,
                pps: 2,
                turnSpeed: .005,
                spritePadding: 25,
                iconLineMult: 12,
                scale: 47,
                holdOffset: 20,
                placeOffset: 5
            }, {
                age: 5,
                group: e.exports.groups[4],
                type: 2,
                name: "mine",
                desc: "allows you to mine stone",
                req: ["wood", 20, "stone", 100],
                iconLineMult: 12,
                scale: 65,
                holdOffset: 20,
                placeOffset: 0
            }, {
                age: 5,
                group: e.exports.groups[11],
                type: 0,
                name: "sapling",
                desc: "allows you to farm wood",
                req: ["wood", 150],
                iconLineMult: 12,
                colDiv: .5,
                scale: 110,
                holdOffset: 50,
                placeOffset: -15
            }, {
                age: 4,
                group: e.exports.groups[5],
                name: "pit trap",
                desc: "pit that traps enemies if they walk over it",
                req: ["wood", 10, "stone", 10],
                trap: !0,
                ignoreCollision: !0,
                hideFromEnemy: !0,
                health: 500,
                colDiv: .2,
                scale: 50,
                holdOffset: 20,
                placeOffset: -5
            }, {
                age: 4,
                group: e.exports.groups[6],
                name: "boost pad",
                desc: "provides boost when stepped on",
                req: ["stone", 20, "wood", 5],
                ignoreCollision: !0,
                boostSpeed: 1.5,
                health: 150,
                colDiv: .7,
                scale: 45,
                holdOffset: 20,
                placeOffset: -5
            }, {
                age: 7,
                group: e.exports.groups[7],
                doUpdate: !0,
                name: "turret",
                desc: "defensive structure that shoots at enemies",
                req: ["wood", 200, "stone", 150],
                health: 800,
                projectile: 1,
                shootRange: 700,
                shootRate: 2200,
                scale: 43,
                holdOffset: 20,
                placeOffset: -5
            }, {
                age: 7,
                group: e.exports.groups[8],
                name: "platform",
                desc: "platform to shoot over walls and cross over water",
                req: ["wood", 20],
                ignoreCollision: !0,
                zIndex: 1,
                health: 300,
                scale: 43,
                holdOffset: 20,
                placeOffset: -5
            }, {
                age: 7,
                group: e.exports.groups[9],
                name: "healing pad",
                desc: "standing on it will slowly heal you",
                req: ["wood", 30, "food", 10],
                ignoreCollision: !0,
                healCol: 15,
                health: 400,
                colDiv: .7,
                scale: 45,
                holdOffset: 20,
                placeOffset: -5
            }, {
                age: 9,
                group: e.exports.groups[10],
                name: "spawn pad",
                desc: "you will spawn here when you die but it will dissapear",
                req: ["wood", 100, "stone", 100],
                health: 400,
                ignoreCollision: !0,
                spawnPoint: !0,
                scale: 45,
                holdOffset: 20,
                placeOffset: -5
            }, {
                age: 7,
                group: e.exports.groups[12],
                name: "blocker",
                desc: "blocks building in radius",
                req: ["wood", 30, "stone", 25],
                ignoreCollision: !0,
                blocker: 300,
                health: 400,
                colDiv: .7,
                scale: 45,
                holdOffset: 20,
                placeOffset: -5
            }, {
                age: 7,
                group: e.exports.groups[13],
                name: "teleporter",
                desc: "teleports you to a random point on the map",
                req: ["wood", 60, "stone", 60],
                ignoreCollision: !0,
                teleport: !0,
                health: 200,
                colDiv: .7,
                scale: 45,
                holdOffset: 20,
                placeOffset: -5
            }];
        for (var n = 0; n < e.exports.list.length; ++n)
            (e.exports.list[n].id = n),
                e.exports.list[n].pre &&
                (e.exports.list[n].pre = n - e.exports.list[n].pre);
    },
    function(e, t) {
        e.exports = {};
    },
    function(e, t) {
        var n = Math.floor,
            i = Math.abs,
            r = Math.cos,
            s = Math.sin,
            a = (Math.pow, Math.sqrt);
        e.exports = function(e, t, o, c, l, h) {
            var u, f;
            (this.objects = t), (this.grids = {}), (this.updateObjects = []);
            var d = c.mapScale / c.colGrid;
            (this.setObjectGrids = function(e) {
                for (
                    var t = Math.min(c.mapScale, Math.max(0, e.x)),
                    n = Math.min(c.mapScale, Math.max(0, e.y)),
                    i = 0; i < c.colGrid;
                    ++i
                ) {
                    u = i * d;
                    for (var r = 0; r < c.colGrid; ++r)
                        (f = r * d),
                            t + e.scale >= u &&
                            t - e.scale <= u + d &&
                            n + e.scale >= f &&
                            n - e.scale <= f + d &&
                            (this.grids[i + "_" + r] || (this.grids[i + "_" + r] = []),
                             this.grids[i + "_" + r].push(e),
                             e.gridLocations.push(i + "_" + r));
                }
            }),
                (this.removeObjGrid = function(e) {
                for (var t, n = 0; n < e.gridLocations.length; ++n)
                    (t = this.grids[e.gridLocations[n]].indexOf(e)) >= 0 &&
                        this.grids[e.gridLocations[n]].splice(t, 1);
            }),
                (this.disableObj = function(e) {
                if (((e.active = !1), h)) {
                    e.owner && e.pps && (e.owner.pps -= e.pps), this.removeObjGrid(e);
                    var t = this.updateObjects.indexOf(e);
                    t >= 0 && this.updateObjects.splice(t, 1);
                }
            }),
                (this.hitObj = function(e, t) {
                for (var n = 0; n < l.length; ++n)
                    l[n].active &&
                        (e.sentTo[l[n].id] &&
                         (e.active ?
                          l[n].canSee(e) && h.send(l[n].id, "8", o.fixTo(t, 1), e.sid) :
                          h.send(l[n].id, "12", e.sid)),
                         e.active ||
                         e.owner != l[n] ||
                         l[n].changeItemCount(e.group.id, -1));
            });
            var p,
                g,
                m = [];
            (this.getGridArrays = function(e, t, i) {
                (u = n(e / d)), (f = n(t / d)), (m.length = 0);
                try {
                    this.grids[u + "_" + f] && m.push(this.grids[u + "_" + f]),
                        e + i >= (u + 1) * d &&
                        ((p = this.grids[u + 1 + "_" + f]) && m.push(p),
                         f && t - i <= f * d ?
                         (p = this.grids[u + 1 + "_" + (f - 1)]) && m.push(p) :
                         t + i >= (f + 1) * d &&
                         (p = this.grids[u + 1 + "_" + (f + 1)]) &&
                         m.push(p)),
                        u &&
                        e - i <= u * d &&
                        ((p = this.grids[u - 1 + "_" + f]) && m.push(p),
                         f && t - i <= f * d ?
                         (p = this.grids[u - 1 + "_" + (f - 1)]) && m.push(p) :
                         t + i >= (f + 1) * d &&
                         (p = this.grids[u - 1 + "_" + (f + 1)]) &&
                         m.push(p)),
                        t + i >= (f + 1) * d &&
                        (p = this.grids[u + "_" + (f + 1)]) &&
                        m.push(p),
                        f &&
                        t - i <= f * d &&
                        (p = this.grids[u + "_" + (f - 1)]) &&
                        m.push(p);
                } catch (e) {}
                return m;
            }),
                (this.add = function(n, i, r, s, a, o, c, l, u) {
                g = null;
                for (var f = 0; f < t.length; ++f)
                    if (t[f].sid == n) {
                        g = t[f];
                        break;
                    }
                if (!g)
                    for (f = 0; f < t.length; ++f)
                        if (!t[f].active) {
                            g = t[f];
                            break;
                        }
                g || ((g = new e(n)), t.push(g)),
                    l && (g.sid = n),
                    g.init(i, r, s, a, o, c, u),
                    true &&
                    (this.setObjectGrids(g),
                     g.doUpdate && this.updateObjects.push(g));
            }),
                (this.disableBySid = function(e) {
                for (var n = 0; n < t.length; ++n)
                    if (t[n].sid == e) {
                        this.disableObj(t[n]);
                        break;
                    }
            }),
                (this.removeAllItems = function(e, n) {
                for (var i = 0; i < t.length; ++i)
                    t[i].active &&
                        t[i].owner &&
                        t[i].owner.sid == e &&
                        this.disableObj(t[i]);
                n && n.broadcast("13", e);
            }),
                (this.fetchSpawnObj = function(e) {
               for (var n = null, i = 0; i < t.length; ++i)
                   if ((g = t[i]).active && g.owner && g.owner.sid == e && g.spawnPoint) {
                       n = [g.x, g.y],
                           this.disableObj(g),
                           h.broadcast("12", g.sid),
                           g.owner && g.owner.changeItemCount(g.group.id, -1);
                       break
                   }
               return n
            }),
                (this.checkItemLocation = function(e, n, i, r, s, a, l) {
                for (var h = 0; h < t.length; ++h) {
                    var u = t[h].blocker ? t[h].blocker : t[h].getScale(r, t[h].isItem);
                    if (t[h].active && o.getDistance(e, n, t[h].x, t[h].y) < i + u)
                        return !1;
                }
                return !(
                    !a &&
                    18 != s &&
                    n >= c.mapScale / 2 - c.riverWidth / 2 &&
                    n <= c.mapScale / 2 + c.riverWidth / 2
                );
            }),
                (this.addProjectile = function(e, t, n, i, r) {
                for (
                    var s, a = items.projectiles[r], c = 0; c < projectiles.length;
                    ++c
                )
                    if (!projectiles[c].active) {
                        s = projectiles[c];
                        break;
                    }
                s || ((s = new Projectile(l, o)), projectiles.push(s)),
                    s.init(r, e, t, n, a.speed, i, a.scale);
            }),
                (this.checkCollision = function(e, t, n) {
                n = n || 1;
                var l = e.x - t.x,
                    h = e.y - t.y,
                    u = e.scale + t.scale;
                if (i(l) <= u || i(h) <= u) {
                    u = e.scale + (t.getScale ? t.getScale() : t.scale);
                    var f = a(l * l + h * h) - u;
                    if (f <= 0) {
                        if (t.ignoreCollision)
                            !t.trap ||
                                e.noTrap ||
                                t.owner == e ||
                                (t.owner && t.owner.team && t.owner.team == e.team) ?
                                t.boostSpeed ?
                                ((e.xVel +=
                                  n * t.boostSpeed * (t.weightM || 1) * r(t.dir)),
                                 (e.yVel +=
                                  n * t.boostSpeed * (t.weightM || 1) * s(t.dir))) :
                            t.healCol ?
                                (e.healCol = t.healCol) :
                            t.teleport &&
                                ((e.x = o.randInt(0, c.mapScale)),
                                 (e.y = o.randInt(0, c.mapScale))) :
                            ((e.lockMove = !0), (t.hideFromEnemy = !1));
                        else {
                            var d = o.getDirection(e.x, e.y, t.x, t.y);
                            if (
                                (o.getDistance(e.x, e.y, t.x, t.y),
                                 t.isPlayer ?
                                 ((f = (-1 * f) / 2),
                                  (e.x += f * r(d)),
                                  (e.y += f * s(d)),
                                  (t.x -= f * r(d)),
                                  (t.y -= f * s(d))) :
                                 ((e.x = t.x + u * r(d)),
                                  (e.y = t.y + u * s(d)),
                                  (e.xVel *= 0.75),
                                  (e.yVel *= 0.75)),
                                 t.dmg &&
                                 t.owner != e &&
                                 (!t.owner || !t.owner.team || t.owner.team != e.team))
                            ) {
                                e.changeHealth(-t.dmg, t.owner, t);
                                var p = 1.5 * (t.weightM || 1);
                                (e.xVel += p * r(d)),
                                    (e.yVel += p * s(d)),
                                    !t.pDmg ||
                                    (e.skin && e.skin.poisonRes) ||
                                    ((e.dmgOverTime.dmg = t.pDmg),
                                     (e.dmgOverTime.time = 5),
                                     (e.dmgOverTime.doer = t.owner)),
                                    e.colDmg &&
                                    t.health &&
                                    (t.changeHealth(-e.colDmg) && this.disableObj(t),
                                     this.hitObj(t, o.getDirection(e.x, e.y, t.x, t.y)));
                            }
                        }
                        return t.zIndex > e.zIndex && (e.zIndex = t.zIndex), !0;
                    }
                }
                return !1;
            });
        };
    },
    function(e, t, n) {
        var i = new(n(49))();
        i.addWords(
            "jew",
            "black",
            "baby",
            "child",
            "white",
            "porn",
            "pedo",
            "trump",
            "clinton",
            "hitler",
            "nazi",
            "gay",
            "pride",
            "sex",
            "pleasure",
            "touch",
            "poo",
            "kids",
            "rape",
            "white power",
            "nigga",
            "nig nog",
            "doggy",
            "rapist",
            "boner",
            "nigger",
            "nigg",
            "finger",
            "nogger",
            "nagger",
            "nig",
            "fag",
            "gai",
            "pole",
            "stripper",
            "penis",
            "vagina",
            "pussy",
            "nazi",
            "hitler",
            "stalin",
            "burn",
            "chamber",
            "cock",
            "peen",
            "dick",
            "spick",
            "nieger",
            "die",
            "satan",
            "n|ig",
            "nlg",
            "cunt",
            "c0ck",
            "fag",
            "lick",
            "condom",
            "anal",
            "shit",
            "phile",
            "little",
            "kids",
            "free KR",
            "tiny",
            "sidney",
            "ass",
            "kill",
            ".io",
            "(dot)",
            "[dot]",
            "mini",
            "whiore",
            "whore",
            "faggot",
            "github",
            "1337",
            "666",
            "satan",
            "senpa",
            "discord",
            "d1scord",
            "mistik",
            ".io",
            "senpa.io",
            "sidney",
            "sid",
            "senpaio",
            "vries",
            "asa",
        );
        var r = Math.abs,
            s = Math.cos,
            a = Math.sin,
            o = Math.pow,
            c = Math.sqrt;
        e.exports = function(e, t, n, l, h, u, f, d, p, g, m, y, k, v) {
            (this.id = e),
                (this.sid = t),
                (this.tmpScore = 0),
                (this.team = null),
                (this.skinIndex = 0),
                (this.tailIndex = 0),
                (this.hitTime = 0),
                (this.tails = {});
            for (var w = 0; w < m.length; ++w)
                m[w].price <= 0 && (this.tails[m[w].id] = 1);
            for (this.skins = {}, w = 0; w < g.length; ++w)
                g[w].price <= 0 && (this.skins[g[w].id] = 1);
            (this.points = 0),
                (this.dt = 0),
                (this.hidden = !1),
                (this.itemCounts = {}),
                (this.isPlayer = !0),
                (this.pps = 0),
                (this.moveDir = void 0),
                (this.skinRot = 0),
                (this.lastPing = 0),
                (this.iconIndex = 0),
                (this.skinColor = 0),
                (this.reloads = [{count: Math.ceil(300 / 111), max: Math.ceil(300 / 111), id: 0, rarity: 0}, {count: Math.ceil(1500 / 111), max: Math.ceil(1500 / 111), id: 15, rarity: 0}, 23]),
                (this.spawn = function(e) {
                (this.active = !0),
                    (this.alive = !0),
                    (this.lockMove = !1),
                    (this.lockDir = !1),
                    (this.minimapCounter = 0),
                    (this.chatCountdown = 0),
                    (this.shameCount = 0),
                    (this.shameTimer = 0),
                    (this.sentTo = {}),
                    (this.gathering = 0),
                    (this.autoGather = 0),
                    (this.animTime = 0),
                    (this.animSpeed = 0),
                    (this.mouseState = 0),
                    (this.buildIndex = -1),
                    (this.healthMov = 100),
                    (this.shameMov = 8),
                    (this.weaponIndex = 0),
                    (this.dmgOverTime = {}),
                    (this.noMovTimer = 0),
                    (this.maxXP = 300),
                    (this.XP = 0),
                    (this.age = 1),
                    (this.kills = 0),
                    (this.upgrAge = 2),
                    (this.upgradePoints = 0),
                    (this.x = 0),
                    (this.y = 0),
                    (this.zIndex = 0),
                    (this.xVel = 0),
                    (this.yVel = 0),
                    (this.slowMult = 1),
                    (this.dir = 0),
                    (this.dirPlus = 0),
                    (this.targetDir = 0),
                    (this.targetAngle = 0),
                    (this.maxHealth = 100),
                    (this.health = this.maxHealth),
                    (this.scale = n.playerScale),
                    (this.speed = n.playerSpeed),
                    this.resetMoveDir(),
                    this.resetResources(e),
                    (this.items = [0, 3, 6, 10]),
                    (this.weapons = [0]),
                    (this.shootCount = 0),
                    (this.weaponXP = []),
                    (this.reloads = [{count: Math.ceil(300 / 111), max: Math.ceil(300 / 111), id: 0, rarity: 0, done: true}, {count: Math.ceil(1500 / 111), max: Math.ceil(1500 / 111), id: 15, rarity: 0, done: true}, 23]);

            }),
                (this.resetMoveDir = function() {
                this.moveDir = void 0;
            }),
                (this.resetResources = function(e) {
                for (var t = 0; t < n.resourceTypes.length; ++t)
                    this[n.resourceTypes[t]] = e ? 100 : 0;
            }),
                (this.addItem = function(e) {
                var t = p.list[e];
                if (t) {
                    for (var n = 0; n < this.items.length; ++n)
                        if (p.list[this.items[n]].group == t.group)
                            return (
                                this.buildIndex == this.items[n] && (this.buildIndex = e),
                                (this.items[n] = e),
                                !0
                            );
                    return this.items.push(e), !0;
                }
                return !1;
            }),
                (this.setUserData = function(e) {
                if (e) {
                    this.name = "a-ware";
                    var t = e.name + "",
                        r = !1,
                        s = (t = (t = (t = (t = t.slice(0, n.maxNameLength)).replace(
                            /[^\w:\(\)\/? -]+/gim,
                            " ",
                        )).replace(/[^\x00-\x7F]/g, " ")).trim())
                    .toLowerCase()
                    .replace(/\s/g, "")
                    .replace(/1/g, "i")
                    .replace(/0/g, "o")
                    .replace(/5/g, "s");
                    for (var a of i.list)
                        if (-1 != s.indexOf(a)) {
                            r = !0;
                            break;
                        }
                    t.length > 0 && !r && (this.name = t),
                        (this.skinColor = 0),
                        n.skinColors[e.skin] && (this.skinColor = e.skin);
                }
            }),
                (this.getData = function() {
                return [
                    this.id,
                    this.sid,
                    this.name,
                    l.fixTo(this.x, 2),
                    l.fixTo(this.y, 2),
                    l.fixTo(this.dir, 3),
                    this.health,
                    this.maxHealth,
                    this.scale,
                    this.skinColor,
                ];
            }),
                (this.setData = function(e) {
                (this.id = e[0]),
                    (this.sid = e[1]),
                    (this.name = e[2]),
                    (this.x = e[3]),
                    (this.y = e[4]),
                    (this.dir = e[5]),
                    (this.health = e[6]),
                    (this.maxHealth = e[7]),
                    (this.scale = e[8]),
                    (this.skinColor = e[9]);
            });
            var b = 0;
            (this.update = function(e) {
                if (this.alive) {
                    if(this.health != this.healthMov){
                        this.health < this.healthMov ? (this.healthMov -= 3) : (this.healthMov += 3);
                        if(Math.abs(this.health - this.healthMov) < 3) this.healthMov = this.health;
                    };
                    if(this.shameCount != this.shameMov) this.shameCount < this.shameMov ? (this.shameMov -= .1) : (this.shameMov += .1), Math.abs(this.shameCount - this.shameMov) < .1 && (this.shameMov = this.shameCount);
                };
            }),
                (this.onTick = function(e) {
                let Reload = this.reloads[Number(this.weaponIndex > 8)]; /* Secondary / Primary */
                let Weapon = p.weapons[this.weaponIndex];
                if(Reload.id != Weapon.id) {
                    Reload.id = Weapon.id;
                    Reload.max = Weapon.speed ? (Math.ceil(Weapon.speed / 111)) : 0;
                    Reload.count = Reload.max;
                    Reload.done = true;
                    Reload.rarity = this.weaponVariant;
                };
                if(this.weaponVariant != Reload.rarity) Reload.rarity = this.weaponVariant;
                if(Reload.count < Reload.max && this.buildIndex == -1){
                    Reload.count += 1;
                    Reload.done = Reload.count == Reload.max;
                };
                this.reloads[Number(this.weaponIndex > 8)] = Reload;
                if(this.reloads[2] < 23) this.reloads[2]++;
            }),
                (this.addWeaponXP = function(e) {
                this.weaponXP[this.weaponIndex] ||
                    (this.weaponXP[this.weaponIndex] = 0),
                    (this.weaponXP[this.weaponIndex] += e);
            }),
                (this.earnXP = function(e) {
                this.age < n.maxAge &&
                    ((this.XP += e),
                     this.XP >= this.maxXP ?
                     (this.age < n.maxAge ?
                      (this.age++, (this.XP = 0), (this.maxXP *= 1.2)) :
                      (this.XP = this.maxXP),
                      this.upgradePoints++,
                      y.send(this.id, "16", this.upgradePoints, this.upgrAge),
                      y.send(
                    this.id,
                    "15",
                    this.XP,
                    l.fixTo(this.maxXP, 1),
                    this.age,
                )) :
                     y.send(this.id, "15", this.XP));
            }),
                (this.changeHealth = function(e, t) {
                if (e > 0 && this.health >= this.maxHealth) return !1;
                e < 0 && this.skin && (e *= this.skin.dmgMult || 1),
                    e < 0 && this.tail && (e *= this.tail.dmgMult || 1),
                    e < 0 && (this.hitTime = Date.now()),
                    (this.health += e),
                    this.health > this.maxHealth &&
                    ((e -= this.health - this.maxHealth),
                     (this.health = this.maxHealth)),
                    this.health <= 0 && this.kill(t);
                for (var n = 0; n < f.length; ++n)
                    this.sentTo[f[n].id] &&
                        y.send(f[n].id, "h", this.sid, Math.round(this.health));
                return (
                    !t ||
                    !t.canSee(this) ||
                    (t == this && e < 0) ||
                    y.send(
                        t.id,
                        "t",
                        Math.round(this.x),
                        Math.round(this.y),
                        Math.round(-e),
                        1,
                    ),
                    !0
                );
            }),
                (this.kill = function(e) {
                e &&
                    e.alive &&
                    (e.kills++,
                     e.skin && e.skin.goldSteal ?
                     k(e, Math.round(this.points / 2)) :
                     k(
                    e,
                    Math.round(
                        100 *
                        this.age *
                        (e.skin && e.skin.kScrM ? e.skin.kScrM : 1),
                    ),
                ),
                     y.send(e.id, "9", "kills", e.kills, 1)),
                    (this.alive = !1),
                    y.send(this.id, "11"),
                    v();
            }),
                (this.addResource = function(e, t, i) {
                !i && t > 0 && this.addWeaponXP(t),
                    3 == e ?
                    k(this, t, !0) :
                ((this[n.resourceTypes[e]] += t),
                 y.send(
                    this.id,
                    "9",
                    n.resourceTypes[e],
                    this[n.resourceTypes[e]],
                    1,
                ));
            }),
                (this.changeItemCount = function(e, t) {
                (this.itemCounts[e] = this.itemCounts[e] || 0),
                    (this.itemCounts[e] += t),
                    y.send(this.id, "14", e, this.itemCounts[e]);
            }),
                (this.buildItem = function() {
                if (this.hitTime) {
                    let o = Wish - this.hitTime;
                    this.hitTime = 0;
                    o < 2 ? (this.shameCount++,
                             this.shameCount >= 8 && (this.shameTimer = 3e4, this.shameCount = 0)) : (this.shameCount = Math.max(0, this.shameCount - 2))
                }
            }),
                (this.hasRes = function(e, t) {
                for (var n = 0; n < e.req.length;) {
                    if (this[e.req[n]] < Math.round(e.req[n + 1] * (t || 1))) return !1;
                    n += 2;
                }
                return !0;
            }),
                (this.useRes = function(e, t) {
                if (!n.inSandbox)
                    for (var i = 0; i < e.req.length;)
                        this.addResource(
                            n.resourceTypes.indexOf(e.req[i]),
                            -Math.round(e.req[i + 1] * (t || 1)),
                        ),
                            (i += 2);
            }),
                (this.canBuild = function(e) {
                return (
                    !!n.inSandbox ||
                    (!(e.group.limit && this.itemCounts[e.group.id] >= e.group.limit) &&
                     this.hasRes(e))
                );
            }),
                this.gather = function(oe, ot, on){
                this.reloads[ot].count = 0;
                this.reloads[ot].done = false;
                this.noMovTimer = 0, this.slowMult -= on.hitSlow ||
                    .3, this.slowMult < 0 && (this.slowMult = 0);
                for(var e, t, i, r = n.fetchVariant(this), o = r.poison, c = r.val, h = {},
                    g = u.getGridArrays(this.x, this.y, on.range),
                    m = 0; m < g.length; ++m)
                    for(var y = 0; y < g[m].length; ++y)
                        if ((t = g[m][y]).active && !t.dontGather && !h[t.sid] && Date.now() - t.hitTime <= 100 && l.getDistance(this.x, this.y, t.x, t.y) - t.scale - 35 <= p.weapons[this.weaponIndex].range){
                            e = l.getDirection(t.x, t.y, this.x, this.y);
                            if(l.getAngleDist(e, this.d2) <= n.gatherAngle) {
                                h[t.sid] = 1;
                                if (t.health) {
                                    if (t.changeHealth(-on.dmg * c * (oe == 10 ? 7.5 : 1) * (this.skinIndex == 40 ? 3.3 : 1), this)) {
                                        null;
                                    }
                                }
                            }
                        }
            };
            var x = 0,
                S = 0;
            (this.animate = function(e) {
                this.animTime > 0 &&
                    ((this.animTime -= e),
                     this.animTime <= 0 ?
                     ((this.animTime = 0), (this.dirPlus = 0), (x = 0), (S = 0)) :
                     0 == S ?
                     ((x += e / (this.animSpeed * n.hitReturnRatio)),
                      (this.dirPlus = l.lerp(0, this.targetAngle, Math.min(1, x))),
                      x >= 1 && ((x = 1), (S = 1))) :
                     ((x -= e / (this.animSpeed * (1 - n.hitReturnRatio))),
                      (this.dirPlus = l.lerp(0, this.targetAngle, Math.max(0, x)))));
            }),
                (this.startAnim = function(e, t) {
                (this.animTime = this.animSpeed = p.weapons[t].speed),
                    (this.targetAngle = e ? -n.hitAngle : -Math.PI),
                    (x = 0),
                    (S = 0);
            }),
                (this.canSee = function(e) {
                if (!e) return !1;
                if (e.skin && e.skin.invisTimer && e.noMovTimer >= e.skin.invisTimer)
                    return !1;
                var t = r(e.x - this.x) - e.scale,
                    i = r(e.y - this.y) - e.scale;
                return (
                    t <= (n.maxScreenWidth / 2) * 1.3 &&
                    i <= (n.maxScreenHeight / 2) * 1.3
                );
            });
        };
    },
    function(e, t, n) {
        const i = n(50).words,
              r = n(51).array;
        e.exports = class {
            constructor(e = {}) {
                Object.assign(this, {
                    list: (e.emptyList && []) ||
                    Array.prototype.concat.apply(i, [r, e.list || []]),
                    exclude: e.exclude || [],
                    placeHolder: e.placeHolder || "*",
                    regex: e.regex || /[^a-zA-Z0-9|\$|\@]|\^/g,
                    replaceRegex: e.replaceRegex || /\w/g,
                });
            }
            isProfane(e) {
                return (
                    this.list.filter((t) => {
                        const n = new RegExp(`\\b${t.replace(/(\W)/g, "\\$1")}\\b`, "gi");
                        return !this.exclude.includes(t.toLowerCase()) && n.test(e);
                    }).length > 0 || !1
                );
            }
            replaceWord(e) {
                return e
                    .replace(this.regex, "")
                    .replace(this.replaceRegex, this.placeHolder);
            }
            clean(e) {
                return e
                    .split(/\b/)
                    .map((e) => (this.isProfane(e) ? this.replaceWord(e) : e))
                    .join("");
            }
            addWords() {
                let e = Array.from(arguments);
                this.list.push(...e),
                    e
                    .map((e) => e.toLowerCase())
                    .forEach((e) => {
                    this.exclude.includes(e) &&
                        this.exclude.splice(this.exclude.indexOf(e), 1);
                });
            }
            removeWords() {
                this.exclude.push(...Array.from(arguments).map((e) => e.toLowerCase()));
            }
        };
    },
    function(e) {
        e.exports = {
            words: [
                "ahole",
                "anus",
                "ash0le",
                "ash0les",
                "asholes",
                "ass",
                "Ass Monkey",
                "Assface",
                "assh0le",
                "assh0lez",
                "asshole",
                "assholes",
                "assholz",
                "asswipe",
                "azzhole",
                "bassterds",
                "bastard",
                "bastards",
                "bastardz",
                "basterds",
                "basterdz",
                "Biatch",
                "bitch",
                "bitches",
                "Blow Job",
                "boffing",
                "butthole",
                "buttwipe",
                "c0ck",
                "c0cks",
                "c0k",
                "Carpet Muncher",
                "cawk",
                "cawks",
                "Clit",
                "cnts",
                "cntz",
                "cock",
                "cockhead",
                "cock-head",
                "cocks",
                "CockSucker",
                "cock-sucker",
                "crap",
                "cum",
                "cunt",
                "cunts",
                "cuntz",
                "dick",
                "dild0",
                "dild0s",
                "dildo",
                "dildos",
                "dilld0",
                "dilld0s",
                "dominatricks",
                "dominatrics",
                "dominatrix",
                "dyke",
                "enema",
                "f u c k",
                "f u c k e r",
                "fag",
                "fag1t",
                "faget",
                "fagg1t",
                "faggit",
                "faggot",
                "fagg0t",
                "fagit",
                "fags",
                "fagz",
                "faig",
                "faigs",
                "fart",
                "flipping the bird",
                "fuck",
                "fucker",
                "fuckin",
                "fucking",
                "fucks",
                "Fudge Packer",
                "fuk",
                "Fukah",
                "Fuken",
                "fuker",
                "Fukin",
                "Fukk",
                "Fukkah",
                "Fukken",
                "Fukker",
                "Fukkin",
                "g00k",
                "God-damned",
                "h00r",
                "h0ar",
                "h0re",
                "hells",
                "hoar",
                "hoor",
                "hoore",
                "jackoff",
                "jap",
                "japs",
                "jerk-off",
                "jisim",
                "jiss",
                "jizm",
                "jizz",
                "knob",
                "knobs",
                "knobz",
                "kunt",
                "kunts",
                "kuntz",
                "Lezzian",
                "Lipshits",
                "Lipshitz",
                "masochist",
                "masokist",
                "massterbait",
                "masstrbait",
                "masstrbate",
                "masterbaiter",
                "masterbate",
                "masterbates",
                "Motha Fucker",
                "Motha Fuker",
                "Motha Fukkah",
                "Motha Fukker",
                "Mother Fucker",
                "Mother Fukah",
                "Mother Fuker",
                "Mother Fukkah",
                "Mother Fukker",
                "mother-fucker",
                "Mutha Fucker",
                "Mutha Fukah",
                "Mutha Fuker",
                "Mutha Fukkah",
                "Mutha Fukker",
                "n1gr",
                "nastt",
                "nigger;",
                "nigur;",
                "niiger;",
                "niigr;",
                "orafis",
                "orgasim;",
                "orgasm",
                "orgasum",
                "oriface",
                "orifice",
                "orifiss",
                "packi",
                "packie",
                "packy",
                "paki",
                "pakie",
                "paky",
                "pecker",
                "peeenus",
                "peeenusss",
                "peenus",
                "peinus",
                "pen1s",
                "penas",
                "penis",
                "penis-breath",
                "penus",
                "penuus",
                "Phuc",
                "Phuck",
                "Phuk",
                "Phuker",
                "Phukker",
                "polac",
                "polack",
                "polak",
                "Poonani",
                "pr1c",
                "pr1ck",
                "pr1k",
                "pusse",
                "pussee",
                "pussy",
                "puuke",
                "puuker",
                "queer",
                "queers",
                "queerz",
                "qweers",
                "qweerz",
                "qweir",
                "recktum",
                "rectum",
                "retard",
                "sadist",
                "scank",
                "schlong",
                "screwing",
                "semen",
                "sex",
                "sexy",
                "Sh!t",
                "sh1t",
                "sh1ter",
                "sh1ts",
                "sh1tter",
                "sh1tz",
                "shit",
                "shits",
                "shitter",
                "Shitty",
                "Shity",
                "shitz",
                "Shyt",
                "Shyte",
                "Shytty",
                "Shyty",
                "skanck",
                "skank",
                "skankee",
                "skankey",
                "skanks",
                "Skanky",
                "slag",
                "slut",
                "sluts",
                "Slutty",
                "slutz",
                "son-of-a-bitch",
                "tit",
                "turd",
                "va1jina",
                "vag1na",
                "vagiina",
                "vagina",
                "vaj1na",
                "vajina",
                "vullva",
                "vulva",
                "w0p",
                "wh00r",
                "wh0re",
                "whore",
                "xrated",
                "xxx",
                "b!+ch",
                "bitch",
                "blowjob",
                "clit",
                "arschloch",
                "fuck",
                "shit",
                "ass",
                "asshole",
                "b!tch",
                "b17ch",
                "b1tch",
                "bastard",
                "bi+ch",
                "boiolas",
                "buceta",
                "c0ck",
                "cawk",
                "chink",
                "cipa",
                "clits",
                "cock",
                "cum",
                "cunt",
                "dildo",
                "dirsa",
                "ejakulate",
                "fatass",
                "fcuk",
                "fuk",
                "fux0r",
                "hoer",
                "hore",
                "jism",
                "kawk",
                "l3itch",
                "l3i+ch",
                "lesbian",
                "masturbate",
                "masterbat*",
                "masterbat3",
                "motherfucker",
                "s.o.b.",
                "mofo",
                "nazi",
                "nigga",
                "nigger",
                "nutsack",
                "phuck",
                "pimpis",
                "pusse",
                "pussy",
                "scrotum",
                "sh!t",
                "shemale",
                "shi+",
                "sh!+",
                "slut",
                "smut",
                "teets",
                "tits",
                "boobs",
                "b00bs",
                "teez",
                "testical",
                "testicle",
                "titt",
                "w00se",
                "jackoff",
                "wank",
                "whoar",
                "whore",
                "*damn",
                "*dyke",
                "*fuck*",
                "*shit*",
                "@$$",
                "amcik",
                "andskota",
                "arse*",
                "assrammer",
                "ayir",
                "bi7ch",
                "bitch*",
                "bollock*",
                "breasts",
                "butt-pirate",
                "cabron",
                "cazzo",
                "chraa",
                "chuj",
                "Cock*",
                "cunt*",
                "d4mn",
                "daygo",
                "dego",
                "dick*",
                "dike*",
                "dupa",
                "dziwka",
                "ejackulate",
                "Ekrem*",
                "Ekto",
                "enculer",
                "faen",
                "fag*",
                "fanculo",
                "fanny",
                "feces",
                "feg",
                "Felcher",
                "ficken",
                "fitt*",
                "Flikker",
                "foreskin",
                "Fotze",
                "Fu(*",
                "fuk*",
                "futkretzn",
                "gook",
                "guiena",
                "h0r",
                "h4x0r",
                "hell",
                "helvete",
                "hoer*",
                "honkey",
                "Huevon",
                "hui",
                "injun",
                "jizz",
                "kanker*",
                "kike",
                "klootzak",
                "kraut",
                "knulle",
                "kuk",
                "kuksuger",
                "Kurac",
                "kurwa",
                "kusi*",
                "kyrpa*",
                "lesbo",
                "mamhoon",
                "masturbat*",
                "merd*",
                "mibun",
                "monkleigh",
                "mouliewop",
                "muie",
                "mulkku",
                "muschi",
                "nazis",
                "nepesaurio",
                "nigger*",
                "orospu",
                "paska*",
                "perse",
                "picka",
                "pierdol*",
                "pillu*",
                "pimmel",
                "piss*",
                "pizda",
                "poontsee",
                "poop",
                "porn",
                "p0rn",
                "pr0n",
                "preteen",
                "pula",
                "pule",
                "puta",
                "puto",
                "qahbeh",
                "queef*",
                "rautenberg",
                "schaffer",
                "scheiss*",
                "schlampe",
                "schmuck",
                "screw",
                "sh!t*",
                "sharmuta",
                "sharmute",
                "shipal",
                "shiz",
                "skribz",
                "skurwysyn",
                "sphencter",
                "spic",
                "spierdalaj",
                "splooge",
                "suka",
                "b00b*",
                "testicle*",
                "titt*",
                "twat",
                "vittu",
                "wank*",
                "wetback*",
                "wichser",
                "wop*",
                "yed",
                "zabourah",
            ],
        };
    },
    function(e, t, n) {
        e.exports = {
            object: n(52),
            array: n(53),
            regex: n(54)
        };
    },
    function(e, t) {
        e.exports = {
            "4r5e": 1,
            "5h1t": 1,
            "5hit": 1,
            a55: 1,
            anal: 1,
            anus: 1,
            ar5e: 1,
            arrse: 1,
            arse: 1,
            ass: 1,
            "ass-fucker": 1,
            asses: 1,
            assfucker: 1,
            assfukka: 1,
            asshole: 1,
            assholes: 1,
            asswhole: 1,
            a_s_s: 1,
            "b!tch": 1,
            b00bs: 1,
            b17ch: 1,
            b1tch: 1,
            ballbag: 1,
            balls: 1,
            ballsack: 1,
            bastard: 1,
            beastial: 1,
            beastiality: 1,
            bellend: 1,
            bestial: 1,
            bestiality: 1,
            "bi+ch": 1,
            biatch: 1,
            bitch: 1,
            bitcher: 1,
            bitchers: 1,
            bitches: 1,
            bitchin: 1,
            bitching: 1,
            bloody: 1,
            "blow job": 1,
            blowjob: 1,
            blowjobs: 1,
            boiolas: 1,
            bollock: 1,
            bollok: 1,
            boner: 1,
            boob: 1,
            boobs: 1,
            booobs: 1,
            boooobs: 1,
            booooobs: 1,
            booooooobs: 1,
            breasts: 1,
            buceta: 1,
            bugger: 1,
            bum: 1,
            "bunny fucker": 1,
            butt: 1,
            butthole: 1,
            buttmuch: 1,
            buttplug: 1,
            c0ck: 1,
            c0cksucker: 1,
            "carpet muncher": 1,
            cawk: 1,
            chink: 1,
            cipa: 1,
            cl1t: 1,
            clit: 1,
            clitoris: 1,
            clits: 1,
            cnut: 1,
            cock: 1,
            "cock-sucker": 1,
            cockface: 1,
            cockhead: 1,
            cockmunch: 1,
            cockmuncher: 1,
            cocks: 1,
            cocksuck: 1,
            cocksucked: 1,
            cocksucker: 1,
            cocksucking: 1,
            cocksucks: 1,
            cocksuka: 1,
            cocksukka: 1,
            cok: 1,
            cokmuncher: 1,
            coksucka: 1,
            coon: 1,
            cox: 1,
            crap: 1,
            cum: 1,
            cummer: 1,
            cumming: 1,
            cums: 1,
            cumshot: 1,
            cunilingus: 1,
            cunillingus: 1,
            cunnilingus: 1,
            cunt: 1,
            cuntlick: 1,
            cuntlicker: 1,
            cuntlicking: 1,
            cunts: 1,
            cyalis: 1,
            cyberfuc: 1,
            cyberfuck: 1,
            cyberfucked: 1,
            cyberfucker: 1,
            cyberfuckers: 1,
            cyberfucking: 1,
            d1ck: 1,
            damn: 1,
            dick: 1,
            dickhead: 1,
            dildo: 1,
            dildos: 1,
            dink: 1,
            dinks: 1,
            dirsa: 1,
            dlck: 1,
            "dog-fucker": 1,
            doggin: 1,
            dogging: 1,
            donkeyribber: 1,
            doosh: 1,
            duche: 1,
            dyke: 1,
            ejaculate: 1,
            ejaculated: 1,
            ejaculates: 1,
            ejaculating: 1,
            ejaculatings: 1,
            ejaculation: 1,
            ejakulate: 1,
            "f u c k": 1,
            "f u c k e r": 1,
            f4nny: 1,
            fag: 1,
            fagging: 1,
            faggitt: 1,
            faggot: 1,
            faggs: 1,
            fagot: 1,
            fagots: 1,
            fags: 1,
            fanny: 1,
            fannyflaps: 1,
            fannyfucker: 1,
            fanyy: 1,
            fatass: 1,
            fcuk: 1,
            fcuker: 1,
            fcuking: 1,
            feck: 1,
            fecker: 1,
            felching: 1,
            fellate: 1,
            fellatio: 1,
            fingerfuck: 1,
            fingerfucked: 1,
            fingerfucker: 1,
            fingerfuckers: 1,
            fingerfucking: 1,
            fingerfucks: 1,
            fistfuck: 1,
            fistfucked: 1,
            fistfucker: 1,
            fistfuckers: 1,
            fistfucking: 1,
            fistfuckings: 1,
            fistfucks: 1,
            flange: 1,
            fook: 1,
            fooker: 1,
            fuck: 1,
            fucka: 1,
            fucked: 1,
            fucker: 1,
            fuckers: 1,
            fuckhead: 1,
            fuckheads: 1,
            fuckin: 1,
            fucking: 1,
            fuckings: 1,
            fuckingshitmotherfucker: 1,
            fuckme: 1,
            fucks: 1,
            fuckwhit: 1,
            fuckwit: 1,
            "fudge packer": 1,
            fudgepacker: 1,
            fuk: 1,
            fuker: 1,
            fukker: 1,
            fukkin: 1,
            fuks: 1,
            fukwhit: 1,
            fukwit: 1,
            fux: 1,
            fux0r: 1,
            f_u_c_k: 1,
            gangbang: 1,
            gangbanged: 1,
            gangbangs: 1,
            gaylord: 1,
            gaysex: 1,
            goatse: 1,
            God: 1,
            "god-dam": 1,
            "god-damned": 1,
            goddamn: 1,
            goddamned: 1,
            hardcoresex: 1,
            hell: 1,
            heshe: 1,
            hoar: 1,
            hoare: 1,
            hoer: 1,
            homo: 1,
            hore: 1,
            horniest: 1,
            horny: 1,
            hotsex: 1,
            "jack-off": 1,
            jackoff: 1,
            jap: 1,
            "jerk-off": 1,
            jism: 1,
            jiz: 1,
            jizm: 1,
            jizz: 1,
            kawk: 1,
            knob: 1,
            knobead: 1,
            knobed: 1,
            knobend: 1,
            knobhead: 1,
            knobjocky: 1,
            knobjokey: 1,
            kock: 1,
            kondum: 1,
            kondums: 1,
            kum: 1,
            kummer: 1,
            kumming: 1,
            kums: 1,
            kunilingus: 1,
            "l3i+ch": 1,
            l3itch: 1,
            labia: 1,
            lust: 1,
            lusting: 1,
            m0f0: 1,
            m0fo: 1,
            m45terbate: 1,
            ma5terb8: 1,
            ma5terbate: 1,
            masochist: 1,
            "master-bate": 1,
            masterb8: 1,
            "masterbat*": 1,
            masterbat3: 1,
            masterbate: 1,
            masterbation: 1,
            masterbations: 1,
            masturbate: 1,
            "mo-fo": 1,
            mof0: 1,
            mofo: 1,
            mothafuck: 1,
            mothafucka: 1,
            mothafuckas: 1,
            mothafuckaz: 1,
            mothafucked: 1,
            mothafucker: 1,
            mothafuckers: 1,
            mothafuckin: 1,
            mothafucking: 1,
            mothafuckings: 1,
            mothafucks: 1,
            "mother fucker": 1,
            motherfuck: 1,
            motherfucked: 1,
            motherfucker: 1,
            motherfuckers: 1,
            motherfuckin: 1,
            motherfucking: 1,
            motherfuckings: 1,
            motherfuckka: 1,
            motherfucks: 1,
            muff: 1,
            mutha: 1,
            muthafecker: 1,
            muthafuckker: 1,
            muther: 1,
            mutherfucker: 1,
            n1gga: 1,
            n1gger: 1,
            nazi: 1,
            nigg3r: 1,
            nigg4h: 1,
            nigga: 1,
            niggah: 1,
            niggas: 1,
            niggaz: 1,
            nigger: 1,
            niggers: 1,
            nob: 1,
            "nob jokey": 1,
            nobhead: 1,
            nobjocky: 1,
            nobjokey: 1,
            numbnuts: 1,
            nutsack: 1,
            orgasim: 1,
            orgasims: 1,
            orgasm: 1,
            orgasms: 1,
            p0rn: 1,
            pawn: 1,
            pecker: 1,
            penis: 1,
            penisfucker: 1,
            phonesex: 1,
            phuck: 1,
            phuk: 1,
            phuked: 1,
            phuking: 1,
            phukked: 1,
            phukking: 1,
            phuks: 1,
            phuq: 1,
            pigfucker: 1,
            pimpis: 1,
            piss: 1,
            pissed: 1,
            pisser: 1,
            pissers: 1,
            pisses: 1,
            pissflaps: 1,
            pissin: 1,
            pissing: 1,
            pissoff: 1,
            poop: 1,
            porn: 1,
            porno: 1,
            pornography: 1,
            pornos: 1,
            prick: 1,
            pricks: 1,
            pron: 1,
            pube: 1,
            pusse: 1,
            pussi: 1,
            pussies: 1,
            pussy: 1,
            pussys: 1,
            rectum: 1,
            retard: 1,
            rimjaw: 1,
            rimming: 1,
            "s hit": 1,
            "s.o.b.": 1,
            sadist: 1,
            schlong: 1,
            screwing: 1,
            scroat: 1,
            scrote: 1,
            scrotum: 1,
            semen: 1,
            sex: 1,
            "sh!+": 1,
            "sh!t": 1,
            sh1t: 1,
            shag: 1,
            shagger: 1,
            shaggin: 1,
            shagging: 1,
            shemale: 1,
            "shi+": 1,
            shit: 1,
            shitdick: 1,
            shite: 1,
            shited: 1,
            shitey: 1,
            shitfuck: 1,
            shitfull: 1,
            shithead: 1,
            shiting: 1,
            shitings: 1,
            shits: 1,
            shitted: 1,
            shitter: 1,
            shitters: 1,
            shitting: 1,
            shittings: 1,
            shitty: 1,
            skank: 1,
            slut: 1,
            sluts: 1,
            smegma: 1,
            smut: 1,
            snatch: 1,
            "son-of-a-bitch": 1,
            spac: 1,
            spunk: 1,
            s_h_i_t: 1,
            t1tt1e5: 1,
            t1tties: 1,
            teets: 1,
            teez: 1,
            testical: 1,
            testicle: 1,
            tit: 1,
            titfuck: 1,
            tits: 1,
            titt: 1,
            tittie5: 1,
            tittiefucker: 1,
            titties: 1,
            tittyfuck: 1,
            tittywank: 1,
            titwank: 1,
            tosser: 1,
            turd: 1,
            tw4t: 1,
            twat: 1,
            twathead: 1,
            twatty: 1,
            twunt: 1,
            twunter: 1,
            v14gra: 1,
            v1gra: 1,
            vagina: 1,
            viagra: 1,
            vulva: 1,
            w00se: 1,
            wang: 1,
            wank: 1,
            wanker: 1,
            wanky: 1,
            whoar: 1,
            whore: 1,
            willies: 1,
            willy: 1,
            xrated: 1,
            xxx: 1,
        };
    },
    function(e, t) {
        e.exports = [
            "4r5e",
            "5h1t",
            "5hit",
            "a55",
            "anal",
            "anus",
            "ar5e",
            "arrse",
            "arse",
            "ass",
            "ass-fucker",
            "asses",
            "assfucker",
            "assfukka",
            "asshole",
            "assholes",
            "asswhole",
            "a_s_s",
            "b!tch",
            "b00bs",
            "b17ch",
            "b1tch",
            "ballbag",
            "balls",
            "ballsack",
            "bastard",
            "beastial",
            "beastiality",
            "bellend",
            "bestial",
            "bestiality",
            "bi+ch",
            "biatch",
            "bitch",
            "bitcher",
            "bitchers",
            "bitches",
            "bitchin",
            "bitching",
            "bloody",
            "blow job",
            "blowjob",
            "blowjobs",
            "boiolas",
            "bollock",
            "bollok",
            "boner",
            "boob",
            "boobs",
            "booobs",
            "boooobs",
            "booooobs",
            "booooooobs",
            "breasts",
            "buceta",
            "bugger",
            "bum",
            "bunny fucker",
            "butt",
            "butthole",
            "buttmuch",
            "buttplug",
            "c0ck",
            "c0cksucker",
            "carpet muncher",
            "cawk",
            "chink",
            "cipa",
            "cl1t",
            "clit",
            "clitoris",
            "clits",
            "cnut",
            "cock",
            "cock-sucker",
            "cockface",
            "cockhead",
            "cockmunch",
            "cockmuncher",
            "cocks",
            "cocksuck",
            "cocksucked",
            "cocksucker",
            "cocksucking",
            "cocksucks",
            "cocksuka",
            "cocksukka",
            "cok",
            "cokmuncher",
            "coksucka",
            "coon",
            "cox",
            "crap",
            "cum",
            "cummer",
            "cumming",
            "cums",
            "cumshot",
            "cunilingus",
            "cunillingus",
            "cunnilingus",
            "cunt",
            "cuntlick",
            "cuntlicker",
            "cuntlicking",
            "cunts",
            "cyalis",
            "cyberfuc",
            "cyberfuck",
            "cyberfucked",
            "cyberfucker",
            "cyberfuckers",
            "cyberfucking",
            "d1ck",
            "damn",
            "dick",
            "dickhead",
            "dildo",
            "dildos",
            "dink",
            "dinks",
            "dirsa",
            "dlck",
            "dog-fucker",
            "doggin",
            "dogging",
            "donkeyribber",
            "doosh",
            "duche",
            "dyke",
            "ejaculate",
            "ejaculated",
            "ejaculates",
            "ejaculating",
            "ejaculatings",
            "ejaculation",
            "ejakulate",
            "f u c k",
            "f u c k e r",
            "f4nny",
            "fag",
            "fagging",
            "faggitt",
            "faggot",
            "faggs",
            "fagot",
            "fagots",
            "fags",
            "fanny",
            "fannyflaps",
            "fannyfucker",
            "fanyy",
            "fatass",
            "fcuk",
            "fcuker",
            "fcuking",
            "feck",
            "fecker",
            "felching",
            "fellate",
            "fellatio",
            "fingerfuck",
            "fingerfucked",
            "fingerfucker",
            "fingerfuckers",
            "fingerfucking",
            "fingerfucks",
            "fistfuck",
            "fistfucked",
            "fistfucker",
            "fistfuckers",
            "fistfucking",
            "fistfuckings",
            "fistfucks",
            "flange",
            "fook",
            "fooker",
            "fuck",
            "fucka",
            "fucked",
            "fucker",
            "fuckers",
            "fuckhead",
            "fuckheads",
            "fuckin",
            "fucking",
            "fuckings",
            "fuckingshitmotherfucker",
            "fuckme",
            "fucks",
            "fuckwhit",
            "fuckwit",
            "fudge packer",
            "fudgepacker",
            "fuk",
            "fuker",
            "fukker",
            "fukkin",
            "fuks",
            "fukwhit",
            "fukwit",
            "fux",
            "fux0r",
            "f_u_c_k",
            "gangbang",
            "gangbanged",
            "gangbangs",
            "gaylord",
            "gaysex",
            "goatse",
            "God",
            "god-dam",
            "god-damned",
            "goddamn",
            "goddamned",
            "hardcoresex",
            "hell",
            "heshe",
            "hoar",
            "hoare",
            "hoer",
            "homo",
            "hore",
            "horniest",
            "horny",
            "hotsex",
            "jack-off",
            "jackoff",
            "jap",
            "jerk-off",
            "jism",
            "jiz",
            "jizm",
            "jizz",
            "kawk",
            "knob",
            "knobead",
            "knobed",
            "knobend",
            "knobhead",
            "knobjocky",
            "knobjokey",
            "kock",
            "kondum",
            "kondums",
            "kum",
            "kummer",
            "kumming",
            "kums",
            "kunilingus",
            "l3i+ch",
            "l3itch",
            "labia",
            "lust",
            "lusting",
            "m0f0",
            "m0fo",
            "m45terbate",
            "ma5terb8",
            "ma5terbate",
            "masochist",
            "master-bate",
            "masterb8",
            "masterbat*",
            "masterbat3",
            "masterbate",
            "masterbation",
            "masterbations",
            "masturbate",
            "mo-fo",
            "mof0",
            "mofo",
            "mothafuck",
            "mothafucka",
            "mothafuckas",
            "mothafuckaz",
            "mothafucked",
            "mothafucker",
            "mothafuckers",
            "mothafuckin",
            "mothafucking",
            "mothafuckings",
            "mothafucks",
            "mother fucker",
            "motherfuck",
            "motherfucked",
            "motherfucker",
            "motherfuckers",
            "motherfuckin",
            "motherfucking",
            "motherfuckings",
            "motherfuckka",
            "motherfucks",
            "muff",
            "mutha",
            "muthafecker",
            "muthafuckker",
            "muther",
            "mutherfucker",
            "n1gga",
            "n1gger",
            "nazi",
            "nigg3r",
            "nigg4h",
            "nigga",
            "niggah",
            "niggas",
            "niggaz",
            "nigger",
            "niggers",
            "nob",
            "nob jokey",
            "nobhead",
            "nobjocky",
            "nobjokey",
            "numbnuts",
            "nutsack",
            "orgasim",
            "orgasims",
            "orgasm",
            "orgasms",
            "p0rn",
            "pawn",
            "pecker",
            "penis",
            "penisfucker",
            "phonesex",
            "phuck",
            "phuk",
            "phuked",
            "phuking",
            "phukked",
            "phukking",
            "phuks",
            "phuq",
            "pigfucker",
            "pimpis",
            "piss",
            "pissed",
            "pisser",
            "pissers",
            "pisses",
            "pissflaps",
            "pissin",
            "pissing",
            "pissoff",
            "poop",
            "porn",
            "porno",
            "pornography",
            "pornos",
            "prick",
            "pricks",
            "pron",
            "pube",
            "pusse",
            "pussi",
            "pussies",
            "pussy",
            "pussys",
            "rectum",
            "retard",
            "rimjaw",
            "rimming",
            "s hit",
            "s.o.b.",
            "sadist",
            "schlong",
            "screwing",
            "scroat",
            "scrote",
            "scrotum",
            "semen",
            "sex",
            "sh!+",
            "sh!t",
            "sh1t",
            "shag",
            "shagger",
            "shaggin",
            "shagging",
            "shemale",
            "shi+",
            "shit",
            "shitdick",
            "shite",
            "shited",
            "shitey",
            "shitfuck",
            "shitfull",
            "shithead",
            "shiting",
            "shitings",
            "shits",
            "shitted",
            "shitter",
            "shitters",
            "shitting",
            "shittings",
            "shitty",
            "skank",
            "slut",
            "sluts",
            "smegma",
            "smut",
            "snatch",
            "son-of-a-bitch",
            "spac",
            "spunk",
            "s_h_i_t",
            "t1tt1e5",
            "t1tties",
            "teets",
            "teez",
            "testical",
            "testicle",
            "tit",
            "titfuck",
            "tits",
            "titt",
            "tittie5",
            "tittiefucker",
            "titties",
            "tittyfuck",
            "tittywank",
            "titwank",
            "tosser",
            "turd",
            "tw4t",
            "twat",
            "twathead",
            "twatty",
            "twunt",
            "twunter",
            "v14gra",
            "v1gra",
            "vagina",
            "viagra",
            "vulva",
            "w00se",
            "wang",
            "wank",
            "wanker",
            "wanky",
            "whoar",
            "whore",
            "willies",
            "willy",
            "xrated",
            "xxx",
        ];
    },
    function(e, t) {
        e.exports =
            /\b(4r5e|5h1t|5hit|a55|anal|anus|ar5e|arrse|arse|ass|ass-fucker|asses|assfucker|assfukka|asshole|assholes|asswhole|a_s_s|b!tch|b00bs|b17ch|b1tch|ballbag|balls|ballsack|bastard|beastial|beastiality|bellend|bestial|bestiality|bi\+ch|biatch|bitch|bitcher|bitchers|bitches|bitchin|bitching|bloody|blow job|blowjob|blowjobs|boiolas|bollock|bollok|boner|boob|boobs|booobs|boooobs|booooobs|booooooobs|breasts|buceta|bugger|bum|bunny fucker|butt|butthole|buttmuch|buttplug|c0ck|c0cksucker|carpet muncher|cawk|chink|cipa|cl1t|clit|clitoris|clits|cnut|cock|cock-sucker|cockface|cockhead|cockmunch|cockmuncher|cocks|cocksuck|cocksucked|cocksucker|cocksucking|cocksucks|cocksuka|cocksukka|cok|cokmuncher|coksucka|coon|cox|crap|cum|cummer|cumming|cums|cumshot|cunilingus|cunillingus|cunnilingus|cunt|cuntlick|cuntlicker|cuntlicking|cunts|cyalis|cyberfuc|cyberfuck|cyberfucked|cyberfucker|cyberfuckers|cyberfucking|d1ck|damn|dick|dickhead|dildo|dildos|dink|dinks|dirsa|dlck|dog-fucker|doggin|dogging|donkeyribber|doosh|duche|dyke|ejaculate|ejaculated|ejaculates|ejaculating|ejaculatings|ejaculation|ejakulate|f u c k|f u c k e r|f4nny|fag|fagging|faggitt|faggot|faggs|fagot|fagots|fags|fanny|fannyflaps|fannyfucker|fanyy|fatass|fcuk|fcuker|fcuking|feck|fecker|felching|fellate|fellatio|fingerfuck|fingerfucked|fingerfucker|fingerfuckers|fingerfucking|fingerfucks|fistfuck|fistfucked|fistfucker|fistfuckers|fistfucking|fistfuckings|fistfucks|flange|fook|fooker|fuck|fucka|fucked|fucker|fuckers|fuckhead|fuckheads|fuckin|fucking|fuckings|fuckingshitmotherfucker|fuckme|fucks|fuckwhit|fuckwit|fudge packer|fudgepacker|fuk|fuker|fukker|fukkin|fuks|fukwhit|fukwit|fux|fux0r|f_u_c_k|gangbang|gangbanged|gangbangs|gaylord|gaysex|goatse|God|god-dam|god-damned|goddamn|goddamned|hardcoresex|hell|heshe|hoar|hoare|hoer|homo|hore|horniest|horny|hotsex|jack-off|jackoff|jap|jerk-off|jism|jiz|jizm|jizz|kawk|knob|knobead|knobed|knobend|knobhead|knobjocky|knobjokey|kock|kondum|kondums|kum|kummer|kumming|kums|kunilingus|l3i\+ch|l3itch|labia|lust|lusting|m0f0|m0fo|m45terbate|ma5terb8|ma5terbate|masochist|master-bate|masterb8|masterbat*|masterbat3|masterbate|masterbation|masterbations|masturbate|mo-fo|mof0|mofo|mothafuck|mothafucka|mothafuckas|mothafuckaz|mothafucked|mothafucker|mothafuckers|mothafuckin|mothafucking|mothafuckings|mothafucks|mother fucker|motherfuck|motherfucked|motherfucker|motherfuckers|motherfuckin|motherfucking|motherfuckings|motherfuckka|motherfucks|muff|mutha|muthafecker|muthafuckker|muther|mutherfucker|n1gga|n1gger|nazi|nigg3r|nigg4h|nigga|niggah|niggas|niggaz|nigger|niggers|nob|nob jokey|nobhead|nobjocky|nobjokey|numbnuts|nutsack|orgasim|orgasims|orgasm|orgasms|p0rn|pawn|pecker|penis|penisfucker|phonesex|phuck|phuk|phuked|phuking|phukked|phukking|phuks|phuq|pigfucker|pimpis|piss|pissed|pisser|pissers|pisses|pissflaps|pissin|pissing|pissoff|poop|porn|porno|pornography|pornos|prick|pricks|pron|pube|pusse|pussi|pussies|pussy|pussys|rectum|retard|rimjaw|rimming|s hit|s.o.b.|sadist|schlong|screwing|scroat|scrote|scrotum|semen|sex|sh!\+|sh!t|sh1t|shag|shagger|shaggin|shagging|shemale|shi\+|shit|shitdick|shite|shited|shitey|shitfuck|shitfull|shithead|shiting|shitings|shits|shitted|shitter|shitters|shitting|shittings|shitty|skank|slut|sluts|smegma|smut|snatch|son-of-a-bitch|spac|spunk|s_h_i_t|t1tt1e5|t1tties|teets|teez|testical|testicle|tit|titfuck|tits|titt|tittie5|tittiefucker|titties|tittyfuck|tittywank|titwank|tosser|turd|tw4t|twat|twathead|twatty|twunt|twunter|v14gra|v1gra|vagina|viagra|vulva|w00se|wang|wank|wanker|wanky|whoar|whore|willies|willy|xrated|xxx)\b/gi;
    },
    function(e, t) {
        (e.exports.hats = [{
            id: 45,
            name: "Shame!",
            dontSell: !0,
            price: 0,
            scale: 120,
            desc: "hacks are for losers",
        },
                           {
                               id: 51,
                               name: "Moo Cap",
                               price: 0,
                               scale: 120,
                               desc: "coolest mooer around",
                           },
                           {
                               id: 50,
                               name: "Apple Cap",
                               price: 0,
                               scale: 120,
                               desc: "apple farms remembers",
                           },
                           {
                               id: 28,
                               name: "Moo Head",
                               price: 0,
                               scale: 120,
                               desc: "no effect"
                           },
                           {
                               id: 29,
                               name: "Pig Head",
                               price: 0,
                               scale: 120,
                               desc: "no effect"
                           },
                           {
                               id: 30,
                               name: "Fluff Head",
                               price: 0,
                               scale: 120,
                               desc: "no effect"
                           },
                           {
                               id: 36,
                               name: "Pandou Head",
                               price: 0,
                               scale: 120,
                               desc: "no effect"
                           },
                           {
                               id: 37,
                               name: "Bear Head",
                               price: 0,
                               scale: 120,
                               desc: "no effect"
                           },
                           {
                               id: 38,
                               name: "Monkey Head",
                               price: 0,
                               scale: 120,
                               desc: "no effect"
                           },
                           {
                               id: 44,
                               name: "Polar Head",
                               price: 0,
                               scale: 120,
                               desc: "no effect"
                           },
                           {
                               id: 35,
                               name: "Fez Hat",
                               price: 0,
                               scale: 120,
                               desc: "no effect"
                           },
                           {
                               id: 42,
                               name: "Enigma Hat",
                               price: 0,
                               scale: 120,
                               desc: "join the enigma army",
                           },
                           {
                               id: 43,
                               name: "Blitz Hat",
                               price: 0,
                               scale: 120,
                               desc: "hey everybody i'm blitz",
                           },
                           {
                               id: 49,
                               name: "Bob XIII Hat",
                               price: 0,
                               scale: 120,
                               desc: "like and subscribe",
                           },
                           {
                               id: 57,
                               name: "Pumpkin",
                               price: 50,
                               scale: 120,
                               desc: "Spooooky"
                           },
                           {
                               id: 8,
                               name: "Bummle Hat",
                               price: 100,
                               scale: 120,
                               desc: "no effect"
                           },
                           {
                               id: 2,
                               name: "Straw Hat",
                               price: 500,
                               scale: 120,
                               desc: "no effect"
                           },
                           {
                               id: 15,
                               name: "Winter Cap",
                               price: 600,
                               scale: 120,
                               desc: "allows you to move at normal speed in snow",
                               coldM: 1,
                           },
                           {
                               id: 5,
                               name: "Cowboy Hat",
                               price: 1e3,
                               scale: 120,
                               desc: "no effect"
                           },
                           {
                               id: 4,
                               name: "Ranger Hat",
                               price: 2e3,
                               scale: 120,
                               desc: "no effect"
                           },
                           {
                               id: 18,
                               name: "Explorer Hat",
                               price: 2e3,
                               scale: 120,
                               desc: "no effect",
                           },
                           {
                               id: 31,
                               name: "Flipper Hat",
                               price: 2500,
                               scale: 120,
                               desc: "have more control while in water",
                               watrImm: !0,
                           },
                           {
                               id: 1,
                               name: "Marksman Cap",
                               price: 3e3,
                               scale: 120,
                               desc: "increases arrow speed and range",
                               aMlt: 1.3,
                           },
                           {
                               id: 10,
                               name: "Bush Gear",
                               price: 3e3,
                               scale: 160,
                               desc: "allows you to disguise yourself as a bush",
                           },
                           {
                               id: 48,
                               name: "Halo",
                               price: 3e3,
                               scale: 120,
                               desc: "no effect"
                           },
                           {
                               id: 6,
                               name: "Soldier Helmet",
                               price: 4e3,
                               scale: 120,
                               desc: "reduces damage taken but slows movement",
                               spdMult: 0.94,
                               dmgMult: 0.75,
                           },
                           {
                               id: 23,
                               name: "Anti Venom Gear",
                               price: 4e3,
                               scale: 120,
                               desc: "makes you immune to poison",
                               poisonRes: 1,
                           },
                           {
                               id: 13,
                               name: "Medic Gear",
                               price: 5e3,
                               scale: 110,
                               desc: "slowly regenerates health over time",
                               healthRegen: 3,
                           },
                           {
                               id: 9,
                               name: "Miners Helmet",
                               price: 5e3,
                               scale: 120,
                               desc: "earn 1 extra gold per resource",
                               extraGold: 1,
                           },
                           {
                               id: 32,
                               name: "Musketeer Hat",
                               price: 5e3,
                               scale: 120,
                               desc: "reduces cost of projectiles",
                               projCost: 0.5,
                           },
                           {
                               id: 7,
                               name: "Bull Helmet",
                               price: 6e3,
                               scale: 120,
                               desc: "increases damage done but drains health",
                               healthRegen: -5,
                               dmgMultO: 1.5,
                               spdMult: 0.96,
                           },
                           {
                               id: 22,
                               name: "Emp Helmet",
                               price: 6e3,
                               scale: 120,
                               desc: "turrets won't attack but you move slower",
                               antiTurret: 1,
                               spdMult: 0.7,
                           },
                           {
                               id: 12,
                               name: "Booster Hat",
                               price: 6e3,
                               scale: 120,
                               desc: "increases your movement speed",
                               spdMult: 1.16,
                           },
                           {
                               id: 26,
                               name: "Barbarian Armor",
                               price: 8e3,
                               scale: 120,
                               desc: "knocks back enemies that attack you",
                               dmgK: 0.6,
                           },
                           {
                               id: 21,
                               name: "Plague Mask",
                               price: 1e4,
                               scale: 120,
                               desc: "melee attacks deal poison damage",
                               poisonDmg: 5,
                               poisonTime: 6,
                           },
                           {
                               id: 46,
                               name: "Bull Mask",
                               price: 1e4,
                               scale: 120,
                               desc: "bulls won't target you unless you attack them",
                               bullRepel: 1,
                           },
                           {
                               id: 14,
                               name: "Windmill Hat",
                               topSprite: !0,
                               price: 1e4,
                               scale: 120,
                               desc: "generates points while worn",
                               pps: 1.5,
                           },
                           {
                               id: 11,
                               name: "Spike Gear",
                               topSprite: !0,
                               price: 1e4,
                               scale: 120,
                               desc: "deal damage to players that damage you",
                               dmg: 0.45,
                           },
                           {
                               id: 53,
                               name: "Turret Gear",
                               topSprite: !0,
                               price: 1e4,
                               scale: 120,
                               desc: "you become a walking turret",
                               turret: {
                                   proj: 1,
                                   range: 700,
                                   rate: 2500
                               },
                               spdMult: 0.7,
                           },
                           {
                               id: 20,
                               name: "Samurai Armor",
                               price: 12e3,
                               scale: 120,
                               desc: "increased attack speed and fire rate",
                               atkSpd: 0.78,
                           },
                           {
                               id: 58,
                               name: "Dark Knight",
                               price: 12e3,
                               scale: 120,
                               desc: "restores health when you deal damage",
                               healD: 0.4,
                           },
                           {
                               id: 27,
                               name: "Scavenger Gear",
                               price: 15e3,
                               scale: 120,
                               desc: "earn double points for each kill",
                               kScrM: 2,
                           },
                           {
                               id: 40,
                               name: "Tank Gear",
                               price: 15e3,
                               scale: 120,
                               desc: "increased damage to buildings but slower movement",
                               spdMult: 0.3,
                               bDmg: 3.3,
                           },
                           {
                               id: 52,
                               name: "Thief Gear",
                               price: 15e3,
                               scale: 120,
                               desc: "steal half of a players gold when you kill them",
                               goldSteal: 0.5,
                           },
                           {
                               id: 55,
                               name: "Bloodthirster",
                               price: 2e4,
                               scale: 120,
                               desc: "Restore Health when dealing damage. And increased damage",
                               healD: 0.25,
                               dmgMultO: 1.2,
                           },
                           {
                               id: 56,
                               name: "Assassin Gear",
                               price: 2e4,
                               scale: 120,
                               desc: "Go invisible when not moving. Can't eat. Increased speed",
                               noEat: !0,
                               spdMult: 1.1,
                               invisTimer: 1e3,
                           },
                          ]),
            (e.exports.accessories = [{
                id: 12,
                name: "Snowball",
                price: 1e3,
                scale: 105,
                xOff: 18,
                desc: "no effect",
            },
                                      {
                                          id: 9,
                                          name: "Tree Cape",
                                          price: 1e3,
                                          scale: 90,
                                          desc: "no effect"
                                      },
                                      {
                                          id: 10,
                                          name: "Stone Cape",
                                          price: 1e3,
                                          scale: 90,
                                          desc: "no effect",
                                      },
                                      {
                                          id: 3,
                                          name: "Cookie Cape",
                                          price: 1500,
                                          scale: 90,
                                          desc: "no effect",
                                      },
                                      {
                                          id: 8,
                                          name: "Cow Cape",
                                          price: 2e3,
                                          scale: 90,
                                          desc: "no effect"
                                      },
                                      {
                                          id: 11,
                                          name: "Monkey Tail",
                                          price: 2e3,
                                          scale: 97,
                                          xOff: 25,
                                          desc: "Super speed but reduced damage",
                                          spdMult: 1.35,
                                          dmgMultO: 0.2,
                                      },
                                      {
                                          id: 17,
                                          name: "Apple Basket",
                                          price: 3e3,
                                          scale: 80,
                                          xOff: 12,
                                          desc: "slowly regenerates health over time",
                                          healthRegen: 1,
                                      },
                                      {
                                          id: 6,
                                          name: "Winter Cape",
                                          price: 3e3,
                                          scale: 90,
                                          desc: "no effect",
                                      },
                                      {
                                          id: 4,
                                          name: "Skull Cape",
                                          price: 4e3,
                                          scale: 90,
                                          desc: "no effect"
                                      },
                                      {
                                          id: 5,
                                          name: "Dash Cape",
                                          price: 5e3,
                                          scale: 90,
                                          desc: "no effect"
                                      },
                                      {
                                          id: 2,
                                          name: "Dragon Cape",
                                          price: 6e3,
                                          scale: 90,
                                          desc: "no effect",
                                      },
                                      {
                                          id: 1,
                                          name: "Super Cape",
                                          price: 8e3,
                                          scale: 90,
                                          desc: "no effect"
                                      },
                                      {
                                          id: 7,
                                          name: "Troll Cape",
                                          price: 8e3,
                                          scale: 90,
                                          desc: "no effect"
                                      },
                                      {
                                          id: 14,
                                          name: "Thorns",
                                          price: 1e4,
                                          scale: 115,
                                          xOff: 20,
                                          desc: "no effect",
                                      },
                                      {
                                          id: 15,
                                          name: "Blockades",
                                          price: 1e4,
                                          scale: 95,
                                          xOff: 15,
                                          desc: "no effect",
                                      },
                                      {
                                          id: 20,
                                          name: "Devils Tail",
                                          price: 1e4,
                                          scale: 95,
                                          xOff: 20,
                                          desc: "no effect",
                                      },
                                      {
                                          id: 16,
                                          name: "Sawblade",
                                          price: 12e3,
                                          scale: 90,
                                          spin: !0,
                                          xOff: 0,
                                          desc: "deal damage to players that damage you",
                                          dmg: 0.15,
                                      },
                                      {
                                          id: 13,
                                          name: "Angel Wings",
                                          price: 15e3,
                                          scale: 138,
                                          xOff: 22,
                                          desc: "slowly regenerates health over time",
                                          healthRegen: 3,
                                      },
                                      {
                                          id: 19,
                                          name: "Shadow Wings",
                                          price: 15e3,
                                          scale: 138,
                                          xOff: 22,
                                          desc: "increased movement speed",
                                          spdMult: 1.1,
                                      },
                                      {
                                          id: 18,
                                          name: "Blood Wings",
                                          price: 2e4,
                                          scale: 178,
                                          xOff: 26,
                                          desc: "restores health when you deal damage",
                                          healD: 0.2,
                                      },
                                      {
                                          id: 21,
                                          name: "Corrupt X Wings",
                                          price: 2e4,
                                          scale: 178,
                                          xOff: 26,
                                          desc: "deal damage to players that damage you",
                                          dmg: 0.25,
                                      },
                                     ]);
    },
    function(e, t) {
        e.exports = function(e, t, n, i, r, s, a) {
            this.init = function(e, t, n, i, r, s, o, c, l) {
                (this.active = !0),
                    (this.indx = e),
                    (this.x = t),
                    (this.y = n),
                    (this.dir = i),
                    (this.skipMov = !0),
                    (this.speed = r),
                    (this.dmg = s),
                    (this.scale = c),
                    (this.range = o),
                    (this.owner = l),
                    a && (this.sentTo = {});
            };
            var o,
                c = [];
            this.update = function(l) {
                if (this.active) {
                    var h,
                        u = this.speed * l;
                    if (
                        (this.skipMov ?
                         (this.skipMov = !1) :
                         ((this.x += u * Math.cos(this.dir)),
                          (this.y += u * Math.sin(this.dir)),
                          (this.range -= u),
                          this.range <= 0 &&
                          ((this.x += this.range * Math.cos(this.dir)),
                           (this.y += this.range * Math.sin(this.dir)),
                           (u = 1),
                           (this.range = 0),
                           (this.active = !1))),
                         a)
                    ) {
                        for (var f = 0; f < e.length; ++f)
                            !this.sentTo[e[f].id] &&
                                e[f].canSee(this) &&
                                ((this.sentTo[e[f].id] = 1),
                                 a.send(
                                e[f].id,
                                "18",
                                s.fixTo(this.x, 1),
                                s.fixTo(this.y, 1),
                                s.fixTo(this.dir, 2),
                                s.fixTo(this.range, 1),
                                this.speed,
                                this.indx,
                                this.layer,
                                this.sid,
                            ));
                        for (c.length = 0, f = 0; f < e.length + t.length; ++f)
                            !(o = e[f] || t[f - e.length]).alive ||
                                o == this.owner ||
                                (this.owner.team && o.team == this.owner.team) ||
                                (s.lineInRect(
                                o.x - o.scale,
                                o.y - o.scale,
                                o.x + o.scale,
                                o.y + o.scale,
                                this.x,
                                this.y,
                                this.x + u * Math.cos(this.dir),
                                this.y + u * Math.sin(this.dir),
                            ) &&
                                 c.push(o));
                        for (
                            var d = n.getGridArrays(this.x, this.y, this.scale), p = 0; p < d.length;
                            ++p
                        )
                            for (var g = 0; g < d[p].length; ++g)
                                (h = (o = d[p][g]).getScale()),
                                    o.active &&
                                    this.ignoreObj != o.sid &&
                                    this.layer <= o.layer &&
                                    c.indexOf(o) < 0 &&
                                    !o.ignoreCollision &&
                                    s.lineInRect(
                                    o.x - h,
                                    o.y - h,
                                    o.x + h,
                                    o.y + h,
                                    this.x,
                                    this.y,
                                    this.x + u * Math.cos(this.dir),
                                    this.y + u * Math.sin(this.dir),
                                ) &&
                                    c.push(o);
                        if (c.length > 0) {
                            var m = null,
                                y = null,
                                k = null;
                            for (f = 0; f < c.length; ++f)
                                (k = s.getDistance(this.x, this.y, c[f].x, c[f].y)),
                                    (null == y || k < y) && ((y = k), (m = c[f]));
                            if (m.isPlayer || m.isAI) {
                                var v = 0.3 * (m.weightM || 1);
                                (m.xVel += v * Math.cos(this.dir)),
                                    (m.yVel += v * Math.sin(this.dir)),
                                    (null != m.weaponIndex &&
                                     i.weapons[m.weaponIndex].shield &&
                                     s.getAngleDist(this.dir + Math.PI, m.dir) <=
                                     r.shieldAngle) ||
                                    m.changeHealth(-this.dmg, this.owner, this.owner);
                            } else
                                for (
                                    m.projDmg &&
                                    m.health &&
                                    m.changeHealth(-this.dmg) &&
                                    n.disableObj(m),
                                    f = 0; f < e.length;
                                    ++f
                                )
                                    e[f].active &&
                                        (m.sentTo[e[f].id] &&
                                         (m.active ?
                                          e[f].canSee(m) &&
                                          a.send(e[f].id, "8", s.fixTo(this.dir, 2), m.sid) :
                                          a.send(e[f].id, "12", m.sid)),
                                         m.active ||
                                         m.owner != e[f] ||
                                         e[f].changeItemCount(m.group.id, -1));
                            for (this.active = !1, f = 0; f < e.length; ++f)
                                this.sentTo[e[f].id] &&
                                    a.send(e[f].id, "19", this.sid, s.fixTo(y, 1));
                        }
                    }
                }
            };
        };
    },
    function(e, t) {
        e.exports = function(e, t, n, i, r, s, a, o, c) {
            this.addProjectile = function(l, h, u, f, d, p, g, m, y) {
                for (var k, v = s.projectiles[p], w = 0; w < t.length; ++w)
                    if (!t[w].active) {
                        k = t[w];
                        break;
                    }
                return (
                    k || (((k = new e(n, i, r, s, a, o, c)).sid = t.length), t.push(k)),
                    k.init(p, l, h, u, d, v.dmg, f, v.scale, g),
                    (k.ignoreObj = m),
                    (k.layer = y || v.layer),
                    (k.src = v.src),
                    k
                );
            };
        };
    },
    function(e, t) {
        e.exports.obj = function(e, t) {
            var n;
            (this.sounds = []),
                (this.active = !0),
                (this.play = function(t, i, r) {
                i &&
                    this.active &&
                    ((n = this.sounds[t]) ||
                     ((n = new Howl({
                    src: ".././sound/" + t + ".mp3"
                })),
                      (this.sounds[t] = n)),
                     (r && n.isPlaying) ||
                     ((n.isPlaying = !0),
                      n.play(),
                      n.volume((i || 1) * e.volumeMult),
                      n.loop(r)));
            }),
                (this.toggleMute = function(e, t) {
                (n = this.sounds[e]) && n.mute(t);
            }),
                (this.stop = function(e) {
                (n = this.sounds[e]) && (n.stop(), (n.isPlaying = !1));
            });
        };
    },
    function(e, t, n) {
        var i = n(60),
            r = n(67);

        function s(e, t, n, i, r) {
            "localhost" == location.hostname &&
                (window.location.hostname = "127.0.0.1"),
                (this.debugLog = !1),
                (this.baseUrl = e),
                (this.lobbySize = n),
                (this.devPort = t),
                (this.lobbySpread = i),
                (this.rawIPs = !!r),
                (this.server = void 0),
                (this.gameIndex = void 0),
                (this.callback = void 0),
                (this.errorCallback = void 0),
                this.processServers(vultr.servers);
        }
        (s.prototype.regionInfo = {
            0: {
                name: "Local",
                latitude: 0,
                longitude: 0
            },
            "vultr:1": {
                name: "New Jersey",
                latitude: 40.1393329,
                longitude: -75.8521818,
            },
            "vultr:2": {
                name: "Chicago",
                latitude: 41.8339037,
                longitude: -87.872238,
            },
            "vultr:3": {
                name: "Dallas",
                latitude: 32.8208751,
                longitude: -96.8714229,
            },
            "vultr:4": {
                name: "Seattle",
                latitude: 47.6149942,
                longitude: -122.4759879,
            },
            "vultr:5": {
                name: "Los Angeles",
                latitude: 34.0207504,
                longitude: -118.691914,
            },
            "vultr:6": {
                name: "Atlanta",
                latitude: 33.7676334,
                longitude: -84.5610332,
            },
            "vultr:7": {
                name: "Amsterdam",
                latitude: 52.3745287,
                longitude: 4.7581878,
            },
            "vultr:8": {
                name: "London",
                latitude: 51.5283063,
                longitude: -0.382486
            },
            "vultr:9": {
                name: "Frankfurt",
                latitude: 50.1211273,
                longitude: 8.496137,
            },
            "vultr:12": {
                name: "Silicon Valley",
                latitude: 37.4024714,
                longitude: -122.3219752,
            },
            "vultr:19": {
                name: "Sydney",
                latitude: -33.8479715,
                longitude: 150.651084,
            },
            "vultr:24": {
                name: "Paris",
                latitude: 48.8588376,
                longitude: 2.2773454
            },
            "vultr:25": {
                name: "Tokyo",
                latitude: 35.6732615,
                longitude: 139.569959,
            },
            "vultr:39": {
                name: "Miami",
                latitude: 25.7823071,
                longitude: -80.3012156,
            },
            "vultr:40": {
                name: "Singapore",
                latitude: 1.3147268,
                longitude: 103.7065876,
            },
        }),
            (s.prototype.start = function(e, t) {
            (this.callback = e), (this.errorCallback = t);
            var n = this.parseServerQuery();
            n
                ?
                (this.log("Found server in query."),
                 (this.password = n[3]),
                 this.connect(n[0], n[1], n[2])) :
            (this.log("Pinging servers..."), this.pingServers());
        }),
            (s.prototype.parseServerQuery = function() {
            var e = i.parse(location.href, !0),
                t = e.query.server;
            if ("string" == typeof t) {
                var n = t.split(":");
                if (3 == n.length) {
                    var r = n[0],
                        s = parseInt(n[1]),
                        a = parseInt(n[2]);
                    return (
                        "0" == r || r.startsWith("vultr:") || (r = "vultr:" + r),
                        [r, s, a, e.query.password]
                    );
                }
                this.errorCallback("Invalid number of server parameters in " + t);
            }
        }),
            (s.prototype.findServer = function(e, t) {
            var n = this.servers[e];
            if (Array.isArray(n)) {
                for (var i = 0; i < n.length; i++) {
                    var r = n[i];
                    if (r.index == t) return r;
                }
                console.warn(
                    "Could not find server in region " + e + " with index " + t + ".",
                );
            } else this.errorCallback("No server list for region " + e);
        }),
            (s.prototype.pingServers = function() {
            var e = this,
                t = [];
            for (var n in this.servers)
                if (this.servers.hasOwnProperty(n)) {
                    var i = this.servers[n],
                        r = i[Math.floor(Math.random() * i.length)];
                    null != r ?
                        (function(i, r) {
                        var s = new XMLHttpRequest();
                        s.onreadystatechange = function(i) {
                            var s = i.target;
                            if (4 == s.readyState)
                                if (200 == s.status) {
                                    for (var a = 0; a < t.length; a++) t[a].abort();
                                    e.log("Connecting to region", r.region);
                                    var o = e.seekServer(r.region);
                                    e.connect(o[0], o[1], o[2]);
                                } else
                                    console.warn(
                                        "Error pinging " + r.ip + " in region " + n,
                                    );
                        };
                        var a =
                            "//" +
                            e.serverAddress(r.ip, !0) +
                            ":" +
                            e.serverPort(r) +
                            "/ping";
                        s.open("GET", a, !0),
                            s.send(null),
                            e.log("Pinging", a),
                            t.push(s);
                    })(0, r) :
                    console.log("No target server for region " + n);
                }
        }),
            (s.prototype.seekServer = function(e, t, n) {
            null == n && (n = "random"), null == t && (t = !1);
            const i = ["random"];
            var r = this.lobbySize,
                s = this.lobbySpread,
                a = this.servers[e]
            .flatMap(function(e) {
                var t = 0;
                return e.games.map(function(n) {
                    var i = t++;
                    return {
                        region: e.region,
                        index: e.index * e.games.length + i,
                        gameIndex: i,
                        gameCount: e.games.length,
                        playerCount: n.playerCount,
                        isPrivate: n.isPrivate,
                    };
                });
            })
            .filter(function(e) {
                return !e.isPrivate;
            })
            .filter(function(e) {
                return (
                    !t || (0 == e.playerCount && e.gameIndex >= e.gameCount / 2)
                );
            })
            .filter(function(e) {
                return "random" == n || i[e.index % i.length].key == n;
            })
            .sort(function(e, t) {
                return t.playerCount - e.playerCount;
            })
            .filter(function(e) {
                return e.playerCount < r;
            });
            if ((t && a.reverse(), 0 != a.length)) {
                var o = Math.min(s, a.length),
                    c = Math.floor(Math.random() * o),
                    l = a[(c = Math.min(c, a.length - 1))],
                    h = l.region,
                    u =
                    ((c = Math.floor(l.index / l.gameCount)), l.index % l.gameCount);
                return this.log("Found server."), [h, c, u];
            }
            this.errorCallback("No open servers.");
        }),
            (s.prototype.connect = function(e, t, n) {
            if (!this.connected) {
                var i = this.findServer(e, t);
                null != i ?
                    (this.log("Connecting to server", i, "with game index", n),
                     i.games[n].playerCount >= this.lobbySize ?
                     this.errorCallback("Server is already full.") :
                     (window.history.replaceState(
                    document.title,
                    document.title,
                    this.generateHref(e, t, n, this.password),
                ),
                      (this.server = i),
                      (this.gameIndex = n),
                      this.log(
                    "Calling callback with address",
                    this.serverAddress(i.ip),
                    "on port",
                    this.serverPort(i),
                    "with game index",
                    n,
                ),
                      this.callback(
                    this.serverAddress(i.ip),
                    this.serverPort(i),
                    n,
                ))) :
                this.errorCallback(
                    "Failed to find server for region " + e + " and index " + t,
                );
            }
        }),
            (s.prototype.switchServer = function(e, t, n, i) {
            (this.switchingServers = !0),
                (window.location.href = this.generateHref(e, t, n, i));
        }),
            (s.prototype.generateHref = function(e, t, n, i) {
            var r = "/?server=" + (e = this.stripRegion(e)) + ":" + t + ":" + n;
            return i && (r += "&password=" + encodeURIComponent(i)), r;
        }),
            (s.prototype.serverAddress = function(e, t) {
            return "127.0.0.1" == e ||
                "7f000001" == e ||
                "903d62ef5d1c2fecdcaeb5e7dd485eff" == e ?
                window.location.hostname :
            this.rawIPs ?
                t ?
                "ip_" + this.hashIP(e) + "." + this.baseUrl :
            e :
            "ip_" + e + "." + this.baseUrl;
        }),
            (s.prototype.serverPort = function(e) {
            return 0 == e.region ?
                this.devPort :
            location.protocol.startsWith("https") ?
                443 :
            80;
        }),
            (s.prototype.processServers = function(e) {
            for (var t = {}, n = 0; n < e.length; n++) {
                var i = e[n],
                    r = t[i.region];
                null == r && ((r = []), (t[i.region] = r)), r.push(i);
            }
            for (var s in t)
                t[s] = t[s].sort(function(e, t) {
                    return e.index - t.index;
                });
            this.servers = t;
        }),
            (s.prototype.ipToHex = function(e) {
            return e
                .split(".")
                .map((e) => ("00" + parseInt(e).toString(16)).substr(-2))
                .join("")
                .toLowerCase();
        }),
            (s.prototype.hashIP = function(e) {
            return r(this.ipToHex(e));
        }),
            (s.prototype.log = function() {
            return this.debugLog ?
                console.log.apply(void 0, arguments) :
            console.verbose ?
                console.verbose.apply(void 0, arguments) :
            void 0;
        }),
            (s.prototype.stripRegion = function(e) {
            return (
                e.startsWith("vultr:") ?
                (e = e.slice(6)) :
                e.startsWith("do:") && (e = e.slice(3)),
                e
            );
        }),
            (window.testVultrClient = function() {
            var e = 1;

            function t(t, n) {
                (t = "" + t) == (n = "" + n) ?
                    console.log(`Assert ${e} passed.`): console.warn(`Assert ${e} failed. Expected ${n}, got ${t}.`),
                    e++;
            }
            var n = new s("test.io", -1, 5, 1, !1);
            (n.errorCallback = function(e) {}),
                n.processServers(
                (function(e) {
                    var t = [];
                    for (var n in e)
                        for (var i = e[n], r = 0; r < i.length; r++)
                            t.push({
                                ip: n + ":" + r,
                                scheme: "testing",
                                region: n,
                                index: r,
                                games: i[r].map((e) => ({
                                    playerCount: e,
                                    isPrivate: !1
                                })),
                            });
                    return t;
                })({
                    1: [
                        [0, 0, 0, 0],
                        [0, 0, 0, 0],
                    ],
                    2: [
                        [5, 1, 0, 0],
                        [0, 0, 0, 0],
                    ],
                    3: [
                        [5, 0, 1, 5],
                        [0, 0, 0, 0],
                    ],
                    4: [
                        [5, 1, 1, 5],
                        [1, 0, 0, 0],
                    ],
                    5: [
                        [5, 1, 1, 5],
                        [1, 0, 4, 0],
                    ],
                    6: [
                        [5, 5, 5, 5],
                        [2, 3, 1, 4],
                    ],
                    7: [
                        [5, 5, 5, 5],
                        [5, 5, 5, 5],
                    ],
                }),
            ),
                t(n.seekServer(1, !1), [1, 0, 0]),
                t(n.seekServer(1, !0), [1, 1, 3]),
                t(n.seekServer(2, !1), [2, 0, 1]),
                t(n.seekServer(2, !0), [2, 1, 3]),
                t(n.seekServer(3, !1), [3, 0, 2]),
                t(n.seekServer(3, !0), [3, 1, 3]),
                t(n.seekServer(4, !1), [4, 0, 1]),
                t(n.seekServer(4, !0), [4, 1, 3]),
                t(n.seekServer(5, !1), [5, 1, 2]),
                t(n.seekServer(5, !0), [5, 1, 3]),
                t(n.seekServer(6, !1), [6, 1, 3]),
                t(n.seekServer(6, !0), void 0),
                t(n.seekServer(7, !1), void 0),
                t(n.seekServer(7, !0), void 0),
                console.log("Tests passed.");
        });
        var a = function(e, t) {
            return e.concat(t);
        };
        (Array.prototype.flatMap = function(e) {
            return (function(e, t) {
                return t.map(e).reduce(a, []);
            })(e, this);
        }),
            (e.exports = s);
    },
    function(e, t, n) {
        "use strict";
        var i = n(61),
            r = n(63);

        function s() {
            (this.protocol = null),
                (this.slashes = null),
                (this.auth = null),
                (this.host = null),
                (this.port = null),
                (this.hostname = null),
                (this.hash = null),
                (this.search = null),
                (this.query = null),
                (this.pathname = null),
                (this.path = null),
                (this.href = null);
        }
        (t.parse = v),
            (t.resolve = function(e, t) {
            return v(e, !1, !0).resolve(t);
        }),
            (t.resolveObject = function(e, t) {
            return e ? v(e, !1, !0).resolveObject(t) : t;
        }),
            (t.format = function(e) {
            return (
                r.isString(e) && (e = v(e)),
                e instanceof s ? e.format() : s.prototype.format.call(e)
            );
        }),
            (t.Url = s);
        var a = /^([a-z0-9.+-]+:)/i,
            o = /:[0-9]*$/,
            c = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
            l = ["{", "}", "|", "\\", "^", "`"].concat([
                "<",
                ">",
                '"',
                "`",
                " ",
                "\r",
                "\n",
                "\t",
            ]),
            h = ["'"].concat(l),
            u = ["%", "/", "?", ";", "#"].concat(h),
            f = ["/", "?", "#"],
            d = /^[+a-z0-9A-Z_-]{0,63}$/,
            p = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
            g = {
                javascript: !0,
                "javascript:": !0
            },
            m = {
                javascript: !0,
                "javascript:": !0
            },
            y = {
                http: !0,
                https: !0,
                ftp: !0,
                gopher: !0,
                file: !0,
                "http:": !0,
                "https:": !0,
                "ftp:": !0,
                "gopher:": !0,
                "file:": !0,
            },
            k = n(64);

        function v(e, t, n) {
            if (e && r.isObject(e) && e instanceof s) return e;
            var i = new s();
            return i.parse(e, t, n), i;
        }
        (s.prototype.parse = function(e, t, n) {
            if (!r.isString(e))
                throw new TypeError(
                    "Parameter 'url' must be a string, not " + typeof e,
                );
            var s = e.indexOf("?"),
                o = -1 !== s && s < e.indexOf("#") ? "?" : "#",
                l = e.split(o);
            l[0] = l[0].replace(/\\/g, "/");
            var v = (e = l.join(o));
            if (((v = v.trim()), !n && 1 === e.split("#").length)) {
                var w = c.exec(v);
                if (w)
                    return (
                        (this.path = v),
                        (this.href = v),
                        (this.pathname = w[1]),
                        w[2] ?
                        ((this.search = w[2]),
                         (this.query = t ?
                          k.parse(this.search.substr(1)) :
                          this.search.substr(1))) :
                        t && ((this.search = ""), (this.query = {})),
                        this
                    );
            }
            var b = a.exec(v);
            if (b) {
                var x = (b = b[0]).toLowerCase();
                (this.protocol = x), (v = v.substr(b.length));
            }
            if (n || b || v.match(/^\/\/[^@\/]+@[^@\/]+/)) {
                var S = "//" === v.substr(0, 2);
                !S || (b && m[b]) || ((v = v.substr(2)), (this.slashes = !0));
            }
            if (!m[b] && (S || (b && !y[b]))) {
                for (var T, I, E = -1, M = 0; M < f.length; M++)
                    -
                        1 !== (A = v.indexOf(f[M])) && (-1 === E || A < E) && (E = A);
                for (
                    -1 !== (I = -1 === E ? v.lastIndexOf("@") : v.lastIndexOf("@", E)) &&
                    ((T = v.slice(0, I)),
                     (v = v.slice(I + 1)),
                     (this.auth = decodeURIComponent(T))),
                    E = -1,
                    M = 0; M < u.length; M++
                ) {
                    var A; -
                        1 !== (A = v.indexOf(u[M])) && (-1 === E || A < E) && (E = A);
                } -
                    1 === E && (E = v.length),
                    (this.host = v.slice(0, E)),
                    (v = v.slice(E)),
                    this.parseHost(),
                    (this.hostname = this.hostname || "");
                var P =
                    "[" === this.hostname[0] &&
                    "]" === this.hostname[this.hostname.length - 1];
                if (!P)
                    for (
                        var B = this.hostname.split(/\./), C = ((M = 0), B.length); M < C; M++
                    ) {
                        var O = B[M];
                        if (O && !O.match(d)) {
                            for (var R = "", j = 0, _ = O.length; j < _; j++)
                                O.charCodeAt(j) > 127 ? (R += "x") : (R += O[j]);
                            if (!R.match(d)) {
                                var U = B.slice(0, M),
                                    D = B.slice(M + 1),
                                    L = O.match(p);
                                L && (U.push(L[1]), D.unshift(L[2])),
                                    D.length && (v = "/" + D.join(".") + v),
                                    (this.hostname = U.join("."));
                                break;
                            }
                        }
                    }
                this.hostname.length > 255 ?
                    (this.hostname = "") :
                (this.hostname = this.hostname.toLowerCase()),
                    P || (this.hostname = i.toASCII(this.hostname));
                var F = this.port ? ":" + this.port : "",
                    z = this.hostname || "";
                (this.host = z + F),
                    (this.href += this.host),
                    P &&
                    ((this.hostname = this.hostname.substr(
                    1,
                    this.hostname.length - 2,
                )),
                     "/" !== v[0] && (v = "/" + v));
            }
            if (!g[x])
                for (M = 0, C = h.length; M < C; M++) {
                    var H = h[M];
                    if (-1 !== v.indexOf(H)) {
                        var V = encodeURIComponent(H);
                        V === H && (V = escape(H)), (v = v.split(H).join(V));
                    }
                }
            var q = v.indexOf("#"); -
                1 !== q && ((this.hash = v.substr(q)), (v = v.slice(0, q)));
            var Y = v.indexOf("?");
            if (
                (-1 !== Y ?
                 ((this.search = v.substr(Y)),
                  (this.query = v.substr(Y + 1)),
                  t && (this.query = k.parse(this.query)),
                  (v = v.slice(0, Y))) :
                 t && ((this.search = ""), (this.query = {})),
                 v && (this.pathname = v),
                 y[x] && this.hostname && !this.pathname && (this.pathname = "/"),
                 this.pathname || this.search)
            ) {
                F = this.pathname || "";
                var W = this.search || "";
                this.path = F + W;
            }
            return (this.href = this.format()), this;
        }),
            (s.prototype.format = function() {
            var e = this.auth || "";
            e &&
                ((e = (e = encodeURIComponent(e)).replace(/%3A/i, ":")), (e += "@"));
            var t = this.protocol || "",
                n = this.pathname || "",
                i = this.hash || "",
                s = !1,
                a = "";
            this.host ?
                (s = e + this.host) :
            this.hostname &&
                ((s =
                  e +
                  (-1 === this.hostname.indexOf(":") ?
                   this.hostname :
                   "[" + this.hostname + "]")),
                 this.port && (s += ":" + this.port)),
                this.query &&
                r.isObject(this.query) &&
                Object.keys(this.query).length &&
                (a = k.stringify(this.query));
            var o = this.search || (a && "?" + a) || "";
            return (
                t && ":" !== t.substr(-1) && (t += ":"),
                this.slashes || ((!t || y[t]) && !1 !== s) ?
                ((s = "//" + (s || "")),
                 n && "/" !== n.charAt(0) && (n = "/" + n)) :
                s || (s = ""),
                i && "#" !== i.charAt(0) && (i = "#" + i),
                o && "?" !== o.charAt(0) && (o = "?" + o),
                t +
                s +
                (n = n.replace(/[?#]/g, function(e) {
                    return encodeURIComponent(e);
                })) +
                (o = o.replace("#", "%23")) +
                i
            );
        }),
            (s.prototype.resolve = function(e) {
            return this.resolveObject(v(e, !1, !0)).format();
        }),
            (s.prototype.resolveObject = function(e) {
            if (r.isString(e)) {
                var t = new s();
                t.parse(e, !1, !0), (e = t);
            }
            for (var n = new s(), i = Object.keys(this), a = 0; a < i.length; a++) {
                var o = i[a];
                n[o] = this[o];
            }
            if (((n.hash = e.hash), "" === e.href)) return (n.href = n.format()), n;
            if (e.slashes && !e.protocol) {
                for (var c = Object.keys(e), l = 0; l < c.length; l++) {
                    var h = c[l];
                    "protocol" !== h && (n[h] = e[h]);
                }
                return (
                    y[n.protocol] &&
                    n.hostname &&
                    !n.pathname &&
                    (n.path = n.pathname = "/"),
                    (n.href = n.format()),
                    n
                );
            }
            if (e.protocol && e.protocol !== n.protocol) {
                if (!y[e.protocol]) {
                    for (var u = Object.keys(e), f = 0; f < u.length; f++) {
                        var d = u[f];
                        n[d] = e[d];
                    }
                    return (n.href = n.format()), n;
                }
                if (((n.protocol = e.protocol), e.host || m[e.protocol]))
                    n.pathname = e.pathname;
                else {
                    for (
                        var p = (e.pathname || "").split("/"); p.length && !(e.host = p.shift());

                    );
                    e.host || (e.host = ""),
                        e.hostname || (e.hostname = ""),
                        "" !== p[0] && p.unshift(""),
                        p.length < 2 && p.unshift(""),
                        (n.pathname = p.join("/"));
                }
                if (
                    ((n.search = e.search),
                     (n.query = e.query),
                     (n.host = e.host || ""),
                     (n.auth = e.auth),
                     (n.hostname = e.hostname || e.host),
                     (n.port = e.port),
                     n.pathname || n.search)
                ) {
                    var g = n.pathname || "",
                        k = n.search || "";
                    n.path = g + k;
                }
                return (n.slashes = n.slashes || e.slashes), (n.href = n.format()), n;
            }
            var v = n.pathname && "/" === n.pathname.charAt(0),
                w = e.host || (e.pathname && "/" === e.pathname.charAt(0)),
                b = w || v || (n.host && e.pathname),
                x = b,
                S = (n.pathname && n.pathname.split("/")) || [],
                T =
                ((p = (e.pathname && e.pathname.split("/")) || []),
                 n.protocol && !y[n.protocol]);
            if (
                (T &&
                 ((n.hostname = ""),
                  (n.port = null),
                  n.host && ("" === S[0] ? (S[0] = n.host) : S.unshift(n.host)),
                  (n.host = ""),
                  e.protocol &&
                  ((e.hostname = null),
                   (e.port = null),
                   e.host && ("" === p[0] ? (p[0] = e.host) : p.unshift(e.host)),
                   (e.host = null)),
                  (b = b && ("" === p[0] || "" === S[0]))),
                 w)
            )
                (n.host = e.host || "" === e.host ? e.host : n.host),
                    (n.hostname =
                     e.hostname || "" === e.hostname ? e.hostname : n.hostname),
                    (n.search = e.search),
                    (n.query = e.query),
                    (S = p);
            else if (p.length)
                S || (S = []),
                    S.pop(),
                    (S = S.concat(p)),
                    (n.search = e.search),
                    (n.query = e.query);
            else if (!r.isNullOrUndefined(e.search))
                return (
                    T &&
                    ((n.hostname = n.host = S.shift()),
                     (P = !!(n.host && n.host.indexOf("@") > 0) && n.host.split("@")) &&
                     ((n.auth = P.shift()), (n.host = n.hostname = P.shift()))),
                    (n.search = e.search),
                    (n.query = e.query),
                    (r.isNull(n.pathname) && r.isNull(n.search)) ||
                    (n.path =
                     (n.pathname ? n.pathname : "") + (n.search ? n.search : "")),
                    (n.href = n.format()),
                    n
                );
            if (!S.length)
                return (
                    (n.pathname = null),
                    n.search ? (n.path = "/" + n.search) : (n.path = null),
                    (n.href = n.format()),
                    n
                );
            for (
                var I = S.slice(-1)[0],
                E =
                ((n.host || e.host || S.length > 1) &&
                 ("." === I || ".." === I)) ||
                "" === I,
                M = 0,
                A = S.length; A >= 0; A--
            )
                "." === (I = S[A]) ?
                    S.splice(A, 1) :
                ".." === I ?
                    (S.splice(A, 1), M++) :
                M && (S.splice(A, 1), M--);
            if (!b && !x)
                for (; M--; M) S.unshift("..");
            !b || "" === S[0] || (S[0] && "/" === S[0].charAt(0)) || S.unshift(""),
                E && "/" !== S.join("/").substr(-1) && S.push("");
            var P,
                B = "" === S[0] || (S[0] && "/" === S[0].charAt(0));
            return (
                T &&
                ((n.hostname = n.host = B ? "" : S.length ? S.shift() : ""),
                 (P = !!(n.host && n.host.indexOf("@") > 0) && n.host.split("@")) &&
                 ((n.auth = P.shift()), (n.host = n.hostname = P.shift()))),
                (b = b || (n.host && S.length)) && !B && S.unshift(""),
                S.length ?
                (n.pathname = S.join("/")) :
                ((n.pathname = null), (n.path = null)),
                (r.isNull(n.pathname) && r.isNull(n.search)) ||
                (n.path =
                 (n.pathname ? n.pathname : "") + (n.search ? n.search : "")),
                (n.auth = e.auth || n.auth),
                (n.slashes = n.slashes || e.slashes),
                (n.href = n.format()),
                n
            );
        }),
            (s.prototype.parseHost = function() {
            var e = this.host,
                t = o.exec(e);
            t &&
                (":" !== (t = t[0]) && (this.port = t.substr(1)),
                 (e = e.substr(0, e.length - t.length))),
                e && (this.hostname = e);
        });
    },
    function(e, t, n) {
        (function(e, i) {
            var r;
            /*! https://mths.be/punycode v1.4.1 by @mathias */
            !(function(s) {
                t && t.nodeType, e && e.nodeType;
                var a = "object" == typeof i && i;
                a.global !== a && a.window !== a && a.self;
                var o,
                    c = 2147483647,
                    l = 36,
                    h = /^xn--/,
                    u = /[^\x20-\x7E]/,
                    f = /[\x2E\u3002\uFF0E\uFF61]/g,
                    d = {
                        overflow: "Overflow: input needs wider integers to process",
                        "not-basic": "Illegal input >= 0x80 (not a basic code point)",
                        "invalid-input": "Invalid input",
                    },
                    p = Math.floor,
                    g = String.fromCharCode;

                function m(e) {
                    throw new RangeError(d[e]);
                }

                function y(e, t) {
                    for (var n = e.length, i = []; n--;) i[n] = t(e[n]);
                    return i;
                }

                function k(e, t) {
                    var n = e.split("@"),
                        i = "";
                    return (
                        n.length > 1 && ((i = n[0] + "@"), (e = n[1])),
                        i + y((e = e.replace(f, ".")).split("."), t).join(".")
                    );
                }

                function v(e) {
                    for (var t, n, i = [], r = 0, s = e.length; r < s;)
                        (t = e.charCodeAt(r++)) >= 55296 && t <= 56319 && r < s ?
                            56320 == (64512 & (n = e.charCodeAt(r++))) ?
                            i.push(((1023 & t) << 10) + (1023 & n) + 65536) :
                        (i.push(t), r--) :
                        i.push(t);
                    return i;
                }

                function w(e) {
                    return y(e, function(e) {
                        var t = "";
                        return (
                            e > 65535 &&
                            ((t += g((((e -= 65536) >>> 10) & 1023) | 55296)),
                             (e = 56320 | (1023 & e))),
                            t + g(e)
                        );
                    }).join("");
                }

                function b(e) {
                    return e - 48 < 10 ?
                        e - 22 :
                    e - 65 < 26 ?
                        e - 65 :
                    e - 97 < 26 ?
                        e - 97 :
                    l;
                }

                function x(e, t) {
                    return e + 22 + 75 * (e < 26) - ((0 != t) << 5);
                }

                function S(e, t, n) {
                    var i = 0;
                    for (e = n ? p(e / 700) : e >> 1, e += p(e / t); e > 455; i += l)
                        e = p(e / 35);
                    return p(i + (36 * e) / (e + 38));
                }

                function T(e) {
                    var t,
                        n,
                        i,
                        r,
                        s,
                        a,
                        o,
                        h,
                        u,
                        f,
                        d = [],
                        g = e.length,
                        y = 0,
                        k = 128,
                        v = 72;
                    for ((n = e.lastIndexOf("-")) < 0 && (n = 0), i = 0; i < n; ++i)
                        e.charCodeAt(i) >= 128 && m("not-basic"), d.push(e.charCodeAt(i));
                    for (r = n > 0 ? n + 1 : 0; r < g;) {
                        for (
                            s = y, a = 1, o = l; r >= g && m("invalid-input"),
                            ((h = b(e.charCodeAt(r++))) >= l || h > p((c - y) / a)) &&
                            m("overflow"),
                            (y += h * a),
                            !(h < (u = o <= v ? 1 : o >= v + 26 ? 26 : o - v)); o += l
                        )
                            a > p(c / (f = l - u)) && m("overflow"), (a *= f);
                        (v = S(y - s, (t = d.length + 1), 0 == s)),
                            p(y / t) > c - k && m("overflow"),
                            (k += p(y / t)),
                            (y %= t),
                            d.splice(y++, 0, k);
                    }
                    return w(d);
                }

                function I(e) {
                    var t,
                        n,
                        i,
                        r,
                        s,
                        a,
                        o,
                        h,
                        u,
                        f,
                        d,
                        y,
                        k,
                        w,
                        b,
                        T = [];
                    for (y = (e = v(e)).length, t = 128, n = 0, s = 72, a = 0; a < y; ++a)
                        (d = e[a]) < 128 && T.push(g(d));
                    for (i = r = T.length, r && T.push("-"); i < y;) {
                        for (o = c, a = 0; a < y; ++a)(d = e[a]) >= t && d < o && (o = d);
                        for (
                            o - t > p((c - n) / (k = i + 1)) && m("overflow"),
                            n += (o - t) * k,
                            t = o,
                            a = 0; a < y;
                            ++a
                        )
                            if (((d = e[a]) < t && ++n > c && m("overflow"), d == t)) {
                                for (
                                    h = n, u = l; !(h < (f = u <= s ? 1 : u >= s + 26 ? 26 : u - s)); u += l
                                )
                                    (b = h - f),
                                        (w = l - f),
                                        T.push(g(x(f + (b % w), 0))),
                                        (h = p(b / w));
                                T.push(g(x(h, 0))), (s = S(n, k, i == r)), (n = 0), ++i;
                            }
                        ++ n, ++t;
                    }
                    return T.join("");
                }
                (o = {
                    version: "1.4.1",
                    ucs2: {
                        decode: v,
                        encode: w
                    },
                    decode: T,
                    encode: I,
                    toASCII: function(e) {
                        return k(e, function(e) {
                            return u.test(e) ? "xn--" + I(e) : e;
                        });
                    },
                    toUnicode: function(e) {
                        return k(e, function(e) {
                            return h.test(e) ? T(e.slice(4).toLowerCase()) : e;
                        });
                    },
                }),
                    void 0 ===
                    (r = function() {
                    return o;
                }.call(t, n, t, e)) || (e.exports = r);
            })();
        }.call(this, n(62)(e), n(12)));
    },
    function(e, t) {
        e.exports = function(e) {
            return (
                e.webpackPolyfill ||
                ((e.deprecate = function() {}),
                 (e.paths = []),
                 e.children || (e.children = []),
                 Object.defineProperty(e, "loaded", {
                    enumerable: !0,
                    get: function() {
                        return e.l;
                    },
                }),
                 Object.defineProperty(e, "id", {
                    enumerable: !0,
                    get: function() {
                        return e.i;
                    },
                }),
                 (e.webpackPolyfill = 1)),
                e
            );
        };
    },
    function(e, t, n) {
        "use strict";
        e.exports = {
            isString: function(e) {
                return "string" == typeof e;
            },
            isObject: function(e) {
                return "object" == typeof e && null !== e;
            },
            isNull: function(e) {
                return null === e;
            },
            isNullOrUndefined: function(e) {
                return null == e;
            },
        };
    },
    function(e, t, n) {
        "use strict";
        (t.decode = t.parse = n(65)), (t.encode = t.stringify = n(66));
    },
    function(e, t, n) {
        "use strict";

        function i(e, t) {
            return Object.prototype.hasOwnProperty.call(e, t);
        }
        e.exports = function(e, t, n, s) {
            (t = t || "&"), (n = n || "=");
            var a = {};
            if ("string" != typeof e || 0 === e.length) return a;
            var o = /\+/g;
            e = e.split(t);
            var c = 1e3;
            s && "number" == typeof s.maxKeys && (c = s.maxKeys);
            var l = e.length;
            c > 0 && l > c && (l = c);
            for (var h = 0; h < l; ++h) {
                var u,
                    f,
                    d,
                    p,
                    g = e[h].replace(o, "%20"),
                    m = g.indexOf(n);
                m >= 0 ?
                    ((u = g.substr(0, m)), (f = g.substr(m + 1))) :
                ((u = g), (f = "")),
                    (d = decodeURIComponent(u)),
                    (p = decodeURIComponent(f)),
                    i(a, d) ? (r(a[d]) ? a[d].push(p) : (a[d] = [a[d], p])) : (a[d] = p);
            }
            return a;
        };
        var r =
            Array.isArray ||
            function(e) {
                return "[object Array]" === Object.prototype.toString.call(e);
            };
    },
    function(e, t, n) {
        "use strict";
        var i = function(e) {
            switch (typeof e) {
                case "string":
                    return e;
                case "boolean":
                    return e ? "true" : "false";
                case "number":
                    return isFinite(e) ? e : "";
                default:
                    return "";
            }
        };
        e.exports = function(e, t, n, o) {
            return (
                (t = t || "&"),
                (n = n || "="),
                null === e && (e = void 0),
                "object" == typeof e ?
                s(a(e), function(a) {
                    var o = encodeURIComponent(i(a)) + n;
                    return r(e[a]) ?
                        s(e[a], function(e) {
                        return o + encodeURIComponent(i(e));
                    }).join(t) :
                    o + encodeURIComponent(i(e[a]));
                }).join(t) :
                o ?
                encodeURIComponent(i(o)) + n + encodeURIComponent(i(e)) :
                ""
            );
        };
        var r =
            Array.isArray ||
            function(e) {
                return "[object Array]" === Object.prototype.toString.call(e);
            };

        function s(e, t) {
            if (e.map) return e.map(t);
            for (var n = [], i = 0; i < e.length; i++) n.push(t(e[i], i));
            return n;
        }
        var a =
            Object.keys ||
            function(e) {
                var t = [];
                for (var n in e)
                    Object.prototype.hasOwnProperty.call(e, n) && t.push(n);
                return t;
            };
    },
    function(e, t, n) {
        !(function() {
            var t = n(68),
                i = n(20).utf8,
                r = n(69),
                s = n(20).bin,
                a = function(e, n) {
                    e.constructor == String ?
                        (e =
                         n && "binary" === n.encoding ?
                         s.stringToBytes(e) :
                         i.stringToBytes(e)) :
                    r(e) ?
                        (e = Array.prototype.slice.call(e, 0)) :
                    Array.isArray(e) || (e = e.toString());
                    for (
                        var o = t.bytesToWords(e),
                        c = 8 * e.length,
                        l = 1732584193,
                        h = -271733879,
                        u = -1732584194,
                        f = 271733878,
                        d = 0; d < o.length; d++
                    )
                        o[d] =
                            (16711935 & ((o[d] << 8) | (o[d] >>> 24))) |
                            (4278255360 & ((o[d] << 24) | (o[d] >>> 8)));
                    (o[c >>> 5] |= 128 << c % 32), (o[14 + (((c + 64) >>> 9) << 4)] = c);
                    var p = a._ff,
                        g = a._gg,
                        m = a._hh,
                        y = a._ii;
                    for (d = 0; d < o.length; d += 16) {
                        var k = l,
                            v = h,
                            w = u,
                            b = f;
                        (h = y(
                            (h = y(
                                (h = y(
                                    (h = y(
                                        (h = m(
                                            (h = m(
                                                (h = m(
                                                    (h = m(
                                                        (h = g(
                                                            (h = g(
                                                                (h = g(
                                                                    (h = g(
                                                                        (h = p(
                                                                            (h = p(
                                                                                (h = p(
                                                                                    (h = p(
                                                                                        h,
                                                                                        (u = p(
                                                                                            u,
                                                                                            (f = p(
                                                                                                f,
                                                                                                (l = p(
                                                                                                    l,
                                                                                                    h,
                                                                                                    u,
                                                                                                    f,
                                                                                                    o[d + 0],
                                                                                                    7,
                                                                                                    -680876936,
                                                                                                )),
                                                                                                h,
                                                                                                u,
                                                                                                o[d + 1],
                                                                                                12,
                                                                                                -389564586,
                                                                                            )),
                                                                                            l,
                                                                                            h,
                                                                                            o[d + 2],
                                                                                            17,
                                                                                            606105819,
                                                                                        )),
                                                                                        f,
                                                                                        l,
                                                                                        o[d + 3],
                                                                                        22,
                                                                                        -1044525330,
                                                                                    )),
                                                                                    (u = p(
                                                                                        u,
                                                                                        (f = p(
                                                                                            f,
                                                                                            (l = p(
                                                                                                l,
                                                                                                h,
                                                                                                u,
                                                                                                f,
                                                                                                o[d + 4],
                                                                                                7,
                                                                                                -176418897,
                                                                                            )),
                                                                                            h,
                                                                                            u,
                                                                                            o[d + 5],
                                                                                            12,
                                                                                            1200080426,
                                                                                        )),
                                                                                        l,
                                                                                        h,
                                                                                        o[d + 6],
                                                                                        17,
                                                                                        -1473231341,
                                                                                    )),
                                                                                    f,
                                                                                    l,
                                                                                    o[d + 7],
                                                                                    22,
                                                                                    -45705983,
                                                                                )),
                                                                                (u = p(
                                                                                    u,
                                                                                    (f = p(
                                                                                        f,
                                                                                        (l = p(
                                                                                            l,
                                                                                            h,
                                                                                            u,
                                                                                            f,
                                                                                            o[d + 8],
                                                                                            7,
                                                                                            1770035416,
                                                                                        )),
                                                                                        h,
                                                                                        u,
                                                                                        o[d + 9],
                                                                                        12,
                                                                                        -1958414417,
                                                                                    )),
                                                                                    l,
                                                                                    h,
                                                                                    o[d + 10],
                                                                                    17,
                                                                                    -42063,
                                                                                )),
                                                                                f,
                                                                                l,
                                                                                o[d + 11],
                                                                                22,
                                                                                -1990404162,
                                                                            )),
                                                                            (u = p(
                                                                                u,
                                                                                (f = p(
                                                                                    f,
                                                                                    (l = p(
                                                                                        l,
                                                                                        h,
                                                                                        u,
                                                                                        f,
                                                                                        o[d + 12],
                                                                                        7,
                                                                                        1804603682,
                                                                                    )),
                                                                                    h,
                                                                                    u,
                                                                                    o[d + 13],
                                                                                    12,
                                                                                    -40341101,
                                                                                )),
                                                                                l,
                                                                                h,
                                                                                o[d + 14],
                                                                                17,
                                                                                -1502002290,
                                                                            )),
                                                                            f,
                                                                            l,
                                                                            o[d + 15],
                                                                            22,
                                                                            1236535329,
                                                                        )),
                                                                        (u = g(
                                                                            u,
                                                                            (f = g(
                                                                                f,
                                                                                (l = g(
                                                                                    l,
                                                                                    h,
                                                                                    u,
                                                                                    f,
                                                                                    o[d + 1],
                                                                                    5,
                                                                                    -165796510,
                                                                                )),
                                                                                h,
                                                                                u,
                                                                                o[d + 6],
                                                                                9,
                                                                                -1069501632,
                                                                            )),
                                                                            l,
                                                                            h,
                                                                            o[d + 11],
                                                                            14,
                                                                            643717713,
                                                                        )),
                                                                        f,
                                                                        l,
                                                                        o[d + 0],
                                                                        20,
                                                                        -373897302,
                                                                    )),
                                                                    (u = g(
                                                                        u,
                                                                        (f = g(
                                                                            f,
                                                                            (l = g(
                                                                                l,
                                                                                h,
                                                                                u,
                                                                                f,
                                                                                o[d + 5],
                                                                                5,
                                                                                -701558691,
                                                                            )),
                                                                            h,
                                                                            u,
                                                                            o[d + 10],
                                                                            9,
                                                                            38016083,
                                                                        )),
                                                                        l,
                                                                        h,
                                                                        o[d + 15],
                                                                        14,
                                                                        -660478335,
                                                                    )),
                                                                    f,
                                                                    l,
                                                                    o[d + 4],
                                                                    20,
                                                                    -405537848,
                                                                )),
                                                                (u = g(
                                                                    u,
                                                                    (f = g(
                                                                        f,
                                                                        (l = g(l, h, u, f, o[d + 9], 5, 568446438)),
                                                                        h,
                                                                        u,
                                                                        o[d + 14],
                                                                        9,
                                                                        -1019803690,
                                                                    )),
                                                                    l,
                                                                    h,
                                                                    o[d + 3],
                                                                    14,
                                                                    -187363961,
                                                                )),
                                                                f,
                                                                l,
                                                                o[d + 8],
                                                                20,
                                                                1163531501,
                                                            )),
                                                            (u = g(
                                                                u,
                                                                (f = g(
                                                                    f,
                                                                    (l = g(
                                                                        l,
                                                                        h,
                                                                        u,
                                                                        f,
                                                                        o[d + 13],
                                                                        5,
                                                                        -1444681467,
                                                                    )),
                                                                    h,
                                                                    u,
                                                                    o[d + 2],
                                                                    9,
                                                                    -51403784,
                                                                )),
                                                                l,
                                                                h,
                                                                o[d + 7],
                                                                14,
                                                                1735328473,
                                                            )),
                                                            f,
                                                            l,
                                                            o[d + 12],
                                                            20,
                                                            -1926607734,
                                                        )),
                                                        (u = m(
                                                            u,
                                                            (f = m(
                                                                f,
                                                                (l = m(l, h, u, f, o[d + 5], 4, -378558)),
                                                                h,
                                                                u,
                                                                o[d + 8],
                                                                11,
                                                                -2022574463,
                                                            )),
                                                            l,
                                                            h,
                                                            o[d + 11],
                                                            16,
                                                            1839030562,
                                                        )),
                                                        f,
                                                        l,
                                                        o[d + 14],
                                                        23,
                                                        -35309556,
                                                    )),
                                                    (u = m(
                                                        u,
                                                        (f = m(
                                                            f,
                                                            (l = m(l, h, u, f, o[d + 1], 4, -1530992060)),
                                                            h,
                                                            u,
                                                            o[d + 4],
                                                            11,
                                                            1272893353,
                                                        )),
                                                        l,
                                                        h,
                                                        o[d + 7],
                                                        16,
                                                        -155497632,
                                                    )),
                                                    f,
                                                    l,
                                                    o[d + 10],
                                                    23,
                                                    -1094730640,
                                                )),
                                                (u = m(
                                                    u,
                                                    (f = m(
                                                        f,
                                                        (l = m(l, h, u, f, o[d + 13], 4, 681279174)),
                                                        h,
                                                        u,
                                                        o[d + 0],
                                                        11,
                                                        -358537222,
                                                    )),
                                                    l,
                                                    h,
                                                    o[d + 3],
                                                    16,
                                                    -722521979,
                                                )),
                                                f,
                                                l,
                                                o[d + 6],
                                                23,
                                                76029189,
                                            )),
                                            (u = m(
                                                u,
                                                (f = m(
                                                    f,
                                                    (l = m(l, h, u, f, o[d + 9], 4, -640364487)),
                                                    h,
                                                    u,
                                                    o[d + 12],
                                                    11,
                                                    -421815835,
                                                )),
                                                l,
                                                h,
                                                o[d + 15],
                                                16,
                                                530742520,
                                            )),
                                            f,
                                            l,
                                            o[d + 2],
                                            23,
                                            -995338651,
                                        )),
                                        (u = y(
                                            u,
                                            (f = y(
                                                f,
                                                (l = y(l, h, u, f, o[d + 0], 6, -198630844)),
                                                h,
                                                u,
                                                o[d + 7],
                                                10,
                                                1126891415,
                                            )),
                                            l,
                                            h,
                                            o[d + 14],
                                            15,
                                            -1416354905,
                                        )),
                                        f,
                                        l,
                                        o[d + 5],
                                        21,
                                        -57434055,
                                    )),
                                    (u = y(
                                        u,
                                        (f = y(
                                            f,
                                            (l = y(l, h, u, f, o[d + 12], 6, 1700485571)),
                                            h,
                                            u,
                                            o[d + 3],
                                            10,
                                            -1894986606,
                                        )),
                                        l,
                                        h,
                                        o[d + 10],
                                        15,
                                        -1051523,
                                    )),
                                    f,
                                    l,
                                    o[d + 1],
                                    21,
                                    -2054922799,
                                )),
                                (u = y(
                                    u,
                                    (f = y(
                                        f,
                                        (l = y(l, h, u, f, o[d + 8], 6, 1873313359)),
                                        h,
                                        u,
                                        o[d + 15],
                                        10,
                                        -30611744,
                                    )),
                                    l,
                                    h,
                                    o[d + 6],
                                    15,
                                    -1560198380,
                                )),
                                f,
                                l,
                                o[d + 13],
                                21,
                                1309151649,
                            )),
                            (u = y(
                                u,
                                (f = y(
                                    f,
                                    (l = y(l, h, u, f, o[d + 4], 6, -145523070)),
                                    h,
                                    u,
                                    o[d + 11],
                                    10,
                                    -1120210379,
                                )),
                                l,
                                h,
                                o[d + 2],
                                15,
                                718787259,
                            )),
                            f,
                            l,
                            o[d + 9],
                            21,
                            -343485551,
                        )),
                            (l = (l + k) >>> 0),
                            (h = (h + v) >>> 0),
                            (u = (u + w) >>> 0),
                            (f = (f + b) >>> 0);
                    }
                    return t.endian([l, h, u, f]);
                };
            (a._ff = function(e, t, n, i, r, s, a) {
                var o = e + ((t & n) | (~t & i)) + (r >>> 0) + a;
                return ((o << s) | (o >>> (32 - s))) + t;
            }),
                (a._gg = function(e, t, n, i, r, s, a) {
                var o = e + ((t & i) | (n & ~i)) + (r >>> 0) + a;
                return ((o << s) | (o >>> (32 - s))) + t;
            }),
                (a._hh = function(e, t, n, i, r, s, a) {
                var o = e + (t ^ n ^ i) + (r >>> 0) + a;
                return ((o << s) | (o >>> (32 - s))) + t;
            }),
                (a._ii = function(e, t, n, i, r, s, a) {
                var o = e + (n ^ (t | ~i)) + (r >>> 0) + a;
                return ((o << s) | (o >>> (32 - s))) + t;
            }),
                (a._blocksize = 16),
                (a._digestsize = 16),
                (e.exports = function(e, n) {
                if (null == e) throw new Error("Illegal argument " + e);
                var i = t.wordsToBytes(a(e, n));
                return n && n.asBytes ?
                    i :
                n && n.asString ?
                    s.bytesToString(i) :
                t.bytesToHex(i);
            });
        })();
    },
    function(e, t) {
        !(function() {
            var t =
                "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
                n = {
                    rotl: function(e, t) {
                        return (e << t) | (e >>> (32 - t));
                    },
                    rotr: function(e, t) {
                        return (e << (32 - t)) | (e >>> t);
                    },
                    endian: function(e) {
                        if (e.constructor == Number)
                            return (16711935 & n.rotl(e, 8)) | (4278255360 & n.rotl(e, 24));
                        for (var t = 0; t < e.length; t++) e[t] = n.endian(e[t]);
                        return e;
                    },
                    randomBytes: function(e) {
                        for (var t = []; e > 0; e--)
                            t.push(Math.floor(256 * Math.random()));
                        return t;
                    },
                    bytesToWords: function(e) {
                        for (var t = [], n = 0, i = 0; n < e.length; n++, i += 8)
                            t[i >>> 5] |= e[n] << (24 - (i % 32));
                        return t;
                    },
                    wordsToBytes: function(e) {
                        for (var t = [], n = 0; n < 32 * e.length; n += 8)
                            t.push((e[n >>> 5] >>> (24 - (n % 32))) & 255);
                        return t;
                    },
                    bytesToHex: function(e) {
                        for (var t = [], n = 0; n < e.length; n++)
                            t.push((e[n] >>> 4).toString(16)),
                                t.push((15 & e[n]).toString(16));
                        return t.join("");
                    },
                    hexToBytes: function(e) {
                        for (var t = [], n = 0; n < e.length; n += 2)
                            t.push(parseInt(e.substr(n, 2), 16));
                        return t;
                    },
                    bytesToBase64: function(e) {
                        for (var n = [], i = 0; i < e.length; i += 3)
                            for (
                                var r = (e[i] << 16) | (e[i + 1] << 8) | e[i + 2], s = 0; s < 4; s++
                            )
                                8 * i + 6 * s <= 8 * e.length ?
                                    n.push(t.charAt((r >>> (6 * (3 - s))) & 63)) :
                                n.push("=");
                        return n.join("");
                    },
                    base64ToBytes: function(e) {
                        e = e.replace(/[^A-Z0-9+\/]/gi, "");
                        for (var n = [], i = 0, r = 0; i < e.length; r = ++i % 4)
                            0 != r &&
                                n.push(
                                ((t.indexOf(e.charAt(i - 1)) &
                                  (Math.pow(2, -2 * r + 8) - 1)) <<
                                 (2 * r)) |
                                (t.indexOf(e.charAt(i)) >>> (6 - 2 * r)),
                            );
                        return n;
                    },
                };
            e.exports = n;
        })();
    },
    function(e, t) {
        function n(e) {
            return (
                !!e.constructor &&
                "function" == typeof e.constructor.isBuffer &&
                e.constructor.isBuffer(e)
            );
        }
        /*!
         * Determine if an object is a Buffer
         *
         * @author   D_Alpha
         * @license  MIT
         */
        e.exports = function(e) {
            return (
                null != e &&
                (n(e) ||
                 (function(e) {
                    return (
                        "function" == typeof e.readFloatLE &&
                        "function" == typeof e.slice &&
                        n(e.slice(0, 0))
                    );
                })(e) ||
                 !!e._isBuffer)
            );
        };
    },
    function(e, t) {
        e.exports = function(e, t, n, i, r, s, a, o, c) {
            (this.aiTypes = [{
                id: 0,
                src: "cow_1",
                killScore: 150,
                health: 500,
                weightM: 0.8,
                speed: 95e-5,
                turnSpeed: 0.001,
                scale: 72,
                drop: ["food", 50],
                chat: "Moooo"
            },
                             {
                                 id: 1,
                                 src: "pig_1",
                                 killScore: 200,
                                 health: 800,
                                 weightM: 0.6,
                                 speed: 85e-5,
                                 turnSpeed: 0.001,
                                 scale: 72,
                                 drop: ["food", 80],
                                 chat: "I eat bacon"
                             },
                             {
                                 id: 2,
                                 name: "Bull",
                                 src: "bull_2",
                                 hostile: !0,
                                 dmg: 20,
                                 killScore: 1e3,
                                 health: 1800,
                                 weightM: 0.5,
                                 speed: 94e-5,
                                 turnSpeed: 74e-5,
                                 scale: 78,
                                 viewRange: 800,
                                 chargePlayer: !0,
                                 drop: ["food", 100],
                                 chat: "Oley!"
                             },
                             {
                                 id: 3,
                                 name: "Bully",
                                 src: "bull_1",
                                 hostile: !0,
                                 dmg: 20,
                                 killScore: 2e3,
                                 health: 2800,
                                 weightM: 0.45,
                                 speed: 0.001,
                                 turnSpeed: 8e-4,
                                 scale: 90,
                                 viewRange: 900,
                                 chargePlayer: !0,
                                 drop: ["food", 400],
                                 chat: "Give me your lunch money!"
                             },
                             {
                                 id: 4,
                                 name: "Wolf",
                                 src: "wolf_1",
                                 hostile: !0,
                                 dmg: 8,
                                 killScore: 500,
                                 health: 300,
                                 weightM: 0.45,
                                 speed: 0.001,
                                 turnSpeed: 0.002,
                                 scale: 84,
                                 viewRange: 800,
                                 chargePlayer: !0,
                                 drop: ["food", 200],
                                 chat: "Woof"
                             },
                             {
                                 id: 5,
                                 name: "Quack",
                                 src: "chicken_1",
                                 dmg: 8,
                                 killScore: 2e3,
                                 noTrap: !0,
                                 health: 300,
                                 weightM: 0.2,
                                 speed: 0.0018,
                                 turnSpeed: 0.006,
                                 scale: 70,
                                 drop: ["food", 100],
                                 chat: "Quack Quack!"
                             },
                             {
                                 id: 6,
                                 name: "MOOSTAFA",
                                 nameScale: 50,
                                 src: "enemy",
                                 hostile: !0,
                                 dontRun: !0,
                                 fixedSpawn: !0,
                                 spawnDelay: 6e4,
                                 noTrap: !0,
                                 colDmg: 100,
                                 dmg: 40,
                                 killScore: 8e3,
                                 health: 18e3,
                                 weightM: 0.4,
                                 speed: 7e-4,
                                 turnSpeed: 0.01,
                                 scale: 80,
                                 spriteMlt: 1.8,
                                 leapForce: 0.9,
                                 viewRange: 1e3,
                                 hitRange: 210,
                                 hitDelay: 1e3,
                                 chargePlayer: !0,
                                 drop: ["food", 100],
                                 chat: "MOOSTAFA KILL YOU"
                             },
                             {
                                 id: 7,
                                 name: "Treasure",
                                 hostile: !0,
                                 nameScale: 35,
                                 src: "crate_1",
                                 fixedSpawn: !0,
                                 spawnDelay: 12e4,
                                 colDmg: 200,
                                 killScore: 5e3,
                                 health: 2e4,
                                 weightM: 0.1,
                                 speed: 0,
                                 turnSpeed: 0,
                                 scale: 70,
                                 spriteMlt: 1,
                                 chat: "No key? Time for box abuse!"
                             },
                             {
                                 id: 8,
                                 name: "MOOFIE",
                                 src: "wolf_2",
                                 hostile: !0,
                                 fixedSpawn: !0,
                                 dontRun: !0,
                                 hitScare: 4,
                                 spawnDelay: 3e4,
                                 noTrap: !0,
                                 nameScale: 35,
                                 dmg: 10,
                                 colDmg: 100,
                                 killScore: 3e3,
                                 health: 7e3,
                                 weightM: 0.45,
                                 speed: 0.0015,
                                 turnSpeed: 0.002,
                                 scale: 90,
                                 viewRange: 800,
                                 chargePlayer: !0,
                                 drop: ["food", 1e3],
                                 chat: "eEeEeEeEEEeEEEEEee!"
                             },
                            ]),
                (this.spawn = function(l, h, u, f) {
                for (var d, p = 0; p < e.length; ++p)
                    if (!e[p].active) {
                        d = e[p];
                        break;
                    }
                return (
                    d || ((d = new t(e.length, r, n, i, a, s, o, c)), e.push(d)),
                    d.init(l, h, u, f, this.aiTypes[f]),
                    d
                );
            });
        };
    },
    function(e, t) {
        var n = 2 * Math.PI;
        e.exports = function(e, t, i, r, s, a, o, c) {
            (this.sid = e),
                (this.isAI = !0),
                (this.nameIndex = s.randInt(0, a.cowNames.length - 1)),
                (this.init = function(e, t, n, i, r) {
                (this.x = e),
                    (this.y = t),
                    (this.startX = r.fixedSpawn ? e : null),
                    (this.startY = r.fixedSpawn ? t : null),
                    (this.xVel = 0),
                    (this.yVel = 0),
                    (this.zIndex = 0),
                    (this.dir = n),
                    (this.dirPlus = 0),
                    (this.index = i),
                    (this.src = r.src),
                    r.name && (this.name = r.name),
                    (this.weightM = r.weightM),
                    (this.speed = r.speed),
                    (this.killScore = r.killScore),
                    (this.turnSpeed = r.turnSpeed),
                    (this.scale = r.scale),
                    (this.maxHealth = r.health),
                    (this.leapForce = r.leapForce),
                    (this.health = this.maxHealth),
                    (this.chargePlayer = r.chargePlayer),
                    (this.viewRange = r.viewRange),
                    (this.drop = r.drop),
                    (this.dmg = r.dmg),
                    (this.hostile = r.hostile),
                    (this.dontRun = r.dontRun),
                    (this.hitRange = r.hitRange),
                    (this.hitDelay = r.hitDelay),
                    (this.hitScare = r.hitScare),
                    (this.spriteMlt = r.spriteMlt),
                    (this.nameScale = r.nameScale),
                    (this.colDmg = r.colDmg),
                    (this.noTrap = r.noTrap),
                    (this.spawnDelay = r.spawnDelay),
                    (this.hitWait = 0),
                    (this.waitCount = 1e3),
                    (this.moveCount = 0),
                    (this.targetDir = 0),
                    (this.active = !0),
                    (this.alive = !0),
                    (this.runFrom = null),
                    (this.chargeTarget = null),
                    (this.dmgOverTime = {});
            });
            var l = 0;
            (this.update = function(e) {
                if (this.active) {
                    if (this.spawnCounter)
                        return (
                            (this.spawnCounter -= e),
                            void(
                                this.spawnCounter <= 0 &&
                                ((this.spawnCounter = 0),
                                 (this.x = this.startX || s.randInt(0, a.mapScale)),
                                 (this.y = this.startY || s.randInt(0, a.mapScale)))
                            )
                        );
                    (l -= e) <= 0 &&
                        (this.dmgOverTime.dmg &&
                         (this.changeHealth(-this.dmgOverTime.dmg, this.dmgOverTime.doer),
                          (this.dmgOverTime.time -= 1),
                          this.dmgOverTime.time <= 0 && (this.dmgOverTime.dmg = 0)),
                         (l = 1e3));
                    var r = !1,
                        o = 1;
                    if (
                        (!this.zIndex &&
                         !this.lockMove &&
                         this.y >= a.mapScale / 2 - a.riverWidth / 2 &&
                         this.y <= a.mapScale / 2 + a.riverWidth / 2 &&
                         ((o = 0.33), (this.xVel += a.waterCurrent * e)),
                         this.lockMove)
                    )
                        (this.xVel = 0), (this.yVel = 0);
                    else if (this.waitCount > 0) {
                        if (((this.waitCount -= e), this.waitCount <= 0))
                            if (this.chargePlayer) {
                                for (var h, u, f, d = 0; d < i.length; ++d)
                                    !i[d].alive ||
                                        (i[d].skin && i[d].skin.bullRepel) ||
                                        ((f = s.getDistance(this.x, this.y, i[d].x, i[d].y)) <=
                                         this.viewRange &&
                                         (!h || f < u) &&
                                         ((u = f), (h = i[d])));
                                h
                                    ?
                                    ((this.chargeTarget = h),
                                     (this.moveCount = s.randInt(8e3, 12e3))) :
                                ((this.moveCount = s.randInt(1e3, 2e3)),
                                 (this.targetDir = s.randFloat(-Math.PI, Math.PI)));
                            } else
                                (this.moveCount = s.randInt(4e3, 1e4)),
                                    (this.targetDir = s.randFloat(-Math.PI, Math.PI));
                    } else if (this.moveCount > 0) {
                        var p = this.speed * o;
                        if (
                            (this.runFrom &&
                             this.runFrom.active &&
                             (!this.runFrom.isPlayer || this.runFrom.alive) ?
                             ((this.targetDir = s.getDirection(
                                this.x,
                                this.y,
                                this.runFrom.x,
                                this.runFrom.y,
                            )),
                              (p *= 1.42)) :
                             this.chargeTarget &&
                             this.chargeTarget.alive &&
                             ((this.targetDir = s.getDirection(
                                this.chargeTarget.x,
                                this.chargeTarget.y,
                                this.x,
                                this.y,
                            )),
                              (p *= 1.75),
                              (r = !0)),
                             this.hitWait && (p *= 0.3),
                             this.dir != this.targetDir)
                        ) {
                            this.dir %= n;
                            var g = (this.dir - this.targetDir + n) % n,
                                m = Math.min(Math.abs(g - n), g, this.turnSpeed * e),
                                y = g - Math.PI >= 0 ? 1 : -1;
                            this.dir += y * m + n;
                        }
                        (this.dir %= n),
                            (this.xVel += p * e * Math.cos(this.dir)),
                            (this.yVel += p * e * Math.sin(this.dir)),
                            (this.moveCount -= e),
                            this.moveCount <= 0 &&
                            ((this.runFrom = null),
                             (this.chargeTarget = null),
                             (this.waitCount = this.hostile ? 1500 : s.randInt(1500, 6e3)));
                    }
                    (this.zIndex = 0), (this.lockMove = !1);
                    var k = s.getDistance(0, 0, this.xVel * e, this.yVel * e),
                        v = Math.min(4, Math.max(1, Math.round(k / 40))),
                        w = 1 / v;
                    for (d = 0; d < v; ++d) {
                        this.xVel && (this.x += this.xVel * e * w),
                            this.yVel && (this.y += this.yVel * e * w),
                            (M = t.getGridArrays(this.x, this.y, this.scale));
                        for (var b = 0; b < M.length; ++b)
                            for (var x = 0; x < M[b].length; ++x)
                                M[b][x].active && t.checkCollision(this, M[b][x], w);
                    }
                    var S,
                        T,
                        I,
                        E = !1;
                    if (this.hitWait > 0 && ((this.hitWait -= e), this.hitWait <= 0)) {
                        (E = !0),
                            (this.hitWait = 0),
                            this.leapForce &&
                            !s.randInt(0, 2) &&
                            ((this.xVel += this.leapForce * Math.cos(this.dir)),
                             (this.yVel += this.leapForce * Math.sin(this.dir)));
                        for (
                            var M = t.getGridArrays(this.x, this.y, this.hitRange), A = 0; A < M.length;
                            ++A
                        )
                            for (b = 0; b < M[A].length; ++b)
                                (S = M[A][b]).health &&
                                    (T = s.getDistance(this.x, this.y, S.x, S.y)) <
                                    S.scale + this.hitRange &&
                                    (S.changeHealth(5 * -this.dmg) && t.disableObj(S),
                                     t.hitObj(S, s.getDirection(this.x, this.y, S.x, S.y)));
                        for (b = 0; b < i.length; ++b)
                            i[b].canSee(this) && c.send(i[b].id, "aa", this.sid);
                    }
                    if (r || E)
                        for (d = 0; d < i.length; ++d)
                            (S = i[d]) &&
                                S.alive &&
                                ((T = s.getDistance(this.x, this.y, S.x, S.y)),
                                 this.hitRange ?
                                 !this.hitWait &&
                                 T <= this.hitRange + S.scale &&
                                 (E ?
                                  ((I = s.getDirection(S.x, S.y, this.x, this.y)),
                                   S.changeHealth(-this.dmg),
                                   (S.xVel += 0.6 * Math.cos(I)),
                                   (S.yVel += 0.6 * Math.sin(I)),
                                   (this.runFrom = null),
                                   (this.chargeTarget = null),
                                   (this.waitCount = 3e3),
                                   (this.hitWait = s.randInt(0, 2) ? 0 : 600)) :
                                  (this.hitWait = this.hitDelay)) :
                                 T <= this.scale + S.scale &&
                                 ((I = s.getDirection(S.x, S.y, this.x, this.y)),
                                  S.changeHealth(-this.dmg),
                                  (S.xVel += 0.55 * Math.cos(I)),
                                  (S.yVel += 0.55 * Math.sin(I))));
                    this.xVel && (this.xVel *= Math.pow(a.playerDecel, e)),
                        this.yVel && (this.yVel *= Math.pow(a.playerDecel, e));
                    var P = this.scale;
                    this.x - P < 0 ?
                        ((this.x = P), (this.xVel = 0)) :
                    this.x + P > a.mapScale &&
                        ((this.x = a.mapScale - P), (this.xVel = 0)),
                        this.y - P < 0 ?
                        ((this.y = P), (this.yVel = 0)) :
                    this.y + P > a.mapScale &&
                        ((this.y = a.mapScale - P), (this.yVel = 0));
                }
            }),
                (this.canSee = function(e) {
                if (!e) return !1;
                if (e.skin && e.skin.invisTimer && e.noMovTimer >= e.skin.invisTimer)
                    return !1;
                var t = Math.abs(e.x - this.x) - e.scale,
                    n = Math.abs(e.y - this.y) - e.scale;
                return (
                    t <= (a.maxScreenWidth / 2) * 1.3 &&
                    n <= (a.maxScreenHeight / 2) * 1.3
                );
            });
            var h = 0,
                u = 0;
            (this.animate = function(e) {
                this.animTime > 0 &&
                    ((this.animTime -= e),
                     this.animTime <= 0 ?
                     ((this.animTime = 0), (this.dirPlus = 0), (h = 0), (u = 0)) :
                     0 == u ?
                     ((h += e / (this.animSpeed * a.hitReturnRatio)),
                      (this.dirPlus = s.lerp(0, this.targetAngle, Math.min(1, h))),
                      h >= 1 && ((h = 1), (u = 1))) :
                     ((h -= e / (this.animSpeed * (1 - a.hitReturnRatio))),
                      (this.dirPlus = s.lerp(0, this.targetAngle, Math.max(0, h)))));
            }),
                (this.startAnim = function() {
                (this.animTime = this.animSpeed = 600),
                    (this.targetAngle = 0.8 * Math.PI),
                    (h = 0),
                    (u = 0);
            }),
                (this.changeHealth = function(e, t, n) {
                if (
                    this.active &&
                    ((this.health += e),
                     n &&
                     (this.hitScare && !s.randInt(0, this.hitScare) ?
                      ((this.runFrom = n),
                       (this.waitCount = 0),
                       (this.moveCount = 2e3)) :
                      this.hostile && this.chargePlayer && n.isPlayer ?
                      ((this.chargeTarget = n),
                       (this.waitCount = 0),
                       (this.moveCount = 8e3)) :
                      this.dontRun ||
                      ((this.runFrom = n),
                       (this.waitCount = 0),
                       (this.moveCount = 2e3))),
                     e < 0 && this.hitRange && s.randInt(0, 1) && (this.hitWait = 500),
                     t &&
                     t.canSee(this) &&
                     e < 0 &&
                     c.send(
                        t.id,
                        "t",
                        Math.round(this.x),
                        Math.round(this.y),
                        Math.round(-e),
                        1,
                    ),
                     this.health <= 0 &&
                     (this.spawnDelay ?
                      ((this.spawnCounter = this.spawnDelay),
                       (this.x = -1e6),
                       (this.y = -1e6)) :
                      ((this.x = this.startX || s.randInt(0, a.mapScale)),
                       (this.y = this.startY || s.randInt(0, a.mapScale))),
                      (this.health = this.maxHealth),
                      (this.runFrom = null),
                      t && (o(t, this.killScore), this.drop)))
                )
                    for (var i = 0; i < this.drop.length;)
                        t.addResource(
                            a.resourceTypes.indexOf(this.drop[i]),
                            this.drop[i + 1],
                        ),
                            (i += 2);
            });
        };
    },
]);