local StrToNumber = tonumber;
local Byte = string.byte;
local Char = string.char;
local Sub = string.sub;
local Subg = string.gsub;
local Rep = string.rep;
local Concat = table.concat;
local Insert = table.insert;
local LDExp = math.ldexp;
local GetFEnv = getfenv or function()
return _ENV;
end;
local Setmetatable = setmetatable;
local PCall = pcall;
local Select = select;
local Unpack = unpack or table.unpack;
local ToNumber = tonumber;
local function VMCall(ByteString, vmenv, ...)
local DIP = 1;
local repeatNext;
ByteString = Subg(Sub(ByteString, 5), "..", function(byte)
if (Byte(byte, 2) == 79) then
repeatNext = StrToNumber(Sub(byte, 1, 1));
return "";
else
local a = Char(StrToNumber(byte, 16));
if repeatNext then
local b = Rep(a, repeatNext);
repeatNext = nil;
return b;
else
return a;
end
end
end);
local function gBit(Bit, Start, End)
if End then
local Res = (Bit / (2 ^ (Start - 1))) % (2 ^ (((End - 1) - (Start - 1)) + 1));
return Res - (Res % 1);
else
local Plc = 2 ^ (Start - 1);
return (((Bit % (Plc + Plc)) >= Plc) and 1) or 0;
end
end
local function gBits8()
local a = Byte(ByteString, DIP, DIP);
DIP = DIP + 1;
return a;
end
local function gBits16()
local a, b = Byte(ByteString, DIP, DIP + 2);
DIP = DIP + 2;
return (b * 256) + a;
end
local function gBits32()
local a, b, c, d = Byte(ByteString, DIP, DIP + 3);
DIP = DIP + 4;
return (d * 16777216) + (c * 65536) + (b * 256) + a;
end
local function gFloat()
local Left = gBits32();
local Right = gBits32();
local IsNormal = 1;
local Mantissa = (gBit(Right, 1, 20) * (2 ^ 32)) + Left;
local Exponent = gBit(Right, 21, 31);
local Sign = ((gBit(Right, 32) == 1) and -1) or 1;
if (Exponent == 0) then
if (Mantissa == 0) then
return Sign * 0;
else
Exponent = 1;
IsNormal = 0;
end
elseif (Exponent == 2047) then
return ((Mantissa == 0) and (Sign * (1 / 0))) or (Sign * NaN);
end
return LDExp(Sign, Exponent - 1023) * (IsNormal + (Mantissa / (2 ^ 52)));
end
local function gString(Len)
local Str;
if not Len then
Len = gBits32();
if (Len == 0) then
return "";
end
end
Str = Sub(ByteString, DIP, (DIP + Len) - 1);
DIP = DIP + Len;
local FStr = {};
for Idx = 1, #Str do
FStr[Idx] = Char(Byte(Sub(Str, Idx, Idx)));
end
return Concat(FStr);
end
local gInt = gBits32;
local function _R(...)
return {...}, Select("#", ...);
end
local function Deserialize()
local Instrs = {};
local Functions = {};
local Lines = {};
local Chunk = {Instrs,Functions,nil,Lines};
local ConstCount = gBits32();
local Consts = {};
for Idx = 1, ConstCount do
local Type = gBits8();
local Cons;
if (Type == 1) then
Cons = gBits8() ~= 0;
elseif (Type == 2) then
Cons = gFloat();
elseif (Type == 3) then
Cons = gString();
end
Consts[Idx] = Cons;
end
Chunk[3] = gBits8();
for Idx = 1, gBits32() do
local Descriptor = gBits8();
if (gBit(Descriptor, 1, 1) == 0) then
local Type = gBit(Descriptor, 2, 3);
local Mask = gBit(Descriptor, 4, 6);
local Inst = {gBits16(),gBits16(),nil,nil};
if (Type == 0) then
Inst[3] = gBits16();
Inst[4] = gBits16();
elseif (Type == 1) then
Inst[3] = gBits32();
elseif (Type == 2) then
Inst[3] = gBits32() - (2 ^ 16);
elseif (Type == 3) then
Inst[3] = gBits32() - (2 ^ 16);
Inst[4] = gBits16();
end
if (gBit(Mask, 1, 1) == 1) then
Inst[2] = Consts[Inst[2]];
end
if (gBit(Mask, 2, 2) == 1) then
Inst[3] = Consts[Inst[3]];
end
if (gBit(Mask, 3, 3) == 1) then
Inst[4] = Consts[Inst[4]];
end
Instrs[Idx] = Inst;
end
end
for Idx = 1, gBits32() do
Functions[Idx - 1] = Deserialize();
end
return Chunk;
end
local function Wrap(Chunk, Upvalues, Env)
local Instr = Chunk[1];
local Proto = Chunk[2];
local Params = Chunk[3];
return function(...)
local Instr = Instr;
local Proto = Proto;
local Params = Params;
local _R = _R;
local VIP = 1;
local Top = -1;
local Vararg = {};
local Args = {...};
local PCount = Select("#", ...) - 1;
local Lupvals = {};
local Stk = {};
for Idx = 0, PCount do
if (Idx >= Params) then
Vararg[Idx - Params] = Args[Idx + 1];
else
Stk[Idx] = Args[Idx + 1];
end
end
local Varargsz = (PCount - Params) + 1;
local Inst;
local Enum;
while true do
Inst = Instr[VIP];
Enum = Inst[1];
if (Enum <= 3) then
if (Enum <= 1) then
if (Enum > 0) then
Stk[Inst[2]] = Env[Inst[3]];
else
Stk[Inst[2]] = Inst[3];
end
elseif (Enum == 2) then
local A = Inst[2];
Stk[A](Stk[A + 1]);
else
do
return;
end
end
elseif (Enum <= 5) then
if (Enum > 4) then
Stk[Inst[2]] = Env[Inst[3]];
else
do
return;
end
end
elseif (Enum == 6) then
Stk[Inst[2]] = Inst[3];
else
local A = Inst[2];
Stk[A](Stk[A + 1]);
end
VIP = VIP + 1;
end
end;
end
return Wrap(Deserialize(), {}, vmenv)(...);
end
return VMCall("LOL!023O0003053O007072696E7403073O006F62666166616600043O0012053O00013O00122O000100024O00073O000200012O00043O00017O00", GetFEnv(), ...);