@@ -54,11 +54,11 @@ print('Hello Luartex!')">
-
+
-
[SYSTEM] Luartex VM v3.5 initialized. Delta Executor compatibility layer active.
+
[SYSTEM] Hyperion V10.0 Engine Initialized. Dynamic Instruction Polymorphism (DIP) & Seed Evolution Active.
diff --git a/process.php b/process.php
index 6ba0074..56456f5 100644
--- a/process.php
+++ b/process.php
@@ -14,17 +14,27 @@ if (!$input || empty($input['code'])) {
$code = $input['code'];
-class LuartexHyperionV8_1 {
+/**
+ * Hyperion V10.0 - Dynamic Instruction Polymorphism
+ * Features:
+ * - Dynamic Opcode Mapping (Seed-based)
+ * - Operand Permutation (A, B, C swap roles)
+ * - Instruction Ghosting & Seed Evolution
+ * - Semantic Flattening & Environmental Entanglement (inherited)
+ */
+class LuartexHyperionV10_0 {
private $rawCode;
private $constants = [];
private $instructions = [];
private $keys = [];
private $opMap = [];
private $polyKey;
+ private $seed;
public function __construct($code) {
$this->rawCode = $code;
- $this->polyKey = rand(10, 200);
+ $this->polyKey = rand(50, 200);
+ $this->seed = rand(1000, 9999);
for ($i = 0; $i < 32; $i++) {
$this->keys[] = rand(0, 255);
}
@@ -33,14 +43,13 @@ class LuartexHyperionV8_1 {
private function setupOpcodes() {
$ops = [
- 'LOADK', 'GETGLOBAL', 'SETGLOBAL', 'CALL', 'MOVE',
- 'ADD', 'SUB', 'MUL', 'DIV', 'MOD', 'POW',
- 'JMP', 'EQ', 'LT', 'LE', 'RETURN', 'GETTABLE', 'SETTABLE', 'NEWTABLE',
- 'CLOSURE', 'VARARG', 'FORPREP', 'FORLOOP', 'AND', 'OR', 'NOT', 'LEN',
- 'TFORLOOP', 'SETLIST', 'CLOSE', 'JUNK1', 'JUNK2', 'JUNK3', 'OPAQUE',
- 'SET_GLOBAL_CONST', 'MOVE_GLOBAL', 'CALL_GLOBAL_K', 'CALL_GLOBAL_V',
- 'RECURSIVE_CALL', 'TAMPER_CHECK', 'LAYER_ENTER', 'STACK_SHUFFLE',
- 'LOAD_ASM_MATH', 'POLY_SHIFT'
+ 'LOADK', 'CALL', 'MOVE',
+ 'ADD', 'SUB', 'MUL', 'DIV',
+ 'RETURN', 'GETTABLE', 'SETTABLE', 'NEWTABLE',
+ 'TAMPER_CHECK', 'ENTROPY_SYNC',
+ 'FETCH_ENV', 'RESOLVE_SYMBOL',
+ 'MUTATE_BYTECODE', 'COMPUTE_PC',
+ 'MORPH_STATE', 'GHOST_NOP'
];
shuffle($ops);
foreach ($ops as $op) {
@@ -48,7 +57,7 @@ class LuartexHyperionV8_1 {
}
}
- private function genVar($len = 32) {
+ private function genVar($len = 24) {
$sets = ['l1Ii', 'O0Q', 'uvvw', 'nmM', 'S5s', 'Z2z', 'B8b', 'g9q'];
$res = '_';
for($i=0; $i<$len; $i++) {
@@ -58,22 +67,18 @@ class LuartexHyperionV8_1 {
return $res . bin2hex(random_bytes(2));
}
- private function genAssemblyMath($n) {
- $bytecode = [];
- $current = 0;
- $target = (float)$n;
- for ($i = 0; $i < 12; $i++) {
- $op = rand(1, 4);
- $imm = rand(1, 20);
- switch($op) {
- case 1: $current += $imm; break;
- case 2: $current -= $imm; break;
- case 3: $current *= ($imm % 3 + 1); break;
- case 4: $current = (int)$current ^ $imm; break;
- }
- $bytecode[] = ($imm << 3) | ($op & 0x7);
+ private function synthesizeString($s) {
+ $res = [];
+ for ($i = 0; $i < strlen($s); $i++) {
+ $char = ord($s[$i]);
+ $a = rand(1, 100);
+ $b = rand(1, 100);
+ $op = rand(0, 2);
+ if ($op == 0) { $x = $char - ($a + $b); $res[] = "($x + $a + $b)"; }
+ elseif ($op == 1) { $x = $char + ($a - $b); $res[] = "($x - $a + $b)"; }
+ else { $x = $char ^ $a ^ $b; $res[] = "bit32.bxor($x, $a, $b)"; }
}
- return ['ops' => $bytecode, 'remainder' => $target - $current];
+ return "function() local r = ''; for _, v in ipairs({" . implode(",", $res) . "}) do r = r .. string.char(v) end return r end";
}
private function addConst($val) {
@@ -85,104 +90,87 @@ class LuartexHyperionV8_1 {
return $idx;
}
- private function emitJunk() {
- if (rand(0, 10) > 6) {
- $junkOps = ['JUNK1', 'JUNK2', 'JUNK3', 'OPAQUE'];
- $op = $junkOps[array_rand($junkOps)];
- $this->instructions[] = [$this->opMap[$op], rand(0, 255), rand(0, 255), rand(0, 255)];
- }
- }
-
private function compile() {
- $this->addConst("Hyperion V8.1 - Table Virtualization & Roblox Optimized Engine");
- $cleanCode = $this->rawCode;
- $cleanCode = preg_replace('/--[[]*.*?[]]*--/s', '', $cleanCode);
+ $this->addConst("Hyperion V10.0 - DIP Engine Active");
+ $cleanCode = preg_replace('/--[[]*.*?[]]*--/s', '', $this->rawCode);
$cleanCode = preg_replace('/--.*$/m', '', $cleanCode);
- $tokens = preg_split('/[;
-]+/', $cleanCode);
+ $tokens = preg_split('/[;\n]+/', $cleanCode);
+
foreach ($tokens as $token) {
$token = trim($token);
if (empty($token)) continue;
- $this->emitJunk();
-
- // local t = {}
+ // Randomly inject Ghost NOPs to evolve the state
+ if (rand(0, 5) == 0) {
+ $this->instructions[] = [$this->opMap['GHOST_NOP'], rand(0,255), rand(0,255), rand(0,255)];
+ }
+
+ $this->instructions[] = [$this->opMap['ENTROPY_SYNC'], 0, 0, 0];
+
if (preg_match('/^(?:local\s+)?([a-zA-Z_]\w*)\s*=\s*\{\}$/', $token, $m)) {
$this->instructions[] = [$this->opMap['NEWTABLE'], 0, 0, 0];
- $sIdx = $this->addConst($m[1]);
- $this->instructions[] = [$this->opMap['SETGLOBAL'], 0, $sIdx, 0];
+ $this->emitSemanticSetGlobal(0, $m[1]);
}
- // t["key"] = value or t.key = value
- elseif (preg_match('/^([a-zA-Z_]\w*)\s*[.[\]\s*["\']?(.*?)["\']?\s*[\\\]]?\s*=\s*(.*)$/', $token, $m)) {
+ elseif (preg_match('/^([a-zA-Z_]\w*)\s*[.[\]\s*["\']?(.*?)["\\]?\s*[\\]]?\s*=\s*(.*)$/', $token, $m)) {
$this->emitTableSet($m[1], $m[2], $m[3]);
}
- // function call
elseif (preg_match('/^([a-zA-Z_]\w*(?:[.:]\w*)*)\s*\((.*?)\)$/', $token, $m)) {
$this->emitCall($m[1], $m[2]);
}
- // assignment
elseif (preg_match('/^(?:local\s+)?([a-zA-Z_]\w*)\s*=\s*(.*)$/', $token, $m)) {
$this->emitAssignment($m[1], $m[2]);
}
-
- $this->emitJunk();
}
$this->instructions[] = [$this->opMap['RETURN'], 0, 0, 0];
}
- private function emitTableSet($tableName, $key, $val) {
- $tIdx = $this->addConst($tableName);
- $this->instructions[] = [$this->opMap['GETGLOBAL'], 0, $tIdx, 0];
-
- $kIdx = $this->addConst($key);
-
- $val = trim($val);
- $vReg = 1;
- if (preg_match('/^["\'](.*)["\']$/', $val, $vm)) {
- $vIdx = $this->addConst($vm[1]);
- $this->instructions[] = [$this->opMap['LOADK'], $vReg, $vIdx, 0];
- } elseif (is_numeric($val)) {
- $asm = $this->genAssemblyMath($val);
- $vIdx = $this->addConst(json_encode($asm));
- $this->instructions[] = [$this->opMap['LOAD_ASM_MATH'], $vReg, $vIdx, 0];
- } else {
- $vIdx = $this->addConst($val);
- $this->instructions[] = [$this->opMap['GETGLOBAL'], $vReg, $vIdx, 0];
+ private function emitSemanticGetGlobal($reg, $name) {
+ $this->instructions[] = [$this->opMap['FETCH_ENV'], $reg, 0, 0];
+ foreach (explode('.', $name) as $part) {
+ $kIdx = $this->addConst($this->synthesizeString($part));
+ $this->instructions[] = [$this->opMap['LOADK'], 250, $kIdx, 1];
+ $this->instructions[] = [$this->opMap['RESOLVE_SYMBOL'], $reg, $reg, 250];
}
-
- $this->instructions[] = [$this->opMap['SETTABLE'], 0, $kIdx, $vReg];
+ }
+
+ private function emitSemanticSetGlobal($reg, $name) {
+ $this->instructions[] = [$this->opMap['FETCH_ENV'], 251, 0, 0];
+ $kIdx = $this->addConst($this->synthesizeString($name));
+ $this->instructions[] = [$this->opMap['LOADK'], 252, $kIdx, 1];
+ $this->instructions[] = [$this->opMap['SETTABLE'], 251, 252, $reg];
+ }
+
+ private function emitTableSet($tableName, $key, $val) {
+ $this->emitSemanticGetGlobal(0, $tableName);
+ $kIdx = $this->addConst($this->synthesizeString($key));
+ $this->instructions[] = [$this->opMap['LOADK'], 1, $kIdx, 1];
+ $val = trim($val); $vReg = 2;
+ if (preg_match('/^["\\](.*)["\\]$/', $val, $vm)) {
+ $vIdx = $this->addConst($this->synthesizeString($vm[1]));
+ $this->instructions[] = [$this->opMap['LOADK'], $vReg, $vIdx, 1];
+ } elseif (is_numeric($val)) {
+ $vIdx = $this->addConst($val);
+ $this->instructions[] = [$this->opMap['LOADK'], $vReg, $vIdx, 0];
+ } else {
+ $this->emitSemanticGetGlobal($vReg, $val);
+ }
+ $this->instructions[] = [$this->opMap['SETTABLE'], 0, 1, $vReg];
}
private function emitCall($funcName, $argStr) {
- $fIdx = $this->addConst($funcName);
- $this->instructions[] = [$this->opMap['GETGLOBAL'], 0, $fIdx, 0];
+ $this->emitSemanticGetGlobal(0, $funcName);
$args = [];
if (!empty(trim($argStr))) {
- $rawArgs = explode(',', $argStr);
- foreach ($rawArgs as $idx => $arg) {
- $arg = trim($arg);
- $rIdx = $idx + 1;
-
- // Check if it's a table access: t.key or t["key"]
- if (preg_match('/^([a-zA-Z_]\w*)\s*[.[\]\s*["\']?(.*?)["\']?\s*[\\\]]?$/', $arg, $m)) {
- $tIdx = $this->addConst($m[1]);
- $this->instructions[] = [$this->opMap['GETGLOBAL'], 100, $tIdx, 0]; // temp reg 100
- $kIdx = $this->addConst($m[2]);
- $this->instructions[] = [$this->opMap['GETTABLE'], $rIdx, 100, $kIdx];
+ foreach (explode(',', $argStr) as $idx => $arg) {
+ $arg = trim($arg); $rIdx = $idx + 1;
+ if (preg_match('/^["\\](.*)["\\]$/', $arg, $m)) {
+ $vIdx = $this->addConst($this->synthesizeString($m[1]));
+ $this->instructions[] = [$this->opMap['LOADK'], $rIdx, $vIdx, 1];
+ } elseif (is_numeric($arg)) {
+ $vIdx = $this->addConst($arg);
+ $this->instructions[] = [$this->opMap['LOADK'], $rIdx, $vIdx, 0];
} else {
- $first = substr($arg, 0, 1);
- $last = substr($arg, -1);
- if (($first == '"' || $first == "'") && $first == $last) {
- $vIdx = $this->addConst(substr($arg, 1, -1));
- $this->instructions[] = [$this->opMap['LOADK'], $rIdx, $vIdx, 0];
- } elseif (is_numeric($arg)) {
- $asm = $this->genAssemblyMath($arg);
- $vIdx = $this->addConst(json_encode($asm));
- $this->instructions[] = [$this->opMap['LOAD_ASM_MATH'], $rIdx, $vIdx, 0];
- } else {
- $vIdx = $this->addConst($arg);
- $this->instructions[] = [$this->opMap['GETGLOBAL'], $rIdx, $vIdx, 0];
- }
+ $this->emitSemanticGetGlobal($rIdx, $arg);
}
$args[] = $rIdx;
}
@@ -192,191 +180,124 @@ class LuartexHyperionV8_1 {
private function emitAssignment($var, $val) {
$val = trim($val);
-
- // Check if it's a table access: t.key or t["key"]
- if (preg_match('/^([a-zA-Z_]\w*)\s*[.[\]\s*["\']?(.*?)["\']?\s*[\\\]]?$/', $val, $m)) {
- $tIdx = $this->addConst($m[1]);
- $this->instructions[] = [$this->opMap['GETGLOBAL'], 1, $tIdx, 0];
- $kIdx = $this->addConst($m[2]);
- $this->instructions[] = [$this->opMap['GETTABLE'], 0, 1, $kIdx];
+ if (preg_match('/^["\\](.*)["\\]$/', $val, $m)) {
+ $vIdx = $this->addConst($this->synthesizeString($m[1]));
+ $this->instructions[] = [$this->opMap['LOADK'], 0, $vIdx, 1];
+ } elseif (is_numeric($val)) {
+ $vIdx = $this->addConst($val);
+ $this->instructions[] = [$this->opMap['LOADK'], 0, $vIdx, 0];
} else {
- $first = substr($val, 0, 1);
- $last = substr($val, -1);
- if (($first == '"' || $first == "'") && $first == $last) {
- $vIdx = $this->addConst(substr($val, 1, -1));
- $this->instructions[] = [$this->opMap['LOADK'], 0, $vIdx, 0];
- } elseif (is_numeric($val)) {
- $asm = $this->genAssemblyMath($val);
- $vIdx = $this->addConst(json_encode($asm));
- $this->instructions[] = [$this->opMap['LOAD_ASM_MATH'], 0, $vIdx, 0];
- } else {
- $vIdx = $this->addConst($val);
- $this->instructions[] = [$this->opMap['GETGLOBAL'], 0, $vIdx, 0];
- }
+ $this->emitSemanticGetGlobal(0, $val);
}
-
- $sIdx = $this->addConst($var);
- $this->instructions[] = [$this->opMap['SETGLOBAL'], 0, $sIdx, 0];
+ $this->emitSemanticSetGlobal(0, $var);
}
private function serializeAll() {
- $bin = "";
- $bin .= pack("N", count($this->instructions));
+ $bin = pack("N", count($this->instructions));
foreach ($this->instructions as $pc_idx => $inst) {
$pc = $pc_idx + 1;
$op = (int)$inst[0];
$mask = ($this->polyKey + $pc) % 256;
- $raw_op = $op ^ $mask;
- $bin .= chr($raw_op);
- $bin .= chr((int)$inst[1] & 0xFF);
+ $bin .= chr($op ^ $mask);
+ $bin .= chr((int)$inst[1] & 0xFF);
$bin .= pack("n", (int)$inst[2]);
$bin .= chr((int)$inst[3] & 0xFF);
}
$bin .= pack("N", count($this->constants));
foreach ($this->constants as $c) {
- if (is_string($c)) {
- $bin .= chr(1);
- $bin .= pack("N", strlen($c));
- $bin .= $c;
- } elseif (is_numeric($c)) {
- $bin .= chr(2);
- $sNum = (string)$c;
- $bin .= pack("N", strlen($sNum));
- $bin .= $sNum;
- } else {
- $bin .= chr(0);
- }
+ $t = is_string($c) ? 1 : (is_numeric($c) ? 2 : 0);
+ $bin .= chr($t);
+ $s = (string)$c;
+ $bin .= pack("N", strlen($s)) . $s;
}
- $keyLen = count($this->keys);
- $enc = "";
+ $keyLen = count($this->keys); $enc = "";
for ($i = 0; $i < strlen($bin); $i++) {
- $enc .= chr(ord($bin[$i]) ^ $this->keys[$i % $keyLen] ^ (($i * 17) % 256));
+ $enc .= chr(ord($bin[$i]) ^ $this->keys[$i % $keyLen] ^ (($i * 31) % 256));
}
return bin2hex($enc);
}
public function build() {
$this->compile();
- $k_v = $this->genVar(); $b_v = $this->genVar(); $e_v = $this->genVar();
- $f_v = $this->genVar(); $d_v = $this->genVar(); $c_v = $this->genVar();
- $v_v = $this->genVar(); $stack_v = $this->genVar();
- $asm_v = $this->genVar(); $poly_v = $this->genVar();
- $handlers_v = $this->genVar(); $tamper_v = $this->genVar();
- $watchdog_v = $this->genVar(); $fetch_v = $this->genVar();
- $tk_v = $this->genVar(); // transformKey
-
+ $vars = [];
+ foreach(['k','b','e','f','d','c','v','stack','asm','poly','handlers','tamper','watchdog','fetch','tk','entropy','pc','rolling','inst','op','a','b_p','c_p','res','env','hash','sym','prev_op','state_hash','ctx','seed','morph','perm'] as $v) {
+ $vars[$v] = $this->genVar();
+ }
$k_str = implode(",", $this->keys);
- $allHex = $this->serializeAll();
+ $lua = "-- [[ Hyperion Engine V10.0 - DIP ]] --\n";
+ $lua .= "local " . $vars['k'] . " = { " . $k_str . " }; ";
+ $lua .= "local " . $vars['b'] . " = \"" . $this->serializeAll() . "\"; ";
+ $lua .= "local " . $vars['e'] . " = (getgenv and getgenv()) or (getfenv and getfenv(0)) or _G; ";
- $lua = "-- [[ Hyperion Engine V8.1 - Roblox Optimized ]] --\n";
- $lua .= "local " . $k_v . " = { " . $k_str . " }; ";
- $lua .= "local " . $b_v . " = \"" . $allHex . "\"; ";
- $lua .= "local " . $e_v . " = (getgenv and getgenv()) or (getfenv and getfenv(0)) or _G; ";
-
- // Optimized hex decoder
$lua .= "local function _H(h) local b = {}; for i = 1, #h, 2 do b[#b+1] = tonumber(h:sub(i, i+1), 16) end return b end; ";
+ $lua .= "local function _D(b) local o = {}; for i = 1, #b do local k = ((i - 1) % 32) + 1; o[i] = bit32.bxor(b[i], " . $vars['k'] . "[k], ((i - 1) * 31) % 256) end return o end; ";
+ $lua .= "local " . $vars['d'] . " = _D(_H(" . $vars['b'] . ")); ";
- // Decryption function
- $lua .= "local function _D(b) local o = {}; for i = 1, #b do local k = ((i - 1) % 32) + 1; o[i] = bit32.bxor(b[i], " . $k_v . "[k], ((i - 1) * 17) % 256) end return o end; ";
-
- $lua .= "local " . $d_v . " = _D(_H(" . $b_v . ")); ";
-
- // Helpers
+ $lua .= "local function " . $vars['entropy'] . "() return bit32.bxor(math.floor(os.clock() * 1000) % 65536, collectgarbage('count') % 256, 0x1337) end; ";
$lua .= "local function _R32(b, p) return b[p]*16777216 + b[p+1]*65536 + b[p+2]*256 + b[p+3] end; ";
$lua .= "local function _R16(b, p) return b[p]*256 + b[p+1] end; ";
- $lua .= "local ic = _R32(" . $d_v . ", 1); ";
- $lua .= "local co = 5 + ic * 5; ";
- $lua .= "local cc = _R32(" . $d_v . ", co); ";
- $lua .= "local " . $c_v . " = {}; ";
- $lua .= "local cu = co + 4; ";
+ $lua .= "local ic = _R32(" . $vars['d'] . ", 1); local co = 5 + ic * 5; local cc = _R32(" . $vars['d'] . ", co); ";
+ $lua .= "local " . $vars['c'] . " = {}; local cu = co + 4; ";
+ $lua .= "for i = 1, cc do local t = " . $vars['d'] . "[cu]; cu = cu + 1; if t > 0 then local l = _R32(" . $vars['d'] . ", cu); cu = cu + 4; local s = ''; for j = 1, l do s = s .. string.char(" . $vars['d'] . "[cu]); cu = cu + 1 end; if t == 2 then " . $vars['c'] . "[i] = tonumber(s) else " . $vars['c'] . "[i] = s end else cu = cu + 1 end end; ";
- // Constant loading
- $lua .= "for i = 1, cc do ";
- $lua .= "local t = " . $d_v . "[cu]; cu = cu + 1; ";
- $lua .= "if t == 1 or t == 2 then ";
- $lua .= "local l = _R32(" . $d_v . ", cu); cu = cu + 4; ";
- $lua .= "local s = {}; for j = 1, l do s[j] = string.char(" . $d_v . "[cu]); cu = cu + 1 end; ";
- $lua .= "s = table.concat(s); if t == 2 then " . $c_v . "[i] = tonumber(s) else " . $c_v . "[i] = s end; ";
- $lua .= "else cu = cu + 1 end end; ";
+ $lua .= "local " . $vars['fetch'] . " = function(p) local o = 5 + (p - 1) * 5; return " . $vars['d'] . "[o], " . $vars['d'] . "[o+1], _R16(" . $vars['d'] . ", o+2), " . $vars['d'] . "[o+4] end; ";
- // Table Virtualization: Key Transformation
- $lua .= "local function " . $tk_v . "(k, s) if type(k) ~= 'string' then return k end; local r = {}; for i = 1, #k do r[i] = string.char(bit32.bxor(k:byte(i), s)) end; return table.concat(r) end; ";
+ $lua .= "local " . $vars['v'] . " = function() ";
+ $lua .= "local " . $vars['stack'] . " = {}; local " . $vars['pc'] . " = 1; local " . $vars['seed'] . " = " . $this->seed . "; ";
+ $lua .= "local " . $vars['rolling'] . " = " . $vars['entropy'] . "(); local " . $vars['handlers'] . " = {}; ";
- // Assembly Math sub-VM
- $lua .= "local function " . $asm_v . "(data) ";
- $lua .= "local ops = {}; for x in data:gmatch('\"ops\":%[(.-)%]') do for v in x:gmatch('%d+') do ops[#ops+1] = tonumber(v) end end; ";
- $lua .= "local rem = 0; for x in data:gmatch('\"remainder\":(%-?%d+%.?%d*)') do rem = tonumber(x) end; ";
- $lua .= "local val = 0; ";
- $lua .= "for i = 1, #ops do ";
- $lua .= "local op = bit32.band(ops[i], 0x7); local imm = bit32.rshift(ops[i], 3); ";
- $lua .= "if op == 1 then val = val + imm elseif op == 2 then val = val - imm elseif op == 3 then val = val * ((imm % 3) + 1) elseif op == 4 then val = bit32.bxor(val, imm) end; ";
- $lua .= "end; return val + rem; end; ";
+ // Morphing Function
+ $lua .= "local function " . $vars['morph'] . "(op, seed, pc) return bit32.bxor(op, bit32.band(seed, 0xFF), bit32.band(pc, 0xFF)) % 256 end; ";
- // Anti-Tamper
- $lua .= "local function " . $tamper_v . "() ";
- $lua .= "local is_re = false; ";
- $lua .= "if debug and debug.info then ";
- $lua .= "local s = debug.info(print, 's'); if s ~= '[C]' then is_re = true end; ";
- $lua .= "end; ";
- $lua .= "if type(bit32) ~= 'table' or type(bit32.bxor) ~= 'function' then is_re = true end; ";
- $lua .= "if is_re then while true do end end; ";
- $lua .= "end; ";
-
- $lua .= "local function " . $fetch_v . "(p) local o = 5 + (p - 1) * 5; ";
- $lua .= "return " . $d_v . "[o], " . $d_v . "[o+1], _R16(" . $d_v . ", o+2), " . $d_v . "[o+4] end; ";
-
- $lua .= "local " . $poly_v . " = " . $this->polyKey . "; ";
-
- // VM Implementation
- $lua .= "local " . $v_v . " = function() ";
- $lua .= "local " . $stack_v . " = {}; local pc = 1; local " . $watchdog_v . " = 0; ";
- $lua .= "local " . $handlers_v . " = {}; ";
-
- // Define Handlers
+ // Dynamic Handler Population
foreach ($this->opMap as $name => $val) {
- $lua .= $handlers_v . "[" . $val . "] = function(a, b, c) ";
+ $lua .= $vars['handlers'] . "[" . $val . "] = function(a, b, c) ";
switch($name) {
- case 'GETGLOBAL': $lua .= "local n = " . $c_v . "[b + 1]; local t = " . $e_v . "; for p in n:gmatch('[^.:]+') do t = t[p] end; " . $stack_v . "[a] = t; "; break;
- case 'LOADK': $lua .= $stack_v . "[a] = " . $c_v . "[b + 1]; "; break;
- case 'LOAD_ASM_MATH': $lua .= $stack_v . "[a] = " . $asm_v . "(" . $c_v . "[b + 1]); "; break;
- case 'CALL': $lua .= "local f = " . $stack_v . "[a]; local args = {}; for m = 1, b do args[m] = " . $stack_v . "[a + m] end; if f then f((table.unpack or unpack)(args)) end; "; break;
- case 'SETGLOBAL': $lua .= "local n = " . $c_v . "[b + 1]; " . $e_v . "[n] = " . $stack_v . "[a]; "; break;
- case 'RETURN': $lua .= "pc = -1; "; break;
- case 'NEWTABLE': $lua .= $stack_v . "[a] = {__isVTable = true, data = {}, seed = math.random(1, 255)}; "; break;
- case 'SETTABLE': $lua .= "local t = " . $stack_v . "[a]; local k = " . $c_v . "[b + 1]; local v = " . $stack_v . "[c]; if type(t) == 'table' and t.__isVTable then t.data[" . $tk_v . "(k, t.seed)] = v else t[k] = v end; "; break;
- case 'GETTABLE': $lua .= "local t = " . $stack_v . "[b]; local k = " . $c_v . "[c + 1]; if type(t) == 'table' and t.__isVTable then " . $stack_v . "[a] = t.data[" . $tk_v . "(k, t.seed)] else " . $stack_v . "[a] = t[k] end; "; break;
- case 'JUNK1': case 'JUNK2': case 'JUNK3': $lua .= "local x = a + b + c; "; break;
- case 'OPAQUE': $lua .= "if math.abs(a) < -1 then pc = pc + b end; "; break;
- case 'TAMPER_CHECK': $lua .= $tamper_v . "(); "; break;
- default: $lua .= " "; break;
+ case 'ENTROPY_SYNC': $lua .= $vars['rolling'] . " = bit32.bxor(" . $vars['rolling'] . ", " . $vars['entropy'] . "()); "; break;
+ case 'FETCH_ENV': $lua .= $vars['stack'] . "[a] = " . $vars['e'] . "; "; break;
+ case 'RESOLVE_SYMBOL': $lua .= $vars['stack'] . "[a] = " . $vars['stack'] . "[b][" . $vars['stack'] . "[c]]; "; break;
+ case 'LOADK': $lua .= "local v = " . $vars['c'] . "[b + 1]; if c == 1 then local f = loadstring('return ' .. v); if f then v = f()() end end; " . $vars['stack'] . "[a] = v; "; break;
+ case 'CALL': $lua .= "local f = " . $vars['stack'] . "[a]; local args = {}; for m = 1, b do args[m] = " . $vars['stack'] . "[a + m] end; if f then f((unpack or table.unpack)(args)) end; "; break;
+ case 'RETURN': $lua .= $vars['pc'] . " = -1; "; break;
+ case 'NEWTABLE': $lua .= $vars['stack'] . "[a] = {}; "; break;
+ case 'SETTABLE': $lua .= $vars['stack'] . "[a][" . $vars['stack'] . "[b]] = " . $vars['stack'] . "[c]; "; break;
+ case 'ADD': $lua .= $vars['stack'] . "[a] = " . $vars['stack'] . "[b] + " . $vars['stack'] . "[c]; "; break;
+ case 'MORPH_STATE': $lua .= $vars['seed'] . " = bit32.bxor(" . $vars['seed'] . ", a, b, c); "; break;
+ case 'GHOST_NOP': $lua .= $vars['seed'] . " = bit32.bxor(" . $vars['seed'] . ", " . $vars['rolling'] . "); "; break;
+ default: break;
}
+ // Evolution of seed after every instruction
+ $lua .= $vars['seed'] . " = bit32.bxor(" . $vars['seed'] . ", " . $val . ", a or 0) + 1; ";
$lua .= "end; ";
}
- // Main Dispatch Loop
- $lua .= "while pc > 0 do ";
- $lua .= "local raw_op, a, b, c = " . $fetch_v . "(pc); if not raw_op then break end; ";
- $lua .= "local op = bit32.bxor(raw_op, (" . $poly_v . " + pc) % 256); ";
- $lua .= "local h = " . $handlers_v . "[op]; ";
- $lua .= "if h then h(a, b, c) end; ";
- $lua .= "pc = pc + 1; " . $watchdog_v . " = " . $watchdog_v . " + 1; ";
- $lua .= "if " . $watchdog_v . " > 5000 then " . $watchdog_v . " = 0; if task and task.wait then task.wait() elseif wait then wait() end end; ";
- $lua .= "end end; ";
+ $lua .= "while " . $vars['pc'] . " > 0 do ";
+ $lua .= "local raw_op, _a, _b, _c = " . $vars['fetch'] . "(" . $vars['pc'] . "); if not raw_op then break end; ";
+ $lua .= "local op = bit32.bxor(raw_op, (" . $this->polyKey . " + " . $vars['pc'] . ") % 256); ";
- $lua .= "pcall(" . $v_v . "); ";
+ // Operand Permutation based on seed
+ $lua .= "local a, b, c; local " . $vars['perm'] . " = " . $vars['seed'] . " % 3; ";
+ $lua .= "if " . $vars['perm'] . " == 0 then a,b,c = _a,_b,_c elseif " . $vars['perm'] . " == 1 then a,b,c = _b,_c,_a else a,b,c = _c,_a,_b end; ";
+
+ $lua .= "local h = " . $vars['handlers'] . "[op]; if h then h(a, b, c) end; ";
+ $lua .= "if " . $vars['pc'] . " > 0 then " . $vars['pc'] . " = " . $vars['pc'] . " + 1 end; ";
+ $lua .= "if " . $vars['pc'] . " % 100 == 0 then if task and task.wait then task.wait() elseif wait then wait() end end; ";
+ $lua .= "end; ";
+
+ $lua .= "pcall(" . $vars['v'] . "); ";
return [
'success' => true,
'protected_code' => $lua,
- 'stats' => ['original_size' => strlen($this->rawCode), 'protected_size' => strlen($lua), 'vm_version' => '8.1-table-virt']
+ 'stats' => ['version' => '10.0-DIP', 'poly_key' => $this->polyKey, 'seed' => $this->seed]
];
}
}
try {
- $vm = new LuartexHyperionV8_1($code);
+ $vm = new LuartexHyperionV10_0($code);
echo json_encode($vm->build());
} catch (Exception $e) {
echo json_encode(['success' => false, 'error' => $e->getMessage()]);
-}
+}
\ No newline at end of file
diff --git a/protected_v10_0.lua b/protected_v10_0.lua
new file mode 100644
index 0000000..8671fb9
--- /dev/null
+++ b/protected_v10_0.lua
@@ -0,0 +1,2 @@
+-- [[ Hyperion Engine V10.0 - DIP ]] --
+local _mwIIBBmvbQ1w80mbznvvnOmO54df = { 81,253,199,206,174,104,13,19,210,4,139,74,179,192,25,160,198,136,12,160,229,73,226,134,46,140,154,176,106,226,68,41 }; local _ZBm1wuM2u8sbnmZIZ8ls0Iq5690c = "51e2f9c76cd0b7c1aca7bd1fc7530b713687227773c2494ec68bbcf5f4c4e7e8b1024409f21196af0bf39c8578498b12177c038da8d83c2fe66a9c3b2e81c688d12239d3928e8c8a6ad3f8a387976a6f8d471ead6202880f86fa7cb54ea1af52f1471822b2535790c1b25db9a64649d156274fb7e965a9faa42b5eaf39c10649d3be79135273ff4aaa933d6dbdd323f0de07a26df3b6c9cf4f0ac9778eeb664631825871a993172a8ab21dff6733f26b96ec836c29a2e855a4ea1c15aefdbc081da3df5212b20df41053f0de6312ebb00c27982d4783728e06ca0602ce21a728bbff9992d11bd7eaca33013f2773cbb72ca74dcc15e2286fdc7addd5ee416f3251f2f8e2d3f3b630c1e9bd12c624aa71377dcf1789d3493ac78bbd0f3461e6e9b1fed9f3f2136aaa0af39d94e7b38b11c59d029fa86d682fe69170942e81c65e6b222ad2de32778b90de7d5f86939b0c762bd05bc902880f714b7cb54e4426a8f142c4c9b247562f4ab35d4541f24bd156e7384dfc63f2eea62aa69794c10b4989637912a8b7cd4abc92639e47d2d10eb407a26dceb8c8d847583e758c1b7a68318059297293172a8a731de766330b91b4affb7d4cd081c008cb4a249e2f76283c82fd1a4293b2648d3a93ba275288c59fb1072c4982083a60be9256ba48c94659ebb9df5db0b686ea41fd020754ec6af6c12dbf49bd044f508bb5bbce28f6a938908abba991debe1921937dbf3cd9590fb20ecdbeee687bf6a290dd3c59c6c39135ebd3d933a69e23dfff169380b93f741f6dff81105f03c65cafb90eb4ffa1bd0a14e2a7135caa5fe35d74a7a45e185a6fcf98e929a839bf6b57957b930fd5d8627d5c922177576ac17d9189d338a5244eac2ac701c08ed4032a7c4ea4682cf1101c672701596ad8b358f123d22bf1b743c4186721bca62965145cae8d090b50ee790152ae370dad483d9908412bcebac7f42d40ccc8c6168a7567dd293d6a78d68a613cd18f65987bcfe82b33de82dae7531f60ae6ae672f8ce1bac59c95a59f7a89f12ebe3c6ea07ea160b11a225e5956caf118d5a47179be8f9ce73b3e471dad0bffade83f30a389d28f47380510ebf0bc1a1f0706fedab88d52541d0d1982ef1dec324b7812ac6a45fcc93bc233f4b2abc9a144802c65ca8b505a1f2bbb80e11e2a70457a74ae6447facb35a025f6bca9cfe35a822a67c4b9565811798d86e7b5ac660654428cb32cd8fc279e67a07f579c5429ade8f0774645ef02665f15b413379530f7983bf15b27fe60bda963f964d2262fdff6f271446bec14b4805b3795852a62e03f75a3d9b081379b1abc7f02d078cc8dc1299757bc92f256070d091253b9392648e738fba736699dfd6b5424827e6098f06caa453bb4fc55c18adf79b1bf3bb85a952b11f5553f671f18079ed0f8d5a4f7987fca3ce28e8e8389298faa0809fb1023e882fe7788b4003a709cdb1f16163eea68dc13941cdc88833f9d8d22baf8326dbac4bc79eab222e4729ad90124103ce5aacb505a1f4b9b10919eba21a5be803a74e6da9f1135e046fd499e522bd3caa6b4e83678d0e99c474391e926b6e4a619369868edf63e96f07ef6dd85288c486186a7c42e93768fa424e207258177e98ba11fd2ea718c39865da027b6afff66a2b0d41a2c1535918ae714240a33707aa4129df4c133ab8bacfaf3e1982c38f53d33c3e8e3972213d8a94642393dc2ad365ddf4272bdc98daa50b597ab026ed7ea48e1df9178a0845eeb98707fafbc2e702fd140745f371fd8771fe40ce00421e98fcfece77b3e87ac2cca1fb8e9eea4e7c9d6de76e8b0316a90ccdfab63a26a8ec9296660094c0c72bf9969c77b7d86f87e80d8993f9317309668ca92268b0801ef2f65ae8a9e6b90b19bffd5016e64aa15d62a7b44c0a56218ddfe95da42ff06b15db6ec856c998306a1bc97b665b7f93709f92c76bfa7614fb64c54a9fcf8d0b68604eea267ce44b553b7f42036a81b304ab67f80bc2802e8e0f6036fbfd6869441afcc9555d1da26b475eb32e1aa30e34df035c2be3b6daa27f098cc68f159f6e7cc066686b79c3cb7b649ad76f8437ddad62679ec398e7100d2cec6c8e06cbfc9ea854c84b05abf6dd1afaf786a550bc530701eb6cf68065f64984471d06f4f0f59861efa6718b89f2bb81c4e2513b8e29e7788b4407a709cdb8f16163a4e2c8c63c4f8490de70f1c2c021bb8a38cbb15fd09aa7737f1331bf874010409443acb90eb9f1a4b1110cfabe511efe59e1533dfffc19194f7fce8dfc2ea839af3655952ace06dad17f3941927d794a39c72fd6c99465b23e46b0659f4b888ac84f7c270bb5733abf420b33371d534baa933d7421a64592c26ecd03216be8a329685d19ae93465511a57e4852f57858aa2c31df111362ffb68ef26c40d09b871dc3312d8e2a6639238292732183de26c262cee8273ecb87cfe7490d7db521a32efaca07ee0c861d44e2b2930bfafbc2f202fd120747ff71fd8774fd40ce4a065298eefb8c39e9ba79d3c8a3fed382f906338928ee7fc91842b410c3ebba273deebd8dd92e50d2c49135e9dade71fede39c1b31d9fdcf939275e2ead980e4816d142b0bd1db5e6a5b1140cf3b91341bf43ae547fe3fc4b43567ac2dfe92ca62ff53f0edc20c608cb99236b1bc47a770f24d77dcdc2873ea33807b06d8c0ccceea62b5d7c08b4682ba50b167d7a5a1726c5f05cf367a10bcc962085562924a7bd66541055f8c10f0611eb29121be16402f15b30ce551326b1a2d7a226099ade864a8975619d33686a69cdcb7b2686db2ad26bd1ff3424c29ddef6531969af28b932ebd715f8158f0459f3a98112fef7dbf213f61f1544e27db4ce36fe5bcc4a1749d9f4e4dc71aae865ced9abfbdf9ffb1c33963ff4648b5a16b31ac4a5a0213bf5b99297760e94c0843bf5d3ca20bb8a3bc2b453cf80ba313d4736b88909481bd642b0f747f5f5babf4041bce01b45b246f34b67abb35d005f6b80c4bd31ba21e43313c766941184d173281f926b6143669b708d92d360f16407e96ddc5581928f0b383a4eb32675f110593d7c53443ed8fa53f869b04390c42fd4442927a6ab66795901fb93084843a23c1d1692172a8ad27b8a09507ff8f989aa2409ce87cc07873c678e3c662f369999357dc1d755c6738bff6e7dcbd886a60b5f3aaa73a737f8cc15e301921851e9b98202fafb88a347ee0d0911b33ea48f73f545c21a5c0a8bede5de68aae068d2d9b8f2c287ea01338c29ee7f834005bf02c0a9f77c6fedab8dc6271ccfc8d56df981d22eb7d82addb35f94c7f97878002ceec1431a079042bcf040e5e6faf4564ca1fc1305aa0fbd195e87936bd610328ccebd6be761ae625cd921c247c4d130390e927470516ad532cd87ac67f12007ab23c90bd88ecf592f7d15e92b79e25a59387244036a81b304a76eff03c68f278f4d3a74e8e4663c095ca2c9575c03a2745344a63701aa4129d64b1b3aa9a2c7af2d119ac88446da243c82297f3d318f99672193dc2adc60d4f32f22d988d6ea421579a223af33fdd519e6159e085ae2aa8612f8f7d8f21af1171342eb7cf69572ed42c210560f87f4f8db73a6e371d5c8b3f9d386ff036e943fa33c8b0316ba029fa9ec666fb5ffce9c6006c88bd963abdb843ab7cf6497bd0d82c7fe63784770adcc4c0c2ee66b9c911fb1e8b8902239d3265502e409a71430e9bb42111a2881cca522fa2fbb6b5b92758140c78362461f92257703249334cfc69a39a27e5ca0249d519ac1c453332746f72a68e65a553367451e6682a41db467eb18d19d279059206ee0fe73331c58aed65e481aa26b465bbf3f07b9433dd447063bb1bdc7bb3d008e8ac612d82e3bcc79297a399395732786db2adc65d4a22e338fded6b5421069f028a128eb8f41bc48c84f5fa1f1d240fba1c3ea56b35b0701ae25a3d52ced1bc24d0142aadcd5efe8e0bd3f818dfabd9d9fe30a7fd27ca63f8b0316ba02caaef96829a9f99caa224190c8d86cf99a8272fed879dbe61d8ec7b82338057ae2db0a5019ca4ba8ac02a1f0b1b80e11e6a6135aaa5ce05d74a7aa59185a6fd399fb22a52fb07c5c9e6e951081dd2070478161790832dc2f9796c379fd7613f661c9579fc68a4935215df3282aa90d0b3b63411b6a9faa11bf71e402dd9e369459296fe8f9712b1755bac84a401cb0695359b32413aa583dc6571a27f3ff93b13f07c090c014c328398e30712431978a7a3ed19e7ed961d3bd7f7c9999c1eb421f71ae28b834e2d01dff14860351fbab9319f3eec3e61bec0c1453e671e39562e649d31e460ac9b5a1dd73a8aa298d8bbbe7c69bea1c27913ff47a875907b510cda4e27d77e6a09cc03d48cac08336f9d8d222a68a21d3a54fce9fe978625430a3cb5a075dce5da4b90eb6f2a4b1170bfabe1b46b84afe5d69b0b340114e70cb81e131bb2fab6b4e806e8a069ac76b3551db27645864d125d0d5db7ae17a07f07cc5429edc8f5675750aae263af15f5961725d196ad9e74ff629b40592de66d0457f6be8aa286f1c07eb95131a5fa22b5317fd732b8a731da4014665f2e28eed63018bc8c309887d798e73663531859e6832d59878ca0cd1ff713382dfd6ae124c20f07ba77db6d515aa4e865a51ffb9c112fdf9cab947af564914e532bec630e51fcb080a48cffca78b35f3ba3fc28bb3b79dd3cb2a13bc7aa126c51242ee4d83a1eb6823a9e8dd992e13c6d59125fec8d275f8d82aacb15f9193e27f360e72ecc0501b079d43abb503a1f4bdb10919e6a21a5be803a74e6da9f1135e046fdb9ce522be3daa6b4d9c62890b99d169390782737c4a7f8b74938fc17bf17d07f179c94988d99402703707b5357aff00017c205b067b9fbf1dae77ff0bc3822e8e453076e8e2663f0955a5c1525a18ae71464bb33a0ab9453dd447023ab8bacfb33c1982c58f55d93c3e8e3271213dc0d0272181d968923c8ff73126c791cfeb421b79ab24a734fddc1eee109e085ae2ac801bffffdbf913f61f1442eb7af69070e445ca195e118bf1f5df76a6e371d3cebafe91debe1921937dbf3cd95905bf0ecdbef2646ff7b295d9264cd7dc8922f2d3cb20b7812acba456cbd1e26525552cefd14d1a07d458b0b51db0eaa8a91710aebb1313e54aa15d62a7e14b1f586791d9bb6be668a82814d43c895081d12777579221321e3fc1339fd5d32ebf3226c24de9d4ce9ac848283c01af2e61f10e1670331f17388aae1db860e80b97d97582322562beef2f651c1cfe800f1a42aa22111be72418a4116590151b3ca3bac7b43f0582de864ac32e218e2a663b298292732781de26883a89ec353d89c999b54a1c78bb24af3ef3d015f9118f0459f5a0931ff3e3dcea18fd08105ae779e79577ed44c21c560680fce1de68fbe1718696b3a0d38aea58339331e720df035fe945c3eaaa293deefd95d56b0f82c8c367ad86807db7d82a96f31be6b38b10370177e3ca5601408843b5b542eea5e9fd024bf3af1350ad51f31b30f5b3341d5631c2c4a722e17fe7220ec666da0e99c9623413836377416a816b968b9122a56515ec2f910ddac7901c70755bf12a68e453503f7a41036a81b30fa767f80bc7832e8e452477ffef6d2b0541aeca465e09ab75111be72418a4116590151b3da2bac7b321099ada864a8975619d33686a69cdcb7b2085db2adf66d1ff3020c29d94ae161e7bac6af769b9d404fe198a0848f0b59303e3fec6e21eeb090758eb60f68c62f45ecb040d4fdfefe7c023fea723cac8a1e4df97f81b3f9d28f47a87135ff311dfa7a03020b4a38ec52241d3d89d22efda8f3ab7ce65d3ef5fda93f931384922fedd5001418145fffd4ff3eefeb8025cbdf61305ef1ea60f31a7e14b541823e3adc903f669f3251fc127ce4880d862755cd1323b4a3893609f80d470f13048b06db64e88998642327507b16721a3115168301a437998bd5fe728a103c48e2b82553b6ee8f874221017e795555a1fe0211c00bb261bb35f3dca501f2ba5a4ceae250496d08f4dcb25268e2a663d238b95317bc7c438c43185b0753bda80c5eb421e65a23ea62ae3d101fe018d0846f2b99812e5e0c3e651b44b1441e533aec830e55ece08591487fcecd668aae07cdaceb3f9d382f90a389d29ff7a875907b714cda4e27c7ee6a09cc03d48cac08033eed3df33a59d2ad8bd4ed69aa739275e22a689164804c652adbc02a9f7bfa00214f3a70457a14ae25473afa25f07566ac29bfc22a32fb47f559966941f88dc622d01927877537e9a71978ac77ff17d07fa7dc94988d89202703707b5357aff00017c205b0f668aa10eb367e51ad89a65cb193a70e6ad3e644e5dbfd24a4800b775534ba63e57a353799047412bacb695a22307829bdb1482727280622e69638acf7a32d6996eca2198ab7261859184e707432d83088f060d9a40a042d2411eacb19a12bfb889ab5ffd4d074eeb76f19c62ab069008300a8baaf5872fa6a1218390e1a1dbcce21b258f3fea739e4516ac02dba0ee6077f6ab91d53b52c6c39135eddade3ba69f2ad8bd47d293a03127512ba1810f5b1bc640bca31ca1eda8a91b10fff05a03b958fd1f27e8e14307476bc299fa2ea83eb67b55992cc8529bc36c7b4bdd217f5d739f7d8e91df6be56f0ebf64c906c7cfd40b61751ce12866f1110d613b1d5064c9fb5ced6fa502d1d369c64d7b27bcba34651c07ae84080c3082597215f56244e9077490091b22b1fa88e16c45829a8f5bcb3b32952120676382e67f32c5d763847394af667a99c2debc4a1c7ba223af33fcdc1eee139e015da0f0c701e1f988b25caf171041e771e5926eed5ed701430e9de8f5c361bef071c9d9a5e4da9be212269d32e76a99511da711d4a0ee607af6ab91d53a50c6c3913ae0dade71fede39c1b31d9fdcf939255e2ead9a14440fd259b5b906b3f4a8bc020aeab21857be53fa513deee7580358259ac2bb2ab923a67e4d996e931381dd2070478161790832dc2f9796c17dfd7616fa61c9559ec68a4935215df3282aa90d0b3b6b451b6a9ea711bf76e31bd89a2f935d3e62e5ef723e1c5eaed253411daa744645b33c0abc463dd447013fb8bacfaf381f82c38f53d33c3e8e3575213d8a94662b93dc2ad965ddf42726de98daef510d62a23abc26e0dc02fc08db0151a6f69340f3eacab813f3110700bf23bfc925e30a8a491d0eddf5f58b2fe2e823878de6a09d97b80a76d37bc653ab7187e15783eab62120a8a395d5620e8589dd22abd3cf33b08d31d3fb109593d43d361122e4c702015f8702eee606faa4e1e5110bfdf04b18f842e54d73a7aa521d5673d584e52ab93bb76b519576980683d1742b1a9e7b66587393709f9ec26bfa7611f564c54a85dc950b77755af72663f15b4e3a7e5b067c92b310bf71e60bda96369144746be8ab292b4e55b3c114481fac790006e17e44ed5d7e97064123e7bfc7e7634d829aca129e6e7b8e73666d7fc6b85312b2a56c9f3d9eab6e7c8599dfe70e422ae364af74ebc115e9069d0817adeb936dfff79cea5ab31f4e03aa38a4d46ab641cf11590680fce1de61ade868d2d0bffac283fe0a3e9d26f573805105b50bc1a1ef7e7ae6a09cc33841cdc88032e9dade3ba69b3dd3b05fd687ab3a365630a48540015bd559b2f756eeb4a0a21415f3a3035baa53e35473afbe5f09566ac29cfe22a32fbf7c5599668c109bd169390482737c4a7d837493c59a3fe26409a035861080d894077c6057ed2679e94b55713b07047884f145f035fb1add963f9a412976fde66a695501bdd3480a49ed2b5b47ab3b0ab95f3dc7561a27b9afc7a92d1f82c38f52d83539862c7738268292732b87d721ca67c8f62b3bc683c6e7490d78b428a426f8c41ce209931e51efb98607f3fccaf902f4420e53af3ef6d562f049900841088bafa19c28e8af7f8191f2a0dbc1e30a76d37be721ce0543f54ccdfbe22d21a28abcf50c40809ddf61ad9a9d7dbf832a9ff21c86dfab63365a22aa8e1948498919bcca02a1b0a8f84c19bae2521ef819fb063deee7580358259ac2bb2ab13eaa6b44836281129dd86e7b5ac660654428cb32cd8fc27be17a07f47ac54290dc8f073e3c1af23466b31a16617a420e668aa60bb367e513d89a65cb193a70e6ad3e644e5db9d84a4805b0755340a13e06a2422acd471e2ba6a3c7a92d189bc183048268269c2f24707ed0916a3e93c13dc673c8e92e3fc39cc4e7490d78b238af2debcb1ce2099f1e51e9b98712f8f7dbfa1af1171446eb7af69275ed42c2195e0f87f4ecd961abe866dbd9b8f2c185e3063b853fec7399511da71ad4a0ee6078ffab91d53854c6c3913beedade71fede39c1b31d9fdcf9392e512ead9d15440fd45bb5b906b0f1beb10f19eba4135caa58e15473afa25207566ac294f922a32fb462509d63970683d1752a139973645e639f3fd6d3c079ff345fad3fc1569ac3861c68794ef33261fd4a482761531a6a92a71db467e01dd89a2f935a3862e5ef713a1c5eaed84f4453eb2d4040bd7552e50135c74b1332a1bac7b73c008ec09650cb31359b3066233195887a3ed19e7ed961d3bd7f7c9999c3f14e0d7eb624af34fdd519e60c931151e9b98a02f3fccaf31af1170a41fe71fd8770f449c9085b1382f0b78735b5fa7f8081fca0db80f306338b2eeb739d471ffa0bcdedad683de6b69c872e4fc8c8c276ab9a9c74b9c96292ef57919aab74780322ffcc561d5d884beeb54befa28991223944f44619e91eba1231afba4b5d192483c1e970a832a66c5b8e6ec749dad11d3513c4733e046ada2ddece8138f92d0ff37bc94f88d886007c615ae82a2ab8164a217c114f25d8bb0cad71ff0bc7822b825f3a6be4ad2f7f0f47a0831e0743aa6b475eb32518a6532ec64e4e22b1f288a27f099fc8dd46c53235dd7534617fc597307ad285229c7addba6977cbc393b3175f27a27aaf63a598"; local _1OIZiOiSS9zO0M9OB558qgii6310 = (getgenv and getgenv()) or (getfenv and getfenv(0)) or _G; local function _H(h) local b = {}; for i = 1, #h, 2 do b[#b+1] = tonumber(h:sub(i, i+1), 16) end return b end; local function _D(b) local o = {}; for i = 1, #b do local k = ((i - 1) % 32) + 1; o[i] = bit32.bxor(b[i], _mwIIBBmvbQ1w80mbznvvnOmO54df[k], ((i - 1) * 31) % 256) end return o end; local _85S5BmSw0wiMssZ8gwMIv9mnbb45 = _D(_H(_ZBm1wuM2u8sbnmZIZ8ls0Iq5690c)); local function _5BzMv90Q2bO0sSwQBS0nqmg28f8a() return bit32.bxor(math.floor(os.clock() * 1000) % 65536, collectgarbage('count') % 256, 0x1337) end; local function _R32(b, p) return b[p]*16777216 + b[p+1]*65536 + b[p+2]*256 + b[p+3] end; local function _R16(b, p) return b[p]*256 + b[p+1] end; local ic = _R32(_85S5BmSw0wiMssZ8gwMIv9mnbb45, 1); local co = 5 + ic * 5; local cc = _R32(_85S5BmSw0wiMssZ8gwMIv9mnbb45, co); local _Sgiiq0SmlzqI8211nZusBsv1f679 = {}; local cu = co + 4; for i = 1, cc do local t = _85S5BmSw0wiMssZ8gwMIv9mnbb45[cu]; cu = cu + 1; if t > 0 then local l = _R32(_85S5BmSw0wiMssZ8gwMIv9mnbb45, cu); cu = cu + 4; local s = ''; for j = 1, l do s = s .. string.char(_85S5BmSw0wiMssZ8gwMIv9mnbb45[cu]); cu = cu + 1 end; if t == 2 then _Sgiiq0SmlzqI8211nZusBsv1f679[i] = tonumber(s) else _Sgiiq0SmlzqI8211nZusBsv1f679[i] = s end else cu = cu + 1 end end; local _OBIgvBQuzbbBi1wvwgsmBb8Ze730 = function(p) local o = 5 + (p - 1) * 5; return _85S5BmSw0wiMssZ8gwMIv9mnbb45[o], _85S5BmSw0wiMssZ8gwMIv9mnbb45[o+1], _R16(_85S5BmSw0wiMssZ8gwMIv9mnbb45, o+2), _85S5BmSw0wiMssZ8gwMIv9mnbb45[o+4] end; local _2ZvmiS299uvn8mM8BOvu8Onn0b03 = function() local _O8vbMMMqs2O29BzQ0ZsOn00be80b = {}; local _ZBQiB9lbZ5vn8wM88585llvz494d = 1; local _Zmzzb8z8uB1qwq5lwBvg5vvq294f = 4241; local _zubiqbwnQS10l5wQOv8ln5g80a09 = _5BzMv90Q2bO0sSwQBS0nqmg28f8a(); local _gSIQOgBsb921b8b0mQSQQ2Sm40d6 = {}; local function _B8Sbbgw8Zzv8Qv5qMzgv9wbvc156(op, seed, pc) return bit32.bxor(op, bit32.band(seed, 0xFF), bit32.band(pc, 0xFF)) % 256 end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[12] = function(a, b, c) _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 12, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[194] = function(a, b, c) _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, a, b, c); _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 194, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[104] = function(a, b, c) _O8vbMMMqs2O29BzQ0ZsOn00be80b[a] = _O8vbMMMqs2O29BzQ0ZsOn00be80b[b] + _O8vbMMMqs2O29BzQ0ZsOn00be80b[c]; _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 104, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[171] = function(a, b, c) _O8vbMMMqs2O29BzQ0ZsOn00be80b[a] = _O8vbMMMqs2O29BzQ0ZsOn00be80b[b][_O8vbMMMqs2O29BzQ0ZsOn00be80b[c]]; _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 171, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[166] = function(a, b, c) _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 166, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[161] = function(a, b, c) _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 161, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[25] = function(a, b, c) _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, _zubiqbwnQS10l5wQOv8ln5g80a09); _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 25, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[69] = function(a, b, c) _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 69, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[64] = function(a, b, c) _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 64, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[28] = function(a, b, c) _zubiqbwnQS10l5wQOv8ln5g80a09 = bit32.bxor(_zubiqbwnQS10l5wQOv8ln5g80a09, _5BzMv90Q2bO0sSwQBS0nqmg28f8a()); _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 28, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[22] = function(a, b, c) _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 22, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[46] = function(a, b, c) _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 46, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[204] = function(a, b, c) _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 204, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[160] = function(a, b, c) _ZBQiB9lbZ5vn8wM88585llvz494d = -1; _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 160, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[243] = function(a, b, c) _O8vbMMMqs2O29BzQ0ZsOn00be80b[a] = {}; _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 243, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[232] = function(a, b, c) _O8vbMMMqs2O29BzQ0ZsOn00be80b[a][_O8vbMMMqs2O29BzQ0ZsOn00be80b[b]] = _O8vbMMMqs2O29BzQ0ZsOn00be80b[c]; _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 232, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[48] = function(a, b, c) local v = _Sgiiq0SmlzqI8211nZusBsv1f679[b + 1]; if c == 1 then local f = loadstring('return ' .. v); if f then v = f()() end end; _O8vbMMMqs2O29BzQ0ZsOn00be80b[a] = v; _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 48, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[229] = function(a, b, c) local f = _O8vbMMMqs2O29BzQ0ZsOn00be80b[a]; local args = {}; for m = 1, b do args[m] = _O8vbMMMqs2O29BzQ0ZsOn00be80b[a + m] end; if f then f((unpack or table.unpack)(args)) end; _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 229, a or 0) + 1; end; _gSIQOgBsb921b8b0mQSQQ2Sm40d6[9] = function(a, b, c) _O8vbMMMqs2O29BzQ0ZsOn00be80b[a] = _1OIZiOiSS9zO0M9OB558qgii6310; _Zmzzb8z8uB1qwq5lwBvg5vvq294f = bit32.bxor(_Zmzzb8z8uB1qwq5lwBvg5vvq294f, 9, a or 0) + 1; end; while _ZBQiB9lbZ5vn8wM88585llvz494d > 0 do local raw_op, _a, _b, _c = _OBIgvBQuzbbBi1wvwgsmBb8Ze730(_ZBQiB9lbZ5vn8wM88585llvz494d); if not raw_op then break end; local op = bit32.bxor(raw_op, (166 + _ZBQiB9lbZ5vn8wM88585llvz494d) % 256); local a, b, c; local _OB8vsz1IsM8Zb2zQv2lsvQBS9983 = _Zmzzb8z8uB1qwq5lwBvg5vvq294f % 3; if _OB8vsz1IsM8Zb2zQv2lsvQBS9983 == 0 then a,b,c = _a,_b,_c elseif _OB8vsz1IsM8Zb2zQv2lsvQBS9983 == 1 then a,b,c = _b,_c,_a else a,b,c = _c,_a,_b end; local h = _gSIQOgBsb921b8b0mQSQQ2Sm40d6[op]; if h then h(a, b, c) end; if _ZBQiB9lbZ5vn8wM88585llvz494d > 0 then _ZBQiB9lbZ5vn8wM88585llvz494d = _ZBQiB9lbZ5vn8wM88585llvz494d + 1 end; if _ZBQiB9lbZ5vn8wM88585llvz494d % 100 == 0 then if task and task.wait then task.wait() elseif wait then wait() end end; end; pcall(_2ZvmiS299uvn8mM8BOvu8Onn0b03);
\ No newline at end of file
diff --git a/protected_v9_0.lua b/protected_v9_0.lua
new file mode 100644
index 0000000..235998c
--- /dev/null
+++ b/protected_v9_0.lua
@@ -0,0 +1,2 @@
+-- [[ Hyperion Engine V9.0 ]] --
+local _MImbZ5l0BvQzQimM0nwssZZQb8MM9Slu43e9 = { 31,55,1,70,159,43,188,230,102,13,23,63,100,82,23,133,172,174,97,181,217,106,139,247,45,97,184,138,25,175,43,121 }; local _9wMQO1u0O2850vmnu1BQZwBuBlbnS1nb46c0 = "1f262334137eda91ee2abd84a88f1380bc8e52ca8d0ffd8a5dc90243c4a0d5763e068115fb5e3ac1ceb4dde46c5519999dd933d6ad15ff5195ac63d5e7a23556bf9c63301a941851ac2e49c4684e3b63fccf1336e4cf3d30f573b88103833a367f4679793a9e7a31760e1d23494d58daddd500166dae5dc1d568a2a184e275169f5559f553ff7d116e14c7f5290f70fb990dd3760d4087f03f4999c345c0af71bf86c29793debaf14eaa5d64082f53e01c64b24a2d6f9d2add29e2ed64b0b7d6dfe6254f9b339bc12c547fbe29cfb9387ca893b6cd4f45b07508c2957e0295b63f3a035bba8b01b1007467a4c8efd9d25caf739631d5dd9f54e62221a5982f971f3622f9d97eda91366ebd95a98dfb7abe75cff68d0eff81b5c802414442d5763fd5b915e95f3d71ceb4273589af0a9b19ed33d6adc0e75081a99963e5a0cf7e5f666135bcbe1a51aed4fdc47d4e39bafce55b4f3daa4f599ae662d73cac25165266d0b056ff1445e7973d62240e2daeb9419a780a8f1c73a101d4c424e275163cc0d69b388a337e003c142444601a9b502fa15630af5ad70e68e4ae37e20ada9ff0e3fc15fed3812f5d2f172054b1292d4f9e761a4fb6f02d10cbcd4d1384e3ffcbc38dbb15bae607785575d0ef921a447ab39ded7d949c5d39f531a52fb58fcde62875882cd39d2647a484e3cfef697c8453a7d906a0b9758c4d01d742c8b66d060d5bfb0daee387fadaaacbe7980894f97ad6e8619950c7ad7634b72cf5041f632d71fa5e3a73abd2a88aebdb70f5f2c71af6c1807e31f9881041d88212716446055a699e457d8ea2ddad066f50ca9da6614565b45f5981bb70af67fa7a445773b2f91bad4b1daec52d14614371e9eb0fd8365f967d3bf55d978809ca4127bf8d83c468de71315b2c1428003e4bcc1c22f3453aaf56d0047aabed27ab21c58da8a1ed14ac92c67b187d573b03b92828469f34441baee23b4a9a8e170a84eff3c6d487b71eafe107781f2d9cfc8b141e37fcc4e57a849c553eee21bd30bc9ad7f43775903ecb892e5fbd92f0c6f53835db40a4c34da5ff27c01a138942c0a033061441f252b8f89aa78faacaf7960894b665daad3ac85c95f92b6ded70e05614267126db751a48e798bf8dfc9c2bb4fe975ca485db3170a69d4e41dc8b197e72545415309e2f688effddf55e661592cdfb331b6df90d10dea875b92cae775f0b75b1fb59e61543a6c62408685a6df6fc16cb3f41876c24e6488f8113d7553dbf9591dc77d66b244e3f1d3c102f52da0e26ff5e3bb85ddb157ea2ea65f666df93aef2a64ffe97d178067d4f281caa33304780620d44bde52408c9c154109cfaf7d7d780bb13bae71f745664dafb90161e26e785ff61dfc81a7aea33bc2eb583ceea23628a37d6993843bd89e8d8f9717c9941bfc14db4e466da0c43dd0d87be2e171159fb4beabdcea08ead84a7d44b8caf78d6b439dd5b95fa3668e96ae6441f2b6324c37e1151f68df4c8a09d2ebab1cf07e38dc43d66a1814e038cd6066471041b5a6996296082f4cef4446f0d8dd5e33b1b79fb1d1dd5bf62aa25bb221f026fa3b154be0811b3d46f04664179a9a85d9a780a813e78b41a8ad70cc21078fb86d1902f8b287f4e661d61466b78fa3c0f6d1078e11e845c27ece96ce23999dce7afb509fe87d1691366446e40eb3a434393200d06f3f07c58838817519dadf7d5da95b01eabe00e7f5d71d0e695124d7ba496e06f88815523e230b02bb9d496b23067957c82de7c5caa93e4cfed62708f40a6c403bff921db100fc71a9ae4371e1559fb4fe8bdcea184ad84ed900e8fbd7d94f5608f5883fa2e61f472f956073e6a68d27e5e1eeec6fdd9a8dd39b4b2cf40a2df867337bbcb0a00978a437f7f030d513bcc7f25dba693e41a6f5cd498ce13364d195b459beb36e86aec3d1f5f2aecb65af25a43aec93d036f5479bcb35dd349418f2b30bc0682c855831c64ec8ed897328a69234076456b5a274ec9102fe64321af4cc01c64aaf073f375db9fbff5b550fe89c367183f0d7c1cab347e17dc24055eace03908d6d1490280e4f6ca81dcef0da8ff4c2c1236c0f78e165c7caa9aed7d8e99596aab75b630bbd487a9717d8c2cd6913c4db184fcd7f076749e45a6cd02fda462c80901964b88bf3f424c55a95ee7b19cb493aa88fc8d08d5e134d8ee679c029dbe2b61a02cb1564d63376089301a03eed1b38089af1998eb8946b8ce9b743ffb804b4189cd563733461115269e3d7695f49bab1a6f6696dcb9335f23ef544094e130f22df93d024f66aef503ab5a1aaecc290d640d30aeef1ddd7415c02f38ec5f8e8110db5936ae9e8ad973cf6a224e391d371d2f52da0f3cfa5a25be48c81565a2f47ce27ed686afefbd4dfe91d17b067d4f281aa933304782671c4fb0f02708c9c1570b99b4b692d087b55ce2be5c7c4477c4ef810e506fa787e4639581453de22ca531a396d4e63066923298d87a47af8aaa97b628749a42bacd17efbc75d91b0889009ce22c140d17a311a8b9dfac91a490bfd55a88ba7adaa522cc4595e32275f262fe5608316a39d36f0851e394ecdca88439a9a4c61ffe9cdc2f70b8885658c58915656c4f4f5772ca296380b685ab1a670c8ad0ef240661ef0f08dca420e871b127181d3eeca713ad4d1daec731047e5870f6f41bcb36408f6f29f543829016cb593eaf868ed568ce7a3a4e2d042d046d108e0f3dfd1475e00fd8007eaee17df279d689afefbd4ae98cd163146a532804b92b2b469f7e1e5ebdfb3519d4c14e0280e6f6ca81dcef0da8ff4c2c1236c0fa8d165c7ea79aed778b995920fa33a529b587cfe628758a2fd39d6c1de997fac1bb2233dd5ba5da03fda364c40219934bd9be32171555f05eefa0cebf9db29ea6d5528bb673ddad3ecb509ee83768e96ae0471f2b632cca7e1151f986f4c8a09e2dadbcc213ee9ccf3670a7984b4d87cb41656d48014d74cc326297f8ddf258631982cae63f5424bb0e02dbea3aee77aa24074f6aa3e10cb25a08b8dd310c655a6cfaf70fc6274d847d24e641df8805861a36ed869ed529de743f4e67497641611ed45f67b20425f954d05026e6e137a72183cde8e3e75bbbd4954f345d64bb49ec747f1bda394347b4f0794781800902c7f6e2c6c492a01efcbe5c742268c8b99953126ffac6ac26cfc35d73ea39bd22b896cdf4237e9b2acc982216f4d0fbddf73824c001bedc1ef1b063d00e019353dcba7d4f5746e950b8e981e695b29ba3d94e90af6bc4a423d54695e32276f562fe560c326a39d3670d51e394efd5a88439aeacc64eff8d8b7270e7885f4197821b787f15174772d07d7fcdbc9cb64039109a99a177163faa494587e662f325e77b527e4683d5e7f80f5fed80744b264770fab0409077018f2f30e84885861ec21379ed86fcd97b887a780034547449660b891474b11f79bc4fde5730edb36df066da9fb5f4b95be98ad8625634103b1db7786400c17e1b5cb1f02d1ccec154129cfabd8f9786a910f8a941265576d8e399034f63b383f46691d21c7cf133ab60edd98dee3b6c973ece842254ac9de1c3f16e648f58b6de0ff6b060d80b0dc70b81a52d08410db40cf2a0dfad91a49bb6d55a8fb97a8ba42f991f95ba227ce530f5581126306189375416e0d7b585fa876fb3bc8a5db28d9d7824e0da0c41978250383b6763351b087c24c0b789ad07211193dca37c552ca31d42d5b562a622b935501034a38a17be0c11e79a3d4d380e30a8af07883e5e9e7d3bf55a93810ec24020b68ac19c2fcd683f0c6c5276003e48c2102fe45a2dbc4dd91960b4f265ef75c28ba6e8b543ee93dd66056a572802b9222f4f98761a46b1b27c5cd1d34b40cdb9adced287ae12bae01f785d76dee6c4135c2bfc96bf6f80900728ec2fa571e1c496a8647bd8769bc32602b484ad81bd7a2eca07e39f41fde2758d4c45a462f596c840561bb80ab3fe80bc94a4c4e09a1bd0af21d6b02fda578ee8642eb7628a5a1f70637c957e5301afddaf97a0d431ababd913fb8dd62870be885059cc8e1d67695e43183b87237185f4cffc4163118bcefb331b6dfe0e10dea877a829aa38004a66a8f503ab5a1aaecc290d64476aecfc04d3275a8f7630e6598b8d0dcf4624bf8d83c068de71315624142800364fda112fe2452da45dc30761aee974f066d692a6f5a75bf59ac47b1d204d284bf63a6e4f8e765f4fb3fe355b96930c4cd2f8bc8e82c7b348b3f14b3a19649aaacd4f0e21b3c4ed2ad3d47408c2015c64e0d89cb26a3ad536d391621bfec5a4cfab7a618f54b1d60fbbff27c87d0d8514d5ff71064a05ba17a8e2c6efdfeddcbccb54def73c84a53acd5c95fb346de571ec5f132e7635d67e0f42ee9ffdddbe8635b2aacf1ef699d93d7bb59f5048c98a0d677f4b430c2e9e31719be3d4e84062088acbef381674fe1d1bd5bc7aa829e07c424c74adb743f10819b6d83d13644f6febf503917f199c6f3eb710cdd30dd14d3abf9193d97bc66a38133d1d60472f0bda012fa15623a15d83413aebaf22ec369edef4ebe352fedf9f2a142f017c5aeb743c1d9333430b9cd015284c87104cd6a2b6898d9db21ef6be4d3511649aef841a5b68a896ab20cf902a24e277a56bfb9696b6623cc96dd2ca2659ae90e8c4f963658f58b6d918f4bc37815612974c97ee70540b44ea52faa9d9b89db09ea6d5528fb973dbad39dd5b95ff3768e96af8450e266835cd6d1a5aee83e5cda48734aebcc413e298cf3670a29d4b1ccc8251397f1443083bcc3a7f80f48eb01a2657ddd2ac7b573fe74b19d5ed2ce525f070420a34edf549be1f5feaf51d2449de3fafb24c877f02c17539f504cdc2448e5564bf9b83d27cc57a7701661d5b042f0fda5561f31f7dee14824660f9e974f175db9fb2e3be5be882d8621c6b542804b9233c4493641546b1f8381adac14e0280e6ffcdc38caf17b6f903604864c3ef8e0c5c64b381fe669198463fe22ca535b59ddff42a79932fcb912554ac97e8c4f9636e865fbedc1afdbb75d915018e42c3af360a0b44e949fabccead8fa483afc14a95a37bdbbf3cdd5b95ff3261ee62e34f162a217c8f6d085facccb296a09e28aeb0cf0bfa8dd62d79b9804f52d382187666464815238b337d86f9cbf048641988c5ef381675fb141c97e136b237ac774e1034abe103b25a00bdd83d157b4675f2ee19d33b4d9b6f30fe4896990cce5d3bae9483d87bcc7a3a4e210a2d042754cd092ff85634bd5ddb1579b7e869a03c828cb4edf703b1c8d97f046e482819ad363c5d827f0147a5e23505c2d55d029ef6eed2ca99f957eee21c7a1f3c87bd91084a63b384f9639d844621ee63ec76a684d1a47b3ac936cf832254a490e4cfe16a75d25ab68940fde275d50253854cdbb66c52511cb519f4f286f5cfacdea6d91fd2eb7384e87b8802dbe87061a02cb1773f0642169d2b5412baddb28aa08639f6f38c52ba8d9d3d6db58f455ac5c45a247f394f156d9e733f8ebd8da5013d4a9287ad7a427efd13528de730a93cbb39164c7eaff50fae531dec9d69177a413ba2b35ddb2058837d21e5588e8113da5c3afdcfd7c669d03869016615351a3855da0a3eff5638bb54dc5721f6f277ec378ed0f4eba042f29ac879187d513806b578751b8064030de5bf6700d3d05d0e95e5f3c6d086b212b2e61c745064dbfa99115c79a79fe12dd4c4463aec63fd6de79ecdf12f758232da88395db18cfbdcf9717c9d4bb6c60fe8a57c950b01c10dd5e43f1b0307fb50f4b19de0cfedc6e8d719d4ee21defb26dd15dbac2233a036a004512631359e305e70ceb4dd94eeda77f9e8865cb885c63d3cfacb030dc5d0156b7f41440e3bd875238e8bd1e41e6f50d4dca6635724bd4e188eea2bf536b03b540729f1fd03ad5611b7d83d107e4624f3fc4b9c361f8f6030a7488c8f05910164f6c8c4db38963b63466214244d611dda4e6aa7037fe15d82152deca544c255f6d6e0b6fb18aad39e201c74446440fa7b704fc176104fbaf72e08848e1702eafaff90c3dcf51ef3a14f3d0f37c0b4910f496fb896fc7f9d9b553df328f82bb5d290e67175863e8891205abdd7bc9db0343b8110fe8c5df5e67cc8474fc14287f36b53511bfb0cfaf480f0bc84a88f141cc9e13082e46093589ce86e2ea623b9564d267e35dc790151a8dbafc4d78339ecbc865df6c49f7c39e7db4a1acd8f04666d4648152f883a7a8eedc8ed44670d8bdce433027def1610c6bc6bad2db521165266b1e71bb55a07badd3146211b6ae8f24d8b791f876a20f948909409c24324b68a8bc46dcd7a3c4e220a24032f4bca1523b11f79bc4fde5730edb36dfb64da9fb4f2b95beb83d8621c70572804b92d2e4f98761959b4fc774196d2570cd7aeb094cb81ae12bae217785d70dde6c4135c2bfc96bf6f80900728ec2fa571e1c496a8647bd8769bc32602b484ad81bd7a2eca07e39f41fde2758d4c45a462f597e740561bb80ab3fe80bc94a4c4e09a1bd0af21d6b02fda578ee8642eb7628a5a1f70637c957e5301afddaf97a0d431b7a8cf1ef69cd73d7bb59e5348c98a0d6e7f4b43022c9e317199e1d4e8407e0c8fdce2330f7eef1610c1bb6bad2dbb21165266b0ec1bb55a04b7dd3146211b6ae8f24d8b791f876c21e444829215ce5523b68ac19c2fcd683f0c6c5276003e4bce102fe55a2dbe48d91960aff072e27ed68eb6f3b550fe8bc567183f0d7c1cab347e17dc240559aafc351cd4cd45139cfaf7d2d395b61eabe20e7f5d73d0e695124978b39ded7e8d905e28f734ac2ebd87cdff23789b2dc9912554ac8de4c7ef6c7c8253a7df0ff6b063da0b0dc70b81a52d08410db40cf2a3dfb89db39da3d94f89a67fdea038cf509ee83a74e569f54f072f6f3dd66a0251e594ebd6a88439a3aac61ffe80dd3d7bb5995641ce820766764a4b0429863a7c8eedcde4436f0b8dd5e33b007bef1610cca869a137b63c1a1d2ff7e609b01849e18635117b4379ece503d32244837521e05d828c05d44636b48692c672d238781a270f2a4a771688143ee34521af4ec21968b6f86cee379fcbb5f1bb19a6d58366076b48281daa363c57857f010df4a4261acc831d4dc7feecd3cf95a20db6f1166d5439c1efdd555c3db38bed3d9d9e5b28b175f76bfbd1d1a56b34c9368c982e11f3c0e89dbc2e29dd1db69f0fb8fe31e92221a5cc93e37145571cb410f2b8cef8d2e7c9e3d9089cb273d1aa34dd16daba221ee962a3565668637c8b3f5303bd9ca6ccb19939b7bcdc06f686cf2861bc840008919107783d1e0c47338b227d8ee2c4e8487e0a93d0e722007cef1010c2bc62aa25b32d1f536eaeed1bb55a04bfd436047e5870f6f41ac736468f6822f543829015cb083fbfc2ccd529de67311c34132a087c0d885561b4586ee71c821d3eabe120ac31d6cde3b7e009b09a836e513300092f991b0d09c6384e1bf4bf7b00cbc1094dd6b7b3c69195a61ebdf615741b2b9aefe6165c39b3dfa36fd4c01461b072ad79bd84c9e62e758a26da9a2e43ab8de4c7ef627c8253a4de0ff6b060da0b0dc70b81a52d08410db40cf2a0dfad91a49bbdd55a89bc7adaa539ca5098e83374e569f543092f6f77922a0943e0d6a58bfa872eabb0cf06e781cf2c67bc844a4cd68218766b4648152887337d86e3c5e4436f0a89dce4330364e31501c7b962ac25bb25165466b4e512b2521cbdc63d0f685768faf70fc52044837521e05e828c05d54136b48690c172d272225e3410241c3d59d11c38e35f70a65d945a68f0e178e227d691a8e3e60facd39f291a3e0c695db16c354fd638494fefb5615d908f455095b3b182e2b59b3f89b75b3a1e3081a0d712556fffd9ae2ed1900728ff21a225ae9699a97175e432dac72e1df384a19fb8332edc5bedc51eefb07ec815198549d5a4290f0f5df64feab1c5b48ab788a4d94884a67fdea03ecf4695e32276f662fe5606346a3999374e42fc9abf9ce7dd31acaec313e49ec33d69a5814e49d091157b7f545015309e226787f8d5e95a6f149acdef38167cff0d19d9a06fb025a9350f4766a8f50aa7531dec9d69177a413ba2b35ddb275d987130e75b8e811ccb593eb2909bd570de62244e3f1d3d102655d2113be35626af4fc61563a2f476eb79de88b2e3b85bed9ada6e066f4d7506b97e734fc176104feff03b06c2921150dcb8b8c880ddfa4cb2a70774182a8cefcb5f083ae1d8ed3d9dd51b6c"; local _iSnvzq5qvZiBQi2M9wIvnz0vigMSuqvB3d0a = (getgenv and getgenv()) or (getfenv and getfenv(0)) or _G; local function _H(h) local b = {}; for i = 1, #h, 2 do b[#b+1] = tonumber(h:sub(i, i+1), 16) end return b end; local function _D(b) local o = {}; for i = 1, #b do local k = ((i - 1) % 32) + 1; o[i] = bit32.bxor(b[i], _MImbZ5l0BvQzQimM0nwssZZQb8MM9Slu43e9[k], ((i - 1) * 17) % 256) end return o end; local _lqO81uqQbIBmn8222ZsM2zOBgM9BM809e1b8 = _D(_H(_9wMQO1u0O2850vmnu1BQZwBuBlbnS1nb46c0)); local function _2S51qb098Z9SsuQlIZbSBns0vwgObgBg8196() local t = os.clock(); local m = collectgarbage('count'); local f = math.pi + (1/0); return bit32.bxor(math.floor(t * 100) % 256, math.floor(m) % 256, 0x5A) end; local function _R32(b, p) return b[p]*16777216 + b[p+1]*65536 + b[p+2]*256 + b[p+3] end; local function _R16(b, p) return b[p]*256 + b[p+1] end; local ic = _R32(_lqO81uqQbIBmn8222ZsM2zOBgM9BM809e1b8, 1); local co = 5 + ic * 5; local cc = _R32(_lqO81uqQbIBmn8222ZsM2zOBgM9BM809e1b8, co); local _SnmzMnnbSS9wuvvwZ81b8v9bQMMgmibq5e5b = {}; local cu = co + 4; for i = 1, cc do local t = _lqO81uqQbIBmn8222ZsM2zOBgM9BM809e1b8[cu]; cu = cu + 1; if t == 1 or t == 2 then local l = _R32(_lqO81uqQbIBmn8222ZsM2zOBgM9BM809e1b8, cu); cu = cu + 4; local s = {}; for j = 1, l do s[j] = string.char(_lqO81uqQbIBmn8222ZsM2zOBgM9BM809e1b8[cu]); cu = cu + 1 end; s = table.concat(s); if t == 2 then _SnmzMnnbSS9wuvvwZ81b8v9bQMMgmibq5e5b[i] = tonumber(s) else _SnmzMnnbSS9wuvvwZ81b8v9bQMMgmibq5e5b[i] = s end; else cu = cu + 1 end end; local _MBOMnzmu001n9z5ZBBwIn5Mz12sqiOnO1089 = function(p) local o = 5 + (p - 1) * 5; return _lqO81uqQbIBmn8222ZsM2zOBgM9BM809e1b8[o], _lqO81uqQbIBmn8222ZsM2zOBgM9BM809e1b8[o+1], _R16(_lqO81uqQbIBmn8222ZsM2zOBgM9BM809e1b8, o+2), _lqO81uqQbIBmn8222ZsM2zOBgM9BM809e1b8[o+4] end; local _Zgz51is8vgzs0imOIvImw9IZZi9lqQ9lc28a = 194; local _2b9i2mBOIZQ219vOBZqMu8zg10v9l09Za5cd = function() local _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf = {}; local _bIimQ08OnO8z5Mn0biQ2m2wmOw9n29SIdfee = 1; local _Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9 = _2S51qb098Z9SsuQlIZbSBns0vwgObgBg8196(); local _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 0; local _8qugIgQiZ8i5gQZvQB1snqsm05Szu8vu2df4 = 0; local _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d = {}; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[90] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[a] = _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[b][_SnmzMnnbSS9wuvvwZ81b8v9bQMMgmibq5e5b[c+1]]; _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 90; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[92] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 92; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[248] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); local target = 5 + (a - 1) * 5 + b; _lqO81uqQbIBmn8222ZsM2zOBgM9BM809e1b8[target] = c; _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 248; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[250] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); local t = _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[b]; local k = _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[c]; if _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 % 2 == 0 then _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[a] = t[k] else _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[a] = t[k] or _G[k] end; _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 250; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[21] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[a] = {}; _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 21; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[239] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); _bIimQ08OnO8z5Mn0biQ2m2wmOw9n29SIdfee = bit32.bxor(a, _Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, b) % ic; _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 239; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[84] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 84; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[164] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); _bIimQ08OnO8z5Mn0biQ2m2wmOw9n29SIdfee = -1; _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 164; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[246] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 246; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[101] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); local t = _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[a]; local k = _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[b]; if not k then k = _SnmzMnnbSS9wuvvwZ81b8v9bQMMgmibq5e5b[b+1] end; t[k] = _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[c]; _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 101; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[11] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); _Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9 = bit32.bxor(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, _2S51qb098Z9SsuQlIZbSBns0vwgObgBg8196()); _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 11; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[42] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); local f = _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[a]; local args = {}; for m = 1, b do args[m] = _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[a + m] end; if f then f((table.unpack or unpack)(args)) end; _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 42; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[18] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 18; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[93] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 93; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[122] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[a] = _iSnvzq5qvZiBQi2M9wIvnz0vigMSuqvB3d0a; _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 122; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[77] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); if _Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9 % 5 == 0 then _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[a] = _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[b] - _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[c] else _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[a] = _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[b] + _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[c] end; _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 77; end; _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[47] = function(a, b, c) local _zi0MlQOus22BO850ZSn1QbZQmqvn5zzMb3b1 = bit32.bxor(_ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee, bit32.band(_Mu5iZBQ1m8nmM2viBvqSOSmlQvsgzvnb58b9, 0xFF)); local v = _SnmzMnnbSS9wuvvwZ81b8v9bQMMgmibq5e5b[b + 1]; if c == 1 and type(v) == 'string' then local f, err = loadstring('return ' .. v); if f then v = f()() end end; _MIvnqvl1liz0QMzl1vQB8qSg9uuuqqIi2baf[a] = v; _ibvISnnqOlM8qm9SMMZ22lQsSlwlnqmne7ee = 47; end; while _bIimQ08OnO8z5Mn0biQ2m2wmOw9n29SIdfee > 0 do local raw_op, a, b, c = _MBOMnzmu001n9z5ZBBwIn5Mz12sqiOnO1089(_bIimQ08OnO8z5Mn0biQ2m2wmOw9n29SIdfee); if not raw_op then break end; local op = bit32.bxor(raw_op, (_Zgz51is8vgzs0imOIvImw9IZZi9lqQ9lc28a + _bIimQ08OnO8z5Mn0biQ2m2wmOw9n29SIdfee) % 256); local h = _b2Q099wl8MMB82s8Q990zZOSmizvbIq1821d[op]; if h then h(a, b, c) end; if _bIimQ08OnO8z5Mn0biQ2m2wmOw9n29SIdfee > 0 then _bIimQ08OnO8z5Mn0biQ2m2wmOw9n29SIdfee = _bIimQ08OnO8z5Mn0biQ2m2wmOw9n29SIdfee + 1 end; if _bIimQ08OnO8z5Mn0biQ2m2wmOw9n29SIdfee % 50 == 0 then if (0/0) == (0/0) then while true do end end; if task and task.wait then task.wait() elseif wait then wait() end end; end end; pcall(_2b9i2mBOIZQ219vOBZqMu8zg10v9l09Za5cd);
\ No newline at end of file
diff --git a/test_v10_0.php b/test_v10_0.php
new file mode 100644
index 0000000..624b124
--- /dev/null
+++ b/test_v10_0.php
@@ -0,0 +1,48 @@
+ [
+ 'header' => "Content-type: application/json\r\n",
+ 'method' => 'POST',
+ 'content' => json_encode(['code' => $test_code]),
+ ],
+];
+
+$context = stream_context_create($options);
+$result = file_get_contents($url, false, $context);
+
+if ($result === FALSE) {
+ die("Error reaching process.php");
+}
+
+$response = json_decode($result, true);
+
+if ($response && $response['success']) {
+ $protected_file = 'protected_v10_0.lua';
+ file_put_contents($protected_file, $response['protected_code']);
+ echo "Successfully generated $protected_file\n";
+ echo "Stats: " . json_encode($response['stats']) . "\n";
+} else {
+ echo "Error: " . ($response['error'] ?? 'Unknown error') . "\n";
+ echo "Full response: " . $result . "\n";
+}
+
diff --git a/test_v9_0.php b/test_v9_0.php
new file mode 100644
index 0000000..6bd90cf
--- /dev/null
+++ b/test_v9_0.php
@@ -0,0 +1,56 @@
+ $code]);
+
+ $ch = curl_init($url);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_POST, true);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
+ curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
+
+ $response = curl_exec($ch);
+ if (curl_errno($ch)) {
+ return ['success' => false, 'error' => curl_error($ch)];
+ }
+ curl_close($ch);
+
+ return json_decode($response, true);
+}
+
+$result = testObfuscation($testCode);
+
+if ($result && $result['success']) {
+ echo "Obfuscation Successful!\n";
+ echo "Stats: " . json_encode($result['stats']) . "\n";
+ $protectedFile = 'protected_v9_0.lua';
+ file_put_contents($protectedFile, $result['protected_code']);
+ echo "Protected code saved to $protectedFile\n";
+
+ // Check if it's valid Lua (syntax check)
+ $output = [];
+ $return_var = 0;
+ exec("luac -p $protectedFile 2>&1", $output, $return_var);
+ if ($return_var === 0) {
+ echo "Syntax Check: PASSED\n";
+ } else {
+ echo "Syntax Check: FAILED\n";
+ echo implode("\n", $output) . "\n";
+ }
+} else {
+ echo "Obfuscation Failed!\n";
+ print_r($result);
+}
+