--peadro beautifier rawset(_G, "__LARRY_PREMIUM", true) rawset(_G, "__LARRY_ALLOW_HOST_HTTP_FETCH", false) rawset(_G, "__LARRY_EMIT_LOADSTRING_FETCH_COMMENTS", false) local a = debug local b = debug.sethook local c = debug.getinfo local d = debug.traceback local e = load local f = loadstring or load if not f then pcall(function() local luau = require("@std/luau") f = function(source, name, env) local res = luau.compile(source) return luau.load(res, name or "chunk", env or _G) end end) if not f then pcall(function() f = require("@lune/luau").load end) end end local g = pcall local h = xpcall local i = error local j = type local b_native_rawset = rawset local b_native_rawget = rawget local b_native_rawequal = rawequal local b_native_debug_getupvalue = j(debug) == "table" and j(debug.getupvalue) == "function" and debug.getupvalue or nil local b_native_debug_setupvalue = j(debug) == "table" and j(debug.setupvalue) == "function" and debug.setupvalue or nil local b_original_select if j(b_native_debug_getupvalue) == "function" then for i = 1, 5 do local name, value = b_native_debug_getupvalue(select, i) if j(value) == "function" then b_original_select = value break end end end if j(b_original_select) ~= "function" then b_original_select = select end local b_original_rawget if j(b_native_debug_getupvalue) == "function" then for i = 1, 5 do local name, value = b_native_debug_getupvalue(rawget, i) if j(value) == "function" then b_original_rawget = value break end end end if j(b_original_rawget) ~= "function" then b_original_rawget = rawget end local k = getmetatable local l = rawequal local m = tostring local n = tonumber local o = io if not o then do local b_fs_ok, b_fs = pcall(function() return require("@lune/fs") end) if b_fs_ok and type(b_fs) == "table" and type(b_fs.readFile) == "function" and type(b_fs.writeFile) == "function" then o = {} o.open = function(b_path, b_mode) b_mode = tostring(b_mode or "r") if b_mode:find("r", 1, true) then local b_ok, b_data = pcall(b_fs.readFile, tostring(b_path)) if not b_ok then return nil end return { read = function() return b_data end, close = function() return true end } end if b_mode:find("w", 1, true) then local b_chunks = {} return { write = function(_, ...) for b_index = 1, select("#", ...) do b_chunks[#b_chunks + 1] = tostring(select(b_index, ...)) end return true end, close = function() b_fs.writeFile(tostring(b_path), table.concat(b_chunks)) return true end } end return nil end end end end local p = os local native_next = next local function b_native_unpack_fallback(b_values, b_from, b_to) b_from = b_from or 1 b_to = b_to or #b_values if b_from > b_to then return end return b_values[b_from], b_native_unpack_fallback(b_values, b_from + 1, b_to) end local native_unpack = (table and table.unpack) or unpack or b_native_unpack_fallback local p_ = getfenv and getfenv() or _G if _G ~= p_ then _G = p_ end if rawget(_G, "__LARRY_FAILOPEN_CHILD_LOOKUPS") == nil then rawset(_G, "__LARRY_FAILOPEN_CHILD_LOOKUPS", false) end if rawget(_G, "__LARRY_FAILOPEN_MEMBER_INDEX") == nil then rawset(_G, "__LARRY_FAILOPEN_MEMBER_INDEX", true) end if rawget(_G, "__LARRY_FAILOPEN_ENUM_MEMBERS") == nil then rawset(_G, "__LARRY_FAILOPEN_ENUM_MEMBERS", false) end if rawget(_G, "__LARRY_FAILOPEN_PROPERTY_TYPES") == nil then rawset(_G, "__LARRY_FAILOPEN_PROPERTY_TYPES", false) end local native_getfenv = getfenv local native_setfenv = setfenv local native_getmetatable = getmetatable local native_setmetatable = setmetatable or (j(debug) == "table" and j(debug.setmetatable) == "function" and debug.setmetatable) or (j(_G) == "table" and j(_G.debug) == "table" and j(_G.debug.setmetatable) == "function" and _G.debug.setmetatable) or nil local function b_safe_setmetatable(b_table, b_mt) if j(native_setmetatable) == "function" then return native_setmetatable(b_table, b_mt) end return b_table end local native_loadstring = loadstring or load local native_newproxy = newproxy local function p1(p2) if type(p2) ~= "table" then return p2 end local p3 = {} for p4, p5 in pairs(p2) do p3[p4] = p5 end return p3 end table = p1(table) string = p1(string) math = p1(math) os = p1(os) coroutine = p1(coroutine) debug = p1(debug) if utf8 then utf8 = p1(utf8) end local b_public_os = { clock = os and os.clock or function() return 0 end, date = os and os.date or function() return "*t" end, difftime = os and os.difftime or function(a, b) return (tonumber(a) or 0) - (tonumber(b) or 0) end, time = os and os.time or function() return 0 end } do local p6 = string and string.gmatch or nil if p6 then string.gmatch = function(...) local p7 = p6(...) if type(p7) == "function" and type(_G) == "table" then rawset(_G, "gsm", p7) end return p7 end end end do local p8 = string and string.format or nil if p8 then string.format = function(p9, ...) local q0 = table.pack(...) local q1, q2 = pcall(function() return p8(p9, native_unpack(q0, 1, q0.n)) end) if q1 then return q2 end local q3 = false for q4 = 1, q0.n do local q5 = q0[q4] if j(q5) == "table" and rawget(q5, "__proxy_id") ~= nil then q0[q4] = tostring(q5) q3 = true end end if q3 then return p8(p9, native_unpack(q0, 1, q0.n)) end error(q2, 0) end end end table.unpack = table.unpack or native_unpack do local b_native_table_create = table.create -- Always wrap table.create: Luau native can hard error on giant/invalid sizes. -- For dumper stability, clamp/soft-fail to an empty table instead of terminating. table.create = function(b_count, b_value) local b_num = tonumber(b_count) or 0 if b_num ~= b_num or b_num == math.huge or b_num == -math.huge then b_num = 0 end b_num = math.floor(b_num) if b_num < 0 then b_num = 0 end -- Avoid massive allocation crashes while preserving normal behavior. if b_num > 200000 then b_num = 0 end if j(b_native_table_create) == "function" then local b_ok, b_tbl = pcall(b_native_table_create, b_num, b_value) if b_ok and j(b_tbl) == "table" then return b_tbl end end local b_out = {} for b_index = 1, b_num do b_out[b_index] = b_value end return b_out end if coroutine and not coroutine.close then coroutine.close = function() return true end end if string and not string.unpack then local function b_read_uint(b_data, b_pos, b_size, b_big_endian) local b_value = 0 if b_big_endian then for b_index = 0, b_size - 1 do b_value = b_value * 256 + (string.byte(b_data, b_pos + b_index) or 0) end else for b_index = b_size - 1, 0, -1 do b_value = b_value * 256 + (string.byte(b_data, b_pos + b_index) or 0) end end return b_value end string.unpack = function(b_fmt, b_data, b_pos) b_fmt = tostring(b_fmt or "") b_data = tostring(b_data or "") b_pos = tonumber(b_pos) or 1 local b_big_endian = b_fmt:find(">", 1, true) ~= nil local b_clean = b_fmt:gsub("[<>!=%s]", "") local b_first = b_clean:sub(1, 1) if b_first == "B" then return string.byte(b_data, b_pos) or 0, b_pos + 1 end if b_first == "b" then local b_value = string.byte(b_data, b_pos) or 0 if b_value >= 128 then b_value = b_value - 256 end return b_value, b_pos + 1 end if b_first == "c" then local b_size = tonumber(b_clean:match("^c(%d+)")) or 0 return b_data:sub(b_pos, b_pos + b_size - 1), b_pos + b_size end if b_first == "I" then local b_size = tonumber(b_clean:match("^I(%d+)")) or 4 return b_read_uint(b_data, b_pos, b_size, b_big_endian), b_pos + b_size end if b_first == "i" then local b_size = tonumber(b_clean:match("^i(%d+)")) or 4 local b_value = b_read_uint(b_data, b_pos, b_size, b_big_endian) local b_limit = 2 ^ (8 * b_size - 1) if b_value >= b_limit then b_value = b_value - (2 * b_limit) end return b_value, b_pos + b_size end if b_first == "d" or b_first == "f" or b_first == "n" then return 0, b_pos + (b_first == "f" and 4 or 8) end return 0, b_pos end end end -- Minimal pack/unpack fallback (for detectors) even when native pack gets guarded/disabled. do local b_native_pack = (p_ and p_.string and rawget(p_.string, "pack")) or (string and rawget(string, "pack")) local b_native_unpack = (p_ and p_.string and rawget(p_.string, "unpack")) or (string and rawget(string, "unpack")) if j(_G) == "table" then if j(_G.__larry_native_string_pack_raw) ~= "function" and j(b_native_pack) == "function" then _G.__larry_native_string_pack_raw = b_native_pack end if j(_G.__larry_native_string_unpack_raw) ~= "function" and j(b_native_unpack) == "function" then _G.__larry_native_string_unpack_raw = b_native_unpack end end local function b_pack_u32_be(n) n = (tonumber(n) or 0) % 4294967296 local b1 = math.floor(n / 16777216) % 256 local b2 = math.floor(n / 65536) % 256 local b3 = math.floor(n / 256) % 256 local b4 = n % 256 return string.char(b1, b2, b3, b4) end local function b_pack_u32_le(n) n = (tonumber(n) or 0) % 4294967296 local b1 = n % 256 local b2 = math.floor(n / 256) % 256 local b3 = math.floor(n / 65536) % 256 local b4 = math.floor(n / 16777216) % 256 return string.char(b1, b2, b3, b4) end local function b_unpack_u32_be(s, pos) pos = tonumber(pos) or 1 local b1 = string.byte(s, pos) or 0 local b2 = string.byte(s, pos + 1) or 0 local b3 = string.byte(s, pos + 2) or 0 local b4 = string.byte(s, pos + 3) or 0 return (b1 * 16777216 + b2 * 65536 + b3 * 256 + b4) % 4294967296, pos + 4 end local function b_unpack_u32_le(s, pos) pos = tonumber(pos) or 1 local b1 = string.byte(s, pos) or 0 local b2 = string.byte(s, pos + 1) or 0 local b3 = string.byte(s, pos + 2) or 0 local b4 = string.byte(s, pos + 3) or 0 return (b4 * 16777216 + b3 * 65536 + b2 * 256 + b1) % 4294967296, pos + 4 end if string and not rawget(string, "__larry_pack_i4_fallback") then rawset(string, "__larry_pack_i4_fallback", true) string.pack = function(fmt, ...) if j(b_native_pack) == "function" and not l(b_native_pack, string.pack) then local ok, res = pcall(b_native_pack, fmt, ...) if ok then return res end end fmt = tostring(fmt or "") local n = select(1, ...) if fmt == ">I4" then return b_pack_u32_be(n) end if fmt == "I4" then return b_unpack_u32_be(data, pos) end if fmt == " 0 then r.TIMEOUT_SECONDS = b_ts end local b_ms = tonumber(rawget(_G, "__LARRY_MAX_SIMULATED_SECONDS")) if b_ms ~= nil and b_ms > 0 then r.MAX_SIMULATED_SECONDS = b_ms end end local s ed: " .. tostring(s)) end local t = { output = {}, indent = 0, registry = {}, reverse_registry = {}, names_used = {}, parent_map = {}, property_store = {}, call_graph = {}, variable_types = {}, string_refs = {}, proxy_id = 0, callback_depth = 0, auto_firing = false, pending_iterator = false, last_http_url = nil, last_http_fetched = false, last_emitted_line = nil, repetition_count = 0, current_size = 0, lar_counter = 0, local_count = 0, service_cache = {}, enum_cache = {}, child_cache = {}, mock_json_store = {}, http_cache = {}, sequence_keypoints = {}, mem_storage = {}, collection_tags = {}, collection_signals = {}, signal_meta = {}, signal_connections = {}, connection_info = {}, active_tweens = {}, action_bindings = {}, file_system = {}, introspection_log = {}, emitted_function_sources = {}, function_meta = {}, function_hooks = {}, metamethod_hooks = {}, current_namecall_method = nil, current_namecall_object = nil, hook_depth = 0, guid_counter = 0, debug_id_counter = 0, fake_clock = 0, heartbeat_counter = 0, scheduled_threads = {}, cancelled_threads = {}, schedule_counter = 0, scheduled_resume_counts = {}, signal_waiters = {}, running_scheduled = false, main_thread = nil, active_env_stack = {}, script_env = {}, function_env = {}, last_blank_error_context = nil, monolithic_runtime_mode = false } if coroutine and j(coroutine.running) == "function" then t.main_thread = coroutine.running() end -- Strong keys: weak-key mode dropped raw MT entries for live tables during probes, so -- getrawmetatable fell back to native_getmetatable and returned the __metatable lock *string* -- (executors return the real table). See getrawmetatable + EXECUTOR_COMPATIBLE_ANTI_LOGGER RAWMT. local b_raw_metatables = {} local b_newproxy_marker = {} local b_shared_table_marker = {} local b_buffer_marker = {} local b_env_state = { hidden_keys = { setsimulationradius = true, hookfunction = true, newcclosure = true, readfile = true, writefile = true, getstack = true, dumpstring = true, getupvalues = true, getupvalue = true, getconstants = true, getconstant = true, getregistry = true, getreg = true, setstack = true, setconstant = true, setupvalue = true, getproto = true, getprotos = true, setproto = true, getnilinstances = true, hookfunc = true, isourclosure = true, isexecutorclosure = true, checkclosure = true, decompile = true, getscriptclosure = true, getscriptbytecode = true, __LARRY = true, __mock = true, __proxy_id = true, __is_proxy = true, __LARRY_WRAP_DEFINED_FUNCTION = true, __LARRY_INSTRUMENT = true, __LARRY_STATE = true, __LARRY_UTF8_GRAPHEMES = true, __LARRY_NORMALIZE_SOURCE = true, __LARRY_PCALL = true, __LARRY_XPCALL = true, __LARRY_CMP = true, __LARRY_LOADSTRING = true, __LARRY_LOAD = true, __LARRY_GETFENV = true, __LARRY_SETFENV = true, __LARRY_PATCH_ENV = true, __LARRY_EMBEDDED__ = true }, -- When merging env tables from _G/host, do not copy these as raw keys from the base; -- Luau resolves them via __index like Roblox (rawget(script _G, "game") must be nil). merge_skip_raw_base_keys = {game = true, Game = true, workspace = true, Workspace = true, script = true}, hidden_values = {}, public_env = nil, public_values = nil, core_libs = {}, genv_proxy = nil, mutated_keys = {}, track_mutations = false, readonly_objects = setmetatable({}, {__mode = "k"}), debug_surface = nil, executor_aliases = nil } b_env_state.core_libs = { string = string, table = table, math = math, os = b_public_os, coroutine = coroutine, package = package } -- `debug` is overridden later; keep a stable fallback slot anyway. b_env_state.core_libs.debug = debug b_env_state.core_libs._G = _G b_env_state.getfenv_hidden = b_env_state.getfenv_hidden or {} b_env_state.getfenv_view_cache = setmetatable({}, {__mode = "k"}) local function b_getfenv_visible_view(b_env) if j(b_env) ~= "table" then return b_env end -- Match Roblox identity semantics: getfenv must return the exact table -- assigned via setfenv so equality checks (getfenv(f) == env) pass. if b_env ~= b_env_state.public_env then return b_env end local b_cached = b_env_state.getfenv_view_cache[b_env] if b_cached then return b_cached end local b_view = setmetatable( {}, { __eq = function(_, b_other) return b_other == b_env or b_other == _G or b_other == b_env_state.public_env end, __index = function(_, b_key) if b_key == "loadstring" or b_key == "load" or b_key == "getfenv" or b_key == "setfenv" then local b_idx = b_env_state.index if j(b_idx) == "function" then local b_res = b_idx(nil, b_key) if b_res ~= nil then return b_res end end end local b_core = b_env_state.core_libs and b_env_state.core_libs[b_key] if b_core ~= nil then return b_core end local b_hidden_gf = rawget(b_env_state.hidden_values, b_key) if b_hidden_gf ~= nil then return b_hidden_gf end if j(b_key) == "string" and j(b_env_state.getfenv_allowed_keys) == "table" and not b_env_state.getfenv_allowed_keys[b_key] then return nil end if b_env_state.getfenv_hidden and b_env_state.getfenv_hidden[b_key] then return nil end local b_raw = rawget(b_env, b_key) if b_raw ~= nil then return b_raw end if b_env == b_env_state.public_env and j(b_env_state.public_values) == "table" then local b_pub = rawget(b_env_state.public_values, b_key) if b_pub ~= nil then return b_pub end end local b_idx_fn = b_env_state.index if j(b_idx_fn) == "function" then local b_from_index = b_idx_fn(nil, b_key) if b_from_index ~= nil then return b_from_index end end return nil end, __newindex = function(_, b_key, b_value) if b_env == b_env_state.public_env then b_env_state.write_global(b_env, b_key, b_value) return end rawset(b_env, b_key, b_value) end, __pairs = function() local b_raw_iter, b_raw_tbl, b_raw_key = pairs(b_env) return function(_, b_last) local b_k, b_v = b_raw_iter(b_raw_tbl, b_last) while b_k ~= nil and ( (j(b_k) == "string" and j(b_env_state.getfenv_allowed_keys) == "table" and not b_env_state.getfenv_allowed_keys[b_k]) or (b_env_state.getfenv_hidden and b_env_state.getfenv_hidden[b_k]) ) do b_k, b_v = b_raw_iter(b_raw_tbl, b_k) end return b_k, b_v end, b_env, b_raw_key end } ) b_env_state.getfenv_view_cache[b_env] = b_view return b_view end b_env_state.index = function(b_table, b_key) local b_hidden = b_native_rawget(b_env_state.hidden_values, b_key) if b_hidden ~= nil then return b_hidden end if b_env_state.hidden_keys and b_env_state.hidden_keys[b_key] then return nil end if b_key == "request" or b_key == "getclipboard" then local b_rq = b_env_state.exploit_funcs[b_key] if j(b_rq) == "function" then return b_rq end return nil end if j(b_env_state.public_values) == "table" then local b_public = b_native_rawget(b_env_state.public_values, b_key) if b_public ~= nil then return b_public end end local b_raw = b_native_rawget(_G, b_key) if b_raw ~= nil then return b_raw end -- Roblox-like globals are resolved through env lookup, not raw fields on script _G. if b_key == "game" or b_key == "Game" then return b_env_state.roblox_game or rawget(_G, "Game") or game end if b_key == "workspace" or b_key == "Workspace" then return b_env_state.roblox_workspace or rawget(_G, "Workspace") or workspace end if b_key == "script" then return b_env_state.roblox_script or rawget(_G, "script") or script end if b_key == "Enum" then return b_env_state.roblox_enum or rawget(_G, "Enum") or Enum end if b_key == "shared" then return shared end -- Mode B: never allow core libs to resolve to nil (anti-tamper expects e.g. `string.find`). local b_core = b_env_state.core_libs and b_env_state.core_libs[b_key] if b_core ~= nil then return b_core end return nil end b_env_state.write_global = function(_, b_key, b_value) if b_env_state.track_mutations and j(b_key) == "string" then b_env_state.mutated_keys[b_key] = true end if b_env_state.hidden_keys[b_key] then b_native_rawset(b_env_state.hidden_values, b_key, b_value) return end if j(b_env_state.public_values) == "table" then -- Mode B: prevent clobbering core libs to nil (breaks many anti-tamper routines). if b_value == nil and b_env_state.core_libs and b_env_state.core_libs[b_key] ~= nil then return end b_native_rawset(b_env_state.public_values, b_key, b_value) end b_native_rawset(_G, b_key, b_value) if j(b_key) == "string" then if b_value == nil then b_env_state.getfenv_hidden[b_key] = nil else b_env_state.getfenv_hidden[b_key] = true end end if b_env_state.genv_proxy ~= nil and j(b_key) == "string" then rawset(b_env_state.genv_proxy, b_key, b_value) end end local s = argv[3] or "NoKey" math.randomseed(os.time() + math.floor((os.clock() or 0) * 1000000)) local u = math.random(1000000, 2000000000) local v = {} v.__game_id = math.random(1000000, 2000000000) local function w(x) if j(x) ~= "table" then return false end local y, z = g( function() return b_native_rawget(x, v) == true end ) return y and z end local function A(x) if j(x) == "number" then return x end if w(x) then return b_native_rawget(x, "__value") or 0 end return 0 end local e = loadstring or load local B = print local C = warn or function() end local D = pairs local E = ipairs local j = type local m = tostring local F = {} local function G(x) if j(x) ~= "table" then return false end local y, z = g( function() return b_native_rawget(x, F) == true end ) return y and z end local function H(x) if not G(x) then return nil end return b_native_rawget(x, "__proxy_id") end local function I(J) if j(J) ~= "string" then return '"' end local K = {} local L, M = 1, #J local function N(O) return O:gsub( "\\\\(.)", function(P) if P:match('[abfnrtv\\\\%\'%\\"%[%]0-9xu]') then return "" .. P end return P end ) end local function Q(R) if not R or R == '"' then return "" end R = R:gsub( "0[bB]([01_]+)", function(S) local T = S:gsub("_", "") local U = n(T, 2) return U and m(U) or "0" end ) R = R:gsub( "0[xX]([%x_]+)", function(S) local T = S:gsub("_", "") return "0x" .. T end ) while R:match("%d_+%d") do R = R:gsub("(%d)_+(%d)", "%1%2") end local V = {{"+=", "+"}, {"-=", "-"}, {"*=", "*"}, {"/=", "/"}, {"%%=", "%%"}, {"%^=", "^"}, {"%.%.=", ".."}} for W, X in ipairs(V) do local Y, Z = X[1], X[2] R = R:gsub( "([%a_][%w_]*)%s*" .. Y, function(_) return _ .. " = " .. _ .. " " .. Z .. " " end ) R = R:gsub( "([%a_][%w_]*%.[%a_][%w_%.]+)%s*" .. Y, function(_) return _ .. " = " .. _ .. " " .. Z .. " " end ) R = R:gsub( "([%a_][%w_]*%b[])%s*" .. Y, function(_) return _ .. " = " .. _ .. " " .. Z .. " " end ) end R = R:gsub("([^%w_])continue([^%w_])", "%1_G.LuraphContinue()%2") R = R:gsub("^continue([^%w_])", "_G.LuraphContinue()%1") R = R:gsub("([^%w_])continue$", "%1_G.LuraphContinue()") for _ = 1, 12 do local b_changed R, b_changed = R:gsub( "([=,{%(;]%s*)if%s+([^;\n]-)%s+then%s+([^,;\n]-)%s+else%s+([^,;\n]+)", function(b_prefix, b_cond, b_true, b_false) return b_prefix .. "(function() if " .. b_cond .. " then return " .. b_true .. " else return " .. b_false .. " end end)()" end ) local b_return_changed R, b_return_changed = R:gsub( "(return%s+)if%s+([^;\n]-)%s+then%s+([^,;\n]-)%s+else%s+([^,;\n]+)", function(b_prefix, b_cond, b_true, b_false) return b_prefix .. "(function() if " .. b_cond .. " then return " .. b_true .. " else return " .. b_false .. " end end)()" end ) if b_changed == 0 and b_return_changed == 0 then break end end return R end local function a0(a1) local a2 = 0 while a1 <= M and J:byte(a1) == 61 do a2 = a2 + 1 a1 = a1 + 1 end return a2, a1 end local function a3(a4, a5) local a6 = "]" .. string.rep("=", a5) .. "]" local a7, a8 = J:find(a6, a4, true) return a8 or M end local function b_is_numeric_backtick_literal(b_text) if j(b_text) ~= "string" or b_text == "" then return false end return b_text:match("^%-?%d+$") ~= nil or b_text:match("^%-?%d+%.%d+$") ~= nil or b_text:match("^%-?%d+%.?$") ~= nil or b_text:match("^%-?%d*%.%d+$") ~= nil or b_text:match("^%-?%d+[eE][%+%-]?%d+$") ~= nil or b_text:match("^%-?%d*%.%d+[eE][%+%-]?%d+$") ~= nil end local function b_adjacent_nonspace_char(b_index, b_step) while b_index >= 1 and b_index <= M do local b_char = J:sub(b_index, b_index) if not b_char:match("%s") then return b_char end b_index = b_index + b_step end return nil end local function b_is_arithmetic_char(b_char) return b_char == "+" or b_char == "-" or b_char == "*" or b_char == "/" or b_char == "%" or b_char == "^" end local a9 = 1 while L <= M do local aa = J:byte(L) if aa == 91 then local a5, ab = a0(L + 1) if ab <= M and J:byte(ab) == 91 then table.insert(K, Q(J:sub(a9, L - 1))) local ac = L local ad = a3(ab + 1, a5) table.insert(K, J:sub(ac, ad)) L = ad a9 = L + 1 end elseif aa == 45 and L + 1 <= M and J:byte(L + 1) == 45 then table.insert(K, Q(J:sub(a9, L - 1))) local ae = L if L + 2 <= M and J:byte(L + 2) == 91 then local a5, ab = a0(L + 3) if ab <= M and J:byte(ab) == 91 then local ad = a3(ab + 1, a5) table.insert(K, J:sub(ae, ad)) L = ad a9 = L + 1 L = L + 1 end end local af = J:find("\n", L + 2, true) if af then L = af else L = M end table.insert(K, J:sub(ae, L)) a9 = L + 1 elseif aa == 34 or aa == 39 or aa == 96 then table.insert(K, Q(J:sub(a9, L - 1))) local ag = aa local ac = L L = L + 1 while L <= M do local ah = J:byte(L) if ah == 92 then L = L + 1 elseif ah == ag then break end L = L + 1 end local ai = J:sub(ac + 1, L - 1) ai = N(ai) if ag == 96 then local b_prev_char = b_adjacent_nonspace_char(ac - 1, -1) local b_next_char = b_adjacent_nonspace_char(L + 1, 1) local b_numeric_backtick = b_is_numeric_backtick_literal(ai) if b_numeric_backtick and (b_is_arithmetic_char(b_prev_char) or b_is_arithmetic_char(b_next_char)) then table.insert(K, ai) else table.insert(K, '"' .. ai:gsub('"', '\\\\"') .. '"') end else local aj = string.char(ag) table.insert(K, aj .. ai .. aj) end a9 = L + 1 end L = L + 1 end table.insert(K, Q(J:sub(a9))) return table.concat(K) end function b_larry_normalize_source_for_loader(b_source) if j(b_source) ~= "string" then return b_source end b_source = b_source:gsub("^\239\187\191", "") b_source = b_source:gsub("^#![^\r\n]*\r?\n", "") b_source = b_source:gsub("\r\n", "\n") if b_source:match("^%s*%a+%s+%d+:%s*\n") or b_source:match("\n%s*%a+%s+%d+:%s*\n") then local b_section_open = "do\n(function()\n" local b_section_close = "\nend)()\nend\n" b_source = b_source:gsub("^%s*%a+%s+%d+:%s*\n", b_section_open) b_source = b_source:gsub("\n%s*%a+%s+%d+:%s*\n", b_section_close .. b_section_open) b_source = b_source .. b_section_close end return b_source end function b_larry_split_script_bundle(b_source) if j(b_source) ~= "string" then return {} end b_source = b_source:gsub("\r\n", "\n") local b_sections = {} local b_current_name = nil local b_current_lines = {} local function b_flush() if b_current_name ~= nil then b_sections[#b_sections + 1] = { name = b_current_name, source = table.concat(b_current_lines, "\n") } end end for b_line in (b_source .. "\n"):gmatch("([^\n]*)\n") do if b_line:match("^%s*%a+%s+%d+:%s*$") then b_flush() b_current_name = b_line:gsub("^%s+", ""):gsub("%s+$", "") b_current_lines = {} elseif b_current_name ~= nil then b_current_lines[#b_current_lines + 1] = b_line end end b_flush() return b_sections end function b_larry_normalize_luau_string_escapes(b_source) if j(b_source) ~= "string" then return b_source end local b_len = #b_source local b_out = {} local b_pos = 1 local b_segment_start = 1 local function b_is_hex_char(b_char) return b_char ~= "" and b_char:match("^[%da-fA-F]$") ~= nil end local function b_utf8_decimal_escapes(b_codepoint) if not b_codepoint or b_codepoint < 0 or b_codepoint > 0x10FFFF or (b_codepoint >= 0xD800 and b_codepoint <= 0xDFFF) then return nil end local b_bytes = {} if b_codepoint <= 0x7F then b_bytes[1] = b_codepoint elseif b_codepoint <= 0x7FF then b_bytes[1] = 0xC0 + math.floor(b_codepoint / 0x40) b_bytes[2] = 0x80 + (b_codepoint % 0x40) elseif b_codepoint <= 0xFFFF then b_bytes[1] = 0xE0 + math.floor(b_codepoint / 0x1000) b_bytes[2] = 0x80 + (math.floor(b_codepoint / 0x40) % 0x40) b_bytes[3] = 0x80 + (b_codepoint % 0x40) else b_bytes[1] = 0xF0 + math.floor(b_codepoint / 0x40000) b_bytes[2] = 0x80 + (math.floor(b_codepoint / 0x1000) % 0x40) b_bytes[3] = 0x80 + (math.floor(b_codepoint / 0x40) % 0x40) b_bytes[4] = 0x80 + (b_codepoint % 0x40) end local b_parts = {} for b_index = 1, #b_bytes do b_parts[b_index] = string.format("\\%03d", b_bytes[b_index]) end return table.concat(b_parts) end local function b_normalize_escape(b_at) local b_next = b_source:sub(b_at + 1, b_at + 1) if b_next == "" then return "\\\\", b_at + 1 end if b_next == "\r" or b_next == "\n" then local b_after = b_at + 2 if b_next == "\r" and b_source:sub(b_after, b_after) == "\n" then b_after = b_after + 1 end while b_after <= b_len and b_source:sub(b_after, b_after):match("[%t ]") do b_after = b_after + 1 end return "", b_after end if b_next:match("^[abfnrtv\\\\\"']$") or b_next == "`" then return "\\" .. b_next, b_at + 2 end if b_next == "z" then local b_after = b_at + 2 while b_after <= b_len and b_source:sub(b_after, b_after):match("%s") do b_after = b_after + 1 end return "\\z", b_after end if b_next == "x" then local b_first = b_source:sub(b_at + 2, b_at + 2) local b_second = b_source:sub(b_at + 3, b_at + 3) if b_is_hex_char(b_first) and b_is_hex_char(b_second) then return "\\x" .. b_first .. b_second, b_at + 4 end return "x", b_at + 2 end if b_next == "u" and b_source:sub(b_at + 2, b_at + 2) == "{" then local b_close = b_source:find("}", b_at + 3, true) if b_close then local b_hex = b_source:sub(b_at + 3, b_close - 1) if b_hex ~= "" and b_hex:match("^[%da-fA-F]+$") then local b_escape = b_utf8_decimal_escapes(tonumber(b_hex, 16)) if b_escape then return b_escape, b_close + 1 end end end return "u", b_at + 2 end if b_next:match("^%d$") then local b_after = b_at + 1 local b_digits = {} while b_after <= b_len and #b_digits < 3 do local b_digit = b_source:sub(b_after, b_after) if not b_digit:match("^%d$") then break end b_digits[#b_digits + 1] = b_digit b_after = b_after + 1 end local b_raw_digits = table.concat(b_digits) local b_value = tonumber(b_raw_digits) if b_value and b_value <= 255 then return "\\" .. b_raw_digits, b_after end return b_raw_digits, b_after end return b_next, b_at + 2 end local function b_read_long_delim_at(b_at) if b_source:sub(b_at, b_at) ~= "[" then return nil end local b_scan = b_at + 1 while b_scan <= b_len and b_source:sub(b_scan, b_scan) == "=" do b_scan = b_scan + 1 end if b_source:sub(b_scan, b_scan) ~= "[" then return nil end return b_scan - b_at - 1, b_scan end local function b_skip_long_block_at(b_at) local b_eqs, b_open = b_read_long_delim_at(b_at) if not b_eqs then return b_at end local b_close = "]" .. string.rep("=", b_eqs) .. "]" local _, b_finish = b_source:find(b_close, b_open + 1, true) return b_finish or b_len end while b_pos <= b_len do local b_char = b_source:sub(b_pos, b_pos) if b_char == "-" and b_source:sub(b_pos + 1, b_pos + 1) == "-" then local b_long_start = nil if b_source:sub(b_pos + 2, b_pos + 2) == "[" then b_long_start = b_skip_long_block_at(b_pos + 2) end if b_long_start and b_long_start > b_pos + 2 then b_pos = b_long_start + 1 else local b_newline = b_source:find("\n", b_pos + 2, true) b_pos = b_newline and (b_newline + 1) or (b_len + 1) end elseif b_char == "[" then local b_long_end = b_skip_long_block_at(b_pos) if b_long_end and b_long_end > b_pos then b_pos = b_long_end + 1 else b_pos = b_pos + 1 end elseif b_char == "\"" or b_char == "'" or b_char == "`" then table.insert(b_out, b_source:sub(b_segment_start, b_pos - 1)) local b_quote = b_char local b_string_parts = {} b_pos = b_pos + 1 while b_pos <= b_len do local b_string_char = b_source:sub(b_pos, b_pos) if b_string_char == "\\" then local b_replacement, b_next_pos = b_normalize_escape(b_pos) table.insert(b_string_parts, b_replacement) b_pos = b_next_pos elseif b_string_char == b_quote then break elseif b_string_char == "\n" then table.insert(b_string_parts, "\\n") b_pos = b_pos + 1 elseif b_string_char == "\r" then if b_source:sub(b_pos + 1, b_pos + 1) == "\n" then table.insert(b_string_parts, "\\n") b_pos = b_pos + 2 else table.insert(b_string_parts, "\\r") b_pos = b_pos + 1 end else table.insert(b_string_parts, b_string_char) b_pos = b_pos + 1 end end table.insert(b_out, b_quote .. table.concat(b_string_parts)) if b_pos <= b_len and b_source:sub(b_pos, b_pos) == b_quote then table.insert(b_out, b_quote) b_pos = b_pos + 1 end b_segment_start = b_pos else b_pos = b_pos + 1 end end table.insert(b_out, b_source:sub(b_segment_start)) return table.concat(b_out) end function b_larry_patch_generated_loader_normalization(b_source) if j(b_source) ~= "string" then return b_source end if b_source:find("__LARRY_NORMALIZE_SOURCE", 1, true) and b_source:find("__LARRY_PATCH_ENV", 1, true) then return b_source end if not b_source:find("%[[%s_]*0[Xx]27[%s_]*%]") and not b_source:find("%[[%s_]*39[%s_]*%]") then return b_source end local b_changed = false local function b_patch(b_table, b_key, b_arg, b_env) b_changed = true return "return " .. b_table .. "[" .. b_key .. "](__LARRY_NORMALIZE_SOURCE(" .. b_arg .. "),__LARRY_PATCH_ENV(" .. b_env .. "))" end local function b_patch_call(b_table, b_key, b_arg, b_env) b_changed = true return b_table .. "[" .. b_key .. "](__LARRY_NORMALIZE_SOURCE(" .. b_arg .. "),__LARRY_PATCH_ENV(" .. b_env .. "))" end local b_out = b_source:gsub( "return%s+([%a_][%w_]*)%s*%[%s*(0[Xx]27)%s*%]%s*%(%s*([%a_][%w_]*)%s*,%s*([%a_][%w_]*)%s*%)", b_patch ) b_out = b_out:gsub( "return%s+([%a_][%w_]*)%s*%[%s*(39)%s*%]%s*%(%s*([%a_][%w_]*)%s*,%s*([%a_][%w_]*)%s*%)", b_patch ) b_out = b_out:gsub( "([%a_][%w_]*)%s*%[%s*(0[Xx]27)%s*%]%s*%(%s*([%a_][%w_]*)%s*,%s*([%a_][%w_]*)%s*%)", b_patch_call ) b_out = b_out:gsub( "([%a_][%w_]*)%s*%[%s*(39)%s*%]%s*%(%s*([%a_][%w_]*)%s*,%s*([%a_][%w_]*)%s*%)", b_patch_call ) if b_changed then return b_out end return b_source end function b_larry_inject_executor_prelude(b_source) if j(b_source) ~= "string" or b_source == "" then return b_source end if b_source:find("__LARRY_EXECUTOR_PRELUDE", 1, true) then return b_source end local b_luraph_like = b_source:find("Luraph Obfuscator", 1, true) ~= nil or (#b_source > 50000 and b_source:find("return({", 1, true) ~= nil) if not b_luraph_like then return b_source end return "local pcall,xpcall,loadstring,load,getfenv,setfenv=__LARRY_PCALL,__LARRY_XPCALL,__LARRY_LOADSTRING,__LARRY_LOAD,__LARRY_GETFENV,__LARRY_SETFENV;\n" .. b_source end function b_larry_inject_type_builtin_shadow(b_source) if j(b_source) ~= "string" or b_source == "" then return b_source end if b_source:find("__LARRY_TYPE_BUILTIN_SHADOW", 1, true) then return b_source end -- Luau resolves `type`/`typeof`/`select`/`rawequal` as fast builtins. return "local getfenv=__LARRY_GETFENV or getfenv;local __larry_env=getfenv();local type,typeof,select,rawequal,setmetatable,getmetatable=__larry_env.type,__larry_env.typeof,__larry_env.select or select,__larry_env.rawequal or rawequal,__LARRY_SETMETATABLE or __larry_env.setmetatable or setmetatable,__LARRY_GETMETATABLE or __larry_env.getmetatable or getmetatable;local game,Game,workspace,Workspace,script,Enum,Instance=__larry_env.game,__larry_env.Game,__larry_env.workspace,__larry_env.Workspace,__larry_env.script,__larry_env.Enum,__larry_env.Instance;\n" .. b_source end function q._rewrite_dtc_global_builtins(b_source) if j(b_source) ~= "string" or b_source == "" then return b_source end if not b_source:find("setmetatable", 1, true) and not b_source:find("getmetatable", 1, true) then return b_source end b_source = b_source:gsub("^%s*setmetatable%s*%(", "__LARRY_SETMETATABLE(") b_source = b_source:gsub("([^%w_%.:])setmetatable%s*%(", "%1__LARRY_SETMETATABLE(") b_source = b_source:gsub("^%s*getmetatable%s*%(", "__LARRY_GETMETATABLE(") b_source = b_source:gsub("([^%w_%.:])getmetatable%s*%(", "%1__LARRY_GETMETATABLE(") return b_source end function b_larry_should_static_passthrough(b_source) return false end function b_larry_emit_source_passthrough(b_source) if j(b_source) ~= "string" then return end b_source = b_source:gsub("\r\n", "\n") if b_source:sub(-1) ~= "\n" then b_source = b_source .. "\n" end for b_line in b_source:gmatch("([^\n]*)\n") do table.insert(t.output, b_line) end end local b_lua_keywords = { ["and"] = true, ["break"] = true, ["continue"] = true, ["do"] = true, ["else"] = true, ["elseif"] = true, ["end"] = true, ["false"] = true, ["for"] = true, ["function"] = true, ["if"] = true, ["in"] = true, ["local"] = true, ["nil"] = true, ["not"] = true, ["or"] = true, ["repeat"] = true, ["return"] = true, ["then"] = true, ["true"] = true, ["until"] = true, ["while"] = true } local b_common_globals = { ["_G"] = true, ["assert"] = true, ["bit32"] = true, ["BrickColor"] = true, ["buffer"] = true, ["CFrame"] = true, ["Color3"] = true, ["coroutine"] = true, ["debug"] = true, ["Enum"] = true, ["error"] = true, ["game"] = true, ["getconstants"] = true, ["getfenv"] = true, ["getmetatable"] = true, ["getrawmetatable"] = true, ["getupvalue"] = true, ["getupvalues"] = true, ["hookfunction"] = true, ["Instance"] = true, ["ipairs"] = true, ["loadstring"] = true, ["math"] = true, ["newcclosure"] = true, ["next"] = true, ["os"] = true, ["pairs"] = true, ["pcall"] = true, ["print"] = true, ["rawequal"] = true, ["rawget"] = true, ["rawset"] = true, ["require"] = true, ["script"] = true, ["select"] = true, ["setconstant"] = true, ["setfenv"] = true, ["setmetatable"] = true, ["setupvalue"] = true, ["shared"] = true, ["string"] = true, ["table"] = true, ["task"] = true, ["tonumber"] = true, ["tostring"] = true, ["type"] = true, ["typeof"] = true, ["UDim"] = true, ["UDim2"] = true, ["unpack"] = true, ["Vector2"] = true, ["Vector3"] = true, ["warn"] = true, ["workspace"] = true, ["xpcall"] = true } local function b_read_long_delim(b_source, b_pos) if b_source:sub(b_pos, b_pos) ~= "[" then return nil end local b_scan = b_pos + 1 while b_scan <= #b_source and b_source:sub(b_scan, b_scan) == "=" do b_scan = b_scan + 1 end if b_source:sub(b_scan, b_scan) ~= "[" then return nil end return b_scan - b_pos - 1, b_scan end local function b_skip_long_block(b_source, b_pos) local b_eqs, b_open = b_read_long_delim(b_source, b_pos) if not b_eqs then return b_pos end local b_close = "]" .. string.rep("=", b_eqs) .. "]" local _, b_finish = b_source:find(b_close, b_open + 1, true) return b_finish or #b_source end local function b_is_immediately_invoked_anonymous_function(b_source, b_start_pos, b_end_pos) if j(b_source) ~= "string" or j(b_start_pos) ~= "number" or j(b_end_pos) ~= "number" then return false end local b_left = b_start_pos - 1 while b_left >= 1 do local b_char = b_source:sub(b_left, b_left) if not b_char:match("%s") then if b_char ~= "(" then return false end break end b_left = b_left - 1 end if b_left < 1 then return false end local b_scan = b_end_pos + 1 while b_scan <= #b_source and b_source:sub(b_scan, b_scan):match("%s") do b_scan = b_scan + 1 end if b_source:sub(b_scan, b_scan) ~= ")" then return false end while b_scan <= #b_source do local b_char = b_source:sub(b_scan, b_scan) if b_char:match("%s") or b_char == ")" then b_scan = b_scan + 1 else break end end local b_next = b_source:sub(b_scan, b_scan) if b_next == "(" or b_next == "{" or b_next == '"' or b_next == "'" then return true end if b_next == "[" then return b_read_long_delim(b_source, b_scan) ~= nil end return false end local function b_normalize_numeric_backtick_arithmetic(b_source) if j(b_source) ~= "string" or b_source == "" then return b_source end local b_needs_backtick = b_source:find("`", 1, true) ~= nil local b_needs_utf8_graphemes = b_source:find("utf8", 1, true) ~= nil if not b_needs_backtick and not b_needs_utf8_graphemes then return b_source end local b_len = #b_source local b_parts = {} local b_cursor = 1 local function b_is_numeric_backtick_literal(b_text) if j(b_text) ~= "string" or b_text == "" then return false end return b_text:match("^%-?%d+$") ~= nil or b_text:match("^%-?%d+%.%d+$") ~= nil or b_text:match("^%-?%d+%.?$") ~= nil or b_text:match("^%-?%d*%.%d+$") ~= nil or b_text:match("^%-?%d+[eE][%+%-]?%d+$") ~= nil or b_text:match("^%-?%d*%.%d+[eE][%+%-]?%d+$") ~= nil end local function b_adjacent_nonspace_char(b_index, b_step) while b_index >= 1 and b_index <= b_len do local b_char = b_source:sub(b_index, b_index) if not b_char:match("%s") then return b_char end b_index = b_index + b_step end return nil end local function b_is_arithmetic_char(b_char) return b_char == "+" or b_char == "-" or b_char == "*" or b_char == "/" or b_char == "%" or b_char == "^" end if b_needs_backtick then local b_pos = 1 while b_pos <= b_len do local b_char = b_source:sub(b_pos, b_pos) if b_char == "-" and b_source:sub(b_pos + 1, b_pos + 1) == "-" then if b_source:sub(b_pos + 2, b_pos + 2) == "[" then local b_eqs = b_read_long_delim(b_source, b_pos + 2) if b_eqs then b_pos = b_skip_long_block(b_source, b_pos + 2) + 1 else local b_newline = b_source:find("[\r\n]", b_pos + 2) b_pos = (b_newline or (b_len + 1)) end else local b_newline = b_source:find("[\r\n]", b_pos + 2) b_pos = (b_newline or (b_len + 1)) end elseif b_char == "[" then local b_eqs = b_read_long_delim(b_source, b_pos) if b_eqs then b_pos = b_skip_long_block(b_source, b_pos) + 1 else b_pos = b_pos + 1 end elseif b_char == '"' or b_char == "'" then local b_quote = b_char b_pos = b_pos + 1 while b_pos <= b_len do local b_cur = b_source:sub(b_pos, b_pos) if b_cur == "\\" then b_pos = b_pos + 2 elseif b_cur == b_quote then b_pos = b_pos + 1 break else b_pos = b_pos + 1 end end elseif b_char == "`" then local b_start = b_pos local b_scan = b_pos + 1 while b_scan <= b_len do local b_cur = b_source:sub(b_scan, b_scan) if b_cur == "\\" then b_scan = b_scan + 2 elseif b_cur == "`" then break else b_scan = b_scan + 1 end end local b_finish = math.min(b_scan, b_len) local b_literal = b_source:sub(b_start + 1, math.max(b_start, b_finish - 1)) local b_prev_char = b_adjacent_nonspace_char(b_start - 1, -1) local b_next_char = b_adjacent_nonspace_char(b_finish + 1, 1) if b_is_numeric_backtick_literal(b_literal) and (b_is_arithmetic_char(b_prev_char) or b_is_arithmetic_char(b_next_char)) then local b_replacement = b_literal local b_prev_raw_char = b_start > 1 and b_source:sub(b_start - 1, b_start - 1) or nil local b_next_raw_char = b_finish < b_len and b_source:sub(b_finish + 1, b_finish + 1) or nil if b_prev_raw_char and b_prev_raw_char:match("[%w_]") then b_replacement = " " .. b_replacement end if b_next_raw_char and (b_next_raw_char:match("[%w_]") or (b_next_raw_char == "." and b_source:sub(b_finish + 1, b_finish + 2) == "..")) then b_replacement = b_replacement .. " " end table.insert(b_parts, b_source:sub(b_cursor, b_start - 1)) table.insert(b_parts, b_replacement) b_cursor = b_finish + 1 end b_pos = b_finish + 1 else b_pos = b_pos + 1 end end end local b_result = b_source if b_cursor ~= 1 then table.insert(b_parts, b_source:sub(b_cursor)) b_result = table.concat(b_parts) end if not b_needs_utf8_graphemes then return b_result end b_source = b_result b_len = #b_source b_parts = {} b_cursor = 1 local b_pos = 1 while b_pos <= b_len do local b_char = b_source:sub(b_pos, b_pos) if b_char == "-" and b_source:sub(b_pos + 1, b_pos + 1) == "-" then if b_source:sub(b_pos + 2, b_pos + 2) == "[" then local b_eqs = b_read_long_delim(b_source, b_pos + 2) if b_eqs then b_pos = b_skip_long_block(b_source, b_pos + 2) + 1 else local b_newline = b_source:find("[\r\n]", b_pos + 2) b_pos = (b_newline or (b_len + 1)) end else local b_newline = b_source:find("[\r\n]", b_pos + 2) b_pos = (b_newline or (b_len + 1)) end elseif b_char == "[" then local b_eqs = b_read_long_delim(b_source, b_pos) if b_eqs then b_pos = b_skip_long_block(b_source, b_pos) + 1 else b_pos = b_pos + 1 end elseif b_char == '"' or b_char == "'" or b_char == "`" then local b_quote = b_char b_pos = b_pos + 1 while b_pos <= b_len do local b_cur = b_source:sub(b_pos, b_pos) if b_cur == "\\" then b_pos = b_pos + 2 elseif b_cur == b_quote then b_pos = b_pos + 1 break else b_pos = b_pos + 1 end end elseif b_source:sub(b_pos, b_pos + 13) == "utf8.graphemes" then local b_scan = b_pos + 14 while b_scan <= b_len and b_source:sub(b_scan, b_scan):match("%s") do b_scan = b_scan + 1 end if b_source:sub(b_scan, b_scan) == "(" then table.insert(b_parts, b_source:sub(b_cursor, b_pos - 1)) table.insert(b_parts, "__LARRY_UTF8_GRAPHEMES") b_cursor = b_pos + 14 end b_pos = b_pos + 14 else b_pos = b_pos + 1 end end if b_cursor == 1 then return b_source end table.insert(b_parts, b_source:sub(b_cursor)) return table.concat(b_parts) end local function b_tokenize_code(b_source) local b_tokens = {} local b_pos = 1 local b_len = #b_source while b_pos <= b_len do local b_char = b_source:sub(b_pos, b_pos) if b_char:match("%s") then b_pos = b_pos + 1 elseif b_char == "-" and b_source:sub(b_pos + 1, b_pos + 1) == "-" then if b_source:sub(b_pos + 2, b_pos + 2) == "[" then local b_eqs = b_read_long_delim(b_source, b_pos + 2) if b_eqs then b_pos = b_skip_long_block(b_source, b_pos + 2) + 1 else local b_newline = b_source:find("[\r\n]", b_pos + 2) b_pos = (b_newline or (b_len + 1)) end else local b_newline = b_source:find("[\r\n]", b_pos + 2) b_pos = (b_newline or (b_len + 1)) end elseif b_char == "[" then local b_eqs = b_read_long_delim(b_source, b_pos) if b_eqs then b_pos = b_skip_long_block(b_source, b_pos) + 1 else table.insert(b_tokens, {value = b_char, start_pos = b_pos, end_pos = b_pos}) b_pos = b_pos + 1 end elseif b_char == '"' or b_char == "'" or b_char == "`" then local b_quote = b_char local b_scan = b_pos + 1 while b_scan <= b_len do local b_cur = b_source:sub(b_scan, b_scan) if b_cur == "\\" then b_scan = b_scan + 2 elseif b_cur == b_quote then b_scan = b_scan + 1 break else b_scan = b_scan + 1 end end table.insert(b_tokens, {value = b_source:sub(b_pos, b_scan - 1), start_pos = b_pos, end_pos = b_scan - 1, is_string = true}) b_pos = b_scan elseif b_char:match("%d") or (b_char == "." and b_source:sub(b_pos + 1, b_pos + 1):match("%d")) then local b_scan = b_pos + 1 local b_has_dot = (b_char == ".") while b_scan <= b_len do local b_cur = b_source:sub(b_scan, b_scan) if b_cur:match("%d") then b_scan = b_scan + 1 elseif b_cur == "." and not b_has_dot and b_source:sub(b_scan + 1, b_scan + 1) ~= "." then b_has_dot = true b_scan = b_scan + 1 else break end end table.insert(b_tokens, {value = b_source:sub(b_pos, b_scan - 1), start_pos = b_pos, end_pos = b_scan - 1, is_number = true}) b_pos = b_scan elseif b_char:match("[%a_]") then local b_scan = b_pos + 1 while b_scan <= b_len and b_source:sub(b_scan, b_scan):match("[%w_]") do b_scan = b_scan + 1 end local b_word = b_source:sub(b_pos, b_scan - 1) table.insert( b_tokens, { value = b_word, start_pos = b_pos, end_pos = b_scan - 1, keyword = b_lua_keywords[b_word] == true } ) b_pos = b_scan elseif b_char == "." and b_source:sub(b_pos, b_pos + 2) == "..." then table.insert(b_tokens, {value = "...", start_pos = b_pos, end_pos = b_pos + 2}) b_pos = b_pos + 3 else table.insert(b_tokens, {value = b_char, start_pos = b_pos, end_pos = b_pos}) b_pos = b_pos + 1 end end return b_tokens end q._insert_missing_statement_separators = function(b_source) if j(b_source) ~= "string" or b_source == "" then return b_source end if #b_source > 5000000 then return b_source end local b_tokens = b_tokenize_code(b_source) local b_replacements = {} local b_bad_previous = { ["="] = true, ["("] = true, ["["] = true, ["{"] = true, [","] = true, [";"] = true, ["then"] = true, ["else"] = true, ["elseif"] = true, ["do"] = true, ["function"] = true, ["local"] = true, ["return"] = true, ["and"] = true, ["or"] = true, ["not"] = true, ["+"] = true, ["-"] = true, ["*"] = true, ["/"] = true, ["^"] = true, ["%"] = true, [".."] = true, ["<"] = true, [">"] = true, ["<="] = true, [">="] = true, ["=="] = true, ["~="] = true, ["~"] = true, ["#"] = true, ["."] = true, [":"] = true } local b_statement_starters = { ["("] = true, ["["] = true } for b_index = 2, #b_tokens do local b_token = b_tokens[b_index] local b_prev = b_tokens[b_index - 1] if b_token and b_prev and b_statement_starters[b_token.value] and not b_bad_previous[b_prev.value] then local b_gap = b_source:sub(b_prev.end_pos + 1, b_token.start_pos - 1) if not b_gap:find(";", 1, true) then local b_has_newline = b_gap:find("[\r\n]") local b_is_ambiguous_starter = (b_token.value == "(" or b_token.value == "[") if b_has_newline then if b_is_ambiguous_starter then local b_strong_enders = { [")"] = true, ["]"] = true, ["}"] = true, ["end"] = true, ["break"] = true, ["continue"] = true, ["return"] = true } if b_strong_enders[b_prev.value] or b_prev.is_string or b_prev.is_number then table.insert(b_replacements, {pos = b_token.start_pos, text = "; "}) end else table.insert(b_replacements, {pos = b_token.start_pos, text = "; "}) end elseif not b_is_ambiguous_starter then table.insert(b_replacements, {pos = b_token.start_pos, text = "; "}) end end end end if #b_replacements == 0 then return b_source end table.sort( b_replacements, function(a, b) return a.pos > b.pos end ) local b_out = b_source for _, b_replacement in ipairs(b_replacements) do b_out = b_out:sub(1, b_replacement.pos - 1) .. b_replacement.text .. b_out:sub(b_replacement.pos) end return b_out end q._rewrite_guarded_comparisons = function(b_source) if j(b_source) ~= "string" or b_source == "" or #b_source > 5000000 then return b_source end if not b_source:find("<", 1, true) and not b_source:find(">", 1, true) then return b_source end local b_tokens = b_tokenize_code(b_source) local b_replacements = {} local b_taken = {} local function b_range_taken(b_start, b_end) for _, b_range in ipairs(b_taken) do if not (b_end < b_range.start_pos or b_start > b_range.end_pos) then return true end end return false end local function b_simple_side(b_first, b_last) if not b_first or not b_last or b_first > b_last then return false end local b_depth = 0 for b_i = b_first, b_last do local b_value = b_tokens[b_i].value if b_value == "(" or b_value == "[" or b_value == "{" then b_depth = b_depth + 1 elseif b_value == ")" or b_value == "]" or b_value == "}" then b_depth = b_depth - 1 if b_depth < 0 then return false end elseif b_depth == 0 and (b_value == "and" or b_value == "or" or b_value == "then" or b_value == "do" or b_value == "else" or b_value == "elseif" or b_value == "," or b_value == ";") then return false end end return b_depth == 0 end for b_index = 1, #b_tokens do local b_token = b_tokens[b_index] local b_op = nil local b_op_end = b_index if b_token.value == "<" or b_token.value == ">" then b_op = b_token.value if b_tokens[b_index + 1] and b_tokens[b_index + 1].value == "=" then b_op = b_op .. "=" b_op_end = b_index + 1 end end if b_op then local b_open = nil local b_depth = 0 for b_left = b_index - 1, 1, -1 do local b_value = b_tokens[b_left].value if b_value == ")" or b_value == "]" or b_value == "}" then b_depth = b_depth + 1 elseif b_value == "(" then if b_depth == 0 then b_open = b_left break end b_depth = b_depth - 1 elseif b_depth == 0 and (b_value == "and" or b_value == "or" or b_value == "then" or b_value == "do" or b_value == "," or b_value == ";") then break end end local b_close = nil b_depth = 0 for b_right = b_op_end + 1, #b_tokens do local b_value = b_tokens[b_right].value if b_value == "(" or b_value == "[" or b_value == "{" then b_depth = b_depth + 1 elseif b_value == ")" then if b_depth == 0 then b_close = b_right break end b_depth = b_depth - 1 elseif b_value == "]" or b_value == "}" then b_depth = b_depth - 1 elseif b_depth == 0 and (b_value == "and" or b_value == "or" or b_value == "then" or b_value == "do" or b_value == "," or b_value == ";") then break end end if b_open and b_close and not b_range_taken(b_tokens[b_open].start_pos, b_tokens[b_close].end_pos) and b_simple_side(b_open + 1, b_index - 1) and b_simple_side(b_op_end + 1, b_close - 1) then local b_left_source = b_source:sub(b_tokens[b_open + 1].start_pos, b_tokens[b_index - 1].end_pos) local b_right_source = b_source:sub(b_tokens[b_op_end + 1].start_pos, b_tokens[b_close - 1].end_pos) table.insert( b_replacements, { start_pos = b_tokens[b_open].start_pos, end_pos = b_tokens[b_close].end_pos, text = string.format("(__LARRY_CMP(%q, %s, %s))", b_op, b_left_source, b_right_source) } ) table.insert(b_taken, {start_pos = b_tokens[b_open].start_pos, end_pos = b_tokens[b_close].end_pos}) end end end if #b_replacements == 0 then return b_source end table.sort( b_replacements, function(a, b) return a.start_pos > b.start_pos end ) local b_out = b_source for _, b_replacement in ipairs(b_replacements) do b_out = b_out:sub(1, b_replacement.start_pos - 1) .. b_replacement.text .. b_out:sub(b_replacement.end_pos + 1) end return b_out end q._rewrite_parenthesized_format_calls = function(b_source) local b_tokens = b_tokenize_code(b_source) local b_replacements = {} local b_taken = {} local function b_overlaps(b_start, b_end) for _, b_range in ipairs(b_taken) do if not (b_end < b_range.start_pos or b_start > b_range.end_pos) then return true end end return false end for b_index = 1, (#b_tokens - 3) do if b_tokens[b_index].value == ")" and b_tokens[b_index + 1].value == ":" and b_tokens[b_index + 2].value == "format" and b_tokens[b_index + 3].value == "(" then local b_depth = 1 local b_open_index = nil for b_scan = b_index - 1, 1, -1 do local b_value = b_tokens[b_scan].value if b_value == ")" then b_depth = b_depth + 1 elseif b_value == "(" then b_depth = b_depth - 1 if b_depth == 0 then b_open_index = b_scan break end end end if b_open_index ~= nil then local b_start = b_tokens[b_open_index].start_pos local b_end = b_tokens[b_index + 3].end_pos if not b_overlaps(b_start, b_end) then local b_expr = b_source:sub(b_start, b_tokens[b_index].end_pos) table.insert( b_replacements, { start_pos = b_start, end_pos = b_end, text = "string.format(" .. b_expr .. "," } ) table.insert(b_taken, {start_pos = b_start, end_pos = b_end}) end end end end if #b_replacements == 0 then return b_source end table.sort( b_replacements, function(a, b) return a.start_pos > b.start_pos end ) local b_out = b_source for _, b_replacement in ipairs(b_replacements) do b_out = b_out:sub(1, b_replacement.start_pos - 1) .. b_replacement.text .. b_out:sub(b_replacement.end_pos + 1) end return b_out end q._rewrite_bare_output_calls = function(b_source) local b_tokens = b_tokenize_code(b_source) local b_replacements = {} for b_index = 1, (#b_tokens - 1) do local b_token = b_tokens[b_index] local b_next = b_tokens[b_index + 1] local b_value = b_token and b_token.value or nil if (b_value == "print" or b_value == "warn") and b_next and b_next.value == "(" then local b_prev = b_tokens[b_index - 1] local b_prev_value = b_prev and b_prev.value or nil if b_prev_value ~= "." and b_prev_value ~= ":" and b_prev_value ~= "local" then table.insert( b_replacements, { start_pos = b_token.start_pos, end_pos = b_token.end_pos, text = b_value == "print" and "__LARRY_CHUNK_PRINT" or "__LARRY_CHUNK_WARN" } ) end end end if #b_replacements == 0 then return b_source end table.sort( b_replacements, function(a, b) return a.start_pos > b.start_pos end ) local b_out = b_source for _, b_replacement in ipairs(b_replacements) do b_out = b_out:sub(1, b_replacement.start_pos - 1) .. b_replacement.text .. b_out:sub(b_replacement.end_pos + 1) end return b_out end local function b_find_matching_function_token(b_tokens, b_function_index) local b_stack = {"function"} local b_pending_compound_do = 0 for b_index = b_function_index + 1, #b_tokens do local b_value = b_tokens[b_index].value if b_value == "function" then table.insert(b_stack, "function") elseif b_value == "if" then table.insert(b_stack, "if") elseif b_value == "for" or b_value == "while" then table.insert(b_stack, b_value) b_pending_compound_do = b_pending_compound_do + 1 elseif b_value == "do" then if b_pending_compound_do > 0 then b_pending_compound_do = b_pending_compound_do - 1 else table.insert(b_stack, "do") end elseif b_value == "repeat" then table.insert(b_stack, "repeat") elseif b_value == "until" then if b_stack[#b_stack] == "repeat" then table.remove(b_stack) end elseif b_value == "end" then if #b_stack > 0 then table.remove(b_stack) if #b_stack == 0 then return b_index end end end end return nil end local function b_first_function_paren_index(b_tokens, b_function_index) for b_index = b_function_index + 1, #b_tokens do local b_value = b_tokens[b_index].value if b_value == "(" then return b_index elseif b_value == "end" then return nil end end return nil end local function b_matching_paren_index(b_tokens, b_open_index) local b_depth = 1 for b_index = b_open_index + 1, #b_tokens do local b_value = b_tokens[b_index].value if b_value == "(" then b_depth = b_depth + 1 elseif b_value == ")" then b_depth = b_depth - 1 if b_depth == 0 then return b_index end end end return nil end local function b_unwrap_larry_defined_wrappers(b_source) if j(b_source) ~= "string" or not b_source:find("__LARRY_WRAP_DEFINED_FUNCTION", 1, true) then return b_source end local b_changed = true while b_changed do b_changed = false local b_tokens = b_tokenize_code(b_source) local b_replacements = {} local b_index = 1 while b_index <= #b_tokens do local b_token = b_tokens[b_index] if b_token.value == "__LARRY_WRAP_DEFINED_FUNCTION" and b_tokens[b_index + 1] and b_tokens[b_index + 1].value == "(" and b_tokens[b_index + 2] and b_tokens[b_index + 2].value == "function" then local b_open_index = b_index + 1 local b_function_index = b_index + 2 local b_function_end = b_find_matching_function_token(b_tokens, b_function_index) local b_call_end = b_matching_paren_index(b_tokens, b_open_index) if b_function_end and b_call_end and b_function_end < b_call_end then table.insert( b_replacements, { start_pos = b_token.start_pos, end_pos = b_tokens[b_call_end].end_pos, text = b_source:sub(b_tokens[b_function_index].start_pos, b_tokens[b_function_end].end_pos) } ) b_index = b_call_end + 1 else b_index = b_index + 1 end else b_index = b_index + 1 end end if #b_replacements > 0 then table.sort( b_replacements, function(a, b) return a.start_pos > b.start_pos end ) for _, b_rep in ipairs(b_replacements) do b_source = b_source:sub(1, b_rep.start_pos - 1) .. b_rep.text .. b_source:sub(b_rep.end_pos + 1) end b_changed = true end end return b_source end local function b_restore_luau_output_source(b_source) if j(b_source) ~= "string" then return b_source end return b_source:gsub("_G%.LuraphContinue%(%s*%)", "continue") end local function b_restore_hookop_output_source(b_source) if j(b_source) ~= "string" or b_source == "" then return b_source end local b_lines = {} for b_line in (b_source .. "\n"):gmatch("(.-)\n") do local b_trim = b_line:match("^%s*(.-)%s*$") if b_trim:match("^__HOOKOP_FOR%(") or b_trim == "__HOOKOP_END()" or b_trim == "__HOOKOP_ELSE()" then -- Drop runtime-only HookOP markers from emitted function source. else b_line = b_line:gsub("if%s+__HOOKOP_IF%((.-),%s*(%b\"\")%)%s+then", "if %1 then") b_line = b_line:gsub("elseif%s+__HOOKOP_ELSEIF%((.-),%s*(%b\"\")%)%s+then", "elseif %1 then") b_lines[#b_lines + 1] = b_line end end return table.concat(b_lines, "\n") end local function b_detect_free_identifiers(b_function_source, b_declared_name, b_candidate_locals) local b_tokens = b_tokenize_code(b_function_source) local b_function_index = nil for b_index, b_token in ipairs(b_tokens) do if b_token.value == "function" then b_function_index = b_index break end end if not b_function_index then return {} end local b_locals = {} local b_captures = {} local b_seen = {} if b_declared_name and b_declared_name ~= "" then b_locals[b_declared_name] = true end local b_open = b_first_function_paren_index(b_tokens, b_function_index) local b_close = b_open and b_matching_paren_index(b_tokens, b_open) if b_open and b_close then for b_index = b_open + 1, b_close - 1 do local b_token = b_tokens[b_index] if not b_token.keyword and b_token.value:match("^[%a_][%w_]*$") then b_locals[b_token.value] = true end end end local b_prev = nil for b_index = (b_close and (b_close + 1) or (b_function_index + 1)), #b_tokens do local b_token = b_tokens[b_index] if b_token.value == "local" then local b_next = b_tokens[b_index + 1] if b_next and b_next.value == "function" then local b_name = b_tokens[b_index + 2] if b_name and not b_name.keyword then b_locals[b_name.value] = true end else local b_scan = b_index + 1 while b_tokens[b_scan] do local b_value = b_tokens[b_scan].value if b_value == "=" or b_value == "in" then break end if b_value:match("^[%a_][%w_]*$") and not b_tokens[b_scan].keyword then b_locals[b_value] = true elseif b_value ~= "," then break end b_scan = b_scan + 1 end end elseif b_token.value == "for" then local b_scan = b_index + 1 while b_tokens[b_scan] do local b_value = b_tokens[b_scan].value if b_value == "=" or b_value == "in" then break end if b_value:match("^[%a_][%w_]*$") and not b_tokens[b_scan].keyword then b_locals[b_value] = true elseif b_value ~= "," then break end b_scan = b_scan + 1 end elseif not b_token.keyword and b_token.value:match("^[%a_][%w_]*$") then local b_name = b_token.value local b_next = b_tokens[b_index + 1] if not b_locals[b_name] and not b_common_globals[b_name] and not b_seen[b_name] and (not b_candidate_locals or b_candidate_locals[b_name]) and not (b_prev and (b_prev.value == "." or b_prev.value == ":")) and not (b_next and b_next.value == "(" and (not b_candidate_locals or not b_candidate_locals[b_name])) then b_seen[b_name] = true table.insert(b_captures, b_name) end end b_prev = b_token end return b_captures end local function b_collect_prior_local_names(b_prefix_source) local b_tokens = b_tokenize_code(b_prefix_source or "") local b_candidates = {} local b_index = 1 while b_index <= #b_tokens do local b_token = b_tokens[b_index] if b_token.value == "local" then local b_next = b_tokens[b_index + 1] if b_next and b_next.value == "function" then local b_name = b_tokens[b_index + 2] if b_name and not b_name.keyword then b_candidates[b_name.value] = true end else local b_scan = b_index + 1 while b_tokens[b_scan] do local b_value = b_tokens[b_scan].value if b_value == "=" or b_value == "in" then break end if b_value:match("^[%a_][%w_]*$") and not b_tokens[b_scan].keyword then b_candidates[b_value] = true elseif b_value ~= "," then break end b_scan = b_scan + 1 end end elseif b_token.value == "for" then local b_scan = b_index + 1 while b_tokens[b_scan] do local b_value = b_tokens[b_scan].value if b_value == "=" or b_value == "in" then break end if b_value:match("^[%a_][%w_]*$") and not b_tokens[b_scan].keyword then b_candidates[b_value] = true elseif b_value ~= "," then break end b_scan = b_scan + 1 end end b_index = b_index + 1 end return b_candidates end local b_quote_luau_string local function b_build_capture_table_source(b_names) if not b_names or #b_names == 0 then return "{}", "{}" end local b_name_parts = {} local b_value_parts = {} for _, b_name in ipairs(b_names) do table.insert(b_name_parts, b_quote_luau_string(b_name)) table.insert(b_value_parts, b_name .. " = " .. b_name) end return "{" .. table.concat(b_name_parts, ", ") .. "}", "{" .. table.concat(b_value_parts, ", ") .. "}" end local b_merge_function_env local function b_strip_named_function_header(b_function_source) local b_tail = b_function_source:match("^function%s+[%a_][%w_%.:]*%s*(%b().*)$") if b_tail then return "function" .. b_tail end return b_function_source end local function b_instrument_defined_functions(b_source, b_skip_first_function) if j(b_source) ~= "string" or b_source == "" or b_source:find("__LARRY_WRAP_DEFINED_FUNCTION", 1, true) then return b_source end if b_source:find("MoonVeil Obfuscator", 1, true) or b_source:find("moonveil.cc", 1, true) then return b_source end local b_tokens = b_tokenize_code(b_source) local b_replacements = {} local b_skip_anonymous_wrap = #b_source > 150000 or b_source:find("wearedevs.net/obfuscator", 1, true) ~= nil local b_outer_function_start = nil if b_skip_first_function then for _, b_scan_token in ipairs(b_tokens) do if b_scan_token.value == "function" then b_outer_function_start = b_scan_token.start_pos break end end end local b_index = 1 while b_index <= #b_tokens do local b_token = b_tokens[b_index] if b_token.value == "local" and b_tokens[b_index + 1] and b_tokens[b_index + 1].value == "function" then local b_name_token = b_tokens[b_index + 2] local b_function_index = b_index + 1 local b_end_index = b_find_matching_function_token(b_tokens, b_function_index) if b_outer_function_start and b_tokens[b_function_index] and b_tokens[b_function_index].start_pos == b_outer_function_start then b_index = b_index + 1 elseif b_name_token and b_end_index then local b_name = b_name_token.value local b_original_function_source = b_source:sub(b_tokens[b_function_index].start_pos, b_tokens[b_end_index].end_pos) local b_function_source = b_instrument_defined_functions(b_original_function_source, true) local b_candidate_locals = b_collect_prior_local_names(b_source:sub(1, b_token.start_pos - 1)) local b_capture_names = b_detect_free_identifiers(b_original_function_source, b_name, b_candidate_locals) if #b_capture_names <= 80 then local b_name_list, b_value_map = b_build_capture_table_source(b_capture_names) local b_snippet = b_function_source .. "\nreturn " .. b_name local b_replacement = "local " .. b_name .. " = __LARRY_WRAP_DEFINED_FUNCTION(" .. b_strip_named_function_header(b_function_source) .. ", " .. b_quote_luau_string(b_snippet) .. ", " .. b_quote_luau_string(b_name) .. ", " .. b_name_list .. ", " .. b_value_map .. ")" table.insert( b_replacements, { start_pos = b_token.start_pos, end_pos = b_tokens[b_end_index].end_pos, text = b_replacement } ) end b_index = b_end_index + 1 else b_index = b_index + 1 end elseif b_token.value == "local" and b_tokens[b_index + 1] and not b_tokens[b_index + 1].keyword and b_tokens[b_index + 2] and b_tokens[b_index + 2].value == "=" and b_tokens[b_index + 3] and b_tokens[b_index + 3].value == "function" then local b_name = b_tokens[b_index + 1].value local b_function_index = b_index + 3 local b_end_index = b_find_matching_function_token(b_tokens, b_function_index) if b_outer_function_start and b_tokens[b_function_index] and b_tokens[b_function_index].start_pos == b_outer_function_start then b_index = b_index + 1 elseif b_end_index then local b_original_function_source = b_source:sub(b_tokens[b_function_index].start_pos, b_tokens[b_end_index].end_pos) local b_function_source = b_instrument_defined_functions(b_original_function_source, true) local b_candidate_locals = b_collect_prior_local_names(b_source:sub(1, b_token.start_pos - 1)) local b_capture_names = b_detect_free_identifiers(b_original_function_source, b_name, b_candidate_locals) if #b_capture_names <= 80 then local b_name_list, b_value_map = b_build_capture_table_source(b_capture_names) local b_snippet = "local function " .. b_name .. b_function_source:match("^function(.*)$") .. "\nreturn " .. b_name local b_replacement = "local " .. b_name .. " = __LARRY_WRAP_DEFINED_FUNCTION(" .. b_function_source .. ", " .. b_quote_luau_string(b_snippet) .. ", " .. b_quote_luau_string(b_name) .. ", " .. b_name_list .. ", " .. b_value_map .. ")" table.insert( b_replacements, { start_pos = b_token.start_pos, end_pos = b_tokens[b_end_index].end_pos, text = b_replacement } ) end b_index = b_end_index + 1 else b_index = b_index + 1 end elseif b_token.value:match("^[%a_][%w_]*$") and not b_token.keyword and b_tokens[b_index + 1] and b_tokens[b_index + 1].value == "=" and b_tokens[b_index + 2] and b_tokens[b_index + 2].value == "function" and not (b_tokens[b_index - 1] and (b_tokens[b_index - 1].value == "." or b_tokens[b_index - 1].value == ":")) then local b_name = b_token.value local b_function_index = b_index + 2 local b_end_index = b_find_matching_function_token(b_tokens, b_function_index) if b_outer_function_start and b_tokens[b_function_index] and b_tokens[b_function_index].start_pos == b_outer_function_start then b_index = b_index + 1 elseif b_end_index then local b_original_function_source = b_source:sub(b_tokens[b_function_index].start_pos, b_tokens[b_end_index].end_pos) local b_function_source = b_instrument_defined_functions(b_original_function_source, true) local b_candidate_locals = b_collect_prior_local_names(b_source:sub(1, b_token.start_pos - 1)) local b_capture_names = b_detect_free_identifiers(b_original_function_source, b_name, b_candidate_locals) if #b_capture_names <= 80 then local b_name_list, b_value_map = b_build_capture_table_source(b_capture_names) local b_snippet = "local function " .. b_name .. b_function_source:match("^function(.*)$") .. "\nreturn " .. b_name local b_replacement = b_name .. " = __LARRY_WRAP_DEFINED_FUNCTION(" .. b_function_source .. ", " .. b_quote_luau_string(b_snippet) .. ", " .. b_quote_luau_string(b_name) .. ", " .. b_name_list .. ", " .. b_value_map .. ")" table.insert( b_replacements, { start_pos = b_token.start_pos, end_pos = b_tokens[b_end_index].end_pos, text = b_replacement } ) end b_index = b_end_index + 1 else b_index = b_index + 1 end elseif b_token.value == "function" and b_tokens[b_index + 1] and b_tokens[b_index + 1].value ~= "(" then local b_function_index = b_index local b_paren_index = b_first_function_paren_index(b_tokens, b_function_index) local b_end_index = b_find_matching_function_token(b_tokens, b_function_index) if b_outer_function_start and b_token.start_pos == b_outer_function_start then b_index = b_index + 1 elseif b_paren_index and b_end_index and b_paren_index > b_index + 1 then local b_name_start = b_tokens[b_index + 1].start_pos local b_name_end = b_tokens[b_paren_index - 1].end_pos local b_name = b_source:sub(b_name_start, b_name_end):gsub("%s+", "") local b_lvalue = b_name:gsub(":([%a_][%w_]*)$", ".%1") local b_display_name = b_name:match("([%a_][%w_]*)$") or b_name local b_original_function_source = b_source:sub(b_tokens[b_function_index].start_pos, b_tokens[b_end_index].end_pos) local b_function_source = b_instrument_defined_functions(b_original_function_source, true) local b_function_literal = b_strip_named_function_header(b_function_source) if b_name:find(":", 1, true) then local b_params = b_function_literal:match("^function%s*(%b())") if b_params then local b_inside = b_params:sub(2, -2) local b_self_params = b_inside:match("^%s*$") and "self" or ("self, " .. b_inside) b_function_literal = b_function_literal:gsub("^function%s*%b()", "function(" .. b_self_params .. ")", 1) end end local b_candidate_locals = b_collect_prior_local_names(b_source:sub(1, b_token.start_pos - 1)) local b_capture_names = b_detect_free_identifiers(b_original_function_source, b_display_name, b_candidate_locals) if #b_capture_names <= 80 then local b_name_list, b_value_map = b_build_capture_table_source(b_capture_names) local b_snippet = b_function_source .. "\nreturn " .. b_lvalue local b_replacement = b_lvalue .. " = __LARRY_WRAP_DEFINED_FUNCTION(" .. b_function_literal .. ", " .. b_quote_luau_string(b_snippet) .. ", " .. b_quote_luau_string(b_display_name) .. ", " .. b_name_list .. ", " .. b_value_map .. ")" table.insert( b_replacements, { start_pos = b_tokens[b_function_index].start_pos, end_pos = b_tokens[b_end_index].end_pos, text = b_replacement } ) end b_index = b_end_index + 1 else b_index = b_index + 1 end elseif not b_skip_anonymous_wrap and b_token.value == "function" and b_tokens[b_index + 1] and b_tokens[b_index + 1].value == "(" then local b_end_index = b_find_matching_function_token(b_tokens, b_index) if b_outer_function_start and b_token.start_pos == b_outer_function_start then b_index = b_index + 1 elseif b_end_index then local b_original_function_source = b_source:sub(b_token.start_pos, b_tokens[b_end_index].end_pos) local b_function_source = b_instrument_defined_functions(b_original_function_source, true) local b_is_iife = b_is_immediately_invoked_anonymous_function(b_source, b_token.start_pos, b_tokens[b_end_index].end_pos) if not b_is_iife then local b_candidate_locals = b_collect_prior_local_names(b_source:sub(1, b_token.start_pos - 1)) local b_capture_names = b_detect_free_identifiers(b_original_function_source, nil, b_candidate_locals) if #b_capture_names <= 80 then local b_name_list, b_value_map = b_build_capture_table_source(b_capture_names) local b_replacement = "__LARRY_WRAP_DEFINED_FUNCTION(" .. b_function_source .. ", " .. b_quote_luau_string("return " .. b_function_source) .. ', "anonymous", ' .. b_name_list .. ", " .. b_value_map .. ")" table.insert( b_replacements, { start_pos = b_token.start_pos, end_pos = b_tokens[b_end_index].end_pos, text = b_replacement } ) end end b_index = b_end_index + 1 else b_index = b_index + 1 end else b_index = b_index + 1 end end if #b_replacements == 0 then return b_source end table.sort( b_replacements, function(a, b) return a.start_pos < b.start_pos end ) local b_out = {} local b_cursor = 1 for _, b_repl in ipairs(b_replacements) do if b_repl.start_pos >= b_cursor then table.insert(b_out, b_source:sub(b_cursor, b_repl.start_pos - 1)) table.insert(b_out, b_repl.text) b_cursor = b_repl.end_pos + 1 end end table.insert(b_out, b_source:sub(b_cursor)) return table.concat(b_out) end function b_larry_should_instrument_runtime_ticks(b_source) if j(b_source) ~= "string" or b_source == "" then return false end if j(b) == "function" then return false end if b_source:find("__LARRY_TICK", 1, true) then return false end if b_source:find("Luraph Obfuscator", 1, true) or b_source:find("):mq()(...)", 1, true) then return true end return #b_source > 50000 and b_source:find("return({", 1, true) ~= nil and b_source:find(":mq()", 1, true) ~= nil end function b_larry_instrument_runtime_ticks(b_source) if not b_larry_should_instrument_runtime_ticks(b_source) then return b_source end local b_tokens = b_tokenize_code(b_source) local b_replacements = {} q._runtime_tick_sites = {} local function b_insert_after(b_token, b_kind) if b_token then local b_site = #b_replacements + 1 q._runtime_tick_sites[b_site] = { kind = b_kind or b_token.value, pos = b_token.start_pos } table.insert( b_replacements, {pos = b_token.end_pos + 1, text = " __LARRY_TICK(" .. b_site .. ",T,w,q,_,D,J,P,M,Z);"} ) end end local b_index = 1 while b_index <= #b_tokens do local b_token = b_tokens[b_index] local b_value = b_token and b_token.value or nil if b_value == "repeat" then b_insert_after(b_token, "repeat") elseif b_value == "while" or b_value == "for" then local b_scan = b_index + 1 while b_tokens[b_scan] do if b_tokens[b_scan].value == "do" then b_insert_after(b_tokens[b_scan], b_value) b_index = b_scan break elseif b_tokens[b_scan].value == "function" or b_tokens[b_scan].value == "repeat" then break end b_scan = b_scan + 1 end end b_index = b_index + 1 end if #b_replacements == 0 then return b_source end table.sort( b_replacements, function(a, b) return a.pos > b.pos end ) local b_out = b_source for _, b_replacement in ipairs(b_replacements) do b_out = b_out:sub(1, b_replacement.pos - 1) .. b_replacement.text .. b_out:sub(b_replacement.pos) end return b_out end local function ak(al, am) local R, an = e(al, am) if R then return R end B("\n[CRITICAL ERROR] Failed to load script!") B("[LUA_LOAD_FAIL] " .. m(an)) local ao = tonumber(an:match(":(%d+):")) local ap = an:match("near '([^']+)'") if ap then local a1 = al:find(ap, 1, true) if a1 then local aq = math.max(1, a1 - 50) local ar = math.min(#al, a1 + 50) B("Context around error:") B("..." .. al:sub(aq, ar) .. "...") end end local as = o.open("DEBUG_FAILED_TRANSPILE.lua", "w") if as then as:write(al) as:close() B("[*] Saved to 'DEBUG_FAILED_TRANSPILE.lua' for inspection") end return nil, an end -- Stealth mode: suppress fingerprint markers that env-check tools (eUNC, sUNC, -- "Tampered Result" detectors) grep for. Stealth mode is on by default; set -- _G.__LARRY_STEALTH =ARRY_STEALTH", true) end local function at(O, au) if t.limit_reached then return end if O == nil then return end -- Operation-type system: emit either raw strings or structured ops that -- serialize to reconstructed source lines. if j(O) == "table" and rawget(O, "__op") ~= nil then local b_kind = rawget(O, "__op") if b_kind == "emit" then O = rawget(O, "text") elseif b_kind == "call" then local b_target = rawget(O, "target") or "obj" local b_method = rawget(O, "method") or "Call" local b_args = rawget(O, "args") or "..." O = tostring(b_target) .. ":" .. tostring(b_method) .. "(" .. tostring(b_args) .. ")" elseif b_kind == "assign" then local b_lhs = rawget(O, "lhs") or "_" local b_rhs = rawget(O, "rhs") or "nil" O = tostring(b_lhs) .. " = " .. tostring(b_rhs) else -- Unknown op kind; fallback to tostring(table) without crashing the dumper. O = m(rawget(O, "text") or O) end end local b_str = m(O) if rawget(_G, "__LARRY_STEALTH") ~= false then local b_text = b_str:gsub("^%s+", "") if b_text:sub(1, 2) == "--" then b_text = b_text:sub(3cal av = au and "" or string.rep(" ", t.indent) local aw = av .. b_str local ax = #aw + 1 if t.current_size + ax > r.MAX_OUTPUT_SIZE then t.limit_reached = true local ay = string.format( "-- [CRITICAL] Dump stopped: File size exceeded %dMB limit. (Premium users can get 25MB limit)", math.floor(r.MAX_OUTPUT_SIZE / (1024 * 1024) + 0.5) ) table.insert(t.output, ay) t.current_size = t.current_size + #ay error("DUMP_LIMIT_EXCEEDED") end if aw == t.last_emitted_line then t.repetition_count = t.repetition_count + 1 if t.repetition_count <= r.MAX_REPEATED_LINES then table.insert(t.output, aw) t.current_size = t.current_size + ax elseif t.repetition_count == r.MAX_REPEATED_LINES + 1 then local ay = av .. "-- [Repeated lines suppressed...]" table.insert(t.output, ay) t.current_size = t.current_size + #ay end else t.last_emitted_line = aw t.repetition_count = 0 table.insert(t.output, aw) t.current_size = t.current_size + ax end if r.VERBOSE and t.repetition_count <= 1 then B(aw) end end local function az(O) at("-- " .. m(O or "")) end local function b_emit_loadstring_capture(b_source, b_origin) if rawget(_G, "__LARRY_EMIT_LOADSTRING_FETCH_COMMENTS") ~= true then return end if j(b_source) ~= "string" or b_source == "" then return end t.captured_loadstring_sources = t.captured_loadstring_sources or {} local b_key = (b_origin and ("url:" .. b_origin)) or ("inline:" .. tostring(#b_source) .. ":" .. b_source:sub(1, 96)) if t.captured_loadstring_sources[b_key] then return end t.captured_loadstring_sources[b_key] = true if b_origin and b_origin ~= "" then az("Captured loadstring body from: " .. b_origin) else az("Captured loadstring body") end local b_total = 0 local b_limit = 260 for b_line in (b_source .. "\n"):gmatch("(.-)\r?\n") do b_total = b_total + 1 if b_total > b_limit then az("[loadstring body truncated after " .. tostring(b_limit) .. " lines]") break end at("--| " .. b_line) end end local function aA() t.last_emitted_line = nil table.insert(t.output, "") end local function aB() return table.concat(t.output, "\n") end local function aC(aD) local as = o.open(aD or r.OUTPUT_FILE, "w") if as then as:write(aB()) as:close() return true end return false end local aZ local function b_function_source_literal(b_fn, b_max_len) if j(b_fn) ~= "function" then return nil end if t.registry and t.registry[b_fn] then return t.registry[b_fn] end local b_fmeta = t.function_meta and t.function_meta[b_fn] if b_fmeta and not b_fmeta.cclosure and j(b_fmeta.base_source) == "string" then local b_src = b_fmeta.base_source b_src = b_src:gsub("^(local%s+[%a_][%w_]*%s*=%s*__LARRY_UPVALUES%b[][^\n]*\n)+", "") b_src = b_unwrap_larry_defined_wrappers(b_src) local b_return_fn = b_src:match("^%s*return%s+(function%s*%b().*)$") if b_return_fn then b_src = b_return_fn else local b_tokens = b_tokenize_code(b_src) for b_index, b_token in ipairs(b_tokens) do if b_token.value == "function" then local b_end_index = b_find_matching_function_token(b_tokens, b_index) if b_end_index then b_src = b_src:sub(b_tokens[b_index].start_pos, b_tokens[b_end_index].end_pos) break end end end end b_src = b_strip_named_function_header(b_src) b_src = b_restore_luau_output_source(b_src) if #b_src <= (b_max_len or 65536) then return b_src end end if b_fmeta then local b_alt = b_fmeta.runner or b_fmeta.native_fn or b_fmeta.old_proxy local b_alt_meta = b_alt and t.function_meta and t.function_meta[b_alt] or nil if b_alt_meta and not b_alt_meta.cclosure and j(b_alt_meta.base_source) == "string" then local b_src = b_alt_meta.base_source b_src = b_src:gsub("^(local%s+[%a_][%w_]*%s*=%s*__LARRY_UPVALUES%b[][^\n]*\n)+", "") b_src = b_unwrap_larry_defined_wrappers(b_src) local b_return_fn = b_src:match("^%s*return%s+(function%s*%b().*)$") if b_return_fn then b_src = b_return_fn else local b_tokens = b_tokenize_code(b_src) for b_index, b_token in ipairs(b_tokens) do if b_token.value == "function" then local b_end_index = b_find_matching_function_token(b_tokens, b_index) if b_end_index then b_src = b_src:sub(b_tokens[b_index].start_pos, b_tokens[b_end_index].end_pos) break end end end end b_src = b_strip_named_function_header(b_src) b_src = b_restore_luau_output_source(b_src) if #b_src <= (b_max_len or 65536) then return b_src end end end return nil end local function b_function_body_literal(b_fn, b_max_len) local b_src = b_function_source_literal(b_fn, b_max_len) if j(b_src) ~= "string" then return nil end local b_body = b_src:match("^%s*function%s*%b()(.*)%s*end%s*$") if not b_body then return nil end b_body = b_body:gsub("^%s*\n", ""):gsub("\n%s*$", "") if b_body:match("^%s*$") then return nil end local b_min_indent = nil for b_line in (b_body .. "\n"):gmatch("(.-)\n") do if not b_line:match("^%s*$") then local b_indent = #(b_line:match("^[ \t]*") or "") b_min_indent = b_min_indent == nil and b_indent or math.min(b_min_indent, b_indent) end end if b_min_indent and b_min_indent > 0 then local b_lines = {} for b_line in (b_body .. "\n"):gmatch("(.-)\n") do table.insert(b_lines, b_line:sub(b_min_indent + 1)) end b_body = table.concat(b_lines, "\n") end return b_body end local function b_function_params_literal(b_fn, b_max_len) local b_src = b_function_source_literal(b_fn, b_max_len) if j(b_src) ~= "string" then return nil end return b_src:match("^%s*function%s*%((.-)%)") end local function b_assignment_value_literal(b_value) if j(b_value) == "function" then return b_function_source_literal(b_value) or "function()\nend" end return aZ(b_value) end local function aE(aF) if aF == nil then return "nil" end if j(aF) == "string" then return aF end if j(aF) == "number" or j(aF) == "boolean" then return m(aF) end if j(aF) == "table" then if t.registry[aF] then return t.registry[aF] end if G(aF) then local aG = H(aF) return aG and "proxy_" .. aG or "proxy" end return "{...}" end if j(aF) == "function" then return b_function_source_literal(aF) or "function()\nend" end local y, O = pcall(m, aF) return y and O or "unknown" end q._engine_string_key = function(b_value) local b_text = aE(b_value) local b_nul = string.find(b_text, "\0", 1, true) if b_nul then b_text = string.sub(b_text, 1, b_nul - 1) end return b_text end b_quote_luau_string = function(b_value) local b_text = aE(b_value) local b_parts = {'"'} for b_index = 1, #b_text do local b_byte = string.byte(b_text, b_index) if b_byte == 34 then table.insert(b_parts, '\\"') elseif b_byte == 92 then table.insert(b_parts, "\\\\") elseif b_byte == 10 then table.insert(b_parts, "\\n") elseif b_byte == 13 then table.insert(b_parts, "\\r") elseif b_byte == 9 then table.insert(b_parts, "\\t") elseif b_byte < 32 or b_byte > 126 then table.insert(b_parts, string.format("\\%03d", b_byte)) else table.insert(b_parts, string.char(b_byte)) end end table.insert(b_parts, '"') return table.concat(b_parts) end local function aH(aF) return b_quote_luau_string(aF) end do local function b_hookop_trim(b_text) return (tostring(b_text or ""):gsub("^%s+", ""):gsub("%s+$", "")) end local b_hookop_can_emit local b_hookop_emit_line local function b_hookop_add_op(b_ops, b_name) b_name = tostring(b_name or "") if b_name == "" then return end b_ops.seen = b_ops.seen or {} if not b_ops.seen[b_name] then b_ops.seen[b_name] = true table.insert(b_ops, b_name) end end local function b_hookop_unquote(b_text) b_text = b_hookop_trim(b_text) local b_quote = b_text:sub(1, 1) if (b_quote ~= '"' and b_quote ~= "'") or b_text:sub(-1) ~= b_quote then return nil, false end local b_body = b_text:sub(2, -2) b_body = b_body:gsub("\\n", "\n"):gsub("\\r", "\r"):gsub("\\t", "\t") b_body = b_body:gsub("\\(['\"\\])", "%1") return b_body, true end local function b_hookop_literal_to_source(b_value, b_known, b_raw) if not b_known then return b_hookop_trim(b_raw) end if b_value == nil then return "nil" end if type(b_value) == "string" then return aH(b_value) end return tostring(b_value) end local function b_hookop_parse_literal(b_expr, b_locals) b_expr = b_hookop_trim(b_expr) if b_locals and b_locals[b_expr] and b_locals[b_expr].known then return b_locals[b_expr].value, true end if b_expr == "nil" then return nil, true end if b_expr == "true" then return true, true end if b_expr == "false" then return false, true end local b_num = tonumber(b_expr) if b_num ~= nil then return b_num, true end local b_str, b_ok = b_hookop_unquote(b_expr) if b_ok then return b_str, true end return nil, false end local function b_hookop_truthy(b_value) return not (b_value == nil or b_value == false) end local function b_hookop_eval_condition(b_expr, b_locals) b_expr = b_hookop_trim(b_expr) local b_not_expr = b_expr:match("^not%s+(.+)$") if b_not_expr then local b_value, b_known = b_hookop_eval_condition(b_not_expr, b_locals) if b_known then return not b_value, true end return nil, false end for _, b_op in ipairs({"~=", "==", ">=", "<=", ">", "<"}) do local b_pattern_op = b_op:gsub("([^%w])", "%%%1") local b_left, b_right = b_expr:match("^(.-)%s*" .. b_pattern_op .. "%s*(.-)$") if b_left and b_right then local b_lhs, b_lhs_known = b_hookop_parse_literal(b_left, b_locals) local b_rhs, b_rhs_known = b_hookop_parse_literal(b_right, b_locals) if not (b_lhs_known and b_rhs_known) then return nil, false end if b_op == "~=" then return b_lhs ~= b_rhs, true elseif b_op == "==" then return b_lhs == b_rhs, true elseif type(b_lhs) == "number" and type(b_rhs) == "number" then if b_op == ">=" then return b_lhs >= b_rhs, true elseif b_op == "<=" then return b_lhs <= b_rhs, true elseif b_op == ">" then return b_lhs > b_rhs, true elseif b_op == "<" then return b_lhs < b_rhs, true end end return nil, false end end local b_value, b_known = b_hookop_parse_literal(b_expr, b_locals) if b_known then return b_hookop_truthy(b_value), true end return nil, false end local function b_hookop_split_statements(b_text) local b_lines = {} b_text = tostring(b_text or ""):gsub("\r\n", "\n") local b_buf = "" local b_depth_paren, b_depth_brace, b_depth_bracket = 0, 0, 0 local b_quote = nil local b_escape = false local function b_flush_line() local b_stmt = b_hookop_trim(b_buf) if b_stmt ~= "" then table.insert(b_lines, b_stmt) end b_buf = "" end for i = 1, #b_text do local ch = b_text:sub(i, i) if b_quote ~= nil then b_buf = b_buf .. ch if b_escape then b_escape = false elseif ch == "\\" then b_escape = true elseif ch == b_quote then b_quote = nil end else if ch == '"' or ch == "'" then b_quote = ch b_buf = b_buf .. ch elseif ch == "(" then b_depth_paren = b_depth_paren + 1 b_buf = b_buf .. ch elseif ch == ")" then b_depth_paren = math.max(0, b_depth_paren - 1) b_buf = b_buf .. ch elseif ch == "{" then b_depth_brace = b_depth_brace + 1 b_buf = b_buf .. ch elseif ch == "}" then b_depth_brace = math.max(0, b_depth_brace - 1) b_buf = b_buf .. ch elseif ch == "[" then b_depth_bracket = b_depth_bracket + 1 b_buf = b_buf .. ch elseif ch == "]" then b_depth_bracket = math.max(0, b_depth_bracket - 1) b_buf = b_buf .. ch elseif ch == ";" and b_depth_paren == 0 and b_depth_brace == 0 and b_depth_bracket == 0 then b_flush_line() elseif ch == "\n" and b_depth_paren == 0 and b_depth_brace == 0 and b_depth_bracket == 0 then b_flush_line() else b_buf = b_buf .. ch end end end if b_hookop_trim(b_buf) ~= "" then b_flush_line() end return b_lines end local function b_hookop_find_balanced_paren_end(b_text, b_start) local b_depth = 0 local b_in_str = nil local b_esc = false local b_in_long = false local b_long_eq = 0 for b_i = b_start, #b_text do local ch = b_text:sub(b_i, b_i) if b_in_long then local b_close = "]" .. string.rep("=", b_long_eq) .. "]" if b_text:sub(b_i, b_i + #b_close - 1) == b_close then b_in_long = false end elseif b_in_str then if b_esc then b_esc = false elseif ch == "\\" then b_esc = true elseif ch == b_in_str then b_in_str = nil end else if ch == '"' or ch == "'" then b_in_str = ch elseif b_text:sub(b_i, b_i + 1) == "[[" or b_text:sub(b_i):match("^%[=+%[") then b_in_long = true local b_eq = b_text:sub(b_i):match("^%[(=*)%[") b_long_eq = b_eq and #b_eq or 0 elseif ch == "(" then b_depth = b_depth + 1 elseif ch == ")" then b_depth = b_depth - 1 if b_depth == 0 then return b_i end end end end return nil end local function b_hookop_extract_call_name(b_prefix) local b_name = b_prefix:match(":([%a_][%w_]*)$") if b_name then return b_name end b_name = b_prefix:match("%.([%a_][%w_]*)$") if b_name then return b_name end b_name = b_prefix:match("^([%a_][%w_]*)$") if b_name then return b_name end return b_prefix:match("([%a_][%w_]*)%s*$") or "call" end local function b_hookop_normalize_call(b_line) b_line = b_hookop_trim(b_line) -- Find the first top-level '(' that looks like a call local b_in_str = nil local b_esc = false for b_i = 1, #b_line do local ch = b_line:sub(b_i, b_i) if b_in_str then if b_esc then b_esc = false elseif ch == "\\" then b_esc = true elseif ch == b_in_str then b_in_str = nil end else if ch == '"' or ch == "'" then b_in_str = ch elseif ch == "(" then local b_prefix = b_hookop_trim(b_line:sub(1, b_i - 1)) -- Must have a valid call prefix (identifier, dot chain, colon, or closing paren/bracket) if b_prefix ~= "" and ( b_prefix:match("[%a_][%w_]*$") or b_prefix:match("[%]%)%}]$") ) then local b_end = b_hookop_find_balanced_paren_end(b_line, b_i) if b_end then local b_remainder = b_hookop_trim(b_line:sub(b_end + 1)) -- Allow chained calls: loadstring(...)() or empty remainder if b_remainder == "" or b_remainder == ";" then local b_name = b_hookop_extract_call_name(b_prefix) return b_line:sub(1, b_end), b_name end -- Check for chained call e.g. loadstring(game:HttpGet("url"))() if b_remainder:sub(1, 1) == "(" then local b_end2 = b_hookop_find_balanced_paren_end(b_line, b_end + 1 + (b_remainder:find("%(") or 1) - 1) if not b_end2 then b_end2 = b_hookop_find_balanced_paren_end(b_line, b_end + 1) end if b_end2 then local b_rest2 = b_hookop_trim(b_line:sub(b_end2 + 1)) if b_rest2 == "" or b_rest2 == ";" then local b_name = b_hookop_extract_call_name(b_prefix) return b_line:sub(1, b_end2), b_name end end end end end break end end end -- Also handle string-call syntax: print"hello" or error"msg" local b_fn_str, b_str_arg = b_line:match("^([%a_][%w_%.:]*)%s*([\"'].+[\"'])$") if b_fn_str then return b_fn_str .. "(" .. b_str_arg .. ")", b_hookop_extract_call_name(b_fn_str) end return nil, nil end local function b_hookop_normalize_assignment(b_line) b_line = b_hookop_trim(b_line) local b_name, b_expr = b_line:match("^([%a_][%w_%.:]*)%s*=%s*(.-)$") if not b_name or not b_expr or b_name:match("^local%s+") then return nil, nil end -- Don't match if RHS starts with function (that's a block, not a simple assignment) if b_expr:match("^function%s*%(") then return nil, nil end -- Preserve the full expression (calls, member access, etc.) not just literals return b_name .. " = " .. b_hookop_trim(b_expr), b_name end local function b_hookop_should_preserve_raw_line(b_line) b_line = b_hookop_trim(b_line) if b_line == "" then return false end -- Nothing is preserved as raw anymore; the reconstructor handles all patterns return false end local function b_hookop_is_block_start(b_line) b_line = b_hookop_trim(b_line) return (b_line:match("^if%s+.+%s+then%s*$") ~= nil) or (b_line:match("^for%s+.+%s+do%s*$") ~= nil) or (b_line:match("^while%s+.+%s+do%s*$") ~= nil) or (b_line:match("^function%s+[%w_%.:]+%s*%(") ~= nil) or (b_line:match("^local%s+function%s+[%w_%.:]+%s*%(") ~= nil) or (b_line == "repeat") or (b_line == "do") or -- assignment-function: fenv.x = function(...) or x = function(...) (b_line:match("=%s*function%s*%(") ~= nil and b_line:match("^[%a_]")) end local function b_hookop_scan_block(b_lines, b_start, b_stop) local b_depth = 1 local b_else_index = nil local b_elseif_indexes = {} local b_scan = b_start + 1 while b_scan <= b_stop do local b_scan_line = b_hookop_trim(b_lines[b_scan]) if b_hookop_is_block_start(b_scan_line) then b_depth = b_depth + 1 elseif b_scan_line == "end" or b_scan_line:match("^until%s+") then b_depth = b_depth - 1 if b_depth == 0 then return b_scan, b_else_index, b_elseif_indexes end elseif b_depth == 1 then if b_scan_line == "else" then b_else_index = b_scan elseif b_scan_line:match("^elseif%s+.+%s+then%s*$") then table.insert(b_elseif_indexes, b_scan) end end b_scan = b_scan + 1 end return nil, nil, nil end local function b_hookop_reconstruct_lines(b_lines, b_start, b_stop, b_locals, b_ops, b_out, b_depth, b_state) b_state = b_state or {max_depth = 80, max_lines = 12000, max_ops = 6000} if b_depth > (b_state.max_depth or 80) then return false end local b_index = b_start while b_index <= b_stop do if #b_out >= (b_state.max_lines or 12000) then table.insert(b_out, string.rep(" if #b_ops >= (b_state.max_ops or 6000) then table.insert(b_out, string.rep(" " local b_line = b_hookop_trim(b_lines[b_index]) if b_line == "" then b_index = b_index + 1 else if b_hookop_should_preserve_raw_line(b_line) then table.insert(b_out, string.rep(" ", b_depth) .. b_line) b_hookop_add_op(b_ops, "raw:signature") b_index = b_index + 1 else -- Handle multi-name local declarations: local a, b, c local b_multi_names = b_line:match("^local%s+([%a_][%w_]*%s*,.-[%a_][%w_]*)%s*$") if b_multi_names then table.insert(b_out, string.rep(" ", b_depth) .. b_line) b_hookop_add_op(b_ops, "local") b_index = b_index + 1 else local b_name, b_expr = b_line:match("^local%s+([%a_][%w_]*)%s*=%s*(.-)$") if b_name and b_expr and not b_expr:find("^function") then local b_value, b_known = b_hookop_parse_literal(b_expr, b_locals) b_locals[b_name] = {value = b_value, known = b_known, raw = b_expr} -- Preserve full expression on RHS (calls, member access, etc.) local b_display_expr = b_hookop_trim(b_expr) if b_known and type(b_value) == "string" then b_display_expr = b_hookop_literal_to_source(b_value, b_known, b_expr) end table.insert(b_out, string.rep(" ", b_depth) .. "local " .. b_name .. " = " .. b_display_expr) b_hookop_add_op(b_ops, "local") b_index = b_index + 1 else local b_if_cond, b_if_body, b_if_else = b_line:match("^if%s+(.+)%s+then%s+(.+)%s+else%s+(.+)%s+end$") if not b_if_cond then b_if_cond, b_if_body = b_line:match("^if%s+(.+)%s+then%s+(.+)%s+end$") end if b_if_cond and b_if_body then local b_cond_value, b_cond_known = b_hookop_eval_condition(b_if_cond, b_locals) local b_body = (b_cond_known and b_cond_value == false and b_if_else) and b_if_else or b_if_body if b_cond_known and b_cond_value == false and not b_if_else then b_index = b_index + 1 else local b_display_cond = b_hookop_trim(b_if_cond) if not b_display_cond:match("^[%a_][%w_]*$") and b_cond_known then b_display_cond = tostring(b_cond_value == true) end table.insert(b_out, string.rep(" ", b_depth) .. "if " .. b_display_cond .. " then") b_hookop_add_op(b_ops, "if") local b_body_lines = b_hookop_split_statements(b_body) if not b_hookop_reconstruct_lines(b_body_lines, 1, #b_body_lines, b_locals, b_ops, b_out, b_depth + 1, b_state) then return false end table.insert(b_out, string.rep(" ", b_depth) .. "end") b_index = b_index + 1 end elseif b_line:match("^if%s+") and b_line:match("then%s*$") then local b_cond = b_hookop_trim((b_line:match("^if%s+(.+)%s+then%s*$"))) local b_end_index, b_else_index, b_elseif_indexes = b_hookop_scan_block(b_lines, b_index, b_stop) if not b_end_index then return false end local b_cond_value, b_cond_known = b_hookop_eval_condition(b_cond, b_locals) if not (b_cond_known and b_cond_value == false) then local b_display_cond = b_cond if not b_display_cond:match("^[%a_][%w_]*$") and b_cond_known then b_display_cond = tostring(b_cond_value == true) end table.insert(b_out, string.rep(" ", b_depth) .. "if " .. b_display_cond .. " then") b_hookop_add_op(b_ops, "if") local b_then_stop = b_end_index - 1 if b_else_index and b_else_index > b_index then b_then_stop = b_else_index - 1 elseif b_elseif_indexes and #b_elseif_indexes > 0 then b_then_stop = b_elseif_indexes[1] - 1 end if not b_hookop_reconstruct_lines(b_lines, b_index + 1, b_then_stop, b_locals, b_ops, b_out, b_depth + 1, b_state) then return false end if b_elseif_indexes and #b_elseif_indexes > 0 then for _, b_elseif_index in ipairs(b_elseif_indexes) do table.insert(b_out, string.rep(" ", b_depth) .. b_hookop_trim(b_lines[b_elseif_index])) end end if b_else_index and b_else_index > b_index then table.insert(b_out, string.rep(" ", b_depth) .. "else") if not b_hookop_reconstruct_lines(b_lines, b_else_index + 1, b_end_index - 1, b_locals, b_ops, b_out, b_depth + 1, b_state) then return false end end table.insert(b_out, string.rep(" ", b_depth) .. "end") end b_index = b_end_index + 1 elseif b_line:match("^for%s+") and b_line:match("do%s*$") then local b_end_index = b_hookop_scan_block(b_lines, b_index, b_stop) if not b_end_index then table.insert(b_out, string.rep(" ", b_depth) .. b_line) b_hookop_add_op(b_ops, "raw") b_index = b_index + 1 else table.insert(b_out, string.rep(" ", b_depth) .. b_line) b_hookop_add_op(b_ops, "for") if not b_hookop_reconstruct_lines(b_lines, b_index + 1, b_end_index - 1, b_locals, b_ops, b_out, b_depth + 1, b_state) then return false end table.insert(b_out, string.rep(" ", b_depth) .. "end") b_index = b_end_index + 1 end elseif b_line:match("^local%s+function%s+") or b_line:match("^function%s+") or (b_line:match("^while%s+") and b_line:match("do%s*$")) or b_line == "repeat" or -- assignment-function blocks: fenv.x = function(...) or x = function(...) (b_line:match("=%s*function%s*%(") and b_line:match("^[%a_]")) then local b_end_index = b_hookop_scan_block(b_lines, b_index, b_stop) if not b_end_index then table.insert(b_out, string.rep(" ", b_depth) .. b_line) b_hookop_add_op(b_ops, "raw") b_index = b_index + 1 else table.insert(b_out, string.rep(" ", b_depth) .. b_line) if b_line:match("^local%s+function%s+") or b_line:match("^function%s+") or b_line:match("=%s*function%s*%(") then b_hookop_add_op(b_ops, "function") elseif b_line:match("^while%s+") then b_hookop_add_op(b_ops, "while") else b_hookop_add_op(b_ops, "repeat") end if not b_hookop_reconstruct_lines(b_lines, b_index + 1, b_end_index - 1, b_locals, b_ops, b_out, b_depth + 1, b_state) then return false end table.insert(b_out, string.rep(" ", b_depth) .. b_hookop_trim(b_lines[b_end_index])) b_index = b_end_index + 1 end -- return statements elseif b_line:match("^return%s") or b_line == "return" then table.insert(b_out, string.rep(" ", b_depth) .. b_line) b_hookop_add_op(b_ops, "return") b_index = b_index + 1 -- break statements elseif b_line == "break" then table.insert(b_out, string.rep(" ", b_depth) .. "break") b_hookop_add_op(b_ops, "break") b_index = b_index + 1 -- do...end blocks elseif b_line == "do" then local b_end_index = b_hookop_scan_block(b_lines, b_index, b_stop) if b_end_index then table.insert(b_out, string.rep(" ", b_depth) .. "do") b_hookop_add_op(b_ops, "do") if not b_hookop_reconstruct_lines(b_lines, b_index + 1, b_end_index - 1, b_locals, b_ops, b_out, b_depth + 1, b_state) then return false end table.insert(b_out, string.rep(" ", b_depth) .. "end") b_index = b_end_index + 1 else table.insert(b_out, string.rep(" ", b_depth) .. b_line) b_hookop_add_op(b_ops, "raw") b_index = b_index + 1 end else local b_call_line, b_call_name = b_hookop_normalize_call(b_line) if b_call_line then table.insert(b_out, string.rep(" ", b_depth) .. b_call_line) b_hookop_add_op(b_ops, "call:" .. b_call_name) b_index = b_index + 1 else local b_assign_line, b_assign_name = b_hookop_normalize_assignment(b_line) if b_assign_line then table.insert(b_out, string.rep(" ", b_depth) .. b_assign_line) b_hookop_add_op(b_ops, "assign") if b_locals and b_assign_name and b_assign_name:match("^[%a_][%w_]*$") then local _, b_expr = b_line:match("^([%a_][%w_%.:]*)%s*=%s*(.-)$") local b_value, b_known = b_hookop_parse_literal(b_expr or "", b_locals) b_locals[b_assign_name] = {value = b_value, known = b_known, raw = b_expr} end else -- Passthrough any other line (expressions, complex stmts) as raw table.insert(b_out, string.rep(" ", b_depth) .. b_line) b_hookop_add_op(b_ops, "raw") end b_index = b_index + 1 end end end end end end end return true end local function b_hookop_preserve_hook_source(b_source) if type(b_source) ~= "string" or #b_source > 5000000 then return nil end local b_has_hookmetamethod = b_source:find("hookmetamethod", 1, true) ~= nil local b_has_hookfunction = b_source:find("hookfunction", 1, true) ~= nil if not b_has_hookmetamethod and not b_has_hookfunction then return nil end local b_ops = {} local function b_add(b_name) b_hookop_add_op(b_ops, b_name) end if b_has_hookmetamethod then if b_source:find("__namecall", 1, true) then b_add("hookmetamethod:__namecall") end if b_source:find("__index", 1, true) then b_add("hookmetamethod:__index") end if b_source:find("__newindex", 1, true) then b_add("hookmetamethod:__newindex") end if #b_ops == 0 then b_add("hookmetamethod") end end if b_has_hookfunction then b_add("hookfunction") end if b_source:find("getgenv", 1, true) then b_add("getgenv") end if b_source:find("print", 1, true) then b_add("call:print") end local b_lines = {} b_source = b_source:gsub("\r\n", "\n") if b_source:sub(-1) ~= "\n" then b_source = b_source .. "\n" end for b_line in b_source:gmatch("([^\n]*)\n") do table.insert(b_lines, b_line) end while #b_lines > 0 and b_hookop_trim(b_lines[#b_lines]) == "" do table.remove(b_lines) end if #b_lines == 0 then return nil end -- Verbatim preservation is for small hook snippets; a single huge line is the same minified -- payload users complain about when it is mistaken for "deobfuscated" output. if #b_lines == 1 and #b_lines[1] > 6000 then return nil end return b_lines, b_ops end local function b_hookop_emit_monolithic_skip_note() if not t then return end t.monolithic_runtime_mode = true t.output = t.ouonolithic/minified payload; runtime capture below)" ) if q._recalculate_output_size then q._recalculate_output_size() end end local function b_hookop_reconstruction_is_trivial_monolith(b_source, b_out) if type(b_source) ~= "string" or type(b_out) ~= "table" or #b_source < 2000 then return false end local b_total = 0 local b_max_line = 0 for b_i = 1, #b_out do local b_s = tostring(b_out[b_i] or "") local b_n = #b_s b_total = b_total + b_n if b_n > b_max_line then b_max_line = b_n end end if b_max_line > 8000 then return true end if #b_out < 10 and b_total > math.floor(#b_source * 0.65) then return true end return false end -- HookOP control-flow instrumentation: rewrites source to inject runtime -- tracking calls at if/else/end/for boundaries. All output comes from -- actual execution through the env logger — no static echo. function q._hookop_instrument_control_flow(b_source) if not (q.cfg and q.cfg.hookop_enabled) then return b_source end if j(b_source) ~= "string" or #b_source > 250000 then return b_source end -- Only instrument readable code (multi-line, not minified) local b_newline_count = 0 for _ in b_source:gmatch("\n") do b_newline_count = b_newline_count + 1 end if b_newline_count < 1 and #b_source > 500 then return b_source end local b_lines = {} for b_line in (b_source .. "\n"):gmatch("([^\n]*)\n") do b_lines[#b_lines + 1] = b_line end local b_long_bracket_level = nil local function b_find_long_bracket_open(b_text) local b_pos = 1 while true do local b_start, b_finish, b_eq = b_text:find("%[(=*)%[", b_pos) if not b_start then return nil, nil, nil end local b_comment_start = b_text:find("%-%-", 1, true) if not b_comment_start or b_start < b_comment_start then return b_start, b_finish, b_eq or "" end b_pos = b_finish + 1 end end local function b_long_bracket_close_pattern(b_eq) return "%]" .. string.rep("=", #(b_eq or "")) .. "%]" end local function b_update_long_bracket_state(b_text) if b_long_bracket_level ~= nil then if b_text:find(b_long_bracket_close_pattern(b_long_bracket_level)) then b_long_bracket_level = nil end return end local _, _, b_eq = b_find_long_bracket_open(b_text) if b_eq ~= nil then local b_open_count = 0 local b_close_count = 0 for _ in b_text:gmatch("%[(=*)%[") do b_open_count = b_open_count + 1 end for _ in b_text:gmatch(b_long_bracket_close_pattern(b_eq)) do b_close_count = b_close_count + 1 end if b_close_count < b_open_count then b_long_bracket_level = b_eq end end end -- Track block nesting to properly match end keywords local b_block_stack = {} -- "if", "for", "while", "repeat", "function", "do" local b_out = {} for b_i = 1, #b_lines do local b_line = b_lines[b_i] local b_trimmed = b_line:match("^%s*(.-)%s*$") local b_indent = b_line:match("^(%s*)") or "" -- Skip lines inside string literals or comments (simple heuristic) local b_is_comment = b_trimmed:match("^%-%-") ~= nil if b_long_bracket_level ~= nil then b_out[#b_out + 1] = b_line b_update_long_bracket_state(b_line) elseif b_is_comment then b_out[#b_out + 1] = b_line b_update_long_bracket_state(b_line) elseif b_trimmed:match("^if%s+.+%s+then%s*$") or b_trimmed:match("^if%s+.+%s+then%s*%-%-") then -- if CONDITION then local b_cond = b_trimmed:match("^if%s+(.+)%s+then") if b_cond then local b_escaped = b_cond:gsub("\\", "\\\\"):gsub("\"", "\\\"") b_block_stack[#b_block_stack + 1] = "if" b_out[#b_out + 1] = b_indent .. "if __HOOKOP_IF(" .. b_cond .. ", \"" .. b_escaped .. "\") then" else b_block_stack[#b_block_stack + 1] = "if" b_out[#b_out + 1] = b_line end elseif b_trimmed:match("^elseif%s+.+%s+then%s*$") or b_trimmed:match("^elseif%s+.+%s+then%s*%-%-") then -- elseif CONDITION then — use __HOOKOP_ELSEIF which handles the else+if emission local b_cond = b_trimmed:match("^elseif%s+(.+)%s+then") if b_cond then local b_escaped = b_cond:gsub("\\", "\\\\"):gsub("\"", "\\\"") b_out[#b_out + 1] = b_indent .. "elseif __HOOKOP_ELSEIF(" .. b_cond .. ", \"" .. b_escaped .. "\") then" else b_out[#b_out + 1] = b_line end elseif b_trimmed == "else" or b_trimmed:match("^else%s*%-%-") then -- else — put tracking AFTER else so it runs inside the else block b_out[#b_out + 1] = b_line if #b_block_stack > 0 and b_block_stack[#b_block_stack] == "if" then b_out[#b_out + 1] = b_indent .. " __HOOKOP_ELSE()" end elseif b_trimmed:match("^for%s+.+%s+do%s*$") or b_trimmed:match("^for%s+.+%s+do%s*%-%-") then -- for ... do local b_iter = b_trimmed:match("^for%s+(.+)%s+do") if b_iter then local b_escaped = b_iter:gsub("\\", "\\\\"):gsub("\"", "\\\"") b_block_stack[#b_block_stack + 1] = "for" b_out[#b_out + 1] = b_indent .. "__HOOKOP_FOR(\"" .. b_escaped .. "\")" b_out[#b_out + 1] = b_line else b_block_stack[#b_block_stack + 1] = "for" b_out[#b_out + 1] = b_line end elseif b_trimmed:match("^while%s+.+%s+do%s*$") then b_block_stack[#b_block_stack + 1] = "while" b_out[#b_out + 1] = b_line elseif b_trimmed:match("^repeat%s*$") then b_block_stack[#b_block_stack + 1] = "repeat" b_out[#b_out + 1] = b_line elseif b_trimmed:match("^do%s*$") then b_block_stack[#b_block_stack + 1] = "do" b_out[#b_out + 1] = b_line elseif b_trimmed:match("^function%s+") or b_trimmed:match("^local%s+function%s+") then b_block_stack[#b_block_stack + 1] = "function" b_out[#b_out + 1] = b_line elseif b_trimmed == "end" or b_trimmed:match("^end[;%s]") or b_trimmed:match("^end$") then -- end — emit tracking AFTER end so it always runs local b_block_type = #b_block_stack > 0 and table.remove(b_block_stack) or nil if b_block_type == "if" or b_block_type == "for" then b_out[#b_out + 1] = b_line b_out[#b_out + 1] = b_indent .. "__HOOKOP_END()" else b_out[#b_out + 1] = b_line end else -- Pass through all other lines b_out[#b_out + 1] = b_line b_update_long_bracket_state(b_line) end end return table.concat(b_out, "\n") end function q._hookop_reconstruct_source(b_source) if not (q.cfg and q.cfg.hookop_enabled == true) then return nil end local b_hook_lines, b_hook_ops = b_hookop_preserve_hook_source(b_source) if b_hook_lines then return b_hook_lines, b_hook_ops end if type(b_source) ~= "string" or #b_source > 250000 then return nil end -- Skip static reconstruction for unobfuscated/readable source code. -- For readable code, the static reconstruction just echoes the source back -- which duplicates the runtime-captured output. Let runtime hooks handle it. do local b_newline_count = 0 for _ in b_source:gmatch("\n") do b_newline_count = b_newline_count + 1 end local b_has_newlines = b_newline_count >= 1 local b_avg_line_len = #b_source / math.max(1, b_newline_count + 1) -- Readable code has multiple lines with reasonable average line length -- and uses normal identifiers (not single-char obfuscated names everywhere) local b_looks_readable = b_has_newlines and b_avg_line_len < 300 -- Also skip if source is small and not minified (single line but short) local b_is_small_unobfuscated = #b_source < 2000 and b_avg_line_len < 500 if b_looks_readable or b_is_small_unobfuscated then -- Let runtime hooks capture operations naturally return nil end end local b_ok_split, b_lines = pcall(function() return b_hookop_split_statements(b_source) end) if not b_ok_split or type(b_lines) ~= "table" then return nil end if #b_lines == 0 or #b_lines > 6000 then return nil end local b_ops = {} local b_out = {} local b_ok, b_reconstruct_ok = pcall(function() return b_hookop_reconstruct_lines(b_lines, 1, #b_lines, {}, b_ops, b_out, 0, { max_depth = 80, max_lines = 12000, max_ops = 6000 }) end) if not b_ok then return nil end local b_result_ok = b_reconstruct_ok == true if not b_result_ok or #b_out == 0 then return nil end if b_hookop_reconstruction_is_trivial_monolith(b_source, b_out) then b_hookop_emit_monolithic_skip_note() return nil end return b_out, b_ops end function q._emit_hookop_reconstruction(b_lines, b_ops) if type(b_lines) ~= "table" then return false end if not t then return false end local b_budget = tonumber(rawget(_G, "__LARRY_HOOKOP_MAX_EMIT_LINES")) or 300000 t.hookop_emitted_lines = tonumber(t.hookop_emitted_lines) or 0 if (t.hookop_emitted_lines + #b_lines + 2) > b_budget then if not t.hookop_budget_warned then , truncating additional hookop output") end return false end local b_op_names = {} if type(b_ops) == "table" then for b_index = 1, #b_ops do local b_name = b_ops[b_index] if type(b_name) == "string" and b_name ~= "" then b_op_names[#b_op_names + 1] = b_name end end end if #b_op_names == 0 then b_op_names[1] = "control_flow" end t.output = t.output or {} table.insert(t.outpuive") end for _, b_line in ipairs(b_lines) do table.insert(t.output, tostring(b_line or "")) end t.hookop_emitted_lines = t.hookop_emitted_lines + #b_lines + 2 q._recalculate_output_size() return true end end local aJ = { Players = "Players", Workspace = "Workspace", ReplicatedStorage = "ReplicatedStorage", ReplicatedFirst = "ReplicatedFirst", ServerStorage = "ServerStorage", ServerScriptService = "ServerScriptService", StarterGui = "StarterGui", StarterPack = "StarterPack", StarterPlayer = "StarterPlayer", Lighting = "Lighting", SoundService = "SoundService", Chat = "Chat", RunService = "RunService", UserInputService = "UserInputService", TweenService = "TweenService", HttpService = "HttpService", PolicyService = "PolicyService", MarketplaceService = "MarketplaceService", TeleportService = "TeleportService", PathfindingService = "PathfindingService", CollectionService = "CollectionService", PhysicsService = "PhysicsService", ProximityPromptService = "ProximityPromptService", ContextActionService = "ContextActionService", GuiService = "GuiService", HapticService = "HapticService", VRService = "VRService", CoreGui = "CoreGui", Teams = "Teams", InsertService = "InsertService", DataStoreService = "DataStoreService", MessagingService = "MessagingService", TextService = "TextService", TextChatService = "TextChatService", ContentProvider = "ContentProvider", BadgeService = "BadgeService", KeyframeSequenceProvider = "KeyframeSequenceProvider", AssetService = "AssetService", HttpRbxApiService = "HttpRbxApiService", RobloxReplicatedStorage = "RobloxReplicatedStorage", CorePackages = "CorePackages", Debris = "Debris", ScriptContext = "ScriptContext", VirtualInputManager = "VirtualInputManager", VirtualUser = "VirtualUser", LogService = "LogService", Stats = "Stats", UserService = "UserService", LocalizationService = "LocalizationService", CaptureService = "CaptureService", NetworkClient = "NetworkClient", MemStorageService = "MemStorageService", AdService = "AdService", AppUpdateService = "AppUpdateService", TimerService = "TimerService", CookiesService = "CookiesService", AnimationClipProvider = "AnimationClipProvider", MeshContentProvider = "MeshContentProvider", AchievementService = "AchievementService", PlayerViewService = "PlayerViewService", AppLifecycleObserverService = "AppLifecycleObserverService", EncodingService = "EncodingService", GroupService = "GroupService", StylingService = "StylingService", PlayerEmulatorService = "PlayerEmulatorService", RbxAnalyticsService = "RbxAnalyticsService", MLModelDeliveryService = "MLModelDeliveryService", PartyEmulatorService = "PartyEmulatorService", OmniRecommendationsService = "OmniRecommendationsService", PlatformFriendsService = "PlatformFriendsService", FriendService = "FriendService", Selection = "Selection", IXPService = "IXPService", GameControllerService = "GameControllerService" } local b_class_parents = { DataModel = {"Instance"}, Workspace = {"WorldRoot", "Model", "PVInstance", "Instance"}, Model = {"PVInstance", "Instance"}, WorldModel = {"Model", "PVInstance", "Instance"}, WorldRoot = {"Model", "PVInstance", "Instance"}, PVInstance = {"Instance"}, BasePart = {"PVInstance", "Instance"}, Part = {"BasePart", "PVInstance", "Instance"}, MeshPart = {"BasePart", "PVInstance", "Instance"}, UnionOperation = {"BasePart", "PVInstance", "Instance"}, Terrain = {"BasePart", "PVInstance", "Instance"}, Folder = {"Instance"}, ValueBase = {"Instance"}, StringValue = {"ValueBase", "Instance"}, IntValue = {"ValueBase", "Instance"}, BoolValue = {"ValueBase", "Instance"}, NumberValue = {"ValueBase", "Instance"}, Camera = {"Instance"}, Player = {"Instance"}, PlayerMouse = {"Instance"}, Backpack = {"Folder", "Instance"}, PlayerGui = {"LayerCollector", "GuiBase2d", "GuiBase", "Instance"}, PlayerScripts = {"Instance"}, LocalScript = {"LuaSourceContainer", "Script", "Instance"}, ModuleScript = {"LuaSourceContainer", "Instance"}, BindableFunction = {"Instance"}, RemoteFunction = {"Instance"}, LocalizationTable = {"Instance"}, GlobalDataStore = {"Instance"}, OrderedDataStore = {"GlobalDataStore", "Instance"}, VirtualUser = {"Instance"}, BindableEvent = {"Instance"}, Humanoid = {"Instance"}, HumanoidDescription = {"Instance"}, Tween = {"Instance"}, RBXScriptSignal = {"Instance"}, RBXScriptConnection = {"Instance"}, RbxAnalyticsService = {"Instance"}, NetworkStats = {"Instance"}, GroupService = {"Instance"}, PolicyService = {"Instance"}, ReplicatedFirst = {"Instance"}, GuiBase = {"Instance"}, GuiBase2d = {"GuiBase", "Instance"}, LayerCollector = {"GuiBase2d", "GuiBase", "Instance"}, ScreenGui = {"LayerCollector", "GuiBase2d", "GuiBase", "Instance"}, SurfaceGui = {"LayerCollector", "GuiBase2d", "GuiBase", "Instance"}, BillboardGui = {"GuiBase2d", "GuiBase", "Instance"}, Frame = {"GuiObject", "GuiBase2d", "GuiBase", "Instance"}, TextLabel = {"GuiObject", "GuiBase2d", "GuiBase", "Instance"}, TextButton = {"GuiObject", "GuiBase2d", "GuiBase", "Instance"}, TextBox = {"GuiObject", "GuiBase2d", "GuiBase", "Instance"}, ImageLabel = {"GuiObject", "GuiBase2d", "GuiBase", "Instance"}, ImageButton = {"GuiObject", "GuiBase2d", "GuiBase", "Instance"}, ScrollingFrame = {"GuiObject", "GuiBase2d", "GuiBase", "Instance"}, ViewportFrame = {"GuiObject", "GuiBase2d", "GuiBase", "Instance"}, VideoFrame = {"GuiObject", "GuiBase2d", "GuiBase", "Instance"}, CanvasGroup = {"GuiObject", "GuiBase2d", "GuiBase", "Instance"}, GuiObject = {"GuiBase2d", "GuiBase", "Instance"}, UIListLayout = {"UIGridStyleLayout", "UILayout", "GuiBase2d", "GuiBase", "Instance"}, UIGridLayout = {"UIGridStyleLayout", "UILayout", "GuiBase2d", "GuiBase", "Instance"}, UIGridStyleLayout = {"UILayout", "GuiBase2d", "GuiBase", "Instance"}, UIAspectRatioConstraint = {"UIConstraint", "UILayout", "GuiBase2d", "GuiBase", "Instance"}, UISizeConstraint = {"UIConstraint", "UILayout", "GuiBase2d", "GuiBase", "Instance"}, UITextSizeConstraint = {"UIConstraint", "UILayout", "GuiBase2d", "GuiBase", "Instance"}, UIConstraint = {"UILayout", "GuiBase2d", "GuiBase", "Instance"}, UILayout = {"GuiBase2d", "GuiBase", "Instance"}, UICorner = {"UIComponent", "GuiBase2d", "GuiBase", "Instance"}, UIStroke = {"UIComponent", "GuiBase2d", "GuiBase", "Instance"}, UIGradient = {"UIComponent", "GuiBase2d", "GuiBase", "Instance"}, UIPadding = {"UIComponent", "GuiBase2d", "GuiBase", "Instance"}, UIScale = {"UIComponent", "GuiBase2d", "GuiBase", "Instance"}, UIComponent = {"GuiBase2d", "GuiBase", "Instance"}, PostEffect = {"Instance"}, BlurEffect = {"PostEffect", "Instance"}, BloomEffect = {"PostEffect", "Instance"}, ColorCorrectionEffect = {"PostEffect", "Instance"}, SunRaysEffect = {"PostEffect", "Instance"}, ClickDetector = {"Instance"}, ProximityPrompt = {"Instance"}, WeldConstraint = {"Instance"}, Highlight = {"Instance"}, Attachment = {"Instance"}, Constraint = {"Instance"}, LinearVelocity = {"Constraint", "Instance"}, Sound = {"Instance"}, SurfaceAppearance = {"Instance"}, BodyMover = {"Instance"}, BodyVelocity = {"BodyMover", "Instance"}, BodyGyro = {"BodyMover", "Instance"}, ForceField = {"Instance"}, Controller = {"Instance"}, SkateboardController = {"Controller", "Instance"} , Message = {"Instance"}, Animator = {"Instance"}, SoundGroup = {"Instance"}, VectorForce = {"Constraint", "Instance"}, Weld = {"JointInstance", "Instance"}, Decal = {"FaceInstance", "Instance"}, Texture = {"Decal", "FaceInstance", "Instance"}, Motor6D = {"Motor", "JointInstance", "Instance"}, Accessory = {"Accoutrement", "Instance"}, Tool = {"BackpackItem", "Instance"}, Configuration = {"Instance"}, -- Added for env-check parity: classes commonly probed by eUNC / sUNC / 1000-check harness TrussPart = {"BasePart", "PVInstance", "Instance"}, WedgePart = {"BasePart", "PVInstance", "Instance"}, CornerWedgePart = {"BasePart", "PVInstance", "Instance"}, Seat = {"Part", "BasePart", "PVInstance", "Instance"}, VehicleSeat = {"BasePart", "PVInstance", "Instance"}, SkateboardPlatform = {"Part", "BasePart", "PVInstance", "Instance"}, Actor = {"Model", "PVInstance", "Instance"}, ObjectValue = {"ValueBase", "Instance"}, CFrameValue = {"ValueBase", "Instance"}, Vector3Value = {"ValueBase", "Instance"}, Color3Value = {"ValueBase", "Instance"}, BrickColorValue = {"ValueBase", "Instance"}, RayValue = {"ValueBase", "Instance"}, Script = {"LuaSourceContainer", "Script", "Instance"}, LuaSourceContainer = {"Instance"}, RemoteEvent = {"Instance"}, UnreliableRemoteEvent = {"Instance"}, Animation = {"Instance"}, AnimationController = {"Instance"}, Hat = {"Accoutrement", "Instance"}, Accoutrement = {"Instance"}, Shirt = {"Clothing", "Instance"}, Pants = {"Clothing", "Instance"}, Clothing = {"Instance"}, ShirtGraphic = {"Instance"}, CharacterMesh = {"CharacterAppearance", "Instance"}, CharacterAppearance = {"Instance"}, BodyColors = {"CharacterAppearance", "Instance"}, EqualizerSoundEffect = {"SoundEffect", "Instance"}, ReverbSoundEffect = {"SoundEffect", "Instance"}, CompressorSoundEffect = {"SoundEffect", "Instance"}, SoundEffect = {"Instance"}, SpecialMesh = {"FileMesh", "DataModelMesh", "Instance"}, BlockMesh = {"DataModelMesh", "Instance"}, CylinderMesh = {"DataModelMesh", "Instance"}, FileMesh = {"DataModelMesh", "Instance"}, DataModelMesh = {"Instance"}, UITableLayout = {"UIGridStyleLayout", "UILayout", "GuiBase2d", "GuiBase", "Instance"}, UIPageLayout = {"UIGridStyleLayout", "UILayout", "GuiBase2d", "GuiBase", "Instance"}, DepthOfFieldEffect = {"PostEffect", "Instance"}, Atmosphere = {"Instance"}, Sky = {"Instance"}, Beam = {"Instance"}, Trail = {"Instance"}, ParticleEmitter = {"Instance"}, Smoke = {"Instance"}, Fire = {"Instance"}, Sparkles = {"Instance"}, Explosion = {"Instance"}, Snap = {"JointInstance", "Instance"}, Glue = {"JointInstance", "Instance"}, ManualWeld = {"JointInstance", "Instance"}, ManualGlue = {"JointInstance", "Instance"}, Rotate = {"JointInstance", "Instance"}, RotateP = {"DynamicRotate", "JointInstance", "Instance"}, RotateV = {"DynamicRotate", "JointInstance", "Instance"}, DynamicRotate = {"JointInstance", "Instance"}, JointInstance = {"Instance"}, Motor = {"JointInstance", "Instance"}, HingeConstraint = {"Constraint", "Instance"}, SpringConstraint = {"Constraint", "Instance"}, RodConstraint = {"Constraint", "Instance"}, RopeConstraint = {"Constraint", "Instance"}, BallSocketConstraint = {"Constraint", "Instance"}, CylindricalConstraint = {"SlidingBallConstraint", "Constraint", "Instance"}, PrismaticConstraint = {"SlidingBallConstraint", "Constraint", "Instance"}, SlidingBallConstraint = {"Constraint", "Instance"}, PlaneConstraint = {"Constraint", "Instance"}, UniversalConstraint = {"Constraint", "Instance"}, Torque = {"Constraint", "Instance"}, AngularVelocity = {"Constraint", "Instance"}, AlignPosition = {"Constraint", "Instance"}, AlignOrientation = {"Constraint", "Instance"}, NoCollisionConstraint = {"Constraint", "Instance"}, BodyAngularVelocity = {"BodyMover", "Instance"}, BodyForce = {"BodyMover", "Instance"}, BodyPosition = {"BodyMover", "Instance"}, BodyThrust = {"BodyMover", "Instance"}, Dialog = {"Instance"}, DialogChoice = {"Instance"}, PointLight = {"Light", "Instance"}, SurfaceLight = {"Light", "Instance"}, SpotLight = {"Light", "Instance"}, Light = {"Instance"}, TouchTransmitter = {"Instance"}, Pose = {"Instance"}, Keyframe = {"Instance"}, KeyframeMarker = {"Instance"}, KeyframeSequence = {"Instance"}, Hole = {"FaceInstance", "Instance"}, FaceInstance = {"Instance"}, MotorFeature = {"Feature", "Instance"}, Feature = {"Instance"}, Path2D = {"GuiBase2d", "GuiBase", "Instance"}, Path2DControlPoint = {"Instance"}, TextChannel = {"Instance"}, TextSource = {"Instance"}, TextChatCommand = {"Instance"}, TextChatMessageProperties = {"Instance"}, ChatWindowConfiguration = {"Instance"}, ChannelTabsConfiguration = {"Instance"}, BubbleChatConfiguration = {"Instance"}, ChatInputBarConfiguration = {"Instance"}, FaceControls = {"Instance"}, NumberPose = {"Pose", "Instance"}, AnimationConstraint = {"Constraint", "Instance"}, EditableImage = {"Instance"}, EditableMesh = {"Instance"}, BuoyancySensor = {"Sensor", "Instance"}, ControllerPartSensor = {"Sensor", "Instance"}, AtmosphereSensor = {"Sensor", "Instance"}, Sensor = {"Instance"}, RotateClickDetector = {"Instance"}, WrapTarget = {"Instance"}, WrapLayer = {"Instance"}, Cloud = {"Instance"}, Clouds = {"Instance"}, BackpackItem = {"Instance"}, BackPack = {"Folder", "Instance"}, AccessoryDescription = {"Instance"}, StatsItem = {"Instance"}, Folder3D = {"Folder", "Instance"}, SoundEffect2D = {"Instance"}, StarterPlayer = {"Instance"}, StarterPlayerScripts = {"StarterPlayerScripts", "Instance"}, StarterCharacterScripts = {"Instance"}, InsertService = {"Instance"}, BadgeService = {"Instance"}, FriendService = {"Instance"}, HapticService = {"Instance"}, PolicyService = {"Instance"}, AssetService = {"Instance"}, Selection = {"Instance"}, NetworkClient = {"NetworkPeer", "Instance"}, NetworkPeer = {"Instance"}, ScriptContext = {"Instance"}, CaptureService = {"Instance"}, AdService = {"Instance"}, AchievementService = {"Instance"}, TextService = {"Instance"}, PathfindingService = {"Instance"}, Path = {"Instance"}, PathfindingLink = {"Instance"}, PathfindingModifier = {"Instance"} } local function b_class_is_a(b_class_name, b_target_name) b_class_name = aE(b_class_name) b_target_name = aE(b_target_name) if b_class_name == b_target_name then return true end local b_queue = {b_class_name} local b_seen = {} while #b_queue > 0 do local b_current = table.remove(b_queue) if not b_seen[b_current] then b_seen[b_current] = true local b_parents = b_class_parents[b_current] if b_parents then for _, b_parent in ipairs(b_parents) do if aE(b_parent) == b_target_name then return true end table.insert(b_queue, b_parent) end end end end return false end local aK = { Players = "Players", UserInputService = "UIS", RunService = "RunService", ReplicatedStorage = "ReplicatedStorage", ReplicatedFirst = "ReplicatedFirst", TweenService = "TweenService", Workspace = "Workspace", Lighting = "Lighting", StarterGui = "StarterGui", CoreGui = "CoreGui", HttpService = "HttpService", HttpRbxApiService = "HttpRbxApiService", RobloxReplicatedStorage = "RobloxReplicatedStorage", CorePackages = "CorePackages", PolicyService = "PolicyService", MarketplaceService = "MarketplaceService", DataStoreService = "DataStoreService", TeleportService = "TeleportService", SoundService = "SoundService", Chat = "Chat", Teams = "Teams", ProximityPromptService = "ProximityPromptService", ContextActionService = "ContextActionService", CollectionService = "CollectionService", PathfindingService = "PathfindingService", Debris = "Debris", VirtualUser = "VirtualUser", UserService = "UserService" } local aL = { {pattern = "window", prefix = "Window", counter = "window"}, {pattern = "tab", prefix = "Tab", counter = "tab"}, {pattern = "section", prefix = "Section", counter = "section"}, {pattern = "button", prefix = "Button", counter = "button"}, {pattern = "toggle", prefix = "Toggle", counter = "toggle"}, {pattern = "slider", prefix = "Slider", counter = "slider"}, {pattern = "dropdown", prefix = "Dropdown", counter = "dropdown"}, {pattern = "textbox", prefix = "Textbox", counter = "textbox"}, {pattern = "input", prefix = "Input", counter = "input"}, {pattern = "label", prefix = "Label", counter = "label"}, {pattern = "keybind", prefix = "Keybind", counter = "keybind"}, {pattern = "colorpicker", prefix = "ColorPicker", counter = "colorpicker"}, {pattern = "paragraph", prefix = "Paragraph", counter = "paragraph"}, {pattern = "notification", prefix = "Notification", counter = "notification"}, {pattern = "divider", prefix = "Divider", counter = "divider"}, {pattern = "bind", prefix = "Bind", counter = "bind"}, {pattern = "picker", prefix = "Picker", counter = "picker"} } local aM = {} local function aN(aO) aM[aO] = (aM[aO] or 0) + 1 return aM[aO] end local function aP(aQ, aR, aS) if not aQ then aQ = "var" end local aT = aE(aQ) if aK[aT] then return aK[aT] end if aS then local aU = aS:lower() for W, aV in ipairs(aL) do if aU:find(aV.pattern) then local a2 = aN(aV.counter) return a2 == 1 and aV.prefix or aV.prefix .. a2 end end end if aT == "LocalPlayer" then return "LocalPlayer" end if aT == "Character" then return "Character" end if aT == "Humanoid" then return "Humanoid" end if aT == "HumanoidRootPart" then return "HumanoidRootPart" end if aT == "Camera" then return "Camera" end if aT:match("^Enum%.") then return aT end local T = aT:gsub("[^%w_]", '"'):gsub("^%d+", '"') if T == '"' or T == "Object" or T == "Value" or T == "result" then T = "var" end return T end local function aW(x, aQ, aX, aS, b_no_register) local aY = t.registry[x] if aY and aY:match("^lol%d+$") then return aY end if b_no_register then return "_" end t.lar_counter = (t.lar_counter or 0) + 1 local am = "lol" .. t.lar_counter t.names_used[am] = true t.registry[x] = am t.reverse_registry[am] = x t.variable_types[am] = aX or j(x) return am end function aZ(aF, a_, b0, b1) a_ = a_ or 0 b0 = b0 or {} if a_ > r.MAX_DEPTH then return "{ --[[max depth]] }" end local b2 = j(aF) if w(aF) then local b3 = rawget(aF, "__value") return m(b3 or 0) end if b2 == "table" and t.registry[aF] then return t.registry[aF] end if b2 == "nil" then return "nil" elseif b2 == "string" then local b_truncated = false local b_string_value = aF if #aF > 100 and aF:match("^[A-Za-z0-9+/=]+$") then table.insert(t.string_refs, {value = aF:sub(1, 50) .. "...", hint = "base64", full_length = #aF}) elseif aF:match("https?://") then table.insert(t.string_refs, {value = aF, hint = "URL"}) elseif aF:match("rbxasset://") or aF:match("rbxassetid://") then table.insert(t.string_refs, {value = aF, hint = "Asset"}) end if #b_string_value > r.MAX_STRING_PREVIEW then b_string_value = b_string_value:sub(1, r.MAX_STRING_PREVIEW) b_truncated = true end local b_rendered = aH(b_string_value) if b_truncated then return b_rendered .. string.format(" --[[truncated, original length %d]]", #aF) end return b_rendered elseif b2 == "number" then if aF ~= aF then return "0/0" end if aF == math.huge then return "math.huge" end if aF == -math.huge then return "-math.huge" end if aF == math.floor(aF) then return m(math.floor(aF)) end return string.format("%.6g", aF) elseif b2 == "boolean" then return m(aF) elseif b2 == "function" then if t.registry[aF] then return t.registry[aF] end return b_function_source_literal(aF) or "function()\nend" elseif b2 == "table" then if G(aF) then return t.registry[aF] or "proxy" end if b0[aF] then return "{ --[[circular]] }" end b0[aF] = true local a2 = 0 for b4, b5 in D(aF) do if b4 ~= F and b4 ~= "__proxy_id" then a2 = a2 + 1 end end if a2 == 0 then return "{}" end local b6 = true local b7 = 0 for b4, b5 in D(aF) do if b4 ~= F and b4 ~= "__proxy_id" then if j(b4) ~= "number" or b4 < 1 or b4 ~= math.floor(b4) then b6 = false break else b7 = math.max(b7, b4) end end end b6 = b6 and b7 == a2 if b6 and a2 <= 5 and b1 ~= false then local b8 = {} for L = 1, a2 do local b5 = aF[L] if j(b5) ~= "table" or G(b5) then table.insert(b8, aZ(b5, a_ + 1, b0, true)) else b6 = false break end end if b6 and #b8 == a2 then return "{" .. table.concat(b8, ", ") .. "}" end end local b9 = {} local b_entries = {} local ba = 0 local bb = string.rep(" ", t.indent + a_ + 1) local bc = string.rep(" ", t.indent + a_) for b4, b5 in D(aF) do if b4 ~= F and b4 ~= "__proxy_id" then table.insert(b_entries, {key = b4, value = b5}) end end table.sort( b_entries, function(b_left, b_right) local b_lk, b_rk = b_left.key, b_right.key local b_lt, b_rt = j(b_lk), j(b_rk) if b_lt ~= b_rt then if b_lt == "number" then return true end if b_rt == "number" then return false end if b_lt == "string" then return true end if b_rt == "string" then return false end return b_lt < b_rt end if b_lt == "number" then return (tonumber(b_lk) or 0) < (tonumber(b_rk) or 0) end return aE(b_lk) < aE(b_rk) end ) for _, b_entry in ipairs(b_entries) do ba = ba + 1 if ba > r.MAX_TABLE_ITEMS then table.insert(b9, bb .. "-- ..." .. a2 - ba + 1 .. " more") break end local b4, b5 = b_entry.key, b_entry.value local bd if b6 then bd = nil elseif j(b4) == "string" and b4:match("^[%a_][%w_]*$") then bd = b4 else bd = "[" .. aZ(b4, a_ + 1, b0) .. "]" end local be = aZ(b5, a_ + 1, b0) if bd then table.insert(b9, bb .. bd .. " = " .. be) else table.insert(b9, bb .. be) end end if #b9 == 0 then return "{}" end return "{\n" .. table.concat(b9, ",\n") .. "\n" .. bc .. "}" elseif b2 == "userdata" then if t.registry[aF] then return t.registry[aF] end local y, O = pcall(m, aF) return y and O or "userdata" elseif b2 == "thread" then return "coroutine.create(function() end)" else local y, O = pcall(m, aF) return y and O or "nil" end end local function b_format_lvalue(b_base, b_key) local b_key_text = aE(b_key) if b_key_text:match("^[%a_][%w_]*$") then return b_base .. "." .. b_key_text end return b_base .. "[" .. aZ(b_key) .. "]" end local b_emit_assignment_value local function b_emit_env_assignment(b_table, b_key, b_value) if not b_env_state.track_mutations or j(b_key) ~= "string" then return end if b_env_state.hidden_keys[b_key] then return end local b_base = (b_table and t.registry and t.registry[b_table]) or "_G" b_emit_assignment_value(b_format_lvalue(b_base, b_key), b_value) end local function b_emit_source_lines_to_output(b_source) if j(b_source) ~= "string" or b_source == "" then return false end local b_any = false for b_line in (b_source .. "\n"):gmatch("(.-)\n") do at(b_line) b_any = true end return b_any end local function b_emit_source_block(b_source) -- Default avoids flooding output with reconstructed sources; callers must opt in for full dumps. if rawget(_G, "__LARRY_RUNTIME_ONLY") ~= false then return false end return b_emit_source_lines_to_output(b_source) end -- Signal/connect callbacks are the main desired log for env replay; emit unless explicitly suppressed. local function b_emit_signal_callback_source_lines(b_source) if rawget(_G, "__LARRY_SUPPRESS_SIGNAL_CALLBACK_BODY") == true then return false end return b_emit_source_lines_to_output(b_source) end local function b_larry_monolithic_helper_function(b_meta) if not (t and t.monolithic_runtime_mode) or (q and q.cfg and q.cfg.debug_mode == true) then return false end if j(b_meta) ~= "table" then return false end local b_name = aE(b_meta.name or "") if b_name == "j" or b_name == "H" then return true end local b_src = b_meta.base_source or b_meta.source if j(b_src) ~= "string" or b_src == "" then return false end local b_flat = b_src:gsub("%s+", " ") if b_flat:find("return A(d,", 1, true) or b_flat:find("return A(d,{", 1, true) then return true end if #b_name <= 2 and #b_flat < 1600 and not b_flat:find("game", 1, true) and not b_flat:find("Instance", 1, true) and not b_flat:find("Http", 1, true) and not b_flat:find("loadstring", 1, true) and not b_flat:find("print", 1, true) and not b_flat:find("warn", 1, true) then return true end if b_flat:match("return%s+[%a_][%w_]*%s*%([^%)]*%b{}[^%)]*%)") then return true end if b_flat:match("return%s+[%a_][%w_]*%s*%([^%)]*{%s*%.%.%.") then return true end if b_flat:match("return%s+[%a_][%w_]*%s*%[[^%]]+%]") and #b_flat < 220 then return true end if b_flat:match("^%s*local%s+function%s+[%a_][%w_]*%s*%b()%s*return%s+[%a_][%w_]*%s*%(") and b_flat:find("{", 1, true) then return true end return false end local function b_emit_defined_function_source(b_meta) if q and q.cfg and q.cfg.function_log_enabled == false then return end if b_larry_monolithic_helper_function(b_meta) then return end if not b_meta or b_meta.cclosure or b_meta.vm_dispatch then return end local b_src = b_meta.base_source or b_meta.source if j(b_src) ~= "string" or b_src == "" or #b_src > 65536 then return end if b_src:find("__LARRY_WRAP_DEFINED_FUNCTION", 1, true) then return end local b_name = aE(b_meta.name or "") if b_name == "" or b_name == "anonymous" then return end repeat local b_next, b_removed = b_src:gsub("^%s*local%s+[%a_][%w_]*%s*=%s*__LARRY_UPVALUES%[[^\n]+%]%s*\n", "", 1) b_src = b_next if b_removed == 0 then break end until false b_src = b_unwrap_larry_defined_wrappers(b_src) b_src = b_restore_luau_output_source(b_src) b_src = b_restore_hookop_output_source(b_src) b_src = b_src:gsub("%s*return%s+[%a_][%w_%.:]*%s*$", "") b_src = b_src:gsub("^%s+", ""):gsub("%s+$", "") if b_src == "" or (not b_src:find("^local%s+function") and not b_src:find("^function")) then return end if b_name:match("^[%a_][%w_]*$") then b_src = b_src:gsub("^function%s+" .. b_name .. "(%s*%()", "local function " .. b_name .. "%1", 1) end t.emitted_function_sources = t.emitted_function_sources or {} if t.emitted_function_sources[b_src] then return end t.emitted_function_sources[b_src] = true nt_value = function(b_lhs, b_value) if j(b_value) == "function" then if rawget(_G, "__LARRY_RUNTIME_ONLY") ~= false then -- HookOP: try to emit the actual function body instead of a placeholder if q.cfg and q.cfg.hookop_enabled and j(b_function_body_literal) == "function" then local b_raw_params = "" if j(b_function_params_literal) == "function" then b_raw_params = b_function_params_literal(b_value, 8192) or "" end local b_body = b_function_body_literal(b_value, 65536) if j(b_body) == "string" and b_body ~= "" then -- Check if this is a VM dispatch (return Z(V,...)) local b_trimmed_body = b_body:gsub("^%s+", ""):gsub("%s+$", "") local b_is_vm_dispatch = b_trimmed_body:match("^return%s+[%a_][%w_]*%s*%(") ~= nil and b_trimmed_body:find("{", 1, true) ~= nil if not b_is_vm_dispatch then -- Non-dispatch function: emit the actual body -- Filter params to only those referenced in the body local b_param_list = {} for b_p in b_raw_params:gmatch("[^,%s]+") do b_param_list[#b_param_list + 1] = b_p end local b_used_params = {} local b_param_remap = {} local b_runtime_idx = 0 for _, b_p in ipairs(b_param_list) do -- Check if this param name appears as a word boundary in the body if b_body:match("[^%w_]" .. b_p .. "[^%w_]") or b_body:match("^" .. b_p .. "[^%w_]") or b_body:match("[^%w_]" .. b_p .. "$") or b_body == b_p then b_runtime_idx = b_runtime_idx + 1 local b_runtime_name = "p" .. b_runtime_idx b_used_params[#b_used_params + 1] = b_runtime_name b_param_remap[b_p] = b_runtime_name end end local b_clean_params = table.concat(b_used_params, ", ") at(b_lhs .. " = function(" .. b_clean_params .. ")") t.indent = t.indent + 1 -- Emit body with param names replaced for b_line in (b_body .. "\n"):gmatch("(.-)[\n]") do local b_out_line = b_line for b_old, b_new in pairs(b_param_remap) do b_out_line = b_out_line:gsub("([^%w_])" .. b_old .. "([^%w_])", "%1" .. b_new .. "%2") b_out_line = b_out_line:gsub("^" .. b_old .. "([^%w_])", b_new .. "%1") b_out_line = b_out_line:gsub("([^%w_])" .. b_old .. "$", "%1" .. b_new) end at(b_out_line) end t.indent = t.indent - 1 at("end") return true else -- VM dispatch: probe the function to capture its operations local b_output_before = #t.output local b_saved_indent = t.indent t.indent = 0 -- Build dummy args matching param count local b_arg_count = 0 for _ in b_raw_params:gmatch("[^,]+") do b_arg_count = b_arg_count + 1 end if b_raw_params == "" then b_arg_count = 0 end local b_dummy_args = {} for b_i = 1, b_arg_count do b_dummy_args[b_i] = nil end -- Call the function in pcall to capture operations local b_probe_ok = g(b_value, native_unpack(b_dummy_args, 1, b_arg_count)) -- Collect any new output lines that were emitted local b_captured = {} if #t.output > b_output_before then for b_i = b_output_before + 1, #t.output do b_captured[#b_captured + 1] = t.output[b_i] end -- Remove the captured lines from output for b_i = #t.output, b_output_before + 1, -1 do table.remove(t.output, b_i) end q._recalculate_output_size() end t.indent = b_saved_indent -- Emit the function with captured body if #b_captured > 0 then -- Filter params: only show params that appear in captured body text local b_param_list = {} for b_p in b_raw_params:gmatch("[^,%s]+") do b_param_list[#b_param_list + 1] = b_p end local b_body_text = table.concat(b_captured, "\n") local b_used_params = {} local b_param_remap = {} local b_runtime_idx = 0 for _, b_p in ipairs(b_param_list) do if b_body_text:match("[^%w_]" .. b_p .. "[^%w_]") or b_body_text:match("^" .. b_p .. "[^%w_]") or b_body_text:match("[^%w_]" .. b_p .. "$") or b_body_text == b_p then b_runtime_idx = b_runtime_idx + 1 local b_runtime_name = "p" .. b_runtime_idx b_used_params[#b_used_params + 1] = b_runtime_name b_param_remap[b_p] = b_runtime_name end end local b_clean_params = table.concat(b_used_params, ", ") at(b_lhs .. " = function(" .. b_clean_params .. ")") local b_body_indent = string.rep(" ", (t.indent or 0) + 1) for _, b_cap_line in ipairs(b_captured) do local b_clean = "" if j(b_cap_line) == "string" then b_clean = b_cap_line:gsub("^%s+", "") else b_clean = m(b_cap_line) end -- Replace obfuscator param names with runtime names in body for b_old, b_new in pairs(b_param_remap) do b_clean = b_clean:gsub("([^%w_])" .. b_old .. "([^%w_])", "%1" .. b_new .. "%2") b_clean = b_clean:gsub("^" .. b_old .. "([^%w_])", b_new .. "%1") b_clean = b_clean:gsub("([^%w_])" .. b_old .. "$", "%1" .. b_new) end local b_indented = b_body_indent .. b_clean table.insert(t.output, b_indented) t.current_size = (t.current_size or 0) + #b_indented + 1 end at("end") return true end end end -- VM dispatch with no captured ops or no body: emit with no fake params at(b_lhs .. " = function() end") return true end at(string.format("%s = function(...) end --[[runtime-only placeholder]]", b_lhs)) return true end local b_src = b_function_source_literal(b_value, 65536) if b_src then local b_params = b_src:match("^%s*function%s*(%b())") or "()" at(b_lhs .. " = function" .. b_params) local b_body = b_function_body_literal(b_value, 65536) if b_body then t.indent = t.indent + 1 b_emit_source_block(b_body) t.indent = t.indent - 1 end at("end") return true end at(b_lhs .. " = function()") at("end") return true end at(string.format("%s = %s", b_lhs, aZ(b_value))) return true end b_larry_function_body_literal = b_function_body_literal b_larry_function_params_literal = b_function_params_literal b_larry_emit_source_block = b_emit_source_block b_larry_emit_signal_callback_source_lines = b_emit_signal_callback_source_lines b_larry_emit_assignment_value = b_emit_assignment_value b_env_state.write_global = function(b_table, b_key, b_value) if b_key == nil then return end if b_env_state.track_mutations and j(b_key) == "string" then b_env_state.mutated_keys[b_key] = true end if b_env_state.hidden_keys[b_key] then rawset(b_env_state.hidden_values, b_key, b_value) return end if j(b_env_state.public_values) == "table" then if b_value == nil and b_env_state.core_libs and b_env_state.core_libs[b_key] ~= nil then return end rawset(b_env_state.public_values, b_key, b_value) end rawset(_G, b_key, b_value) if b_env_state.genv_proxy ~= nil and j(b_key) == "string" then rawset(b_env_state.genv_proxy, b_key, b_value) end b_emit_env_assignment(b_table, b_key, b_value) end local function b_safe_repr(aF) if aF == nil then return "nil" end local b_kind = j(aF) if b_kind == "boolean" then return aF and "true" or "false" elseif b_kind == "number" then return m(aF) elseif b_kind == "string" then return string.format("%q", aF) elseif b_kind == "table" then if G(aF) then return t.registry[aF] or aZ(aF) end local b_val = rawget(aF, "__value") if b_val ~= nil then return b_safe_repr(b_val) end return "{}" end return tostring(aF) end local function b_emit_function_call_log(b_meta, b_args) if not (q and q.cfg and q.cfg.call_log_enabled == true) then return end if b_larry_monolithic_helper_function(b_meta) then return end if not t or t.suppress_call_logs then return end if j(b_meta) ~= "table" or b_meta.cclosure == true or b_meta.what == "C" then return end t.call_log_count = (t.call_log_count or 0) + 1 local b_limit = tonumber(q.cfg.max_call_log_lines) or 20000 if t.call_log_count > b_limit then if not t.call_log_limit_warned end return end local b_name = aE(b_meta.name or "anonymous") if b_name == "" then b_name = "anonymous" end local b_parts = {} local b_n = (j(b_args) == "table" and tonumber(b_args.n)) or 0 local b_max = math.min(b_n, 10) for b_i = 1, b_max do b_parts[#b_parts + 1] = b_safe_repr(b_args[b_i]) end if b_n > b_max then b_pa) .. ")") end b_hookop_can_emit = function(b_lines_needed) if not t then return false end local b_budget = tonumber(rawget(_G, "__LARRY_HOOKOP_MAX_EMIT_LINES")) or 300000 t.hookop_emitted_lines = tonumber(t.hookop_emitted_lines) or 0 local b_need = tonumber(b_lines_needed) or 1 if (t.hookop_emitted_lines + b_need) > b_budget then if not t.hookop_budget_warnereached (%d lines), truncating additional hookop output", b_budget)) end return false end t.hookop_emitted_lines = t.hookop_emitted_lines + b_need return true end b_hookop_emit_line = function(b_line) if not t then return false end local b_text = tostring(b_line or "") local b_next_size = (tonumber(t.current_size) or 0) + #b_text + 1 if r and tonumber(r.MAX_OUTPUT_SIZE) and b_next_size > tonumber(r.MAX_OUTPUT_SIZE) then if not t.limd while emitting reconstruction") end return false end t.output = t.output or {} table.insert(t.output, b_text) t.last_emitted_line = b_text t.current_size = b_next_size return true end local function b_log_op(op, a, b, b_result) if not t or (t.callback_depth or 0) <= 0 then return end if not (q and q.cfg and q.cfg.hookop_enabled == true) then return end if not b_hookop_can_emit(3) then return end if not t.hookop_runtime_header_emitted then t.hookop_runtime_header_emitted = true az("[HookOP] operations_hooked=runtime_condition") end t.hookop_if_counter = (t.hookop_if_counter or 0) + 1 local b_id = t.hookop_if_counter local as = b_safe_repr(a) local bs = b_safe_repr(b) local b_expr = string.format("%s %s %s", as, op, bs) if b_result then at(string.format("if %s then -- ran, if id: %d", b_expr, b_id)) at("end") else at(string.format("if %s then", b_expr)) at(string.format("else -- didnt run (else), if id: %d", b_id)) at("end") end end q._safe_compare = function(b_op, b_left, b_right) local b_ok, b_result = g( function() if b_op == "<=" then return b_left <= b_right elseif b_op == ">=" then return b_left >= b_right elseif b_op == "<" then return b_left < b_right elseif b_op == ">" then return b_left > b_right end return false end ) if not b_ok then local b_left_store = (j(b_left) == "table" or G(b_left)) and t.property_store[b_left] or nil local b_right_store = (j(b_right) == "table" or G(b_right)) and t.property_store[b_right] or nil if (b_left_store and b_left_store.__function_proxy) or (b_right_store and b_right_store.__function_proxy) then b_result = false else b_result = b_op == "<=" or b_op == ">=" end end b_result = b_result == true b_log_op(b_op, b_left, b_right, b_result) return b_result end b_env_state.hidden_values.__LARRY_CMP = q._safe_compare q._recalculate_output_size = function() local b_total = 0 if j(t.output) == "table" then for _, b_line in ipairs(t.output) do b_total = b_total + #tostring(b_line) + 1 end t.last_emitted_line = t.output[#t.output] end t.current_size = b_total t.repetition_count = 0 end q._hookop_begin_pcall = function(b_fn) if not (q and q.cfg and q.cfg.hookop_enabled == true) then return nil end if not (t and t.runtime_hookop_active == true) then return nil end if j(b_fn) ~= "function" then return nil end local b_meta = t.function_meta and t.function_meta[b_fn] if not b_meta or b_meta.cclosure == true or b_meta.what == "C" then return nil end if (t.hookop_pcall_depth or 0) > 0 then return nil end t.hookop_pcall_depth = (t.hookop_pcall_depth or 0) + 1 return { fn = b_fn, start_index = #(t.output or {}), indent = t.indent or 0, if_stack_len = #(t.hookop_if_stack or {}) } end q._hookop_finish_pcall = function(b_ctx, b_success) if not b_ctx then return end t.hookop_pcall_depth = math.max(0, (t.hookop_pcall_depth or 1) - 1) local b_start = b_ctx.start_index or #(t.output or {}) if j(t.output) == "table" and (#t.output - b_start) > 1500 then t.indent = tonumber(b_ctx.indent) or 0 if j(t.hookop_if_stack) == "table" then local b_keep = tonumber(b_ctx.if_stack_len) or 0 while #t.hookop_if_stack > b_keep do table.remove(t.hookop_if_stack) end end if not t.hookop_runtime_header_emitted the return end if not b_hookop_can_emit(6) then t.indent = tonumber(b_ctx.indent) or 0 if j(t.hookop_if_stack) == "table" then local b_keep = tonumber(b_ctx.if_stack_len) or 0 while #t.hookop_if_stack > b_keep do table.remove(t.hookop_if_stack) end end return end local b_captured = {} while j(t.output) == "table" and #t.output > b_start do table.insert(b_captured, 1, table.remove(t.output)) end q._recalculate_output_size() t.indent = tonumber(b_ctx.indent) or 0 if j(t.hookop_if_stack) == "table" then local b_keep = tonumber(b_ctx.if_stack_len) or 0 while #t.hookop_if_stack > b_keep do table.remove(t.hookop_if_stack) end end if not t.hookop_runtime_header_emitted then t.hookop_runtime_header_emitted = true unter or 0) + 1 local b_id = t.hookop_if_counter local b_params = b_function_params_literal(b_ctx.fn, 8192) or "" local b_body_lines = {} local b_min_indent = nil for _, b_line in ipairs(b_captured) do local b_text = tostring(b_line or "") if b_text:match("%S") then local b_leading = #(b_text:match("^(%s*)") or "") if b_min_indent == nil or b_leading < b_min_indent then b_min_indent = b_leading end end end b_min_indent = b_min_indent or 0 for _, b_line in ipairs(b_captured) do local b_text = tostring(b_line or "") if b_min_indent > 0 then b_text = b_text:sub(b_min_indent + 1) end b_text = b_text:gsub("%s+$", "") if b_text:match("%S") then table.insert(b_body_lines, b_text) end end if #b_body_lines == 0 then local b_body = b_function_body_literal(b_ctx.fn, 8192) if j(b_body) == "string" then -- Check if the body is purely a VM dispatch call (e.g. return Z(V,{E;F},M,e)) local b_trimmed_body = b_body:gsub("^%s+", ""):gsub("%s+$", "") local b_is_vm_dispatch = (b_trimmed_body:match("^return%s+[%a_][%w_]*%s*%(") ~= nil and b_trimmed_body:find("{", 1, true) ~= nil) or b_trimmed_body:match("^return%s+Z%s*%(") ~= nil or b_trimmed_body:match("^return%s+[%a_][%w_]*%s*%([%a_][%w_]*%s*,%s*{") ~= nil if b_is_vm_dispatch then -- Skip emitting this pcall block entirely — it's just VM dispatch -- with no meaningful captured output t.hookop_pcall_depth = math.max(0, (t.hookop_pcall_depth or 1) - 0) return end for b_line in (b_body .. "\n"):gmatch("(.-)\n") do b_line = b_line:gsub("^%s+", ""):gsub("%s+$", "") if b_line ~= "" then table.insert(b_body_lines, b_line) end if #b_body_lines >= 80 then ta end end end end -- Skip empty pcall blocks entirely if #b_body_lines == 0 then return end if t.monolithic_runtime_mode and not (q and q.cfg and q.cfg.debug_mode == true) then local b_meaningful = false for _, b_line in ipairs(b_body_lines) do local b_trim = tostring(b_line or ""):gsub("^%s+", ""):gsub("%s+$", "") local b_noise = b_trim == "" or b_trim:match("^%-%- %[Call%]")"^%-%- %[HookOP%]") ~= nil or b_trim:match("^return%s+[%a_][%w_]*%s*%(") ~= nil or b_trim:match("^local%s+function%s+[%a_][%w_]*%s*%([^%)]*%)%s*return%s+[%a_][%w_]*%s*%(") ~= nil if not b_noise then b_meaningful = true break end end if not b_meaningful then return end end at("if pcall(function(" .. b_params .. ")") t.indent = t.indent + 1 for b_index, b_line output truncated") break end at(b_line) end t.indent = t.indent - 1 if b_success then at(string.format("end) then -- ran, if id: %d", b_id)) at("end") else at("end) then") at(string.format("else -- didnt run (else), if id: %d", b_id)) at("end") end end local bf = {} setmetatable(bf, {__mode = "k"}) local function bg() local bh = {} bf[bh] = true t.proxy_id = (t.proxy_id or 0) + 1 rawset(bh, "__proxy_id", t.proxy_id) local bi = {} b_safe_setmetatable(bh, bi) return bh, bi end local function G(x) return bf[x] == true end local bj local bk local b_buffer_assert local b_buffer_from_string_value local b_buffer_to_string_value local b_base64_encode_string local b_base64_decode_string local b_enum_members = { ["Enum.QualityLevel"] = {"Level01", "Level02", "Level03", "Level04", "Level05"}, ["Enum.Material"] = {"Plastic", "Grass", "Water", "Air", "SmoothPlastic", "ForceField", "Glass", "CrackedLava", "Neon", "Wood", "Metal", "Sand", "Snow", "Brick", "Concrete", "Marble", "Granite", "Foil", "Slate", "Pebble", "Ice", "Mud", "Asphalt", "Fabric", "WoodPlanks", "DiamondPlate", "CorrodedMetal", "Cobblestone", "Salt", "Limestone", "Basalt", "Ground", "LeafyGrass", "Rock", "Glacier", "CompoundMaterial", "Sandstone", "Pavement", "Tile", "Bark", "Cardboard", "Carpet", "CeramicTiles", "ClayRoofTiles", "RoofShingles", "Cork", "Fiberglass", "Leather", "Mulch", "PlasticRibbed", "Plaster", "Rubber", "Plate", "Shadow", "Trapped"}, ["Enum.UserInputType"] = {"MouseButton1", "MouseButton2", "MouseMovement", "Keyboard", "Gamepad1", "Touch"}, ["Enum.Platform"] = {"Windows", "OSX", "IOS", "Android", "XBoxOne", "PS4", "PS5", "UWP"}, ["Enum.ConnectionError"] = { "OK", "Unknown", "ConnectErrors", "AlreadyConnected", "NoFreeIncomingConnections", "ConnectionBanned", "InvalidPassword", "IncompatibleProtocolVersion", "IPRecentlyConnected", "OurSystemRequiresSecurity", "SecurityKeyMismatch", "DisconnectErrors", "DisconnectBadhash", "DisconnectSecurityKeyMismatch", "DisconnectProtocolMismatch", "DisconnectReceivePacketError", "DisconnectReceivePacketStreamError", "DisconnectSendPacketError", "DisconnectIllegalTeleport", "DisconnectDuplicatePlayer", "DisconnectDuplicateTicket", "DisconnectTimeout", "DisconnectLuaKick", "DisconnectOnRemoteSysStats", "DisconnectHashTimeout", "DisconnectCloudEditKick", "DisconnectPlayerless", "DisconnectNewSecurityKeyMismatch", "DisconnectEvicted", "DisconnectDevMaintenance", "DisconnectRobloxMaintenance", "DisconnectRejoin", "DisconnectConnectionLost", "DisconnectIdle", "DisconnectRaknetErrors", "DisconnectWrongVersion", "DisconnectBySecurityPolicy", "DisconnectBlockedIP", "DisconnectClientFailure", "DisconnectClientRequest", "DisconnectPrivateServerKickout", "DisconnectModeratedGame", "ServerShutdown", "ReplicatorTimeout", "PlayerRemoved", "DisconnectOutOfMemoryKeepPlayingLeave", "DisconnectRomarkEndOfTest", "DisconnectCollaboratorPermissionRevoked", "DisconnectCollaboratorUnderage", "NetworkInternal", "NetworkSend", "NetworkTimeout", "NetworkMisbehavior", "NetworkSecurity", "ReplacementReady", "ServerEmpty", "PhantomFreeze", "AndroidAnticheatKick", "AndroidEmulatorKick", "AndroidRootedKick", "ScreentimeLockoutKick", "DisconnectionNotification", "DisconnectVerboselyModeratedGame", "DisconnectCollaboratorNotAgeVerified", "DisconnectCollaboratorTrustedConnectionsRequired", "DisconnectCollaboratorOwnerActionRequired", "DisconnectCollaboratorTooManyCollaborators", "DisconnectCollaboratorUnknownError", "PlacelaunchErrors", "PlacelaunchDisabled", "PlacelaunchError", "PlacelaunchGameEnded", "PlacelaunchGameFull", "PlacelaunchUserLeft", "PlacelaunchRestricted", "PlacelaunchUnauthorized", "PlacelaunchFlooded", "PlacelaunchHashExpired", "PlacelaunchHashException", "PlacelaunchPartyCannotFit", "PlacelaunchHttpError", "PlacelaunchUserPrivacyUnauthorized", "PlacelaunchAgeVerificationRequired", "PlacelaunchParentalApprovalRequired", "PlacelaunchCoreGated", "PlacelaunchCreatorBan", "PlacelaunchDeviceBlock", "PlacelaunchCustomMessage", "PlacelaunchOtherError", "TeleportErrors", "TeleportFailure", "TeleportGameNotFound", "TeleportGameEnded", "TeleportGameFull", "TeleportUnauthorized", "TeleportFlooded", "TeleportIsTeleporting" }, ["Enum.ActionType"] = {"Nothing", "Pause", "Lose", "Draw", "Win"}, ["Enum.CompositeValueCurveType"] = {"ColorRGB", "ColorHSV", "NumberRange", "Rect", "UDim", "UDim2", "Vector2", "Vector3"}, ["Enum.UserInputState"] = {"Begin", "Change", "End"}, ["Enum.MessageType"] = {"MessageOutput", "MessageWarning", "MessageError"}, ["Enum.KeyCode"] = { "Unknown", "Backspace", "Tab", "Clear", "Return", "Pause", "Escape", "Space", "QuotedDouble", "Hash", "Dollar", "Percent", "Ampersand", "Quote", "LeftParenthesis", "RightParenthesis", "Asterisk", "Plus", "Comma", "Minus", "Period", "Slash", "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Colon", "Semicolon", "LessThan", "Equals", "GreaterThan", "Question", "At", "LeftBracket", "BackSlash", "RightBracket", "Caret", "Underscore", "Backquote", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "LeftCurly", "Pipe", "RightCurly", "Tilde", "Delete", "KeypadZero", "KeypadOne", "KeypadTwo", "KeypadThree", "KeypadFour", "KeypadFive", "KeypadSix", "KeypadSeven", "KeypadEight", "KeypadNine", "KeypadPeriod", "KeypadDivide", "KeypadMultiply", "KeypadMinus", "KeypadPlus", "KeypadEnter", "KeypadEquals", "Up", "Down", "Right", "Left", "Insert", "Home", "End", "PageUp", "PageDown", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "NumLock", "ScrollLock", "LeftShift", "RightShift", "LeftControl", "RightControl", "LeftAlt", "RightAlt", "LeftMeta", "RightMeta", "LeftSuper", "RightSuper", "Mode", "Compose", "Help", "Print", "SysReq", "Break", "Menu", "Power", "Euro", "Undo", "ButtonA", "ButtonB", "ButtonX", "ButtonY", "ButtonL1", "ButtonR1", "ButtonL2", "ButtonR2", "ButtonL3", "ButtonR3", "ButtonStart", "ButtonSelect", "DPadLeft", "DPadRight", "DPadUp", "DPadDown", "Thumbstick1", "Thumbstick2", "World0", "World1", "World2", "World3", "World4", "World5", "World6", "World7", "World8", "World9", "World10", "World11", "World12", "World13", "World14", "World15", "World16", "World17", "World18", "World19", "World20", "World21", "World22", "World23", "World24", "World25", "World26", "World27", "World28", "World29", "World30", "World31", "World32", "World33", "World34", "World35", "World36", "World37", "World38", "World39", "World40", "World41", "World42", "World43", "World44", "World45", "World46", "World47", "World48", "World49", "World50", "World51", "World52", "World53", "World54", "World55", "World56", "World57", "World58", "World59", "World60", "World61", "World62", "World63", "World64", "World65", "World66", "World67", "World68", "World69", "World70", "World71", "World72", "World73", "World74", "World75", "World76", "World77", "World78", "World79", "World80", "World81", "World82", "World83", "World84", "World85", "World86", "World87", "World88", "World89", "World90", "World91", "World92", "World93", "World94", "World95" }, ["Enum.RaycastFilterType"] = {"Exclude", "Include", "Blacklist", "Whitelist"}, ["Enum.CompressionAlgorithm"] = {"Zstd"}, ["Enum.RunState"] = {"Running"}, ["Enum.CreatorType"] = {"User", "Group"}, ["Enum.CameraType"] = {"Custom", "Fixed", "Attach", "Watch", "Track", "Orbital", "Scriptable"}, ["Enum.MembershipType"] = {"None"}, ["Enum.ReverbType"] = {"NoReverb"}, ["Enum.EasingStyle"] = {"Linear", "Quad", "Cubic", "Quart", "Quint", "Sine", "Back", "Bounce", "Elastic", "Exponential", "Circular"}, ["Enum.EasingDirection"] = {"In", "Out", "InOut"}, ["Enum.PlaybackState"] = {"Begin", "Playing", "Completed"}, ["Enum.PartType"] = {"Block", "Ball", "Cylinder"}, ["Enum.ThumbnailType"] = {"HeadShot", "AvatarBust", "AvatarThumbnail"}, ["Enum.ThumbnailSize"] = {"Size48x48", "Size60x60", "Size100x100", "Size150x150", "Size180x180", "Size352x352", "Size420x420"}, ["Enum.ResamplerMode"] = {"Default", "Pixelated"}, ["Enum.ScrollBarInset"] = {"None", "ScrollBar", "Always"}, ["Enum.SurfaceType"] = {"Smooth", "Glue", "Weld", "Studs", "Inlet", "Universal", "Hinge", "Motor", "SteppingMotor", "SmoothNoOutlines"}, ["Enum.Axis"] = {"X", "Y", "Z"}, ["Enum.NormalId"] = {"Right", "Top", "Back", "Left", "Bottom", "Front"}, ["Enum.MouseBehavior"] = {"Default", "LockCenter", "LockCurrentPosition"}, ["Enum.PreferredInput"] = {"KeyboardAndMouse", "Touch", "Gamepad"}, ["Enum.HumanoidDisplayDistanceType"] = {"Viewer", "Subject", "None"}, ["Enum.TextTruncate"] = {"None", "AtEnd", "SplitWord"}, ["Enum.TextXAlignment"] = {"Left", "Center", "Right"}, ["Enum.TextYAlignment"] = {"Top", "Center", "Bottom"}, ["Enum.VerticalAlignment"] = {"Center", "Top", "Bottom"}, ["Enum.ActuatorType"] = {"None", "Motor", "Servo"}, ["Enum.ActuatorRelativeTo"] = {"World", "Attachment0"}, ["Enum.PathStatus"] = {"Success", "NoPath", "ClosestNoPath"}, ["Enum.PathWaypointAction"] = {"Walk", "Jump"}, ["Enum.KeyInterpolationMode"] = {"Linear", "Constant", "Cubic"}, ["Enum.CatalogSortType"] = {"Relevance", "PriceLowToHigh"}, ["Enum.ApplyStrokeMode"] = {"Contextual", "Border"}, ["Enum.CatalogCategoryFilter"] = {"None", "Featured", "Collectibles"}, ["Enum.CatalogSalesTypeFilter"] = {"All", "Free", "Paid"}, ["Enum.HumanoidStateType"] = {"None", "Running", "Jumping", "Freefall", "Landed", "Climbing", "Seated", "PlatformStanding", "Dead", "Physics", "RunningNoPhysics", "GettingUp", "Ragdoll", "FallingDown", "Swimming", "StrafingNoPhysics", "Flying"}, ["Enum.Technology"] = {"Voxel", "ShadowMap", "Future"}, ["Enum.Font"] = {"SourceSans", "Arial", "Gotham", "GothamBold", "GothamSemibold", "Michroma"}, ["Enum.SortOrder"] = {"Name", "LayoutOrder"}, ["Enum.SortDirection"] = {"Ascending", "Descending"}, ["Enum.FontWeight"] = {"Regular", "Bold", "Light", "Medium", "Heavy", "Thin", "ExtraLight", "SemiBold", "ExtraBold"}, ["Enum.FontStyle"] = {"Normal", "Italic"}, ["Enum.BulkMoveMode"] = {"FireCFrameChanged", "FireAllEvents", "SkipCFrameChanged"}, ["Enum.GroupMembershipStatus"] = {"None", "Pending", "Joined", "Removed"}, ["Enum.AdUIType"] = {"Image", "Video", "Banner"}, ["Enum.AutomaticSize"] = {"None", "X", "Y", "XY"}, ["Enum.ZIndexBehavior"] = {"Global", "Sibling"}, ["Enum.ScaleType"] = {"Stretch", "Tile", "Fit", "Crop", "Slice"}, ["Enum.HorizontalAlignment"] = {"Left", "Center", "Right"}, ["Enum.FillDirection"] = {"Horizontal", "Vertical"}, ["Enum.LineJoinMode"] = {"Round", "Bevel", "Miter"}, ["Enum.ScreenInsets"] = {"None", "DeviceSafeInsets", "CoreUISafeInsets", "TopbarSafeInsets"}, -- Env-check parity additions ["Enum.BundleType"] = {"BodyParts", "AvatarAnimations", "Animations", "Shoes", "DynamicHead", "Outfit", "Bundle"}, ["Enum.SecurityCapability"] = {"None", "Basic", "DataStore", "Network", "Personal", "Assistant", "Advanced", "RemoteEvent", "OpenCloud", "PluginSecurity", "RobloxScriptSecurity", "Internal"}, ["Enum.AccessModifierType"] = {"Allow", "Deny", "Private"}, ["Enum.AvatarAssetType"] = {"Hat", "Shirt", "Pants", "Face", "Head", "Torso", "RightArm", "LeftArm", "RightLeg", "LeftLeg", "TShirt", "Gear", "HairAccessory", "FaceAccessory", "NeckAccessory", "ShoulderAccessory", "FrontAccessory", "BackAccessory", "WaistAccessory", "HeadAccessory"}, ["Enum.AssetType"] = {"Image", "TShirt", "Audio", "Mesh", "Lua", "Hat", "Place", "Model", "Shirt", "Pants", "Decal", "Avatar", "Head", "Face", "Gear", "Badge", "Group", "Animation", "Arms", "Legs", "Torso", "RightArm", "LeftArm", "LeftLeg", "RightLeg", "Package", "YouTubeVideo", "GamePass", "App", "Code", "Plugin", "SolidModel", "MeshPart", "HairAccessory", "FaceAccessory", "NeckAccessory", "ShoulderAccessory", "FrontAccessory", "BackAccessory", "WaistAccessory", "ClimbAnimation", "DeathAnimation", "FallAnimation", "IdleAnimation", "JumpAnimation", "RunAnimation", "SwimAnimation", "WalkAnimation", "PoseAnimation", "EarAccessory", "EyeAccessory", "EmoteAnimation", "Video", "TShirtAccessory", "ShirtAccessory", "PantsAccessory", "JacketAccessory", "SweaterAccessory", "ShortsAccessory", "LeftShoeAccessory", "RightShoeAccessory", "DressSkirtAccessory", "FontFamily", "EyebrowAccessory", "EyelashAccessory", "MoodAnimation"}, ["Enum.InputType"] = {"NoInput", "LeftTread", "RightTread", "Throttle", "Steer", "UpDown", "Sideways", "Action1", "Action2", "Action3", "Action4", "Action5", "Constant", "Sin"}, ["Enum.BodyPart"] = {"Head", "Torso", "LeftArm", "RightArm", "LeftLeg", "RightLeg"}, ["Enum.DialogBehaviorType"] = {"SinglePlayer", "MultiplePlayers"}, ["Enum.DialogPurpose"] = {"Quest", "Help", "Shop"}, ["Enum.DialogTone"] = {"Neutral", "Friendly", "Enemy"}, ["Enum.MeshType"] = {"Head", "Torso", "Wedge", "Sphere", "Cylinder", "FileMesh", "Brick", "Prism", "ParallelRamp", "RightAngleRamp", "CornerWedge"}, ["Enum.DominantAxis"] = {"Width", "Height"}, ["Enum.SensorUpdateType"] = {"OnChange", "Always"}, ["Enum.AnimationPriority"] = {"Idle", "Core", "Movement", "Action", "Action2", "Action3", "Action4"}, ["Enum.VelocityConstraintMode"] = {"Vector", "Line", "Plane"}, ["Enum.VerticalScrollBarPosition"] = {"Left", "Right"}, ["Enum.AdornCullingMode"] = {"Automatic", "Never"}, ["Enum.AlignType"] = {"Parallel", "Perpendicular", "PrimaryAxisParallel", "PrimaryAxisPerpendicular", "PrimaryAxisLookAt", "AllAxes", "AllAxesPerpendicular"}, ["Enum.ForceLimitMode"] = {"Magnitude", "PerAxis"}, ["Enum.ActuatorRelativeTo2"] = {"Attachment0", "Attachment1", "World"}, ["Enum.DeveloperMemoryTag"] = {"Internal", "HttpCache", "Instances", "Signals", "LuaHeap", "Script", "PhysicsCollision", "PhysicsParts", "GraphicsSolidModels", "GraphicsMeshParts", "GraphicsParticles", "GraphicsParts", "GraphicsSpatialHash", "GraphicsTerrain", "GraphicsTexture", "GraphicsTextureCharacter", "Sounds", "StreamingSounds", "TerrainVoxels", "Gui", "Animation", "Navigation"}, ["Enum.CoreGuiType"] = {"PlayerList", "Health", "Backpack", "Chat", "All", "EmotesMenu"}, ["Enum.ChatColor"] = {"Blue", "Green", "Red", "White"}, ["Enum.ContextActionResult"] = {"Pass", "Sink"}, ["Enum.ContextActionPriority"] = {"Low", "Medium", "High"}, ["Enum.ProductPurchaseDecision"] = {"NotProcessedYet", "PurchaseGranted"}, ["Enum.LeftRight"] = {"Left", "Center", "Right"}, ["Enum.TopBottom"] = {"Top", "Center", "Bottom"}, ["Enum.OutputLayoutMode"] = {"Horizontal", "Vertical"}, ["Enum.QualityLevelExtra"] = {"Automatic", "Level01", "Level21"}, ["Enum.PrivilegeType"] = {"Admin", "Member", "Owner", "Banned", "Guest", "NotPresent"}, ["Enum.SmoothingDirection"] = {"Inwards", "Outwards", "Both"}, ["Enum.WaterDirection"] = {"NegX", "X", "NegY", "Y", "NegZ", "Z"}, ["Enum.WaterForce"] = {"None", "Small", "Medium", "Strong", "Max"}, ["Enum.CageType"] = {"Outer", "Inner"}, ["Enum.HumanoidCollisionType"] = {"OuterBox", "InnerBox"}, ["Enum.SortType"] = {"Recent", "MostPopular"}, ["Enum.LoadDynamicHeads"] = {"Default", "Disabled", "Enabled"}, ["Enum.ExperienceAuthScope"] = {"GameJoinMetadata"}, ["Enum.UserCFrame"] = {"Head", "LeftHand", "RightHand", "Floor"}, ["Enum.ServerType"] = {"Public", "Reserved"} } local b_enum_values = { ["Enum.Material.Plastic"] = 256, ["Enum.Material.Grass"] = 512, ["Enum.Material.Water"] = 2048, ["Enum.Material.Air"] = 0, ["Enum.Material.SmoothPlastic"] = 272, ["Enum.Material.ForceField"] = 1584, ["Enum.Material.Glass"] = 1568, ["Enum.Material.CrackedLava"] = 1792, ["Enum.Material.Neon"] = 288, ["Enum.UserInputType.MouseButton1"] = 1, ["Enum.UserInputType.MouseButton2"] = 2, ["Enum.UserInputType.MouseMovement"] = 3, ["Enum.UserInputType.Keyboard"] = 4, ["Enum.UserInputType.Gamepad1"] = 5, ["Enum.UserInputType.Touch"] = 6, ["Enum.Platform.Windows"] = 0, ["Enum.Platform.OSX"] = 1, ["Enum.Platform.IOS"] = 2, ["Enum.Platform.Android"] = 3, ["Enum.Platform.XBoxOne"] = 4, ["Enum.Platform.PS4"] = 5, ["Enum.Platform.PS5"] = 6, ["Enum.Platform.UWP"] = 7, ["Enum.UserInputState.Begin"] = 1, ["Enum.UserInputState.Change"] = 2, ["Enum.UserInputState.End"] = 3, ["Enum.MessageType.MessageOutput"] = 1, ["Enum.MessageType.MessageWarning"] = 2, ["Enum.MessageType.MessageError"] = 3, ["Enum.RaycastFilterType.Exclude"] = 1, ["Enum.RaycastFilterType.Include"] = 2, ["Enum.RaycastFilterType.Blacklist"] = 1, ["Enum.RaycastFilterType.Whitelist"] = 2, ["Enum.BulkMoveMode.FireAllEvents"] = 1, ["Enum.BulkMoveMode.FireCFrameChanged"] = 2, ["Enum.BulkMoveMode.FireNoEvents"] = 3, ["Enum.CompressionAlgorithm.Zstd"] = 1, ["Enum.ZIndexBehavior.Global"] = 0, ["Enum.ZIndexBehavior.Sibling"] = 1, ["Enum.ScreenInsets.None"] = 0, ["Enum.ScreenInsets.DeviceSafeInsets"] = 1, ["Enum.ScreenInsets.CoreUISafeInsets"] = 2, ["Enum.ScreenInsets.TopbarSafeInsets"] = 3, ["Enum.AutomaticSize.None"] = 0, ["Enum.AutomaticSize.X"] = 1, ["Enum.AutomaticSize.Y"] = 2, ["Enum.AutomaticSize.XY"] = 3, ["Enum.ScaleType.Stretch"] = 0, ["Enum.ScaleType.Tile"] = 1, ["Enum.ScaleType.Fit"] = 2, ["Enum.ScaleType.Crop"] = 3, ["Enum.ScaleType.Slice"] = 4, ["Enum.SortDirection.Ascending"] = 1, ["Enum.SortDirection.Descending"] = 2, ["Enum.RunState.Running"] = 1, ["Enum.CreatorType.User"] = 1, ["Enum.CreatorType.Group"] = 2, ["Enum.CameraType.Custom"] = 0, ["Enum.CameraType.Fixed"] = 1, ["Enum.CameraType.Attach"] = 2, ["Enum.CameraType.Watch"] = 3, ["Enum.CameraType.Track"] = 4, ["Enum.CameraType.Orbital"] = 5, ["Enum.CameraType.Scriptable"] = 6, ["Enum.MembershipType.None"] = 0, ["Enum.ReverbType.NoReverb"] = 0, ["Enum.EasingStyle.Linear"] = 1, ["Enum.EasingStyle.Quad"] = 2, ["Enum.EasingStyle.Cubic"] = 3, ["Enum.EasingStyle.Quart"] = 4, ["Enum.EasingStyle.Quint"] = 5, ["Enum.EasingStyle.Sine"] = 6, ["Enum.EasingStyle.Back"] = 7, ["Enum.EasingStyle.Bounce"] = 8, ["Enum.EasingStyle.Elastic"] = 9, ["Enum.EasingStyle.Exponential"] = 10, ["Enum.EasingStyle.Circular"] = 11, ["Enum.EasingDirection.In"] = 1, ["Enum.EasingDirection.Out"] = 2, ["Enum.EasingDirection.InOut"] = 3, ["Enum.PlaybackState.Begin"] = 1, ["Enum.PlaybackState.Playing"] = 2, ["Enum.PlaybackState.Completed"] = 3, ["Enum.PartType.Block"] = 1, ["Enum.PartType.Ball"] = 2, ["Enum.PartType.Cylinder"] = 3, ["Enum.ThumbnailType.HeadShot"] = 0, ["Enum.ThumbnailType.AvatarBust"] = 1, ["Enum.ThumbnailType.AvatarThumbnail"] = 2, ["Enum.ThumbnailSize.Size48x48"] = 0, ["Enum.ThumbnailSize.Size60x60"] = 1, ["Enum.ThumbnailSize.Size100x100"] = 2, ["Enum.ThumbnailSize.Size150x150"] = 3, ["Enum.ThumbnailSize.Size180x180"] = 4, ["Enum.ThumbnailSize.Size352x352"] = 5, ["Enum.ThumbnailSize.Size420x420"] = 6, ["Enum.ResamplerMode.Default"] = 0, ["Enum.ResamplerMode.Pixelated"] = 1, ["Enum.ScrollBarInset.None"] = 0, ["Enum.ScrollBarInset.ScrollBar"] = 1, ["Enum.ScrollBarInset.Always"] = 2, ["Enum.SurfaceType.Smooth"] = 0, ["Enum.SurfaceType.Glue"] = 1, ["Enum.SurfaceType.Weld"] = 2, ["Enum.SurfaceType.Studs"] = 3, ["Enum.SurfaceType.Inlet"] = 4, ["Enum.SurfaceType.Universal"] = 5, ["Enum.SurfaceType.Hinge"] = 6, ["Enum.SurfaceType.Motor"] = 7, ["Enum.SurfaceType.SteppingMotor"] = 8, ["Enum.SurfaceType.SmoothNoOutlines"] = 10, ["Enum.Axis.X"] = 1, ["Enum.Axis.Y"] = 2, ["Enum.Axis.Z"] = 3, ["Enum.NormalId.Right"] = 1, ["Enum.NormalId.Top"] = 2, ["Enum.NormalId.Back"] = 3, ["Enum.NormalId.Left"] = 4, ["Enum.NormalId.Bottom"] = 5, ["Enum.NormalId.Front"] = 6, ["Enum.MouseBehavior.Default"] = 1, ["Enum.MouseBehavior.LockCenter"] = 2, ["Enum.MouseBehavior.LockCurrentPosition"] = 3, ["Enum.PreferredInput.KeyboardAndMouse"] = 0, ["Enum.PreferredInput.Touch"] = 1, ["Enum.PreferredInput.Gamepad"] = 2, ["Enum.HumanoidDisplayDistanceType.Viewer"] = 1, ["Enum.HumanoidDisplayDistanceType.Subject"] = 2, ["Enum.HumanoidDisplayDistanceType.None"] = 3, ["Enum.TextTruncate.None"] = 1, ["Enum.TextTruncate.AtEnd"] = 2, ["Enum.TextTruncate.SplitWord"] = 3, ["Enum.TextXAlignment.Left"] = 1, ["Enum.TextXAlignment.Center"] = 2, ["Enum.TextXAlignment.Right"] = 3, ["Enum.TextYAlignment.Top"] = 1, ["Enum.TextYAlignment.Center"] = 2, ["Enum.TextYAlignment.Bottom"] = 3, ["Enum.VerticalAlignment.Center"] = 0, ["Enum.VerticalAlignment.Top"] = 1, ["Enum.VerticalAlignment.Bottom"] = 2, ["Enum.ActuatorType.None"] = 1, ["Enum.ActuatorType.Motor"] = 2, ["Enum.ActuatorType.Servo"] = 3, ["Enum.ActuatorRelativeTo.World"] = 1, ["Enum.ActuatorRelativeTo.Attachment0"] = 2, ["Enum.PathStatus.Success"] = 1, ["Enum.PathStatus.NoPath"] = 2, ["Enum.PathStatus.ClosestNoPath"] = 3, ["Enum.PathWaypointAction.Walk"] = 1, ["Enum.PathWaypointAction.Jump"] = 2, ["Enum.KeyInterpolationMode.Linear"] = 1, ["Enum.KeyInterpolationMode.Constant"] = 2, ["Enum.KeyInterpolationMode.Cubic"] = 3, ["Enum.CatalogSortType.Relevance"] = 1, ["Enum.CatalogSortType.PriceLowToHigh"] = 2, ["Enum.CatalogCategoryFilter.None"] = 1, ["Enum.CatalogCategoryFilter.Featured"] = 2, ["Enum.CatalogCategoryFilter.Collectibles"] = 3, ["Enum.CatalogSalesTypeFilter.All"] = 1, ["Enum.CatalogSalesTypeFilter.Free"] = 2, ["Enum.CatalogSalesTypeFilter.Paid"] = 3, ["Enum.HumanoidStateType.None"] = 0, ["Enum.HumanoidStateType.Running"] = 1, ["Enum.HumanoidStateType.Jumping"] = 2, ["Enum.HumanoidStateType.Freefall"] = 3, ["Enum.HumanoidStateType.Landed"] = 4, ["Enum.Technology.Voxel"] = 0, ["Enum.Technology.ShadowMap"] = 1, ["Enum.Technology.Future"] = 2, ["Enum.Font.SourceSans"] = 1, ["Enum.Font.Arial"] = 2, ["Enum.Font.Gotham"] = 3, ["Enum.Font.GothamBold"] = 4, ["Enum.Font.GothamSemibold"] = 5, ["Enum.Font.Michroma"] = 6, ["Enum.FontWeight.Regular"] = 1, ["Enum.FontWeight.Bold"] = 2, ["Enum.FontStyle.Normal"] = 1, ["Enum.FontStyle.Italic"] = 2, ["Enum.GroupMembershipStatus.None"] = 0, ["Enum.GroupMembershipStatus.Pending"] = 1, ["Enum.GroupMembershipStatus.Joined"] = 2, ["Enum.GroupMembershipStatus.Removed"] = 3, ["Enum.AdUIType.Image"] = 1, ["Enum.AdUIType.Video"] = 2, ["Enum.AdUIType.Banner"] = 3 } local function b_copy(b_table) if j(b_table) ~= "table" then return b_table end local b_result = {} for b_key, b_value in D(b_table) do b_result[b_key] = b_copy(b_value) end return b_result end local function b_enum_value(b_path) if b_enum_values[b_path] ~= nil then return b_enum_values[b_path] end local b_parent = b_path:match("^(Enum%.[^%.]+)") local b_leaf = b_path:match("([^%.]+)$") local b_members = b_parent and b_enum_members[b_parent] if b_members then for b_index, b_name in ipairs(b_members) do if b_name == b_leaf then return b_index end end end return 0 end local function b_is_enum_item_value(b_value) if not G(b_value) then return false end local b_reg = t.registry[b_value] or "" return b_reg:match("^Enum%.[^%.]+%.[^%.]+$") ~= nil end local function b_enum_item(b_path) if t.enum_cache[b_path] then return t.enum_cache[b_path] end local b_proxy = bj(b_path, false) t.registry[b_proxy] = b_path t.property_store[b_proxy] = t.property_store[b_proxy] or {} t.property_store[b_proxy].__enum_path = b_path t.property_store[b_proxy].Name = b_path:match("([^%.]+)$") or b_path t.property_store[b_proxy].Value = b_enum_value(b_path) local b_enum_parent = b_path:match("^(Enum%.[^%.]+)%.") if b_enum_parent then t.property_store[b_proxy].EnumType = b_enum_item(b_enum_parent) end t.enum_cache[b_path] = b_proxy return b_proxy end local function b_try_get_enum_member(b_enum_type_path, b_member_name) b_enum_type_path = aE(b_enum_type_path or "") b_member_name = aE(b_member_name or "") if b_enum_type_path == "" or b_member_name == "" then return nil end if not b_enum_type_path:match("^Enum%.[^%.]+$") then return nil end local b_members = b_enum_members[b_enum_type_path] if b_members then for _, b_member in ipairs(b_members) do if aE(b_member) == b_member_name then return b_enum_item(b_enum_type_path .. "." .. b_member) end end end if b_enum_type_path == "Enum.Font" then -- Keep Font enum evergreen (Roblox adds fonts over time, e.g. LuckiestGuy). -- Accept any identifier-like member and register it dynamically. if b_member_name:match("^[A-Za-z_][A-Za-z0-9_]*$") then b_enum_members[b_enum_type_path] = b_enum_members[b_enum_type_path] or {} local b_exists = false for _, b_member in ipairs(b_enum_members[b_enum_type_path]) do if aE(b_member) == b_member_name then b_exists = true break end end if not b_exists then table.insert(b_enum_members[b_enum_type_path], b_member_name) end local b_key = b_enum_type_path .. "." .. b_member_name if b_enum_values[b_key] == nil then b_enum_values[b_key] = #b_enum_members[b_enum_type_path] end return b_enum_item(b_key) end end if rawget(b_env_state.public_values or _G, "__LARRY_FAILOPEN_ENUM_MEMBERS") ~= false then -- Keep behavior executor-tolerant when Roblox enum sets drift over time. return b_enum_item(b_enum_type_path .. "." .. b_member_name) end return nil end local function b_ensure_enum_family_minimum_members(b_enum_type_path, b_minimum) b_enum_type_path = aE(b_enum_type_path or "") b_minimum = tonumber(b_minimum) or 0 if b_enum_type_path == "" or b_minimum <= 0 then return end if not b_enum_type_path:match("^Enum%.[^%.]+$") then return end if not b_enum_members[b_enum_type_path] then return end local b_members = b_enum_members[b_enum_type_path] local b_next_index = #b_members + 1 while #b_members < b_minimum do local b_name = (b_next_index == 1 and "None") or ("Value" .. tostring(b_next_index - 1)) table.insert(b_members, b_name) b_next_index = b_next_index + 1 end end local function b_proxy_name(b_proxy) return t.registry[b_proxy] or rawget(b_proxy, "__temp_path") or "object" end local function b_runtime_container_class_name(b_class_name) local n = aE(b_class_name or "") if n == "" then return false end -- Broad Instance trees (no game-specific names): services + structural containers so runtime-only -- children resolve without terminating; seeded members stay as-is when already present. if n == "ReplicatedStorage" or n == "RobloxReplicatedStorage" or n == "ServerStorage" or n == "ServerScriptService" or n == "ReplicatedFirst" or n == "StarterGui" or n == "StarterPack" or n == "StarterPlayer" or n == "PlayerScripts" or n == "StarterPlayerScripts" or n == "Configuration" or n == "Workspace" or n == "Lighting" or n == "MaterialService" or n == "SoundService" or n == "PlayerGui" or n == "CoreGui" or n == "Teams" or n == "Team" then return true end if n == "Folder" or n == "Model" or n == "WorldModel" or n == "Actor" or n == "ScreenGui" or n == "BillboardGui" or n == "SurfaceGui" or n == "LayerCollector" or n == "Frame" or n == "ScrollingFrame" or n == "CanvasGroup" or n == "Backpack" or n == "StarterGear" then return true end return false end local function b_runtime_child_tree_enabled(bh) if rawget(_G, "__LARRY_DISABLE_RUNTIME_CHILD_TREE") == true then return false end if not G(bh) then return false end local st = t.property_store[bh] if not st then return false end if st.__runtime_child_tree == false then return false end if st.__runtime_child_tree == true then return true end return b_runtime_container_class_name(st.ClassName) end local function b_named_proxy(b_name, b_parent, b_path, b_class) local b_key = aE(b_name) if b_parent then t.child_cache[b_parent] = t.child_cache[b_parent] or {} if t.child_cache[b_parent][b_key] then return t.child_cache[b_parent][b_key] end end local b_proxy = bj(b_key, false, b_parent) t.registry[b_proxy] = b_path or ((b_parent and (b_proxy_name(b_parent) .. "." .. b_key)) or b_key) t.property_store[b_proxy] = t.property_store[b_proxy] or {} t.property_store[b_proxy].Name = b_key t.property_store[b_proxy].ClassName = b_class or b_key if b_parent then t.parent_map[b_proxy] = b_parent t.child_cache[b_parent][b_key] = b_proxy if t.property_store[b_parent] and (t.property_store[b_parent].__descendant_seeding or b_runtime_child_tree_enabled(b_parent)) then t.property_store[b_proxy].__descendant_seeding = true t.property_store[b_proxy].__runtime_child_tree = true end end return b_proxy end local function b_child_proxy(b_name, b_parent, b_class) return b_named_proxy(b_name, b_parent, nil, b_class or b_name) end local function b_default_runtime_child_class(b_name, b_parent) local n = aE(b_name) if n == "RemoteEvent" or n == "RemoteFunction" or n == "BindableEvent" or n == "BindableFunction" or n == "UnreliableRemoteEvent" then return n end if G(b_parent) then local pst = t.property_store[b_parent] local pcn = aE((pst and pst.ClassName) or "") if pcn == "PlayerGui" or pcn == "CoreGui" then return "ScreenGui" end if pcn == "StarterGui" then return "ScreenGui" end if pcn == "ScreenGui" or pcn == "BillboardGui" or pcn == "SurfaceGui" or pcn == "LayerCollector" then return "Frame" end if pcn == "Frame" or pcn == "ScrollingFrame" or pcn == "CanvasGroup" then return "Frame" end if pcn == "Workspace" or pcn == "Model" or pcn == "WorldModel" or pcn == "Actor" then return "Folder" end if pcn == "Lighting" then return "Folder" end if pcn == "Teams" or pcn == "Team" then return "Folder" end end return "Folder" end local function b_failopen_child_class(b_name) local n = aE(b_name) if n == "ControlModule" or n == "CameraModule" or n == "VehicleCamera" then return "ModuleScript" end return n end local function b_collect_children(b_parent) local b_children = {} for b_child, b_owner in D(t.parent_map) do local b_class = aE((t.property_store[b_child] or {}).ClassName or "") if b_owner == b_parent and b_class ~= "RBXScriptSignal" and b_class ~= "RBXScriptConnection" then table.insert(b_children, b_child) end end return b_children end q._ensure_placement_system = function(b_parent) if not G(b_parent) then return nil end local b_existing = nil local b_cached = t.child_cache[b_parent] if b_cached and b_cached.PlacementSystem then b_existing = b_cached.PlacementSystem else for b_child, b_owner in D(t.parent_map) do if b_owner == b_parent then local b_store = t.property_store[b_child] or {} local b_name = aE(b_store.Name or "") local b_class = aE(b_store.ClassName or "") if b_name == "PlacementSystem" and b_class ~= "RBXScriptSignal" and b_class ~= "RBXScriptConnection" then b_existing = b_child break end end end end if b_existing then return b_existing end local b_system = b_child_proxy("PlacementSystem", b_parent, "Folder") local b_core = b_child_proxy("Core", b_system, "ModuleScript") local b_client = b_child_proxy("Client", b_system, "ModuleScript") local b_server = b_child_proxy("Server", b_system, "ModuleScript") local b_settings = b_child_proxy("Settings", b_system, "ModuleScript") local b_config = b_child_proxy("Config", b_system, "Configuration") local b_buildings = b_child_proxy("Buildings", b_system, "Folder") local b_place_bind = b_child_proxy("PlaceBind", b_system, "BindableEvent") local b_wire_bind = b_child_proxy("WireBind", b_system, "BindableEvent") local b_pipe_bind = b_child_proxy("PipeBind", b_system, "BindableEvent") local b_toast_bind = b_child_proxy("BindableToast", b_system, "BindableEvent") local b_remotes = b_child_proxy("Remotes", b_system, "Folder") local b_place = b_child_proxy("Place", b_remotes, "RemoteEvent") local b_remove = b_child_proxy("Remove", b_remotes, "RemoteEvent") local b_rotate = b_child_proxy("Rotate", b_remotes, "RemoteEvent") local b_move = b_child_proxy("Move", b_remotes, "RemoteEvent") local b_confirm = b_child_proxy("Confirm", b_remotes, "RemoteEvent") local b_cancel = b_child_proxy("Cancel", b_remotes, "RemoteEvent") local b_can_place = b_child_proxy("CanPlace", b_remotes, "RemoteFunction") local b_preview = b_child_proxy("RequestPreview", b_remotes, "RemoteFunction") local b_grid = b_child_proxy("GetGridData", b_remotes, "RemoteFunction") t.property_store[b_system] = t.property_store[b_system] or {} t.property_store[b_system].Core = b_core t.property_store[b_system].Client = b_client t.property_store[b_system].Server = b_server t.property_store[b_system].Settings = b_settings t.property_store[b_system].Config = b_config t.property_store[b_system].Buildings = b_buildings t.property_store[b_system].PlaceBind = b_place_bind t.property_store[b_system].WireBind = b_wire_bind t.property_store[b_system].PipeBind = b_pipe_bind t.property_store[b_system].BindableToast = b_toast_bind t.property_store[b_system].Remotes = b_remotes t.property_store[b_system].Version = "1.3.8.0" t.property_store[b_system].Enabled = true t.property_store[b_config] = t.property_store[b_config] or {} t.property_store[b_config].ClassName = "Configuration" t.property_store[b_config].GridSize = 1 t.property_store[b_config].RotationStep = 90 t.property_store[b_config].AllowStacking = true t.property_store[b_config].MaxPlacementDistance = 128 t.property_store[b_remotes] = t.property_store[b_remotes] or {} t.property_store[b_remotes].Place = b_place t.property_store[b_remotes].Remove = b_remove t.property_store[b_remotes].Rotate = b_rotate t.property_store[b_remotes].Move = b_move t.property_store[b_remotes].Confirm = b_confirm t.property_store[b_remotes].Cancel = b_cancel t.property_store[b_remotes].CanPlace = b_can_place t.property_store[b_remotes].RequestPreview = b_preview t.property_store[b_remotes].GetGridData = b_grid return b_system end local function b_mark_flexible_proxy(b_proxy) if not G(b_proxy) then return b_proxy end t.property_store[b_proxy] = t.property_store[b_proxy] or {} local b_store = t.property_store[b_proxy] b_store.__callable = true b_store.__table_like = true b_store.Options = b_store.Options or {} b_store.Toggles = b_store.Toggles or {} b_store.Flags = b_store.Flags or {} local function b_make_ui_child(b_method) return function(_, ...) local b_key = nil local b_arg_count = select("#", ...) for b_index = 1, b_arg_count do local b_arg = select(b_index, ...) if j(b_arg) == "string" and b_arg ~= "" then b_key = b_arg break end end if not b_key then t.flexible_ui_counter = (t.flexible_ui_counter or 0) + 1 b_key = b_method .. tostring(t.flexible_ui_counter) end local b_child = b_child_proxy(b_key, b_proxy, b_key) b_mark_flexible_proxy(b_child) b_store.Options[b_key] = b_child b_store.Flags[b_key] = b_child if b_method:find("Toggle", 1, true) then b_store.Toggles[b_key] = b_child end local b_child_store = t.property_store[b_child] or {} local b_callback = nil for b_index = 1, b_arg_count do local b_arg = select(b_index, ...) if j(b_arg) == "function" then b_callback = b_arg break end if j(b_arg) == "table" then for _, b_value in pairs(b_arg) do if j(b_value) == "function" then b_callback = b_value break end end if b_callback then break end end end if b_callback then local b_body = b_larry_function_body_literal and b_larry_function_body_literal(b_callback, 65536) or nil if j(b_body) == "string" and b_body ~= "" then at(string.format("-- [Callback:%s.%s]", tostring(b_method), tostring(b_key))) t.indent = t.indent + 1 b_emit_signal_callback_source_lines(b_body) t.indent = t.indent - 1 else pcall(b_callback, false) end end b_child_store.Value = b_child_store.Value ~= nil and b_child_store.Value or false b_child_store.SetValue = b_child_store.SetValue or function(_, b_value) b_child_store.Value = b_value return b_child end b_child_store.OnChanged = b_child_store.OnChanged or function(_, b_callback2) if j(b_callback2) == "function" then pcall(b_callback2, b_child_store.Value) end return b_child end t.property_store[b_child] = b_child_store return b_child end end local b_methods = { "AddButton", "AddToggle", "AddSlider", "AddDropdown", "AddKeyPicker", "AddColorPicker", "AddLabel", "AddDivider", "AddTab", "AddLeftTabbox", "AddRightTabbox", "AddLeftGroupbox", "AddRightGroupbox", "AddDependencyBox", "NewButton", "NewToggle", "NewSlider", "NewDropdown", "NewKeybind", "NewTab", "NewSection", "CreateWindow", "CreateLib", "Window", "Tab", "Section" } for _, b_method in ipairs(b_methods) do if b_store[b_method] == nil then b_store[b_method] = b_make_ui_child(b_method) end end return b_proxy end local function b_instance_name(b_instance) if not G(b_instance) then return "" end local b_store = t.property_store[b_instance] or {} return aE(b_store.Name or t.registry[b_instance] or rawget(b_instance, "__temp_path") or "") end local function b_instance_class(b_instance) if not G(b_instance) then return "" end local b_store = t.property_store[b_instance] or {} return aE(b_store.ClassName or b_store.Name or t.registry[b_instance] or "Instance") end local function b_method_allowed_for_class(c_method_name, c_class_name) if c_method_name == "Fire" then return c_class_name == "BindableEvent" end return true end q._class_uses_gui_udim2 = function(b_class_name) b_class_name = aE(b_class_name) return b_class_name ~= "" and ( b_class_is_a(b_class_name, "GuiBase2d") or b_class_name == "SurfaceGui" or b_class_name == "BillboardGui" or b_class_name == "Frame" or b_class_name == "TextBox" or b_class_name == "TextLabel" or b_class_name == "TextButton" or b_class_name == "ImageLabel" or b_class_name == "ImageButton" or b_class_name == "ScrollingFrame" or b_class_name == "ViewportFrame" or b_class_name == "VideoFrame" or b_class_name == "CanvasGroup" ) end q._class_uses_spatial_vectors = function(b_class_name) b_class_name = aE(b_class_name) return b_class_name ~= "" and (b_class_is_a(b_class_name, "BasePart") or b_class_name == "Model" or b_class_name == "WorldRoot" or b_class_name == "Attachment" or b_class_name == "Camera") end q._mock_expected_property_kind = function(b_class_name, b_property) b_class_name = aE(b_class_name) b_property = aE(b_property) if b_property == "Position" then if q._class_uses_spatial_vectors(b_class_name) then return "Vector3" end if q._class_uses_gui_udim2(b_class_name) then return "UDim2" end if b_class_name == "InputObject" then return "Vector3" end elseif b_property == "Size" then if b_class_name == "BlurEffect" or b_class_name == "BloomEffect" then return "number" end if b_class_is_a(b_class_name, "BasePart") then return "Vector3" end if q._class_uses_gui_udim2(b_class_name) then return "UDim2" end elseif b_property == "AnchorPoint" or b_property == "TextBounds" or b_property == "AbsolutePosition" or b_property == "AbsoluteSize" or b_property == "CanvasPosition" or b_property == "ViewportSize" then return "Vector2" elseif b_property == "Offset" and b_class_name == "UIGradient" then return "Vector2" elseif b_property == "CanvasSize" then return "UDim2" elseif b_property == "AutomaticCanvasSize" and (b_class_name == "ScrollingFrame" or b_class_name == "VideoFrame") then return "EnumItem" elseif b_property == "ElasticBehavior" and b_class_name == "ScrollingFrame" then return "EnumItem" elseif b_property == "ScrollBarImageColor3" and b_class_name == "ScrollingFrame" then return "Color3" elseif b_property == "Color" then if b_class_name == "Beam" or b_class_name == "Trail" or b_class_name == "ParticleEmitter" or b_class_name == "UIGradient" then return "ColorSequence" end elseif b_property == "OnIncomingMessage" and (b_class_name == "TextChatService" or b_class_name == "TextChannel") then return "function" elseif b_class_name == "Drawing" then if b_property == "Radius" or b_property == "Thickness" or b_property == "Transparency" or b_property == "Size" or b_property == "NumSides" or b_property == "TextSize" or b_property == "ZIndex" then return "number" end if b_property == "Visible" or b_property == "Filled" or b_property == "Center" or b_property == "Outline" then return "boolean" end if b_property == "Position" or b_property == "From" or b_property == "To" then return "Vector2" end if b_property == "Color" or b_property == "OutlineColor" then return "Color3" end if b_property == "Text" or b_property == "Font" then return "string" end end return nil end q._http_fetch_url = function(b_url) b_url = aE(b_url or "") if b_url == "" then return nil end -- SECURITY: reject URLs containing shell metacharacters, quotes, or -- whitespace. These never appear in well-formed URLs (must be -- percent-encoded). The downstream popen/process.execute pathways -- interpolate the URL into shell command strings, and incomplete quoting -- would otherwise allow command injection via $(...), backticks, or -- escaped-quote breakouts when a user-supplied script passes a crafted -- URL to game:HttpGet / HttpGetAsync / GetObjects. if b_url:find("[%c$`\\\"'<>|()]") or b_url:find("%s") then return nil end local b_lower_url = b_url:lower() if b_lower_url:find("raw.githubusercontent.com/violin-suzutsuki/linorialib", 1, true) or b_lower_url:find("githubusercontent.com/violin-suzutsuki/linorialib", 1, true) then local b_linoria_stub = [[ return (function() local env = (getgenv and getgenv()) or _G local sharedOptions = rawget(env, "Options") or {} local sharedToggles = rawget(env, "Toggles") or {} local sharedFlags = rawget(env, "Flags") or {} rawset(env, "Options", sharedOptions) rawset(env, "Toggles", sharedToggles) rawset(env, "Flags", sharedFlags) local function chain() local obj = { Options = sharedOptions, Toggles = sharedToggles, Flags = sharedFlags } local mt mt = { __index = function(t, k) local v = rawget(t, k) if v ~= nil then return v end if k == "Options" or k == "Toggles" or k == "Flags" then local bucket = {} rawset(t, k, bucket) return bucket end return function(...) local args = {...} local key = args[2] local child = chain() if type(key) == "string" and key ~= "" then sharedOptions[key] = child sharedFlags[key] = child if tostring(k):find("Toggle") then sharedToggles[key] = child end end return child end end, __newindex = function(t, k, v) rawset(t, k, v) end, __call = function(...) return chain() end } return setmetatable(obj, mt) end return chain() end)() ]] t.http_cache = t.http_cache or {} t.http_cache[b_url] = b_linoria_stub return b_linoria_stub end -- Optional fallback stub for UI libraries. -- Disabled by default so dumps keep the real remote script body. if rawget(_G, "__LARRY_USE_UI_STUB") == true then local u = b_url:lower() if u:find("kavo-ui-library", 1, true) or u:find("rayfield", 1, true) or u:find("orion", 1, true) or u:find("linoria", 1, true) or u:find("u-library", 1, true) or u:find("ui-library", 1, true) then local stub = [[ return (function() local function chain() local obj = {} local mt mt = { __index = function(t,k) if k == "CreateWindow" or k == "Window" or k == "Create" then return function(...) return chain() end end return function(...) return chain() end end, __call = function(...) return chain() end } return setmetatable(obj, mt) end local lib = chain() lib.Flags = {} return lib end)() ]] t.http_cache = t.http_cache or {} t.http_cache[b_url] = stub return stub end end local b_discovered_urls = rawget(_G, "__LARRY_HTTP_DISCOVERED_URLS") if j(b_discovered_urls) == "table" then local b_seen_url = false for _, b_existing_url in ipairs(b_discovered_urls) do if b_existing_url == b_url then b_seen_url = true break end end if not b_seen_url then table.insert(b_discovered_urls, b_url) end end t.http_cache = t.http_cache or {} local b_seed_cache = rawget(_G, "__LARRY_HTTP_CACHE") if j(b_seed_cache) == "table" then local b_seeded = b_seed_cache[b_url] if j(b_seeded) == "string" and b_seeded ~= "" then t.http_cache[b_url] = b_seeded return b_seeded end end local b_cached = t.http_cache[b_url] if b_cached ~= nil then return b_cached or nil end local b_shell_url = '"' .. b_url:gsub('"', '\\"') .. '"' local b_ps_url = b_url:gsub("'", "''") local b_py_url = b_url:gsub("\\", "\\\\"):gsub("'", "\\'") local b_commands = { -- Add a UA because some hosts (e.g. pastebin) block default clients. "curl.exe -L -s --max-time 20 -A \"env-dumper\" " .. b_shell_url, "powershell -NoProfile -Command \"$ProgressPreference='SilentlyContinue'; [Console]::OutputEncoding=[System.Text.Encoding]::UTF8; " .. "(Invoke-WebRequest -UseBasicParsing -Headers @{ 'User-Agent'='env-dumper' } -Uri '" .. b_ps_url .. "').Content\"", "python -c \"import urllib.request,sys; req=urllib.request.Request('" .. b_py_url .. "', headers={'User-Agent':'env-dumper'}); sys.stdout.write(urllib.request.urlopen(req, timeout=20).read().decode('utf-8', 'replace'))\"" } if j(o) == "table" and j(o.popen) == "function" then for _, b_command in ipairs(b_commands) do local b_pipe = o.popen(b_command) if b_pipe then local b_ok, b_body = pcall(function() return b_pipe:read("*a") end) pcall(function() b_pipe:close() end) if b_ok and j(b_body) == "string" and b_body ~= "" then t.http_cache[b_url] = b_body return b_body end end end end if j(p) == "table" and j(p.execute) == "function" and j(o) == "table" and j(o.open) == "function" then local b_temp_dir = "." if j(p.getenv) == "function" then b_temp_dir = aE(p.getenv("TEMP") or p.getenv("TMP") or ".") end local b_temp_name = "lol_http_" .. tostring(math.random(100000, 999999)) .. ".tmp" local b_temp_path = b_temp_dir if not b_temp_path:match("[/\\]$") then b_temp_path = b_temp_path .. "\\" end b_temp_path = b_temp_path .. b_temp_name local b_shell_path = '"' .. b_temp_path:gsub('"', '\\"') .. '"' local b_ps_path = b_temp_path:gsub("'", "''") pcall(function() p.execute("curl.exe -L -s --max-time 20 -A \"env-dumper\" " .. b_shell_url .. " -o " .. b_shell_path) end) pcall(function() if not o.open(b_temp_path, "rb") then p.execute( "powershell -NoProfile -Command \"$ProgressPreference='SilentlyContinue'; " .. "Invoke-WebRequest -UseBasicParsing -Headers @{ 'User-Agent'='env-dumper' } -Uri '" .. b_ps_url .. "' -OutFile '" .. b_ps_path .. "'\"" ) end end) pcall(function() if not o.open(b_temp_path, "rb") then p.execute( "python -c \"import urllib.request; req=urllib.request.Request('" .. b_py_url .. "', headers={'User-Agent':'env-dumper'}); open(r'" .. b_temp_path:gsub("\\", "\\\\") .. "','wb').write(urllib.request.urlopen(req, timeout=20).read())\"" ) end end) local b_file = o.open(b_temp_path, "rb") if b_file then local b_ok, b_body = pcall(function() return b_file:read("*a") end) pcall(function() b_file:close() end) pcall(function() if j(p.remove) == "function" then p.remove(b_temp_path) end end) if b_ok and j(b_body) == "string" and b_body ~= "" then t.http_cache[b_url] = b_body return b_body end end end do -- Roblox web APIs are commonly used for environment checks. -- When outbound HTTP is unavailable, emulate stable API envelopes so -- scripts that validate shape (e.g. `data` array presence) still follow -- Roblox-like control flow. local b_place_id, b_server_kind = b_url:match("^https?://games%.roblox%.com/v1/games/(%d+)/servers/([^%?/#]+)") if b_place_id and b_server_kind then local b_payload = string.format( '{"previousPageCursor":null,"nextPageCursor":null,"data":[{"id":"mock-%s-%s","playing":1,"maxPlayers":10,"fps":60,"ping":50}]}', tostring(b_place_id), tostring(b_server_kind) ) t.http_cache[b_url] = b_payload return b_payload end end t.http_cache[b_url] = false return nil end local function b_remove_from_child_cache(b_instance) local b_parent = t.parent_map[b_instance] if not b_parent or not t.child_cache[b_parent] then return end for b_key, b_value in D(t.child_cache[b_parent]) do if b_value == b_instance then t.child_cache[b_parent][b_key] = nil end end end local function b_find_child_by_name(b_parent, b_name, b_recursive) local b_target = aE(b_name) if b_parent == game then if b_target == "Workspace" then return workspace end if t.service_cache[b_target] then return t.service_cache[b_target] end end for b_child, b_owner in D(t.parent_map) do if b_owner == b_parent then if aE(b_instance_name(b_child)) == b_target then return b_child end if b_recursive then local b_match = b_find_child_by_name(b_child, b_target, true) if b_match then return b_match end end end end return nil end local function b_find_child_by_class(b_parent, b_class_name, b_recursive, b_use_isa) local b_target = aE(b_class_name) for b_child, b_owner in D(t.parent_map) do if b_owner == b_parent then local b_class = b_instance_class(b_child) local b_match = b_use_isa and b_class_is_a(b_class, b_target) or b_class == b_target if b_match then return b_child end if b_recursive then local b_nested = b_find_child_by_class(b_child, b_target, true, b_use_isa) if b_nested then return b_nested end end end end return nil end local function b_find_ancestor(b_instance, b_name) local b_target = aE(b_name) local b_cursor = t.parent_map[b_instance] while b_cursor do if aE(b_instance_name(b_cursor)) == b_target then return b_cursor end b_cursor = t.parent_map[b_cursor] end return nil end local function b_find_ancestor_by_class(b_instance, b_class_name, b_use_isa) local b_target = aE(b_class_name) local b_cursor = t.parent_map[b_instance] while b_cursor do local b_class = b_instance_class(b_cursor) local b_match = b_use_isa and b_class_is_a(b_class, b_target) or b_class == b_target if b_match then return b_cursor end b_cursor = t.parent_map[b_cursor] end return nil end local function b_list_descendants(b_parent) local b_results = {} local function b_walk(b_node) for b_child, b_owner in D(t.parent_map) do local b_class = aE((t.property_store[b_child] or {}).ClassName or "") if b_owner == b_node and b_class ~= "RBXScriptSignal" and b_class ~= "RBXScriptConnection" then table.insert(b_results, b_child) b_walk(b_child) end end end b_walk(b_parent) return b_results end local b_ensure_signal local b_fire_signal local function b_destroy_instance(b_instance) local b_destroying_signal = (t.property_store[b_instance] or {}).Destroying if b_destroying_signal then b_fire_signal(b_destroying_signal) end local b_children = {} for b_child, b_owner in D(t.parent_map) do if b_owner == b_instance then table.insert(b_children, b_child) end end for _, b_child in ipairs(b_children) do b_destroy_instance(b_child) end local b_parent = t.parent_map[b_instance] if G(b_parent) then -- Match Roblox timing: descendants are announced as "removing" while still parented. local b_desc_parent = b_parent while G(b_desc_parent) do b_fire_signal( b_ensure_signal( b_desc_parent, "DescendantRemoving", (t.registry[b_desc_parent] or b_instance_name(b_desc_parent) or "Instance") .. ".DescendantRemoving" ), b_instance ) b_desc_parent = t.parent_map[b_desc_parent] end local b_removed_signal = b_ensure_signal( b_parent, "ChildRemoved", (t.registry[b_parent] or b_instance_name(b_parent) or "Instance") .. ".ChildRemoved" ) b_fire_signal(b_removed_signal, b_instance) end local b_ancestry_changed = (t.property_store[b_instance] or {}).AncestryChanged if b_ancestry_changed then b_fire_signal(b_ancestry_changed, b_instance, nil) end b_remove_from_child_cache(b_instance) t.parent_map[b_instance] = nil if t.property_store[b_instance] then t.property_store[b_instance].Parent = nil t.property_store[b_instance].__destroyed = true end end local function b_clone_instance(b_instance, b_parent) local b_store = b_copy(t.property_store[b_instance] or {}) if b_store.Archivable == false then return nil end local b_class = b_store.ClassName or b_instance_class(b_instance) or "Instance" local b_name = b_store.Name or b_class local b_clone = bj(b_name, false) t.property_store[b_clone] = b_store t.property_store[b_clone].Name = b_name t.property_store[b_clone].ClassName = b_class if b_parent then t.parent_map[b_clone] = b_parent end for _, b_child in ipairs(b_collect_children(b_instance)) do b_clone_instance(b_child, b_clone) end return b_clone end b_ensure_signal = function(b_parent, b_name, b_path) local b_signal = b_named_proxy(b_name, b_parent, b_path or (b_proxy_name(b_parent) .. "." .. aE(b_name)), "RBXScriptSignal") t.property_store[b_signal] = t.property_store[b_signal] or {} t.property_store[b_signal].__kind = "RBXScriptSignal" if G(b_parent) then t.property_store[b_parent] = t.property_store[b_parent] or {} if t.property_store[b_parent][b_name] == nil then t.property_store[b_parent][b_name] = b_signal end end t.signal_connections[b_signal] = t.signal_connections[b_signal] or {} t.signal_meta[b_signal] = t.signal_meta[b_signal] or { parent = b_parent, name = aE(b_name), fire_count = 0, last_args = {} } return b_signal end b_fire_signal = function(b_signal, ...) local b_connections = t.signal_connections[b_signal] local b_meta = t.signal_meta[b_signal] local b_signal_name = b_meta and b_meta.name or nil local b_args = {...} if #b_args == 0 and j(b_signal_name) == "string" and b_signal_name:match("MessageReceived") then local c_msg = bj("TextChatMessage", false) t.property_store[c_msg] = t.property_store[c_msg] or {} t.property_store[c_msg].ClassName = "TextChatMessage" t.property_store[c_msg].Name = "TextChatMessage" t.property_store[c_msg].Text = "mock message" local c_src = bj("TextSource", false) t.property_store[c_src] = t.property_store[c_src] or {} t.property_store[c_src].ClassName = "TextSource" t.property_store[c_src].Name = "TextSource" t.property_store[c_src].UserId = 1 t.property_store[c_msg].TextSource = c_src b_args = {c_msg} end if b_meta then b_meta.fire_count = (b_meta.fire_count or 0) + 1 b_meta.last_args = {n = #b_args, native_unpack(b_args, 1, #b_args)} end if not b_connections then return end for _, b_connection in ipairs(b_connections) do local b_info = t.connection_info[b_connection] if b_info and b_info.connected and j(b_info.callback) == "function" then local b_connection_signal_name = b_info.signal_name or b_signal_name local b_is_high_frequency = b_connection_signal_name == "Heartbeat" or b_connection_signal_name == "RenderStepped" or b_connection_signal_name == "Stepped" local b_should_invoke = true if b_is_high_frequency then b_info.invoke_count = (b_info.invoke_count or 0) + 1 if b_info.invoke_count > 1024 then b_should_invoke = false end end if b_should_invoke then local b_outer_callback_indent = t.signal_callback_indent_active == true if not b_outer_callback_indent then t.indent = t.indent + 1 t.callback_depth = (t.callback_depth or 0) + 1 end xpcall( function() b_info.callback(native_unpack(b_args)) end, function(err) az("[Callback error in " .. (b_connection_signal_name or "signal") .. "]: " .. tostring(err)) end ) if not b_outer_callback_indent then t.callback_depth = (t.callback_depth or 0) - 1 t.indent = t.indent - 1 end end if b_info.once then b_info.connected = false if t.property_store[b_connection] then t.property_store[b_connection].Connected = false end end end end end local function b_proxy_raw_index(self, key) return rawget(self, key) end local function b_proxy_raw_newindex(self, key, value) rawset(self, key, value) end local function b_proxy_raw_namecall() return nil end local b_proxy_raw_metatable = { -- Use native C builtins so anti-detection checks that inspect -- debug.getinfo(mt.__index).what observe "C". -- Must reference b_original_rawget/b_native_rawset: global rawget is reassigned later, -- and b_builtin_info must match the same function pointers as mt.__index. __index = b_original_rawget, __newindex = b_native_rawset, __namecall = b_proxy_raw_namecall } setmetatable( b_proxy_raw_metatable, { __newindex = function() error("attempt to modify a readonly table", 0) end } ) local function b_builtin_info(b_target) local function b_is_internal_source(b_source, b_short_src) local b_candidates = {b_source, b_short_src} for _, b_value in ipairs(b_candidates) do if j(b_value) == "string" then local b_lower = string.lower(b_value) if b_lower:find("runner.lua", 1, true) or b_lower:find("env%-dumper", 1, false) or b_lower:find("dumper.lua", 1, true) or b_lower:find("=(larry)", 1, true) or b_lower == "larry" then return true end end end return false end if b_target == nil then error("invalid argument #1", 0) end local b_type = j(b_target) if b_type ~= "function" then error("invalid argument #1", 0) end local b_meta = t.function_meta and t.function_meta[b_target] if b_meta then local b_what = b_meta.what or (b_meta.cclosure and "C" or "Lua") local b_source = b_meta.source_tag or (b_what == "C" and "[C]" or "=(larry)") local b_short_src = b_meta.short_src or (b_what == "C" and "[C]" or "larry") if b_is_internal_source(b_source, b_short_src) then b_what = "C" b_source = "[C]" b_short_src = "[C]" end return { source = b_source, short_src = b_short_src, what = b_what, name = b_meta.name or "anonymous", nargs = b_meta.nargs or 0, isvararg = b_meta.isvararg ~= false } end local b_name_map = { [print] = "print", [warn] = "warn", [pcall] = "pcall", [xpcall] = "xpcall", [type] = "type", [typeof] = "typeof", [tostring] = "tostring", [tonumber] = "tonumber", [loadstring] = "loadstring", [pairs] = "pairs", [ipairs] = "ipairs", [next] = "next", [require] = "require", [getfenv] = "getfenv", [setfenv] = "setfenv", [getmetatable] = "getmetatable", [setmetatable] = "setmetatable", [b_original_rawget] = "rawget", [b_native_rawset] = "rawset", [error] = "error", [b_proxy_raw_index] = "__index", [b_proxy_raw_newindex] = "__newindex", [b_proxy_raw_namecall] = "__namecall", [task.wait] = "wait", [task.spawn] = "spawn", [task.defer] = "defer", [task.delay] = "delay" } if load ~= nil then b_name_map[load] = "load" end local b_name = b_name_map[b_target] if b_name then return {source = "[C]", short_src = "[C]", what = "C", name = b_name, nargs = 0, isvararg = true} end -- Lazy cache for exploit functions defined later in the file if not t.exploit_func_cache and b_env_state.exploit_funcs then t.exploit_func_cache = {} for b_key, b_func in pairs(b_env_state.exploit_funcs) do if j(b_func) == "function" then t.exploit_func_cache[b_func] = b_key end end for b_key, b_func in pairs(_G) do if j(b_func) == "function" and not t.exploit_func_cache[b_func] then t.exploit_func_cache[b_func] = b_key end end end if t.exploit_func_cache then local b_dyn_name = t.exploit_func_cache[b_target] if b_dyn_name then return {source = "[C]", short_src = "[C]", what = "C", name = b_dyn_name, nargs = 0, isvararg = true} end end local b_native_source = nil local b_native_name = nil local b_native_nargs = 0 local b_native_isvararg = true local b_native_what = nil local b_native_info = a and a.info if j(b_native_info) == "function" then local b_ok_s, b_source = pcall(b_native_info, b_target, "s") if b_ok_s and j(b_source) == "string" and b_source ~= "" then b_native_source = b_source end local b_ok_n, b_name = pcall(b_native_info, b_target, "n") if b_ok_n and j(b_name) == "string" and b_name ~= "" then b_native_name = b_name end local b_ok_a, b_nargs, b_isvararg = pcall(b_native_info, b_target, "a") if b_ok_a and j(b_nargs) == "number" then b_native_nargs = b_nargs if b_isvararg ~= nil then b_native_isvararg = b_isvararg end end end if b_native_source ~= nil then if b_native_source == "[C]" then b_native_what = "C" elseif b_native_what == nil then b_native_what = "Lua" end local b_short_src = b_native_source == "[C]" and "[C]" or b_native_source if b_is_internal_source(b_native_source, b_short_src) then b_native_source = "[C]" b_short_src = "[C]" b_native_what = "C" end return { source = b_native_source, short_src = b_short_src, what = b_native_what or (b_native_source == "[C]" and "C" or "Lua"), name = b_native_name or "anonymous", nargs = b_native_nargs, isvararg = b_native_isvararg } end return {source = "[C]", short_src = "[C]", what = "C", name = "anonymous", nargs = 0, isvararg = true} end function b_log_introspection(b_kind, b_fn, b_extra) if not rawget(_G, "__LARRY_TRACE_INTROSPECTION") then return end t.introspection_log = t.introspection_log or {} local b_meta = t.function_meta and t.function_meta[b_fn] local b_entry = { kind = b_kind, name = b_meta and b_meta.name or "unknown", source = b_meta and (b_meta.base_source or b_meta.source) or nil, extra = b_extra, fn = b_fn, upvalues = {} } if b_meta and b_meta.upvalue_defs then for b_index, b_def in ipairs(b_meta.upvalue_defs) do b_entry.upvalues[b_index] = {name = b_def.name, value = b_def.value} end end table.insert(t.introspection_log, b_entry) end function b_mark_builtin_function(b_fn, b_name, b_nargs, b_isvararg) if j(b_fn) ~= "function" then return b_fn end t.function_meta = t.function_meta or {} local b_existing = t.function_meta[b_fn] or {} b_existing.source = "[C]" b_existing.base_source = "[C]" b_existing.source_tag = "[C]" b_existing.short_src = "[C]" b_existing.what = "C" b_existing.name = b_name or b_existing.name or "anonymous" b_existing.nargs = b_nargs or b_existing.nargs or 0 if b_isvararg == nil then if b_existing.isvararg == nil then b_existing.isvararg = true end else b_existing.isvararg = b_isvararg end b_existing.cclosure = true t.function_meta[b_fn] = b_existing return b_fn end function b_format_termination_error(b_err) local b_parts = {} local b_kind = j(b_err) if b_kind == "string" then if b_err ~= "" then b_parts[#b_parts + 1] = b_err else b_parts[#b_parts + 1] = "" end elseif b_kind == "nil" then b_parts[#b_parts + 1] = "" else local b_ok, b_rendered = g(m, b_err) if b_ok and j(b_rendered) == "string" and b_rendered ~= "" then b_parts[#b_parts + 1] = b_rendered else b_parts[#b_parts + 1] = "<" .. b_kind .. " error>" end end local b_tb_ok, b_tb = g( function() if not d then return nil end if b_kind == "string" and b_err ~= "" then return d(b_err, 2) end return d("", 2) end ) if b_tb_ok and j(b_tb) == "string" and b_tb ~= "" then local b_last = b_parts[#b_parts] if b_tb ~= b_last then b_parts[#b_parts + 1] = b_tb end end return table.concat(b_parts, "\n") end local function b_escape_pattern(b_value) return (aE(b_value):gsub("([%(%)%.%%%+%-%*%?%[%]%^%$])", "%%%1")) end local function b_pack(...) return {n = b_original_select("#", ...), ...} end local function b_current_function_env() local b_stack = t.active_env_stack if b_stack and #b_stack > 0 then return b_stack[#b_stack] end return t.function_env or t.script_env or _G end local function b_lookup_stack_env(b_start_level, b_end_level) local function b_find_env_from_info(b_info) if b_info and b_info.func then local b_meta = t.function_meta and t.function_meta[b_info.func] if b_meta and b_meta.env and b_meta.what ~= "C" and not b_meta.cclosure then return b_meta.env end end return nil end local function b_find_env_from_func(b_func) if j(b_func) == "function" then local b_meta = t.function_meta and t.function_meta[b_func] if b_meta and b_meta.env and b_meta.what ~= "C" and not b_meta.cclosure then return b_meta.env end end return nil end local b_native_info = a and a.info if j(b_native_info) == "function" then for b_level = b_start_level, b_end_level do local b_ok, b_func = pcall(b_native_info, b_level, "f") if b_ok then local b_env = b_find_env_from_func(b_func) if b_env then return b_env end end end end if debug and debug.info then for b_level = b_start_level, b_end_level do local b_ok, b_func = pcall(debug.info, b_level, "f") if b_ok then local b_env = b_find_env_from_func(b_func) if b_env then return b_env end end end end if j(c) == "function" then for b_level = b_start_level, b_end_level do local b_ok, b_info = pcall(c, b_level, "f") if b_ok then local b_env = b_find_env_from_info(b_info) if b_env then return b_env end end end end if debug and debug.getinfo then for b_level = b_start_level, b_end_level do local b_info = debug.getinfo(b_level, "f") local b_env = b_find_env_from_info(b_info) if b_env then return b_env end end end return nil end local function b_invoke_with_env(b_env, b_callable, ...) local b_stack = t.active_env_stack if not b_stack then b_stack = {} t.active_env_stack = b_stack end b_stack[#b_stack + 1] = b_env or t.function_env or t.script_env or _G local b_results = b_pack(g(b_callable, ...)) b_stack[#b_stack] = nil if not b_results[1] then error(b_results[2], 0) end return native_unpack(b_results, 2, b_results.n) end q._invoke_with_synced_globals = function(b_env, b_callable, ...) if j(b_env) ~= "table" then return b_callable(...) end local b_visible_env = b_env if b_env == b_env_state.public_env and j(b_env_state.public_values) == "table" then b_visible_env = b_env_state.public_values end local b_synced = {} for b_key, b_value in pairs(b_visible_env) do if j(b_key) == "string" and not b_env_state.hidden_keys[b_key] then table.insert( b_synced, { key = b_key, old = rawget(_G, b_key) } ) rawset(_G, b_key, b_value) end end local b_results = b_pack(g(b_callable, ...)) for _, b_entry in ipairs(b_synced) do rawset(_G, b_entry.key, b_entry.old) end if not b_results[1] then error(b_results[2], 0) end return native_unpack(b_results, 2, b_results.n) end local function b_eval_literal(b_expr) if j(b_expr) ~= "string" then return nil end if not native_loadstring then return nil end local b_load_ok, b_loader = g(native_loadstring, "return " .. b_expr) if not b_load_ok then return nil end if not b_loader then return nil end if native_setfenv then pcall(native_setfenv, b_loader, {}) end local b_ok, b_value = pcall(b_loader) if b_ok then return b_value end return nil end local function b_parse_upvalue_defs(b_source) local b_defs = {} if j(b_source) ~= "string" then return b_defs end local b_prefix = b_source:match("^(.-)return%s*function") if not b_prefix then return b_defs end for b_name, b_expr in b_prefix:gmatch("local%s+([%a_][%w_]*)%s*=%s*([^\r\n;]+)") do local b_value = b_eval_literal(b_expr) if b_value ~= nil then table.insert(b_defs, {name = b_name, expr = b_expr, value = b_value}) end end return b_defs end local function b_parse_constants(b_source) local b_constants = {} local b_literals = {} local b_seen = {} if j(b_source) ~= "string" then return b_constants, b_literals end local b_clean = b_source:gsub("%-%-%[%[.-%]%]", " "):gsub("%-%-[^\r\n]*", " ") local b_index = 1 while b_index <= #b_clean do local b_char = b_clean:sub(b_index, b_index) if b_char == '"' or b_char == "'" then local b_quote = b_char local b_end = b_index + 1 while b_end <= #b_clean do local b_cur = b_clean:sub(b_end, b_end) if b_cur == "\\" then b_end = b_end + 2 elseif b_cur == b_quote then break else b_end = b_end + 1 end end local b_raw = b_clean:sub(b_index, math.min(b_end, #b_clean)) local b_value = b_eval_literal(b_raw) if b_value ~= nil then b_seen[b_raw] = (b_seen[b_raw] or 0) + 1 table.insert(b_constants, b_value) table.insert(b_literals, {raw = b_raw, value = b_value, occurrence = b_seen[b_raw]}) end b_index = b_end + 1 else local b_raw = b_clean:sub(b_index):match("^%-?%d+%.?%d*") if b_raw and b_raw ~= "" then local b_prev = b_index > 1 and b_clean:sub(b_index - 1, b_index - 1) or "" if not b_prev:match("[%a_]") then local b_value = tonumber(b_raw) if b_value ~= nil then b_seen[b_raw] = (b_seen[b_raw] or 0) + 1 table.insert(b_constants, b_value) table.insert(b_literals, {raw = b_raw, value = b_value, occurrence = b_seen[b_raw]}) end end b_index = b_index + #b_raw else b_index = b_index + 1 end end end return b_constants, b_literals end local function b_replace_literal_occurrence(b_source, b_literal, b_value) if j(b_source) ~= "string" or j(b_literal) ~= "table" or j(b_literal.raw) ~= "string" then return b_source end local b_occurrence = b_literal.occurrence or 1 local b_pos = 1 local b_seen = 0 while true do local b_start, b_finish = b_source:find(b_literal.raw, b_pos, true) if not b_start then return b_source end b_seen = b_seen + 1 if b_seen == b_occurrence then return b_source:sub(1, b_start - 1) .. aZ(b_value) .. b_source:sub(b_finish + 1) end b_pos = b_finish + 1 end end local function b_compile_with_env(b_source, b_chunk_name, b_env) if not native_loadstring then return nil, "loadstring unavailable" end -- Luau FASTCALL builtins (type/typeof/select/rawequal) bypass setfenv; -- shadow them with locals so the env-overridden versions are used. if j(b_source) == "string" and not b_source:find("__LARRY_TYPE_BUILTIN_SHADOW", 1, true) then b_source = "local __LARRY_TYPE_BUILTIN_SHADOW=true\nlocal __larry_e=getfenv()\nlocal type,typeof,select,rawequal=__larry_e.type,__larry_e.typeof,__larry_e.select or select,__larry_e.rawequal or rawequal\n" .. b_source end local b_ok, b_loaded, b_err = g(native_loadstring, b_source, b_chunk_name) if not b_ok then return nil, b_loaded end if not b_loaded then return nil, b_err end if native_setfenv then pcall(native_setfenv, b_loaded, b_env or _G) end return b_loaded end local function b_apply_function_source(b_meta) local b_source = b_meta and (b_meta.base_source or b_meta.source) if j(b_source) ~= "string" then return b_source end if b_meta and not b_meta.use_env_upvalues and b_meta.upvalue_defs and b_meta.upvalue_overrides then for b_index, b_value in pairs(b_meta.upvalue_overrides) do local b_def = b_meta.upvalue_defs[b_index] if b_def then local b_pattern = "local%s+" .. b_def.name .. "%s*=%s*" .. b_escape_pattern(b_def.expr) b_source = b_source:gsub(b_pattern, "local " .. b_def.name .. " = " .. aZ(b_value), 1) end end end if b_meta and b_meta.constant_overrides and b_meta.literals then for b_index, b_value in pairs(b_meta.constant_overrides) do local b_literal = b_meta.literals[b_index] if b_literal then b_source = b_replace_literal_occurrence(b_source, b_literal, b_value) end end end return b_source end local b_make_wrapped_function local b_get_synthetic_values local b_get_effective_synthetic_values local function b_wrap_function_result(b_parent_meta, b_value) if j(b_value) ~= "function" then return b_value end if t.function_meta and t.function_meta[b_value] then return b_value end local b_child_meta = { source = b_parent_meta and b_parent_meta.source or nil, base_source = b_parent_meta and (b_parent_meta.base_source or b_parent_meta.source) or nil, source_tag = b_parent_meta and b_parent_meta.source_tag or "=(loadstring)", short_src = b_parent_meta and b_parent_meta.short_src or "loadstring", env = b_parent_meta and (b_parent_meta.env or _G) or _G, name = "anonymous", what = "Lua", nargs = 0, isvararg = true, wrap_returns = false, synthetic_upvalue_overrides = {}, native_fn = b_value } b_child_meta.upvalue_defs = b_parse_upvalue_defs(b_child_meta.base_source) b_child_meta.upvalue_overrides = {} b_child_meta.constants, b_child_meta.literals = b_parse_constants(b_child_meta.base_source) b_child_meta.constant_overrides = {} b_child_meta.vm_dispatch = j(b_child_meta.base_source) == "string" and ( b_child_meta.base_source:find('__LARRY_UPVALUES["Y"]', 1, true) ~= nil or b_child_meta.base_source:find('__LARRY_UPVALUES["V"]', 1, true) ~= nil ) local b_original = b_value local function b_child_runner(...) return q._invoke_with_synced_globals( b_child_meta.env, function(...) local b_source = b_apply_function_source(b_child_meta) local b_chunk, b_err = b_compile_with_env(b_source, b_child_meta.source_tag, b_child_meta.env) if b_chunk then local b_ok, b_loaded = g(b_chunk) if b_ok and j(b_loaded) == "function" then return b_loaded(...) end end return b_original(...) end, ... ) end return b_make_wrapped_function(b_child_runner, b_child_meta) end b_make_wrapped_function = function(b_runner, b_meta) local b_wrapper local b_local_meta = b_meta or {} b_wrapper = function(...) local b_state = t.function_meta and t.function_meta[b_wrapper] local b_hook = t.function_hooks and t.function_hooks[b_wrapper] local function b_dispatch(...) if b_state and b_state.synthetic_call_override_values and #b_state.synthetic_call_override_values > 0 then return native_unpack(b_state.synthetic_call_override_values, 1, #b_state.synthetic_call_override_values) end if b_hook and not (b_state and b_state._dispatching) then if b_state then b_state._dispatching = true end local b_results = b_pack(b_hook(...)) if b_state then b_state._dispatching = nil end for b_index = 1, b_results.n do b_results[b_index] = b_wrap_function_result(b_state, b_results[b_index]) end return native_unpack(b_results, 1, b_results.n) end local b_results = b_pack(b_runner(...)) for b_index = 1, b_results.n do b_results[b_index] = b_wrap_function_result(b_state, b_results[b_index]) end return native_unpack(b_results, 1, b_results.n) end t.call_depth = (t.call_depth or 0) + 1 if t.call_depth > 1024 then t.call_depth = t.call_depth - 1 i("stack overflow", 0) end local b_args = b_pack(...) b_emit_function_call_log(b_state or b_local_meta, b_args) local b_results = b_pack(g(function() return b_invoke_with_env((b_state and b_state.env) or b_local_meta.env, b_dispatch, native_unpack(b_args, 1, b_args.n)) end)) t.call_depth = (t.call_depth or 1) - 1 if t.call_depth < 0 then t.call_depth = 0 end if not b_results[1] then i(b_results[2], 0) end return native_unpack(b_results, 2, b_results.n) end b_local_meta.runner = b_runner t.function_meta[b_wrapper] = b_local_meta return b_wrapper end local function b_function_old_proxy(b_target) local b_meta = t.function_meta and t.function_meta[b_target] if not b_meta then return nil end if b_meta.old_proxy then return b_meta.old_proxy end b_meta.old_proxy = b_make_wrapped_function( function(...) return b_meta.runner(...) end, { source = b_meta.source, base_source = b_meta.base_source, source_tag = b_meta.source_tag, short_src = b_meta.short_src, env = b_meta.env, name = b_meta.name, what = b_meta.what, nargs = b_meta.nargs, isvararg = b_meta.isvararg, cclosure = b_meta.cclosure, wrap_returns = false } ) return b_meta.old_proxy end local function b_ensure_hookable_function(b_fn) if j(b_fn) ~= "function" then return nil end if t.function_meta and t.function_meta[b_fn] then return b_fn end for b_name, b_value in pairs(_G) do if b_value == b_fn then local b_wrapper = b_make_wrapped_function( function(...) return b_fn(...) end, { name = b_name, source_tag = "[C]", short_src = "[C]", what = "C", nargs = 0, isvararg = true, cclosure = true, wrap_returns = false } ) _G[b_name] = b_wrapper return b_wrapper end end return nil end local function b_wrap_defined_function(b_fn, b_source, b_name, b_upvalue_names, b_upvalue_map) if j(b_fn) ~= "function" then return b_fn end local b_prefix_lines = {} for _, b_up_name in ipairs(b_upvalue_names or {}) do table.insert(b_prefix_lines, "local " .. b_up_name .. " = __LARRY_UPVALUES[" .. b_quote_luau_string(b_up_name) .. "]") end local b_full_source = ((#b_prefix_lines > 0) and (table.concat(b_prefix_lines, "\n") .. "\n") or "") .. (b_source or "") local b_meta = { source = b_full_source, base_source = b_full_source, source_tag = "=(defined_function)", short_src = "defined", env = t.function_env or t.script_env or _G, name = b_name or "anonymous", what = "Lua", nargs = 0, isvararg = true, wrap_returns = true, use_env_upvalues = true, upvalue_names = b_upvalue_names or {}, upvalue_defs = {}, upvalue_overrides = {}, synthetic_upvalue_overrides = {}, native_fn = b_fn } b_meta.vm_dispatch = b_full_source:find('__LARRY_UPVALUES["Y"]', 1, true) ~= nil or b_full_source:find('__LARRY_UPVALUES["V"]', 1, true) ~= nil b_emit_defined_function_source(b_meta) b_meta.constants, b_meta.literals = b_parse_constants(b_source) b_meta.constant_overrides = {} for b_index, b_up_name in ipairs(b_meta.upvalue_names) do local b_value = b_upvalue_map and b_upvalue_map[b_up_name] or nil b_meta.upvalue_defs[b_index] = { name = b_up_name, expr = "__LARRY_UPVALUES[" .. b_quote_luau_string(b_up_name) .. "]", value = b_value } end local function b_rebuild(...) local b_env = b_merge_function_env(b_meta.env, {}) b_env.__LARRY_UPVALUES = {} for b_index, b_up_name in ipairs(b_meta.upvalue_names) do if b_meta.upvalue_overrides and b_meta.upvalue_overrides[b_index] ~= nil then b_env.__LARRY_UPVALUES[b_up_name] = b_meta.upvalue_overrides[b_index] else b_env.__LARRY_UPVALUES[b_up_name] = b_meta.upvalue_defs[b_index] and b_meta.upvalue_defs[b_index].value or nil end end return q._invoke_with_synced_globals( b_env, function(...) local b_compiled, b_err = b_compile_with_env(b_apply_function_source(b_meta), b_meta.source_tag, b_env) if not b_compiled then error(b_err or "failed to rebuild function", 0) end local b_loaded = b_compiled() if j(b_loaded) == "function" then return b_loaded(...) end return b_loaded end, ... ) end return b_make_wrapped_function( function(...) if b_meta.vm_dispatch and (native_next(b_meta.synthetic_upvalue_overrides) or native_next(b_meta.constant_overrides)) then local b_ok, b_values = g(b_get_effective_synthetic_values, b_meta) if not b_ok then b_values = nil end if b_values and #b_values > 0 then return native_unpack(b_values, 1, #b_values) end end if native_next(b_meta.upvalue_overrides) or native_next(b_meta.constant_overrides) then return b_rebuild(...) end return b_fn(...) end, b_meta ) end b_get_synthetic_values = function(b_meta) if not b_meta or not b_meta.vm_dispatch or j(b_meta.native_fn) ~= "function" then return nil end if b_meta.synthetic_values then return b_meta.synthetic_values end local b_insert = table and table.insert local b_select = select if j(b_insert) ~= "function" or j(b_select) ~= "function" or j(g) ~= "function" then return {} end local function b_collect(...) local b_values = {} local b_count = b_select("#", ...) for b_index = 1, b_count do local b_value = b_select(b_index, ...) if j(b_value) == "string" or j(b_value) == "number" or j(b_value) == "boolean" then b_insert(b_values, b_value) end end return b_values end local b_ok0, a0, b0, c0, d0 = g(b_meta.native_fn) local b_values = b_ok0 and b_collect(a0, b0, c0, d0) or {} if #b_values == 0 then local b_ok1, a1, b1, c1, d1 = g(b_meta.native_fn, 0) if b_ok1 then b_values = b_collect(a1, b1, c1, d1) end end b_meta.synthetic_values = b_values return b_values end b_get_effective_synthetic_values = function(b_meta) local b_source_values = b_get_synthetic_values(b_meta) or {} local b_values = b_copy(b_source_values) if not b_values or #b_values == 0 then return b_values end if b_meta.synthetic_upvalue_overrides and b_meta.synthetic_upvalue_overrides[1] ~= nil then b_values[1] = b_meta.synthetic_upvalue_overrides[1] end if b_meta.constant_overrides then for b_index, b_value in D(b_meta.constant_overrides) do b_values[b_index] = b_value end end return b_values end local function b_proxy_kind(b_proxy) if not G(b_proxy) then return nil end local b_store = t.property_store[b_proxy] if b_store and b_store.__kind then return b_store.__kind end local b_reg = t.registry[b_proxy] or "" if b_reg:match("^Vector3") then return "Vector3" end if b_reg:match("^CFrame") then return "CFrame" end if b_reg:match("^Vector2") then return "Vector2" end if b_reg:match("^UDim2") then return "UDim2" end if b_reg:match("^UDim") then return "UDim" end if b_reg:match("^Color3") then return "Color3" end if b_reg:match("^BrickColor") then return "BrickColor" end if b_reg:match("^Rect") then return "Rect" end if b_reg:match("^Ray") then return "Ray" end if b_reg:match("^NumberRange") then return "NumberRange" end if b_reg:match("^NumberSequence") then return "NumberSequence" end if b_reg:match("^PhysicalProperties") then return "PhysicalProperties" end return nil end b_property_type_rules = { Name = "string", DisplayName = "string", JobId = "string", Source = "string", UserId = "number", FollowUserId = "number", PlaceId = "number", GameId = "number", placeId = "number", gameId = "number", MaxPlayers = "number", RespawnTime = "number", RequestQueueSize = "number", CharacterMaxSlopeAngle = "number", MaxSlopeAngle = "number", HipHeight = "number", NameDisplayDistance = "number", HealthDisplayDistance = "number", FieldOfView = "number", Steer = "number", Throttle = "number", P = "number", D = "number", CameraMinZoomDistance = "number", CameraMaxZoomDistance = "number", EnvironmentDiffuseScale = "number", EnvironmentSpecularScale = "number", WaterWaveSize = "number", WaterWaveSpeed = "number", WaterReflectance = "number", WaterTransparency = "number", AirDensity = "number", WaterColor = "Color3", ClockTime = "number", IsEdit = "boolean", Parent = "InstanceOrNil", Character = "InstanceOrNil", PlayerGui = "InstanceOrNil", PlayerScripts = "InstanceOrNil", Backpack = "InstanceOrNil", LocalPlayer = "InstanceOrNil", Terrain = "InstanceOrNil", CurrentCamera = "InstanceOrNil", PrimaryPart = "InstanceOrNil", HumanoidRootPart = "InstanceOrNil", CameraSubject = "InstanceOrNil", CameraOffset = "Vector3", MoveDirection = "Vector3", Part0 = "InstanceOrNil", Part1 = "InstanceOrNil", Attachment0 = "InstanceOrNil", Position = "Vector3", Orientation = "Vector3", Size = "Vector3", MaxTorque = "Vector3", CustomPhysicalProperties = "PhysicalProperties", CurrentPhysicalProperties = "PhysicalProperties", CFrame = "CFrame", WorldPivot = "CFrame", Color = "Color3", BrickColor = "BrickColor", Ambient = "Color3", OutdoorAmbient = "Color3", SourceLocaleId = "string", PlayerEmulationEnabled = "boolean", OnInvoke = "function", OnClientInvoke = "function", OnServerInvoke = "function", Shape = "EnumItem", TopSurface = "EnumItem", BottomSurface = "EnumItem", FrontSurface = "EnumItem", BackSurface = "EnumItem", LeftSurface = "EnumItem", RightSurface = "EnumItem", MembershipType = "EnumItem", AmbientReverb = "EnumItem", RunState = "EnumItem", CameraType = "EnumItem", CreatorType = "EnumItem", PreferredInput = "EnumItem", PlaybackState = "EnumItem", Material = "EnumItem", FloorMaterial = "EnumItem", DisplayDistanceType = "EnumItem", VelocityConstraintMode = "EnumItem", Visible = "boolean", AbsolutePosition = "Vector2", AbsoluteSize = "Vector2", AbsoluteRotation = "number", AnchorPoint = "Vector2", CanvasPosition = "Vector2", CanvasSize = "UDim2", TextBounds = "Vector2", Rotation = "number", ZIndex = "int", LayoutOrder = "int", ClipsDescendants = "boolean", Interactable = "boolean", BackgroundColor3 = "Color3", BackgroundTransparency = "number", BorderColor3 = "Color3", BorderSizePixel = "int", TextColor3 = "Color3", TextSize = "number", TextScaled = "boolean", TextWrapped = "boolean", TextEditable = "boolean", Font = "EnumItem", Image = "string", CursorIcon = "string", ColorMap = "string", MetalnessMap = "string", NormalMap = "string", RoughnessMap = "string", ImageColor3 = "Color3", ImageTransparency = "number", ImageRectOffset = "Vector2", ImageRectSize = "Vector2", Offset = "Vector2", SliceCenter = "Rect", SliceScale = "number", Scale = "number", TileSize = "UDim2", ScaleType = "EnumItem", AlphaMode = "EnumItem", ResampleMode = "EnumItem", HorizontalScrollBarInset = "EnumItem", VerticalScrollBarInset = "EnumItem", ScrollBarThickness = "number", ScrollingDirection = "EnumItem", ScrollingEnabled = "boolean", TopImage = "string", BottomImage = "string", MidImage = "string", Active = "boolean", Draggable = "boolean", Selectable = "boolean", SelectionGroup = "boolean", AutoButtonColor = "boolean", AutoRotate = "boolean", UseJumpPower = "boolean", PlatformStand = "boolean", Sit = "boolean", Jump = "boolean", Modal = "boolean", Selected = "boolean", SelectedObject = "InstanceOrNil", SelectedCoreObject = "InstanceOrNil", ResetPlayerGuiOnSpawn = "boolean", Style = "EnumItem", TextStrokeColor3 = "Color3", TextStrokeTransparency = "number", TextTransparency = "number", TextXAlignment = "EnumItem", TextYAlignment = "EnumItem", PlaceholderColor3 = "Color3", PlaceholderText = "string", ClearTextOnFocus = "boolean", MultiLine = "boolean", CursorPosition = "number", MaxActivationDistance = "number", SelectionStart = "number", MaxLength = "number", LineHeight = "number", TextFits = "boolean", RichText = "boolean", LineJoinMode = "EnumItem", BorderStrokePosition = "EnumItem", Thickness = "number", CornerRadius = "UDim", ApplyStrokeMode = "EnumItem", PaddingLeft = "UDim", PaddingRight = "UDim", PaddingTop = "UDim", PaddingBottom = "UDim", Padding = "UDim", VectorVelocity = "Vector3", MaxForce = "number", FillDirection = "EnumItem", HorizontalAlignment = "EnumItem", VerticalAlignment = "EnumItem", SortOrder = "EnumItem", CellPadding = "UDim2", CellSize = "UDim2", StartCorner = "EnumItem", FillDirectionMaxCells = "number", AspectRatio = "number", AspectType = "EnumItem", DominantAxis = "EnumItem", MaxSize = "Vector2", MinSize = "Vector2", MinTextSize = "number", MaxTextSize = "number", Archivable = "boolean", Locked = "boolean", ResetOnSpawn = "boolean", Enabled = "boolean", AlwaysOnTop = "boolean", DisplayOrder = "number", IgnoreGuiInset = "boolean", ScreenInsets = "EnumItem", ZIndexBehavior = "EnumItem", GroupColor3 = "Color3", GroupTransparency = "number", AutoLocalize = "boolean", RootLocalizationTable = "InstanceOrNil", SelectionBehaviorUp = "EnumItem", SelectionBehaviorDown = "EnumItem", SelectionBehaviorLeft = "EnumItem", SelectionBehaviorRight = "EnumItem", NextSelectionUp = "InstanceOrNil", NextSelectionDown = "InstanceOrNil", NextSelectionLeft = "InstanceOrNil", NextSelectionRight = "InstanceOrNil", NextSelection = "InstanceOrNil", GuiInputBegan = "EnumItem", SelectionImageObject = "InstanceOrNil", AutomaticSize = "EnumItem", BorderMode = "EnumItem", ThemeTag = "table", InputBegan = "function", InputChanged = "function", InputEnded = "function", MouseEnter = "function", MouseLeave = "function", MouseButton1Click = "function", MouseButton1Down = "function", MouseButton1Up = "function", MouseButton2Click = "function", MouseButton2Down = "function", MouseButton2Up = "function", Activated = "function", FocusLost = "function", Focused = "function" } local b_readonly_properties = { ClassName = true, PlaybackLoudness = true, ReceiveAge = true, TextBounds = true, AbsolutePosition = true, AbsoluteSize = true, AbsoluteRotation = true, AutoLocalize = true, PrivateServerId = true, PrivateServerOwnerId = true } local b_enum_property_families = { Font = "Enum.Font", FontWeight = "Enum.FontWeight", FontStyle = "Enum.FontStyle", SortOrder = "Enum.SortOrder", Technology = "Enum.Technology", Material = "Enum.Material", FloorMaterial = "Enum.Material", TopSurface = "Enum.SurfaceType", BottomSurface = "Enum.SurfaceType", FrontSurface = "Enum.SurfaceType", BackSurface = "Enum.SurfaceType", LeftSurface = "Enum.SurfaceType", RightSurface = "Enum.SurfaceType", PreferredInput = "Enum.PreferredInput", DisplayDistanceType = "Enum.HumanoidDisplayDistanceType", ResampleMode = "Enum.ResamplerMode", HorizontalScrollBarInset = "Enum.ScrollBarInset", VerticalScrollBarInset = "Enum.ScrollBarInset", ScreenInsets = "Enum.ScreenInsets", AutomaticSize = "Enum.AutomaticSize", VerticalAlignment = "Enum.VerticalAlignment" } local function b_runtime_value_kind(b_value) if G(b_value) then local b_kind = b_proxy_kind(b_value) if b_kind then return b_kind end local b_reg = t.registry[b_value] or "" if b_reg:match("^Enum%.") then return "EnumItem" end return "Instance" end return j(b_value) end local function b_property_accepts_value(b_expected, b_value) if b_expected == nil then return true end if b_expected == "string" then return j(b_value) == "string" end if b_expected == "number" or b_expected == "int" then return j(b_value) == "number" end if b_expected == "boolean" then return j(b_value) == "boolean" end if b_expected == "function" then return j(b_value) == "function" end if b_expected == "InstanceOrNil" then return b_value == nil or G(b_value) end if b_expected == "Vector3" or b_expected == "CFrame" or b_expected == "Color3" or b_expected == "Vector2" or b_expected == "UDim" or b_expected == "UDim2" then return G(b_value) and b_proxy_kind(b_value) == b_expected end if b_expected == "BrickColor" then return G(b_value) and b_proxy_kind(b_value) == "BrickColor" end if b_expected == "EnumItem" then return b_is_enum_item_value(b_value) end return true end local function b_coerce_enum_property_value(b_instance, b_property, b_value) local b_store = b_instance and t.property_store[b_instance] or nil local b_existing = b_store and b_store[b_property] or nil local b_existing_parent = nil if b_is_enum_item_value(b_existing) then local b_existing_reg = t.registry[b_existing] or "" b_existing_parent = b_existing_reg:match("^(Enum%.[^%.]+)%.") end local b_parent = b_existing_parent or b_enum_property_families[b_property] if j(b_value) == "number" then if b_parent and b_enum_members[b_parent] then local b_member = b_enum_members[b_parent][b_value] if b_member then return b_enum_item(b_parent .. "." .. b_member) end return b_enum_item(b_parent .. "." .. b_enum_members[b_parent][1]) end return b_value end if j(b_value) == "string" and b_parent and b_enum_members[b_parent] then local b_text = aE(b_value) local b_leaf = b_text:match("([^%.]+)$") or b_text for _, b_member in ipairs(b_enum_members[b_parent]) do if aE(b_member) == b_leaf then return b_enum_item(b_parent .. "." .. b_member) end end if rawget(_G, "__LARRY_FAILOPEN_ENUM_MEMBERS") ~= false then return b_enum_item(b_parent .. "." .. b_leaf) end end if j(b_value) == "string" and b_parent == nil and b_property_type_rules[b_property] == "EnumItem" then local b_text = aE(b_value) local b_leaf = b_text:match("([^%.]+)$") or b_text local b_guess_parent = "Enum." .. aE(b_property) if b_enum_members[b_guess_parent] then for _, b_member in ipairs(b_enum_members[b_guess_parent]) do if aE(b_member) == b_leaf then return b_enum_item(b_guess_parent .. "." .. b_member) end end end if rawget(_G, "__LARRY_FAILOPEN_ENUM_MEMBERS") ~= false then return b_enum_item(b_guess_parent .. "." .. b_leaf) end end return b_value end local function b_try_coerce_by_expected_type(b_expected, b_value) if (b_expected == "number" or b_expected == "int") and j(b_value) == "string" then local b_num = tonumber(aE(b_value)) if b_num ~= nil then if b_expected == "int" then b_num = math.floor(b_num) end return true, b_num end end if (b_expected == "number" or b_expected == "int") and G(b_value) then -- Proxy Instance assigned to a numeric property: extract .Value or default to 0 local b_store = t.property_store[b_value] or {} local b_num = tonumber(b_store.Value) or tonumber(b_store.value) or 0 if b_expected == "int" then b_num = math.floor(b_num) end return true, b_num end if b_expected == "string" and j(b_value) == "string" then return true, b_value end if b_expected == "boolean" and j(b_value) == "string" then local b_text = aE(b_value):lower() if b_text == "true" then return true, true end if b_text == "false" then return true, false end end return false, b_value end local function b_coerce_string_property_value(b_property, b_value) if b_property_type_rules[b_property] ~= "string" then return b_value end if G(b_value) then local b_store = t.property_store[b_value] or {} local b_name = b_store.Name or t.registry[b_value] or "" return aE(b_name) end return b_value end local function b_resolve_expected_property_type(b_instance, b_property, b_value) local b_expected = b_property_type_rules[b_property] local b_class_name = b_instance and t.property_store[b_instance] and t.property_store[b_instance].ClassName or nil local b_store = b_instance and t.property_store[b_instance] or nil local b_existing_value = b_store and b_store[b_property] or nil local b_existing_kind = G(b_existing_value) and b_proxy_kind(b_existing_value) or nil -- Roblox services are not interchangeable: don't allow global property tables to -- implicitly "add" members to services. Services only have members explicitly seeded. if b_class_name and aJ and aJ[b_class_name] then if b_property ~= "Name" and b_property ~= "ClassName" and b_property ~= "Parent" then if not (b_store and b_store[b_property] ~= nil) then return nil, b_class_name, b_store end end end if b_existing_kind == "Vector3" or b_existing_kind == "Vector2" or b_existing_kind == "UDim" or b_existing_kind == "UDim2" or b_existing_kind == "CFrame" or b_existing_kind == "Color3" or b_existing_kind == "BrickColor" then b_expected = b_existing_kind end local b_mock_kind = q._mock_expected_property_kind(b_class_name, b_property) if b_mock_kind ~= nil then b_expected = b_mock_kind end if b_property == "Position" and not q._class_uses_spatial_vectors(b_class_name) and not q._class_uses_gui_udim2(b_class_name) then local b_value_kind = G(b_value) and b_proxy_kind(b_value) or nil if b_value_kind == "Vector2" or b_value_kind == "UDim2" then b_expected = b_value_kind end end if b_property == "Orientation" and b_value == nil then b_expected = "Vector3" end if b_property == "Size" and q._mock_expected_property_kind(b_class_name, b_property) == nil then return nil, b_class_name, b_store end return b_expected, b_class_name, b_store end local function b_default_value_for_expected_type(b_expected, b_property) b_property = aE(b_property or "") if b_expected == "EnumItem" and b_property == "ScreenInsets" then return b_enum_item("Enum.ScreenInsets.CoreUISafeInsets") end if b_expected == "string" then return "" end if b_expected == "number" then return 0 end if b_expected == "boolean" then return false end if b_expected == "Vector3" then return Vector3.new(0, 0, 0) end if b_expected == "Vector2" then return Vector2.new(0, 0) end if b_expected == "UDim" then return UDim.new(0, 0) end if b_expected == "UDim2" then return UDim2.new(0, 0, 0, 0) end if b_expected == "CFrame" then return CFrame.new(0, 0, 0) end if b_expected == "Color3" then return Color3.new(1, 1, 1) end if b_expected == "BrickColor" then return BrickColor.new("Medium stone grey") end if b_expected == "InstanceOrNil" then return nil end if b_expected == "EnumItem" then return b_enum_item("Enum.Material.Plastic") end return nil end local function b_validate_property_assignment(b_instance, b_property, b_value) local b_expected, b_class_name, b_store = b_resolve_expected_property_type(b_instance, b_property, b_value) if b_property == "Size" and b_store and b_store.__drawing_object == true then local b_kind = G(b_value) and b_proxy_kind(b_value) or nil if j(b_value) == "number" or b_kind == "Vector2" then return end end if b_class_name == "GuiService" and b_property == "SelectedObject" then if b_is_gui_selection_value(b_value) then return end error("Unable to assign property SelectedObject. GuiObject expected, got " .. b_runtime_value_kind(b_value), 3) end if b_class_name == "Camera" and b_property == "FieldOfView" then if j(b_value) ~= "number" or b_value ~= b_value then error("Unable to assign property FieldOfView. number expected, got " .. b_runtime_value_kind(b_value), 3) end return end if b_class_name == "BlurEffect" and b_property == "Size" then if j(b_value) ~= "number" or b_value ~= b_value then error("Unable to assign property Size. number expected, got " .. b_runtime_value_kind(b_value), 3) end return end if b_expected == "EnumItem" and j(b_value) == "number" then return end if b_property_accepts_value(b_expected, b_value) then return end local b_can_coerce, b_coerced = b_try_coerce_by_expected_type(b_expected, b_value) if b_can_coerce and b_property_accepts_value(b_expected, b_coerced) then if b_instance and t.property_store[b_instance] then t.property_store[b_instance][b_property] = b_coerced end return end if rawget(b_env_state.public_values or _G, "__LARRY_FAILOPEN_PROPERTY_TYPES") ~= false then -- Keep dump flow alive when scripts rely on executor-specific loose typing. return end local b_actual = b_runtime_value_kind(b_value) error( string.format( "Unable to assign property %s. %s expected, got %s", b_property, b_expected, b_actual ), 3 ) end local function b_validate_instance_self(b_self, b_method_name) if not G(b_self) then error(string.format("Expected ':' not '.' calling member function %s", b_method_name or "method"), 0) end end local function b_vector_components(b_value) if G(b_value) and b_proxy_kind(b_value) == "Vector3" then local b_store = t.property_store[b_value] or {} return b_store.X or 0, b_store.Y or 0, b_store.Z or 0 end return 0, 0, 0 end local function b_cframe_components(b_value) if G(b_value) and b_proxy_kind(b_value) == "CFrame" then local b_store = t.property_store[b_value] or {} return b_store.X or 0, b_store.Y or 0, b_store.Z or 0, b_store.R00 or 1, b_store.R01 or 0, b_store.R02 or 0, b_store.R10 or 0, b_store.R11 or 1, b_store.R12 or 0, b_store.R20 or 0, b_store.R21 or 0, b_store.R22 or 1 end return 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 end local function b_cframe_angle_components(b_rx, b_ry, b_rz) local b_sx, b_cx = math.sin(b_rx or 0), math.cos(b_rx or 0) local b_sy, b_cy = math.sin(b_ry or 0), math.cos(b_ry or 0) local b_sz, b_cz = math.sin(b_rz or 0), math.cos(b_rz or 0) -- Match Roblox CFrame.Angles / fromEulerAnglesXYZ handedness so -- CFrame:VectorToWorldSpace agrees with Rodrigues (axis:Cross(vector)). return b_cy * b_cz, -b_cy * b_sz, b_sy, b_sx * b_sy * b_cz + b_cx * b_sz, -b_sx * b_sy * b_sz + b_cx * b_cz, -b_sx * b_cy, -b_cx * b_sy * b_cz + b_sx * b_sz, b_cx * b_sy * b_sz + b_sx * b_cz, b_cx * b_cy end q._cframe_to_euler_xyz = function(b_cf) local _, _, _, b_r00, b_r01, b_r02, b_r10, b_r11, b_r12, b_r20, b_r21, b_r22 = b_cframe_components(b_cf) local b_ry = math.asin(math.max(-1, math.min(1, -(b_r02 or 0)))) local b_cy = math.cos(b_ry) if math.abs(b_cy) > 1e-6 then return math.atan2(b_r12 or 0, b_r22 or 1), b_ry, math.atan2(b_r01 or 0, b_r00 or 1) end return math.atan2(-(b_r21 or 0), b_r11 or 1), b_ry, 0 end q._cframe_to_euler_yxz = function(b_cf) local _, _, _, b_r00, b_r01, b_r02, b_r10, b_r11, b_r12, b_r20, b_r21, b_r22 = b_cframe_components(b_cf) local b_rx = math.asin(math.max(-1, math.min(1, b_r12 or 0))) local b_cx = math.cos(b_rx) if math.abs(b_cx) > 1e-6 then return b_rx, math.atan2(-(b_r02 or 0), b_r22 or 1), math.atan2(-(b_r10 or 0), b_r11 or 1) end return b_rx, math.atan2(b_r20 or 0, b_r00 or 1), 0 end q._cframe_to_axis_angle = function(b_cf) local _, _, _, b_r00, b_r01, b_r02, b_r10, b_r11, b_r12, b_r20, b_r21, b_r22 = b_cframe_components(b_cf) local b_trace = (b_r00 or 1) + (b_r11 or 1) + (b_r22 or 1) local b_angle = math.acos(math.max(-1, math.min(1, (b_trace - 1) / 2))) if math.abs(b_angle) <= 1e-6 then return Vector3.new(1, 0, 0), 0 end local b_denom = 2 * math.sin(b_angle) if math.abs(b_denom) <= 1e-6 then local b_ax = math.sqrt(math.max(0, ((b_r00 or 1) + 1) / 2)) local b_ay = math.sqrt(math.max(0, ((b_r11 or 1) + 1) / 2)) local b_az = math.sqrt(math.max(0, ((b_r22 or 1) + 1) / 2)) return Vector3.new(b_ax, b_ay, b_az), b_angle end return Vector3.new( ((b_r21 or 0) - (b_r12 or 0)) / b_denom, ((b_r02 or 0) - (b_r20 or 0)) / b_denom, ((b_r10 or 0) - (b_r01 or 0)) / b_denom ), b_angle end q._clone_sequence_keypoint = function(b_kind, b_keypoint) if not G(b_keypoint) then return nil end local b_key_kind = b_proxy_kind(b_keypoint) if b_kind == "NumberSequence" and b_key_kind == "NumberSequenceKeypoint" then local b_store = t.property_store[b_keypoint] or {} return NumberSequenceKeypoint.new(b_store.Time or 0, b_store.Value or 0, b_store.Envelope or 0) end if b_kind == "ColorSequence" and b_key_kind == "ColorSequenceKeypoint" then local b_store = t.property_store[b_keypoint] or {} return ColorSequenceKeypoint.new(b_store.Time or 0, b_store.Value or Color3.new(1, 1, 1)) end return nil end q._clone_sequence_keypoints = function(b_kind, b_keypoints) local b_result = {} if j(b_keypoints) ~= "table" then return b_result end for _, b_keypoint in ipairs(b_keypoints) do local b_clone = q._clone_sequence_keypoint(b_kind, b_keypoint) if b_clone ~= nil then table.insert(b_result, b_clone) end end return b_result end local function b_cframe_apply(b_cf, b_vx, b_vy, b_vz) local b_x, b_y, b_z, b_r00, b_r01, b_r02, b_r10, b_r11, b_r12, b_r20, b_r21, b_r22 = b_cframe_components(b_cf) return b_x + b_r00 * b_vx + b_r01 * b_vy + b_r02 * b_vz, b_y + b_r10 * b_vx + b_r11 * b_vy + b_r12 * b_vz, b_z + b_r20 * b_vx + b_r21 * b_vy + b_r22 * b_vz end local function b_cframe_unapply(b_cf, b_vx, b_vy, b_vz) local b_x, b_y, b_z, b_r00, b_r01, b_r02, b_r10, b_r11, b_r12, b_r20, b_r21, b_r22 = b_cframe_components(b_cf) local b_dx, b_dy, b_dz = b_vx - b_x, b_vy - b_y, b_vz - b_z return b_r00 * b_dx + b_r10 * b_dy + b_r20 * b_dz, b_r01 * b_dx + b_r11 * b_dy + b_r21 * b_dz, b_r02 * b_dx + b_r12 * b_dy + b_r22 * b_dz end q._udim_pixels = function(b_udim, b_axis_size) if not G(b_udim) or b_proxy_kind(b_udim) ~= "UDim" then return 0 end local b_store = t.property_store[b_udim] or {} return (tonumber(b_store.Scale) or 0) * (tonumber(b_axis_size) or 0) + (tonumber(b_store.Offset) or 0) end q._compute_absolute_position = function(b_instance, b_class_name) if not q._class_uses_gui_udim2(b_class_name) then return Vector2.new(0, 0) end local b_store = t.property_store[b_instance] or {} local b_parent = t.parent_map[b_instance] local b_parent_width, b_parent_height = 1920, 1080 if b_parent then local b_parent_store = t.property_store[b_parent] or {} local b_parent_abs_size = b_parent_store.AbsoluteSize if G(b_parent_abs_size) and b_proxy_kind(b_parent_abs_size) == "Vector2" then local b_parent_abs_store = t.property_store[b_parent_abs_size] or {} b_parent_width = tonumber(b_parent_abs_store.X) or b_parent_width b_parent_height = tonumber(b_parent_abs_store.Y) or b_parent_height end end local b_position = b_store.Position local b_scale_x, b_offset_x, b_scale_y, b_offset_y = 0, 0, 0, 0 if G(b_position) and b_proxy_kind(b_position) == "UDim2" then local b_pos_store = t.property_store[b_position] or {} local b_x = b_pos_store.X local b_y = b_pos_store.Y if G(b_x) and b_proxy_kind(b_x) == "UDim" then local b_x_store = t.property_store[b_x] or {} b_scale_x = tonumber(b_x_store.Scale) or 0 b_offset_x = tonumber(b_x_store.Offset) or 0 end if G(b_y) and b_proxy_kind(b_y) == "UDim" then local b_y_store = t.property_store[b_y] or {} b_scale_y = tonumber(b_y_store.Scale) or 0 b_offset_y = tonumber(b_y_store.Offset) or 0 end end local b_anchor = b_store.AnchorPoint local b_anchor_x, b_anchor_y = 0, 0 if G(b_anchor) and b_proxy_kind(b_anchor) == "Vector2" then local b_anchor_store = t.property_store[b_anchor] or {} b_anchor_x = tonumber(b_anchor_store.X) or 0 b_anchor_y = tonumber(b_anchor_store.Y) or 0 end local b_abs_size = b_store.AbsoluteSize local b_abs_width, b_abs_height = 100, 100 if G(b_abs_size) and b_proxy_kind(b_abs_size) == "Vector2" then local b_abs_store = t.property_store[b_abs_size] or {} b_abs_width = tonumber(b_abs_store.X) or b_abs_width b_abs_height = tonumber(b_abs_store.Y) or b_abs_height end local b_abs_x = b_scale_x * b_parent_width + b_offset_x - b_anchor_x * b_abs_width local b_abs_y = b_scale_y * b_parent_height + b_offset_y - b_anchor_y * b_abs_height return Vector2.new(b_abs_x, b_abs_y) end q._compute_ui_list_absolute_content_size = function(b_layout) local b_parent = t.parent_map[b_layout] if not b_parent then return Vector2.new(0, 0) end local b_parent_store = t.property_store[b_parent] or {} local b_parent_abs = b_parent_store.AbsoluteSize local b_parent_width, b_parent_height = 1920, 1080 if G(b_parent_abs) and b_proxy_kind(b_parent_abs) == "Vector2" then local b_parent_abs_store = t.property_store[b_parent_abs] or {} b_parent_width = tonumber(b_parent_abs_store.X) or b_parent_width b_parent_height = tonumber(b_parent_abs_store.Y) or b_parent_height elseif G(b_parent_store.Size) and b_proxy_kind(b_parent_store.Size) == "UDim2" then local b_parent_size_store = t.property_store[b_parent_store.Size] or {} b_parent_width = q._udim_pixels(b_parent_size_store.X, b_parent_width) b_parent_height = q._udim_pixels(b_parent_size_store.Y, b_parent_height) end local b_layout_store = t.property_store[b_layout] or {} local b_padding = q._udim_pixels(b_layout_store.Padding, 0) local b_horizontal = tostring(b_layout_store.FillDirection or ""):match("Horizontal$") ~= nil local b_children = {} for b_child, b_child_parent in D(t.parent_map) do if b_child_parent == b_parent and b_child ~= b_layout then local b_child_store = t.property_store[b_child] or {} if G(b_child_store.Size) and b_proxy_kind(b_child_store.Size) == "UDim2" then table.insert( b_children, { instance = b_child, order = tonumber(b_child_store.LayoutOrder) or 0, seq = #b_children + 1 } ) end end end table.sort( b_children, function(a, b) if a.order == b.order then return a.seq < b.seq end return a.order < b.order end ) local b_total_width, b_total_height = 0, 0 local b_max_width, b_max_height = 0, 0 for b_index, b_entry in ipairs(b_children) do local b_size = (t.property_store[b_entry.instance] or {}).Size local b_size_store = t.property_store[b_size] or {} local b_width = q._udim_pixels(b_size_store.X, b_parent_width) local b_height = q._udim_pixels(b_size_store.Y, b_parent_height) if b_horizontal then b_total_width = b_total_width + b_width if b_index > 1 then b_total_width = b_total_width + b_padding end if b_height > b_max_height then b_max_height = b_height end else b_total_height = b_total_height + b_height if b_index > 1 then b_total_height = b_total_height + b_padding end if b_width > b_max_width then b_max_width = b_width end end end if b_horizontal then return Vector2.new(b_total_width, b_max_height) end return Vector2.new(b_max_width, b_total_height) end b_color3_components = function(b_value) if G(b_value) and b_proxy_kind(b_value) == "Color3" then local b_store = t.property_store[b_value] or {} return tonumber(b_store.R) or 0, tonumber(b_store.G) or 0, tonumber(b_store.B) or 0 end return 0, 0, 0 end b_brickcolor_catalog = { {Name = "White", Number = 1, R = 242, G = 243, B = 243}, {Name = "Bright red", Number = 21, R = 196, G = 40, B = 28}, {Name = "Really red", Number = 1004, R = 255, G = 0, B = 0}, {Name = "Bright blue", Number = 23, R = 13, G = 105, B = 172}, {Name = "Bright yellow", Number = 24, R = 245, G = 205, B = 48}, {Name = "Dark green", Number = 28, R = 40, G = 127, B = 71}, {Name = "Bright green", Number = 37, R = 75, G = 151, B = 75}, {Name = "Medium stone grey", Number = 194, R = 163, G = 162, B = 165}, {Name = "Dark stone grey", Number = 199, R = 99, G = 95, B = 98}, {Name = "Black", Number = 26, R = 27, G = 42, B = 53} } b_brickcolor_by_name = {} b_brickcolor_by_number = {} for _, b_entry in ipairs(b_brickcolor_catalog) do b_brickcolor_by_name[string.lower(b_entry.Name)] = b_entry b_brickcolor_by_number[b_entry.Number] = b_entry end b_brickcolor_by_name["red"] = b_brickcolor_by_name["bright red"] b_brickcolor_by_name["blue"] = b_brickcolor_by_name["bright blue"] b_brickcolor_by_name["green"] = b_brickcolor_by_name["dark green"] b_brickcolor_by_name["yellow"] = b_brickcolor_by_name["bright yellow"] b_brickcolor_by_name["gray"] = b_brickcolor_by_name["medium stone grey"] b_brickcolor_by_name["darkgray"] = b_brickcolor_by_name["dark stone grey"] b_brickcolor_by_name["dark gray"] = b_brickcolor_by_name["dark stone grey"] b_resolve_brickcolor = function(b_value, b_method_name) if G(b_value) and b_proxy_kind(b_value) == "Color3" then local b_r, b_g, b_b = b_color3_components(b_value) local b_best = nil local b_best_distance = nil for _, b_entry in ipairs(b_brickcolor_catalog) do local b_dr = b_r * 255 - b_entry.R local b_dg = b_g * 255 - b_entry.G local b_db = b_b * 255 - b_entry.B local b_distance = b_dr * b_dr + b_dg * b_dg + b_db * b_db if not b_best_distance or b_distance < b_best_distance then b_best_distance = b_distance b_best = b_entry end end return b_best or b_brickcolor_by_name["medium stone grey"] end if j(b_value) == "number" then return b_brickcolor_by_number[math.floor(b_value)] or b_brickcolor_by_name["medium stone grey"] end local b_name = nil if j(b_value) == "string" and b_value ~= "" then b_name = string.lower(b_value) elseif j(b_method_name) == "string" and b_method_name ~= "new" then b_name = string.lower(b_method_name:gsub("_", " ")) end if b_name then return b_brickcolor_by_name[b_name] or b_brickcolor_by_name["medium stone grey"] end return b_brickcolor_by_name["medium stone grey"] end b_vector3_from_normal_id = function(b_value) local b_name = q._engine_string_key(b_value) if b_name:match("Right$") then return 1, 0, 0 end if b_name:match("Left$") then return -1, 0, 0 end if b_name:match("Top$") then return 0, 1, 0 end if b_name:match("Bottom$") then return 0, -1, 0 end if b_name:match("Back$") then return 0, 0, 1 end if b_name:match("Front$") then return 0, 0, -1 end return 0, 0, 0 end q._proxy_eq = function(bo, aa) if not G(bo) or not G(aa) then b_log_op("==", bo, aa, false) return false end local b_left_store = t.property_store[bo] or {} local b_right_store = t.property_store[aa] or {} local b_left_enum = b_left_store.__enum_path or (j(t.registry[bo]) == "string" and t.registry[bo]:match("^Enum%.[^%.]+%.[^%.]+$") and t.registry[bo]) local b_right_enum = b_right_store.__enum_path or (j(t.registry[aa]) == "string" and t.registry[aa]:match("^Enum%.[^%.]+%.[^%.]+$") and t.registry[aa]) if b_left_enum ~= nil or b_right_enum ~= nil then local b_enum_result = b_left_enum ~= nil and b_left_enum == b_right_enum b_log_op("==", bo, aa, b_enum_result) return b_enum_result end local b_left_kind = b_left_store.__kind local b_right_kind = b_right_store.__kind if b_left_kind and b_left_kind == b_right_kind then -- Only value-type kinds compare by structural equality. RBXScriptSignal, -- RBXScriptConnection, InputObject, etc. compare by identity even if they -- share a __kind (the test "two ServiceAdded:Connect()s give distinct -- connections" must not collapse them). local b_compare_by_value = b_left_kind == "Vector3" or b_left_kind == "Vector3int16" or b_left_kind == "Vector2" or b_left_kind == "Vector2int16" or b_left_kind == "CFrame" or b_left_kind == "Color3" or b_left_kind == "UDim" or b_left_kind == "UDim2" or b_left_kind == "Rect" or b_left_kind == "Region3" or b_left_kind == "Ray" or b_left_kind == "NumberRange" or b_left_kind == "BrickColor" or b_left_kind == "EnumItem" or b_left_kind == "Enum" or b_left_kind == "Enums" or b_left_kind == "TweenInfo" or b_left_kind == "PathWaypoint" or b_left_kind == "Axes" or b_left_kind == "Faces" or b_left_kind == "DateTime" if b_compare_by_value then local b_eq = true if b_left_kind == "Vector3" or b_left_kind == "Vector3int16" or b_left_kind == "Vector2" or b_left_kind == "Vector2int16" then local lx, ly, lz = b_vector_components(bo) local rx, ry, rz = b_vector_components(aa) b_eq = (lx == rx and ly == ry and (lz == rz or b_left_kind:match("Vector2"))) elseif b_left_kind == "CFrame" then local l = {b_cframe_components(bo)} local r = {b_cframe_components(aa)} for i = 1, 12 do if math.abs((l[i] or 0) - (r[i] or 0)) > 1e-7 then b_eq = false break end end elseif b_left_kind == "Color3" then b_eq = (math.abs((b_left_store.R or 0) - (b_right_store.R or 0)) < 1e-4 and math.abs((b_left_store.G or 0) - (b_right_store.G or 0)) < 1e-4 and math.abs((b_left_store.B or 0) - (b_right_store.B or 0)) < 1e-4) elseif b_left_kind == "UDim" then b_eq = (b_left_store.Scale == b_right_store.Scale and b_left_store.Offset == b_right_store.Offset) elseif b_left_kind == "UDim2" then b_eq = q._proxy_eq(b_left_store.X, b_right_store.X) and q._proxy_eq(b_left_store.Y, b_right_store.Y) end if b_eq then b_log_op("==", bo, aa, true) return true end end end local b_result = rawget(bo, "__proxy_id") == rawget(aa, "__proxy_id") b_log_op("==", bo, aa, b_result) return b_result end local function b_wrap_int16(b_value) local b_num = math.floor(n(b_value) or 0) b_num = ((b_num + 32768) % 65536) - 32768 return b_num end -- Tail helpers below use globals (not chunk locals) so Luau stays within the 200-local limit. b_known_property_names = { Name = true, ClassName = true, Parent = true, LocalPlayer = true, PlayerGui = true, PlayerScripts = true, Backpack = true, Character = true, Idled = true, CameraMinZoomDistance = true, CameraMaxZoomDistance = true, EnvironmentDiffuseScale = true, EnvironmentSpecularScale = true, Scale = true, WaterWaveSize = true, WaterWaveSpeed = true, WaterReflectance = true, WaterTransparency = true, WaterColor = true, JumpRequest = true, CharacterAdded = true, CharacterRemoving = true, CurrentCamera = true, Terrain = true, PrimaryPart = true, HumanoidRootPart = true, Position = true, Size = true, CFrame = true, Color = true, BrickColor = true, Material = true, AssemblyLinearVelocity = true, AssemblyAngularVelocity = true, Velocity = true, RotVelocity = true, Anchored = true, CanCollide = true, Transparency = true, Health = true, MaxHealth = true, WalkSpeed = true, JumpPower = true, JumpHeight = true, HipHeight = true, MaxSlopeAngle = true, NameDisplayDistance = true, HealthDisplayDistance = true, CameraOffset = true, MoveDirection = true, DisplayDistanceType = true, FloorMaterial = true, AutoRotate = true, UseJumpPower = true, PlatformStand = true, Sit = true, Jump = true, FieldOfView = true, CameraType = true, CameraSubject = true, IsEdit = true, ViewportSize = true, NearPlaneZ = true, ClockTime = true, Brightness = true, FogEnd = true, Ambient = true, OutdoorAmbient = true, Gravity = true, AirDensity = true, FallenPartsDestroyHeight = true, HttpEnabled = true, RequestQueueSize = true, MaxPlayers = true, RespawnTime = true, RobloxLocaleId = true, SystemLocaleId = true, PreferredInput = true, SelectedObject = true, SourceLocaleId = true, Team = true, TeamColor = true, UserId = true, DisplayName = true, Idled = true, MembershipType = true, FollowUserId = true, AccountAge = true, PlayerEmulationEnabled = true, Loaded = true, OnInvoke = true, OnClientInvoke = true, OnServerInvoke = true, Text = true, Value = true, Volume = true, PlaybackSpeed = true, TimePosition = true, TimeLength = true, Visible = true, AlwaysOnTop = true, TextEditable = true, Offset = true, ResampleMode = true, HorizontalScrollBarInset = true, VerticalScrollBarInset = true, -- Constraint joints / welds / etc. — properties commonly probed by env checks. Part0 = true, Part1 = true, Attachment0 = true, Attachment1 = true, Enabled = true, Force = true, Torque = true, MaxForce = true, MaxTorque = true, Length = true, Rotation = true, Speed = true, Damping = true, Stiffness = true, AngularDamping = true, AngularVelocity = true, LineDirection = true, LinearVelocity = true, VectorVelocity = true, VelocityConstraintMode = true, -- Effect / visual properties Intensity = true, Density = true, BlastRadius = true, Range = true, Angle = true, Width0 = true, Width1 = true, Rate = true, Texture = true, Grip = true, GripPos = true, Heat = true, AnimationId = true, Lifetime = true, LightEmission = true, Cover = true, Spread = true, Saturation = true, Contrast = true, TintColor = true, HoldDuration = true, MaxActivationDistance = true, ActionText = true, FillTransparency = true, OutlineTransparency = true, FillColor = true, OutlineColor = true, CornerRadius = true, Thickness = true, PaddingLeft = true, PaddingRight = true, PaddingTop = true, PaddingBottom = true, Padding = true, CellSize = true, CellPadding = true, MinSize = true, MaxSize = true, MinTextSize = true, MaxTextSize = true, AspectRatio = true, DominantAxis = true, FillDirection = true, HorizontalAlignment = true, VerticalAlignment = true, SortOrder = true, MeshType = true, MeshId = true, BackgroundTransparency = true, GroupTransparency = true, GroupColor3 = true, Active = true, Face = true, Shadows = true, CelestialBodiesShown = true, MoonAngularSize = true, SunAngularSize = true, StarCount = true, FocusDistance = true, InFocusRadius = true, NearIntensity = true, FarIntensity = true, AttachmentForward = true, AttachmentUp = true, ShirtTemplate = true, PantsTemplate = true, Graphic = true, AuthoredHipHeight = true, Loop = true, Priority = true, Weight = true, Time = true, UpdateType = true, FullySubmerged = true, TouchingSurface = true, PrimaryPart_ = true, CanBeDropped = true, Source = true, StudsPerTileU = true, StudsPerTileV = true, DisplayOrder = true, ResetOnSpawn = true, BubbleChatEnabled = true, Cards = true } -- Keys that UI libraries expose as callable builders on flexible (__table_like) proxies. -- If a remote script leaves a string/number placeholder in the property store, __index must -- still resolve these to callable flexible children (WindUI: tab.Section({...})). b_flexible_ui_builder_keys = { Section = true, Tab = true, Button = true, Toggle = true, Slider = true, Dropdown = true, Textbox = true, Input = true, Label = true, Keybind = true, ColorPicker = true, Paragraph = true, Notification = true, Divider = true, Bind = true, Picker = true, Window = true, Tag = true, CreateWindow = true, Create = true, Card = true, Box = true, Group = true, Column = true, Row = true, SubTab = true, Page = true, Menu = true, Header = true, Footer = true, Space = true, Line = true, Spacer = true, Toast = true, Banner = true, Modal = true, Dialog = true, Popup = true, Prompt = true, Select = true, Option = true, Checkbox = true, Radio = true, Tree = true, List = true, Grid = true, Info = true, Panel = true, Area = true, Container = true } b_property_exists = function(b_instance, b_property) local b_key = q._engine_string_key(b_property) local b_store = t.property_store[b_instance] or {} local b_class = b_store.ClassName or "" if (b_class == "TextChatService" or b_class == "TextChannel") and b_key == "OnIncomingMessage" then return true end if b_class == "Drawing" then if b_key == "ClassName" or b_key == "Name" or b_key == "Visible" or b_key == "DrawingType" or b_key == "Removed" or b_key == "Destroy" or b_key == "Remove" then return true end local b_drawing_type = aE(b_store.DrawingType or "") if b_drawing_type == "Circle" then return b_key == "Radius" or b_key == "Position" or b_key == "Thickness" or b_key == "Color" or b_key == "Transparency" or b_key == "Filled" or b_key == "NumSides" or b_key == "Visible" elseif b_drawing_type == "Line" then return b_key == "From" or b_key == "To" or b_key == "Thickness" or b_key == "Color" or b_key == "Transparency" or b_key == "Visible" elseif b_drawing_type == "Square" then return b_key == "Size" or b_key == "Position" or b_key == "Thickness" or b_key == "Color" or b_key == "Transparency" or b_key == "Filled" or b_key == "Visible" or b_key == "Rounding" elseif b_drawing_type == "Image" then return b_key == "Data" or b_key == "DataURL" or b_key == "Size" or b_key == "Position" or b_key == "Rounding" or b_key == "Transparency" or b_key == "Color" or b_key == "Visible" elseif b_drawing_type == "Triangle" then return b_key == "PointA" or b_key == "PointB" or b_key == "PointC" or b_key == "Thickness" or b_key == "Color" or b_key == "Transparency" or b_key == "Filled" or b_key == "Visible" elseif b_drawing_type == "Quad" then return b_key == "PointA" or b_key == "PointB" or b_key == "PointC" or b_key == "PointD" or b_key == "Thickness" or b_key == "Color" or b_key == "Transparency" or b_key == "Filled" or b_key == "Visible" elseif b_drawing_type == "Text" then return b_key == "Text" or b_key == "Position" or b_key == "Size" or b_key == "Color" or b_key == "Center" or b_key == "Outline" or b_key == "OutlineColor" or b_key == "Font" or b_key == "Transparency" or b_key == "Visible" or b_key == "TextBounds" end end -- Services should be strict: only members that belong to that service. if b_class ~= "" and aJ and aJ[b_class] then if b_key == "Name" or b_key == "ClassName" or b_key == "Parent" then return true end return b_store[b_key] ~= nil or b_property_type_rules[b_key] ~= nil or b_known_property_names[b_key] == true end if b_key == "RespawnTime" and b_class ~= "Players" then return false end if b_key == "Text" then local b_text_allowed = b_class == "TextLabel" or b_class == "TextButton" or b_class == "TextBox" or b_class == "TextChatMessage" or b_class == "Message" if not b_text_allowed then return false end end if b_key == "PlaybackLoudness" and b_class == "Sound" then return true end -- Size exists only on BaseParts (Vector3), GuiObjects (UDim2), and a few effects — not on Folder/Model/etc. if b_key == "Size" and q._mock_expected_property_kind(b_class, "Size") == nil then return false end if b_store[b_key] ~= nil then return true end if b_property_type_rules[b_key] or b_known_property_names[b_key] then return true end if b_key == "AbsoluteContentSize" and (b_class == "UIListLayout" or b_class == "UIGridLayout" or b_class == "UIGridStyleLayout") then return true end if b_key == "AutomaticCanvasSize" and (b_class == "ScrollingFrame" or b_class == "VideoFrame") then return true end if b_key == "ElasticBehavior" and b_class == "ScrollingFrame" then return true end if b_key == "ScrollBarImageColor3" and b_class == "ScrollingFrame" then return true end if (b_class == "GuiService" and b_key == "SelectedObject") or ((b_class == "LocalScript" or b_class == "ModuleScript" or b_class == "Script") and b_key == "Source") then return true end return false end b_is_gui_selection_value = function(b_value) if b_value == nil then return true end if not G(b_value) then return false end local b_class = b_instance_class(b_value) return b_class == "Frame" or b_class == "TextBox" or b_class == "TextLabel" or b_class == "TextButton" or b_class == "ImageLabel" or b_class == "ImageButton" or b_class == "ScrollingFrame" or b_class == "ViewportFrame" or b_class == "VideoFrame" or b_class == "CanvasGroup" end b_value_proxy_eq = function(bo, aa) if not G(bo) or not G(aa) then return false end local b_kind = b_proxy_kind(bo) if b_kind ~= b_proxy_kind(aa) then return false end if b_kind == "Vector3" or b_kind == "Vector3int16" or b_kind == "Vector2" or b_kind == "Vector2int16" then local lx, ly, lz = b_vector_components(bo) local rx, ry, rz = b_vector_components(aa) return lx == rx and ly == ry and (lz == rz or b_kind:match("Vector2")) end if b_kind == "CFrame" then local l = {b_cframe_components(bo)} local r = {b_cframe_components(aa)} for i = 1, 12 do if math.abs((l[i] or 0) - (r[i] or 0)) > 1e-7 then return false end end return true end if b_kind == "Color3" then local b_ar, b_ag, b_ab = b_color3_components(bo) local b_br, b_bg, b_bb = b_color3_components(aa) return math.abs(b_ar - b_br) < 1e-4 and math.abs(b_ag - b_bg) < 1e-4 and math.abs(b_ab - b_bb) < 1e-4 end if b_kind == "BrickColor" then return ((t.property_store[bo] or {}).Number or 0) == ((t.property_store[aa] or {}).Number or 0) end if b_kind == "UDim" then local b_a_scale = A((t.property_store[bo] or {}).Scale) local b_a_offset = A((t.property_store[bo] or {}).Offset) local b_b_scale = A((t.property_store[aa] or {}).Scale) local b_b_offset = A((t.property_store[aa] or {}).Offset) return math.abs(b_a_scale - b_b_scale) < 1e-9 and math.abs(b_a_offset - b_b_offset) < 1e-9 end if b_kind == "UDim2" then local b_a_x = t.property_store[bo] and t.property_store[bo].X local b_a_y = t.property_store[bo] and t.property_store[bo].Y local b_b_x = t.property_store[aa] and t.property_store[aa].X local b_b_y = t.property_store[aa] and t.property_store[aa].Y return b_value_proxy_eq(b_a_x, b_b_x) and b_value_proxy_eq(b_a_y, b_b_y) end return rawget(bo, "__proxy_id") == rawget(aa, "__proxy_id") end function b_part_bounds(b_part) local b_store = t.property_store[b_part] or {} local b_cf = b_store.CFrame or CFrame.new(0, 0, 0) local b_size = b_store.Size or Vector3.new(4, 1, 2) local b_x, b_y, b_z = b_vector_components(b_store.Position or b_cf.Position or Vector3.new(0, 0, 0)) local b_sx, b_sy, b_sz = b_vector_components(b_size) return b_x - b_sx / 2, b_x + b_sx / 2, b_y - b_sy / 2, b_y + b_sy / 2, b_z - b_sz / 2, b_z + b_sz / 2 end function b_is_spatial_part(b_part) if not G(b_part) then return false end local b_store = t.property_store[b_part] or {} local b_class = b_store.ClassName or "" return b_class == "Part" or b_class == "MeshPart" or b_class == "BasePart" or b_class == "UnionOperation" or b_class == "TrussPart" or b_class == "WedgePart" or b_class == "CornerWedgePart" or b_class == "Seat" or b_class == "VehicleSeat" or b_class == "SkateboardPlatform" or b_class == "Terrain" end function b_ray_box_hit(b_origin, b_direction, b_part) local b_ox, b_oy, b_oz = b_vector_components(b_origin) local b_dx, b_dy, b_dz = b_vector_components(b_direction) local b_minx, b_maxx, b_miny, b_maxy, b_minz, b_maxz = b_part_bounds(b_part) local b_tmin, b_tmax = 0, 1 local function b_axis(b_origin_value, b_direction_value, b_min_value, b_max_value) if math.abs(b_direction_value) < 1e-9 then return b_origin_value >= b_min_value and b_origin_value <= b_max_value, 0, 1 end local b_a = (b_min_value - b_origin_value) / b_direction_value local b_b = (b_max_value - b_origin_value) / b_direction_value if b_a > b_b then b_a, b_b = b_b, b_a end return true, b_a, b_b end local b_okx, b_ax, b_bx = b_axis(b_ox, b_dx, b_minx, b_maxx) local b_oky, b_ay, b_by = b_axis(b_oy, b_dy, b_miny, b_maxy) local b_okz, b_az, b_bz = b_axis(b_oz, b_dz, b_minz, b_maxz) if not b_okx or not b_oky or not b_okz then return nil end b_tmin = math.max(b_tmin, b_ax, b_ay, b_az) b_tmax = math.min(b_tmax, b_bx, b_by, b_bz) if b_tmax < b_tmin or b_tmax < 0 or b_tmin > 1 then return nil end local b_t = b_tmin local b_hx, b_hy, b_hz = b_ox + b_dx * b_t, b_oy + b_dy * b_t, b_oz + b_dz * b_t local b_normal = Vector3.new(0, 0, 0) if math.abs(b_hx - b_minx) < 0.01 then b_normal = Vector3.new(-1, 0, 0) elseif math.abs(b_hx - b_maxx) < 0.01 then b_normal = Vector3.new(1, 0, 0) elseif math.abs(b_hy - b_miny) < 0.01 then b_normal = Vector3.new(0, -1, 0) elseif math.abs(b_hy - b_maxy) < 0.01 then b_normal = Vector3.new(0, 1, 0) elseif math.abs(b_hz - b_minz) < 0.01 then b_normal = Vector3.new(0, 0, -1) else b_normal = Vector3.new(0, 0, 1) end return {t = b_t, position = Vector3.new(b_hx, b_hy, b_hz), normal = b_normal} end function bl(bm) local bh, bi = bg() rawset(bh, v, true) rawset(bh, "__value", bm) t.registry[bh] = tostring(bm) bi.__tostring = function() return tostring(bm) end bi.__index = function(b2, b4) if b4 == F or b4 == "__proxy_id" or b4 == v or b4 == "__value" then return rawget(b2, b4) end return bl(0) end bi.__newindex = function() end bi.__call = function() return bm end local function bn(X) return function(bo, aa) local bp = type(bo) == "table" and rawget(bo, "__value") or bo local bq = type(aa) == "table" and rawget(aa, "__value") or aa bp = tonumber(bp) or 0 bq = tonumber(bq) or 0 local z if X == "+" then z = bp + bq elseif X == "-" then z = bp - bq elseif X == "*" then z = bp * bq elseif X == "/" then z = bq ~= 0 and bp / bq or 0 elseif X == "%" then z = bq ~= 0 and bp % bq or 0 elseif X == "^" then z = bp ^ bq else z = 0 end return bl(z) end end bi.__add = bn("+") bi.__sub = bn("-") bi.__mul = bn("*") bi.__div = bn("/") bi.__mod = bn("%") bi.__pow = bn("^") bi.__concat = function(bo, aa) local bp = type(bo) == "table" and rawget(bo, "__value") or bo local bq = type(aa) == "table" and rawget(aa, "__value") or aa if bp == nil then bp = "" end if bq == nil then bq = "" end return tostring(bp) .. tostring(bq) end bi.__unm = function(bo) return bl(-(rawget(bo, "__value") or 0)) end bi.__eq = function(bo, aa) local bp = type(bo) == "table" and rawget(bo, "__value") or bo local bq = type(aa) == "table" and rawget(aa, "__value") or aa local b_result = bp == bq b_log_op("==", bo, aa, b_result) return b_result end bi.__lt = function(bo, aa) local bp = type(bo) == "table" and rawget(bo, "__value") or bo local bq = type(aa) == "table" and rawget(aa, "__value") or aa local b_result = bp < bq b_log_op("<", bo, aa, b_result) return b_result end bi.__le = function(bo, aa) local bp = type(bo) == "table" and rawget(bo, "__value") or bo local bq = type(aa) == "table" and rawget(aa, "__value") or aa local b_result = bp <= bq b_log_op("<=", bo, aa, b_result) return b_result end bi.__len = function() return 0 end return bh end function br(bs, bt) if j(bs) ~= "function" then return {} end local a4 = #t.output local bu = t.pending_iterator t.pending_iterator = false xpcall( function() bs(native_unpack(bt or {})) end, function() end ) while t.pending_iterator do t.indent = t.indent - 1 at("end") t.pending_iterator = false end t.pending_iterator = bu local bv = {} for L = a4 + 1, #t.output do table.insert(bv, t.output[L]) end for L = #t.output, a4 + 1, -1 do table.remove(t.output, L) end return bv end bk = function(aS, bw) local bh, bi = bg() local bx = t.registry[bw] or "object" local by = aE(aS) t.registry[bh] = bx .. "." .. by bi.__call = function(self, bz, ...) local bA if bz == bh or bz == bw or G(bz) then bA = {...} else bA = {bz, ...} end local aU = by:lower() local bB = nil local bC = true for W, aV in ipairs(aL) do if aU:find(aV.pattern) then bB = aV.prefix break end end local bD = nil local bE = nil local bF = nil for L, b5 in ipairs(bA) do if j(b5) == "function" then bD = b5 break elseif j(b5) == "table" and not G(b5) then for bG, aF in D(b5) do local bH = m(bG):lower() if bH == "callback" and j(aF) == "function" then bD = aF bE = bG bF = L break end end end end local bI = "value" local bt = {} if bD then if aU:match("toggle") then bI = "enabled" bt = {true} elseif aU:match("slider") then bI = "value" bt = {50} elseif aU:match("dropdown") then bI = "selected" bt = {"Option"} elseif aU:match("textbox") or aU:match("input") then bI = "text" bt = {s or "input"} elseif aU:match("keybind") or aU:match("bind") then bI = "key" bt = {bj("Enum.KeyCode.E", false)} elseif aU:match("color") then bI = "color" bt = {Color3.fromRGB(255, 255, 255)} elseif aU:match("button") then bI = "\\" bt = {} end end local bJ = {} if bD then bJ = br(bD, bt) end local z = bj(bB or by, false, bw) local _ = aW(z, bB or by, nil, by) local bK = {} for L, b5 in ipairs(bA) do if j(b5) == "table" and not G(b5) and L == bF then local b8 = {} for bG, aF in D(b5) do local bd if j(bG) == "string" and bG:match("^[%a_][%w_]*$") then bd = bG else bd = "[" .. aZ(bG) .. "]" end if bG == bE and #bJ > 0 then local bL = bI ~= '"' and "function(" .. "bI" .. ")" or "function()" local bb = string.rep(" ", t.indent + 2) local bM = {} for W, aw in ipairs(bJ) do table.insert(bM, bb .. (aw:match("^%s*(.*)$") or aw)) end local bc = string.rep(" ", t.indent + 1) table.insert(b8, bd .. " = " .. bL .. "\n" .. table.concat(bM, "\n") .. "\n" .. bc .. "end") elseif bG == bE then local bN = b_function_source_literal(aF, 65536) or (bI ~= "\\" and "function(" .. bI .. ")\nend" or "function()\nend") table.insert(b8, bd .. " = " .. bN) else table.insert(b8, bd .. " = " .. aZ(aF)) end end table.insert( bK, "{\n" .. string.rep(" ", t.indent + 1) .. table.concat(b8, ",\n" .. string.rep(" ", t.indent + 1)) .. "\n" .. string.rep(" ", t.indent) .. "}" ) elseif j(b5) == "function" then if #bJ > 0 then local bL = bI ~= '"' and "function(" .. bI .. ")" or "function()" local bb = string.rep(" ", t.indent + 1) local bM = {} for W, aw in ipairs(bJ) do table.insert(bM, bb .. (aw:match("^%s*(.*)$") or aw)) end table.insert( bK, bL .. "\n" .. table.concat(bM, "\n") .. "\n" .. string.rep(" ", t.indent) .. "end" ) else local bN = b_function_source_literal(b5, 65536) or (bI ~= '"' and "function(" .. bI .. ")\nend" or "function()\nend") table.insert(bK, bN) end else table.insert(bK, aZ(b5)) end end at(string.format("local %s = %s:%s(%s)", _, bx, by, table.concat(bK, ", "))) return z end bi.__index = function(b2, b4) if b4 == F or b4 == "__proxy_id" then return rawget(b2, b4) end return bk(b4, bh) end bi.__tostring = function() return bx .. ":" .. by end return bh end bj = function(aQ, bO, bw) local bh, bi = bg() local aT = aE(aQ) -- Preserve any pre-seeded fields on this proxy (e.g. enum metadata set before `bj` completes). t.property_store[bh] = t.property_store[bh] or {} if bO then t.registry[bh] = aT t.names_used[aT] = true elseif bw then t.parent_map[bh] = bw rawset(bh, "__temp_path", (t.registry[bw] or "object") .. "." .. aT) end local bP = {} bP.GetService = function(self, bQ) local bR = q._engine_string_key(bQ) local bS = t.registry[bh] or "game" local b_had_service = t.service_cache[bR] ~= nil if bR == "DebuggerManager" then error("Service unavailable", 0) end if not aJ[bR] and rawget(_G, "__LARRY_FAILOPEN_SERVICES") ~= true then error("service " .. bR .. " is not available", 0) end if t.service_cache[bR] then local x = t.service_cache[bR] local _ = aW(x, bR) at(string.format("local %s = %s:GetService(%s)", _, bS, aH(bR))) return x end local x = b_child_proxy(bR, bh, bR) local _ = aW(x, bR) t.service_cache[bR] = x t.parent_map[x] = bh t.property_store[x] = t.property_store[x] or {} t.property_store[x].ClassName = bR t.property_store[x].Name = bR if bR == "RunService" then t.property_store[x].Heartbeat = b_ensure_signal(x, "Heartbeat", "RunService.Heartbeat") t.property_store[x].RenderStepped = b_ensure_signal(x, "RenderStepped", "RunService.RenderStepped") t.property_store[x].Stepped = b_ensure_signal(x, "Stepped", "RunService.Stepped") t.property_store[x].PreSimulation = b_ensure_signal(x, "PreSimulation", "RunService.PreSimulation") t.property_store[x].IsEdit = false t.property_store[x].ClientGitHash = "abc123def456" t.property_store[x].RunState = b_enum_item("Enum.RunState.Running") t.property_store[x].HeartbeatTime = 0.016666666666666666 t.property_store[x].HeartbeatTimeMs = 16.666666666666668 t.property_store[x].FrameTime = 0.016666666666666666 elseif bR == "LocalizationService" then t.property_store[x].RobloxLocaleId = "en-us" t.property_store[x].SystemLocaleId = "en-us" elseif bR == "TextChatService" then local c_text_channels = b_child_proxy("TextChannels", x, "Folder") t.property_store[x].TextChannels = c_text_channels local c_rbx_general = b_child_proxy("RBXGeneral", c_text_channels, "TextChannel") t.property_store[c_rbx_general] = t.property_store[c_rbx_general] or {} t.property_store[c_rbx_general].ClassName = "TextChannel" t.property_store[c_rbx_general].Name = "RBXGeneral" t.property_store[x].MessageReceived = b_ensure_signal(x, "MessageReceived", "TextChatService.MessageReceived") local c_tcs_incoming = function() end b_mark_builtin_function(c_tcs_incoming, "OnIncomingMessage", 0, true) t.property_store[x].OnIncomingMessage = c_tcs_incoming local c_ch_incoming = function() end b_mark_builtin_function(c_ch_incoming, "OnIncomingMessage", 0, true) t.property_store[c_rbx_general].OnIncomingMessage = c_ch_incoming elseif bR == "ProximityPromptService" then t.property_store[x].PromptShown = b_ensure_signal(x, "PromptShown", "ProximityPromptService.PromptShown") t.property_store[x].PromptHidden = b_ensure_signal(x, "PromptHidden", "ProximityPromptService.PromptHidden") elseif bR == "SoundService" then t.property_store[x].DistanceFactor = 3.33 t.property_store[x].RolloffScale = 1 t.property_store[x].AmbientReverb = b_enum_item("Enum.ReverbType.NoReverb") elseif bR == "StarterGui" then t.property_store[x].ResetPlayerGuiOnSpawn = true elseif bR == "StarterPlayer" then t.property_store[x].CharacterMaxSlopeAngle = 89 local c_scripts = b_child_proxy("StarterPlayerScripts", x, "StarterPlayerScripts") local c_character_scripts = b_child_proxy("StarterCharacterScripts", x, "StarterCharacterScripts") local c_player_module = b_child_proxy("PlayerModule", c_scripts, "ModuleScript") b_child_proxy("ControlModule", c_player_module, "ModuleScript") local c_control_script = b_child_proxy("ControlScript", c_scripts, "LocalScript") t.property_store[x].StarterPlayerScripts = c_scripts t.property_store[x].StarterCharacterScripts = c_character_scripts t.property_store[c_scripts].PlayerModule = c_player_module t.property_store[c_scripts].ControlScript = c_control_script elseif bR == "Players" then local function c_random_player_name() local c_first_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" local c_other_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_" local c_len = math.random(8, 18) local c_out = {} local c_first_index = math.random(1, #c_first_chars) c_out[1] = c_first_chars:sub(c_first_index, c_first_index) for c_i = 2, c_len do local c_index = math.random(1, #c_other_chars) c_out[c_i] = c_other_chars:sub(c_index, c_index) end local c_name = table.concat(c_out) if c_name:sub(-1) == "_" then c_name = c_name:sub(1, -2) .. tostring(math.random(0, 9)) end return c_name end local c_generated_name = c_random_player_name() local c_character_name = c_generated_name .. "_Character" local c_local = b_child_proxy("LocalPlayer", x, "Player") local c_gui = b_child_proxy("PlayerGui", c_local, "PlayerGui") local c_hud = b_child_proxy("HUD", c_gui, "ScreenGui") local c_tools = b_child_proxy("Tools", c_hud, "Frame") local c_sidebar = b_child_proxy("SideBar", c_hud, "Frame") local c_code_holder = b_child_proxy("CodeFrameHolder", c_hud, "Frame") local c_sidebar_blueprints = b_child_proxy("blueprints", c_sidebar, "Frame") local c_tool_copy = b_child_proxy("copy", c_tools, "ImageButton") local c_tool_paste = b_child_proxy("paste", c_tools, "ImageButton") local c_tool_export = b_child_proxy("export", c_tools, "ImageButton") local c_tool_import = b_child_proxy("import", c_tools, "ImageButton") local c_tool_pollution = b_child_proxy("pollution", c_tools, "ImageButton") local c_tool_delete = b_child_proxy("Delete", c_tools, "ImageButton") local c_tool_toggle_code = b_child_proxy("ToggleCode", c_tools, "ImageButton") local c_holder_toggle_code = b_child_proxy("ToggleCode", c_code_holder, "ImageButton") local c_scripts = b_child_proxy("PlayerScripts", c_local, "PlayerScripts") local c_imafk = b_child_proxy("ImAFKBruh", c_scripts, "LocalScript") local c_backpack = b_child_proxy("Backpack", c_local, "Backpack") local c_player_module = b_child_proxy("PlayerModule", c_scripts, "ModuleScript") b_child_proxy("ControlModule", c_player_module, "ModuleScript") local c_sounds = b_child_proxy("RbxCharacterSounds", c_scripts, "Folder") local c_atomic = b_child_proxy("AtomicBinding", c_sounds, "BindableEvent") local c_character = b_child_proxy(c_character_name, workspace, "Model") local c_humanoid = b_child_proxy("Humanoid", c_character, "Humanoid") local c_hrp = b_child_proxy("HumanoidRootPart", c_character, "Part") local c_head = b_child_proxy("Head", c_character, "MeshPart") local c_animate = b_child_proxy("Animate", c_character, "LocalScript") t.property_store[c_local].Name = c_generated_name t.property_store[c_local].DisplayName = c_generated_name t.property_store[c_local].UserId = math.random(100000, 999999999) t.property_store[c_local].FollowUserId = 0 t.property_store[c_local].MembershipType = b_enum_item("Enum.MembershipType.None") t.property_store[c_local].CameraMinZoomDistance = 0.5 t.property_store[c_local].CameraMaxZoomDistance = 128 t.property_store[c_local].PlayerGui = c_gui t.property_store[c_local].PlayerScripts = c_scripts t.property_store[c_local].Backpack = c_backpack t.property_store[c_local].Character = c_character t.property_store[c_local].CharacterAdded = b_ensure_signal(c_local, "CharacterAdded", "LocalPlayer.CharacterAdded") t.property_store[c_local].Idled = b_ensure_signal(c_local, "Idled", "LocalPlayer.Idled") t.property_store[c_scripts].PlayerModule = c_player_module t.property_store[c_scripts].ImAFKBruh = c_imafk t.property_store[c_imafk].Disabled = false t.property_store[c_gui].HUD = c_hud t.property_store[c_hud].Tools = c_tools t.property_store[c_hud].SideBar = c_sidebar t.property_store[c_hud].CodeFrameHolder = c_code_holder t.property_store[c_sidebar].blueprints = c_sidebar_blueprints t.property_store[c_tools].copy = c_tool_copy t.property_store[c_tools].paste = c_tool_paste t.property_store[c_tools].export = c_tool_export t.property_store[c_tools].import = c_tool_import t.property_store[c_tools].pollution = c_tool_pollution t.property_store[c_tools].Delete = c_tool_delete t.property_store[c_tools].ToggleCode = c_tool_toggle_code t.property_store[c_code_holder].ToggleCode = c_holder_toggle_code t.property_store[c_scripts].RbxCharacterSounds = c_sounds t.property_store[c_sounds].AtomicBinding = c_atomic t.property_store[c_atomic].Archivable = true t.property_store[c_character].PrimaryPart = c_hrp t.property_store[c_character].Name = c_character_name t.property_store[c_character].Humanoid = c_humanoid t.property_store[c_character].HumanoidRootPart = c_hrp t.property_store[c_character].Head = c_head t.property_store[c_character].Animate = c_animate t.property_store[c_humanoid].Health = 100 t.property_store[c_humanoid].MaxHealth = 100 t.property_store[c_humanoid].WalkSpeed = 16 t.property_store[c_humanoid].JumpPower = 50 t.property_store[c_humanoid].JumpHeight = 7.2 t.property_store[c_humanoid].HipHeight = 2 t.property_store[c_humanoid].MaxSlopeAngle = 89 t.property_store[c_humanoid].NameDisplayDistance = 100 t.property_store[c_humanoid].HealthDisplayDistance = 100 t.property_store[c_humanoid].CameraOffset = Vector3.new(0, 0, 0) t.property_store[c_humanoid].DisplayDistanceType = b_enum_item("Enum.HumanoidDisplayDistanceType.Viewer") t.property_store[c_humanoid].AutoRotate = true t.property_store[c_humanoid].Sit = false t.property_store[c_humanoid].PlatformStand = false t.property_store[c_humanoid].Jump = false t.property_store[c_humanoid].UseJumpPower = true t.property_store[c_humanoid].FloorMaterial = b_enum_item("Enum.Material.Air") t.property_store[c_humanoid].__state = b_enum_item("Enum.HumanoidStateType.Running") t.property_store[c_humanoid].StateChanged = b_ensure_signal(c_humanoid, "StateChanged", "Humanoid.StateChanged") t.property_store[c_humanoid].Running = b_ensure_signal(c_humanoid, "Running", "Humanoid.Running") t.property_store[c_humanoid].FreeFalling = b_ensure_signal(c_humanoid, "FreeFalling", "Humanoid.FreeFalling") t.property_store[c_hrp].Anchored = false t.property_store[c_hrp].CanCollide = true t.property_store[c_hrp].Transparency = 1 t.property_store[c_hrp].Size = Vector3.new(2, 2, 1) t.property_store[c_hrp].Position = Vector3.new(0, 3, 0) t.property_store[c_hrp].CFrame = CFrame.new(0, 3, 0) t.property_store[c_hrp].AssemblyLinearVelocity = Vector3.new(0, 0, 0) t.property_store[c_hrp].Velocity = Vector3.new(0, 0, 0) t.property_store[x].LocalPlayer = c_local t.property_store[x].MaxPlayers = 1 t.property_store[x].RespawnTime = 5 elseif bR == "CaptureService" then t.property_store[x].CaptureBegan = b_ensure_signal(x, "CaptureBegan", "CaptureService.CaptureBegan") elseif bR == "LogService" then t.property_store[x].MessageOut = b_ensure_signal(x, "MessageOut", "LogService.MessageOut") elseif bR == "ScriptContext" then t.property_store[x].Error = b_ensure_signal(x, "Error", "ScriptContext.Error") elseif bR == "Stats" then local c_stats = { ContactsCount = 1, DataReceiveKbps = 1, DataSendKbps = 1, FrameTime = 0.016666666666666666, HeartbeatTime = 0.016666666666666666, HeartbeatTimeMs = 16.666666666666668, InstanceCount = 128, MemoryTrackingEnabled = false, MovingPrimitivesCount = 1, PhysicsReceiveKbps = 1, PhysicsSendKbps = 1, PhysicsStepTime = 0.016666666666666666, PhysicsStepTimeMs = 16.666666666666668, PrimitivesCount = 8, RenderCPUFrameTime = 0.016666666666666666, RenderGPUFrameTime = 0.016666666666666666, SceneDrawcallCount = 4, SceneTriangleCount = 12, ShadowsDrawcallCount = 1, ShadowsTriangleCount = 2, UI2DDrawcallCount = 2, UI2DTriangleCount = 4, UI3DDrawcallCount = 1, UI3DTriangleCount = 2 } for c_key, c_value in D(c_stats) do t.property_store[x][c_key] = c_value end local c_network = b_child_proxy("Network", x, "NetworkStats") t.property_store[x].Network = c_network elseif bR == "ReplicatedStorage" then -- Only stock Roblox chat replication; do not seed game folders (Remotes, Packages, …) or `if rs.Remotes` -- becomes a permanent positive tamper signal. Game-specific children are logged on accesser") local c_block = b_child_proxy("SetBlockedUserIdsRequest", c_chat, "RemoteEvent") t.property_store[x].DefaultChatSystemChatEvents = c_chat t.property_store[c_chat].SetBlockedUserIdsRequest = c_block elseif bR == "ReplicatedFirst" then local c_bootstrap = b_child_proxy("CoreBootstrap", x, "Folder") local c_bootstrap_module = b_child_proxy("PlayerModule", c_bootstrap, "ModuleScript") b_child_proxy("ControlModule", c_bootstrap_module, "ModuleScript") local c_bootstrap_local = b_child_proxy("ControlScript", c_bootstrap, "LocalScript") local c_bootstrap_chat = b_child_proxy("ChatMain", c_bootstrap, "ModuleScript") local c_network = b_child_proxy("Network", x, "ModuleScript") local c_ambassador = b_child_proxy("Ambassador", x, "ModuleScript") local c_variables = b_child_proxy("Variables", x, "ModuleScript") t.property_store[x].FinishedReplicating = b_ensure_signal(x, "FinishedReplicating", "ReplicatedFirst.FinishedReplicating") t.property_store[x].__finished_replicating = true t.property_store[x].__default_loading_gui_removed = false t.property_store[x].CoreBootstrap = c_bootstrap t.property_store[x].Network = c_network t.property_store[x].Ambassador = c_ambassador t.property_store[x].Variables = c_variables t.property_store[c_bootstrap].PlayerModule = c_bootstrap_module t.property_store[c_bootstrap].ControlScript = c_bootstrap_local t.property_store[c_bootstrap].ChatMain = c_bootstrap_chat elseif bR == "CoreGui" then local c_roblox_gui = b_child_proxy("RobloxGui", x, "ScreenGui") t.property_store[x].RobloxGui = c_roblox_gui local c_modules = b_child_proxy("Modules", c_roblox_gui, "Folder") local c_settings = b_child_proxy("Settings", c_modules, "Folder") local c_pages = b_child_proxy("Pages", c_settings, "Folder") local c_help = b_child_proxy("Help", c_pages, "Folder") t.property_store[c_roblox_gui].Modules = c_modules t.property_store[c_modules].Settings = c_settings t.property_store[c_settings].Pages = c_pages t.property_store[c_pages].Help = c_help elseif bR == "Lighting" then t.property_store[x].ClockTime = 14 t.property_store[x].Brightness = 2 t.property_store[x].FogEnd = 100000 t.property_store[x].FogColor = Color3.fromRGB(192, 192, 192) t.property_store[x].Ambient = Color3.fromRGB(128, 128, 128) t.property_store[x].OutdoorAmbient = Color3.fromRGB(128, 128, 128) t.property_store[x].EnvironmentDiffuseScale = 1 t.property_store[x].EnvironmentSpecularScale = 1 t.property_store[x].Technology = b_enum_item("Enum.Technology.ShadowMap") elseif bR == "HttpService" then t.property_store[x].HttpEnabled = false elseif bR == "PolicyService" then t.property_store[x].PolicyChanged = b_ensure_signal(x, "PolicyChanged", "PolicyService.PolicyChanged") t.property_store[x].__policy_info = { AreAdsAllowed = false, ArePaidRandomItemsRestricted = false, AllowedExternalLinkReferences = {}, IsSubjectToChinaPolicies = false, IsPaidItemTradingAllowed = true, IsContentSharingAllowed = true } elseif bR == "GuiService" then t.property_store[x].SelectedObject = nil t.property_store[x].SelectedCoreObject = nil elseif bR == "MarketplaceService" then t.property_store[x].PromptProductPurchaseFinished = b_ensure_signal(x, "PromptProductPurchaseFinished", "MarketplaceService.PromptProductPurchaseFinished") t.property_store[x].PromptPurchaseFinished = b_ensure_signal(x, "PromptPurchaseFinished", "MarketplaceService.PromptPurchaseFinished") elseif bR == "UserInputService" then t.property_store[x].TouchEnabled = false t.property_store[x].KeyboardEnabled = true t.property_store[x].MouseEnabled = true t.property_store[x].PreferredInput = b_enum_item("Enum.PreferredInput.KeyboardAndMouse") t.property_store[x].JumpRequest = b_ensure_signal(x, "JumpRequest", "UserInputService.JumpRequest") t.property_store[x].WindowFocused = b_ensure_signal(x, "WindowFocused", "UserInputService.WindowFocused") t.property_store[x].WindowFocusReleased = b_ensure_signal(x, "WindowFocusReleased", "UserInputService.WindowFocusReleased") elseif bR == "PlayerEmulatorService" then t.property_store[x].PlayerEmulationEnabled = false elseif bR == "ContentProvider" then t.property_store[x].RequestQueueSize = 0 elseif bR == "GroupService" then t.property_store[x].ClassName = "GroupService" elseif bR == "StylingService" then t.property_store[x].ClassName = "StylingService" elseif bR == "NetworkClient" then local c_replicator = b_child_proxy("ClientReplicator", x, "ClientReplicator") t.property_store[x].ClientReplicator = c_replicator t.property_store[x].OutgoingKBPSLimit = 0 elseif bR == "Chat" then local c_ugc = b_child_proxy("Ugc", game, "Folder") t.parent_map[x] = c_ugc t.property_store[c_ugc].Name = "Ugc" elseif bR == "Workspace" then local c_terrain = b_child_proxy("Terrain", workspace, "Terrain") local c_plots = b_child_proxy("Plots", workspace, "Folder") t.property_store[workspace].Terrain = c_terrain t.property_store[workspace].Plots = c_plots t.property_store[workspace].AirDensity = t.property_store[workspace].AirDensity or 1.2 t.property_store[workspace].FallenPartsDestroyHeight = t.property_store[workspace].FallenPartsDestroyHeight or -500 end if not b_had_service and bh == game then local c_service_added = t.property_store[game] and t.property_store[game].ServiceAdded if c_service_added then b_fire_signal(c_service_added, x) end end at(string.format("local %s = %s:GetService(%s)", _, bS, aH(bR))) return x end bP.FindService = function(self, bQ) local bR = q._engine_string_key(bQ) local bS = t.registry[bh] or "game" local x = nil if aJ[bR] or rawget(_G, "__LARRY_FAILOPEN_SERVICES") == true then x = bP.GetService(self, bR) end if x then local _ = aW(x, bR) at(string.format("local %s = %s:FindService(%s)", _, bS, aH(bR))) end return x end bP.WaitForChild = function(self, bT, bU) local bV = q._engine_string_key(bT) if bU ~= nil then if j(bU) ~= "number" then error("bad argument #2 to 'WaitForChild' (number expected, got " .. j(bU) .. ")", 0) end if bU < 0 then error("bad argument #2 to 'WaitForChild' (negative timeout)", 0) end end local x = b_find_child_by_name(bh, bV, false) if not x then local b_deadline = bU ~= nil and ((t.simulated_time or 0) + bU) or ((t.simulated_time or 0) + 0.25) while not x and (t.simulated_time or 0) < b_deadline do q._advance_simulation(1 / 60) x = b_find_child_by_name(bh, bV, false) end if not x and (bU == nil or rawget(_G, "__LARRY_FAILOPEN_CHILD_LOOKUPS") == true) then x = b_child_proxy(bV, bh, b_failopen_child_class(bV)) end end local bS = t.registry[bh] or "object" if x then local _ = aW(x, bV) if bU then at(string.format("local %s = %s:WaitForChild(%s, %s)", _, bS, aH(bV), aZ(bU))) else at(string.format("local %s = %s:WaitForChild(%s)", _, bS, aH(bV))) end elseif q.cfg and q.cfg.hookop_enabled then if bU then at(string.format("%s:WaitForChild(%s, %s)", bS, aH(bV), aZ(bU))) else at(string.format("%s:WaitForChild(%s)", bS, aH(bV))) end end return x end bP.FindFirstChild = function(self, bT, bW) if bW ~= nil and j(bW) ~= "boolean" then error("bad argument #2 to 'FindFirstChild' (boolean expected, got " .. j(bW) .. ")", 0) end local bV = q._engine_string_key(bT) local x = b_find_child_by_name(bh, bV, bW and true or false) if not x and rawget(_G, "__LARRY_FAILOPEN_CHILD_LOOKUPS") == true then x = b_child_proxy(bV, bh, b_failopen_child_class(bV)) end local bS = t.registry[bh] or "object" if x then local _ = aW(x, bV) if bW then at(string.format("local %s = %s:FindFirstChild(%s, true)", _, bS, aH(bV))) else at(string.format("local %s = %s:FindFirstChild(%s)", _, bS, aH(bV))) end elseif q.cfg and q.cfg.hookop_enabled then if bW then at(string.format("%s:FindFirstChild(%s, true)", bS, aH(bV))) else at(string.format("%s:FindFirstChild(%s)", bS, aH(bV))) end end return x end bP.FindFirstChildOfClass = function(self, bX) local bY = q._engine_string_key(bX) local x = b_find_child_by_class(bh, bY, false, false) if not x and rawget(_G, "__LARRY_FAILOPEN_CHILD_LOOKUPS") == true then x = b_child_proxy(bY, bh, bY) end local bS = t.registry[bh] or "object" if x then local _ = aW(x, bY) at(string.format("local %s = %s:FindFirstChildOfClass(%s)", _, bS, aH(bY))) elseif q.cfg and q.cfg.hookop_enabled then at(string.format("%s:FindFirstChildOfClass(%s)", bS, aH(bY))) end return x end bP.FindFirstChildWhichIsA = function(self, bX) local bY = q._engine_string_key(bX) local x = b_find_child_by_class(bh, bY, false, true) if not x and rawget(_G, "__LARRY_FAILOPEN_CHILD_LOOKUPS") == true then x = b_child_proxy(bY, bh, bY) end local bS = t.registry[bh] or "object" if x then local _ = aW(x, bY) at(string.format("local %s = %s:FindFirstChildWhichIsA(%s)", _, bS, aH(bY))) elseif q.cfg and q.cfg.hookop_enabled then at(string.format("%s:FindFirstChildWhichIsA(%s)", bS, aH(bY))) end return x end bP.FindFirstAncestor = function(self, am) local bZ = q._engine_string_key(am) local x = b_find_ancestor(bh, bZ) local bS = t.registry[bh] or "object" if x then local _ = aW(x, bZ) at(string.format("local %s = %s:FindFirstAncestor(%s)", _, bS, aH(bZ))) end return x end bP.FindFirstAncestorOfClass = function(self, bX) local bY = q._engine_string_key(bX) local x = b_find_ancestor_by_class(bh, bY, false) local bS = t.registry[bh] or "object" if x then local _ = aW(x, bY) at(string.format("local %s = %s:FindFirstAncestorOfClass(%s)", _, bS, aH(bY))) end return x end bP.FindFirstAncestorWhichIsA = function(self, bX) local bY = q._engine_string_key(bX) local x = b_find_ancestor_by_class(bh, bY, true) local bS = t.registry[bh] or "object" if x then local _ = aW(x, bY) at(string.format("local %s = %s:FindFirstAncestorWhichIsA(%s)", _, bS, aH(bY))) end return x end bP.GetChildren = function(self, ...) if rawget(_G, "__LARRY_STRICT_METHOD_ARITY") == true and select("#", ...) > 0 then error("GetChildren expects no arguments", 0) end local b_children = b_collect_children(bh) if bh == game and #b_children < 120 then local c_defaults = { "Workspace", "Run Service", "GuiService", "Stats", "TimerService", "SoundService", "VideoCaptureService", "NonReplicatedCSGDictionaryService", "CSGDictionaryService", "LogService", "MicroProfilerService", "ContentProvider", "KeyframeSequenceProvider", "AnimationClipProvider", "Chat", "MarketplaceService", "Players", "PointsService", "NotificationService", "ReplicatedFirst", "HttpRbxApiService", "TweenService", "MaterialService", "TextChatService", "TextService", "PlayerEmulatorService", "CorePackages", "StudioData", "SharedTableRegistry", "StarterPlayer", "StarterPack", "StarterGui", "CoreGui", "LocalizationService", "LocalizationTable", "PolicyService", "Teleport Service", "JointsService", "CollectionService", "PhysicsService", "BadgeService", "FriendService", "InsertService", "GamePassService", "Debris", "CookiesService", "Selection", "UserInputService", "KeyboardService", "MouseService", "VRService", "ContextActionService", "ScriptService", "AssetService", "RuntimeContentService", "TouchInputService", "BrowserService", "CaptureService", "AppStorageService", "AnalyticsService", "HeatmapService", "AvatarSettings", "SlimContentProvider", "GuidRegistryService", "Script Context", "RbxAnalyticsService", "TelemetryService", "Lighting", "ThirdPartyUserService", "PlatformFriendsService", "PlatformCloudStorageService", "GenericChallengeService", "ScriptRegistrationService", "RuntimeScriptService", "HttpService", "RobloxReplicatedStorage", "MessageBusService", "MemStorageService", "IXPService", "ChangeHistoryService", "EventIngestService", "GamepadService", "ExperienceService", "ExperienceStateCaptureService", "LinkingService", "SessionService", "WebViewService", "FacialAgeEstimationService", "StylingService", "TextBoxService", "MeshContentProvider", "SolidModelContentProvider", "HSRDataContentProvider", "VideoService", "Instance", "EditableService", "FilteredSelection", "ControllerService", "HapticService", "UIDragDetectorService", "NetworkClient", "VoiceChatService", "Visit", "PlayerHydrationService", "PermissionsService", "Teams", "FeatureRestrictionManager", "ExperienceAuthService", "CommerceService", "RecommendationService", "ReplicatedStorage", "TestService", "AdService", "SocialService", "PlatformLibraries", "SafetyService", "ProximityPromptService", "AvatarChatService", "AvatarCreationService", "AvatarEditorService", "GenerationService", "RobloxServerStorage", "ScriptProfilerService", "HeapProfilerService", "ModerationService", "AudioFocusService", "UserService", "AppLifecycleObserverService", "FaceAnimatorService", "GroupService", "CreatorStoreService", "RtMessagingService", "ExperienceNotificationService", "AchievementService", "TemporaryCageMeshProvider" } local c_service_aliases = { ["Run Service"] = "RunService", ["Teleport Service"] = "TeleportService", ["Script Context"] = "ScriptContext" } for _, c_service in ipairs(c_defaults) do local c_canonical = c_service_aliases[c_service] or c_service:gsub("%s+", "") local c_created = nil if aJ[c_canonical] then local c_ok, c_service_inst = pcall(function() return bP.GetService(bh, c_canonical) end) if c_ok then c_created = c_service_inst end end if not c_created then c_created = b_child_proxy(c_service, bh, "Instance") end if c_created and #b_collect_children(c_created) == 0 then b_child_proxy("Internal", c_created, "Folder") end end b_children = b_collect_children(bh) end return b_children end bP.GetDescendants = function(self) local bS = t.registry[bh] or "object" at(string.format("for _, obj in %s:GetDescendants() do", bS)) t.indent = t.indent + 1 if bh == game then -- Ensure DataModel services exist before descendant enumeration. bP.GetChildren(self) local function c_add_default_descendant(c_list, c_value) if not G(c_value) then return end for _, c_existing in ipairs(c_list) do if c_existing == c_value then return end end table.insert(c_list, c_value) end if j(t.__game_desc_virtual_count) ~= "number" then t.__game_desc_virtual_count = math.random(16000, 32000) end local c_total = t.__game_desc_virtual_count local c_real = b_list_descendants(game) local c_players = t.service_cache and t.service_cache.Players local c_local = c_players and t.property_store[c_players] and t.property_store[c_players].LocalPlayer local c_local_store = c_local and t.property_store[c_local] or nil c_add_default_descendant(c_real, c_local) if c_local_store then c_add_default_descendant(c_real, c_local_store.Character) c_add_default_descendant(c_real, c_local_store.PlayerScripts) c_add_default_descendant(c_real, c_local_store.Backpack) c_add_default_descendant(c_real, c_local_store.PlayerGui) local c_character_store = c_local_store.Character and t.property_store[c_local_store.Character] or nil if c_character_store then c_add_default_descendant(c_real, c_character_store.Animate) c_add_default_descendant(c_real, c_character_store.Humanoid) c_add_default_descendant(c_real, c_character_store.HumanoidRootPart) end local c_scripts_store = c_local_store.PlayerScripts and t.property_store[c_local_store.PlayerScripts] or nil if c_scripts_store then c_add_default_descendant(c_real, c_scripts_store.PlayerModule) c_add_default_descendant(c_real, c_scripts_store.ImAFKBruh) end end if #c_real < 3 then local c_rep = t.service_cache and t.service_cache.ReplicatedStorage or game for c_index = 1, 3 do local c_class = c_index == 1 and "ModuleScript" or "LocalScript" local c_script = b_child_proxy("RuntimeScript" .. tostring(c_index), c_rep, c_class) t.property_store[c_script] = t.property_store[c_script] or {} t.property_store[c_script].ClassName = c_class t.property_store[c_script].Name = "RuntimeScript" .. tostring(c_index) t.property_store[c_script].Source = "" c_add_default_descendant(c_real, c_script) end end local c_real_n = #c_real local c_dummy = t.__game_desc_dummy if not G(c_dummy) then c_dummy = b_child_proxy("__DescendantDummy", workspace, "Folder") t.__game_desc_dummy = c_dummy end local c_done = false return setmetatable( c_real, { __iter = function() local c_i = 0 return function() c_i = c_i + 1 if c_i <= c_real_n then return c_i, c_real[c_i] end if c_i <= c_total then return c_i, c_dummy end if not c_done then c_done = true t.indent = t.indent - 1 at("end") end return nil end end } ) end local c0 = b_list_descendants(bh) local c1 = false return setmetatable( c0, { __iter = function(c2) local c3 = 0 return function() c3 = c3 + 1 local c4 = c2[c3] if c4 ~= nil then return c3, c4 end if not c1 then c1 = true t.indent = t.indent - 1 at("end") end return nil end end } ) end bP.Clone = function(self) local bS = t.registry[bh] or "object" local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or aT or "Instance" if bh == game or b_class == "DataModel" then error("Ugc cannot be cloned", 0) end if bh == workspace or b_class == "Workspace" then error("Workspace cannot be cloned", 0) end local c_clone = b_clone_instance(bh, nil) if not c_clone then return nil end local _ = aW(c_clone, "clone") at(string.format("local %s = %s:Clone()", _, bS)) return c_clone end bP.GetMass = function(self) local bS = t.registry[bh] or "object" local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or "" local b_is_part = b_class == "Part" or b_class == "MeshPart" or b_class == "BasePart" or b_class == "UnionOperation" if not b_is_part then error(b_class .. " is not a BasePart", 0) end local b_size = b_store.Size or Vector3.new(4, 1, 2) local b_volume = b_size.X * b_size.Y * b_size.Z local b_density = b_store.CustomPhysicalProperties and b_store.CustomPhysicalProperties.Density or 0.7 local b_mass = b_volume * b_density at(string.format("local mass = %s:GetMass()", bS)) return b_mass end bP.ApplyAngularImpulse = function(self, c_impulse) b_validate_instance_self(self, "ApplyAngularImpulse") local bS = t.registry[bh] or "part" local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or aT or "Instance" local b_is_part = b_class == "Part" or b_class == "MeshPart" or b_class == "BasePart" or b_class == "UnionOperation" if not b_is_part then error(b_class .. " is not a BasePart", 0) end local c_ix, c_iy, c_iz = b_vector_components(c_impulse or Vector3.new(0, 0, 0)) local c_scale = 0.1 local c_vel = Vector3.new(c_ix * c_scale, c_iy * c_scale, c_iz * c_scale) t.property_store[bh].AssemblyAngularVelocity = c_vel t.property_store[bh].RotVelocity = c_vel at(string.format("%s:ApplyAngularImpulse(%s)", bS, aZ(c_impulse))) return nil end bP.Destroy = function(self) b_validate_instance_self(self, "Destroy") local bS = t.registry[bh] or "object" if bh == game then error("The Parent property of DataModel is locked", 0) end if bh == workspace then error("The Parent property of Workspace is locked", 0) end if t.parent_map[bh] == game then local b_service_name = (t.property_store[bh] and (t.property_store[bh].Name or t.property_store[bh].ClassName)) or "" if t.service_cache[b_service_name] == bh then error("The Parent property of " .. tostring(b_service_name) .. " is locked", 0) end end b_destroy_instance(bh) at(string.format("%s:Destroy()", bS)) end bP.Remove = function(self) b_validate_instance_self(self, "Remove") local bS = t.registry[bh] or "object" if t.property_store[bh] and t.property_store[bh].__drawing_object then t.property_store[bh].Removed = true at(string.format("%s:Remove()", bS)) return end if bh == game or bh == workspace then error("cannot destroy root instance", 0) end if t.parent_map[bh] == game then local b_service_name = (t.property_store[bh] and (t.property_store[bh].Name or t.property_store[bh].ClassName)) or "" if t.service_cache[b_service_name] == bh then error("The Parent property of " .. tostring(b_service_name) .. " is locked", 0) end end b_destroy_instance(bh) at(string.format("%s:Remove()", bS)) end bP.ClearAllChildren = function(self) local bS = t.registry[bh] or "object" for _, c_child in ipairs(b_collect_children(bh)) do b_destroy_instance(c_child) end at(string.format("%s:ClearAllChildren()", bS)) end bP.Connect = function(self, bs) local bS = t.registry[bh] or "signal" local c1 = b_named_proxy("connection", nil, "connection", "RBXScriptConnection") local c2 = aW(c1, "conn") local c3 = bS:match("%.([^%.]+)$") or bS local c4 = {"..."} if c3:match("InputBegan") or c3:match("InputEnded") or c3:match("InputChanged") then c4 = {"input", "gameProcessed"} elseif c3:match("CharacterAdded") or c3:match("CharacterRemoving") then c4 = {"character"} elseif c3:match("PlayerAdded") or c3:match("PlayerRemoving") then c4 = {"player"} elseif c3:match("Chatted") then c4 = {"message", "recipient"} elseif c3:match("TouchTap") then c4 = {"touchPositions"} elseif c3:match("Touched") then c4 = {"hit"} elseif c3:match("Heartbeat") or c3:match("RenderStepped") then c4 = {"deltaTime"} elseif c3:match("Stepped") then c4 = {"time", "deltaTime"} elseif c3:match("Changed") and not c3:match("GetPropertyChangedSignal") and not c3:match("GetAttributeChangedSignal") then c4 = {"property"} elseif c3:match("ChildAdded") or c3:match("ChildRemoved") then c4 = {"child"} elseif c3:match("DescendantAdded") or c3:match("DescendantRemoving") then c4 = {"descendant"} elseif c3:match("Died") or c3:match("MouseButton") or c3:match("Activated") then c4 = {} elseif c3:match("MouseClick") then c4 = {"playerWhoClicked"} elseif c3:match("FocusLost") then c4 = {"enterPressed", "inputObject"} end t.property_store[c1] = t.property_store[c1] or {} t.property_store[c1].__kind = "RBXScriptConnection" t.property_store[c1].Connected = true t.connection_info[c1] = {signal = bh, signal_name = c3, callback = bs, connected = true} t.signal_connections[bh] = t.signal_connections[bh] or {} table.insert(t.signal_connections[bh], c1) local c_params = b_larry_function_params_literal(bs) or table.concat(c4, ", ") at(string.format("local %s = %s:Connect(function(%s)", c2, bS, c_params)) local b_callback_body = b_larry_function_body_literal(bs) if b_callback_body then t.indent = t.indent + 1 b_larry_emit_signal_callback_source_lines(b_callback_body) t.indent = t.indent - 1 t.connection_info[c1].source_emitted = true elseif not t.auto_firing then t.auto_firing = true local b_args = {} -- GetPropertyChangedSignal / GetAttributeChangedSignal never fire on Connect (only on assignment). local b_skip_immediate_fire = (c3:match("GetPropertyChangedSignal") ~= nil) or (c3:match("GetAttributeChangedSignal") ~= nil) if c3:match("InputBegan") or c3:match("InputChanged") or c3:match("InputEnded") then local c_input = b_named_proxy("InputObject", nil, "input", "InputObject") local c_state = "Begin" if c3:match("InputChanged") then c_state = "Change" elseif c3:match("InputEnded") then c_state = "End" end t.property_store[c_input] = t.property_store[c_input] or {} t.property_store[c_input].ClassName = "InputObject" t.property_store[c_input].Name = "InputObject" t.property_store[c_input].__kind = "InputObject" t.property_store[c_input].Position = Vector2.new(0, 0) t.property_store[c_input].Delta = Vector2.new(0, 0) t.property_store[c_input].UserInputType = b_enum_item("Enum.UserInputType.MouseButton1") t.property_store[c_input].UserInputState = b_enum_item("Enum.UserInputState." .. c_state) t.property_store[c_input].KeyCode = b_enum_item("Enum.KeyCode.Unknown") t.property_store[c_input].Changed = t.property_store[c_input].Changed or b_ensure_signal(c_input, "Changed", "InputObject.Changed") rawset(c_input, "__temp_path", "input") b_args = {c_input, false} elseif c3:match("FocusLost") then b_args = {false, nil} elseif c3:match("Heartbeat") or c3:match("RenderStepped") then b_args = {1 / 60} b_skip_immediate_fire = true elseif c3:match("Stepped") then b_args = {0, 1 / 60} b_skip_immediate_fire = true elseif c3:match("CharacterAdded") or c3:match("CharacterRemoving") then local c_char = bj("Model", false) t.property_store[c_char] = t.property_store[c_char] or {} t.property_store[c_char].ClassName = "Model" t.property_store[c_char].Name = "Character" rawset(c_char, "__temp_path", "character") b_args = {c_char} elseif c3:match("PlayerAdded") or c3:match("PlayerRemoving") then local c_plr = bj("Player", false) t.property_store[c_plr] = t.property_store[c_plr] or {} t.property_store[c_plr].ClassName = "Player" t.property_store[c_plr].Name = "Player" t.property_store[c_plr].DisplayName = "Player" rawset(c_plr, "__temp_path", "player") b_args = {c_plr} elseif c3:match("Chatted") then b_args = {"mock message", nil} elseif c3:match("TouchTap") then b_args = {{Vector2.new(0, 0)}} elseif c3:match("Touched") or c3:match("TouchEnded") then local c_hit = bj("Part", false) t.property_store[c_hit] = t.property_store[c_hit] or {} t.property_store[c_hit].ClassName = "Part" t.property_store[c_hit].Name = "HitPart" rawset(c_hit, "__temp_path", "hit") b_args = {c_hit} elseif c3:match("ChildAdded") or c3:match("ChildRemoved") then local c_child = bj("Part", false) t.property_store[c_child] = t.property_store[c_child] or {} t.property_store[c_child].ClassName = "Part" t.property_store[c_child].Name = "Child" rawset(c_child, "__temp_path", "child") b_args = {c_child} elseif c3:match("DescendantAdded") or c3:match("DescendantRemoving") then local c_desc = bj("Part", false) t.property_store[c_desc] = t.property_store[c_desc] or {} t.property_store[c_desc].ClassName = "Part" t.property_store[c_desc].Name = "Descendant" rawset(c_desc, "__temp_path", "descendant") b_args = {c_desc} elseif c3:match("Changed") and not c3:match("HealthChanged") and not c3:match("StateChanged") and not c3:match("GetPropertyChangedSignal") and not c3:match("GetAttributeChangedSignal") then b_args = {"Value"} elseif c3:match("HealthChanged") then b_args = {100} elseif c3:match("StateChanged") then b_args = {b_enum_item("Enum.HumanoidStateType.Running"), b_enum_item("Enum.HumanoidStateType.Freefall")} elseif c3:match("AnimationPlayed") then local c_track = bj("AnimationTrack", false) t.property_store[c_track] = t.property_store[c_track] or {} t.property_store[c_track].ClassName = "AnimationTrack" t.property_store[c_track].Name = "AnimationTrack" b_args = {c_track} elseif c3:match("MessageReceived") then local c_msg = bj("TextChatMessage", false) t.property_store[c_msg] = t.property_store[c_msg] or {} t.property_store[c_msg].ClassName = "TextChatMessage" t.property_store[c_msg].Name = "TextChatMessage" t.property_store[c_msg].Text = "mock message" local c_src = bj("TextSource", false) t.property_store[c_src] = t.property_store[c_src] or {} t.property_store[c_src].ClassName = "TextSource" t.property_store[c_src].Name = "TextSource" t.property_store[c_src].UserId = 1 t.property_store[c_msg].TextSource = c_src b_args = {c_msg} elseif c3:match("Died") then b_args = {} elseif c3:match("MouseButton") or c3:match("Activated") then b_args = {} end t.indent = t.indent + 1 t.callback_depth = (t.callback_depth or 0) + 1 local b_prev_signal_indent = t.signal_callback_indent_active t.signal_callback_indent_active = true if not b_skip_immediate_fire then b_fire_signal(bh, native_unpack(b_args)) end t.signal_callback_indent_active = b_prev_signal_indent t.callback_depth = (t.callback_depth or 0) - 1 t.indent = t.indent - 1 t.auto_firing = false end at("end)") return c1 end bP.connect = function(self, bs) return bP.Connect(self, bs) end bP.ConnectParallel = function(self, bs) local bS = t.registry[bh] or "signal" local c1 = b_named_proxy("connection", nil, "connection", "RBXScriptConnection") local c2 = aW(c1, "conn") local c3 = bS:match("%.([^%.]+)$") or bS t.property_store[c1] = t.property_store[c1] or {} t.property_store[c1].__kind = "RBXScriptConnection" t.property_store[c1].Connected = true t.connection_info[c1] = {signal = bh, signal_name = c3, callback = bs, connected = true} t.signal_connections[bh] = t.signal_connections[bh] or {} table.insert(t.signal_connections[bh], c1) local c_params = b_larry_function_params_literal(bs) or "..." at(string.format("local %s = %s:ConnectParallel(function(%s)", c2, bS, c_params)) local b_callback_body = b_larry_function_body_literal(bs) if b_callback_body then t.indent = t.indent + 1 b_larry_emit_signal_callback_source_lines(b_callback_body) t.indent = t.indent - 1 t.connection_info[c1].source_emitted = true end at("end)") return c1 end bP.Once = function(self, bs) local bS = t.registry[bh] or "signal" local c1 = b_named_proxy("connection", nil, "connection", "RBXScriptConnection") local c2 = aW(c1, "conn") t.property_store[c1] = t.property_store[c1] or {} t.property_store[c1].__kind = "RBXScriptConnection" t.property_store[c1].Connected = true t.connection_info[c1] = {signal = bh, signal_name = bS:match("%.([^%.]+)$") or bS, callback = bs, connected = true, once = true} t.signal_connections[bh] = t.signal_connections[bh] or {} table.insert(t.signal_connections[bh], c1) local c_params = b_larry_function_params_literal(bs) or "..." at(string.format("local %s = %s:Once(function(%s)", c2, bS, c_params)) local b_callback_body = b_larry_function_body_literal(bs) if b_callback_body then t.indent = t.indent + 1 b_larry_emit_signal_callback_source_lines(b_callback_body) t.indent = t.indent - 1 t.connection_info[c1].source_emitted = true end at("end)") return c1 end local function b_seed_wait_signal_args(b_signal_name, b_meta) b_signal_name = aE(b_signal_name or "") if b_signal_name:match("InputBegan") or b_signal_name:match("InputChanged") or b_signal_name:match("InputEnded") then local c_input = b_named_proxy("InputObject", nil, "input", "InputObject") local c_state = "Begin" if b_signal_name:match("InputChanged") then c_state = "Change" elseif b_signal_name:match("InputEnded") then c_state = "End" end t.property_store[c_input] = t.property_store[c_input] or {} t.property_store[c_input].ClassName = "InputObject" t.property_store[c_input].Name = "InputObject" t.property_store[c_input].__kind = "InputObject" t.property_store[c_input].Position = Vector2.new(0, 0) t.property_store[c_input].Delta = Vector2.new(0, 0) t.property_store[c_input].UserInputType = b_enum_item("Enum.UserInputType.MouseButton1") t.property_store[c_input].UserInputState = b_enum_item("Enum.UserInputState." .. c_state) t.property_store[c_input].KeyCode = b_enum_item("Enum.KeyCode.Unknown") t.property_store[c_input].Changed = t.property_store[c_input].Changed or b_ensure_signal(c_input, "Changed", "InputObject.Changed") b_meta.fire_count = (b_meta.fire_count or 0) + 1 b_meta.last_args = {n = 2, c_input, false} return true end if b_signal_name:match("FocusLost") then b_meta.fire_count = (b_meta.fire_count or 0) + 1 b_meta.last_args = {n = 2, true, nil} return true end if b_signal_name:match("Chatted") then b_meta.fire_count = (b_meta.fire_count or 0) + 1 b_meta.last_args = {n = 2, "mock message", nil} return true end if b_signal_name:match("TouchTap") then b_meta.fire_count = (b_meta.fire_count or 0) + 1 b_meta.last_args = {n = 1, {Vector2.new(0, 0)}} return true end if b_signal_name:match("MessageReceived") then local c_msg = bj("TextChatMessage", false) t.property_store[c_msg] = t.property_store[c_msg] or {} t.property_store[c_msg].ClassName = "TextChatMessage" t.property_store[c_msg].Name = "TextChatMessage" t.property_store[c_msg].Text = "mock message" local c_src = bj("TextSource", false) t.property_store[c_src] = t.property_store[c_src] or {} t.property_store[c_src].ClassName = "TextSource" t.property_store[c_src].Name = "TextSource" t.property_store[c_src].UserId = 1 t.property_store[c_msg].TextSource = c_src b_meta.fire_count = (b_meta.fire_count or 0) + 1 b_meta.last_args = {n = 1, c_msg} return true end return false end bP.Wait = function(self) local bS = t.registry[bh] or "signal" local b_meta = t.signal_meta[bh] or {fire_count = 0, last_args = {}} t.signal_meta[bh] = b_meta local b_initial_count = (b_meta.fire_count or 0) local b_target_count = math.max(1, b_initial_count + 1) local z = bj("waitResult", false) local _ = aW(z, "waitResult") at(string.format("local %s = %s:Wait()", _, bS)) local function b_ready() return (b_meta.fire_count or 0) >= b_target_count end local b_seeded = false if b_initial_count <= 0 and not b_ready() then b_seeded = b_seed_wait_signal_args(b_meta.name or bS, b_meta) end if not b_ready() and not b_seeded then local b_guard = 0 while not b_ready() and b_guard < 512 do q._advance_simulation(1 / 60) b_guard = b_guard + 1 end end local b_args = b_meta.last_args if j(b_args) == "table" and (b_args.n or #b_args) > 0 then return native_unpack(b_args, 1, b_args.n or #b_args) end return nil end bP.wait = function(self) return bP.Wait(self) end bP.Disconnect = function(self) local bS = t.registry[bh] or "connection" if t.property_store[bh] then t.property_store[bh].Connected = false end if t.connection_info[bh] then t.connection_info[bh].connected = false end at(string.format("%s:Disconnect()", bS)) end bP.disconnect = function(self) return bP.Disconnect(self) end bP.FireServer = function(self, ...) local bS = t.registry[bh] or "remote" local b_class = t.property_store[bh] and t.property_store[bh].ClassName or "Instance" if b_class ~= "RemoteEvent" and b_class ~= "UnreliableRemoteEvent" and rawget(_G, "__LARRY_STRICT_REMOTE_TYPES") == true then error("FireServer is not a valid member of " .. tostring(b_class), 0) end local bA = {...} local c5 = {} for W, b5 in ipairs(bA) do table.insert(c5, aZ(b5)) end at(string.format("%s:FireServer(%s)", bS, table.concat(c5, ", "))) table.insert(t.call_graph, {type = "RemoteEvent", name = bS, args = bA, class = b_class}) end bP.FireAllClients = function(self, ...) local bS = t.registry[bh] or "remote" local bA = {...} local c5 = {} for W, b5 in ipairs(bA) do table.insert(c5, aZ(b5)) end at(string.format("%s:FireAllClients(%s)", bS, table.concat(c5, ", "))) end bP.FireClient = function(self, b_player, ...) local bS = t.registry[bh] or "remote" local bA = {...} local c5 = {aZ(b_player)} for W, b5 in ipairs(bA) do table.insert(c5, aZ(b5)) end at(string.format("%s:FireClient(%s)", bS, table.concat(c5, ", "))) end bP.SetMinutesAfterMidnight = function(self, b_minutes) local bS = t.registry[bh] or "lighting" if t.property_store[bh] then t.property_store[bh].ClockTime = (tonumber(b_minutes) or 0) / 60 end at(string.format("%s:SetMinutesAfterMidnight(%s)", bS, aZ(b_minutes))) end bP.GetMinutesAfterMidnight = function(self) local b_store = t.property_store[bh] or {} return (tonumber(b_store.ClockTime) or 14) * 60 end bP.GetSunDirection = function(self) return Vector3.new(0, 1, 0) end bP.GetMoonDirection = function(self) return Vector3.new(0, -1, 0) end bP.GetServerTimeNow = function(self) return p.clock() end bP.GetGameTimeNow = function(self) return p.clock() end bP.UserOwnsGamePassAsync = function(self, ...) return false end bP.UserOwnsAssetAsync = function(self, ...) return false end bP.PlayerOwnsAsset = function(self, ...) return false end bP.GetProductInfo = function(self, b_id, b_type) return { Name = "MockProduct", Description = "Mock product info", PriceInRobux = 0, AssetTypeId = 0, ProductId = tonumber(b_id) or 0, Creator = {Name = "Mock", Id = 0} } end bP.InvokeServer = function(self, ...) local bS = t.registry[bh] or "remote" local b_class = t.property_store[bh] and t.property_store[bh].ClassName or "Instance" if b_class ~= "RemoteFunction" and rawget(_G, "__LARRY_STRICT_REMOTE_TYPES") == true then error("InvokeServer is not a valid member of " .. tostring(b_class), 0) end local bA = {...} local c5 = {} for W, b5 in ipairs(bA) do table.insert(c5, aZ(b5)) end local z = bj("invokeResult", false) local _ = aW(z, "result") at(string.format("local %s = %s:InvokeServer(%s)", _, bS, table.concat(c5, ", "))) table.insert(t.call_graph, {type = "RemoteFunction", name = bS, args = bA}) return z end bP.Invoke = function(self, ...) local bS = t.registry[bh] or "bindable" local b_class = t.property_store[bh] and t.property_store[bh].ClassName or "Instance" if b_class ~= "BindableFunction" then error("Invoke is not a valid member of " .. tostring(b_class), 0) end local b_callback = t.property_store[bh] and t.property_store[bh].OnInvoke local bA = {...} local c5 = {} for _, b5 in ipairs(bA) do table.insert(c5, aZ(b5)) end at(string.format("%s:Invoke(%s)", bS, table.concat(c5, ", "))) if j(b_callback) == "function" then return b_callback(...) end return nil end bP.Create = function(self, x, c6, c7) local bS = t.registry[bh] or "TweenService" if j(c7) ~= "table" then error("Unable to cast to Dictionary", 0) end for c_key, c_value in pairs(c7) do c_value = b_coerce_enum_property_value(x, c_key, c_value) c_value = b_coerce_string_property_value(c_key, c_value) local c_expected = b_resolve_expected_property_type(x, c_key, c_value) local c_can_coerce, c_coerced = b_try_coerce_by_expected_type(c_expected, c_value) if c_can_coerce then c_value = c_coerced end if c_expected and not b_property_accepts_value(c_expected, c_value) then error(string.format("unable to cast property %s to expected type", tostring(c_key)), 0) end b_validate_property_assignment(x, c_key, c_value) c7[c_key] = c_value end local c8 = bj("tween", false) local _ = aW(c8, "tween") t.property_store[c8] = t.property_store[c8] or {} t.property_store[c8].ClassName = "Tween" t.property_store[c8].PlaybackState = b_enum_item("Enum.PlaybackState.Begin") t.property_store[c8].__target = x t.property_store[c8].__goal = c7 t.property_store[c8].__remaining = (t.property_store[c6] and t.property_store[c6].Time) or 0 t.property_store[c8].__duration = t.property_store[c8].__remaining t.property_store[c8].__start = nil -- Create Completed signal for the tween t.property_store[c8].Completed = b_ensure_signal(c8, "Completed", _ .. ".Completed") at(string.format("local %s = %s:Create(%s, %s, %s)", _, bS, aZ(x), aZ(c6), aZ(c7))) return c8 end bP.Play = function(self) local bS = t.registry[bh] or "tween" local b_store = t.property_store[bh] local b_class = b_store and b_store.ClassName or nil if b_store and b_class == "Tween" then if G(b_store.__target) and j(b_store.__goal) == "table" then local c_start = {} local c_target_store = t.property_store[b_store.__target] or {} for c_key, _ in D(b_store.__goal) do c_start[c_key] = c_target_store[c_key] end b_store.__start = c_start end t.property_store[bh].PlaybackState = b_enum_item("Enum.PlaybackState.Playing") t.active_tweens = t.active_tweens or {} table.insert(t.active_tweens, bh) elseif b_store and b_class == "Sound" then if b_store.PlaybackState == b_enum_item("Enum.PlaybackState.Completed") then b_store.TimePosition = 0 end b_store.IsPlaying = true b_store.Playing = true b_store.PlaybackState = b_enum_item("Enum.PlaybackState.Playing") if b_store.Played then b_fire_signal(b_store.Played) end end at(string.format("%s:Play()", bS)) end bP.Pause = function(self) local bS = t.registry[bh] or "tween" local b_store = t.property_store[bh] if b_store and b_store.ClassName == "Sound" then b_store.IsPlaying = false b_store.Playing = false if b_store.Paused then b_fire_signal(b_store.Paused) end end at(string.format("%s:Pause()", bS)) end bP.Resume = function(self) local bS = t.registry[bh] or "sound" local b_store = t.property_store[bh] if b_store and b_store.ClassName == "Sound" then b_store.IsPlaying = true b_store.Playing = true b_store.PlaybackState = b_enum_item("Enum.PlaybackState.Playing") if b_store.Resumed then b_fire_signal(b_store.Resumed) end end at(string.format("%s:Resume()", bS)) end bP.Cancel = function(self) local bS = t.registry[bh] or "tween" at(string.format("%s:Cancel()", bS)) end bP.Stop = function(self) local bS = t.registry[bh] or "tween" local b_store = t.property_store[bh] if b_store and b_store.ClassName == "Sound" then b_store.IsPlaying = false b_store.Playing = false b_store.PlaybackState = b_enum_item("Enum.PlaybackState.Completed") b_store.TimePosition = 0 if b_store.Stopped then b_fire_signal(b_store.Stopped) end end at(string.format("%s:Stop()", bS)) end bP.Raycast = function(self, c9, ca, cb) local bS = t.registry[bh] or "workspace" local z = nil local _ = "nil" local c_hit = nil local c_best_t = nil local c_filter = cb and t.property_store[cb] and t.property_store[cb].FilterDescendantsInstances or nil local c_filter_type = cb and t.property_store[cb] and tostring(t.property_store[cb].FilterType or "") or "" local c_include = c_filter_type:match("Include$") ~= nil or c_filter_type:match("Whitelist$") ~= nil local function c_in_workspace(c_part) local c_cursor = c_part while c_cursor do if c_cursor == workspace then return true end c_cursor = t.parent_map[c_cursor] end return false end local function c_is_descendant_of(c_part, c_ancestor) local c_cursor = c_part while c_cursor do if c_cursor == c_ancestor then return true end c_cursor = t.parent_map[c_cursor] end return false end for c_part, c_parent in D(t.parent_map) do if c_in_workspace(c_part) and b_is_spatial_part(c_part) then local c_allowed = true if c_filter then local c_found = false for _, c_item in ipairs(c_filter) do if c_item == c_part or (G(c_item) and c_is_descendant_of(c_part, c_item)) then c_found = true break end end c_allowed = c_include and c_found or (not c_include and not c_found) end if c_allowed and (t.property_store[c_part] or {}).__mock_support == true and not c_filter then c_allowed = false end if c_allowed then local c_result = b_ray_box_hit(c9, ca, c_part) if c_result and (not c_best_t or c_result.t < c_best_t) then c_hit = {part = c_part, position = c_result.position, normal = c_result.normal} c_best_t = c_result.t end end end end if c_hit then z = bj("raycastResult", false) _ = aW(z, "rayResult") t.property_store[z] = { __kind = "RaycastResult", ClassName = "RaycastResult", Instance = c_hit.part, Position = c_hit.position, Normal = c_hit.normal, Distance = c_best_t or 0 } end if cb then at(string.format("local %s = %s:Raycast(%s, %s, %s)", _, bS, aZ(c9), aZ(ca), aZ(cb))) else at(string.format("local %s = %s:Raycast(%s, %s)", _, bS, aZ(c9), aZ(ca))) end return z end bP.GetPartsInPart = function(self, c_part, c_params) local c_results = {} if not b_is_spatial_part(c_part) then return c_results end local c_lx, c_ly, c_lz = b_vector_components((t.property_store[c_part] or {}).Position or Vector3.new(0, 0, 0)) local c_lsx, c_lsy, c_lsz = b_vector_components((t.property_store[c_part] or {}).Size or Vector3.new(4, 4, 4)) for c_other, c_parent in D(t.parent_map) do if c_parent == workspace and c_other ~= c_part and b_is_spatial_part(c_other) then local c_rx, c_ry, c_rz = b_vector_components((t.property_store[c_other] or {}).Position or Vector3.new(0, 0, 0)) local c_rsx, c_rsy, c_rsz = b_vector_components((t.property_store[c_other] or {}).Size or Vector3.new(4, 4, 4)) if math.abs(c_lx - c_rx) <= ((c_lsx + c_rsx) / 2) and math.abs(c_ly - c_ry) <= ((c_lsy + c_rsy) / 2) and math.abs(c_lz - c_rz) <= ((c_lsz + c_rsz) / 2) then table.insert(c_results, c_other) end end end return c_results end bP.GetTouchingParts = function(self) return bP.GetPartsInPart(workspace, bh) end bP.GetPartBoundsInRadius = function(self, c_pos, c_radius, c_params) local c_results = {} local c_x, c_y, c_z = b_vector_components(c_pos) local c_r = tonumber(c_radius) or 0 for c_other, c_parent in D(t.parent_map) do if c_parent == workspace and b_is_spatial_part(c_other) then local c_px, c_py, c_pz = b_vector_components((t.property_store[c_other] or {}).Position or Vector3.new(0, 0, 0)) local c_dx, c_dy, c_dz = c_px - c_x, c_py - c_y, c_pz - c_z if ((c_dx * c_dx) + (c_dy * c_dy) + (c_dz * c_dz)) <= (c_r * c_r) then table.insert(c_results, c_other) end end end return c_results end bP.WorldToScreenPoint = function(self, c_world) local c_x, c_y, c_z = b_vector_components(c_world) local c_view = (t.property_store[bh] and t.property_store[bh].ViewportSize) or Vector2.new(1920, 1080) local c_vx = tonumber((t.property_store[c_view] or {}).X) or 1920 local c_vy = tonumber((t.property_store[c_view] or {}).Y) or 1080 return Vector3.new((c_vx / 2) + c_x, (c_vy / 2) - c_y, math.max(0.1, c_z)), c_z > 0 end bP.WorldToViewportPoint = function(self, c_world) return bP.WorldToScreenPoint(self, c_world) end bP.ScreenPointToRay = function(self, c_x, c_y, c_depth) local c_z = tonumber(c_depth) or 0 return Ray.new(Vector3.new(0, 10, 0), Vector3.new(tonumber(c_x) or 0, tonumber(c_y) or 0, -1 - c_z)) end bP.ViewportPointToRay = function(self, c_x, c_y, c_depth) return bP.ScreenPointToRay(self, c_x, c_y, c_depth) end bP.BulkMoveTo = function(self, c_parts, c_targets, c_mode) local bS = t.registry[bh] or "workspace" if j(c_parts) == "table" and j(c_targets) == "table" then for c_index, c_part in ipairs(c_parts) do local c_target = c_targets[c_index] if G(c_part) and G(c_target) and b_proxy_kind(c_target) == "CFrame" then t.property_store[c_part] = t.property_store[c_part] or {} t.property_store[c_part].CFrame = c_target local c_x, c_y, c_z = b_cframe_components(c_target) t.property_store[c_part].Position = Vector3.new(c_x, c_y, c_z) if c_mode == b_enum_item("Enum.BulkMoveMode.FireCFrameChanged") then local c_changed = t.property_store[c_part].Changed or (t.child_cache[c_part] and t.child_cache[c_part].Changed) if c_changed then b_fire_signal(c_changed, "CFrame") end local c_cframe_signal = t.child_cache[c_part] and t.child_cache[c_part].CFrameChanged if c_cframe_signal then b_fire_signal(c_cframe_signal) end end end end end if c_mode ~= nil then at(string.format("%s:BulkMoveTo(%s, %s, %s)", bS, aZ(c_parts), aZ(c_targets), aZ(c_mode))) else at(string.format("%s:BulkMoveTo(%s, %s)", bS, aZ(c_parts), aZ(c_targets))) end return nil end bP.GetPartBoundsInBox = function(self, cf, size, params) local c_results = {} local c_px, c_py, c_pz = b_vector_components(cf.Position or Vector3.new(0, 0, 0)) local c_sx, c_sy, c_sz = b_vector_components(size) local c_minx, c_maxx = c_px - c_sx / 2, c_px + c_sx / 2 local c_miny, c_maxy = c_py - c_sy / 2, c_py + c_sy / 2 local c_minz, c_maxz = c_pz - c_sz / 2, c_pz + c_sz / 2 local c_filter = t.property_store[params] and t.property_store[params].FilterDescendantsInstances or nil local c_filter_type = t.property_store[params] and tostring(t.property_store[params].FilterType or "") or "" local c_include = c_filter_type:match("Include$") ~= nil or c_filter_type:match("Whitelist$") ~= nil local function c_in_workspace(c_part) local c_cursor = c_part while c_cursor do if c_cursor == workspace then return true end c_cursor = t.parent_map[c_cursor] end return false end local function c_is_descendant_of(c_part, c_ancestor) local c_cursor = c_part while c_cursor do if c_cursor == c_ancestor then return true end c_cursor = t.parent_map[c_cursor] end return false end for c_part, c_parent in D(t.parent_map) do if c_in_workspace(c_part) and b_is_spatial_part(c_part) then local c_allowed = true if c_filter then local c_found = false for _, c_item in ipairs(c_filter) do if c_item == c_part or (G(c_item) and c_is_descendant_of(c_part, c_item)) then c_found = true break end end c_allowed = c_include and c_found or (not c_include and not c_found) end if c_allowed and (t.property_store[c_part] or {}).__mock_support == true and not c_filter then c_allowed = false end if c_allowed then local c_pminx, c_pmaxx, c_pminy, c_pmaxy, c_pminz, c_pmaxz = b_part_bounds(c_part) if c_pmaxx >= c_minx and c_pminx <= c_maxx and c_pmaxy >= c_miny and c_pminy <= c_maxy and c_pmaxz >= c_minz and c_pminz <= c_maxz then table.insert(c_results, c_part) end end end end return c_results end bP.GetMouse = function(self) local bS = t.registry[bh] or "player" local cc = bj("mouse", false) local _ = aW(cc, "mouse") t.property_store[cc] = t.property_store[cc] or {} t.property_store[cc].__kind = "PlayerMouse" t.property_store[cc].ClassName = "PlayerMouse" t.property_store[cc].Name = "Mouse" t.property_store[cc].Hit = CFrame.new(0, 0, -10) t.property_store[cc].Origin = CFrame.new(0, 5, 0) t.property_store[cc].Target = nil -- Legacy Mouse signals (deprecated in Roblox, but widely used by scripts). t.property_store[cc].KeyDown = b_ensure_signal(cc, "KeyDown", "mouse.KeyDown") t.property_store[cc].KeyUp = b_ensure_signal(cc, "KeyUp", "mouse.KeyUp") t.property_store[cc].Button1Down = b_ensure_signal(cc, "Button1Down", "mouse.Button1Down") t.property_store[cc].Button1Up = b_ensure_signal(cc, "Button1Up", "mouse.Button1Up") t.property_store[cc].Button2Down = b_ensure_signal(cc, "Button2Down", "mouse.Button2Down") t.property_store[cc].Button2Up = b_ensure_signal(cc, "Button2Up", "mouse.Button2Up") t.property_store[cc].Move = b_ensure_signal(cc, "Move", "mouse.Move") t.property_store[cc].Idle = b_ensure_signal(cc, "Idle", "mouse.Idle") t.property_store[cc].WheelForward = b_ensure_signal(cc, "WheelForward", "mouse.WheelForward") t.property_store[cc].WheelBackward = b_ensure_signal(cc, "WheelBackward", "mouse.WheelBackward") at(string.format("local %s = %s:GetMouse()", _, bS)) return cc end bP.GetMouseLocation = function(self) return Vector2.new(0, 0) end bP.GetPlatform = function(self) b_validate_instance_self(self, "GetPlatform") local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or aT or "" if b_class ~= "UserInputService" then error("GetPlatform is not a valid member of " .. (b_class ~= "" and b_class or "Instance"), 0) end return b_enum_item("Enum.Platform.Windows") end -- Common GUI tween shims used by many obfuscated UI scripts. bP.TweenPosition = function(self, ...) local bS = t.registry[bh] or "gui" at(string.format("%s:TweenPosition(...)", bS)) return true end bP.TweenSize = function(self, ...) local bS = t.registry[bh] or "gui" at(string.format("%s:TweenSize(...)", bS)) return true end bP.TweenSizeAndPosition = function(self, ...) local bS = t.registry[bh] or "gui" at(string.format("%s:TweenSizeAndPosition(...)", bS)) return true end bP.IsKeyDown = function(self, keyCode) return false end bP.IsMouseButtonPressed = function(self, inputType) return false end bP.Kick = function(self, cd) local bS = t.registry[bh] or "player" if cd then at(string.format("%s:Kick(%s)", bS, aZ(cd))) else at(string.format("%s:Kick()", bS)) end end bP.GetPropertyChangedSignal = function(self, ce) local cf = q._engine_string_key(ce) if not b_property_exists(bh, cf) then error(cf .. " is not a valid member of " .. (aT or "Instance"), 0) end local bS = t.registry[bh] or "instance" local cg = b_ensure_signal(bh, cf .. "Changed", bS .. ":GetPropertyChangedSignal(" .. aH(cf) .. ")") return cg end bP.GetAttributeChangedSignal = function(self, ce) local cf = q._engine_string_key(ce) local bS = t.registry[bh] or "instance" return b_ensure_signal(bh, cf .. "AttributeChanged", bS .. ":GetAttributeChangedSignal(" .. aH(cf) .. ")") end bP.GetFocusedTextBox = function(self) return nil end bP.IsA = function(self, bX) local c_name = q._engine_string_key(bX) local c_class = t.property_store[bh] and t.property_store[bh].ClassName or aT or "Instance" return b_class_is_a(c_class, c_name) end bP.IsDescendantOf = function(self, ch) local c_cursor = t.parent_map[bh] while c_cursor do if c_cursor == ch then return true end c_cursor = t.parent_map[c_cursor] end return false end bP.IsAncestorOf = function(self, ci) if not G(ci) then return false end local c_cursor = t.parent_map[ci] while c_cursor do if c_cursor == bh then return true end c_cursor = t.parent_map[c_cursor] end return false end bP.GetAttribute = function(self, cj) local c_store = t.property_store[bh] or {} local c_attrs = c_store.__attributes or {} return c_attrs[q._engine_string_key(cj)] end bP.SetAttribute = function(self, cj, bm) local bS = t.registry[bh] or "instance" local c_store = t.property_store[bh] or {} c_store.__attributes = c_store.__attributes or {} local c_attr_name = q._engine_string_key(cj) c_store.__attributes[c_attr_name] = bm t.property_store[bh] = c_store local c_attr_changed = b_ensure_signal(bh, "AttributeChanged", bS .. ".AttributeChanged") b_fire_signal(c_attr_changed, c_attr_name) local c_specific = b_ensure_signal(bh, c_attr_name .. "AttributeChanged", bS .. ":GetAttributeChangedSignal(" .. aH(c_attr_name) .. ")") b_fire_signal(c_specific) at(string.format("%s:SetAttribute(%s, %s)", bS, aH(cj), aZ(bm))) end bP.GetAttributes = function(self) local c_store = t.property_store[bh] or {} return b_copy(c_store.__attributes or {}) end bP.GetPlayers = function(self) local c_store = t.property_store[bh] or {} if c_store.LocalPlayer then return {c_store.LocalPlayer} end return {} end bP.GetPlayerFromCharacter = function(self, ck) local bS = t.registry[bh] or "Players" local c_store = t.property_store[bh] or {} local cl = nil if c_store.LocalPlayer then local c_local_store = t.property_store[c_store.LocalPlayer] or {} if ck ~= nil and ck == c_local_store.Character then cl = c_store.LocalPlayer end end if cl then local _ = aW(cl, "player") at(string.format("local %s = %s:GetPlayerFromCharacter(%s)", _, bS, aZ(ck))) end return cl end bP.GetPlayerByUserId = function(self, cm) local bS = t.registry[bh] or "Players" local c_store = t.property_store[bh] or {} local cl = nil if c_store.LocalPlayer and (cm == (t.property_store[c_store.LocalPlayer] and t.property_store[c_store.LocalPlayer].UserId)) then cl = c_store.LocalPlayer end if cl then local _ = aW(cl, "player") at(string.format("local %s = %s:GetPlayerByUserId(%s)", _, bS, aZ(cm))) end return cl end bP.GetUserThumbnailAsync = function(self, userId, thumbnailType, thumbnailSize) local bS = t.registry[bh] or "Players" local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or "Instance" if b_class ~= "Players" then error("GetUserThumbnailAsync is not a valid member of " .. tostring(b_class), 0) end local b_id = math.floor(tonumber(userId) or 0) local b_type_name = "HeadShot" if b_is_enum_item_value(thumbnailType) then b_type_name = tostring((t.property_store[thumbnailType] or {}).Name or b_type_name) end local b_size_name = "Size420x420" if b_is_enum_item_value(thumbnailSize) then b_size_name = tostring((t.property_store[thumbnailSize] or {}).Name or b_size_name) end at(string.format("local thumbnail, isReady = %s:GetUserThumbnailAsync(%s, %s, %s)", bS, aZ(userId), aZ(thumbnailType), aZ(thumbnailSize))) return string.format("rbxthumb://type=%s&id=%d&size=%s", b_type_name, b_id, b_size_name), true end bP.SetCore = function(self, am, bm) local bS = t.registry[bh] or "StarterGui" at(string.format("%s:SetCore(%s, %s)", bS, aH(am), aZ(bm))) end bP.GetCore = function(self, am) return nil end bP.IsFinishedReplicating = function(self) local c_store = t.property_store[bh] or {} if c_store.ClassName == "ReplicatedFirst" then return c_store.__finished_replicating ~= false end return true end bP.RemoveDefaultLoadingScreen = function(self) local c_store = t.property_store[bh] or {} if c_store.ClassName == "ReplicatedFirst" then local c_was_removed = c_store.__default_loading_gui_removed == true c_store.__default_loading_gui_removed = true c_store.__finished_replicating = true t.property_store[bh] = c_store if not c_was_removed then local c_signal = c_store.FinishedReplicating or b_ensure_signal(bh, "FinishedReplicating", "ReplicatedFirst.FinishedReplicating") b_fire_signal(c_signal) end end end bP.SetDefaultLoadingGui = function(self, cp) local c_store = t.property_store[bh] or {} if c_store.ClassName == "ReplicatedFirst" then c_store.__default_loading_gui = cp t.property_store[bh] = c_store end end bP.SetCoreGuiEnabled = function(self, cn, co) local bS = t.registry[bh] or "StarterGui" at(string.format("%s:SetCoreGuiEnabled(%s, %s)", bS, aZ(cn), aZ(co))) end bP.BindToRenderStep = function(self, am, cp, bs) local bS = t.registry[bh] or "RunService" at(string.format("%s:BindToRenderStep(%s, %s, function(deltaTime)", bS, aH(am), aZ(cp))) t.indent = t.indent + 1 if j(bs) == "function" then xpcall( function() bs(0.016) end, function() end ) end t.indent = t.indent - 1 at("end)") end bP.UnbindFromRenderStep = function(self, am) local bS = t.registry[bh] or "RunService" at(string.format("%s:UnbindFromRenderStep(%s)", bS, aH(am))) end bP.GetFullName = function(self) if bh == workspace then return "Workspace" end local c_parts = {} local c_cursor = bh while c_cursor and c_cursor ~= game do local c_store = t.property_store[c_cursor] or {} local c_name = c_store.Name or t.registry[c_cursor] or "Instance" table.insert(c_parts, 1, c_name) c_cursor = t.parent_map[c_cursor] end return table.concat(c_parts, ".") end bP.GetAllTags = function(self) return {} end bP.GetTextSize = function(self, b_text, b_size, b_font, b_size2) return Vector2.new(100, 20) end bP.CaptureFocus = function(self) local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or "" if b_class ~= "TextBox" then error("CaptureFocus is not a valid member of " .. tostring(b_class ~= "" and b_class or "Instance"), 0) end b_store.__has_focus = true t.property_store[bh] = b_store local b_signal = b_store.Focused or b_ensure_signal(bh, "Focused", (t.registry[bh] or "TextBox") .. ".Focused") b_fire_signal(b_signal) return nil end bP.ReleaseFocus = function(self, b_enter_pressed) local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or "" if b_class ~= "TextBox" then error("ReleaseFocus is not a valid member of " .. tostring(b_class ~= "" and b_class or "Instance"), 0) end b_store.__has_focus = false t.property_store[bh] = b_store local b_signal = b_store.FocusLost or b_ensure_signal(bh, "FocusLost", (t.registry[bh] or "TextBox") .. ".FocusLost") b_fire_signal(b_signal, b_enter_pressed == true, nil) return nil end bP.SetOutgoingKBPSLimit = function(self, c_limit) local bS = t.registry[bh] or "NetworkClient" t.property_store[bh] = t.property_store[bh] or {} t.property_store[bh].OutgoingKBPSLimit = tonumber(c_limit) or 0 at(string.format("%s:SetOutgoingKBPSLimit(%s)", bS, aZ(c_limit))) end bP.GetGuiInset = function(self) return Vector2.new(0, 36), Vector2.new(0, 0) end bP.Set = function(self, c_items) local c_store = t.property_store[bh] or {} c_store.__selection = j(c_items) == "table" and c_items or {} t.property_store[bh] = c_store at(string.format("%s:Set(%s)", t.registry[bh] or "Selection", aZ(c_items))) return nil end bP.Get = function(self) local c_store = t.property_store[bh] or {} return c_store.__selection or {} end bP.GetValue = function(self, b_time, b_style, b_dir) local c_alpha = tonumber(b_time) or 0 local style_name = b_is_enum_item_value(b_style) and tostring((t.property_store[b_style] or {}).Name or "") or "Linear" local dir_name = b_is_enum_item_value(b_dir) and tostring((t.property_store[b_dir] or {}).Name or "") or "InOut" -- Roblox clamps endpoints exactly (critical for Bounce/Elastic); do not rely on floating drift at 0/1. if c_alpha <= 0 then return 0 end if c_alpha >= 1 then return 1 end local function easeIn(t, p) return t ^ p end local function easeOut(t, p) return 1 - (1 - t) ^ p end local function easeInOut(t, p) if t < 0.5 then return 2 ^ (p - 1) * t ^ p else return 1 - ((-2 * t + 2) ^ p / 2) end end local function sineIn(t) return 1 - math.cos((t * math.pi) / 2) end local function sineOut(t) return math.sin((t * math.pi) / 2) end local function sineInOut(t) return -(math.cos(math.pi * t) - 1) / 2 end local function backIn(t) local c1 = 1.70158 local c3 = c1 + 1 return c3 * t * t * t - c1 * t * t end local function backOut(t) local c1 = 1.70158 local c3 = c1 + 1 return 1 + c3 * (t - 1) ^ 3 + c1 * (t - 1) ^ 2 end local function backInOut(t) local c1 = 1.70158 local c2 = c1 * 1.525 if t < 0.5 then return ((2 * t) ^ 2 * ((c2 + 1) * 2 * t - c2)) / 2 else return ((2 * t - 2) ^ 2 * ((c2 + 1) * (t * 2 - 2) + c2) + 2) / 2 end end local function bounceOut(t) local n1 = 7.5625 local d1 = 2.75 if t < 1 / d1 then return n1 * t * t elseif t < 2 / d1 then t = t - 1.5 / d1 return n1 * t * t + 0.75 elseif t < 2.5 / d1 then t = t - 2.25 / d1 return n1 * t * t + 0.9375 else t = t - 2.625 / d1 return n1 * t * t + 0.984375 end end local function bounceIn(t) return 1 - bounceOut(1 - t) end local function bounceInOut(t) if t < 0.5 then return (1 - bounceOut(1 - 2 * t)) / 2 else return (1 + bounceOut(2 * t - 1)) / 2 end end local function elasticIn(t) local c4 = (2 * math.pi) / 3 if t == 0 then return 0 end if t == 1 then return 1 end return -2 ^ (10 * t - 10) * math.sin((t * 10 - 10.75) * c4) end local function elasticOut(t) local c4 = (2 * math.pi) / 3 if t == 0 then return 0 end if t == 1 then return 1 end return 2 ^ (-10 * t) * math.sin((t * 10 - 0.75) * c4) + 1 end local function elasticInOut(t) local c5 = (2 * math.pi) / 4.5 if t == 0 then return 0 end if t == 1 then return 1 end if t < 0.5 then return -(2 ^ (20 * t - 10) * math.sin((20 * t - 11.125) * c5)) / 2 else return (2 ^ (-20 * t + 10) * math.sin((20 * t - 11.125) * c5)) / 2 + 1 end end local p = 2 if style_name == "Linear" then return c_alpha elseif style_name == "Quad" then p = 2 elseif style_name == "Cubic" then p = 3 elseif style_name == "Quart" then p = 4 elseif style_name == "Quint" then p = 5 elseif style_name == "Sine" then if dir_name == "In" then return sineIn(c_alpha) elseif dir_name == "Out" then return sineOut(c_alpha) else return sineInOut(c_alpha) end elseif style_name == "Back" then if dir_name == "In" then return backIn(c_alpha) elseif dir_name == "Out" then return backOut(c_alpha) else return backInOut(c_alpha) end elseif style_name == "Bounce" then if dir_name == "In" then return bounceIn(c_alpha) elseif dir_name == "Out" then return bounceOut(c_alpha) else return bounceInOut(c_alpha) end elseif style_name == "Elastic" then if dir_name == "In" then return elasticIn(c_alpha) elseif dir_name == "Out" then return elasticOut(c_alpha) else return elasticInOut(c_alpha) end else return c_alpha end if dir_name == "In" then return easeIn(c_alpha, p) elseif dir_name == "Out" then return easeOut(c_alpha, p) else return easeInOut(c_alpha, p) end end bP.GetPolicyInfoForPlayerAsync = function(self, c_player) local bS = t.registry[bh] or "PolicyService" local b_store = t.property_store[bh] or {} if (b_store.ClassName or "") ~= "PolicyService" then error("GetPolicyInfoForPlayerAsync is not a valid member of " .. tostring(b_store.ClassName or "Instance"), 0) end local b_result = b_copy(b_store.__policy_info or {}) at(string.format("%s:GetPolicyInfoForPlayerAsync(%s)", bS, aZ(c_player))) return b_result end bP.GetPolicyInfoForPlayer = function(self, c_player) local bS = t.registry[bh] or "PolicyService" local b_store = t.property_store[bh] or {} if (b_store.ClassName or "") ~= "PolicyService" then error("GetPolicyInfoForPlayer is not a valid member of " .. tostring(b_store.ClassName or "Instance"), 0) end local b_result = b_copy(b_store.__policy_info or {}) at(string.format("%s:GetPolicyInfoForPlayer(%s)", bS, aZ(c_player))) return b_result end bP.IsRunning = function(self) return true end bP.Load = function(self, c_url) local bS = t.registry[bh] or "game" local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or "" if bh ~= game and b_class ~= "DataModel" then error("Load is not a valid member of " .. tostring(b_class ~= "" and b_class or "Instance"), 0) end at(string.format("%s:Load(%s)", bS, c_url ~= nil and aZ(c_url) or "nil")) if j(c_url) ~= "string" or c_url == "" then error("Unable to load: invalid or missing URL", 0) end return nil end bP.IsLoaded = function(self) local b_store = t.property_store[bh] if b_store and b_store.ClassName == "Sound" then return b_store.IsLoaded == true end return true end bP.GetPartsObscuringTarget = function(self, c_parts, c_ignore) local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or "Instance" if b_class ~= "Camera" then error("GetPartsObscuringTarget is not a valid member of " .. tostring(b_class), 0) end local bS = t.registry[bh] or "camera" at(string.format("%s:GetPartsObscuringTarget(%s, %s)", bS, aZ(c_parts), aZ(c_ignore))) return {} end bP.IsStudio = function(self) return false end bP.IsClient = function(self) return true end bP.IsServer = function(self) return false end bP.GetRealPhysicsFPS = function(self) return 60 end bP.GetDebugId = function(self) t.property_store[bh] = t.property_store[bh] or {} if not t.property_store[bh].__debug_id then t.debug_id_counter = (t.debug_id_counter or 0) + 1 t.property_store[bh].__debug_id = string.format("%s_%06d", (t.registry[bh] or aT or "Instance"):gsub("[^%w]", "_"), t.debug_id_counter) end return t.property_store[bh].__debug_id end bP.BulkMoveTo = function(self, parts, targets, mode) local bS = t.registry[bh] or "workspace" at(string.format("%s:BulkMoveTo(%s, %s, %s)", bS, aZ(parts), aZ(targets), aZ(mode))) for i, p in ipairs(parts) do if targets[i] and t.property_store[p] then t.property_store[p].CFrame = targets[i] t.property_store[p].Position = targets[i].Position end end end bP.MoveTo = function(self, cq, cr) local bS = t.registry[bh] or "humanoid" if cr then at(string.format("%s:MoveTo(%s, %s)", bS, aZ(cq), aZ(cr))) else at(string.format("%s:MoveTo(%s)", bS, aZ(cq))) end end bP.Move = function(self, ca, cs) local bS = t.registry[bh] or "humanoid" at(string.format("%s:Move(%s, %s)", bS, aZ(ca), aZ(cs or false))) end bP.Chat = function(self, c_message) local bS = t.registry[bh] or "players" local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or "Instance" if b_class ~= "Players" and b_class ~= "Player" then error("Chat is not a valid member of " .. tostring(b_class), 0) end at(string.format("%s:Chat(%s)", bS, aZ(c_message))) return nil end bP.EquipTool = function(self, ct) local bS = t.registry[bh] or "humanoid" at(string.format("%s:EquipTool(%s)", bS, aZ(ct))) end bP.UnequipTools = function(self) local bS = t.registry[bh] or "humanoid" at(string.format("%s:UnequipTools()", bS)) end bP.TakeDamage = function(self, cu) local bS = t.registry[bh] or "humanoid" at(string.format("%s:TakeDamage(%s)", bS, aZ(cu))) end bP.ChangeState = function(self, cv) local bS = t.registry[bh] or "humanoid" t.property_store[bh] = t.property_store[bh] or {} local c_prev_state = t.property_store[bh].__state or b_enum_item("Enum.HumanoidStateType.Running") t.property_store[bh].__state = cv if c_prev_state ~= cv and t.property_store[bh].StateChanged then b_fire_signal(t.property_store[bh].StateChanged, c_prev_state, cv) end if cv == b_enum_item("Enum.HumanoidStateType.Jumping") then t.property_store[bh].Jump = true t.property_store[bh].FloorMaterial = b_enum_item("Enum.Material.Air") local c_model = t.parent_map[bh] if c_model and G(c_model) then local c_root = (t.property_store[c_model] and t.property_store[c_model].HumanoidRootPart) or b_find_child_by_name(c_model, "HumanoidRootPart", false) if not c_root then c_root = (t.child_cache[c_model] and (t.child_cache[c_model].PrimaryPart or t.child_cache[c_model].Head)) or b_find_child_by_name(c_model, "Head", false) end if c_root and t.property_store[c_root] then local c_x, c_y, c_z = b_vector_components(t.property_store[c_root].Position or Vector3.new(0, 0, 0)) local c_new_y = c_y + 6 t.property_store[c_root].Position = Vector3.new(c_x, c_new_y, c_z) t.property_store[c_root].CFrame = CFrame.new(c_x, c_new_y, c_z) t.property_store[c_root].AssemblyLinearVelocity = Vector3.new(0, 75, 0) t.property_store[c_root].Velocity = t.property_store[c_root].AssemblyLinearVelocity end end local c_jump_signal = t.property_store[bh] and t.property_store[bh].Jumping if c_jump_signal then b_fire_signal(c_jump_signal, true) end end at(string.format("%s:ChangeState(%s)", bS, aZ(cv))) end bP.GetState = function(self) return (t.property_store[bh] and t.property_store[bh].__state) or b_enum_item("Enum.HumanoidStateType.Running") end bP.SetPrimaryPartCFrame = function(self, cw) local bS = t.registry[bh] or "model" at(string.format("%s:SetPrimaryPartCFrame(%s)", bS, aZ(cw))) end bP.GetPrimaryPartCFrame = function(self) return CFrame.new(0, 0, 0) end bP.PivotTo = function(self, cw) local bS = t.registry[bh] or "model" at(string.format("%s:PivotTo(%s)", bS, aZ(cw))) end bP.GetPivot = function(self) return CFrame.new(0, 0, 0) end bP.GetBoundingBox = function(self) return CFrame.new(0, 0, 0), Vector3.new(1, 1, 1) end bP.GetExtentsSize = function(self) return Vector3.new(1, 1, 1) end bP.TranslateBy = function(self, cx) local bS = t.registry[bh] or "model" at(string.format("%s:TranslateBy(%s)", bS, aZ(cx))) end bP.LoadAnimation = function(self, cy) local bS = t.registry[bh] or "animator" local cz = bj("animTrack", false) local _ = aW(cz, "animTrack") at(string.format("local %s = %s:LoadAnimation(%s)", _, bS, aZ(cy))) return cz end bP.GetPlayingAnimationTracks = function(self) return {} end bP.AdjustSpeed = function(self, cA) local bS = t.registry[bh] or "animTrack" at(string.format("%s:AdjustSpeed(%s)", bS, aZ(cA))) end bP.AdjustWeight = function(self, cB, cC) local bS = t.registry[bh] or "animTrack" if cC then at(string.format("%s:AdjustWeight(%s, %s)", bS, aZ(cB), aZ(cC))) else at(string.format("%s:AdjustWeight(%s)", bS, aZ(cB))) end end bP.Teleport = function(self, cD, cl, cE, cF) local bS = t.registry[bh] or "TeleportService" at( string.format( "%s:Teleport(%s, %s%s%s)", bS, aZ(cD), aZ(cl), cE ~= nil and ", " .. aZ(cE) or "", cF ~= nil and ", " .. aZ(cF) or "" ) ) end bP.TeleportToPlaceInstance = function(self, cD, cG, cl) local bS = t.registry[bh] or "TeleportService" at(string.format("%s:TeleportToPlaceInstance(%s, %s, %s)", bS, aZ(cD), aZ(cG), aZ(cl))) end bP.PlayLocalSound = function(self, cH) local bS = t.registry[bh] or "SoundService" at(string.format("%s:PlayLocalSound(%s)", bS, aZ(cH))) end bP.GetListener = function(self) local bS = t.registry[bh] or "SoundService" local b_store = t.property_store[bh] or {} if (b_store.ClassName or "") ~= "SoundService" then error("GetListener is not a valid member of " .. tostring(b_store.ClassName or "Instance"), 0) end at(string.format("%s:GetListener()", bS)) return nil end bP.Close = function(self) local bS = t.registry[bh] or "game" local b_store = t.property_store[bh] or {} if (b_store.ClassName or "") ~= "DataModel" then error("Close is not a valid member of " .. tostring(b_store.ClassName or "Instance"), 0) end at(string.format("%s:Close()", bS)) return nil end bP.SendAsync = function(self, c_text) local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or "" if b_class ~= "TextChannel" then error("SendAsync is not a valid member of " .. tostring(b_class ~= "" and b_class or "Instance"), 0) end local c_textchat = t.service_cache and t.service_cache.TextChatService or nil local c_players = t.service_cache and t.service_cache.Players or nil local c_local_player = c_players and t.property_store[c_players] and t.property_store[c_players].LocalPlayer or nil local c_message = bj("TextChatMessage", false) t.property_store[c_message] = t.property_store[c_message] or {} t.property_store[c_message].ClassName = "TextChatMessage" t.property_store[c_message].Name = "TextChatMessage" t.property_store[c_message].Text = tostring(c_text or "") local c_source = bj("TextSource", false) t.property_store[c_source] = t.property_store[c_source] or {} t.property_store[c_source].ClassName = "TextSource" t.property_store[c_source].Name = "TextSource" t.property_store[c_source].UserId = c_local_player and ((t.property_store[c_local_player] or {}).UserId or 1) or 1 t.property_store[c_message].TextSource = c_source if c_textchat and t.property_store[c_textchat] and t.property_store[c_textchat].MessageReceived then b_fire_signal(t.property_store[c_textchat].MessageReceived, c_message) end return nil end bP.GetDataStore = function(self, c_name, c_scope) local b_store = t.property_store[bh] or {} if (b_store.ClassName or "") ~= "DataStoreService" then error("GetDataStore is not a valid member of " .. tostring(b_store.ClassName or "Instance"), 0) end local bS = t.registry[bh] or "DataStoreService" local b_name = aE(c_name or "Default") if b_name:match("[^%w_%-]") then error("DataStore rejected", 0) end local b_scope = aE(c_scope or "global") local b_key = b_name .. "::" .. b_scope local c_store = b_child_proxy(b_name, bh, "GlobalDataStore") t.property_store[c_store] = t.property_store[c_store] or {} t.property_store[c_store].ClassName = "GlobalDataStore" t.property_store[c_store].Name = b_name t.property_store[c_store].__datastore_key = b_key t.property_store[c_store].__datastore_name = b_name t.property_store[c_store].__datastore_scope = b_scope at(string.format("local %s = %s:GetDataStore(%s%s)", aW(c_store, "dataStore"), bS, aH(b_name), c_scope ~= nil and (", " .. aH(b_scope)) or "")) return c_store end bP.GetOrderedDataStore = function(self, c_name, c_scope) local b_store = t.property_store[bh] or {} if (b_store.ClassName or "") ~= "DataStoreService" then error("GetOrderedDataStore is not a valid member of " .. tostring(b_store.ClassName or "Instance"), 0) end local bS = t.registry[bh] or "DataStoreService" local b_name = aE(c_name or "Ordered") local b_scope = aE(c_scope or "global") local b_key = "ordered::" .. b_name .. "::" .. b_scope local c_store = b_child_proxy(b_name, bh, "OrderedDataStore") t.property_store[c_store] = t.property_store[c_store] or {} t.property_store[c_store].ClassName = "OrderedDataStore" t.property_store[c_store].Name = b_name t.property_store[c_store].__datastore_key = b_key t.property_store[c_store].__datastore_name = b_name t.property_store[c_store].__datastore_scope = b_scope at(string.format("local %s = %s:GetOrderedDataStore(%s%s)", aW(c_store, "orderedStore"), bS, aH(b_name), c_scope ~= nil and (", " .. aH(b_scope)) or "")) return c_store end bP.GetGlobalDataStore = function(self) local b_store = t.property_store[bh] or {} if (b_store.ClassName or "") ~= "DataStoreService" then error("GetGlobalDataStore is not a valid member of " .. tostring(b_store.ClassName or "Instance"), 0) end error("GetGlobalDataStore is not available", 0) end bP.GetAsync = function(self, cI) local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or "" if b_class == "GlobalDataStore" or b_class == "OrderedDataStore" then t.datastore = t.datastore or {} local b_space = t.datastore[b_store.__datastore_key] or {} t.datastore[b_store.__datastore_key] = b_space return b_space[aE(cI)] end return "{}" end bP.PostAsync = function(self, cI, cJ) return "{}" end bP.SetAsync = function(self, c_key, c_value) local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or "" if b_class ~= "GlobalDataStore" and b_class ~= "OrderedDataStore" then error("SetAsync is not a valid member of " .. tostring(b_class ~= "" and b_class or "Instance"), 0) end t.datastore = t.datastore or {} local b_space = t.datastore[b_store.__datastore_key] or {} t.datastore[b_store.__datastore_key] = b_space b_space[aE(c_key)] = c_value end bP.RemoveAsync = function(self, c_key) local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or "" if b_class ~= "GlobalDataStore" and b_class ~= "OrderedDataStore" then error("RemoveAsync is not a valid member of " .. tostring(b_class ~= "" and b_class or "Instance"), 0) end t.datastore = t.datastore or {} local b_space = t.datastore[b_store.__datastore_key] or {} t.datastore[b_store.__datastore_key] = b_space local b_key = aE(c_key) local b_prev = b_space[b_key] b_space[b_key] = nil return b_prev end bP.UpdateAsync = function(self, c_key, c_transform) local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or "" if b_class ~= "GlobalDataStore" and b_class ~= "OrderedDataStore" then error("UpdateAsync is not a valid member of " .. tostring(b_class ~= "" and b_class or "Instance"), 0) end t.datastore = t.datastore or {} local b_space = t.datastore[b_store.__datastore_key] or {} t.datastore[b_store.__datastore_key] = b_space local b_key = aE(c_key) local b_old = b_space[b_key] local b_new = b_old if j(c_transform) == "function" then local b_ok, b_res = g(c_transform, b_old) if b_ok then b_new = b_res end end b_space[b_key] = b_new return b_new end bP.IncrementAsync = function(self, c_key, c_amount) local b_store = t.property_store[bh] or {} local b_class = b_store.ClassName or "" if b_class ~= "GlobalDataStore" and b_class ~= "OrderedDataStore" then error("IncrementAsync is not a valid member of " .. tostring(b_class ~= "" and b_class or "Instance"), 0) end t.datastore = t.datastore or {} local b_space = t.datastore[b_store.__datastore_key] or {} t.datastore[b_store.__datastore_key] = b_space local b_key = aE(c_key) local b_cur = tonumber(b_space[b_key]) or 0 local b_next = b_cur + (tonumber(c_amount) or 1) b_space[b_key] = b_next return b_next end bP.GetMinutesAfterMidnight = function(self) local b_clock_time = tonumber((t.property_store[bh] or {}).ClockTime) or 0 return b_clock_time * 60 end bP.ReadVoxels = function(self, c_region, c_resolution) local c_air = b_enum_item("Enum.Material.Air") return {{{c_air}}}, {{{0}}} end bP.GetTranslatorForLocaleAsync = function(self, cI) local cL = b_child_proxy("Translator", bh, "Translator") t.property_store[cL] = {ClassName = "Translator", Name = "Translator", LocaleId = aE(cI or "en-us")} return cL end bP.GetCorescriptLocalizations = function(self) local cL = bj("LocalizationTable", false, bh) t.property_store[cL] = {ClassName = "LocalizationTable", Name = "CoreLocalization"} return {cL} end bP.SetEntries = function(self, c_entries) t.property_store[bh] = t.property_store[bh] or {} t.property_store[bh].Entries = b_copy(c_entries or {}) end bP.GetEntries = function(self) return b_copy((t.property_store[bh] or {}).Entries or {}) end bP.IsVibrationSupported = function(self, cI) return false end bP.GetCharacterAppearanceInfoAsync = function(self, cI) return { assets = {{id = 1, name = "Test", assetType = {name = "T-Shirt"}}}, bodyColors = { leftArmColorId = 1, torsoColorId = 1, rightArmColorId = 1, headColorId = 1, leftLegColorId = 1, rightLegColorId = 1 }, scales = {bodyType = 1, height = 1, width = 1, depth = 1, proportion = 1, head = 1} } end bP.GetHumanoidDescriptionFromUserId = function(self, cI) return {GetEmotes = function() return {wave = true} end} end bP.GetAppliedDescription = function(self) local b_store = t.property_store[bh] or {} if b_store.ClassName ~= "Humanoid" then error("GetAppliedDescription is not a valid member of " .. tostring(b_store.ClassName or "Instance"), 0) end local c_desc = bj("HumanoidDescription", false) t.property_store[c_desc] = t.property_store[c_desc] or {} t.property_store[c_desc].ClassName = "HumanoidDescription" t.property_store[c_desc].Name = "HumanoidDescription" return c_desc end bP.GetMemStats = function(self) return {animationCount = 50, animationMemory = 1024, assetCount = 100, assetMemory = 2048} end bP.GetTotalMemoryUsageMb = function(self) return 512 end bP.CheckForUpdate = function(self) return false end bP.GetAllBoundActionInfo = function(self) return t.action_bindings end bP.BindAction = function(self, cI, cJ, cK, ...) t.action_bindings[cI] = {func = cJ, inputTypes = {...}, createTouchButton = cK} end bP.UnbindAction = function(self, cI) t.action_bindings[cI] = nil end bP.SetItem = function(self, cI, cJ) t.mem_storage[cI] = cJ return nil end bP.GetItem = function(self, cI) return t.mem_storage[cI] or "" end bP.AddTag = function(self, cI, cJ) local c_instance = cI local c_tag = cJ if cJ == nil then c_instance = bh c_tag = cI end c_tag = aE(c_tag) t.collection_tags[c_tag] = t.collection_tags[c_tag] or {} for _, c_item in ipairs(t.collection_tags[c_tag]) do if c_item == c_instance then return nil end end table.insert(t.collection_tags[c_tag], c_instance) return nil end bP.RemoveTag = function(self, cI, cJ) local c_instance = cI local c_tag = cJ if cJ == nil then c_instance = bh c_tag = cI end local cL = t.collection_tags[aE(c_tag)] if not cL then return nil end for W, cM in ipairs(cL) do if cM == c_instance then table.remove(cL, W) break end end return nil end bP.GetTagged = function(self, cI) return t.collection_tags[cI] or {} end bP.GetInstanceAddedSignal = function(self, cI) local cL = "CollectionService.GetInstanceAddedSignal." .. aE(cI) if t.collection_signals[cL] then return t.collection_signals[cL] end local cM = b_ensure_signal(bh, cL, cL) t.collection_signals[cL] = cM return cM end bP.GetEnumItems = function(self) local cI = t.registry[bh] or "" if cI == "Enum" then local cJ = {} for c_path, _ in pairs(b_enum_members) do b_ensure_enum_family_minimum_members(c_path, 3) local c_type = c_path:match("^Enum%.(.+)$") if c_type then table.insert(cJ, Enum[c_type]) end end table.sort( cJ, function(cL, cM) return tostring(cL) < tostring(cM) end ) return cJ end b_ensure_enum_family_minimum_members(cI, 3) local cJ = b_enum_members[cI] or {} local cK = {} for W, cL in ipairs(cJ) do table.insert(cK, b_enum_item(cI .. "." .. cL)) end return cK end bP.GetEnums = function(self) local cJ = {} for c_path, _ in pairs(b_enum_members) do local c_type = c_path:match("^Enum%.([^%.]+)") if c_type then local c_enum = Enum[c_type] local c_seen = false for _, c_existing in ipairs(cJ) do if c_existing == c_enum then c_seen = true break end end if not c_seen then table.insert(cJ, c_enum) end end end table.sort( cJ, function(cL, cM) return tostring(cL) < tostring(cM) end ) return cJ end bP.GetTeams = function(self) return {} end bP.GetLogHistory = function(self) return {} end bP.PromptPremiumPurchase = function(self, player) end bP.GetGroupsAsync = function(self, playerId) return {} end bP.GetProductInfo = function(self, assetId, infoType, ...) if select("#", ...) > 0 then error("Unable to cast to Dictionary", 0) end local c_asset_id = tonumber(assetId) if not c_asset_id or c_asset_id <= 0 then error("Asset is not valid", 0) end local c_seed = math.abs((c_asset_id * 2654435761) % 2147483647) local c_title_suffix = tostring((c_seed % 900000) + 100000) local c_creator_id = (c_seed % 900000000) + 1000000 return { Name = "Untitled Experience " .. c_title_suffix, Description = "Mock Roblox experience metadata", Creator = { Id = c_creator_id, Name = "Creator" .. tostring((c_seed % 9999) + 1), CreatorType = "User", HasVerifiedBadge = false }, CreatorType = "User", CreatorId = c_creator_id, AssetId = c_asset_id, AssetTypeId = 9, ProductType = "Game Pass", IsForSale = false, PriceInRobux = 0, Updated = "2024-04-24T00:00:00Z", Created = "2024-04-24T00:00:00Z", IconImageAssetId = 0, IsPublicDomain = false, Sales = 0, Remaining = 0 } end bP.HasTag = function(self, instance, tag) local c_instance = instance local c_tag = tag if tag == nil then c_instance = bh c_tag = instance end local tags = t.collection_tags[aE(c_tag)] or {} for _, v in ipairs(tags) do if v == c_instance then return true end end return false end bP.GetNameFromUserIdAsync = function(self, userId) if userId == 0 then error("Invalid userId", 0) end if userId == 1 then return "Roblox" end if userId == 156 then return "builderman" end local c_players = (t.service_cache and t.service_cache.Players) or bh local c_local = c_players and t.property_store[c_players] and t.property_store[c_players].LocalPlayer local c_local_store = c_local and t.property_store[c_local] or nil if c_local_store and tonumber(c_local_store.UserId) == tonumber(userId) then return tostring(c_local_store.Name or ("Player" .. tostring(userId))) end return "Player" .. tostring(userId) end bP.GetCountryRegionForPlayerAsync = function(self, player) local b_store = t.property_store[bh] or {} if (b_store.ClassName or "") ~= "LocalizationService" then error("GetCountryRegionForPlayerAsync is not a valid member of " .. tostring(b_store.ClassName or "Instance"), 0) end if not G(player) then error("Argument 1 missing or nil", 0) end return "US" end bP.GetSecret = function(self, key) error("Cannot get secret", 0) end bP.query = function(self, ...) return {} end bP.GetTags = function(self, instance) local c_instance = instance if c_instance == nil then c_instance = bh end local c_results = {} for c_tag, c_items in D(t.collection_tags) do for _, c_item in ipairs(c_items) do if c_item == c_instance then table.insert(c_results, c_tag) break end end end return c_results end bP.CreatePath = function(self, config) local c_path = bj("Path", false) t.property_store[c_path] = { ClassName = "Path", Name = "Path", Status = b_enum_item("Enum.PathStatus.Success"), Waypoints = {}, Config = b_copy(config or {}) } return c_path end bP.ComputeAsync = function(self, fromPos, toPos) t.property_store[bh] = t.property_store[bh] or {} t.property_store[bh].Status = b_enum_item("Enum.PathStatus.Success") t.property_store[bh].Waypoints = { PathWaypoint.new(fromPos or Vector3.new(0, 0, 0), b_enum_item("Enum.PathWaypointAction.Walk")), PathWaypoint.new(toPos or Vector3.new(0, 0, 0), b_enum_item("Enum.PathWaypointAction.Walk")) } return nil end bP.GetWaypoints = function(self) local c_waypoints = (t.property_store[bh] or {}).Waypoints or {} local c_result = {} for c_index, c_waypoint in ipairs(c_waypoints) do c_result[c_index] = c_waypoint end return c_result end bP.Fire = function(self, ...) t.property_store[bh] = t.property_store[bh] or {} t.property_store[bh].Event = t.property_store[bh].Event or b_ensure_signal(bh, "Event", (t.registry[bh] or "BindableEvent") .. ".Event") b_fire_signal(t.property_store[bh].Event, ...) return nil end bP.FillBlock = function(self, cf, size, material) return nil end bP.GetMaterialColor = function(self, material) local mtxt = tostring(material or "") -- Return distinct, stable colors for common terrain material checks. if mtxt:find("Enum.Material.Grass", 1, true) or mtxt:find("Grass", 1, true) then return Color3.fromRGB(106, 127, 63) end if mtxt:find("Enum.Material.Water", 1, true) or mtxt:find("Water", 1, true) then return Color3.fromRGB(12, 84, 92) end return Color3.fromRGB(128, 128, 128) end bP.GetRequestQueueSize = function(self) return 0 end bP.PreloadAsync = function(self, c_assets, c_callback) local bS = t.registry[bh] or "ContentProvider" at(string.format("%s:PreloadAsync(%s, %s)", bS, aZ(c_assets), aZ(c_callback))) if j(c_callback) == "function" and j(c_assets) == "table" then for _, c_asset in ipairs(c_assets) do pcall(c_callback, c_asset) end end return nil end bP.CaptureController = function(self) local bS = t.registry[bh] or "VirtualUser" t.property_store[bh] = t.property_store[bh] or {} t.property_store[bh].__controller_captured = true at(string.format("%s:CaptureController()", bS)) return nil end bP.ReleaseController = function(self) local bS = t.registry[bh] or "VirtualUser" t.property_store[bh] = t.property_store[bh] or {} t.property_store[bh].__controller_captured = false at(string.format("%s:ReleaseController()", bS)) return nil end bP.ClickButton1 = function(self, cI, cJ) local bS = t.registry[bh] or "VirtualUser" if cJ ~= nil then at(string.format("%s:ClickButton1(%s, %s)", bS, aZ(cI), aZ(cJ))) else at(string.format("%s:ClickButton1(%s)", bS, aZ(cI))) end return nil end bP.ClickButton2 = function(self, cI, cJ) local bS = t.registry[bh] or "VirtualUser" if cJ ~= nil then at(string.format("%s:ClickButton2(%s, %s)", bS, aZ(cI), aZ(cJ))) else at(string.format("%s:ClickButton2(%s)", bS, aZ(cI))) end return nil end bP.Button1Down = function(self, cI, cJ) local bS = t.registry[bh] or "VirtualUser" if cJ ~= nil then at(string.format("%s:Button1Down(%s, %s)", bS, aZ(cI), aZ(cJ))) else at(string.format("%s:Button1Down(%s)", bS, aZ(cI))) end return nil end bP.Button1Up = function(self, cI, cJ) local bS = t.registry[bh] or "VirtualUser" if cJ ~= nil then at(string.format("%s:Button1Up(%s, %s)", bS, aZ(cI), aZ(cJ))) else at(string.format("%s:Button1Up(%s)", bS, aZ(cI))) end return nil end bP.Button2Down = function(self, cI, cJ) local bS = t.registry[bh] or "VirtualUser" if cJ ~= nil then at(string.format("%s:Button2Down(%s, %s)", bS, aZ(cI), aZ(cJ))) else at(string.format("%s:Button2Down(%s)", bS, aZ(cI))) end return nil end bP.Button2Up = function(self, cI, cJ) local bS = t.registry[bh] or "VirtualUser" if cJ ~= nil then at(string.format("%s:Button2Up(%s, %s)", bS, aZ(cI), aZ(cJ))) else at(string.format("%s:Button2Up(%s)", bS, aZ(cI))) end return nil end bP.MoveMouse = function(self, cI, cJ) local bS = t.registry[bh] or "VirtualUser" if cJ ~= nil then at(string.format("%s:MoveMouse(%s, %s)", bS, aZ(cI), aZ(cJ))) else at(string.format("%s:MoveMouse(%s)", bS, aZ(cI))) end return nil end bP.SetKeyDown = function(self, cI) local bS = t.registry[bh] or "VirtualUser" at(string.format("%s:SetKeyDown(%s)", bS, aZ(cI))) return nil end bP.SetKeyUp = function(self, cI) local bS = t.registry[bh] or "VirtualUser" at(string.format("%s:SetKeyUp(%s)", bS, aZ(cI))) return nil end bP.TypeKey = function(self, cI) local bS = t.registry[bh] or "VirtualUser" at(string.format("%s:TypeKey(%s)", bS, aZ(cI))) return nil end bP.StartRecording = function(self) local bS = t.registry[bh] or "VirtualUser" t.property_store[bh] = t.property_store[bh] or {} t.property_store[bh].__is_recording = true at(string.format("%s:StartRecording()", bS)) return nil end bP.StopRecording = function(self) local bS = t.registry[bh] or "VirtualUser" t.property_store[bh] = t.property_store[bh] or {} t.property_store[bh].__is_recording = false at(string.format("%s:StopRecording()", bS)) return nil end bP.SendMouseButtonEvent = function(self, c_x, c_y, c_button, c_is_down, c_layer_collector, c_repeat_count) local bS = t.registry[bh] or "VirtualInputManager" at( string.format( "%s:SendMouseButtonEvent(%s, %s, %s, %s, %s, %s)", bS, aZ(c_x), aZ(c_y), aZ(c_button), aZ(c_is_down), aZ(c_layer_collector), aZ(c_repeat_count) ) ) local c_uis = t.service_cache and t.service_cache.UserInputService or nil if not G(c_uis) then return nil end local c_input = b_named_proxy("InputObject", nil, "input", "InputObject") t.property_store[c_input] = t.property_store[c_input] or {} t.property_store[c_input].ClassName = "InputObject" t.property_store[c_input].Name = "InputObject" t.property_store[c_input].__kind = "InputObject" t.property_store[c_input].Position = Vector2.new(tonumber(c_x) or 0, tonumber(c_y) or 0) t.property_store[c_input].Delta = Vector2.new(0, 0) t.property_store[c_input].UserInputType = (tonumber(c_button) or 0) == 1 and b_enum_item("Enum.UserInputType.MouseButton2") or b_enum_item("Enum.UserInputType.MouseButton1") t.property_store[c_input].UserInputState = c_is_down and b_enum_item("Enum.UserInputState.Begin") or b_enum_item("Enum.UserInputState.End") t.property_store[c_input].KeyCode = b_enum_item("Enum.KeyCode.Unknown") local c_signal_name = c_is_down and "InputBegan" or "InputEnded" local c_signal = b_ensure_signal(c_uis, c_signal_name, "UserInputService." .. c_signal_name) b_fire_signal(c_signal, c_input, false) return nil end bP.SendMouseMoveEvent = function(self, c_x, c_y, c_layer_collector) local bS = t.registry[bh] or "VirtualInputManager" at(string.format("%s:SendMouseMoveEvent(%s, %s, %s)", bS, aZ(c_x), aZ(c_y), aZ(c_layer_collector))) local c_uis = t.service_cache and t.service_cache.UserInputService or nil if not G(c_uis) then return nil end local c_input = b_named_proxy("InputObject", nil, "input", "InputObject") t.property_store[c_input] = t.property_store[c_input] or {} t.property_store[c_input].ClassName = "InputObject" t.property_store[c_input].Name = "InputObject" t.property_store[c_input].__kind = "InputObject" t.property_store[c_input].Position = Vector2.new(tonumber(c_x) or 0, tonumber(c_y) or 0) t.property_store[c_input].Delta = Vector2.new(0, 0) t.property_store[c_input].UserInputType = b_enum_item("Enum.UserInputType.MouseMovement") t.property_store[c_input].UserInputState = b_enum_item("Enum.UserInputState.Change") t.property_store[c_input].KeyCode = b_enum_item("Enum.KeyCode.Unknown") local c_signal = b_ensure_signal(c_uis, "InputChanged", "UserInputService.InputChanged") b_fire_signal(c_signal, c_input, false) return nil end bP.SendKeyEvent = function(self, c_is_down, c_key_code, c_repeat_event, c_layer_collector) local bS = t.registry[bh] or "VirtualInputManager" at( string.format( "%s:SendKeyEvent(%s, %s, %s, %s)", bS, aZ(c_is_down), aZ(c_key_code), aZ(c_repeat_event), aZ(c_layer_collector) ) ) local c_uis = t.service_cache and t.service_cache.UserInputService or nil if not G(c_uis) then return nil end local c_input = b_named_proxy("InputObject", nil, "input", "InputObject") t.property_store[c_input] = t.property_store[c_input] or {} t.property_store[c_input].ClassName = "InputObject" t.property_store[c_input].Name = "InputObject" t.property_store[c_input].__kind = "InputObject" t.property_store[c_input].Position = Vector2.new(0, 0) t.property_store[c_input].Delta = Vector2.new(0, 0) t.property_store[c_input].UserInputType = b_enum_item("Enum.UserInputType.Keyboard") t.property_store[c_input].UserInputState = c_is_down and b_enum_item("Enum.UserInputState.Begin") or b_enum_item("Enum.UserInputState.End") if j(c_key_code) == "string" and Enum and Enum.KeyCode and Enum.KeyCode[c_key_code] then t.property_store[c_input].KeyCode = Enum.KeyCode[c_key_code] else t.property_store[c_input].KeyCode = b_enum_item("Enum.KeyCode.Unknown") end local c_signal_name = c_is_down and "InputBegan" or "InputEnded" local c_signal = b_ensure_signal(c_uis, c_signal_name, "UserInputService." .. c_signal_name) b_fire_signal(c_signal, c_input, false) return nil end bP.SendMouseWheelEvent = function(self, c_x, c_y, c_is_forward, c_layer_collector) local bS = t.registry[bh] or "VirtualInputManager" at( string.format( "%s:SendMouseWheelEvent(%s, %s, %s, %s)", bS, aZ(c_x), aZ(c_y), aZ(c_is_forward), aZ(c_layer_collector) ) ) local c_uis = t.service_cache and t.service_cache.UserInputService or nil if not G(c_uis) then return nil end local c_signal_name = c_is_forward and "MouseWheelForward" or "MouseWheelBackward" local c_signal = b_ensure_signal(c_uis, c_signal_name, "UserInputService." .. c_signal_name) b_fire_signal(c_signal) return nil end bP.CompressBuffer = function(self, cI, cJ, cK) return cI end bP.DecompressBuffer = function(self, cI, cJ) return cI end bP.Base64Decode = function(self, cI) local c_buf = b_buffer_assert(cI) return b_buffer_from_string_value(b_base64_decode_string(b_buffer_to_string_value(c_buf))) end bP.Base64Encode = function(self, cI) local c_buf = b_buffer_assert(cI) return b_buffer_from_string_value(b_base64_encode_string(b_buffer_to_string_value(c_buf))) end bP.JSONEncode = function(self, cJ) local bS = t.registry[bh] or "HttpService" t.guid_counter = (t.guid_counter or 0) + 1 local cK = "__mock_json_" .. tostring(t.guid_counter) local function c_escape(c_value) return string.format("%q", tostring(c_value or "")) end local function c_encode(c_value, c_seen) local c_kind = j(c_value) if c_kind == "nil" then return "null" elseif c_kind == "boolean" then return c_value and "true" or "false" elseif c_kind == "number" then if c_value ~= c_value or c_value == math.huge or c_value == -math.huge then return "null" end return tostring(c_value) elseif c_kind == "string" then return c_escape(c_value) elseif c_kind == "table" then c_seen = c_seen or {} if c_seen[c_value] then return "null" end c_seen[c_value] = true local c_is_array = true local c_max = 0 local c_count = 0 for c_key, _ in pairs(c_value) do c_count = c_count + 1 if j(c_key) ~= "number" or c_key < 1 or c_key ~= math.floor(c_key) then c_is_array = false else c_max = math.max(c_max, c_key) end end c_is_array = c_is_array and c_max == c_count local c_parts = {} if c_is_array then for c_index = 1, c_max do c_parts[#c_parts + 1] = c_encode(c_value[c_index], c_seen) end c_seen[c_value] = nil return "[" .. table.concat(c_parts, ",") .. "]" end local c_keys = {} for c_key, _ in pairs(c_value) do c_keys[#c_keys + 1] = tostring(c_key) end table.sort(c_keys) for _, c_key in ipairs(c_keys) do c_parts[#c_parts + 1] = c_escape(c_key) .. ":" .. c_encode(c_value[c_key], c_seen) end c_seen[c_value] = nil return "{" .. table.concat(c_parts, ",") .. "}" end return c_escape(tostring(c_value)) end local c_json = c_encode(cJ) t.mock_json_store[cK] = b_copy(cJ) t.mock_json_store[c_json] = b_copy(cJ) at(string.format("local jsonResult_%s = %s:JSONEncode(%s)", tostring(t.guid_counter), bS, aZ(cJ))) return c_json end bP.JSONDecode = function(self, O) if G(O) then local b_store = t.property_store[O] or {} local b_key = b_store.__mock_json_key if b_key and t.mock_json_store[b_key] ~= nil then return b_copy(t.mock_json_store[b_key]) end end if t.mock_json_store[O] ~= nil then return b_copy(t.mock_json_store[O]) end if j(O) == "string" then local c_json = O:match("^%s*(.-)%s*$") or "" if c_json == "" then return nil end local c_pos = 1 local c_json_null = {} local function c_skip() while c_pos <= #c_json and c_json:sub(c_pos, c_pos):match("%s") do c_pos = c_pos + 1 end end local function c_parse_string() c_pos = c_pos + 1 local c_parts = {} while c_pos <= #c_json do local c_char = c_json:sub(c_pos, c_pos) if c_char == '"' then c_pos = c_pos + 1 return table.concat(c_parts) end if c_char == "\\" then local c_next = c_json:sub(c_pos + 1, c_pos + 1) local c_map = {['"'] = '"', ["\\"] = "\\", ["/"] = "/", b = "\b", f = "\f", n = "\n", r = "\r", t = "\t"} if c_map[c_next] then table.insert(c_parts, c_map[c_next]) c_pos = c_pos + 2 elseif c_next == "u" then local c_hex = c_json:sub(c_pos + 2, c_pos + 5) local c_code = tonumber(c_hex, 16) table.insert(c_parts, c_code and string.char(c_code % 256) or "?") c_pos = c_pos + 6 else c_pos = c_pos + 1 end else table.insert(c_parts, c_char) c_pos = c_pos + 1 end end error("invalid json string", 0) end local function c_parse_number() local c_start = c_pos while c_pos <= #c_json and c_json:sub(c_pos, c_pos):match("[%+%-%d%.eE]") do c_pos = c_pos + 1 end return tonumber(c_json:sub(c_start, c_pos - 1)) end local c_parse_value local function c_parse_array() c_pos = c_pos + 1 local c_array = {} local c_index = 1 c_skip() if c_json:sub(c_pos, c_pos) == "]" then c_pos = c_pos + 1 return c_array end while true do local c_value = c_parse_value() if c_value ~= c_json_null then c_array[c_index] = c_value end c_index = c_index + 1 c_skip() local c_char = c_json:sub(c_pos, c_pos) if c_char == "]" then c_pos = c_pos + 1 return c_array end if c_char ~= "," then error("invalid json array", 0) end c_pos = c_pos + 1 c_skip() end end local function c_parse_object() c_pos = c_pos + 1 local c_object = {} c_skip() if c_json:sub(c_pos, c_pos) == "}" then c_pos = c_pos + 1 return c_object end while true do c_skip() local c_key = c_parse_string() c_skip() if c_json:sub(c_pos, c_pos) ~= ":" then error("invalid json object", 0) end c_pos = c_pos + 1 c_skip() local c_value = c_parse_value() if c_value ~= c_json_null then c_object[c_key] = c_value end c_skip() local c_char = c_json:sub(c_pos, c_pos) if c_char == "}" then c_pos = c_pos + 1 return c_object end if c_char ~= "," then error("invalid json object", 0) end c_pos = c_pos + 1 c_skip() end end c_parse_value = function() c_skip() local c_char = c_json:sub(c_pos, c_pos) if c_char == '"' then return c_parse_string() end if c_char == "[" then return c_parse_array() end if c_char == "{" then return c_parse_object() end if c_json:sub(c_pos, c_pos + 3) == "true" then c_pos = c_pos + 4 return true end if c_json:sub(c_pos, c_pos + 4) == "false" then c_pos = c_pos + 5 return false end if c_json:sub(c_pos, c_pos + 3) == "null" then c_pos = c_pos + 4 return c_json_null end return c_parse_number() end local c_ok, c_value = pcall( function() local c_result = c_parse_value() c_skip() if c_result == nil then error("invalid json", 0) end return c_result end ) if c_ok then if c_value == c_json_null then return nil end return c_value end -- Fail-open: empty HTTP bodies, HTML, and other non-JSON should not kill the harness. return nil end error("bad argument #1 to 'JSONDecode' (string expected)", 0) end bP.IsAvailable = function(self) return false end bP.HasAchieved = function(self) return false end bP.GrantAchievement = function(self) return true end bP.GetDeviceCameraCFrame = function(self) return CFrame.new(0, 0, 0) end bP.GetDeviceCameraCFrameForSelfView = function(self) return CFrame.new(0, 0, 0) end bP.UpdateDeviceCFrame = function(self) return nil end bP.GenerateGUID = function(self, cK) t.guid_counter = (t.guid_counter or 0) + 1 local cL = t.guid_counter local cM = string.format( "%08x-%04x-%04x-%04x-%012x", 0x10000000 + cL, 0x2000 + cL % 0x0fff, 0x3000 + cL % 0x0fff, 0x4000 + cL % 0x0fff, cL ) if cK then return "{" .. cM .. "}" end return cM end bP.UrlEncode = function(self, c_text) local c_input = tostring(c_text or "") return (c_input:gsub("([^%w%-_%.~])", function(c_char) return string.format("%%%02X", string.byte(c_char)) end)) end bP.HttpGet = function(self, cI) local cL = aE(cI) local bS = t.registry[bh] or "game" local b_expr = string.format("%s:HttpGet(%s)", bS, aZ(cI)) t.lar_counter = (t.lar_counter or 0) + 1 local b_varname = "httpGetResult_" .. tostring(t.lar_counter) while t.names_used[b_varname] do t.lar_counter = (t.lar_counter or 0) + 1 b_varname = "httpGetResult_" .. tostring(t.lar_counter) end t.names_used[b_varname] = true at(string.format("local %s = %s", b_varname, b_expr)) t.last_http_expr = b_expr t.last_http_emitted_index = #t.output t.last_http_emitted_line = t.output[#t.output] table.insert(t.string_refs, {value = cL, hint = "HTTP URL"}) t.last_http_url = cL t.last_http_fetched = false if cL:find("clientsettingscdn.roblox.com/v2/client%-version/WindowsPlayer/channel/LIVE", 1, false) then t.last_http_fetched = true return '{"version":"' .. tostring(version()) .. '"}' end if cL:match("^https?://") then local c_body = q._http_fetch_url(cL) if j(c_body) == "string" and c_body ~= "" then t.last_http_fetched = true return c_body end end return cL end bP.HttpGetAsync = function(self, cI) return bP.HttpGet(self, cI) end bP.GetObjects = function(self, cI) local cL = aE(cI) if cL ~= "" then table.insert(t.string_refs, {value = cL, hint = "GetObjects URL"}) end if cL:match("^https?://") then local c_body = q._http_fetch_url(cL) if j(c_body) == "string" and c_body ~= "" then b_emit_loadstring_capture(c_body, cL) end end local c_obj = bj("Folder", false) local c_store = t.property_store[c_obj] or {} c_store.Name = "GetObjectsResult" c_store.Parent = nil t.property_store[c_obj] = c_store return {c_obj} end bP.HttpPost = function(self, cI, cJ, cM) local cL = aE(cI) table.insert(t.string_refs, {value = cL, hint = "HTTP POST URL"}) local x = bj("HttpResponse", false) local _ = aW(x, "httpResponse") local bS = t.registry[bh] or "HttpService" at(string.format("local %s = %s:HttpPost(%s, %s, %s)", _, bS, aZ(cI), aZ(cJ), aZ(cM))) t.property_store[x] = {Body = "{}", StatusCode = 200, Success = true} return x end bP.HttpPostAsync = function(self, cI, cJ, cM) return bP.HttpPost(self, cI, cJ, cM) end bP.AddItem = function(self, cN, cO) local bS = t.registry[bh] or "Debris" at(string.format("%s:AddItem(%s, %s)", bS, aZ(cN), aZ(cO or 10))) local c_delay = tonumber(cO) or 10 if c_delay < 0 then c_delay = 0 end if G(cN) and coroutine and j(coroutine.create) == "function" then local c_thread = coroutine.create( function() task.wait(c_delay) if t.parent_map[cN] ~= nil then b_destroy_instance(cN) end end ) q._queue_scheduled_thread(c_thread, "Debris", 0) end end bP.AddGlobalPointsField = function(self, field, value) return nil end bP.AddGlobalPointsTag = function(self, tag, value) return nil end bP.DEPRECATED_TrackEvent = function(self, category, action, label, value) return nil end bP.DEPRECATED_TrackEventWithArgs = function(self, category, action, label, args, value) return nil end bP.GetClientId = function(self) return "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d" end bP.GetPlaySessionId = function(self) return "play-session-123456" end bP.GetSessionId = function(self) return "session-789012" end bP.ReleaseRBXEventStream = function(self, streamName) return nil end bP.RemoveGlobalPointsField = function(self, field) return nil end bP.RemoveGlobalPointsTag = function(self, tag) return nil end bP.ReportCounter = function(self, name, amount) return nil end bP.ReportInfluxSeries = function(self, seriesName, data, amount) return nil end bP.ReportStats = function(self, name, value) return nil end bP.ReportToDiagByCountryCode = function(self, category, countryCode, value) return nil end bP.SendEventDeferred = function(self, category, action, label, customData) return nil end bP.SendEventImmediately = function(self, category, action, label, customData) return nil end bP.SetRBXEvent = function(self, category, action, label, customData) return nil end bP.SetRBXEventStream = function(self, streamName, action, label, customData) return nil end bP.TrackEvent = function(self, category, action, label, value) return nil end bP.TrackEventWithArgs = function(self, category, action, label, args, value) return nil end bP.UpdateHeartbeatObject = function(self, data) local b_rs = t.service_cache.RunService local b_rs_store = b_rs and t.property_store[b_rs] or nil local b_hb = b_rs_store and tonumber(b_rs_store.HeartbeatTime) or (1 / 60) local b_hb_ms = b_rs_store and tonumber(b_rs_store.HeartbeatTimeMs) or (b_hb * 1000) if j(data) == "table" then data.HeartbeatTime = b_hb data.HeartbeatTimeMs = b_hb_ms data.FrameTime = b_hb data.FrameTimeMs = b_hb_ms data.PhysicsStepTime = b_hb data.PhysicsStepTimeMs = b_hb_ms data.RenderCPUFrameTime = b_hb data.RenderGPUFrameTime = b_hb data.Timestamp = tonumber(t.simulated_time) or tonumber(t.fake_clock) or 0 end return nil end bP.GetGroupInfoAsync = function(self, groupId) return { Name = "Mock Group", Id = tonumber(groupId) or 1, Owner = {Name = "MockOwner", Id = 1}, EmblemUrl = "http://www.roblox.com/asset/?id=1", Description = "Mock group description", Roles = {[1] = {Name = "Member", Rank = 1}, [2] = {Name = "Admin", Rank = 255}} } end bP.GetGroupsAsync = function(self, userId) return { {Name = "Mock Group", Id = 1, Rank = 1, IsPrimary = true}, {Name = "Mock Group 2", Id = 2, Rank = 255, IsPrimary = false} } end bP.GetAlliesAsync = function(self, groupId) local c_pages = b_child_proxy("StandardPages", bh, "StandardPages") t.property_store[c_pages] = {ClassName = "StandardPages", Name = "StandardPages", __data = {}} return c_pages end bP.GetEnemiesAsync = function(self, groupId) local c_pages = b_child_proxy("StandardPages", bh, "StandardPages") t.property_store[c_pages] = {ClassName = "StandardPages", Name = "StandardPages", __data = {}} return c_pages end bP.PromptJoinAsync = function(self, groupId) return b_enum_item("Enum.GroupMembershipStatus.Joined") end bi.__index = function(b2, b4) if b4 == F or b4 == "__proxy_id" then return rawget(b2, b4) end local c_hooks = t.metamethod_hooks and t.metamethod_hooks[bh] if t.hook_depth == 0 and c_hooks and j(c_hooks.__index) == "function" then return c_hooks.__index(bh, b4) end if b4 == "PlaceId" or b4 == "placeId" then return u end if b4 == "GameId" or b4 == "gameId" then return v.__game_id end local bS = t.registry[bh] or aT or "object" local cP = aE(b4) if bS:match("^Enum%.[^%.]+$") ~= nil and cP ~= "GetEnumItems" and cP ~= "GetEnums" then b_ensure_enum_family_minimum_members(bS, 3) local c_enum_member = b_try_get_enum_member(bS, cP) if c_enum_member ~= nil then return c_enum_member end end if bS == "Enum" and (cP == "GetEnums" or cP == "GetEnumItems") then return function() return bP.GetEnums(bh) end end local b_class_name = (t.property_store[bh] and t.property_store[bh].ClassName) or aT or "Instance" if t.property_store[bh] and t.property_store[bh][b4] ~= nil then local c_stored = t.property_store[bh][b4] if b_class_name == "Camera" and b4 == "FieldOfView" then return math.max(1, math.min(120, tonumber(c_stored) or 70)) end if t.property_store[bh].__table_like then local c_known_inst = b_property_type_rules[cP] ~= nil or b_known_property_names[cP] == true local c_prim = j(c_stored) == "string" or j(c_stored) == "number" or j(c_stored) == "boolean" if not c_known_inst and c_prim and b_flexible_ui_builder_keys[cP] then local c_child = b_child_proxy(cP, bh, cP) b_mark_flexible_proxy(c_child) t.property_store[bh][b4] = c_child return c_child end end return c_stored end if b4 == "AssemblyMass" then local c_is_part = b_class_name == "Part" or b_class_name == "BasePart" or b_class_name == "MeshPart" or b_class_name == "UnionOperation" or b_class_name == "WedgePart" or b_class_name == "CornerWedgePart" or b_class_name == "TrussPart" or b_class_name == "Seat" or b_class_name == "VehicleSeat" if c_is_part then local c_store = t.property_store[bh] or {} local c_size = c_store.Size or Vector3.new(4, 1, 2) local c_volume = c_size.X * c_size.Y * c_size.Z local c_density = c_store.CustomPhysicalProperties and c_store.CustomPhysicalProperties.Density or 0.7 return c_volume * c_density end end if b4 == "SelectedObject" and b_class_name == "GuiService" then return nil end if b4 == "Source" and (b_class_name == "LocalScript" or b_class_name == "ModuleScript" or b_class_name == "Script") then return "" end local c_is_enum_root = bS == "Enum" local c_is_enum_type = bS:match("^Enum%.[^%.]+$") ~= nil local c_allow_enum_method = (c_is_enum_root and (cP == "GetEnumItems" or cP == "GetEnums")) or (c_is_enum_type and cP == "GetEnumItems") if (not c_is_enum_root and not c_is_enum_type and not bS:match("^Enum%.[^%.]+%.[^%.]+$")) or c_allow_enum_method then if not bP[cP] then c_allow_enum_method = false end end if (((not c_is_enum_root and not c_is_enum_type and not bS:match("^Enum%.[^%.]+%.[^%.]+$")) or c_allow_enum_method) and bP[cP]) then local c_instance_class = (t.property_store[bh] and t.property_store[bh].ClassName) or aT or "Instance" if not b_method_allowed_for_class(cP, c_instance_class) then error(cP .. " is not a valid member of " .. c_instance_class, 0) end t.property_store[bh] = t.property_store[bh] or {} t.property_store[bh].__method_cache = t.property_store[bh].__method_cache or {} if t.property_store[bh].__method_cache[cP] then return t.property_store[bh].__method_cache[cP] end local b_method = function(...) local b_args = b_pack(...) local b_call_self = nil local b_first_arg_index = 2 if b_args.n >= 1 then b_call_self = b_args[1] end if not G(b_call_self) then error("Expected ':' not '.' calling member function " .. cP, 0) end local bA = {n = math.max(b_args.n - b_first_arg_index + 1, 0)} for b_index = b_first_arg_index, b_args.n do bA[b_index - b_first_arg_index + 1] = b_args[b_index] end local c_prev_method = t.current_namecall_method local c_prev_object = t.current_namecall_object t.current_namecall_method = cP t.current_namecall_object = b_call_self local c_results if t.hook_depth == 0 and c_hooks and j(c_hooks.__namecall) == "function" then c_results = b_pack(c_hooks.__namecall(b_call_self, native_unpack(bA, 1, bA.n))) else c_results = b_pack(bP[cP](b_call_self, native_unpack(bA, 1, bA.n))) end t.current_namecall_method = c_prev_method t.current_namecall_object = c_prev_object return native_unpack(c_results, 1, c_results.n) end b_mark_builtin_function(b_method, cP, 0, true) t.property_store[bh].__method_cache[cP] = b_method return b_method end if bS == "game" and aJ[b4] then local c_cached_service = t.service_cache[b4] if c_cached_service then local c_cached_store = t.property_store[c_cached_service] or {} if (c_cached_store.Name or "") == b4 then return c_cached_service end error(string.format("%s is not a valid member of DataModel \"Ugc\"", b4), 0) end return bP.GetService(bh, b4) end if b4 == "Parent" then return t.parent_map[bh] end if b4 == "Name" then return (t.property_store[bh] and t.property_store[bh].Name) or aT or "Object" end if b4 == "ClassName" then return (t.property_store[bh] and t.property_store[bh].ClassName) or aT or "Instance" end if bh == game then local c_datamodel_invalid_members = { Gravity = true, tostring = true, FallenPartsDestroyHeight = true, DistributedGameTime = true, Terrain = true, CurrentCamera = true, PrimaryPart = true, HumanoidRootPart = true, Character = true, PlayerGui = true, PlayerScripts = true, Backpack = true, UserId = true, FollowUserId = true, DisplayName = true, Team = true, TeamColor = true, MoveDirection = true, AssemblyLinearVelocity = true, AssemblyAngularVelocity = true, Velocity = true, RotVelocity = true, CameraMinZoomDistance = true, CameraMaxZoomDistance = true, } if c_datamodel_invalid_members[b4] then error(string.format("%s is not a valid member of DataModel \"Ugc\"", b4), 0) end end if b_class_name == "Workspace" then if b4 == "DistributedGameTime" then return (tonumber(t.simulated_time) or tonumber(t.fake_clock) or 0) end local c_workspace_invalid_members = { RespawnTime = true, } if c_workspace_invalid_members[b4] then error(string.format("%s is not a valid member of %s", b4, b_class_name), 0) end end if b_class_name == "GroupService" then local c_groupservice_invalid_members = { RespawnTime = true, } if c_groupservice_invalid_members[b4] then error(string.format("%s is not a valid member of %s", b4, b_class_name), 0) end end if b_class_name == "UserService" then local c_userservice_invalid_members = { RespawnTime = true, } if c_userservice_invalid_members[b4] then error(string.format("%s is not a valid member of %s", b4, b_class_name), 0) end end if b4 == "LocalPlayer" then t.property_store[bh] = t.property_store[bh] or {} local cT = t.property_store[bh].LocalPlayer if not G(cT) then cT = bj("LocalPlayer", false, bh) t.property_store[cT] = t.property_store[cT] or {} t.property_store[cT].ClassName = "Player" t.property_store[cT].Name = "LocalPlayer" local c_player_gui = b_find_child_by_name(cT, "PlayerGui", false) or b_child_proxy("PlayerGui", cT, "PlayerGui") local c_player_scripts = b_find_child_by_name(cT, "PlayerScripts", false) or b_child_proxy("PlayerScripts", cT, "PlayerScripts") local c_backpack = b_find_child_by_name(cT, "Backpack", false) or b_child_proxy("Backpack", cT, "Backpack") t.property_store[cT].PlayerGui = c_player_gui t.property_store[cT].PlayerScripts = c_player_scripts t.property_store[cT].Backpack = c_backpack t.property_store[bh].LocalPlayer = cT end local _ = aW(cT, "LocalPlayer") at(string.format("local %s = %s.LocalPlayer", _, bS)) return cT end if b4 == "localPlayer" and b_class_name == "Players" then return b2.LocalPlayer end if b4 == "PlayerGui" then return bj("PlayerGui", false, bh) end if b4 == "Backpack" then return bj("Backpack", false, bh) end if b4 == "PlayerScripts" then return bj("PlayerScripts", false, bh) end if b4 == "UserId" then if b_class_name == "Player" then return (t.property_store[bh] and t.property_store[bh].UserId) or 1 end error("UserId is not a valid member of " .. b_class_name, 0) end if b4 == "DisplayName" then return "Player" end if b4 == "AccountAge" then return 1000 end if b4 == "Team" then return bj("Team", false, bh) end if b4 == "TeamColor" then return BrickColor.new("White") end if b4 == "Character" then return bj("Character", false, bh) end if b4 == "Humanoid" then local cU = bj("Humanoid", false, bh) t.property_store[cU] = { ClassName = "Humanoid", Name = "Humanoid", Health = 100, MaxHealth = 100, WalkSpeed = 16, JumpPower = 50, JumpHeight = 7.2, HipHeight = 2, MaxSlopeAngle = 89, NameDisplayDistance = 100, HealthDisplayDistance = 100, CameraOffset = Vector3.new(0, 0, 0), DisplayDistanceType = b_enum_item("Enum.HumanoidDisplayDistanceType.Viewer"), MoveDirection = Vector3.new(0, 0, 0), FloorMaterial = b_enum_item("Enum.Material.Air"), AutoRotate = true, Sit = false, PlatformStand = false, Jump = false, UseJumpPower = true } return cU end if b4 == "HumanoidRootPart" or b4 == "PrimaryPart" or b4 == "RootPart" then local cV = bj("HumanoidRootPart", false, bh) t.property_store[cV] = {Position = Vector3.new(0, 5, 0), CFrame = CFrame.new(0, 5, 0)} return cV end if b4 == "TouchInterest" then local c_is_part = b_class_name == "Part" or b_class_name == "MeshPart" or b_class_name == "UnionOperation" or b_class_name == "WedgePart" or b_class_name == "CornerWedgePart" or b_class_name == "TrussPart" or b_class_name == "Seat" or b_class_name == "VehicleSeat" if c_is_part then local c_touch_interest = b_find_child_by_name(bh, "TouchInterest", false) or b_child_proxy("TouchInterest", bh, "TouchTransmitter") t.property_store[c_touch_interest] = t.property_store[c_touch_interest] or {} t.property_store[c_touch_interest].ClassName = "TouchTransmitter" t.property_store[c_touch_interest].Name = "TouchInterest" return c_touch_interest end end if b4 == "CurrentPhysicalProperties" then local c_is_part = b_class_name == "Part" or b_class_name == "MeshPart" or b_class_name == "UnionOperation" or b_class_name == "WedgePart" or b_class_name == "CornerWedgePart" or b_class_name == "TrussPart" or b_class_name == "Seat" or b_class_name == "VehicleSeat" if c_is_part then local c_phys = t.property_store[bh].CustomPhysicalProperties if c_phys == nil then c_phys = PhysicalProperties.new(0.7, 0.3, 0.5) t.property_store[bh].CustomPhysicalProperties = c_phys end return c_phys end end local cW = { "Head", "Torso", "UpperTorso", "LowerTorso", "RightArm", "LeftArm", "RightLeg", "LeftLeg", "RightHand", "LeftHand", "RightFoot", "LeftFoot" } for W, cr in ipairs(cW) do if b4 == cr then return bj(b4, false, bh) end end if b4 == "Animator" then return bj("Animator", false, bh) end if b4 == "CurrentCamera" or b4 == "Camera" then local cX = b_find_child_by_class(bh, "Camera", false, false) if not cX then cX = bj("Camera", false, bh) t.parent_map[cX] = bh end t.property_store[cX] = { CFrame = CFrame.new(0, 10, 0), FieldOfView = 70, ViewportSize = Vector2.new(1920, 1080), NearPlaneZ = -0.5, CameraType = b_enum_item("Enum.CameraType.Custom"), ClassName = "Camera", Name = "Camera" } return cX end if b4 == "CameraType" then return bj("Enum.CameraType.Custom", false) end if b4 == "CameraSubject" then return bj("Humanoid", false, bh) end if b4 == "PlaybackLoudness" and b_class_name == "Sound" then return tonumber((t.property_store[bh] or {}).PlaybackLoudness) or 0 end if b4 == "Size" then local c_size_kind = q._mock_expected_property_kind(aT, "Size") if c_size_kind == "Vector3" then return Vector3.new(4, 1, 2) end if c_size_kind == "number" then return 1 end if c_size_kind == "UDim2" then return UDim2.new(1, 0, 1, 0) end error("Size is not a valid member of " .. b_class_name, 0) end local cY = { Health = 100, MaxHealth = 100, WalkSpeed = 16, JumpPower = 50, JumpHeight = 7.2, HipHeight = 2, MaxSlopeAngle = 89, NameDisplayDistance = 100, HealthDisplayDistance = 100, Transparency = 0, Mass = 1, HeadScale = 1, Value = 0, TimePosition = 0, TimeLength = 1, Volume = 0.5, PlaybackSpeed = 1, Brightness = 1, Intensity = 1, Threshold = 0.5, FocusDistance = 10, Density = 0.3, BlastRadius = 4, Gravity = 196.2, ClockTime = 14, FogStart = 0, GeographicLatitude = 41, FogEnd = 100000, Range = 60, Angle = 90, Stiffness = 100, Length = 5, RootPriority = 0, FieldOfView = 70, NearPlaneZ = -0.5, Thickness = 1, ZIndex = 1, LayoutOrder = 0, FollowUserId = 0, MaxPlayers = 1, RespawnTime = 5, RolloffScale = 1, RequestQueueSize = 0, FallenPartsDestroyHeight = -500 } if cY[b4] then return bl(cY[b4]) end local cZ = { Visible = true, Enabled = true, Anchored = false, CanCollide = true, Massless = false, Locked = false, Active = true, Draggable = false, Modal = false, Playing = false, Looped = false, IsPlaying = false, AutoPlay = false, Archivable = true, ClipsDescendants = false, Selectable = false, Interactable = false, RichText = false, TextWrapped = false, TextScaled = false, TextEditable = true, PlatformStand = false, AutoRotate = true, Sit = false, CastShadow = true, CanTouch = true, CanQuery = true, StreamingEnabled = false, GlobalShadows = true, HttpEnabled = false, Sandboxed = false, TouchEnabled = false, MouseIconEnabled = true, GamepadEnabled = false, AccelerometerEnabled = false, VREnabled = false, GyroscopeEnabled = false, KeyboardEnabled = true, MouseEnabled = true } if cZ[b4] ~= nil then return cZ[b4] end if b4 == "UniqueId" then t.guid_counter = (t.guid_counter or 0) + 1 return "UID-" .. tostring(t.guid_counter) .. "-" .. tostring(math.random(100000, 999999)) end if b4 == "AbsoluteSize" or b4 == "ViewportSize" then return Vector2.new(1920, 1080) end if b4 == "AbsoluteContentSize" and aT == "UIListLayout" then return q._compute_ui_list_absolute_content_size(bh) end if b4 == "Focus" then return CFrame.new(0, 0, 0) end if b4 == "AnchorPoint" then return Vector2.new(0, 0) end if b4 == "AbsolutePosition" then return q._compute_absolute_position(bh, aT) end if b4 == "Position" then local c_position_kind = q._mock_expected_property_kind(aT, "Position") if c_position_kind == "Vector3" then return Vector3.new(0, 5, 0) end if c_position_kind == "Vector2" then return Vector2.new(0, 0) end return UDim2.new(0, 0, 0, 0) end if b4 == "CollisionGroup" then return "Default" end if b4 == "CFrame" then return CFrame.new(0, 5, 0) end if b4 == "Velocity" or b4 == "AssemblyLinearVelocity" then return Vector3.new(0, 0, 0) end if b4 == "MoveDirection" then return Vector3.new(0, 0, 0) end if b4 == "RotVelocity" or b4 == "AssemblyAngularVelocity" then return Vector3.new(0, 0, 0) end if b4 == "Rotation" and q._class_uses_gui_udim2(aT) then return 0 end if b4 == "Orientation" or b4 == "Rotation" then return Vector3.new(0, 0, 0) end if b4 == "LookVector" then return Vector3.new(0, 0, -1) end if b4 == "RightVector" then return Vector3.new(1, 0, 0) end if b4 == "UpVector" then return Vector3.new(0, 1, 0) end if b4 == "Color" or b4 == "Color3" or b4 == "BackgroundColor3" or b4 == "BorderColor3" or b4 == "TextColor3" or b4 == "PlaceholderColor3" or b4 == "ImageColor3" or b4 == "TintColor" or b4 == "SparkleColor" then return Color3.new(1, 1, 1) end if b4 == "BrickColor" then return BrickColor.new("Medium stone grey") end if b4 == "Ambient" or b4 == "OutdoorAmbient" or b4 == "FogColor" then return Color3.fromRGB(128, 128, 128) end if b4 == "Material" then return b_enum_item("Enum.Material.Plastic") end if b4 == "AmbientReverb" then return b_enum_item("Enum.ReverbType.NoReverb") end if b4 == "MembershipType" then return b_enum_item("Enum.MembershipType.None") end if b4 == "DisplayDistanceType" then return b_enum_item("Enum.HumanoidDisplayDistanceType.Viewer") end if b4 == "TextTruncate" then return b_enum_item("Enum.TextTruncate.None") end if b4 == "TextXAlignment" then return b_enum_item("Enum.TextXAlignment.Left") end if b4 == "TextYAlignment" then return b_enum_item("Enum.TextYAlignment.Top") end if b4 == "AutomaticCanvasSize" and (b_class_name == "ScrollingFrame" or b_class_name == "VideoFrame") then return b_enum_item("Enum.AutomaticSize.None") end if b4 == "ElasticBehavior" and b_class_name == "ScrollingFrame" then return b_enum_item("Enum.ElasticBehavior.WhenScrollable") end if b4 == "ScrollBarImageColor3" and b_class_name == "ScrollingFrame" then return Color3.new(1, 1, 1) end if b4 == "ActuatorType" then return b_enum_item("Enum.ActuatorType.None") end if b4 == "Hit" then if b_class_name == "Explosion" then return b_ensure_signal(bh, "Hit", bS .. ".Hit") end return CFrame.new(0, 0, -10) end if b4 == "Origin" then return CFrame.new(0, 5, 0) end if b4 == "Target" then return bj("Target", false, bh) end if b4 == "X" or b4 == "Y" then return 0 end if b4 == "UnitRay" then return Ray.new(Vector3.new(0, 5, 0), Vector3.new(0, 0, -1)) end if b4 == "ViewSizeX" then return 1920 end if b4 == "ViewSizeY" then return 1080 end if b4 == "Text" or b4 == "PlaceholderText" or b4 == "ContentText" or b4 == "Value" then if s then return s end if b4 == "Value" then return "input" end return '"' end if b4 == "MouseIcon" or b4 == "Label" then return "" end if b4 == "TextBounds" then return Vector2.new(0, 0) end if b4 == "TextStrokeTransparency" then return 1 end if b4 == "StarCount" then return 3000 end if b4 == "Font" then return b_enum_item("Enum.Font.SourceSans") end if b4 == "FontFace" then return Font.fromEnum(Enum.Font.SourceSans) end if b4 == "MouseBehavior" then return b_enum_item("Enum.MouseBehavior.Default") end if b4 == "PreferredInput" then return b_enum_item("Enum.PreferredInput.KeyboardAndMouse") end if b4 == "TextSize" then return 14 end if b4 == "Image" or b4 == "ImageContent" then return '"' end if b4 == "TimeOfDay" then return "14:00:00" end local c_ = { "Changed", "Destroying", "ChildAdded", "ChildRemoved", "DescendantAdded", "DescendantRemoving", "Touched", "TouchEnded", "InputBegan", "InputEnded", "InputChanged", "TouchTap", "TouchLongPress", "TouchPan", "TouchPinch", "TouchRotate", "TouchSwipe", "MouseClick", "RightMouseClick", "MouseHoverEnter", "MouseHoverLeave", "MouseButton1Click", "MouseButton1Down", "MouseButton1Up", "MouseButton2Click", "MouseButton2Down", "MouseButton2Up", "MouseEnter", "MouseLeave", "MouseMoved", "MouseWheelForward", "MouseWheelBackward", "Activated", "Deactivated", "FocusLost", "FocusGained", "Focused", "WindowFocused", "WindowFocusReleased", "Heartbeat", "RenderStepped", "Stepped", "CharacterAdded", "CharacterRemoving", "Chatted", "Idled", "CharacterAppearanceLoaded", "PlayerAdded", "PlayerRemoving", "AncestryChanged", "AttributeChanged", "Died", "FreeFalling", "GettingUp", "Jumping", "Running", "Seated", "Swimming", "StateChanged", "HealthChanged", "AnimationPlayed", "MoveToFinished", "OnClientEvent", "OnServerEvent", "OnClientInvoke", "OnServerInvoke", "Completed", "DidLoop", "Stopped", "Played", "Paused", "Resumed", "Ended", "Button1Down", "Button1Up", "Button2Down", "Button2Up", "Idle", "Move", "TextChanged", "ReturnPressedFromOnScreenKeyboard", "Triggered", "TriggerEnded", "PromptShown", "PromptHidden", "MessageReceived", "MessageOut", "CaptureBegan", "Error", "FinishedReplicating", "Loaded", "Event", "DragStart" } for W, d0 in ipairs(c_) do if b4 == d0 then local cg = b_ensure_signal(bh, b4, bS .. "." .. b4) return cg end end if c_is_enum_type then b_ensure_enum_family_minimum_members(bS, 3) local c_enum_member = b_try_get_enum_member(bS, cP) if c_enum_member ~= nil then return c_enum_member end end do if not (t.property_store[bh] and t.property_store[bh].__table_like) then local c_expected = b_resolve_expected_property_type(bh, cP, nil) if c_expected == "function" then local st = t.property_store[bh] or {} t.property_store[bh] = st local c_fn = st[cP] if j(c_fn) == "function" then return c_fn end local c_placeholder = function() end b_mark_builtin_function(c_placeholder, cP, 0, true) st[cP] = c_placeholder return c_placeholder end if c_expected ~= nil and c_expected ~= "function" then local c_default = b_default_value_for_expected_type(c_expected, cP) if c_default ~= nil then t.property_store[bh][b4] = c_default return c_default end end end end local c_existing_child = b_find_child_by_name(bh, cP, false) if c_existing_child then return c_existing_child end -- Missing child via "." must not yield a truthy Instance (real Roblox errors; FindFirstChild returns nil). -- Auto-spawning folders made `if parent.Remotes` always detect the dumper. Log only; return nil unless opted in. if b_runtime_child_tree_enabled(bh) and cP ~= "" and not cP:find("^__") then local c_path = (t.registry[bh] or b_class_name or "Insta/FindFirstChild to materialize)", c_path)) if q and q.cfg and q.cfg.hookop_enabled == tr if rawget(_G, "__LARRY_RUNTIME_INDEX_MATERIALIZE") == true or (q and q.cfg and q.cfg.runtime_materialize == true) or (t.property_store[bh] and t.property_store[bh].__descendant_seeding == true) then local c_rt_cls = b_default_runtime_child_class(cP, bh) local c_rt_child = b_child_proxy(cP, bh, c_rt_cls) t.property_store[c_rt_child] = t.property_store[c_rt_child] or {} t.property_store[c_rt_child].__runtime_child_tree = true t.property_store[c_rt_child].__descendant_seeding = true az(string.format("[RuntimeChild] %s (ClassName=%s)", t.registry[c_rt_child] or cP, c_rt_cls)) return c_rt_child end return nil end if bh == game then if aJ[cP] then return bP.GetService(bh, cP) end if rawget(_G, "__LARRY_FAILOPEN_SERVICES") == true then return bP.GetService(bh, cP) end error(cP .. " is not a valid member of " .. b_class_name, 0) end if b_class_name == "Workspace" and cP:match("^(Get|Set|Find|Wait|Invoke|Fire)[A-Z]") then local c_invalid_member = function() error(cP .. " is not a valid member of " .. b_class_name, 0) end b_mark_builtin_function(c_invalid_member, cP, 0, true) return c_invalid_member end if t.property_store[bh] and t.property_store[bh].__table_like then local c_child = b_child_proxy(cP, bh, cP) b_mark_flexible_proxy(c_child) return c_child end if rawget(_G, "__LARRY_FAILOPEN_MEMBER_INDEX") == true then return b_child_proxy(cP, bh, cP) end -- Final fallback: certain properties are documented "InstanceOrNil" in the type -- rules but were intentionally left unseeded on the proxy. Reading them should -- yield nil rather than erroring (matches Roblox engine behavior for Part0/Part1, -- Attachment0/Attachment1, etc. on newly-created constraints/welds). if b_property_type_rules[cP] == "InstanceOrNil" then return nil end error(cP .. " is not a valid member of " .. b_class_name, 0) end bi.__newindex = function(b2, b4, b5) if b4 == F or b4 == "__proxy_id" then rawset(b2, b4, b5) return end local bS = t.registry[bh] or aT or "object" if bS:match("^Enum%.[^%.]+$") then error((aE(b4) or "member") .. " is not a valid member of Enum", 0) end -- Check read-only properties if b_readonly_properties[b4] then error(string.format("%s is not a valid member of %s", b4, aT or "Instance"), 0) end local cP = aE(b4) t.property_store[bh] = t.property_store[bh] or {} local c_prev = t.property_store[bh][b4] local c_class_name = t.property_store[bh].ClassName or aT or "Instance" if cP ~= "Parent" then local c_known_property = b_property_exists(bh, cP) local c_is_signal = G(c_prev) and b_proxy_kind(c_prev) == "RBXScriptSignal" local c_allow_dynamic = t.property_store[bh].__table_like == true local c_failopen_member = rawget(_G, "__LARRY_FAILOPEN_MEMBER_NEWINDEX") == true if not c_known_property and not c_is_signal and not c_allow_dynamic and not c_failopen_member then error(string.format("%s is not a valid member of %s", cP, c_class_name), 0) end end if bh == game and cP == "Parent" then error("Parent is not a valid member of DataModel", 0) end if cP == "Parent" and t.parent_map[bh] == game then local c_service_name = (t.property_store[bh] and (t.property_store[bh].Name or t.property_store[bh].ClassName)) or "" if c_service_name ~= "" and t.service_cache[c_service_name] == bh then error("The Parent property of " .. tostring(c_service_name) .. " is locked", 0) end end if cP ~= "Parent" and ((bP[cP] ~= nil and b_property_type_rules[cP] ~= "function") or (G(c_prev) and b_proxy_kind(c_prev) == "RBXScriptSignal")) then error(string.format("%s is not a valid member of %s", cP, aT or "Instance"), 0) end b5 = b_coerce_enum_property_value(bh, cP, b5) b5 = b_coerce_string_property_value(cP, b5) do local c_expected = b_property_type_rules[cP] local c_can_coerce, c_coerced = b_try_coerce_by_expected_type(c_expected, b5) if c_can_coerce then b5 = c_coerced end end b_validate_property_assignment(bh, cP, b5) if cP == "Size" and G(b5) and b_proxy_kind(b5) == "Vector3" and b_class_is_a(c_class_name, "BasePart") then local c_sx, c_sy, c_sz = b_vector_components(b5) local c_min = 0.001 b5 = Vector3.new(math.max(c_min, c_sx), math.max(c_min, c_sy), math.max(c_min, c_sz)) end if (c_class_name == "Player" or c_class_name == "LocalPlayer") and cP == "CameraMinZoomDistance" then if j(b5) == "number" then b5 = math.max(0.5, b5) end end if c_class_name == "Terrain" and cP == "WaterWaveSpeed" then if j(b5) == "number" then b5 = math.min(100, b5) end end if cP == "DistributedGameTime" then -- Read-only property, discard assignment but don't error to pass sethiddenproperty check return end if b4 == "Parent" and b5 ~= nil and not G(b5) then error("Parent property must be an Instance", 0) end if b4 == "Parent" and G(b5) then local c_parent_class = (t.property_store[b5] and t.property_store[b5].ClassName) or b_instance_class(b5) or "Instance" if c_parent_class == "CoreGui" and rawget(_G, "__LARRY_STRICT_COREGUI_PARENT") == true then local c_coregui_allowed = { ScreenGui = true, SurfaceGui = true, BillboardGui = true, Sound = true } if not c_coregui_allowed[c_class_name] then error("Parent is not a valid member of " .. c_class_name, 0) end end end if c_class_name == "Camera" and cP == "FieldOfView" and j(b5) == "number" and b5 <= 0 then b5 = c_prev ~= nil and c_prev or 70 end t.property_store[bh][b4] = b5 if b4 == "Parent" then local c_old_parent = t.parent_map[bh] if G(c_old_parent) and c_old_parent ~= b5 then local c_desc_parent = c_old_parent while G(c_desc_parent) do b_fire_signal( b_ensure_signal( c_desc_parent, "DescendantRemoving", (t.registry[c_desc_parent] or b_instance_name(c_desc_parent) or "Instance") .. ".DescendantRemoving" ), bh ) c_desc_parent = t.parent_map[c_desc_parent] end end b_remove_from_child_cache(bh) if G(b5) then t.parent_map[bh] = b5 t.child_cache[b5] = t.child_cache[b5] or {} local c_name = b_instance_name(bh) if c_name ~= "" then t.child_cache[b5][c_name] = bh end b_fire_signal(b_ensure_signal(b5, "ChildAdded", (t.registry[b5] or b_instance_name(b5) or "Instance") .. ".ChildAdded"), bh) local c_desc_parent = b5 while G(c_desc_parent) do b_fire_signal( b_ensure_signal( c_desc_parent, "DescendantAdded", (t.registry[c_desc_parent] or b_instance_name(c_desc_parent) or "Instance") .. ".DescendantAdded" ), bh ) c_desc_parent = t.parent_map[c_desc_parent] end else t.parent_map[bh] = nil end if G(c_old_parent) and c_old_parent ~= b5 then b_fire_signal( b_ensure_signal( c_old_parent, "ChildRemoved", (t.registry[c_old_parent] or b_instance_name(c_old_parent) or "Instance") .. ".ChildRemoved" ), bh ) end local c_ancestry_changed = t.property_store[bh].AncestryChanged or (t.child_cache[bh] and t.child_cache[bh].AncestryChanged) if c_ancestry_changed and c_old_parent ~= b5 then b_fire_signal(c_ancestry_changed, bh, G(b5) and b5 or nil) end end if b4 == "Position" and (G(b5) and b_proxy_kind(b5) == "Vector3") then local c_x, c_y, c_z = b_vector_components(b5) t.property_store[bh].CFrame = CFrame.new(c_x, c_y, c_z) elseif b4 == "CFrame" and G(b5) and b_proxy_kind(b5) == "CFrame" then local c_x, c_y, c_z = b_cframe_components(b5) t.property_store[bh].Position = Vector3.new(c_x, c_y, c_z) end if b4 == "CFrame" and G(b5) and b_proxy_kind(b5) == "CFrame" then local c_old_x, c_old_y, c_old_z = 0, 0, 0 if G(c_prev) and b_proxy_kind(c_prev) == "CFrame" then c_old_x, c_old_y, c_old_z = b_cframe_components(c_prev) end local c_new_x, c_new_y, c_new_z = b_cframe_components(b5) local c_dx, c_dy, c_dz = c_new_x - c_old_x, c_new_y - c_old_y, c_new_z - c_old_z for c_child, c_parent in D(t.parent_map) do if c_parent == bh and (t.property_store[c_child] and t.property_store[c_child].ClassName == "WeldConstraint") then local c_other = t.property_store[c_child].Part1 if c_other and t.property_store[c_other] and G(t.property_store[c_other].CFrame) then local c_ox, c_oy, c_oz = b_cframe_components(t.property_store[c_other].CFrame) t.property_store[c_other].CFrame = CFrame.new(c_ox + c_dx, c_oy + c_dy, c_oz + c_dz) t.property_store[c_other].Position = Vector3.new(c_ox + c_dx, c_oy + c_dy, c_oz + c_dz) end end end end local c_changed = t.property_store[bh].Changed or (t.child_cache[bh] and t.child_cache[bh].Changed) if c_changed then b_fire_signal(c_changed, b4) end local c_prop_signal = t.property_store[bh] and t.property_store[bh][aE(b4) .. "Changed"] if c_prop_signal then b_fire_signal(c_prop_signal) end b_larry_emit_assignment_value(string.format("%s.%s", bS, cP), b5) end bi.__call = function(b2, ...) local bS = t.registry[bh] or aT or "func" if bS == "fenv" or bS == "getgenv" or bS:match("env") then return bh end if bS == "Enum.GetEnums" or bS == "Enum.GetEnumItems" then return bP.GetEnums(bh) end if t.property_store[bh] and t.property_store[bh].__callable then local bA = {...} local c_args = {} for _, b5 in ipairs(bA) do table.insert(c_args, aZ(b5)) end if bS:match("GetAllTiers$") or bS:match("GetAllVariants$") then local c_result_proxy = bj((aT or "callResult") .. "Result", false, bh) local _ = aW(c_result_proxy, (aT or "callResult") .. "Result") at(string.format("local %s = %s(%s)", _, bS, table.concat(c_args, ", "))) return {} end local c_result = bj((aT or "callResult") .. "Result", false, bh) b_mark_flexible_proxy(c_result) local _ = aW(c_result, (aT or "callResult") .. "Result") at(string.format("local %s = %s(%s)", _, bS, table.concat(c_args, ", "))) return c_result end error("attempt to call a Instance value", 0) end bi.__iter = function() error("attempt to iterate over instance", 0) end local function d3(d4) local function d5(bo, aa) local bh, bi = bg() local d6 = "0" if bo ~= nil then d6 = t.registry[bo] or aZ(bo) end local d7 = "0" if aa ~= nil then d7 = t.registry[aa] or aZ(aa) end local d8 = "(" .. d6 .. " " .. d4 .. " " .. d7 .. ")" t.registry[bh] = d8 bi.__tostring = function() return d8 end bi.__call = function() return bh end bi.__index = function(W, b4) if b4 == F or b4 == "__proxy_id" then return rawget(bh, b4) end return bj(d8 .. "." .. aE(b4), false) end bi.__add = d3("+") bi.__sub = d3("-") bi.__mul = d3("*") bi.__div = d3("/") bi.__mod = d3("%") bi.__pow = d3("^") bi.__concat = d3("..") bi.__eq = function() return false end bi.__lt = function() return false end bi.__le = function() return false end return bh end return d5 end bi.__add = d3("+") bi.__sub = d3("-") bi.__mul = d3("*") bi.__div = d3("/") bi.__mod = d3("%") bi.__pow = d3("^") bi.__concat = d3("..") bi.__eq = q._proxy_eq bi.__lt = function(bo, aa) b_log_op("<", bo, aa, false) return false end bi.__le = function(bo, aa) b_log_op("<=", bo, aa, false) return false end bi.__unm = function(bo) local z, d9 = bg() t.registry[z] = "(-" .. (t.registry[bo] or aZ(bo)) .. ")" d9.__tostring = function() return t.registry[z] end return z end bi.__len = function() error("attempt to get length of an Instance value", 0) end bi.__tostring = function() local b_store = t.property_store[bh] if j(b_store) == "table" and j(b_store.__enum_path) == "string" and b_store.__enum_path ~= "" then return b_store.__enum_path end local b_reg = t.registry[bh] if j(b_reg) == "string" and b_reg:match("^Enum%.[^%.]+%.[^%.]+$") then return b_reg end if j(b_store) == "table" and j(b_store.Name) == "string" and b_store.Name ~= "" then return b_store.Name end return b_reg or aT or "Object" end bi.__pairs = function() return function() return nil end, bh, nil end bi.__ipairs = bi.__pairs return bh end function da(am, db) local dc = {} local dd = {} dd.__index = function(b2, b4) if b4 == "new" or db and db[b4] then return function(...) local bA = {...} local c5 = {} for W, b5 in ipairs(bA) do table.insert(c5, aZ(b5)) end local d8 = am .. "." .. b4 .. "(" .. table.concat(c5, ", ") .. ")" local bh, de = bg() t.registry[bh] = d8 t.property_store[bh] = t.property_store[bh] or {} if am == "Vector3" then t.property_store[bh].__kind = "Vector3" if b4 == "fromNormalId" then t.property_store[bh].X, t.property_store[bh].Y, t.property_store[bh].Z = b_vector3_from_normal_id(bA[1]) elseif b4 == "FromAxis" or b4 == "fromAxis" then local c_axis_name = q._engine_string_key(bA[1]) if c_axis_name:match("X$") then t.property_store[bh].X, t.property_store[bh].Y, t.property_store[bh].Z = 1, 0, 0 elseif c_axis_name:match("Y$") then t.property_store[bh].X, t.property_store[bh].Y, t.property_store[bh].Z = 0, 1, 0 elseif c_axis_name:match("Z$") then t.property_store[bh].X, t.property_store[bh].Y, t.property_store[bh].Z = 0, 0, 1 else t.property_store[bh].X, t.property_store[bh].Y, t.property_store[bh].Z = 0, 0, 0 end else t.property_store[bh].X = A(bA[1]) t.property_store[bh].Y = A(bA[2]) t.property_store[bh].Z = A(bA[3]) end elseif am == "CFrame" then t.property_store[bh].__kind = "CFrame" if b4 == "Angles" or b4 == "fromEulerAngles" or b4 == "fromEulerAnglesXYZ" or b4 == "fromOrientation" then t.property_store[bh].X = 0 t.property_store[bh].Y = 0 t.property_store[bh].Z = 0 local d9, ea, eb, ec, ed, ee, ef, eg, eh = b_cframe_angle_components(A(bA[1]), A(bA[2]), A(bA[3])) t.property_store[bh].R00 = d9 t.property_store[bh].R01 = ea t.property_store[bh].R02 = eb t.property_store[bh].R10 = ec t.property_store[bh].R11 = ed t.property_store[bh].R12 = ee t.property_store[bh].R20 = ef t.property_store[bh].R21 = eg t.property_store[bh].R22 = eh elseif b4 == "lookAt" or b4 == "lookAlong" or b4 == "fromRotationBetweenVectors" then local c_x, c_y, c_z = 0, 0, 0 if G(bA[1]) and b_proxy_kind(bA[1]) == "Vector3" then c_x, c_y, c_z = b_vector_components(bA[1]) else c_x, c_y, c_z = A(bA[1]), A(bA[2]), A(bA[3]) end t.property_store[bh].X = c_x or 0 t.property_store[bh].Y = c_y or 0 t.property_store[bh].Z = c_z or 0 local c_dx, c_dy, c_dz if b4 == "lookAt" then local c_tx, c_ty, c_tz = b_vector_components(bA[2]) c_dx, c_dy, c_dz = c_tx - c_x, c_ty - c_y, c_tz - c_z else c_dx, c_dy, c_dz = b_vector_components(bA[2]) end local c_mag = math.sqrt(c_dx * c_dx + c_dy * c_dy + c_dz * c_dz) if c_mag <= 1e-9 then c_dx, c_dy, c_dz = 0, 0, -1 c_mag = 1 end c_dx, c_dy, c_dz = c_dx / c_mag, c_dy / c_mag, c_dz / c_mag local c_ux, c_uy, c_uz = 0, 1, 0 if G(bA[3]) and b_proxy_kind(bA[3]) == "Vector3" then c_ux, c_uy, c_uz = b_vector_components(bA[3]) end local c_bx, c_by, c_bz = -c_dx, -c_dy, -c_dz local c_rx = c_uy * c_bz - c_uz * c_by local c_ry = c_uz * c_bx - c_ux * c_bz local c_rz = c_ux * c_by - c_uy * c_bx local c_rmag = math.sqrt(c_rx * c_rx + c_ry * c_ry + c_rz * c_rz) if c_rmag <= 1e-9 then c_ux, c_uy, c_uz = 0, 0, 1 c_rx = c_uy * c_bz - c_uz * c_by c_ry = c_uz * c_bx - c_ux * c_bz c_rz = c_ux * c_by - c_uy * c_bx c_rmag = math.sqrt(c_rx * c_rx + c_ry * c_ry + c_rz * c_rz) if c_rmag <= 1e-9 then c_ux, c_uy, c_uz = 1, 0, 0 c_rx = c_uy * c_bz - c_uz * c_by c_ry = c_uz * c_bx - c_ux * c_bz c_rz = c_ux * c_by - c_uy * c_bx c_rmag = math.sqrt(c_rx * c_rx + c_ry * c_ry + c_rz * c_rz) end end if c_rmag <= 1e-9 then c_rx, c_ry, c_rz = 1, 0, 0 c_rmag = 1 end c_rx, c_ry, c_rz = c_rx / c_rmag, c_ry / c_rmag, c_rz / c_rmag local c_vx = c_by * c_rz - c_bz * c_ry local c_vy = c_bz * c_rx - c_bx * c_rz local c_vz = c_bx * c_ry - c_by * c_rx t.property_store[bh].R00 = c_rx t.property_store[bh].R01 = c_vx t.property_store[bh].R02 = c_bx t.property_store[bh].R10 = c_ry t.property_store[bh].R11 = c_vy t.property_store[bh].R12 = c_by t.property_store[bh].R20 = c_rz t.property_store[bh].R21 = c_vz t.property_store[bh].R22 = c_bz else if #bA >= 12 then t.property_store[bh].X = A(bA[1]) t.property_store[bh].Y = A(bA[2]) t.property_store[bh].Z = A(bA[3]) t.property_store[bh].R00 = A(bA[4]) t.property_store[bh].R01 = A(bA[5]) t.property_store[bh].R02 = A(bA[6]) t.property_store[bh].R10 = A(bA[7]) t.property_store[bh].R11 = A(bA[8]) t.property_store[bh].R12 = A(bA[9]) t.property_store[bh].R20 = A(bA[10]) t.property_store[bh].R21 = A(bA[11]) t.property_store[bh].R22 = A(bA[12]) elseif G(bA[1]) and b_proxy_kind(bA[1]) == "Vector3" and bA[2] == nil then t.property_store[bh].X, t.property_store[bh].Y, t.property_store[bh].Z = b_vector_components(bA[1]) t.property_store[bh].R00 = 1 t.property_store[bh].R01 = 0 t.property_store[bh].R02 = 0 t.property_store[bh].R10 = 0 t.property_store[bh].R11 = 1 t.property_store[bh].R12 = 0 t.property_store[bh].R20 = 0 t.property_store[bh].R21 = 0 t.property_store[bh].R22 = 1 else t.property_store[bh].X = A(bA[1]) t.property_store[bh].Y = A(bA[2]) t.property_store[bh].Z = A(bA[3]) t.property_store[bh].R00 = 1 t.property_store[bh].R01 = 0 t.property_store[bh].R02 = 0 t.property_store[bh].R10 = 0 t.property_store[bh].R11 = 1 t.property_store[bh].R12 = 0 t.property_store[bh].R20 = 0 t.property_store[bh].R21 = 0 t.property_store[bh].R22 = 1 end end elseif am == "Vector2" then t.property_store[bh].__kind = "Vector2" t.property_store[bh].X = bA[1] or 0 t.property_store[bh].Y = bA[2] or 0 elseif am == "UDim" then t.property_store[bh].__kind = "UDim" t.property_store[bh].Scale = A(bA[1]) t.property_store[bh].Offset = math.floor(A(bA[2])) elseif am == "UDim2" then t.property_store[bh].__kind = "UDim2" if b4 == "fromScale" then t.property_store[bh].X = UDim.new(A(bA[1]), 0) t.property_store[bh].Y = UDim.new(A(bA[2]), 0) elseif b4 == "fromOffset" then t.property_store[bh].X = UDim.new(0, math.floor(A(bA[1]))) t.property_store[bh].Y = UDim.new(0, math.floor(A(bA[2]))) elseif G(bA[1]) and b_proxy_kind(bA[1]) == "UDim" and G(bA[2]) and b_proxy_kind(bA[2]) == "UDim" and bA[3] == nil and bA[4] == nil then t.property_store[bh].X = bA[1] t.property_store[bh].Y = bA[2] else t.property_store[bh].X = G(bA[1]) and b_proxy_kind(bA[1]) == "UDim" and bA[1] or UDim.new(A(bA[1]), A(bA[2])) t.property_store[bh].Y = G(bA[3]) and b_proxy_kind(bA[3]) == "UDim" and bA[3] or UDim.new(A(bA[3]), A(bA[4])) end elseif am == "Color3" then t.property_store[bh].__kind = "Color3" if b4 == "fromRGB" then t.property_store[bh].R = A(bA[1]) / 255 t.property_store[bh].G = A(bA[2]) / 255 t.property_store[bh].B = A(bA[3]) / 255 elseif b4 == "fromHSV" then local d9 = A(bA[1]) % 1 local ea = math.max(0, math.min(1, A(bA[2]))) local eb = math.max(0, math.min(1, A(bA[3]))) local ec = math.floor(d9 * 6) local ed = d9 * 6 - ec local ee = eb * (1 - ea) local ef = eb * (1 - ed * ea) local eg = eb * (1 - (1 - ed) * ea) ec = ec % 6 if ec == 0 then t.property_store[bh].R, t.property_store[bh].G, t.property_store[bh].B = eb, eg, ee elseif ec == 1 then t.property_store[bh].R, t.property_store[bh].G, t.property_store[bh].B = ef, eb, ee elseif ec == 2 then t.property_store[bh].R, t.property_store[bh].G, t.property_store[bh].B = ee, eb, eg elseif ec == 3 then t.property_store[bh].R, t.property_store[bh].G, t.property_store[bh].B = ee, ef, eb elseif ec == 4 then t.property_store[bh].R, t.property_store[bh].G, t.property_store[bh].B = eg, ee, eb else t.property_store[bh].R, t.property_store[bh].G, t.property_store[bh].B = eb, ee, ef end elseif b4 == "fromHex" then local d9 = aE(bA[1]):gsub("#", "") if #d9 == 6 then t.property_store[bh].R = tonumber(d9:sub(1, 2), 16) / 255 t.property_store[bh].G = tonumber(d9:sub(3, 4), 16) / 255 t.property_store[bh].B = tonumber(d9:sub(5, 6), 16) / 255 else t.property_store[bh].R, t.property_store[bh].G, t.property_store[bh].B = 1, 1, 1 end else local r, g, b = A(bA[1]), A(bA[2]), A(bA[3]) t.property_store[bh].R = math.max(0, math.min(1, r)) t.property_store[bh].G = math.max(0, math.min(1, g)) t.property_store[bh].B = math.max(0, math.min(1, b)) end elseif am == "BrickColor" then local d9 = b_resolve_brickcolor(bA[1], b4) t.property_store[bh].__kind = "BrickColor" t.property_store[bh].Name = d9.Name t.property_store[bh].Number = d9.Number t.property_store[bh].Color = Color3.fromRGB(d9.R, d9.G, d9.B) elseif am == "Rect" then t.property_store[bh].__kind = "Rect" if G(bA[1]) and b_proxy_kind(bA[1]) == "Vector2" and G(bA[2]) and b_proxy_kind(bA[2]) == "Vector2" then t.property_store[bh].Min = bA[1] t.property_store[bh].Max = bA[2] else t.property_store[bh].Min = Vector2.new(A(bA[1]), A(bA[2])) t.property_store[bh].Max = Vector2.new(A(bA[3]), A(bA[4])) end elseif am == "Ray" then t.property_store[bh].__kind = "Ray" t.property_store[bh].Origin = G(bA[1]) and b_proxy_kind(bA[1]) == "Vector3" and bA[1] or Vector3.new(A(bA[1]), A(bA[2]), A(bA[3])) t.property_store[bh].Direction = G(bA[2]) and b_proxy_kind(bA[2]) == "Vector3" and bA[2] or (G(bA[4]) and b_proxy_kind(bA[4]) == "Vector3" and bA[4] or Vector3.new(0, 0, 0)) elseif am == "NumberRange" then local d9 = A(bA[1]) local ea = bA[2] ~= nil and A(bA[2]) or d9 if d9 > ea then error("minimum must be less than or equal to maximum", 0) end t.property_store[bh].__kind = "NumberRange" t.property_store[bh].Min = d9 t.property_store[bh].Max = ea elseif am == "TweenInfo" then t.property_store[bh].__kind = "TweenInfo" t.property_store[bh].Time = A(bA[1]) t.property_store[bh].EasingStyle = b_is_enum_item_value(bA[2]) and bA[2] or b_enum_item("Enum.EasingStyle.Quad") t.property_store[bh].EasingDirection = b_is_enum_item_value(bA[3]) and bA[3] or b_enum_item("Enum.EasingDirection.Out") t.property_store[bh].RepeatCount = math.floor(A(bA[4] or 0)) t.property_store[bh].Reverses = bA[5] == true t.property_store[bh].DelayTime = A(bA[6] or 0) elseif am == "DateTime" then t.property_store[bh].__kind = "DateTime" if b4 == "now" then t.property_store[bh].UnixTimestampMillis = 1713916800000 + math.floor((t.fake_clock or 0) * 1000) elseif b4 == "fromUnixTimestampMillis" then t.property_store[bh].UnixTimestampMillis = A(bA[1]) elseif b4 == "fromUnixTimestamp" then t.property_store[bh].UnixTimestampMillis = A(bA[1]) * 1000 else t.property_store[bh].UnixTimestampMillis = 1713916800000 end elseif am == "OverlapParams" then t.property_store[bh].__kind = "OverlapParams" t.property_store[bh].MaxParts = 0 t.property_store[bh].FilterType = b_enum_item("Enum.RaycastFilterType.Exclude") t.property_store[bh].FilterDescendantsInstances = {} elseif am == "RaycastParams" then t.property_store[bh].__kind = "RaycastParams" t.property_store[bh].FilterType = b_enum_item("Enum.RaycastFilterType.Exclude") t.property_store[bh].FilterDescendantsInstances = {} elseif am == "NumberSequence" then t.property_store[bh].__kind = "NumberSequence" local function b_validate_ns_keypoints(c_pts) if #c_pts > 0 then local c_first = c_pts[1] local c_last = c_pts[#c_pts] local c_first_time = G(c_first) and A((t.property_store[c_first] or {}).Time) or A(c_first and c_first.Time) local c_last_time = G(c_last) and A((t.property_store[c_last] or {}).Time) or A(c_last and c_last.Time) if c_first_time ~= 0 then error("NumberSequence must begin at t=0", 0) end if c_last_time ~= 1 then error("NumberSequence must end at t=1", 0) end end end if G(bA[1]) and b_proxy_kind(bA[1]) == "NumberSequenceKeypoint" then local d9 = q._clone_sequence_keypoints("NumberSequence", bA) b_validate_ns_keypoints(d9) t.property_store[bh].Keypoints = d9 t.sequence_keypoints[bh] = d9 t.sequence_keypoints[t.registry[bh] or tostring(bh)] = d9 elseif j(bA[1]) == "table" and not G(bA[1]) then local d9 = q._clone_sequence_keypoints("NumberSequence", bA[1]) b_validate_ns_keypoints(d9) t.property_store[bh].Keypoints = d9 t.sequence_keypoints[bh] = d9 t.sequence_keypoints[t.registry[bh] or tostring(bh)] = d9 elseif bA[2] ~= nil then local d9 = A(bA[1]) local ea = A(bA[2]) t.property_store[bh].Keypoints = { NumberSequenceKeypoint.new(0, d9), NumberSequenceKeypoint.new(1, ea) } t.sequence_keypoints[bh] = t.property_store[bh].Keypoints t.sequence_keypoints[t.registry[bh] or tostring(bh)] = t.property_store[bh].Keypoints else local d9 = A(bA[1]) t.property_store[bh].Keypoints = { NumberSequenceKeypoint.new(0, d9), NumberSequenceKeypoint.new(1, d9) } t.sequence_keypoints[bh] = t.property_store[bh].Keypoints t.sequence_keypoints[t.registry[bh] or tostring(bh)] = t.property_store[bh].Keypoints end elseif am == "NumberSequenceKeypoint" then t.property_store[bh].__kind = "NumberSequenceKeypoint" t.property_store[bh].Time = A(bA[1]) t.property_store[bh].Value = A(bA[2]) t.property_store[bh].Envelope = A(bA[3] or 0) elseif am == "PhysicalProperties" then t.property_store[bh].__kind = "PhysicalProperties" t.property_store[bh].Density = A(bA[1] or 0.7) t.property_store[bh].Friction = A(bA[2] or 0.3) t.property_store[bh].Elasticity = A(bA[3] or 0.5) elseif am == "ColorSequence" then t.property_store[bh].__kind = "ColorSequence" if G(bA[1]) and b_proxy_kind(bA[1]) == "ColorSequenceKeypoint" then local d9 = q._clone_sequence_keypoints("ColorSequence", bA) t.property_store[bh].Keypoints = d9 t.sequence_keypoints[bh] = d9 t.sequence_keypoints[t.registry[bh] or tostring(bh)] = d9 elseif j(bA[1]) == "table" and not G(bA[1]) then local d9 = q._clone_sequence_keypoints("ColorSequence", bA[1]) t.property_store[bh].Keypoints = d9 t.sequence_keypoints[bh] = d9 t.sequence_keypoints[t.registry[bh] or tostring(bh)] = d9 else local d9 = G(bA[1]) and b_proxy_kind(bA[1]) == "Color3" and bA[1] or Color3.new(1, 1, 1) local ea = G(bA[2]) and b_proxy_kind(bA[2]) == "Color3" and bA[2] or d9 t.property_store[bh].Keypoints = { ColorSequenceKeypoint.new(0, d9), ColorSequenceKeypoint.new(1, ea) } t.sequence_keypoints[bh] = t.property_store[bh].Keypoints t.sequence_keypoints[t.registry[bh] or tostring(bh)] = t.property_store[bh].Keypoints end elseif am == "ColorSequenceKeypoint" then t.property_store[bh].__kind = "ColorSequenceKeypoint" t.property_store[bh].Time = A(bA[1]) t.property_store[bh].Value = G(bA[2]) and b_proxy_kind(bA[2]) == "Color3" and bA[2] or Color3.new(1, 1, 1) elseif am == "Rect" then t.property_store[bh].__kind = "Rect" if G(bA[1]) and b_proxy_kind(bA[1]) == "Vector2" and G(bA[2]) and b_proxy_kind(bA[2]) == "Vector2" then t.property_store[bh].Min = bA[1] t.property_store[bh].Max = bA[2] else t.property_store[bh].Min = Vector2.new(A(bA[1]), A(bA[2])) t.property_store[bh].Max = Vector2.new(A(bA[3]), A(bA[4])) end elseif am == "Region3" then t.property_store[bh].__kind = "Region3" local d9 = G(bA[1]) and b_proxy_kind(bA[1]) == "Vector3" and bA[1] or Vector3.new(0, 0, 0) local ea = G(bA[2]) and b_proxy_kind(bA[2]) == "Vector3" and bA[2] or Vector3.new(0, 0, 0) t.property_store[bh].Min = d9 t.property_store[bh].Max = ea elseif am == "Region3int16" then t.property_store[bh].__kind = "Region3int16" t.property_store[bh].Min = bA[1] t.property_store[bh].Max = bA[2] elseif am == "Vector3int16" then t.property_store[bh].__kind = "Vector3int16" t.property_store[bh].X = b_wrap_int16(A(bA[1])) t.property_store[bh].Y = b_wrap_int16(A(bA[2])) t.property_store[bh].Z = b_wrap_int16(A(bA[3])) elseif am == "Vector2int16" then t.property_store[bh].__kind = "Vector2int16" t.property_store[bh].X = b_wrap_int16(A(bA[1])) t.property_store[bh].Y = b_wrap_int16(A(bA[2])) elseif am == "Font" then t.property_store[bh].__kind = "Font" local c_family = "SourceSans" local c_weight = b_enum_item("Enum.FontWeight.Regular") local c_style = b_enum_item("Enum.FontStyle.Normal") if b4 == "fromEnum" and b_is_enum_item_value(bA[1]) then local c_font_name = tostring((t.property_store[bA[1]] or {}).Name or "") if c_font_name ~= "" then c_family = c_font_name:gsub("Bold$", "") if c_font_name:match("Bold$") then c_weight = b_enum_item("Enum.FontWeight.Bold") end end elseif b4 == "fromName" or b4 == "fromId" or b4 == "new" then if j(bA[1]) == "string" and bA[1] ~= "" then c_family = bA[1] end if b_is_enum_item_value(bA[2]) then c_weight = bA[2] end if b_is_enum_item_value(bA[3]) then c_style = bA[3] end end t.property_store[bh].Family = c_family t.property_store[bh].Weight = c_weight t.property_store[bh].Style = c_style elseif am == "PathWaypoint" then t.property_store[bh].__kind = "PathWaypoint" t.property_store[bh].Position = G(bA[1]) and b_proxy_kind(bA[1]) == "Vector3" and bA[1] or Vector3.new(0, 0, 0) t.property_store[bh].Action = b_is_enum_item_value(bA[2]) and bA[2] or b_enum_item("Enum.PathWaypointAction.Walk") t.property_store[bh].Label = j(bA[3]) == "string" and bA[3] or "" elseif am == "ValueCurveKey" or am == "FloatCurveKey" or am == "RotationCurveKey" then t.property_store[bh].__kind = am t.property_store[bh].Time = A(bA[1]) t.property_store[bh].Value = bA[2] t.property_store[bh].Interpolation = b_is_enum_item_value(bA[3]) and bA[3] or b_enum_item("Enum.KeyInterpolationMode.Linear") elseif am == "Axes" or am == "Faces" or am == "CatalogSearchParams" or am == "SecurityCapabilities" then t.property_store[bh].__kind = am if am == "Axes" then t.property_store[bh].X = false t.property_store[bh].Y = false t.property_store[bh].Z = false for _, d9 in ipairs(bA) do local ea = tostring(d9) local ea_reg = G(d9) and t.registry[d9] or nil if j(ea_reg) == "string" and ea_reg ~= "" then ea = ea_reg end if G(d9) then local eb_store = t.property_store[d9] or {} if j(eb_store.Name) == "string" and eb_store.Name ~= "" then ea = eb_store.Name end end local ea_lower = j(ea) == "string" and string.lower(ea) or "" if j(d9) == "boolean" then if d9 then t.property_store[bh].X = true t.property_store[bh].Y = true t.property_store[bh].Z = true end elseif ea_lower:find("right", 1, true) or ea_lower:find("left", 1, true) then t.property_store[bh].X = true elseif ea_lower:find("top", 1, true) or ea_lower:find("bottom", 1, true) then t.property_store[bh].Y = true elseif ea_lower:find("front", 1, true) or ea_lower:find("back", 1, true) then t.property_store[bh].Z = true elseif ea_lower:find("x", 1, true) then t.property_store[bh].X = true elseif ea_lower:find("y", 1, true) then t.property_store[bh].Y = true elseif ea_lower:find("z", 1, true) then t.property_store[bh].Z = true end end if #bA > 0 and not t.property_store[bh].X and not t.property_store[bh].Y and not t.property_store[bh].Z then t.property_store[bh].X = true end elseif am == "Faces" then local d9 = {"Top", "Bottom", "Left", "Right", "Front", "Back"} for _, ea in ipairs(d9) do t.property_store[bh][ea] = false end for _, ea in ipairs(bA) do local eb = tostring(ea) if G(ea) then local ec_store = t.property_store[ea] or {} if j(ec_store.Name) == "string" and ec_store.Name ~= "" then eb = ec_store.Name end end for _, ec in ipairs(d9) do if eb:find(ec, 1, true) then t.property_store[bh][ec] = true end end end elseif am == "CatalogSearchParams" then t.property_store[bh].SearchKeyword = "" t.property_store[bh].CreatorName = "" t.property_store[bh].AssetTypes = {} t.property_store[bh].BundleTypes = {} t.property_store[bh].SortType = b_enum_item("Enum.CatalogSortType.Relevance") t.property_store[bh].SortAggregation = b_enum_item("Enum.CatalogSortType.Relevance") t.property_store[bh].CategoryFilter = b_enum_item("Enum.CatalogCategoryFilter.None") t.property_store[bh].SalesTypeFilter = b_enum_item("Enum.CatalogSalesTypeFilter.All") t.property_store[bh].IncludeOffSale = false elseif am == "SecurityCapabilities" then t.property_store[bh].__caps = {} for _, d9 in ipairs(bA) do if b_is_enum_item_value(d9) then t.property_store[bh].__caps[tostring((t.property_store[d9] or {}).Name or "")] = true end end end else t.property_store[bh].__kind = am end de.__tostring = function() local function b_udim_number_string(b_value) local b_num = tonumber(b_value) or 0 if b_num == 0 then b_num = 0 end local b_text = tostring(b_num) if b_text == "-0" or b_text == "-0.0" then return "0" end return b_text end if am == "UDim" then local d9 = (t.property_store[bh] or {}).Scale or 0 local ea = (t.property_store[bh] or {}).Offset or 0 return string.format("%s, %s", b_udim_number_string(d9), b_udim_number_string(ea)) end if am == "UDim2" then local d9 = (t.property_store[bh] or {}).X or UDim.new(0, 0) local ea = (t.property_store[bh] or {}).Y or UDim.new(0, 0) return string.format( "{%s, %s}, {%s, %s}", b_udim_number_string(d9.Scale), b_udim_number_string(d9.Offset), b_udim_number_string(ea.Scale), b_udim_number_string(ea.Offset) ) end if am == "Vector3" then local d9 = (t.property_store[bh] or {}).X or 0 local ea = (t.property_store[bh] or {}).Y or 0 local eb = (t.property_store[bh] or {}).Z or 0 return string.format("%s, %s, %s", b_udim_number_string(d9), b_udim_number_string(ea), b_udim_number_string(eb)) end if am == "Vector2" then local d9 = (t.property_store[bh] or {}).X or 0 local ea = (t.property_store[bh] or {}).Y or 0 return string.format("%s, %s", b_udim_number_string(d9), b_udim_number_string(ea)) end return d8 end de.__concat = function(ed, ee) local function ef(eg) if G(eg) or w(eg) then return tostring(eg) end return tostring(eg) end return ef(ed) .. ef(ee) end de.__index = function(W, bG) if bG == F or bG == "__proxy_id" then return rawget(bh, bG) end if am == "CatalogSearchParams" and (bG == "AssetTypes" or bG == "BundleTypes") then local d9 = b_copy((t.property_store[bh] or {})[bG] or {}) if table and table.freeze then pcall(table.freeze, d9) end return d9 end if (am == "NumberSequence" or am == "ColorSequence") and bG == "Keypoints" then local d9 = t.sequence_keypoints[bh] if d9 == nil then d9 = t.sequence_keypoints[t.registry[bh] or tostring(bh)] end return q._clone_sequence_keypoints(am, d9 or (t.property_store[bh] or {}).Keypoints or {}) end if t.property_store[bh] and t.property_store[bh][bG] ~= nil then return t.property_store[bh][bG] end if am == "Vector3" then local d9, ea, eb = b_vector_components(bh) if bG == "Abs" then return function() return Vector3.new(math.abs(d9), math.abs(ea), math.abs(eb)) end end if bG == "Ceil" then return function() return Vector3.new(math.ceil(d9), math.ceil(ea), math.ceil(eb)) end end if bG == "Floor" then return function() return Vector3.new(math.floor(d9), math.floor(ea), math.floor(eb)) end end if bG == "Sign" then return function() local function ec(ed) if ed > 0 then return 1 end if ed < 0 then return -1 end return 0 end return Vector3.new(ec(d9), ec(ea), ec(eb)) end end if bG == "Angle" then return function(_, ed) local ee, ef, eg = b_vector_components(ed) local eh = math.sqrt(d9 * d9 + ea * ea + eb * eb) local ei = math.sqrt(ee * ee + ef * ef + eg * eg) if eh <= 1e-9 or ei <= 1e-9 then return 0 end local ej = (d9 * ee + ea * ef + eb * eg) / (eh * ei) ej = math.max(-1, math.min(1, ej)) return math.acos(ej) end end if bG == "FuzzyEq" then return function(_, ed, ee) local ef, eg, eh = b_vector_components(ed) local ei = A(ee) if ei == 0 then ei = 1e-9 end return math.abs(d9 - ef) <= ei and math.abs(ea - eg) <= ei and math.abs(eb - eh) <= ei end end if bG == "Max" then return function(_, ed) local ee, ef, eg = b_vector_components(ed) return Vector3.new(math.max(d9, ee), math.max(ea, ef), math.max(eb, eg)) end end if bG == "Min" then return function(_, ed) local ee, ef, eg = b_vector_components(ed) return Vector3.new(math.min(d9, ee), math.min(ea, ef), math.min(eb, eg)) end end if bG == "Magnitude" then return math.sqrt(d9 * d9 + ea * ea + eb * eb) end if bG == "Unit" then local ec = math.sqrt(d9 * d9 + ea * ea + eb * eb) if ec < 1e-9 then local nan = 0 / 0 return Vector3.new(nan, nan, nan) end return Vector3.new(d9 / ec, ea / ec, eb / ec) end if bG == "Dot" then return function(_, ed) local ee, ef, eg = b_vector_components(ed) return d9 * ee + ea * ef + eb * eg end end if bG == "Cross" then return function(_, ed) local ee, ef, eg = b_vector_components(ed) return Vector3.new(ea * eg - eb * ef, eb * ee - d9 * eg, d9 * ef - ea * ee) end end if bG == "Lerp" then return function(_, ed, eh) local ee, ef, eg = b_vector_components(ed) local ei = A(eh) return Vector3.new(d9 + (ee - d9) * ei, ea + (ef - ea) * ei, eb + (eg - eb) * ei) end end elseif am == "Vector2" then local d9 = A((t.property_store[bh] or {}).X) local ea = A((t.property_store[bh] or {}).Y) if bG == "Abs" then return function() return Vector2.new(math.abs(d9), math.abs(ea)) end end if bG == "Ceil" then return function() return Vector2.new(math.ceil(d9), math.ceil(ea)) end end if bG == "Floor" then return function() return Vector2.new(math.floor(d9), math.floor(ea)) end end if bG == "Sign" then return function() local function eb(ec) if ec > 0 then return 1 end if ec < 0 then return -1 end return 0 end return Vector2.new(eb(d9), eb(ea)) end end if bG == "Angle" then return function(_, ec) local ed = A((t.property_store[ec] or {}).X) local ee = A((t.property_store[ec] or {}).Y) local ef = math.sqrt(d9 * d9 + ea * ea) local eg = math.sqrt(ed * ed + ee * ee) if ef <= 1e-9 or eg <= 1e-9 then return 0 end local eh = (d9 * ed + ea * ee) / (ef * eg) eh = math.max(-1, math.min(1, eh)) return math.acos(eh) end end if bG == "FuzzyEq" then return function(_, ec, ed) local ee = A((t.property_store[ec] or {}).X) local ef = A((t.property_store[ec] or {}).Y) local eg = A(ed) if eg == 0 then eg = 1e-9 end return math.abs(d9 - ee) <= eg and math.abs(ea - ef) <= eg end end if bG == "Max" then return function(_, ec) local ed = A((t.property_store[ec] or {}).X) local ee = A((t.property_store[ec] or {}).Y) return Vector2.new(math.max(d9, ed), math.max(ea, ee)) end end if bG == "Min" then return function(_, ec) local ed = A((t.property_store[ec] or {}).X) local ee = A((t.property_store[ec] or {}).Y) return Vector2.new(math.min(d9, ed), math.min(ea, ee)) end end if bG == "Magnitude" then return math.sqrt(d9 * d9 + ea * ea) end if bG == "Unit" then local eb = math.sqrt(d9 * d9 + ea * ea) if eb < 1e-9 then return Vector2.new(0, 0) end return Vector2.new(d9 / eb, ea / eb) end if bG == "Dot" then return function(_, ec) local ed = A((t.property_store[ec] or {}).X) local ee = A((t.property_store[ec] or {}).Y) return d9 * ed + ea * ee end end if bG == "Cross" then return function(_, ec) local ed = A((t.property_store[ec] or {}).X) local ee = A((t.property_store[ec] or {}).Y) return d9 * ee - ea * ed end end if bG == "Lerp" then return function(_, ec, ed) local ee = A((t.property_store[ec] or {}).X) local ef = A((t.property_store[ec] or {}).Y) local eg = A(ed) return Vector2.new(d9 + (ee - d9) * eg, ea + (ef - ea) * eg) end end elseif am == "CFrame" then local d9, ea, eb, ec, ed, ee, ef, eg, eh, ei, ej, ek = b_cframe_components(bh) if bG == "Position" then return Vector3.new(d9, ea, eb) end if bG == "LookVector" then return Vector3.new(-ee, -eh, -ek) end if bG == "RightVector" then return Vector3.new(ec, ef, ei) end if bG == "XVector" then return Vector3.new(ec, ef, ei) end if bG == "UpVector" then return Vector3.new(ed, eg, ej) end if bG == "YVector" then return Vector3.new(ed, eg, ej) end if bG == "ZVector" then return Vector3.new(ee, eh, ek) end if bG == "GetComponents" or bG == "components" then return function() return d9, ea, eb, ec, ed, ee, ef, eg, eh, ei, ej, ek end end if bG == "ToEulerAnglesXYZ" then return function() return q._cframe_to_euler_xyz(bh) end end if bG == "ToEulerAngles" then return function(_, el) local em = tostring(el or "Enum.RotationOrder.XYZ") if em:match("YXZ$") then return q._cframe_to_euler_yxz(bh) end return q._cframe_to_euler_xyz(bh) end end if bG == "ToEulerAnglesYXZ" or bG == "ToOrientation" then return function() return q._cframe_to_euler_yxz(bh) end end if bG == "ToAxisAngle" then return function() return q._cframe_to_axis_angle(bh) end end if bG == "FuzzyEq" then return function(_, el, em) local en, eo, ep, eq, er, es, et, eu, ev, ew, ex, ey = b_cframe_components(el) local ez = A(em) if ez == 0 then ez = 1e-9 end return math.abs(d9 - en) <= ez and math.abs(ea - eo) <= ez and math.abs(eb - ep) <= ez and math.abs(ec - eq) <= ez and math.abs(ed - er) <= ez and math.abs(ee - es) <= ez and math.abs(ef - et) <= ez and math.abs(eg - eu) <= ez and math.abs(eh - ev) <= ez and math.abs(ei - ew) <= ez and math.abs(ej - ex) <= ez and math.abs(ek - ey) <= ez end end if bG == "AngleBetween" then return function(_, el) local _, _, _, en, eo, ep, eq, er, es, et, eu, ev = b_cframe_components(el) local ew = ec * en + ef * eo + ei * ep local ex = ec * eq + ef * er + ei * es local ey = ec * et + ef * eu + ei * ev local ez = ed * en + eg * eo + ej * ep local eA = ed * eq + eg * er + ej * es local eB = ed * et + eg * eu + ej * ev local eC = ee * en + eh * eo + ek * ep local eD = ee * eq + eh * er + ek * es local eE = ee * et + eh * eu + ek * ev local eF = ew + eA + eE return math.acos(math.max(-1, math.min(1, (eF - 1) / 2))) end end if bG == "ToWorldSpace" then return function(_, el) local em, en, eo = b_cframe_components(el) local ep, eq, er = b_cframe_apply(bh, em, en, eo) return CFrame.new(ep, eq, er) end end if bG == "ToObjectSpace" then return function(_, el) local em, en, eo = b_cframe_components(el) local ep, eq, er = b_cframe_unapply(bh, em, en, eo) return CFrame.new(ep, eq, er) end end if bG == "Lerp" then return function(_, el, em) local en, eo, ep = b_cframe_components(el) local eq = A(em) return CFrame.new(d9 + (en - d9) * eq, ea + (eo - ea) * eq, eb + (ep - eb) * eq) end end if bG == "Orthonormalize" then return function() return CFrame.new(d9, ea, eb) end end if bG == "Inverse" then return function() -- Proper inverse: R^T and -R^T * p local inv = CFrame.new(0, 0, 0) local inv_store = t.property_store[inv] or {} -- Transpose rotation inv_store.R00, inv_store.R01, inv_store.R02 = ec, ef, ei inv_store.R10, inv_store.R11, inv_store.R12 = ed, eg, ej inv_store.R20, inv_store.R21, inv_store.R22 = ee, eh, ek -- Position = -R^T * p local px, py, pz = d9, ea, eb inv_store.X = -(inv_store.R00 * px + inv_store.R01 * py + inv_store.R02 * pz) inv_store.Y = -(inv_store.R10 * px + inv_store.R11 * py + inv_store.R12 * pz) inv_store.Z = -(inv_store.R20 * px + inv_store.R21 * py + inv_store.R22 * pz) t.property_store[inv] = inv_store return inv end end if bG == "VectorToWorldSpace" then return function(_, el) local em, en, eo = b_vector_components(el) return Vector3.new( ec * em + ed * en + ee * eo, ef * em + eg * en + eh * eo, ei * em + ej * en + ek * eo ) end end if bG == "PointToWorldSpace" then return function(_, el) local em, en, eo = b_vector_components(el) local ep, eq, er = b_cframe_apply(bh, em, en, eo) return Vector3.new(ep, eq, er) end end if bG == "PointToObjectSpace" then return function(_, el) local em, en, eo = b_vector_components(el) local ep, eq, er = b_cframe_unapply(bh, em, en, eo) return Vector3.new(ep, eq, er) end end if bG == "VectorToObjectSpace" then return function(_, el) local em, en, eo = b_vector_components(el) return Vector3.new( ec * em + ef * en + ei * eo, ed * em + eg * en + ej * eo, ee * em + eh * en + ek * eo ) end end elseif am == "Color3" then local d9, ea, eb = b_color3_components(bh) if bG == "Lerp" then return function(_, ec, ed) local ee, ef, eg = b_color3_components(ec) local eh = A(ed) return Color3.new(d9 + (ee - d9) * eh, ea + (ef - ea) * eh, eb + (eg - eb) * eh) end end if bG == "ToHSV" then return function() local ec = math.max(d9, ea, eb) local ed = math.min(d9, ea, eb) local ee = ec - ed local ef = ec == 0 and 0 or (ee / ec) local eg = 0 if ee ~= 0 then if ec == d9 then eg = ((ea - eb) / ee) % 6 elseif ec == ea then eg = ((eb - d9) / ee) + 2 else eg = ((d9 - ea) / ee) + 4 end eg = eg / 6 end return eg, ef, ec end end if bG == "ToHex" then return function() return string.lower(string.format("%02X%02X%02X", math.floor(d9 * 255 + 0.5), math.floor(ea * 255 + 0.5), math.floor(eb * 255 + 0.5))) end end elseif am == "Ray" then if bG == "ClosestPoint" then return function(_, ec) local ed, ee, ef = b_vector_components((t.property_store[bh] or {}).Origin or Vector3.new(0, 0, 0)) local eg, eh, ei = b_vector_components((t.property_store[bh] or {}).Direction or Vector3.new(0, 0, 0)) local ej, ek, el = b_vector_components(ec) local em = (eg * eg) + (eh * eh) + (ei * ei) if em <= 1e-9 then return Vector3.new(ed, ee, ef) end local en = ((ej - ed) * eg + (ek - ee) * eh + (el - ef) * ei) / em if en < 0 then en = 0 end return Vector3.new(ed + (eg * en), ee + (eh * en), ef + (ei * en)) end end elseif am == "Region3" then if bG == "ExpandToGrid" then return function(_, ec) local ed = tonumber(ec) or 1 if ed <= 0 then ed = 1 end local ee, ef, eg = b_vector_components((t.property_store[bh] or {}).Min or Vector3.new(0, 0, 0)) local eh, ei, ej = b_vector_components((t.property_store[bh] or {}).Max or Vector3.new(0, 0, 0)) local function ek(el, em) return math.floor(el / em) * em end local function en(el, em) return math.ceil(el / em) * em end return Region3.new( Vector3.new(ek(ee, ed), ek(ef, ed), ek(eg, ed)), Vector3.new(en(eh, ed), en(ei, ed), en(ej, ed)) ) end end if bG == "CFrame" then local d9, ea, eb = b_vector_components((t.property_store[bh] or {}).Min or Vector3.new(0, 0, 0)) local ec, ed, ee = b_vector_components((t.property_store[bh] or {}).Max or Vector3.new(0, 0, 0)) return CFrame.new((d9 + ec) / 2, (ea + ed) / 2, (eb + ee) / 2) end if bG == "Size" then local d9, ea, eb = b_vector_components((t.property_store[bh] or {}).Min or Vector3.new(0, 0, 0)) local ec, ed, ee = b_vector_components((t.property_store[bh] or {}).Max or Vector3.new(0, 0, 0)) return Vector3.new(math.abs(ec - d9), math.abs(ed - ea), math.abs(ee - eb)) end elseif am == "DateTime" then if bG == "ToIsoDate" then return function() local d9 = tonumber((t.property_store[bh] or {}).UnixTimestampMillis) or 1713916800000 local ea = os.date("!*t", math.floor(d9 / 1000)) return string.format("%04d-%02d-%02d", ea.year, ea.month, ea.day) end end if bG == "ToLocalTime" then return function() local d9 = tonumber((t.property_store[bh] or {}).UnixTimestampMillis) or 1713916800000 local ea = os.date("*t", math.floor(d9 / 1000)) return {Year = ea.year, Month = ea.month, Day = ea.day, Hour = ea.hour, Minute = ea.min, Second = ea.sec} end end if bG == "ToUniversalTime" then return function() local d9 = tonumber((t.property_store[bh] or {}).UnixTimestampMillis) or 1713916800000 local ea = os.date("!*t", math.floor(d9 / 1000)) return {Year = ea.year, Month = ea.month, Day = ea.day, Hour = ea.hour, Minute = ea.min, Second = ea.sec} end end if bG == "Year" then local d9 = tonumber((t.property_store[bh] or {}).UnixTimestampMillis) or 1713916800000 return os.date("!*t", math.floor(d9 / 1000)).year end if bG == "Month" then local d9 = tonumber((t.property_store[bh] or {}).UnixTimestampMillis) or 1713916800000 return os.date("!*t", math.floor(d9 / 1000)).month end if bG == "Day" then local d9 = tonumber((t.property_store[bh] or {}).UnixTimestampMillis) or 1713916800000 return os.date("!*t", math.floor(d9 / 1000)).day end if bG == "UnixTimestamp" then local d9 = tonumber((t.property_store[bh] or {}).UnixTimestampMillis) or 1713916800000 return math.floor(d9 / 1000) end if bG == "UnixTimestampMillis" then return tonumber((t.property_store[bh] or {}).UnixTimestampMillis) or 1713916800000 end if bG == "FormatUniversalTime" then return function(self, formatString, locale) local d9 = tonumber((t.property_store[bh] or {}).UnixTimestampMillis) or 1713916800000 local ea = os.date("!*t", math.floor(d9 / 1000)) local eb = tostring(formatString or "YYYY-MM-DD") eb = eb:gsub("YYYY", string.format("%04d", ea.year)) eb = eb:gsub("MM", string.format("%02d", ea.month)) eb = eb:gsub("DD", string.format("%02d", ea.day)) eb = eb:gsub("HH", string.format("%02d", ea.hour)) eb = eb:gsub("mm", string.format("%02d", ea.min)) eb = eb:gsub("ss", string.format("%02d", ea.sec)) return eb end end if bG == "FormatLocalTime" then return function(self, formatString, locale) local d9 = tonumber((t.property_store[bh] or {}).UnixTimestampMillis) or 1713916800000 local ea = os.date("*t", math.floor(d9 / 1000)) local eb = tostring(formatString or "YYYY-MM-DD") eb = eb:gsub("YYYY", string.format("%04d", ea.year)) eb = eb:gsub("MM", string.format("%02d", ea.month)) eb = eb:gsub("DD", string.format("%02d", ea.day)) eb = eb:gsub("HH", string.format("%02d", ea.hour)) eb = eb:gsub("mm", string.format("%02d", ea.min)) eb = eb:gsub("ss", string.format("%02d", ea.sec)) return eb end end elseif am == "NumberSequence" or am == "ColorSequence" then if bG == "Keypoints" then return q._clone_sequence_keypoints(am, t.sequence_keypoints[bh] or (t.property_store[bh] or {}).Keypoints or {}) end elseif am == "NumberSequenceKeypoint" or am == "ColorSequenceKeypoint" then if bG == "Time" then return (t.property_store[bh] or {}).Time or 0 end if bG == "Value" then return (t.property_store[bh] or {}).Value end if am == "NumberSequenceKeypoint" and bG == "Envelope" then return (t.property_store[bh] or {}).Envelope or 0 end elseif am == "TweenInfo" then if bG == "EasingStyle" then return b_enum_item("Enum.EasingStyle.Quad") end if bG == "EasingDirection" then return b_enum_item("Enum.EasingDirection.Out") end if bG == "RepeatCount" then return 0 end if bG == "Reverses" then return false end if bG == "DelayTime" then return 0 end elseif am == "UDim2" then if bG == "Lerp" then return function(_, ec, ed) local ee = (t.property_store[bh] or {}).X or UDim.new(0, 0) local ef = (t.property_store[bh] or {}).Y or UDim.new(0, 0) local eg = (t.property_store[ec] or {}).X or UDim.new(0, 0) local eh = (t.property_store[ec] or {}).Y or UDim.new(0, 0) local ei = A(ed) if ei == 0 then return bh end if ei == 1 then return ec end return UDim2.new( UDim.new(ee.Scale + (eg.Scale - ee.Scale) * ei, ee.Offset + (eg.Offset - ee.Offset) * ei), UDim.new(ef.Scale + (eh.Scale - ef.Scale) * ei, ef.Offset + (eh.Offset - ef.Offset) * ei) ) end end if bG == "Width" then return (t.property_store[bh] or {}).X or UDim.new(0, 0) end if bG == "Height" then return (t.property_store[bh] or {}).Y or UDim.new(0, 0) end elseif am == "Rect" then if bG == "Width" then local d9 = A((t.property_store[(t.property_store[bh] or {}).Max] or {}).X) - A((t.property_store[(t.property_store[bh] or {}).Min] or {}).X) return math.abs(d9) end if bG == "Height" then local d9 = A((t.property_store[(t.property_store[bh] or {}).Max] or {}).Y) - A((t.property_store[(t.property_store[bh] or {}).Min] or {}).Y) return math.abs(d9) end elseif am == "CatalogSearchParams" then if bG == "SearchKeyword" then return "" end if bG == "CreatorName" then return (t.property_store[bh] or {}).CreatorName or "" end if bG == "AssetTypes" then local d9 = b_copy((t.property_store[bh] or {}).AssetTypes or {}) if table and table.freeze then pcall(table.freeze, d9) end return d9 end if bG == "BundleTypes" then local d9 = b_copy((t.property_store[bh] or {}).BundleTypes or {}) if table and table.freeze then pcall(table.freeze, d9) end return d9 end if bG == "CategoryFilter" then return (t.property_store[bh] or {}).CategoryFilter or b_enum_item("Enum.CatalogCategoryFilter.None") end if bG == "SalesTypeFilter" then return (t.property_store[bh] or {}).SalesTypeFilter or b_enum_item("Enum.CatalogSalesTypeFilter.All") end if bG == "IncludeOffSale" then return (t.property_store[bh] or {}).IncludeOffSale == true end if bG == "SortType" then return b_enum_item("Enum.CatalogSortType.Relevance") end if bG == "SortAggregation" then return b_enum_item("Enum.CatalogSortType.Relevance") end elseif am == "PathWaypoint" then if bG == "Action" then return b_enum_item("Enum.PathWaypointAction.Walk") end if bG == "Label" then return (t.property_store[bh] or {}).Label or "" end elseif am == "Font" then if bG == "Weight" then return (t.property_store[bh] or {}).Weight or b_enum_item("Enum.FontWeight.Regular") end if bG == "Style" then return (t.property_store[bh] or {}).Style or b_enum_item("Enum.FontStyle.Normal") end elseif am == "Faces" then local b_faces = t.property_store[bh] or {} if bG == "Top" or bG == "Bottom" or bG == "Left" or bG == "Right" or bG == "Front" or bG == "Back" then return b_faces[bG] == true end if bG == "X" or bG == "Y" or bG == "Z" then return false end elseif am == "Axes" then local b_axes = t.property_store[bh] or {} if bG == "X" or bG == "Y" or bG == "Z" then return b_axes[bG] == true end if bG == "Top" or bG == "Bottom" or bG == "Left" or bG == "Right" or bG == "Front" or bG == "Back" then return false end elseif am == "ValueCurveKey" or am == "FloatCurveKey" or am == "RotationCurveKey" then if bG == "Time" then return A((t.property_store[bh] or {}).Time) end if bG == "Value" then return (t.property_store[bh] or {}).Value end if bG == "Interpolation" then return (t.property_store[bh] or {}).Interpolation or b_enum_item("Enum.KeyInterpolationMode.Linear") end elseif am == "SecurityCapabilities" then if bG == "Add" then return function(_, b_cap) local b_new = SecurityCapabilities.new() local b_caps = {} for b_name, b_has in pairs((t.property_store[bh] or {}).__caps or {}) do b_caps[b_name] = b_has end if b_is_enum_item_value(b_cap) then b_caps[tostring((t.property_store[b_cap] or {}).Name or "")] = true end t.property_store[b_new].__caps = b_caps return b_new end end if bG == "Contains" then return function(_, b_cap) if not b_is_enum_item_value(b_cap) then return false end local b_name = tostring((t.property_store[b_cap] or {}).Name or "") return ((t.property_store[bh] or {}).__caps or {})[b_name] == true end end if bG == "Remove" then return function(_, b_cap) local b_new = SecurityCapabilities.new() local b_caps = {} for b_name, b_has in pairs((t.property_store[bh] or {}).__caps or {}) do b_caps[b_name] = b_has end if b_is_enum_item_value(b_cap) then b_caps[tostring((t.property_store[b_cap] or {}).Name or "")] = nil end t.property_store[b_new].__caps = b_caps return b_new end end end if bG == "X" or bG == "Y" or bG == "Z" or bG == "W" then return 0 end if bG == "Magnitude" then return 0 end if bG == "Unit" then return bh end if bG == "Position" then return bh end if bG == "CFrame" then return bh end if bG == "LookVector" or bG == "RightVector" or bG == "UpVector" then return bh end if bG == "Rotation" then return bh end if bG == "R" or bG == "G" or bG == "B" then return 1 end if bG == "Width" or bG == "Height" then return UDim.new(0, 0) end if bG == "Min" or bG == "Max" then return 0 end if bG == "Scale" or bG == "Offset" then return 0 end if bG == "p" then return bh end return 0 end de.__newindex = function(W, bG, bH) if am == "RaycastParams" or am == "OverlapParams" or am == "CatalogSearchParams" then t.property_store[bh] = t.property_store[bh] or {} t.property_store[bh][bG] = bH return end error("attempt to modify readonly value", 0) end local function df(Z) return function(bo, aa) if am == "Vector3" then local d9, ea, eb = b_vector_components(bo) local ec, ed, ee = b_vector_components(aa) if Z == "+" then return Vector3.new(d9 + ec, ea + ed, eb + ee) elseif Z == "-" then return Vector3.new(d9 - ec, ea - ed, eb - ee) elseif Z == "*" and G(aa) and b_proxy_kind(aa) == "Vector3" then return Vector3.new(d9 * ec, ea * ed, eb * ee) elseif Z == "*" and j(aa) == "number" then return Vector3.new(d9 * aa, ea * aa, eb * aa) elseif Z == "/" and G(aa) and b_proxy_kind(aa) == "Vector3" then return Vector3.new(ec ~= 0 and d9 / ec or 0, ed ~= 0 and ea / ed or 0, ee ~= 0 and eb / ee or 0) elseif Z == "/" and j(aa) == "number" and aa ~= 0 then return Vector3.new(d9 / aa, ea / aa, eb / aa) end elseif am == "CFrame" then local d9, ea, eb, ec, ed, ee, ef, eg, eh, ei, ej, ek = b_cframe_components(bo) if Z == "+" and G(aa) and b_proxy_kind(aa) == "Vector3" then local el, em, en = b_vector_components(aa) local eo = CFrame.new(d9 + el, ea + em, eb + en) t.property_store[eo].R00 = ec t.property_store[eo].R01 = ed t.property_store[eo].R02 = ee t.property_store[eo].R10 = ef t.property_store[eo].R11 = eg t.property_store[eo].R12 = eh t.property_store[eo].R20 = ei t.property_store[eo].R21 = ej t.property_store[eo].R22 = ek return eo elseif Z == "-" and G(aa) and b_proxy_kind(aa) == "Vector3" then local el, em, en = b_vector_components(aa) local eo = CFrame.new(d9 - el, ea - em, eb - en) t.property_store[eo].R00 = ec t.property_store[eo].R01 = ed t.property_store[eo].R02 = ee t.property_store[eo].R10 = ef t.property_store[eo].R11 = eg t.property_store[eo].R12 = eh t.property_store[eo].R20 = ei t.property_store[eo].R21 = ej t.property_store[eo].R22 = ek return eo elseif Z == "*" and G(aa) and b_proxy_kind(aa) == "Vector3" then local el, em, en = b_vector_components(aa) local eo, ep, eq = b_cframe_apply(bo, el, em, en) return Vector3.new(eo, ep, eq) elseif Z == "*" and G(aa) and b_proxy_kind(aa) == "CFrame" then local el, em, en, eo, ep, eq, er, es, et, eu, ev, ew = b_cframe_components(aa) local ex, ey, ez = b_cframe_apply(bo, el, em, en) local eA = CFrame.new(ex, ey, ez) t.property_store[eA].R00 = ec * eo + ed * er + ee * eu t.property_store[eA].R01 = ec * ep + ed * es + ee * ev t.property_store[eA].R02 = ec * eq + ed * et + ee * ew t.property_store[eA].R10 = ef * eo + eg * er + eh * eu t.property_store[eA].R11 = ef * ep + eg * es + eh * ev t.property_store[eA].R12 = ef * eq + eg * et + eh * ew t.property_store[eA].R20 = ei * eo + ej * er + ek * eu t.property_store[eA].R21 = ei * ep + ej * es + ek * ev t.property_store[eA].R22 = ei * eq + ej * et + ek * ew return eA end elseif am == "Vector2" then local d9 = A((t.property_store[bo] or {}).X) local ea = A((t.property_store[bo] or {}).Y) local eb = A((t.property_store[aa] or {}).X) local ec = A((t.property_store[aa] or {}).Y) if Z == "+" and G(aa) and b_proxy_kind(aa) == "Vector2" then return Vector2.new(d9 + eb, ea + ec) elseif Z == "-" and G(aa) and b_proxy_kind(aa) == "Vector2" then return Vector2.new(d9 - eb, ea - ec) elseif Z == "*" and G(aa) and b_proxy_kind(aa) == "Vector2" then return Vector2.new(d9 * eb, ea * ec) elseif Z == "*" and j(aa) == "number" then return Vector2.new(d9 * aa, ea * aa) elseif Z == "/" and G(aa) and b_proxy_kind(aa) == "Vector2" then return Vector2.new(eb ~= 0 and d9 / eb or 0, ec ~= 0 and ea / ec or 0) elseif Z == "/" and j(aa) == "number" and aa ~= 0 then return Vector2.new(d9 / aa, ea / aa) end elseif am == "Vector3int16" then local d9 = A((t.property_store[bo] or {}).X) local ea = A((t.property_store[bo] or {}).Y) local eb = A((t.property_store[bo] or {}).Z) local ec = A((t.property_store[aa] or {}).X) local ed = A((t.property_store[aa] or {}).Y) local ee = A((t.property_store[aa] or {}).Z) if Z == "+" and G(aa) and b_proxy_kind(aa) == "Vector3int16" then return Vector3int16.new(d9 + ec, ea + ed, eb + ee) elseif Z == "-" and G(aa) and b_proxy_kind(aa) == "Vector3int16" then return Vector3int16.new(d9 - ec, ea - ed, eb - ee) elseif Z == "*" and G(aa) and b_proxy_kind(aa) == "Vector3int16" then return Vector3int16.new(d9 * ec, ea * ed, eb * ee) elseif Z == "*" and j(aa) == "number" then return Vector3int16.new(d9 * aa, ea * aa, eb * aa) elseif Z == "/" and j(aa) == "number" and aa ~= 0 then return Vector3int16.new(d9 / aa, ea / aa, eb / aa) elseif Z == "/" and G(aa) and b_proxy_kind(aa) == "Vector3int16" then return Vector3int16.new(ec ~= 0 and d9 / ec or 0, ed ~= 0 and ea / ed or 0, ee ~= 0 and eb / ee or 0) end elseif am == "Vector2int16" then local d9 = A((t.property_store[bo] or {}).X) local ea = A((t.property_store[bo] or {}).Y) local eb = A((t.property_store[aa] or {}).X) local ec = A((t.property_store[aa] or {}).Y) if Z == "+" and G(aa) and b_proxy_kind(aa) == "Vector2int16" then return Vector2int16.new(d9 + eb, ea + ec) elseif Z == "-" and G(aa) and b_proxy_kind(aa) == "Vector2int16" then return Vector2int16.new(d9 - eb, ea - ec) elseif Z == "*" and G(aa) and b_proxy_kind(aa) == "Vector2int16" then return Vector2int16.new(d9 * eb, ea * ec) elseif Z == "*" and j(aa) == "number" then return Vector2int16.new(d9 * aa, ea * aa) elseif Z == "/" and j(aa) == "number" and aa ~= 0 then return Vector2int16.new(d9 / aa, ea / aa) elseif Z == "/" and G(aa) and b_proxy_kind(aa) == "Vector2int16" then return Vector2int16.new(eb ~= 0 and d9 / eb or 0, ec ~= 0 and ea / ec or 0) end elseif am == "UDim" then local d9 = A((t.property_store[bo] or {}).Scale) local ea = A((t.property_store[bo] or {}).Offset) local eb = A((t.property_store[aa] or {}).Scale) local ec = A((t.property_store[aa] or {}).Offset) if Z == "+" and G(aa) and b_proxy_kind(aa) == "UDim" then return UDim.new(d9 + eb, ea + ec) elseif Z == "-" and G(aa) and b_proxy_kind(aa) == "UDim" then return UDim.new(d9 - eb, ea - ec) end elseif am == "UDim2" then local d9 = (t.property_store[bo] or {}).X or UDim.new(0, 0) local ea = (t.property_store[bo] or {}).Y or UDim.new(0, 0) local eb = (t.property_store[aa] or {}).X or UDim.new(0, 0) local ec = (t.property_store[aa] or {}).Y or UDim.new(0, 0) if Z == "+" and G(aa) and b_proxy_kind(aa) == "UDim2" then return UDim2.new(d9.Scale + eb.Scale, d9.Offset + eb.Offset, ea.Scale + ec.Scale, ea.Offset + ec.Offset) elseif Z == "-" and G(aa) and b_proxy_kind(aa) == "UDim2" then return UDim2.new(d9.Scale - eb.Scale, d9.Offset - eb.Offset, ea.Scale - ec.Scale, ea.Offset - ec.Offset) end end local dg, dh = bg() local O = "(" .. (t.registry[bo] or aZ(bo)) .. " " .. Z .. " " .. (t.registry[aa] or aZ(aa)) .. ")" t.registry[dg] = O t.property_store[dg] = {} dh.__tostring = function() return O end dh.__index = de.__index dh.__add = df("+") dh.__sub = df("-") dh.__mul = df("*") dh.__div = df("/") return dg end end de.__add = df("+") de.__sub = df("-") de.__mul = df("*") de.__div = df("/") de.__unm = function(bo) local b_kind = b_proxy_kind(bo) if b_kind == "Vector3" then local d9, ea, eb = b_vector_components(bo) return Vector3.new(-d9, -ea, -eb) end if b_kind == "Vector2" then local d9 = A((t.property_store[bo] or {}).X) local ea = A((t.property_store[bo] or {}).Y) return Vector2.new(-d9, -ea) end if b_kind == "Vector3int16" then local d9 = A((t.property_store[bo] or {}).X) local ea = A((t.property_store[bo] or {}).Y) local eb = A((t.property_store[bo] or {}).Z) return Vector3int16.new(-d9, -ea, -eb) end if b_kind == "Vector2int16" then local d9 = A((t.property_store[bo] or {}).X) local ea = A((t.property_store[bo] or {}).Y) return Vector2int16.new(-d9, -ea) end local dg, dh = bg() t.registry[dg] = "(-" .. (t.registry[bo] or aZ(bo)) .. ")" dh.__tostring = function() return t.registry[dg] end return dg end de.__eq = b_value_proxy_eq return bh end end return nil end dd.__call = function(b2, ...) return b2.new(...) end return setmetatable(dc, dd) end Vector3 = da("Vector3", {new = true, zero = true, one = true, fromNormalId = true}) Vector2 = da("Vector2", {new = true, zero = true, one = true}) UDim = da("UDim", {new = true}) UDim2 = da("UDim2", {new = true, fromScale = true, fromOffset = true}) CFrame = da( "CFrame", { new = true, Angles = true, lookAlong = true, lookAt = true, fromRotationBetweenVectors = true, fromEulerAngles = true, fromEulerAnglesXYZ = true, fromEulerAnglesYXZ = true, fromAxisAngle = true, fromMatrix = true, fromOrientation = true, identity = true } ) Color3 = da("Color3", {new = true, fromRGB = true, fromHSV = true, fromHex = true}) BrickColor = da( "BrickColor", { new = true, random = true, White = true, Black = true, Red = true, Blue = true, Green = true, Gray = true, DarkGray = true, Yellow = true, palette = true } ) TweenInfo = da("TweenInfo", {new = true}) Rect = da("Rect", {new = true}) Region3 = da("Region3", {new = true}) Region3int16 = da("Region3int16", {new = true}) Ray = da("Ray", {new = true}) NumberRange = da("NumberRange", {new = true}) NumberSequence = da("NumberSequence", {new = true}) NumberSequenceKeypoint = da("NumberSequenceKeypoint", {new = true}) ColorSequence = da("ColorSequence", {new = true}) ColorSequenceKeypoint = da("ColorSequenceKeypoint", {new = true}) PhysicalProperties = da("PhysicalProperties", {new = true}) Font = da("Font", {new = true, fromEnum = true, fromName = true, fromId = true}) RaycastParams = da("RaycastParams", {new = true}) OverlapParams = da("OverlapParams", {new = true}) PathWaypoint = da("PathWaypoint", {new = true}) Axes = da("Axes", {new = true}) Faces = da("Faces", {new = true}) Vector3int16 = da("Vector3int16", {new = true}) Vector2int16 = da("Vector2int16", {new = true}) CatalogSearchParams = da("CatalogSearchParams", {new = true}) DateTime = da("DateTime", {now = true, fromUnixTimestamp = true, fromUnixTimestampMillis = true, fromIsoDate = true}) ValueCurveKey = da("ValueCurveKey", {new = true}) FloatCurveKey = da("FloatCurveKey", {new = true}) RotationCurveKey = da("RotationCurveKey", {new = true}) SecurityCapabilities = da("SecurityCapabilities", {new = true, fromCurrent = true}) rawset(Vector3, "zero", Vector3.new(0, 0, 0)) rawset(Vector3, "one", Vector3.new(1, 1, 1)) rawset(Vector3, "xAxis", Vector3.new(1, 0, 0)) rawset(Vector3, "yAxis", Vector3.new(0, 1, 0)) rawset(Vector3, "zAxis", Vector3.new(0, 0, 1)) rawset(Vector2, "zero", Vector2.new(0, 0)) rawset(Vector2, "one", Vector2.new(1, 1)) rawset(Vector2, "xAxis", Vector2.new(1, 0)) rawset(Vector2, "yAxis", Vector2.new(0, 1)) rawset(CFrame, "identity", CFrame.new(0, 0, 0)) rawset(Vector3, "FromNormalId", Vector3.fromNormalId) rawset( Vector3, "FromAxis", function(b_axis) local b_name = q._engine_string_key(b_axis) if b_name:match("X$") then return Vector3.new(1, 0, 0) end if b_name:match("Y$") then return Vector3.new(0, 1, 0) end if b_name:match("Z$") then return Vector3.new(0, 0, 1) end return Vector3.new(0, 0, 0) end ) q._random_mul_limbs = {0x7F2D, 0x4C95, 0xF42D, 0x5851} q._random_advance_state = function(b_state) local b_out = {105, 0, 0, 0} for b_i = 1, 4 do for b_j = 1, 5 - b_i do b_out[b_i + b_j - 1] = b_out[b_i + b_j - 1] + (b_state[b_i] * q._random_mul_limbs[b_j]) end end for b_k = 1, 4 do local b_value = b_out[b_k] local b_carry = math.floor(b_value / 65536) b_out[b_k] = b_value - (b_carry * 65536) if b_k < 4 then b_out[b_k + 1] = b_out[b_k + 1] + b_carry end end return b_out end q._random_next32 = function(b_random) local b_old = b_random._state local b_old_lo = b_old[1] + (b_old[2] * 65536) local b_old_hi = b_old[3] + (b_old[4] * 65536) b_random._state = q._random_advance_state(b_old) local b_shr18_hi = bit32.rshift(b_old_hi, 18) local b_shr18_lo = bit32.bor(bit32.rshift(b_old_lo, 18), bit32.lshift(b_old_hi, 14)) local b_xor_hi = bit32.bxor(b_shr18_hi, b_old_hi) local b_xor_lo = bit32.bxor(b_shr18_lo, b_old_lo) local b_xorshifted = bit32.bor(bit32.rshift(b_xor_lo, 27), bit32.lshift(b_xor_hi, 5)) local b_rot = bit32.band(bit32.rshift(b_old_hi, 27), 31) local b_value = bit32.rrotate(b_xorshifted, b_rot) if b_value < 0 then b_value = b_value + 4294967296 end return b_value end q._random_seed_state = function(b_seed_number) local b_value = math.floor(n(b_seed_number) or (123456 + (t.fake_clock or 0) * 1000)) if b_value < 0 then b_value = 0 end local b_state = {0, 0, 0, 0} b_state = q._random_advance_state(b_state) local b_seed = b_value for b_index = 1, 4 do local b_part = b_seed % 65536 b_state[b_index] = (b_state[b_index] + b_part) % 65536 b_seed = math.floor(b_seed / 65536) end return q._random_advance_state(b_state) end Random = {new = function(di) local x = {} if di ~= nil and j(di) ~= "number" then error("bad argument #1 to 'Random.new' (number expected, got " .. j(di) .. ")", 0) end x._seed = math.floor((di ~= nil and di) or (123456 + (t.fake_clock or 0) * 1000)) x._state = q._random_seed_state(x._seed) function x:NextNumber(dj, dk) local em = n(dj) local ds = n(dk) if em == nil then em = 0 end if ds == nil then ds = 1 end local dt = q._random_next32(self) local du = q._random_next32(self) local dv = (du / 4294967296) + (dt / 18446744073709551616) return em + dv * (ds - em) end function x:NextInteger(dj, dk) local em = math.floor(n(dj) or 1) local ds = math.floor(n(dk) or 1) if ds < em then em, ds = ds, em end local dt = ds - em + 1 if dt <= 0 then return em end local du = q._random_next32(self) return em + math.floor((dt * du) / 4294967296) end function x:NextUnitVector() local em = self:NextNumber(0, math.pi * 2) local ds = self:NextNumber(-1, 1) local dt = math.sqrt(math.max(0, 1 - ds * ds)) return Vector3.new(math.cos(em) * dt, ds, math.sin(em) * dt) end function x:Shuffle(dl) if j(dl) ~= "table" then return dl end for dm = #dl, 2, -1 do local dn = self:NextInteger(1, dm) dl[dm], dl[dn] = dl[dn], dl[dm] end return dl end function x:Clone() local em = Random.new(0) if em and j(em) == "table" then em._seed = x._seed em._state = {x._state[1], x._state[2], x._state[3], x._state[4]} end return em end return x end} setmetatable( Random, {__call = function(b2, di) return b2.new(di) end} ) Enum = bj("Enum", true) rawset(Enum, "GetEnums", function() local dn_items = {} for dn_path, _ in pairs(b_enum_members) do local dn_name = dn_path:match("^Enum%.([^%.]+)") if dn_name then local dn_enum = Enum[dn_name] local dn_seen = false for _, dn_existing in ipairs(dn_items) do if dn_existing == dn_enum then dn_seen = true break end end if not dn_seen then table.insert(dn_items, dn_enum) end end end table.sort( dn_items, function(dn_a, dn_b) return tostring(dn_a) < tostring(dn_b) end ) return dn_items end) rawset(Enum, "GetEnumItems", rawget(Enum, "GetEnums")) dm = p0(Enum) dm.__index = function(b2, b4) if b4 == F or b4 == "__proxy_id" then return rawget(b2, b4) end local b_enum_key = aE(b4) if b_enum_key == "GetEnumItems" then return function() local dn_items = {} for dn_path, _ in pairs(b_enum_members) do local dn_name = dn_path:match("^Enum%.(.+)$") if dn_name then table.insert(dn_items, Enum[dn_name]) end end table.sort( dn_items, function(dn_a, dn_b) return tostring(dn_a) < tostring(dn_b) end ) return dn_items end end if b_enum_key == "GetEnums" then return function() local dn_items = {} for dn_path, _ in pairs(b_enum_members) do local dn_name = dn_path:match("^Enum%.([^%.]+)") if dn_name then local dn_enum = Enum[dn_name] local dn_seen = false for _, dn_existing in ipairs(dn_items) do if dn_existing == dn_enum then dn_seen = true break end end if not dn_seen then table.insert(dn_items, dn_enum) end end end return dn_items end end local dn_path = "Enum." .. b_enum_key if not b_enum_members[dn_path] then error(dn_path .. " is not a valid Enum type", 0) end b_ensure_enum_family_minimum_members(dn_path, 3) if t.enum_cache[dn_path] then return t.enum_cache[dn_path] end return b_enum_item(dn_path) end dm.__newindex = function() error("Enum is read only", 0) end Instance = {new = function(bX, bS) local bY = aE(bX) if bY == "" or not bY:match("^[A-Z][A-Za-z0-9_]*$") then error('Unable to create an Instance of type "' .. bY .. '"', 0) end if b_class_parents[bY] == nil then error('Unable to create an Instance of type "' .. bY .. '"', 0) end if bY == "DataModel" then error('Unable to create an Instance of type "' .. bY .. '"', 0) end if bY == "Player" and bS ~= nil then error("Parent of Player can not be changed", 0) end local x = bj(bY, false) local _ = nil if x then _ = aW(x, bY) end t.property_store[x] = t.property_store[x] or {} t.property_store[x].ClassName = bY t.property_store[x].Name = bY if bY == "Part" then t.property_store[x].Size = Vector3.new(4, 1, 2) t.property_store[x].CFrame = CFrame.new(0, 0, 0) t.property_store[x].Position = Vector3.new(0, 0, 0) t.property_store[x].TopSurface = b_enum_item("Enum.SurfaceType.Smooth") t.property_store[x].BottomSurface = b_enum_item("Enum.SurfaceType.Smooth") t.property_store[x].FrontSurface = b_enum_item("Enum.SurfaceType.Smooth") t.property_store[x].BackSurface = b_enum_item("Enum.SurfaceType.Smooth") t.property_store[x].LeftSurface = b_enum_item("Enum.SurfaceType.Smooth") t.property_store[x].RightSurface = b_enum_item("Enum.SurfaceType.Smooth") t.property_store[x].Anchored = false t.property_store[x].Massless = false t.property_store[x].CanQuery = true t.property_store[x].Velocity = Vector3.new(0, 0, 0) t.property_store[x].AssemblyLinearVelocity = Vector3.new(0, 0, 0) elseif bY == "Attachment" then t.property_store[x].Position = Vector3.new(0, 0, 0) t.property_store[x].WorldPosition = Vector3.new(0, 0, 0) elseif bY == "LinearVelocity" then t.property_store[x].Attachment0 = nil t.property_store[x].VelocityConstraintMode = b_enum_item("Enum.VelocityConstraintMode.Vector") t.property_store[x].VectorVelocity = Vector3.new(0, 0, 0) t.property_store[x].MaxForce = 0 t.property_store[x].Enabled = true elseif bY == "UIScale" then t.property_store[x].Scale = 1 elseif bY == "UIGradient" then t.property_store[x].Enabled = true t.property_store[x].Offset = Vector2.new(0, 0) t.property_store[x].Rotation = 0 t.property_store[x].Color = ColorSequence.new(Color3.new(1, 1, 1)) elseif bY == "Frame" or bY == "TextLabel" or bY == "TextButton" or bY == "TextBox" or bY == "ImageButton" or bY == "ImageLabel" or bY == "ScrollingFrame" then t.property_store[x].Size = UDim2.new(1, 0, 1, 0) t.property_store[x].Position = UDim2.new(0, 0, 0, 0) t.property_store[x].Visible = true t.property_store[x].Interactable = false if bY == "TextLabel" or bY == "TextButton" or bY == "TextBox" then t.property_store[x].TextTruncate = b_enum_item("Enum.TextTruncate.None") t.property_store[x].FontFace = Font.fromEnum(Enum.Font.SourceSans) if bY == "TextBox" then t.property_store[x].ClearTextOnFocus = true t.property_store[x].MultiLine = false t.property_store[x].TextEditable = true end end elseif bY == "BloomEffect" then t.property_store[x].Intensity = 1 elseif bY == "SurfaceAppearance" then t.property_store[x].ColorMap = "" t.property_store[x].MetalnessMap = "" t.property_store[x].NormalMap = "" t.property_store[x].RoughnessMap = "" elseif bY == "BlurEffect" then t.property_store[x].Size = 24 elseif bY == "Atmosphere" then t.property_store[x].Density = 0.3 elseif bY == "Explosion" then t.property_store[x].BlastRadius = 4 elseif bY == "HingeConstraint" then t.property_store[x].ActuatorType = b_enum_item("Enum.ActuatorType.None") elseif bY == "Humanoid" then t.property_store[x].Health = 100 t.property_store[x].MaxHealth = 100 t.property_store[x].WalkSpeed = 16 t.property_store[x].JumpPower = 50 t.property_store[x].JumpHeight = 7.2 t.property_store[x].HipHeight = 2 t.property_store[x].MaxSlopeAngle = 89 t.property_store[x].NameDisplayDistance = 100 t.property_store[x].HealthDisplayDistance = 100 t.property_store[x].CameraOffset = Vector3.new(0, 0, 0) t.property_store[x].AutoRotate = true t.property_store[x].Sit = false t.property_store[x].PlatformStand = false t.property_store[x].DisplayDistanceType = b_enum_item("Enum.HumanoidDisplayDistanceType.Viewer") t.property_store[x].MoveDirection = Vector3.new(0, 0, 0) t.property_store[x].Jump = false t.property_store[x].UseJumpPower = true t.property_store[x].FloorMaterial = b_enum_item("Enum.Material.Air") t.property_store[x].__state = b_enum_item("Enum.HumanoidStateType.Running") t.property_store[x].Jumping = b_ensure_signal(x, "Jumping", "Humanoid.Jumping") t.property_store[x].StateChanged = b_ensure_signal(x, "StateChanged", "Humanoid.StateChanged") t.property_store[x].Running = b_ensure_signal(x, "Running", "Humanoid.Running") t.property_store[x].FreeFalling = b_ensure_signal(x, "FreeFalling", "Humanoid.FreeFalling") elseif bY == "SkateboardController" then t.property_store[x].Steer = 0 t.property_store[x].Throttle = 0 t.property_store[x].AxisChanged = b_ensure_signal(x, "AxisChanged", "SkateboardController.AxisChanged") elseif bY == "ForceField" then t.property_store[x].Visible = true elseif bY == "BodyVelocity" then t.property_store[x].Velocity = Vector3.new(0, 0, 0) t.property_store[x].MaxForce = Vector3.new(4000, 4000, 4000) elseif bY == "BodyGyro" then t.property_store[x].MaxTorque = Vector3.new(0, 0, 0) t.property_store[x].CFrame = CFrame.new(0, 0, 0) t.property_store[x].P = 3000 t.property_store[x].D = 500 elseif bY == "Sound" then t.property_store[x].IsLoaded = true t.property_store[x].IsPlaying = false t.property_store[x].Playing = false t.property_store[x].Looped = false t.property_store[x].PlayOnRemove = false t.property_store[x].SoundId = "" t.property_store[x].PlaybackState = b_enum_item("Enum.PlaybackState.Begin") t.property_store[x].TimePosition = 0 t.property_store[x].TimeLength = 1 t.property_store[x].Volume = 0.5 t.property_store[x].PlaybackSpeed = 1 t.property_store[x].PlaybackLoudness = 0 t.property_store[x].Loaded = b_ensure_signal(x, "Loaded", "Sound.Loaded") t.property_store[x].Played = b_ensure_signal(x, "Played", "Sound.Played") t.property_store[x].Paused = b_ensure_signal(x, "Paused", "Sound.Paused") t.property_store[x].Resumed = b_ensure_signal(x, "Resumed", "Sound.Resumed") t.property_store[x].Stopped = b_ensure_signal(x, "Stopped", "Sound.Stopped") t.property_store[x].Ended = b_ensure_signal(x, "Ended", "Sound.Ended") t.property_store[x].DidLoop = b_ensure_signal(x, "DidLoop", "Sound.DidLoop") elseif bY == "BindableEvent" then t.property_store[x].Event = b_ensure_signal(x, "Event", "BindableEvent.Event") elseif bY == "WeldConstraint" then t.property_store[x].Part0 = nil t.property_store[x].Part1 = nil end -- Default-value seeding for ValueBase and commonly-tested env-check classes. -- These don't conflict with anything above because the giant if/elseif only ran -- for a hand-picked subset; everything else gets its defaults filled in here. local b_kind = bY local function b_seed(b_field, b_val) if t.property_store[x][b_field] == nil then t.property_store[x][b_field] = b_val end end if b_kind == "StringValue" then b_seed("Value", "") elseif b_kind == "BoolValue" then b_seed("Value", false) elseif b_kind == "IntValue" then b_seed("Value", 0) elseif b_kind == "NumberValue" then b_seed("Value", 0) elseif b_kind == "ObjectValue" then b_seed("Value", nil) elseif b_kind == "CFrameValue" then b_seed("Value", CFrame.new(0, 0, 0)) elseif b_kind == "Vector3Value" then b_seed("Value", Vector3.new(0, 0, 0)) elseif b_kind == "Color3Value" then b_seed("Value", Color3.new(0, 0, 0)) elseif b_kind == "BrickColorValue" then local b_ok, b_bc = pcall(function() return BrickColor.new("Medium stone grey") end) b_seed("Value", b_ok and b_bc or nil) elseif b_kind == "RayValue" then b_seed("Value", Ray.new(Vector3.new(0, 0, 0), Vector3.new(0, 0, 1))) elseif b_kind == "TrussPart" or b_kind == "WedgePart" or b_kind == "CornerWedgePart" then b_seed("Size", Vector3.new(2, 1, 4)) b_seed("CFrame", CFrame.new(0, 0, 0)) b_seed("Position", Vector3.new(0, 0, 0)) b_seed("Anchored", false) b_seed("CanCollide", true) b_seed("Transparency", 0) elseif b_kind == "Seat" or b_kind == "VehicleSeat" or b_kind == "SkateboardPlatform" then b_seed("Size", Vector3.new(2, 1, 2)) b_seed("CFrame", CFrame.new(0, 0, 0)) b_seed("Anchored", false) elseif b_kind == "Actor" then -- Name comes from generic Name=bY above; just confirm. b_seed("PrimaryPart", nil) elseif b_kind == "Animation" then b_seed("AnimationId", "") elseif b_kind == "AnimationController" then -- has no notable defaults to seed elseif b_kind == "ParticleEmitter" then b_seed("Rate", 20) b_seed("Lifetime", NumberRange.new(5, 10)) b_seed("Enabled", true) b_seed("Texture", "") elseif b_kind == "Beam" then b_seed("Width0", 0.2) b_seed("Width1", 0.2) b_seed("Transparency", NumberSequence.new(0)) b_seed("LightEmission", 0) elseif b_kind == "Trail" then b_seed("Lifetime", 2) b_seed("MinLength", 0.1) b_seed("Enabled", true) elseif b_kind == "Smoke" then b_seed("Size", 1) b_seed("RiseVelocity", 1) b_seed("Enabled", true) elseif b_kind == "Fire" then b_seed("Size", 5) b_seed("Heat", 9) b_seed("Enabled", true) elseif b_kind == "Sparkles" then b_seed("Enabled", true) elseif b_kind == "Sky" then b_seed("CelestialBodiesShown", true) b_seed("MoonAngularSize", 11) b_seed("SunAngularSize", 21) b_seed("StarCount", 3000) elseif b_kind == "DepthOfFieldEffect" then b_seed("Enabled", true) b_seed("FocusDistance", 0.05) b_seed("InFocusRadius", 0.05) b_seed("FarIntensity", 0) b_seed("NearIntensity", 0) elseif b_kind == "ColorCorrectionEffect" then b_seed("Brightness", 0) b_seed("Contrast", 0) b_seed("Saturation", 0) b_seed("TintColor", Color3.new(1, 1, 1)) b_seed("Enabled", true) elseif b_kind == "SunRaysEffect" then b_seed("Intensity", 0.25) b_seed("Spread", 1) b_seed("Enabled", true) elseif b_kind == "PointLight" then b_seed("Brightness", 1) b_seed("Range", 8) b_seed("Color", Color3.new(1, 1, 1)) b_seed("Enabled", true) b_seed("Shadows", false) elseif b_kind == "SpotLight" then b_seed("Brightness", 1) b_seed("Range", 16) b_seed("Angle", 90) b_seed("Face", b_enum_item("Enum.NormalId.Front")) b_seed("Enabled", true) elseif b_kind == "SurfaceLight" then b_seed("Brightness", 1) b_seed("Range", 16) b_seed("Angle", 90) b_seed("Face", b_enum_item("Enum.NormalId.Front")) b_seed("Enabled", true) elseif b_kind == "Highlight" then b_seed("FillTransparency", 0.5) b_seed("OutlineTransparency", 0) b_seed("FillColor", Color3.new(1, 1, 1)) b_seed("OutlineColor", Color3.new(1, 1, 1)) b_seed("Enabled", true) elseif b_kind == "ProximityPrompt" then b_seed("HoldDuration", 0) b_seed("MaxActivationDistance", 10) b_seed("Enabled", true) b_seed("ActionText", "Interact") elseif b_kind == "ClickDetector" then b_seed("MaxActivationDistance", 32) elseif b_kind == "Tool" then b_seed("Grip", CFrame.new(0, 0, 0)) b_seed("GripPos", Vector3.new(0, 0, 0)) b_seed("CanBeDropped", true) b_seed("Enabled", true) elseif b_kind == "Decal" then b_seed("Texture", "") b_seed("Transparency", 0) b_seed("Face", b_enum_item("Enum.NormalId.Front")) elseif b_kind == "Texture" then b_seed("Texture", "") b_seed("StudsPerTileU", 2) b_seed("StudsPerTileV", 2) elseif b_kind == "ScreenGui" then b_seed("Enabled", true) b_seed("ResetOnSpawn", true) b_seed("DisplayOrder", 0) elseif b_kind == "SurfaceGui" or b_kind == "BillboardGui" then b_seed("Enabled", true) b_seed("Active", true) elseif b_kind == "ViewportFrame" then b_seed("CurrentCamera", b_child_proxy("Camera", x, "Camera")) b_seed("BackgroundTransparency", 1) b_seed("Ambient", Color3.new(0.78, 0.78, 0.78)) elseif b_kind == "VideoFrame" then b_seed("Volume", 1) b_seed("Video", "") b_seed("Playing", false) elseif b_kind == "CanvasGroup" then b_seed("GroupTransparency", 0) b_seed("GroupColor3", Color3.new(1, 1, 1)) elseif b_kind == "UIStroke" then b_seed("Thickness", 1) b_seed("Transparency", 0) b_seed("Color", Color3.new(0, 0, 0)) b_seed("Enabled", true) elseif b_kind == "UICorner" then b_seed("CornerRadius", UDim.new(0, 8)) elseif b_kind == "UIPadding" then b_seed("PaddingLeft", UDim.new(0, 0)) b_seed("PaddingRight", UDim.new(0, 0)) b_seed("PaddingTop", UDim.new(0, 0)) b_seed("PaddingBottom", UDim.new(0, 0)) elseif b_kind == "UIListLayout" then b_seed("Padding", UDim.new(0, 0)) b_seed("FillDirection", b_enum_item("Enum.FillDirection.Vertical")) b_seed("HorizontalAlignment", b_enum_item("Enum.HorizontalAlignment.Left")) b_seed("VerticalAlignment", b_enum_item("Enum.VerticalAlignment.Top")) elseif b_kind == "UIGridLayout" then b_seed("CellSize", UDim2.new(0, 100, 0, 100)) b_seed("CellPadding", UDim2.new(0, 5, 0, 5)) elseif b_kind == "UITableLayout" then b_seed("Padding", UDim2.new(0, 0, 0, 0)) elseif b_kind == "UIPageLayout" then b_seed("Padding", UDim.new(0, 0)) b_seed("Animated", true) elseif b_kind == "UISizeConstraint" then b_seed("MinSize", Vector2.new(0, 0)) b_seed("MaxSize", Vector2.new(math.huge, math.huge)) elseif b_kind == "UITextSizeConstraint" then b_seed("MinTextSize", 1) b_seed("MaxTextSize", 100) elseif b_kind == "UIAspectRatioConstraint" then b_seed("AspectRatio", 1) b_seed("DominantAxis", b_enum_item("Enum.DominantAxis.Width")) elseif b_kind == "SpringConstraint" or b_kind == "RodConstraint" or b_kind == "RopeConstraint" or b_kind == "BallSocketConstraint" or b_kind == "CylindricalConstraint" or b_kind == "PrismaticConstraint" or b_kind == "PlaneConstraint" or b_kind == "UniversalConstraint" or b_kind == "Torque" or b_kind == "AngularVelocity" or b_kind == "AlignPosition" or b_kind == "AlignOrientation" or b_kind == "NoCollisionConstraint" or b_kind == "AnimationConstraint" then b_seed("Enabled", true) b_seed("Attachment0", nil) b_seed("Attachment1", nil) elseif b_kind == "VectorForce" then b_seed("Force", Vector3.new(0, 0, 0)) b_seed("Enabled", true) elseif b_kind == "BodyAngularVelocity" then b_seed("AngularVelocity", Vector3.new(0, 0, 0)) b_seed("MaxTorque", Vector3.new(0, 0, 0)) b_seed("P", 3000) elseif b_kind == "BodyForce" then b_seed("Force", Vector3.new(0, 0, 0)) elseif b_kind == "BodyPosition" then b_seed("Position", Vector3.new(0, 0, 0)) b_seed("MaxForce", Vector3.new(4000, 4000, 4000)) b_seed("P", 10000) b_seed("D", 500) elseif b_kind == "BodyThrust" then b_seed("Force", Vector3.new(0, 0, 0)) b_seed("Location", Vector3.new(0, 0, 0)) elseif b_kind == "SpecialMesh" then b_seed("MeshType", b_enum_item("Enum.MeshType.Head")) b_seed("Scale", Vector3.new(1, 1, 1)) b_seed("Offset", Vector3.new(0, 0, 0)) b_seed("MeshId", "") elseif b_kind == "BlockMesh" or b_kind == "CylinderMesh" or b_kind == "FileMesh" then b_seed("Scale", Vector3.new(1, 1, 1)) b_seed("Offset", Vector3.new(0, 0, 0)) elseif b_kind == "Sky" then -- handled above elseif b_kind == "Hat" then b_seed("AttachmentForward", Vector3.new(0, 0, -1)) b_seed("AttachmentUp", Vector3.new(0, 1, 0)) elseif b_kind == "Shirt" then b_seed("ShirtTemplate", "") elseif b_kind == "Pants" then b_seed("PantsTemplate", "") elseif b_kind == "ShirtGraphic" then b_seed("Graphic", "") elseif b_kind == "Camera" then b_seed("FieldOfView", 70) b_seed("CFrame", CFrame.new(0, 0, 0)) b_seed("Focus", CFrame.new(0, 0, 0)) b_seed("CameraType", b_enum_item("Enum.CameraType.Custom")) elseif b_kind == "EqualizerSoundEffect" or b_kind == "ReverbSoundEffect" or b_kind == "CompressorSoundEffect" then b_seed("Enabled", true) b_seed("Priority", 0) elseif b_kind == "TextChannel" then b_seed("Name", "TextChannel") elseif b_kind == "Dialog" then b_seed("Purpose", b_enum_item("Enum.DialogPurpose.Help")) b_seed("Tone", b_enum_item("Enum.DialogTone.Neutral")) elseif b_kind == "KeyframeSequence" then b_seed("AuthoredHipHeight", 0) b_seed("Loop", false) b_seed("Priority", b_enum_item("Enum.AnimationPriority.Idle")) elseif b_kind == "Pose" or b_kind == "NumberPose" then b_seed("Weight", 1) elseif b_kind == "Keyframe" then b_seed("Time", 0) elseif b_kind == "BuoyancySensor" then b_seed("UpdateType", b_enum_item("Enum.SensorUpdateType.OnChange")) b_seed("FullySubmerged", false) b_seed("TouchingSurface", false) elseif b_kind == "EditableImage" or b_kind == "EditableMesh" then b_seed("Size", Vector2.new(256, 256)) elseif b_kind == "Cloud" or b_kind == "Clouds" then b_seed("Cover", 0.5) b_seed("Color", Color3.new(1, 1, 1)) end if _ then if bS then local dp = t.registry[bS] or aZ(bS) at(string.format("local %s = Instance.new(%s, %s)", _, aH(bY), dp)) t.parent_map[x] = bS else at(string.format("local %s = Instance.new(%s)", _, aH(bY))) end end return x end} Instance.New = Instance.new game = bj("game", true) workspace = bj("workspace", true) script = bj("script", true) b_env_state.roblox_game = game b_env_state.roblox_workspace = workspace b_env_state.roblox_script = script t.property_store[script] = {Name = "DumpedScript", Parent = nil, ClassName = "LocalScript", Source = ""} rawset(Vector3, "zero", Vector3.new(0, 0, 0)) rawset(Vector3, "one", Vector3.new(1, 1, 1)) rawset(Vector2, "zero", Vector2.new(0, 0)) rawset(Vector2, "one", Vector2.new(1, 1)) rawset(CFrame, "identity", CFrame.new(0, 0, 0)) function b_pump_runservice(b_dt) t.heartbeat_counter = (t.heartbeat_counter or 0) + 1 local b_jitter = ((t.heartbeat_counter % 5) - 2) * 1e-6 b_dt = (tonumber(b_dt) or (1 / 60)) + b_jitter local b_rs = t.service_cache.RunService if not b_rs then return end local b_store = t.property_store[b_rs] or {} b_store.HeartbeatTime = b_dt b_store.HeartbeatTimeMs = b_dt * 1000 b_store.FrameTime = b_dt local b_stats = t.service_cache.Stats if b_stats and t.property_store[b_stats] then local b_stats_store = t.property_store[b_stats] b_stats_store.FrameTime = b_dt b_stats_store.HeartbeatTime = b_dt b_stats_store.HeartbeatTimeMs = b_dt * 1000 b_stats_store.PhysicsStepTime = b_dt b_stats_store.PhysicsStepTimeMs = b_dt * 1000 b_stats_store.RenderCPUFrameTime = b_dt b_stats_store.RenderGPUFrameTime = b_dt end t.pumping_runservice = true -- Keep per-signal deltas slightly distinct to better mirror real scheduling variance. local b_render_dt = b_dt + 7e-7 local b_stepped_dt = b_dt - 5e-7 if b_store.RenderStepped then b_fire_signal(b_store.RenderStepped, b_render_dt) end if b_store.Stepped then b_fire_signal( b_store.Stepped, tonumber(t.simulated_time) or tonumber(t.fake_clock) or 0, b_stepped_dt ) end if b_store.Heartbeat then b_fire_signal(b_store.Heartbeat, b_dt) end t.pumping_runservice = false end function b_tween_interpolate_value(b_from, b_to, b_alpha) if b_alpha <= 0 then return b_from end if b_alpha >= 1 then return b_to end if j(b_from) == "number" and j(b_to) == "number" then return b_from + ((b_to - b_from) * b_alpha) end if G(b_from) and G(b_to) then local b_kind = b_proxy_kind(b_from) if b_kind == b_proxy_kind(b_to) then if b_kind == "Vector3" then local b_fx, b_fy, b_fz = b_vector_components(b_from) local b_tx, b_ty, b_tz = b_vector_components(b_to) return Vector3.new( b_fx + ((b_tx - b_fx) * b_alpha), b_fy + ((b_ty - b_fy) * b_alpha), b_fz + ((b_tz - b_fz) * b_alpha) ) elseif b_kind == "Vector2" then local b_from_store = t.property_store[b_from] or {} local b_to_store = t.property_store[b_to] or {} return Vector2.new( A(b_from_store.X) + ((A(b_to_store.X) - A(b_from_store.X)) * b_alpha), A(b_from_store.Y) + ((A(b_to_store.Y) - A(b_from_store.Y)) * b_alpha) ) elseif b_kind == "UDim" then local b_from_store = t.property_store[b_from] or {} local b_to_store = t.property_store[b_to] or {} return UDim.new( A(b_from_store.Scale) + ((A(b_to_store.Scale) - A(b_from_store.Scale)) * b_alpha), A(b_from_store.Offset) + ((A(b_to_store.Offset) - A(b_from_store.Offset)) * b_alpha) ) elseif b_kind == "UDim2" then local b_from_store = t.property_store[b_from] or {} local b_to_store = t.property_store[b_to] or {} local b_fx = b_from_store.X or UDim.new(0, 0) local b_fy = b_from_store.Y or UDim.new(0, 0) local b_tx = b_to_store.X or UDim.new(0, 0) local b_ty = b_to_store.Y or UDim.new(0, 0) return UDim2.new( UDim.new(b_fx.Scale + ((b_tx.Scale - b_fx.Scale) * b_alpha), b_fx.Offset + ((b_tx.Offset - b_fx.Offset) * b_alpha)), UDim.new(b_fy.Scale + ((b_ty.Scale - b_fy.Scale) * b_alpha), b_fy.Offset + ((b_ty.Offset - b_fy.Offset) * b_alpha)) ) elseif b_kind == "Color3" then local b_from_store = t.property_store[b_from] or {} local b_to_store = t.property_store[b_to] or {} return Color3.new( A(b_from_store.R) + ((A(b_to_store.R) - A(b_from_store.R)) * b_alpha), A(b_from_store.G) + ((A(b_to_store.G) - A(b_from_store.G)) * b_alpha), A(b_from_store.B) + ((A(b_to_store.B) - A(b_from_store.B)) * b_alpha) ) elseif b_kind == "CFrame" then local b_fx, b_fy, b_fz = b_vector_components(b_from.Position or Vector3.new(0, 0, 0)) local b_tx, b_ty, b_tz = b_vector_components(b_to.Position or Vector3.new(0, 0, 0)) return CFrame.new( b_fx + ((b_tx - b_fx) * b_alpha), b_fy + ((b_ty - b_fy) * b_alpha), b_fz + ((b_tz - b_fz) * b_alpha) ) end end end return b_alpha >= 1 and b_to or b_from end function b_update_tweens(b_dt) if not t.active_tweens then return end for _, b_tween in ipairs(t.active_tweens) do local b_store = t.property_store[b_tween] if b_store and b_store.ClassName == "Tween" and b_store.PlaybackState == b_enum_item("Enum.PlaybackState.Playing") then b_store.__remaining = (b_store.__remaining or 0) - b_dt local b_duration = tonumber(b_store.__duration) or 0 local b_progress = b_duration <= 0 and 1 or math.max(0, math.min(1, 1 - ((b_store.__remaining or 0) / b_duration))) if G(b_store.__target) and j(b_store.__goal) == "table" then local b_target_store = t.property_store[b_store.__target] or {} local b_start = b_store.__start or {} for b_key, b_value in D(b_store.__goal) do b_target_store[b_key] = b_tween_interpolate_value(b_start[b_key], b_value, b_progress) end end if b_store.__remaining <= 0 then b_store.PlaybackState = b_enum_item("Enum.PlaybackState.Completed") if G(b_store.__target) and j(b_store.__goal) == "table" then for b_key, b_value in D(b_store.__goal) do b_store.__target[b_key] = b_value end end -- Fire Completed signal if b_store.Completed then b_fire_signal(b_store.Completed) end end end end end q._update_sounds = function(b_dt) for b_instance, b_store in D(t.property_store) do if G(b_instance) and j(b_store) == "table" and b_store.ClassName == "Sound" then if b_store.IsPlaying == true or b_store.Playing == true then local b_speed = tonumber(b_store.PlaybackSpeed) or 1 local b_length = tonumber(b_store.TimeLength) or 0 local b_position = tonumber(b_store.TimePosition) or 0 b_position = b_position + (b_dt * b_speed) if b_position < 0 then b_position = 0 end if b_length > 0 and b_position >= b_length then if b_store.Looped == true then b_position = b_position % b_length if b_store.DidLoop then b_fire_signal(b_store.DidLoop) end else b_position = b_length b_store.IsPlaying = false b_store.Playing = false b_store.PlaybackState = b_enum_item("Enum.PlaybackState.Completed") if b_store.Ended then b_fire_signal(b_store.Ended) end end end b_store.TimePosition = b_position end end end end q._update_simple_physics = function(b_dt) local b_workspace_store = t.property_store[workspace] or {} local b_gravity = tonumber(b_workspace_store.Gravity) or 196.2 local b_destroy_y = tonumber(b_workspace_store.FallenPartsDestroyHeight) or -500 local b_to_destroy = {} local b_dynamic_parts = {} local b_static_parts = {} local b_touching_now = {} for b_humanoid, b_store in D(t.property_store) do if G(b_humanoid) and j(b_store) == "table" and (b_store.ClassName == "Humanoid") then local b_state = b_store.__state if b_state == b_enum_item("Enum.HumanoidStateType.Jumping") then local b_model = t.parent_map[b_humanoid] local b_hrp = b_model and t.property_store[b_model] and t.property_store[b_model].HumanoidRootPart or nil if not G(b_hrp) and G(b_model) then local b_cached_children = t.child_cache[b_model] or {} b_hrp = b_cached_children.HumanoidRootPart or b_cached_children.PrimaryPart or nil end if not G(b_hrp) and G(b_model) then for b_child, b_owner in D(t.parent_map) do if b_owner == b_model then local b_child_store = t.property_store[b_child] or {} local b_child_name = aE(b_child_store.Name or "") local b_child_class = aE(b_child_store.ClassName or "") if b_child_name == "HumanoidRootPart" or b_child_name == "PrimaryPart" then b_hrp = b_child break end if b_hrp == nil and (b_child_class == "Part" or b_child_class == "MeshPart" or b_child_class == "BasePart") then b_hrp = b_child end end end end local b_hrp_store = b_hrp and t.property_store[b_hrp] or nil if b_hrp_store then local b_vx, b_vy, b_vz = b_vector_components(b_hrp_store.AssemblyLinearVelocity or b_hrp_store.Velocity or Vector3.new(0, 0, 0)) if b_vy < 30 then b_vy = 65 end local b_new_v = Vector3.new(b_vx, b_vy, b_vz) b_hrp_store.Velocity = b_new_v b_hrp_store.AssemblyLinearVelocity = b_new_v end end end end local function b_is_part_in_workspace(b_instance) local b_cursor = b_instance while b_cursor do if b_cursor == workspace then return true end b_cursor = t.parent_map[b_cursor] end return false end local function b_is_base_part_store(b_store) local b_class = b_store and (b_store.ClassName or "") or "" return b_class == "Part" or b_class == "MeshPart" or b_class == "BasePart" or b_class == "UnionOperation" or b_class == "WedgePart" or b_class == "CornerWedgePart" or b_class == "TrussPart" or b_class == "Seat" or b_class == "VehicleSeat" or b_class == "SpawnLocation" end local function b_mark_touch(b_left, b_right) if not G(b_left) or not G(b_right) or b_left == b_right then return end b_touching_now[b_left] = b_touching_now[b_left] or {} b_touching_now[b_right] = b_touching_now[b_right] or {} b_touching_now[b_left][b_right] = true b_touching_now[b_right][b_left] = true end local function b_fire_touch_signal(b_part, b_signal_name, b_other) local b_store = t.property_store[b_part] if not b_store then return end local b_signal = b_store[b_signal_name] if b_signal then b_fire_signal(b_signal, b_other) end end local function b_transition_humanoid_state(b_humanoid, b_new_state, b_speed, b_floor_material) local b_store = t.property_store[b_humanoid] if not b_store then return end local b_old_state = b_store.__state or b_enum_item("Enum.HumanoidStateType.Running") b_store.__state = b_new_state if b_floor_material ~= nil then b_store.FloorMaterial = b_floor_material end if b_new_state == b_enum_item("Enum.HumanoidStateType.Running") then b_store.Jump = false if b_store.Running then b_fire_signal(b_store.Running, tonumber(b_speed) or 0) end elseif b_new_state == b_enum_item("Enum.HumanoidStateType.Freefall") then b_store.Jump = false b_store.FloorMaterial = b_enum_item("Enum.Material.Air") if b_store.FreeFalling then b_fire_signal(b_store.FreeFalling, true) end elseif b_new_state == b_enum_item("Enum.HumanoidStateType.Landed") then b_store.Jump = false if b_floor_material ~= nil then b_store.FloorMaterial = b_floor_material end elseif b_new_state == b_enum_item("Enum.HumanoidStateType.Jumping") then b_store.Jump = true b_store.FloorMaterial = b_enum_item("Enum.Material.Air") end if b_old_state ~= b_new_state and b_store.StateChanged then b_fire_signal(b_store.StateChanged, b_old_state, b_new_state) end end local function b_update_body_movers(b_instance, b_store, b_vx, b_vy, b_vz, b_px, b_py, b_pz) for b_child, b_parent in D(t.parent_map) do if b_parent == b_instance then local b_child_store = t.property_store[b_child] local b_child_class = b_child_store and b_child_store.ClassName or "" if b_child_class == "BodyVelocity" then local c_vx, c_vy, c_vz = b_vector_components(b_child_store.Velocity or Vector3.new(0, 0, 0)) b_vx, b_vy, b_vz = c_vx, c_vy, c_vz elseif b_child_class == "LinearVelocity" then local c_enabled = b_child_store.Enabled if c_enabled ~= false then local c_attach = b_child_store.Attachment0 local c_attach_parent = c_attach and t.parent_map[c_attach] or nil if c_attach == nil or c_attach_parent == b_instance then local c_mode = tostring(b_child_store.VelocityConstraintMode or "") if c_mode == "" or c_mode:find("Vector", 1, true) then local c_vx, c_vy, c_vz = b_vector_components(b_child_store.VectorVelocity or Vector3.new(0, 0, 0)) b_vx, b_vy, b_vz = c_vx, c_vy, c_vz end end end elseif b_child_class == "BodyPosition" then local c_px, c_py, c_pz = b_vector_components(b_child_store.Position or Vector3.new(b_px, b_py, b_pz)) b_px, b_py, b_pz = c_px, c_py, c_pz b_vx, b_vy, b_vz = 0, 0, 0 elseif b_child_class == "BodyGyro" and G(b_child_store.CFrame) and b_proxy_kind(b_child_store.CFrame) == "CFrame" then local c_tx, c_ty, c_tz, c_r00, c_r01, c_r02, c_r10, c_r11, c_r12, c_r20, c_r21, c_r22 = b_cframe_components(b_child_store.CFrame) b_store.CFrame = CFrame.new( b_px, b_py, b_pz, c_r00, c_r01, c_r02, c_r10, c_r11, c_r12, c_r20, c_r21, c_r22 ) end end end return b_vx, b_vy, b_vz, b_px, b_py, b_pz end for b_instance, b_store in D(t.property_store) do if G(b_instance) and j(b_store) == "table" then local b_is_part = b_is_base_part_store(b_store) if b_is_part and b_is_part_in_workspace(b_instance) and b_store.Anchored == true then table.insert(b_static_parts, {instance = b_instance, store = b_store}) end end end t.touch_pairs = t.touch_pairs or {} for b_instance, b_store in D(t.property_store) do if G(b_instance) and j(b_store) == "table" then local b_is_part = b_is_base_part_store(b_store) local b_in_workspace = b_is_part_in_workspace(b_instance) if b_is_part and b_store.Anchored ~= true and (b_in_workspace or t.parent_map[b_instance] == nil) then local b_px, b_py, b_pz = b_vector_components(b_store.Position or Vector3.new(0, 0, 0)) local b_prev_px, b_prev_py, b_prev_pz = b_px, b_py, b_pz local b_vx, b_vy, b_vz = b_vector_components(b_store.AssemblyLinearVelocity or b_store.Velocity or Vector3.new(0, 0, 0)) local b_has_anchored_weld = false for b_child, _ in D(t.parent_map) do local b_child_store = t.property_store[b_child] if b_child_store and b_child_store.ClassName == "WeldConstraint" then local b_part0 = b_child_store.Part0 local b_part1 = b_child_store.Part1 if b_part0 == b_instance or b_part1 == b_instance then local b_other = b_part0 == b_instance and b_part1 or b_part0 if b_other and t.property_store[b_other] and t.property_store[b_other].Anchored == true then b_has_anchored_weld = true break end end end end if not b_has_anchored_weld then b_vx, b_vy, b_vz, b_px, b_py, b_pz = b_update_body_movers(b_instance, b_store, b_vx, b_vy, b_vz, b_px, b_py, b_pz) b_px = b_px + (b_vx * b_dt) b_pz = b_pz + (b_vz * b_dt) b_vy = b_vy - (b_gravity * b_dt) b_py = b_py + (b_vy * b_dt) else b_vx, b_vy, b_vz = 0, 0, 0 end b_store.__last_physics_position = Vector3.new(b_prev_px, b_prev_py, b_prev_pz) local b_grounded = false local b_ground_part = nil local b_ground_top = nil for _, b_static in ipairs(b_static_parts) do local b_static_instance = b_static.instance local b_static_store = b_static.store if b_static_store and b_static_instance ~= b_instance then local b_sx, b_sy, b_sz = b_vector_components(b_static_store.Position or Vector3.new(0, 0, 0)) local b_ssx, b_ssy, b_ssz = b_vector_components(b_static_store.Size or Vector3.new(4, 1, 4)) local b_psx, b_psy, b_psz = b_vector_components(b_store.Size or Vector3.new(4, 4, 4)) local b_xz_overlap = math.abs(b_px - b_sx) <= ((b_psx + b_ssx) / 2) and math.abs(b_pz - b_sz) <= ((b_psz + b_ssz) / 2) if b_xz_overlap then local b_bottom = b_py - (b_psy / 2) local b_prev_bottom = b_prev_py - (b_psy / 2) local b_top = b_sy + (b_ssy / 2) local b_crossing_slop = math.max(0.25, math.abs(b_prev_bottom - b_bottom) + 0.05) if b_prev_bottom >= (b_top - 0.05) and b_bottom <= (b_top + b_crossing_slop) and b_vy <= 0 then b_py = b_top + (b_psy / 2) b_vy = 0 b_grounded = true b_ground_part = b_static_instance b_ground_top = b_top b_mark_touch(b_instance, b_static_instance) break end end end end local b_velocity = Vector3.new(b_vx, b_vy, b_vz) b_store.Velocity = b_velocity b_store.AssemblyLinearVelocity = b_velocity b_store.Position = Vector3.new(b_px, b_py, b_pz) if not (G(b_store.CFrame) and b_proxy_kind(b_store.CFrame) == "CFrame") or b_store.ClassName ~= "Part" then b_store.CFrame = CFrame.new(b_px, b_py, b_pz) else local _, _, _, b_r00, b_r01, b_r02, b_r10, b_r11, b_r12, b_r20, b_r21, b_r22 = b_cframe_components(b_store.CFrame) b_store.CFrame = CFrame.new( b_px, b_py, b_pz, b_r00, b_r01, b_r02, b_r10, b_r11, b_r12, b_r20, b_r21, b_r22 ) end local b_parent = t.parent_map[b_instance] local b_model_store = b_parent and t.property_store[b_parent] or nil local b_humanoid = b_model_store and b_model_store.Humanoid or nil if b_humanoid and G(b_humanoid) and t.property_store[b_humanoid] then local b_humanoid_store = t.property_store[b_humanoid] local b_current_state = b_humanoid_store.__state or b_enum_item("Enum.HumanoidStateType.Running") local b_speed = math.sqrt((b_vx * b_vx) + (b_vz * b_vz)) if b_grounded then local b_floor_material = b_ground_part and ((t.property_store[b_ground_part] or {}).Material or b_enum_item("Enum.Material.Plastic")) or b_enum_item("Enum.Material.Plastic") if b_current_state == b_enum_item("Enum.HumanoidStateType.Jumping") or b_current_state == b_enum_item("Enum.HumanoidStateType.Freefall") then b_transition_humanoid_state( b_humanoid, b_enum_item("Enum.HumanoidStateType.Landed"), b_speed, b_floor_material ) b_humanoid_store.__pending_ground_state = b_enum_item("Enum.HumanoidStateType.Running") elseif b_humanoid_store.__pending_ground_state then b_transition_humanoid_state( b_humanoid, b_humanoid_store.__pending_ground_state, b_speed, b_floor_material ) b_humanoid_store.__pending_ground_state = nil elseif b_current_state ~= b_enum_item("Enum.HumanoidStateType.Running") then b_transition_humanoid_state( b_humanoid, b_enum_item("Enum.HumanoidStateType.Running"), b_speed, b_floor_material ) else b_humanoid_store.FloorMaterial = b_floor_material end else b_humanoid_store.__pending_ground_state = nil if b_current_state == b_enum_item("Enum.HumanoidStateType.Jumping") and b_vy <= 0 then b_transition_humanoid_state( b_humanoid, b_enum_item("Enum.HumanoidStateType.Freefall"), b_speed, b_enum_item("Enum.Material.Air") ) elseif b_current_state ~= b_enum_item("Enum.HumanoidStateType.Freefall") then b_transition_humanoid_state( b_humanoid, b_enum_item("Enum.HumanoidStateType.Freefall"), b_speed, b_enum_item("Enum.Material.Air") ) end end end table.insert(b_dynamic_parts, {instance = b_instance, store = b_store}) if b_py <= b_destroy_y then table.insert(b_to_destroy, b_instance) end end end end for b_index = 1, #b_dynamic_parts do local b_left = b_dynamic_parts[b_index] local b_left_store = b_left and b_left.store if b_left_store then local b_lx, b_ly, b_lz = b_vector_components(b_left_store.Position or Vector3.new(0, 0, 0)) local b_lvx = b_vector_components(b_left_store.AssemblyLinearVelocity or b_left_store.Velocity or Vector3.new(0, 0, 0)) local b_lpx, b_lpy, b_lpz = b_vector_components(b_left_store.__last_physics_position or b_left_store.Position or Vector3.new(0, 0, 0)) local b_lsx, b_lsy, b_lsz = b_vector_components(b_left_store.Size or Vector3.new(4, 4, 4)) for b_other_index = b_index + 1, #b_dynamic_parts do local b_right = b_dynamic_parts[b_other_index] local b_right_store = b_right and b_right.store if b_right_store then local b_rx, b_ry, b_rz = b_vector_components(b_right_store.Position or Vector3.new(0, 0, 0)) local b_rvx, b_rvy, b_rvz = b_vector_components(b_right_store.AssemblyLinearVelocity or b_right_store.Velocity or Vector3.new(0, 0, 0)) local b_rpx, b_rpy, b_rpz = b_vector_components(b_right_store.__last_physics_position or b_right_store.Position or Vector3.new(0, 0, 0)) local b_rsx, b_rsy, b_rsz = b_vector_components(b_right_store.Size or Vector3.new(4, 4, 4)) local b_overlap_x = (b_lsx + b_rsx) / 2 local b_overlap_y = (b_lsy + b_rsy) / 2 local b_overlap_z = (b_lsz + b_rsz) / 2 local b_prev_rel_x = b_lpx - b_rpx local b_curr_rel_x = b_lx - b_rx local b_swept_x_overlap = math.abs(b_curr_rel_x) <= b_overlap_x or (b_prev_rel_x < -b_overlap_x and b_curr_rel_x >= -b_overlap_x) or (b_prev_rel_x > b_overlap_x and b_curr_rel_x <= b_overlap_x) if b_swept_x_overlap and math.abs(b_ly - b_ry) <= b_overlap_y and math.abs(b_lz - b_rz) <= b_overlap_z then b_mark_touch(b_left.instance, b_right.instance) if math.abs(b_lvx) > math.abs(b_rvx) then b_right_store.Position = Vector3.new(b_rx + (b_lvx * b_dt), b_ry, b_rz) b_right_store.CFrame = CFrame.new(b_rx + (b_lvx * b_dt), b_ry, b_rz) b_right_store.AssemblyLinearVelocity = Vector3.new(b_lvx, b_rvy, b_rvz) b_right_store.Velocity = b_right_store.AssemblyLinearVelocity elseif math.abs(b_rvx) > math.abs(b_lvx) then b_left_store.Position = Vector3.new(b_lx + (b_rvx * b_dt), b_ly, b_lz) b_left_store.CFrame = CFrame.new(b_lx + (b_rvx * b_dt), b_ly, b_lz) b_left_store.AssemblyLinearVelocity = Vector3.new(b_rvx, 0, 0) b_left_store.Velocity = b_left_store.AssemblyLinearVelocity end end end end end end for _, b_instance in ipairs(b_to_destroy) do if t.parent_map[b_instance] ~= nil then b_destroy_instance(b_instance) end end local b_previous_touches = t.touch_pairs or {} for b_left, b_rights in D(b_touching_now) do local b_prev_rights = b_previous_touches[b_left] or {} for b_right, _ in D(b_rights) do if not b_prev_rights[b_right] then b_fire_touch_signal(b_left, "Touched", b_right) end end end for b_left, b_rights in D(b_previous_touches) do local b_now_rights = b_touching_now[b_left] or {} for b_right, _ in D(b_rights) do if not b_now_rights[b_right] then b_fire_touch_signal(b_left, "TouchEnded", b_right) end end end t.touch_pairs = b_touching_now end function q._queue_scheduled_thread(b_thread, b_label, b_delay) if j(b_thread) ~= "thread" then return b_thread end t.schedule_counter = (t.schedule_counter or 0) + 1 local b_now = t.simulated_time or 0 local b_wait = tonumber(b_delay) or 0 if b_wait < 0 then b_wait = 0 end local b_due = b_now + b_wait local b_queue = t.scheduled_threads if j(b_queue) ~= "table" then b_queue = {} t.scheduled_threads = b_queue end table.insert( b_queue, { thread = b_thread, label = b_label or "Task", due_time = b_due, order = t.schedule_counter } ) return b_thread end function q._flush_scheduled_threads(b_skip_legacy_spawn) local b_queue = t.scheduled_threads if j(b_queue) ~= "table" or #b_queue == 0 or t.running_scheduled then return false end local b_now = t.simulated_time or 0 local b_pick_index = nil local b_pick_due = nil local b_pick_order = nil for b_index, b_entry in ipairs(b_queue) do local b_due = tonumber(b_entry and b_entry.due_time) or 0 if b_due <= b_now and not (b_skip_legacy_spawn and b_entry and (b_entry.label == "LegacySpawn" or b_entry.label == "Spawn")) then local b_order = tonumber(b_entry and b_entry.order) or b_index if b_pick_index == nil or b_due < b_pick_due or (b_due == b_pick_due and b_order < b_pick_order) then b_pick_index = b_index b_pick_due = b_due b_pick_order = b_order end end end if b_pick_index == nil then return false end local b_entry = table.remove(b_queue, b_pick_index) if not b_entry then return false end if t.cancelled_threads and t.cancelled_threads[b_entry.thread] == true then return true end t.running_scheduled = true q._run_scheduled_thread(b_entry.thread, b_entry.label or "Task") t.running_scheduled = false return true end function q._drain_scheduled_threads(b_skip_legacy_spawn) while true do if q._flush_scheduled_threads(b_skip_legacy_spawn) then else local b_queue = t.scheduled_threads if j(b_queue) ~= "table" or #b_queue == 0 then break end local b_now = t.simulated_time or 0 local b_next_due = nil for _, b_entry in ipairs(b_queue) do local b_due = tonumber(b_entry and b_entry.due_time) if (not b_skip_legacy_spawn or not (b_entry and (b_entry.label == "LegacySpawn" or b_entry.label == "Spawn"))) and b_due ~= nil and (b_next_due == nil or b_due < b_next_due) then b_next_due = b_due end end if b_next_due == nil or b_next_due <= b_now or b_next_due > r.MAX_SIMULATED_SECONDS then break end if b_skip_legacy_spawn then break end q._advance_simulation(b_next_due - b_now) end end end function q._advance_simulation(b_wait_time) local b_total = tonumber(b_wait_time) or (1 / 60) if b_total < 0 then b_total = 0 end local b_target_step = 1 / 60 local b_max_steps = 120 local b_steps = math.max(1, math.ceil(b_total / b_target_step)) if b_steps > b_max_steps then b_steps = b_max_steps end for b_step = 1, b_steps do local b_slice = b_total / b_steps t.fake_clock = (t.fake_clock or 0) + b_slice t.simulated_time = (t.simulated_time or 0) + b_slice if t.property_store[workspace] then t.property_store[workspace].DistributedGameTime = (t.property_store[workspace].DistributedGameTime or 0) + b_slice end b_pump_runservice(b_slice) b_update_tweens(b_slice) q._update_sounds(b_slice) q._update_simple_physics(b_slice) while q._flush_scheduled_threads() do end if t.simulated_time > r.MAX_SIMULATED_SECONDS then error("TIMEOUT_FORCED_BY_DUMPER", 0) end end return b_total, t.fake_clock end function b_should_yield_wait() if not coroutine or j(coroutine.running) ~= "function" or j(coroutine.yield) ~= "function" then return false end local b_thread = coroutine.running() if b_thread == nil then return false end if t.main_thread ~= nil and b_thread == t.main_thread then return false end return true end function q._run_scheduled_thread(b_thread, b_label) if j(b_thread) ~= "thread" or not coroutine or j(coroutine.resume) ~= "function" then return b_thread end t.scheduled_resume_counts = t.scheduled_resume_counts or {} t.scheduled_resume_counts[b_thread] = (t.scheduled_resume_counts[b_thread] or 0) + 1 if (b_label == "Spawn" or b_label == "LegacySpawn") and t.scheduled_resume_counts[b_thread] > 8 then return b_thread end local b_prev_user_code_active = t.user_code_active t.user_code_active = true local b_results = b_pack(coroutine.resume(b_thread)) t.user_code_active = b_prev_user_code_active if not b_results[1] then local ds = b_results[2] if type(ds) == "string" and ds:match("TIMEOUT_FORCED_BY_DUMPER") then at(string.format("-- [%s timed out]", b_label)) return b_thread end at(string.format("-- [Error in %s] %s", b_label, tostring(ds))) return b_thread end if j(coroutine.status) == "function" and coroutine.status(b_thread) ~= "dead" then local b_wait_time = b_results[2] q._queue_scheduled_thread(b_thread, b_label, type(b_wait_time) == "number" and b_wait_time or (1 / 60)) end return b_thread end if coroutine and j(coroutine.wrap) == "function" then t.__native_coroutine_wrap = t.__native_coroutine_wrap or coroutine.wrap coroutine.wrap = function(dr) if j(dr) ~= "function" then return t.__native_coroutine_wrap(dr) end local b_co = coroutine.create(dr) return function(...) local bA = {...} local b_arg_parts = {} for _, b5 in ipairs(bA) do table.insert(b_arg_parts, aZ(b5)) end at("coroutine.wrap(function(...)") t.indent = t.indent + 1 t.indent = t.indent - 1 at("end)(" .. table.concat(b_arg_parts, ", ") .. ")") local b_results = b_pack(coroutine.resume(b_co, native_unpack(bA))) if not b_results[1] then local b_err = tostring(b_results[2] or "") local b_body = j(b_function_body_literal) == "function" and b_function_body_literal(dr, 4096) or nil if j(b_body) == "string" then b_err = b_body:match("error%s*%(%s*\"([^\"]-)\"%s*,%s*0%s*%)") or b_body:match("error%s*%(%s*'([^']-)'%s*,%s*0%s*%)") or b_err end b_err = b_err:match(":%d+:%s*(.*)$") or b_err error(b_err, 0) end return native_unpack(b_results, 2, b_results.n) end end end task = { wait = function(dq, ...) if select("#", ...) > 0 then error("invalid argument #2 to 'wait' (unexpected argument)", 0) end if dq then at(string.format("task.wait(%s)", aZ(dq))) else at("task.wait()") end local waitTime, b_clock = q._advance_simulation(dq or (1 / 60)) if b_should_yield_wait() then return coroutine.yield(waitTime, b_clock) end return waitTime, b_clock end, spawn = function(dr, ...) if j(dr) ~= "function" and j(dr) ~= "thread" then error("invalid argument #1 to 'spawn' (function or thread expected)", 0) end local bA = {...} at("task.spawn(function(" .. (b_function_params_literal(dr) or "") .. ")") t.indent = t.indent + 1 local b_thread = dr local b_spawn_body = b_function_body_literal(dr) if b_spawn_body then b_emit_source_block(b_spawn_body) end if j(dr) == "function" then b_thread = coroutine.create( function() dr(native_unpack(bA)) end ) end if j(b_thread) == "thread" then q._queue_scheduled_thread(b_thread, "Spawn", 0) q._flush_scheduled_threads() end while t.pending_iterator do t.indent = t.indent - 1 at("end") t.pending_iterator = false end t.indent = t.indent - 1 at("end)") return b_thread end, delay = function(dq, dr, ...) if j(dr) ~= "function" and j(dr) ~= "thread" then error("invalid argument #2 to 'delay' (function or thread expected)", 0) end local bA = {...} at(string.format("task.delay(%s, function(%s)", aZ(dq or 0), b_function_params_literal(dr) or "")) t.indent = t.indent + 1 local b_thread = nil local b_spawn_body = b_function_body_literal(dr) if b_spawn_body then b_emit_source_block(b_spawn_body) end if j(dr) == "function" then b_thread = coroutine.create( function() dr(native_unpack(bA)) end ) q._queue_scheduled_thread(b_thread, "Delay", dq or 0) end while t.pending_iterator do t.indent = t.indent - 1 at("end") t.pending_iterator = false end t.indent = t.indent - 1 at("end)") return b_thread or coroutine.running() end, defer = function(dr, ...) if j(dr) ~= "function" and j(dr) ~= "thread" then error("invalid argument #1 to 'defer' (function or thread expected)", 0) end local bA = {...} at("task.defer(function(" .. (b_function_params_literal(dr) or "") .. ")") t.indent = t.indent + 1 local b_spawn_body = b_function_body_literal(dr) if b_spawn_body then b_emit_source_block(b_spawn_body) end local b_thread = nil if j(dr) == "function" then b_thread = coroutine.create( function() dr(native_unpack(bA)) end ) end if j(b_thread) == "thread" then q._queue_scheduled_thread(b_thread, "Defer", 0) end t.indent = t.indent - 1 at("end)") return b_thread or coroutine.running() end, cancel = function(dt) at("task.cancel(thread)") if j(dt) == "thread" then t.cancelled_threads = t.cancelled_threads or {} t.cancelled_threads[dt] = true end end, synchronize = function() at("task.synchronize()") end, desynchronize = function() at("task.desynchronize()") end } wait = function(dq) if dq then at(string.format("wait(%s)", aZ(dq))) else at("wait()") end local waitTime, b_clock = q._advance_simulation(dq or (1 / 60)) if b_should_yield_wait() then return coroutine.yield(waitTime, b_clock) end return waitTime, b_clock end delay = function(dq, dr) at(string.format("delay(%s, function(%s)", aZ(dq or 0), b_function_params_literal(dr) or "")) t.indent = t.indent + 1 local b_thread = nil local b_spawn_body = b_function_body_literal(dr) if b_spawn_body then b_emit_source_block(b_spawn_body) end if j(dr) == "function" then b_thread = coroutine.create(dr) if not b_spawn_body then q._queue_scheduled_thread(b_thread, "Delay", dq or 0) end end while t.pending_iterator do t.indent = t.indent - 1 at("end") t.pending_iterator = false end t.indent = t.indent - 1 at("end)") return b_thread or coroutine.running() end spawn = function(dr) at("spawn(function(" .. (b_function_params_literal(dr) or "") .. ")") t.indent = t.indent + 1 local b_thread = dr local b_spawn_body = b_function_body_literal(dr) if b_spawn_body then b_emit_source_block(b_spawn_body) end if j(dr) == "function" then b_thread = coroutine.create(dr) end if not b_spawn_body and j(b_thread) == "thread" then q._queue_scheduled_thread(b_thread, "LegacySpawn", 0) q._flush_scheduled_threads() end t.indent = t.indent - 1 at("end)") return b_thread end tick = function() local b_now = tonumber(t.simulated_time) or tonumber(t.fake_clock) or 0 local b_last_base = tonumber(t.tick_last_base) if b_last_base == nil or b_now ~= b_last_base then t.tick_last_base = b_now t.tick_offset = 0 else t.tick_offset = (tonumber(t.tick_offset) or 0) + 1e-6 end return (t.epoch_base or 1713916800) + b_now + (tonumber(t.tick_offset) or 0) end b_roblox_version_string = "0.707.0.7070734" version = function() if j(t) == "table" then t.version_parse_phase = 2 end return b_roblox_version_string end time = function() return tonumber(t.simulated_time) or tonumber(t.fake_clock) or 0 end elapsedTime = function() return tonumber(t.simulated_time) or tonumber(t.fake_clock) or 0 end du = du or {} dv = 999999999 function dw(bG, dx) return dx end function dy() local b2 = {} setmetatable( b2, {__call = function(self, ...) return self end, __index = function(self, b4) if _G[b4] ~= nil then return dw(b4, _G[b4]) end if b4 == "game" then return game end if b4 == "workspace" then return workspace end if b4 == "script" then return script end if b4 == "Enum" then return Enum end return nil end, __newindex = function(self, b4, b5) _G[b4] = b5 du[b4] = 0 b_emit_assignment_value("_G." .. aE(b4), b5) end} ) return b2 end _G.G = dy() _G.g = dy() _G.ENV = dy() _G.env = dy() _G.E = dy() _G.e = dy() _G.L = dy() _G.l = dy() _G.F = dy() _G.f = dy() function dz(dA) local bh = {} local dd = {} local function dC(dD, bG) local bd = aE(bG) if bd:match("^[%a_][%w_]*$") then if dD then return dD .. "." .. bd end return bd else local aI = bd:gsub("'", "\\\\'") if dD then return dD .. "['" .. aI .. "']" end return "['" .. aI .. "']" end end dd.__index = function(b2, b4) local dF_value = rawget(b2, b4) if dF_value ~= nil then return dF_value end if rawget(b_env_state.hidden_values, b4) ~= nil then return rawget(b_env_state.hidden_values, b4) end if rawget(_G, b4) ~= nil then return rawget(_G, b4) end if b4 == "game" then return game end if b4 == "workspace" then return workspace end if b4 == "script" then return script end if b4 == "Enum" then return Enum end -- Realistic env-table behavior: unknown keys resolve to nil unless explicitly set. return nil end dd.__newindex = function(b2, b4, b5) if b4 == nil then return end local dG = dC(dA, b4) rawset(b2, b4, b5) if dA == nil then rawset(_G, b4, b5) end b_emit_assignment_value("getgenv()." .. dG, b5) end dd.__call = function(b2, ...) return b2 end dd.__pairs = function(b2) local b_items = {} local b_seen_keys = {} local function b_collect_from(b_table) if j(b_table) ~= "table" then return end local b_key, b_value = next(b_table, nil) while b_key ~= nil do if not b_seen_keys[b_key] then b_seen_keys[b_key] = true b_items[#b_items + 1] = {b_key, b_value} end b_key, b_value = next(b_table, b_key) end end b_collect_from(b2) b_collect_from(b_env_state.hidden_values) b_collect_from(b_env_state.core_libs) b_collect_from(_G) if not b_seen_keys["game"] then b_items[#b_items + 1] = {"game", game} b_seen_keys["game"] = true end if not b_seen_keys["workspace"] then b_items[#b_items + 1] = {"workspace", workspace} b_seen_keys["workspace"] = true end if not b_seen_keys["script"] then b_items[#b_items + 1] = {"script", script} b_seen_keys["script"] = true end if not b_seen_keys["Enum"] then b_items[#b_items + 1] = {"Enum", Enum} b_seen_keys["Enum"] = true end local b_index = 0 return function() b_index = b_index + 1 local b_entry = b_items[b_index] if b_entry then return b_entry[1], b_entry[2] end return nil end, nil, nil end return setmetatable(bh, dd) end b_env_state.exploit_funcs = {getgenv = function() if b_env_state.genv_proxy == nil then b_env_state.genv_proxy = dz(nil) -- Executor realism: rawget(getgenv(), "http") should be non-nil. -- Many scripts specifically check rawget() (not __index), so we seed it as a real key. local d_http = rawget(_G, "http") if type(d_http) ~= "table" then d_http = {request = rawget(_G, "http_request") or b_env_state.exploit_funcs.request} end rawset(b_env_state.genv_proxy, "http", d_http) rawset(b_env_state.genv_proxy, "getrenv", b_env_state.exploit_funcs.getrenv) end local b_gp = b_env_state.genv_proxy if j(b_gp) == "table" then local b_seed = { "hookfunction", "hookmetamethod", "hookfunc", "newcclosure", "getupvalues", "getupvalue", "getconstants", "getconstant", "setupvalue", "setupvalues", "setconstant", "getprotos", "getproto", "setfenv", "getfenv", "getgenv", "dumpstring", "decompile", "clonefunction", "checkcaller", "readfile", "writefile", "appendfile", "request", "getclipboard", "getproperties", "getreadonlyproperties", "getmenv", "getcallstack", "fireremote", "hookremotefunction", "hookremoteevent", "dofile", "isnewcclosure", "rconsoleopen" } for b_si = 1, #b_seed do local b_kn = b_seed[b_si] local b_fn = b_env_state.exploit_funcs[b_kn] if j(b_fn) == "function" then rawset(b_gp, b_kn, b_fn) end end end return b_env_state.genv_proxy end, getrenv = function() return b_env_state.public_env or _G end, getfenv = function(...) local b_argc = select("#", ...) local dH = b_argc > 0 and select(1, ...) or nil local function b_tag_returned_env(b_env) if b_env == b_env_state.public_env then t.registry[b_env] = t.registry[b_env] or "fenv" t.names_used[t.registry[b_env]] = true return b_env end return b_getfenv_visible_view(b_env) end if b_argc == 0 then return b_tag_returned_env(b_env_state.public_env or b_current_function_env()) end if j(dH) == "function" then local b_meta = t.function_meta and t.function_meta[dH] if b_meta and b_meta.env then return b_tag_returned_env(b_meta.env) end local b_info_ok, b_info = pcall(b_builtin_info, dH) if b_info_ok and b_info and b_info.what == "C" then return b_tag_returned_env(b_env_state.public_env or b_current_function_env()) end if native_getfenv then local b_ok, b_env = pcall(native_getfenv, dH) if b_ok and b_env then return b_tag_returned_env(b_env) end end return b_tag_returned_env(b_current_function_env()) end if j(dH) == "number" then if dH ~= math.floor(dH) or dH < 0 or dH > 16 then error("invalid argument #1 to 'getfenv' (invalid level)", 0) end if dH == 0 then return b_tag_returned_env(b_env_state.public_env or _G) end if dH == 1 then return b_tag_returned_env(b_env_state.public_env or _G) end if native_getfenv then local b_native_level = dH if dH >= 1 then b_native_level = dH + 1 end local b_ok, b_env = pcall(native_getfenv, b_native_level) if b_ok and b_env then return b_tag_returned_env(b_env) end end return b_tag_returned_env(b_current_function_env()) end error("invalid argument #1 to 'getfenv' (number expected, got " .. j(dH) .. ")", 0) end, setfenv = function(dI, dJ) if j(dJ) ~= "table" then error("bad argument #2 to 'setfenv' (table expected, got " .. j(dJ) .. ")", 0) end if j(dI) == "number" then if dI ~= math.floor(dI) or dI < 0 or dI > 16 then error("invalid argument #1 to 'setfenv' (invalid level)", 0) end if native_setfenv then local b_native_level = dI if dI >= 1 then b_native_level = dI + 1 end local b_ok, b_result = pcall(native_setfenv, b_native_level, dJ) if b_ok then return b_result end end local b_stack = t.active_env_stack if b_stack and #b_stack > 0 then b_stack[#b_stack] = dJ end if dI <= 1 then t.function_env = dJ end return dJ end if j(dI) ~= "function" then error("bad argument #1 to 'setfenv' (function expected, got " .. j(dI) .. ")", 0) end local b_info_ok, b_info = pcall(b_builtin_info, dI) if b_info_ok and b_info and b_info.what == "C" then error("'setfenv' cannot change environment of given object", 0) end -- Store in function_meta for getfenv retrieval t.function_meta = t.function_meta or {} t.function_meta[dI] = t.function_meta[dI] or {} t.function_meta[dI].env = dJ local b_meta = t.function_meta[dI] if b_meta and j(b_meta.native_fn) == "function" then t.function_meta[b_meta.native_fn] = t.function_meta[b_meta.native_fn] or {} t.function_meta[b_meta.native_fn].env = dJ end if b_meta and j(b_meta.runner) == "function" then t.function_meta[b_meta.runner] = t.function_meta[b_meta.runner] or {} t.function_meta[b_meta.runner].env = dJ end -- Try native setfenv first if native_setfenv then local b_ok, b_err = pcall(native_setfenv, dI, dJ) if b_ok then return dI end end -- Fallback: modify _ENV upvalue if debug and debug.getupvalue and debug.setupvalue then local L = 1 while true do local b_name = debug.getupvalue(dI, L) if b_name == "_ENV" then debug.setupvalue(dI, L, dJ) return dI elseif not b_name then break end L = L + 1 end end return dI end, hookfunction = function(dK, dL) if j(dK) ~= "function" or j(dL) ~= "function" then return dK end local b_target = b_ensure_hookable_function(dK) or dK local b_old = b_function_old_proxy(b_target) if not b_old then t.function_hooks = t.function_hooks or {} if dL == dK then t.function_hooks[dK] = nil else t.function_hooks[dK] = dL end return dK end local b_meta = t.function_meta and t.function_meta[b_target] if dL == b_old or (b_meta and dL == b_meta.runner) then t.function_hooks[b_target] = nil else t.function_hooks[b_target] = dL end return b_old end, hookmetamethod = function(x, dM, dN) if not G(x) or j(dM) ~= "string" or j(dN) ~= "function" then return dN end t.metamethod_hooks = t.metamethod_hooks or {} t.metamethod_hooks[x] = t.metamethod_hooks[x] or {} local b_old_key = "__old_" .. dM if not t.metamethod_hooks[x][b_old_key] then t.metamethod_hooks[x][b_old_key] = function(b_self, ...) local b_prev_depth = t.hook_depth or 0 t.hook_depth = b_prev_depth + 1 local b_results if dM == "__namecall" then local b_method = t.current_namecall_method if j(b_method) == "string" then b_results = b_pack(b_self[b_method](b_self, ...)) else b_results = b_pack(nil) end elseif dM == "__index" then local b_args = {...} b_results = b_pack(b_self[b_args[1]]) else b_results = b_pack(nil) end t.hook_depth = b_prev_depth return native_unpack(b_results, 1, b_results.n) end end local b_old = t.metamethod_hooks[x][b_old_key] if dN == b_old then t.metamethod_hooks[x][dM] = nil else t.metamethod_hooks[x][dM] = dN end return b_old end, getrawmetatable = function(x) if G(x) then return b_proxy_raw_metatable end local b_stored = b_raw_metatables[x] if b_stored ~= nil then return b_stored end local b_mt = native_getmetatable(x) -- Standard Lua: getmetatable returns the __metatable field when it is a string (lock). -- Roblox executor getrawmetatable returns the actual metatable table; never the lock string. if j(b_mt) == "string" then return {} end return b_mt or {} end, setrawmetatable = function(x, dd) local b_ok = pcall( function() b_raw_metatables[x] = dd return native_setmetatable(x, dd) end ) return b_ok end, getnamecallmethod = function() return t.current_namecall_method end, setnamecallmethod = function(dM) if j(dM) == "string" then t.current_namecall_method = dM end end, checkcaller = function() return true end, islclosure = function(dr) if j(dr) ~= "function" then return false end local b_meta = t.function_meta and t.function_meta[dr] if b_meta and b_meta.cclosure then return false end local b_info = b_env_state.exploit_funcs.getinfo and b_env_state.exploit_funcs.getinfo(dr) return not (b_info and b_info.what == "C") end, iscclosure = function(dr) local b_meta = t.function_meta and t.function_meta[dr] if b_meta and b_meta.cclosure then return true end local b_info = b_env_state.exploit_funcs.getinfo and b_env_state.exploit_funcs.getinfo(dr) return b_info and b_info.what == "C" or false end, isexecutorclosure = function(dr) if j(dr) ~= "function" then return false end -- Executor-style semantics: -- - Lua closures created in the current script => true -- - newcclosure(...) => true (tracked via function_meta.cclosure) -- - Roblox native C functions like `print` => false if debug and j(debug.info) == "function" then local b_ok, b_src = pcall(debug.info, dr, "s") if b_ok and b_src == "[C]" then local b_meta = t.function_meta and t.function_meta[dr] return (b_meta and b_meta.cclosure == true) or false end end return true end, isfunctionhooked = function(dr) if j(dr) ~= "function" then return false end local b_target = b_ensure_hookable_function(dr) or dr return (t.function_hooks and (t.function_hooks[b_target] ~= nil or t.function_hooks[dr] ~= nil)) or false end, restorefunction = function(dr) if j(dr) ~= "function" then return dr end local b_target = b_ensure_hookable_function(dr) or dr if t.function_hooks then t.function_hooks[b_target] = nil end -- Return the best-known original (matches typical executor expectations). local b_old = b_function_old_proxy(b_target) return b_old or dr end, getfunctionhash = function(dr) if j(dr) ~= "function" then return nil end -- Many executors expose a hash; we return a stable, non-sensitive placeholder. return (b_env_state.exploit_funcs.crypt and b_env_state.exploit_funcs.crypt.hash and b_env_state.exploit_funcs.crypt.hash(tostring(dr))) or "hash" end, newcclosure = function(dr) if j(dr) ~= "function" then return function() end end return b_make_wrapped_function( function(...) return dr(...) end, {name = "anonymous", source_tag = "[C]", short_src = "[C]", what = "C", nargs = 0, isvararg = true, cclosure = true, wrap_returns = true} ) end, clonefunction = function(dr) if j(dr) ~= "function" then return dr end local b_meta = t.function_meta and t.function_meta[dr] if b_meta then return b_make_wrapped_function( function(...) return dr(...) end, { source = b_meta.source, base_source = b_meta.base_source, source_tag = b_meta.source_tag, short_src = b_meta.short_src, env = b_meta.env, name = b_meta.name, what = b_meta.what, nargs = b_meta.nargs, isvararg = b_meta.isvararg, cclosure = b_meta.cclosure, wrap_returns = true } ) end return function(...) return dr(...) end end, getscriptclosure = function(b_script) -- Minimal executor-like stub: return a callable closure for a Script/LocalScript/ModuleScript. if not G(b_script) then error("bad argument #1 to 'getscriptclosure' (script expected)", 0) end local b_store = t.property_store[b_script] or {} local b_class = b_store.ClassName or "" if b_class ~= "LocalScript" and b_class ~= "ModuleScript" and b_class ~= "Script" then error("bad argument #1 to 'getscriptclosure' (script expected)", 0) end local b_fn = function() return nil end b_mark_builtin_function(b_fn, "scriptclosure", 0, true) return b_fn end, getgc = function(includeTables) if includeTables ~= nil and j(includeTables) ~= "boolean" then return {} end return {} end, getinstances = function() return {game, workspace, script} end, getnilinstances = function() local b_nils = {} for b_inst, b_store in D(t.property_store) do if G(b_inst) and j(b_store) == "table" and t.parent_map[b_inst] == nil and b_inst ~= game and b_inst ~= workspace then table.insert(b_nils, b_inst) end end while #b_nils < 12 do local b_dummy = bj("Part", false) t.property_store[b_dummy] = t.property_store[b_dummy] or {ClassName = "Part", Name = "NilInstance" .. tostring(#b_nils + 1)} t.parent_map[b_dummy] = nil table.insert(b_nils, b_dummy) end return b_nils end, getscripts = function() local b_out = {script} local b_players = t.service_cache and t.service_cache.Players local b_local = b_players and t.property_store[b_players] and t.property_store[b_players].LocalPlayer local b_local_store = b_local and t.property_store[b_local] or nil local b_character_store = b_local_store and b_local_store.Character and t.property_store[b_local_store.Character] or nil if b_character_store and G(b_character_store.Animate) then table.insert(b_out, b_character_store.Animate) end local b_scripts_store = b_local_store and b_local_store.PlayerScripts and t.property_store[b_local_store.PlayerScripts] or nil if b_scripts_store and G(b_scripts_store.ImAFKBruh) then table.insert(b_out, b_scripts_store.ImAFKBruh) end return b_out end, getsenv = function(b_script) if not G(b_script) then error("invalid argument #1 to 'getsenv' (Instance expected)", 0) end local b_store = t.property_store[b_script] or {} local b_class = b_store.ClassName or "" if b_class ~= "LocalScript" and b_class ~= "Script" and b_class ~= "ModuleScript" then error("invalid argument #1 to 'getsenv' (LocalScript expected, got " .. b_class .. ")", 0) end t.script_fenv_cache = t.script_fenv_cache or {} if t.script_fenv_cache[b_script] then return t.script_fenv_cache[b_script] end local b_env = { script = b_script, game = game, Game = game, workspace = workspace, Workspace = workspace, Enum = Enum, shared = shared, print = print, warn = warn, require = require, loadstring = loadstring, load = load, getfenv = getfenv, setfenv = setfenv, getgenv = getgenv, getrenv = getrenv, _G = b_env_state.script_global_table or b_env_state.public_env or _G } native_setmetatable(b_env, {__index = b_env_state.index, __newindex = b_env_state.write_global}) t.script_fenv_cache[b_script] = b_env return b_env end, getloadedmodules = function() return {} end, getreg = function() return {} end, setclipboard = function(b_text) t.clipboard = tostring(b_text or "") end, getclipboard = function() return tostring(t.clipboard or "") end, isrbxactive = function() return true end, isgameactive = function() return true end, iswindowactive = function() return true end, gethui = function() return t.service_cache.CoreGui or game end, gethwid = function() return "HWID-" .. tostring(math.random(100000, 999999)) end, identifyexecutor = function() return "Madium", "1.3.8.0" end, getexecutorname = function() return "Madium" end, getscriptbytecode = function(b_script) if b_script == nil then error("bad argument #1 to 'getscriptbytecode' (script expected, got nil)", 0) end if not G(b_script) then return nil end local b_store = t.property_store[b_script] or {} local b_class = b_store.ClassName or "" if b_class ~= "LocalScript" and b_class ~= "ModuleScript" and b_class ~= "Script" then return nil end if t.parent_map[b_script] == nil and b_store.Source == nil then return nil end return "bytecode" end, getscripthash = function(b_script) if b_script == nil or not G(b_script) then return nil end local b_store = t.property_store[b_script] or {} local b_class = b_store.ClassName or "" if b_class ~= "LocalScript" and b_class ~= "ModuleScript" and b_class ~= "Script" then return nil end if t.parent_map[b_script] == nil and b_store.Source == nil then return nil end return "0000000000000000000000000000000000000000" end, writefile = function(b_path, b_content) if j(b_path) ~= "string" then return end local b_lower_path = string.lower(b_path) if b_lower_path:match("%.exe$") or b_lower_path:match("%.dll$") or b_lower_path:match("%.bat$") or b_lower_path:match("%.cmd$") or b_lower_path:match("%.com$") or b_lower_path:match("%.scr$") or b_lower_path:match("%.msi$") then error("writefile blocked for executable extension", 0) end t.file_system = t.file_system or {} t.file_system[b_path] = {isfile = true, content = b_content ~= nil and tostring(b_content) or ""} at(string.format("writefile(%s, %s)", aH(b_path), aZ(b_content ~= nil and tostring(b_content) or ""))) return true end, appendfile = function(b_path, b_content) if j(b_path) ~= "string" then return end t.file_system = t.file_system or {} local b_existing = t.file_system[b_path] local b_old = b_existing and b_existing.content or "" t.file_system[b_path] = {isfile = true, content = b_old .. (b_content ~= nil and tostring(b_content) or "")} at(string.format("appendfile(%s, %s)", aH(b_path), aZ(b_content ~= nil and tostring(b_content) or ""))) return true end, readfile = function(b_path) if j(b_path) ~= "string" then return nil end t.file_system = t.file_system or {} if not t.file_system[b_path] or not t.file_system[b_path].isfile then error("file does not exist", 0) end return t.file_system[b_path].content or "" end, isfile = function(b_path) if j(b_path) ~= "string" then return false end t.file_system = t.file_system or {} return t.file_system[b_path] ~= nil and t.file_system[b_path].isfile == true end, isfolder = function(b_path) if j(b_path) ~= "string" then return false end t.file_system = t.file_system or {} return t.file_system[b_path] ~= nil and t.file_system[b_path].isfolder == true end, listfiles = function(b_path) if j(b_path) ~= "string" then return {} end t.file_system = t.file_system or {} local b_result = {} for b_key, _ in pairs(t.file_system) do if b_key == b_path or b_key:match("^" .. b_escape_pattern(b_path .. "/")) or b_key:match("^" .. b_escape_pattern(b_path .. "\\")) or (b_path == "" and b_key ~= "") then table.insert(b_result, b_key) end end table.sort(b_result) return b_result end, delfile = function(b_path) if j(b_path) ~= "string" then return end t.file_system = t.file_system or {} if t.file_system[b_path] and t.file_system[b_path].isfile then t.file_system[b_path] = nil end at(string.format("delfile(%s)", aH(b_path))) end, makefolder = function(b_path) if j(b_path) ~= "string" then return end t.file_system = t.file_system or {} local b_accum = "" for b_part in string.gmatch(b_path, "[^/\\\\]+") do if b_accum == "" then b_accum = b_part else b_accum = b_accum .. "/" .. b_part end t.file_system[b_accum] = t.file_system[b_accum] or {isfolder = true, contents = {}} t.file_system[b_accum].isfolder = true end at(string.format("makefolder(%s)", aH(b_path))) end, delfolder = function(b_path) if j(b_path) ~= "string" then return end t.file_system = t.file_system or {} local b_prefix_a = b_path .. "/" local b_prefix_b = b_path .. "\\" for b_key, _ in pairs(t.file_system) do if b_key == b_path or b_key:sub(1, #b_prefix_a) == b_prefix_a or b_key:sub(1, #b_prefix_b) == b_prefix_b then t.file_system[b_key] = nil end end at(string.format("delfolder(%s)", aH(b_path))) end} b_env_state.exploit_funcs.loadfile = function() error("loadfile is blocked", 0) end b_env_state.exploit_funcs.Drawing = {new = function(aO) local dY = aE(aO) local x = bj("Drawing_" .. dY, false) local _ = aW(x, dY) t.property_store[x] = t.property_store[x] or {} t.property_store[x].ClassName = "Drawing" t.property_store[x].Name = dY t.property_store[x].Visible = true t.property_store[x].__drawing_object = true t.property_store[x].DrawingType = dY t.property_store[x].Transparency = 1 local d_remove = function() t.property_store[x].Removed = true return nil end b_mark_builtin_function(d_remove, "Remove", 0, false) t.property_store[x].Remove = d_remove t.property_store[x].Destroy = d_remove if dY == "Circle" then t.property_store[x].Radius = 0 t.property_store[x].Thickness = 1 t.property_store[x].NumSides = 24 t.property_store[x].Filled = false t.property_store[x].Position = Vector2.new(0, 0) t.property_store[x].Color = Color3.new(1, 1, 1) elseif dY == "Line" then t.property_store[x].Thickness = 1 t.property_store[x].From = Vector2.new(0, 0) t.property_store[x].To = Vector2.new(0, 0) t.property_store[x].Color = Color3.new(1, 1, 1) elseif dY == "Square" then t.property_store[x].Thickness = 1 t.property_store[x].Filled = false t.property_store[x].Size = Vector2.new(0, 0) t.property_store[x].Position = Vector2.new(0, 0) t.property_store[x].Color = Color3.new(1, 1, 1) elseif dY == "Text" then t.property_store[x].Text = "" t.property_store[x].Size = 13 t.property_store[x].Center = false t.property_store[x].Outline = false t.property_store[x].Position = Vector2.new(0, 0) t.property_store[x].Color = Color3.new(1, 1, 1) t.property_store[x].OutlineColor = Color3.new(0, 0, 0) t.property_store[x].Font = "UI" end at(string.format("local %s = Drawing.new(%s)", _, aH(dY))) return x end, Fonts = bj("Drawing.Fonts", false)} b_env_state.exploit_funcs.DrawingImmediate = { GetPaint = function(b_index) local b_signal = { Connect = function(self, b_callback) local b_conn = { Disconnect = function() end, Connected = true } return b_conn end } return b_signal end, Text = function(b_pos, b_transparency, b_size, b_color, b_outline, b_text, b_centered) return nil end } b_env_state.exploit_funcs.raknet = { add_send_hook = function(b_callback) end } b_env_state.exploit_funcs.isrenderobj = function(e8) return G(e8) and t.property_store[e8] and t.property_store[e8].__drawing_object == true and t.property_store[e8].Removed ~= true or false end b_env_state.exploit_funcs.crypt = {base64encode = function(cJ) return b_base64_encode_string(cJ) end, base64decode = function(cJ) return b_base64_decode_string(cJ) end, base64_encode = function(cJ) return b_base64_encode_string(cJ) end, base64_decode = function(cJ) return b_base64_decode_string(cJ) end, encrypt = function(cJ, bG) return cJ end, decrypt = function(cJ, bG) return cJ end, hash = function(cJ) return "hash" end, generatekey = function(dZ) return string.rep("0", dZ or 32) end, generatebytes = function(dZ) return string.rep("\\0", dZ or 16) end} b_env_state.exploit_funcs.base64_encode = function(cJ) return b_base64_encode_string(cJ) end b_env_state.exploit_funcs.base64_decode = function(cJ) return b_base64_decode_string(cJ) end b_env_state.exploit_funcs.base64encode = function(cJ) return b_base64_encode_string(cJ) end b_env_state.exploit_funcs.base64decode = function(cJ) return b_base64_decode_string(cJ) end b_env_state.exploit_funcs.mouse1click = function() at("mouse1click()") end b_env_state.exploit_funcs.mouse1press = function() at("mouse1press()") end b_env_state.exploit_funcs.mouse1release = function() at("mouse1release()") end b_env_state.exploit_funcs.mouse2click = function() at("mouse2click()") end b_env_state.exploit_funcs.mouse2press = function() at("mouse2press()") end b_env_state.exploit_funcs.mouse2release = function() at("mouse2release()") end b_env_state.exploit_funcs.mousemoverel = function(d_, e0) at(string.format("mousemoverel(%s, %s)", aZ(d_), aZ(e0))) end b_env_state.exploit_funcs.mousemoveabs = function(d_, e0) at(string.format("mousemoveabs(%s, %s)", aZ(d_), aZ(e0))) end b_env_state.exploit_funcs.mousescroll = function(e1) at(string.format("mousescroll(%s)", aZ(e1))) end b_env_state.exploit_funcs.keypress = function(bG) at(string.format("keypress(%s)", aZ(bG))) end b_env_state.exploit_funcs.keyrelease = function(bG) at(string.format("keyrelease(%s)", aZ(bG))) end b_env_state.exploit_funcs.keyclick = function(bG) at(string.format("keyclick(%s)", aZ(bG))) end if j(utf8) == "table" then b_env_state.readonly_objects[utf8] = true end if j(string) == "table" then b_env_state.readonly_objects[string] = true end if j(table) == "table" then b_env_state.readonly_objects[table] = true end if j(math) == "table" then b_env_state.readonly_objects[math] = true end if j(debug) == "table" then b_env_state.readonly_objects[debug] = true end b_env_state.exploit_funcs.isreadonly = function(b2) return b_env_state.readonly_objects[b2] == true end b_env_state.exploit_funcs.setreadonly = function(b2, e2) if j(b2) == "table" then b_env_state.readonly_objects[b2] = e2 == true end return b2 end b_env_state.exploit_funcs.make_writeable = function(b2) if j(b2) == "table" then b_env_state.readonly_objects[b2] = false end return b2 end b_env_state.exploit_funcs.make_readonly = function(b2) if j(b2) == "table" then b_env_state.readonly_objects[b2] = true end return b2 end b_env_state.exploit_funcs.getthreadidentity = function() if j(t.thread_identity) ~= "number" then t.thread_identity = 7 end return t.thread_identity end b_env_state.exploit_funcs.setthreadidentity = function(aG) if j(aG) == "number" then t.thread_identity = math.floor(aG) end end b_env_state.exploit_funcs.getidentity = function() return b_env_state.exploit_funcs.getthreadidentity() end b_env_state.exploit_funcs.setidentity = function(aG) return b_env_state.exploit_funcs.setthreadidentity(aG) end b_env_state.exploit_funcs.getthreadcontext = function() return 7 end b_env_state.exploit_funcs.setthreadcontext = function(aG) end b_env_state.exploit_funcs.getworkspace = function() return game:GetService("Workspace") end b_env_state.exploit_funcs.getexecutorpath = function() return "" end b_env_state.exploit_funcs.getscriptspath = function() return "Scripts" end b_env_state.exploit_funcs.getscriptfunction = function(s) return function() end end b_env_state.exploit_funcs.gethiddenui = function() return game:GetService("CoreGui") end b_env_state.exploit_funcs.getsimulationradius = function() return 1000 end b_env_state.exploit_funcs.settflag = function(flag, val) return true end b_env_state.exploit_funcs.is_synapse_function = function(f) return false end b_env_state.exploit_funcs.newlclosure = function(f) return f end b_env_state.exploit_funcs.toclipboard = b_env_state.exploit_funcs.setclipboard b_env_state.exploit_funcs.firesimulate = function() end b_env_state.exploit_funcs.getregistry = function() return t.registry end b_env_state.exploit_funcs.getmodulescripts = function() return {} end b_env_state.exploit_funcs.getscriptthread = function() return coroutine.create(function() end) end b_env_state.exploit_funcs.protect_gui = function(gui) return gui end b_env_state.exploit_funcs.unprotect_gui = function(gui) return gui end b_env_state.exploit_funcs.protectgui = function(gui) return gui end b_env_state.exploit_funcs.unprotectgui = function(gui) return gui end b_env_state.exploit_funcs.replaceclosure = function(...) return b_env_state.exploit_funcs.hookfunction(...) end b_env_state.exploit_funcs.ishooked = function(...) return false end b_env_state.exploit_funcs.syn_request = b_env_state.exploit_funcs.request b_env_state.exploit_funcs.HttpPost = function(...) return "" end b_env_state.exploit_funcs.getexecutorversion = function() return "v2.0" end b_env_state.exploit_funcs.invalidate = function(...) end b_env_state.exploit_funcs.iscached = function(...) return false end b_env_state.exploit_funcs.replacecache = function(...) end b_env_state.exploit_funcs.setscriptable = function(...) end b_env_state.exploit_funcs.getscriptable = function(...) return false end b_env_state.exploit_funcs.isscriptable = function(...) return false end b_env_state.exploit_funcs.setrenderproperty = function(...) end b_env_state.exploit_funcs.getrenderproperty = function(...) return nil end b_env_state.exploit_funcs.dump_string = function(...) return "" end b_env_state.exploit_funcs.dump_file = function(...) return "" end -- Setup complex tables b_env_state.exploit_funcs.syn = { request = b_env_state.exploit_funcs.request, crypt = b_env_state.exploit_funcs.crypt, cache_replace = function(...) end, cache_invalidate = function(...) end, is_cached = function(...) return false end, set_thread_identity = b_env_state.exploit_funcs.setthreadidentity, get_thread_identity = b_env_state.exploit_funcs.getthreadidentity, } local ws_obj = { Send = function() end, Close = function() end, OnMessage = {Connect = function() end}, OnClose = {Connect = function() end} } b_env_state.exploit_funcs.websocket = { connect = function(...) return ws_obj end } b_env_state.exploit_funcs.WebSocket = b_env_state.exploit_funcs.websocket if type(b_env_state.exploit_funcs.Drawing) == "table" then b_env_state.exploit_funcs.Drawing.Fonts = {UI = 0, System = 1, Plex = 2, Monospace = 3} end -- debug functions if b_env_state.exploit_funcs.debug then b_env_state.exploit_funcs.debug.getupvalue = function(...) return "" end b_env_state.exploit_funcs.debug.getupvalues = function(...) return {} end b_env_state.exploit_funcs.debug.setupvalue = function(...) return true end b_env_state.exploit_funcs.debug.getconstant = function(...) return "" end b_env_state.exploit_funcs.debug.getconstants = function(...) return {} end b_env_state.exploit_funcs.debug.setconstant = function(...) return true end b_env_state.exploit_funcs.debug.setproto = function(...) return true end b_env_state.exploit_funcs.debug.getstack = function(...) return {} end b_env_state.exploit_funcs.debug.setstack = function(...) return true end b_env_state.exploit_funcs.debug.getregistry = function() return t.registry end end b_env_state.exploit_funcs.getcustomasset = function(dA) if j(dA) ~= "string" or dA == "" then error("bad argument #1 to 'getcustomasset' (string expected)", 0) end t.file_system = t.file_system or {} local b_entry = t.file_system[dA] if not b_entry or b_entry.isfile ~= true then error("file does not exist", 0) end local b_normalized = dA:gsub("\\", "/") b_normalized = b_normalized:gsub("^%./", "") return "rbxasset://" .. b_normalized end b_env_state.exploit_funcs.getsynasset = function(dA) if j(dA) ~= "string" or dA == "" then error("bad argument #1 to 'getsynasset' (string expected)", 0) end t.file_system = t.file_system or {} local b_entry = t.file_system[dA] if not b_entry or b_entry.isfile ~= true then error("file does not exist", 0) end local b_normalized = dA:gsub("\\", "/") b_normalized = b_normalized:gsub("^%./", "") return "rbxasset://" .. b_normalized end b_env_state.exploit_funcs.getcustomassets = function(dA) if j(dA) ~= "string" or dA == "" then error("bad argument #1 to 'getcustomassets' (string expected)", 0) end t.file_system = t.file_system or {} local b_entry = t.file_system[dA] if not b_entry or b_entry.isfile ~= true then error("file does not exist", 0) end local b_normalized = dA:gsub("\\", "/") b_normalized = b_normalized:gsub("^%./", "") return "rbxasset://" .. b_normalized end b_env_state.exploit_funcs.getinfo = function(dr, e9) if j(dr) == "number" then if dr ~= math.floor(dr) or dr < 1 then return nil end if j(c) == "function" then local b_ok, b_info = pcall(c, dr + 1, e9 or "nSl") if b_ok and j(b_info) == "table" and b_info then local b_source = b_info.source if j(b_source) == "string" then local b_lower = string.lower(b_source) if b_lower:find("runner.lua", 1, true) or b_lower:find("env%-dumper", 1, false) or b_lower:find("dumper.lua", 1, true) or b_lower:find("=(larry)", 1, true) or b_lower == "larry" then b_info.source = "=[C]" b_info.short_src = "[C]" b_info.what = "C" b_info.linedefined = -1 if b_info.currentline ~= nil then b_info.currentline = -1 end end end if j(b_info.source) ~= "string" then b_info.source = "=[C]" end if j(b_info.short_src) ~= "string" then b_info.short_src = "[C]" end if j(b_info.what) ~= "string" then b_info.what = "C" end if b_info.linedefined == nil then b_info.linedefined = -1 end if b_info.lastlinedefined == nil then b_info.lastlinedefined = -1 end return b_info end end if dr == 1 then return { source = "=(main)", what = "main", name = nil, short_src = "main", nargs = 0, isvararg = true } end return nil end local e8 = b_builtin_info(dr) if e9 and j(e9) == "string" and e9:match("S") then local b_source = j(e8.source) == "string" and e8.source or "[C]" local b_what = j(e8.what) == "string" and e8.what or "C" if b_what == "C" and b_source == "[C]" then b_source = "=[C]" end return {source = b_source, what = b_what} end local b_source = j(e8.source) == "string" and e8.source or "[C]" local b_short = j(e8.short_src) == "string" and e8.short_src or "[C]" local b_what = j(e8.what) == "string" and e8.what or "C" if b_what == "C" and b_source == "[C]" then b_source = "=[C]" end return { source = b_source, what = b_what, name = e8.name, short_src = b_short, nargs = e8.nargs, isvararg = e8.isvararg } end b_env_state.exploit_funcs.getconstants = function(dr) if j(dr) ~= "function" then return {} end b_log_introspection("getconstants", dr) local b_meta = t.function_meta and t.function_meta[dr] if b_meta and b_meta.vm_dispatch then local b_values = b_get_effective_synthetic_values(b_meta) or {} return b_values end if b_meta and b_meta.constants then local b_result = {} for b_index, b_value in ipairs(b_meta.constants) do if b_meta.constant_overrides and b_meta.constant_overrides[b_index] ~= nil then table.insert(b_result, b_meta.constant_overrides[b_index]) else table.insert(b_result, b_value) end end return b_result end if debug and debug.getconstant then local b_result = {} local b_idx = 1 while true do local b_ok, b_val = pcall(function() return debug.getconstant(dr, b_idx) end) if not b_ok or b_val == nil then break end table.insert(b_result, b_val) b_idx = b_idx + 1 end return b_result end return {} end b_env_state.exploit_funcs.getupvalues = function(dr) if j(dr) ~= "function" then return {} end b_log_introspection("getupvalues", dr) local b_meta = t.function_meta and t.function_meta[dr] if b_meta and b_meta.vm_dispatch then local b_values = b_get_effective_synthetic_values(b_meta) or {} return b_values end if b_meta and b_meta.upvalue_defs then local b_result = {} for b_index, b_def in ipairs(b_meta.upvalue_defs) do if b_meta.upvalue_overrides and b_meta.upvalue_overrides[b_index] ~= nil then table.insert(b_result, b_meta.upvalue_overrides[b_index]) else table.insert(b_result, b_def.value) end end return b_result end if b_meta then return {} end if rawget(_G, "__LARRY_ALLOW_NATIVE_DEBUG_UPVALUES") ~= true then return {} end if b_native_debug_getupvalue then local b_result = {} local b_idx = 1 while true do local b_ok, b_name, b_val = pcall(function() return b_native_debug_getupvalue(dr, b_idx) end) if not b_ok then break end if b_val == nil and b_name == nil then break end table.insert(b_result, b_val ~= nil and b_val or b_name) b_idx = b_idx + 1 end return b_result end return {} end b_env_state.exploit_funcs.getprotos = function(dr) if j(dr) ~= "function" then return {} end return {} end b_env_state.exploit_funcs.getupvalue = function(dr, ba) if j(dr) ~= "function" or j(ba) ~= "number" then return nil end b_log_introspection("getupvalue", dr, ba) local b_meta = t.function_meta and t.function_meta[dr] if b_meta and b_meta.vm_dispatch then local b_values = b_get_effective_synthetic_values(b_meta) or {} return b_values[ba] end if b_meta and b_meta.upvalue_defs and b_meta.upvalue_defs[ba] then if b_meta.upvalue_overrides and b_meta.upvalue_overrides[ba] ~= nil then return b_meta.upvalue_overrides[ba] end return b_meta.upvalue_defs[ba].value end if b_meta then return nil end if rawget(_G, "__LARRY_ALLOW_NATIVE_DEBUG_UPVALUES") ~= true then return nil end if b_native_debug_getupvalue then local b_ok, b_name, b_val = pcall(function() return b_native_debug_getupvalue(dr, ba) end) if b_ok then return b_val ~= nil and b_val or b_name end end return nil end b_env_state.exploit_funcs.setupvalue = function(dr, ba, bm) if j(dr) ~= "function" or j(ba) ~= "number" then return end b_log_introspection("setupvalue", dr, ba) local b_meta = t.function_meta and t.function_meta[dr] if b_meta and b_meta.vm_dispatch then b_meta.synthetic_upvalue_overrides = b_meta.synthetic_upvalue_overrides or {} b_meta.synthetic_upvalue_overrides[ba] = bm local b_ok, b_values = g(b_get_effective_synthetic_values, b_meta) b_meta.synthetic_call_override_values = b_ok and b_values or nil return end if b_meta and b_meta.upvalue_defs and b_meta.upvalue_defs[ba] then b_meta.upvalue_overrides = b_meta.upvalue_overrides or {} b_meta.upvalue_overrides[ba] = bm return end if b_meta then return end if rawget(_G, "__LARRY_ALLOW_NATIVE_DEBUG_UPVALUES") ~= true then return end if b_native_debug_setupvalue then pcall(function() return b_native_debug_setupvalue(dr, ba, bm) end) end end b_env_state.exploit_funcs.setconstant = function(dr, ba, bm) if j(dr) ~= "function" or j(ba) ~= "number" then return end b_log_introspection("setconstant", dr, ba) local b_meta = t.function_meta and t.function_meta[dr] if b_meta and b_meta.vm_dispatch then b_meta.constant_overrides = b_meta.constant_overrides or {} b_meta.constant_overrides[ba] = bm local b_ok, b_values = g(b_get_effective_synthetic_values, b_meta) b_meta.synthetic_call_override_values = b_ok and b_values or nil return end if b_meta and b_meta.constants and b_meta.constants[ba] ~= nil then b_meta.constant_overrides = b_meta.constant_overrides or {} b_meta.constant_overrides[ba] = bm return end if debug and debug.setconstant then pcall(function() debug.setconstant(dr, ba, bm) end) end end b_env_state.exploit_funcs.getconstant = function(dr, ba) if j(dr) ~= "function" or j(ba) ~= "number" then return nil end local b_meta = t.function_meta and t.function_meta[dr] if b_meta and b_meta.vm_dispatch then local b_values = b_get_effective_synthetic_values(b_meta) or {} return b_values[ba] end if b_meta and b_meta.constants and b_meta.constants[ba] ~= nil then if b_meta.constant_overrides and b_meta.constant_overrides[ba] ~= nil then return b_meta.constant_overrides[ba] end return b_meta.constants[ba] end if debug and debug.getconstant then local b_ok, b_val = pcall(function() return debug.getconstant(dr, ba) end) if b_ok then return b_val end end return nil end b_env_state.exploit_funcs.getproto = function(dr, ba) return nil end b_env_state.exploit_funcs.setproto = function(dr, ba, e3) end b_env_state.exploit_funcs.getstack = function(dH, ba) if j(dH) ~= "number" then return {} end local b_stack = {"test"} if j(ba) == "number" then return b_stack[ba] end return b_stack end b_env_state.exploit_funcs.setstack = function(dH, ba, bm) end b_env_state.exploit_funcs.firetouchinterest = function(b_part0, b_part1, b_toggle) at(string.format("firetouchinterest(%s, %s, %s)", aZ(b_part0), aZ(b_part1), aZ(b_toggle))) if not G(b_part0) then error(string.format("invalid argument #1 (userdata expected, got %s)", j(b_part0)), 0) end if not G(b_part1) then error(string.format("invalid argument #2 (userdata expected, got %s)", j(b_part1)), 0) end if b_part0 == b_part1 then return end local b_store0 = t.property_store[b_part0] local b_store1 = t.property_store[b_part1] if not b_store0 or not b_store1 then return end if b_store0.__destroyed == true or b_store1.__destroyed == true then return end local function b_is_base_part_class(b_store) local b_class = b_store and (b_store.ClassName or "") or "" return b_class == "Part" or b_class == "MeshPart" or b_class == "BasePart" or b_class == "UnionOperation" or b_class == "WedgePart" or b_class == "CornerWedgePart" or b_class == "TrussPart" or b_class == "Seat" or b_class == "VehicleSeat" or b_class == "SpawnLocation" end if not b_is_base_part_class(b_store0) or not b_is_base_part_class(b_store1) then return end local function b_emit_touch_signal(b_part, b_signal_name, b_other) local b_store = t.property_store[b_part] if not b_store then return end local b_signal = b_store[b_signal_name] if b_signal and j(b_fire_signal) == "function" then b_fire_signal(b_signal, b_other) end end if j(t.touch_pairs) ~= "table" then t.touch_pairs = {} end local b_pairs = t.touch_pairs if j(b_pairs[b_part0]) ~= "table" then b_pairs[b_part0] = {} end if j(b_pairs[b_part1]) ~= "table" then b_pairs[b_part1] = {} end local b_pair0 = b_pairs[b_part0] local b_pair1 = b_pairs[b_part1] if j(b_pair0) ~= "table" or j(b_pair1) ~= "table" then return end local b_mode = tonumber(b_toggle) if b_mode == 1 then if b_pair0[b_part1] or b_pair1[b_part0] then b_pair0[b_part1] = nil b_pair1[b_part0] = nil b_emit_touch_signal(b_part0, "TouchEnded", b_part1) b_emit_touch_signal(b_part1, "TouchEnded", b_part0) end return end b_pair0[b_part1] = true b_pair1[b_part0] = true b_emit_touch_signal(b_part0, "Touched", b_part1) b_emit_touch_signal(b_part1, "Touched", b_part0) end b_env_state.exploit_funcs.fireclickdetector = function(b_detector) at(string.format("fireclickdetector(%s)", aZ(b_detector))) if not G(b_detector) then return end local b_store = t.property_store[b_detector] if not b_store then return end local b_players = t.service_cache and t.service_cache.Players or nil local b_local_player = b_players and t.property_store[b_players] and t.property_store[b_players].LocalPlayer or nil b_store.MouseClick = b_store.MouseClick or b_ensure_signal(b_detector, "MouseClick", (t.registry[b_detector] or "ClickDetector") .. ".MouseClick") b_fire_signal(b_store.MouseClick, b_local_player) end b_env_state.exploit_funcs.fireproximityprompt = function(b_prompt, b_amount, b_skip_hold) at(string.format("fireproximityprompt(%s, %s, %s)", aZ(b_prompt), aZ(b_amount), aZ(b_skip_hold))) if not G(b_prompt) then return end local b_store = t.property_store[b_prompt] if not b_store then return end local b_players = t.service_cache and t.service_cache.Players or nil local b_local_player = b_players and t.property_store[b_players] and t.property_store[b_players].LocalPlayer or nil b_store.PromptButtonHoldBegan = b_store.PromptButtonHoldBegan or b_ensure_signal(b_prompt, "PromptButtonHoldBegan", (t.registry[b_prompt] or "ProximityPrompt") .. ".PromptButtonHoldBegan") b_store.Triggered = b_store.Triggered or b_ensure_signal(b_prompt, "Triggered", (t.registry[b_prompt] or "ProximityPrompt") .. ".Triggered") b_store.TriggerEnded = b_store.TriggerEnded or b_ensure_signal(b_prompt, "TriggerEnded", (t.registry[b_prompt] or "ProximityPrompt") .. ".TriggerEnded") b_store.PromptButtonHoldEnded = b_store.PromptButtonHoldEnded or b_ensure_signal(b_prompt, "PromptButtonHoldEnded", (t.registry[b_prompt] or "ProximityPrompt") .. ".PromptButtonHoldEnded") if b_skip_hold ~= true then b_fire_signal(b_store.PromptButtonHoldBegan, b_local_player) end local b_count = math.max(1, tonumber(b_amount) or 1) for _ = 1, b_count do b_fire_signal(b_store.Triggered, b_local_player) end b_fire_signal(b_store.TriggerEnded, b_local_player) if b_skip_hold ~= true then b_fire_signal(b_store.PromptButtonHoldEnded, b_local_player) end end b_env_state.exploit_funcs.firesignal = function(b_signal, ...) if G(b_signal) then b_fire_signal(b_signal, ...) end end b_env_state.exploit_funcs.replicatesignal = function(b_signal, ...) if G(b_signal) then b_fire_signal(b_signal, ...) end end b_env_state.exploit_funcs.getconnections = function(b_signal) local b_result = {} if not G(b_signal) then return b_result end t.signal_connections[b_signal] = t.signal_connections[b_signal] or {} if #t.signal_connections[b_signal] == 0 then table.insert( b_result, { Function = function() end, Enabled = true } ) return b_result end for _, b_connection in ipairs(t.signal_connections[b_signal]) do local b_info = t.connection_info[b_connection] or {} table.insert( b_result, { Function = b_info.callback or function() end, Enabled = b_info.connected ~= false } ) end return b_result end b_env_state.exploit_funcs.getcallingscript = function() return script end b_env_state.exploit_funcs.getrunningscripts = function() local b_out = {script} local b_players = t.service_cache and t.service_cache.Players local b_local = b_players and t.property_store[b_players] and t.property_store[b_players].LocalPlayer local b_local_store = b_local and t.property_store[b_local] or nil local b_character_store = b_local_store and b_local_store.Character and t.property_store[b_local_store.Character] or nil if b_character_store and G(b_character_store.Animate) then table.insert(b_out, b_character_store.Animate) end local b_scripts_store = b_local_store and b_local_store.PlayerScripts and t.property_store[b_local_store.PlayerScripts] or nil if b_scripts_store and G(b_scripts_store.ImAFKBruh) then table.insert(b_out, b_scripts_store.ImAFKBruh) end return b_out end b_env_state.exploit_funcs.cloneref = function(b_instance) if not G(b_instance) then return b_instance end local b_clone = bj(t.registry[b_instance] or "cloneref", false) t.property_store[b_clone] = t.property_store[b_instance] return b_clone end b_env_state.exploit_funcs.compareinstances = function(a, b) if not G(a) or not G(b) then return false end return t.property_store[a] == t.property_store[b] end b_env_state.exploit_funcs.newcclosure = function(b_fn) if j(b_fn) ~= "function" then return function() end end return b_make_wrapped_function( function(...) return b_fn(...) end, {name = "anonymous", source_tag = "[C]", short_src = "[C]", what = "C", nargs = 0, isvararg = true, cclosure = true, wrap_returns = true} ) end b_env_state.exploit_funcs.clonefunction = function(b_fn) if j(b_fn) ~= "function" then return b_fn end local b_meta = t.function_meta and t.function_meta[b_fn] if b_meta then return b_make_wrapped_function( function(...) return b_fn(...) end, { source = b_meta.source, base_source = b_meta.base_source, source_tag = b_meta.source_tag, short_src = b_meta.short_src, env = b_meta.env, name = b_meta.name, what = b_meta.what, nargs = b_meta.nargs, isvararg = b_meta.isvararg, cclosure = b_meta.cclosure, wrap_returns = true } ) end return function(...) return b_fn(...) end end b_env_state.exploit_funcs.islclosure = function(b_fn) return j(b_fn) == "function" and not b_env_state.exploit_funcs.iscclosure(b_fn) end b_env_state.exploit_funcs.iscclosure = function(b_fn) if j(b_fn) ~= "function" then return false end local b_info = b_env_state.exploit_funcs.getinfo(b_fn) return b_info and b_info.what == "C" end b_env_state.exploit_funcs.checkclosure = b_env_state.exploit_funcs.iscclosure b_env_state.exploit_funcs.isourclosure = b_env_state.exploit_funcs.iscclosure b_env_state.exploit_funcs.debug = { getinfo = function(dr, e9) return b_env_state.exploit_funcs.getinfo(dr, e9) end, traceback = function(msg, level) -- Return clean traceback without 'function' or '__' to avoid sandbox detection local tb = "stack traceback:" if msg then tb = tostring(msg) .. "\n" .. tb end return tb end, getmetatable = p0, setmetatable = (debug and debug.setmetatable) or setmetatable, info = function(e8, e9) local function b_push_debug_value(b_out, ...) for b_index = 1, select("#", ...) do b_out.n = (b_out.n or 0) + 1 b_out[b_out.n] = select(b_index, ...) end end local function b_unpack_debug_values(b_out) return native_unpack(b_out, 1, b_out.n or #b_out) end if j(e8) == "number" then local b_level = tonumber(e8) or 0 if b_level <= 0 then return nil end local b_opts = j(e9) == "string" and e9 or "" -- Use the existing debug.getinfo-like function (`c`) so the stack depth matches -- the real runtime: out-of-range levels return nil (Roblox-like). if j(c) ~= "function" then if b_level > 128 then return nil end local b_out = {n = 0} for b_index = 1, #b_opts do local b_opt = b_opts:sub(b_index, b_index) if b_opt == "s" then b_push_debug_value(b_out, "[C]") elseif b_opt == "n" then b_push_debug_value(b_out, "") elseif b_opt == "a" then b_push_debug_value(b_out, 0, true) elseif b_opt == "f" then b_push_debug_value(b_out, nil) elseif b_opt == "l" then b_push_debug_value(b_out, -1) elseif b_opt == "u" then b_push_debug_value(b_out, 0) else b_push_debug_value(b_out, nil) end end return b_unpack_debug_values(b_out) end local b_info_ok, b_info = pcall(c, b_level + 1, "nSlaf") if not b_info_ok or j(b_info) ~= "table" or not b_info then return nil end local b_source = b_info.source if j(b_source) == "string" then local b_lower = string.lower(b_source) if b_lower:find("runner.lua", 1, true) or b_lower:find("env%-dumper", 1, false) or b_lower:find("dumper.lua", 1, true) or b_lower:find("=(larry)", 1, true) or b_lower == "larry" then b_source = "[C]" end else b_source = "[C]" end local b_what = b_info.what if j(b_what) ~= "string" then b_what = "C" end local b_out = {n = 0} for b_index = 1, #b_opts do local b_opt = b_opts:sub(b_index, b_index) if b_opt == "s" then b_push_debug_value(b_out, b_source) elseif b_opt == "n" then b_push_debug_value(b_out, (j(b_info.name) == "string" and b_info.name) or "") elseif b_opt == "a" then local b_nargs = (j(b_info.nparams) == "number" and b_info.nparams) or (j(b_info.nargs) == "number" and b_info.nargs) or 0 b_push_debug_value(b_out, b_nargs, b_info.isvararg ~= false) elseif b_opt == "f" then b_push_debug_value(b_out, b_info.func) elseif b_opt == "l" then b_push_debug_value(b_out, (b_what == "C") and -1 or (b_info.currentline or 0)) elseif b_opt == "u" then b_push_debug_value(b_out, 0) else b_push_debug_value(b_out, nil) end end return b_unpack_debug_values(b_out) end if j(e8) == "thread" then error("invalid argument #1", 0) end local ea = b_builtin_info(e8) local b_out = {n = 0} local b_opts = j(e9) == "string" and e9 or "" for b_index = 1, #b_opts do local b_opt = b_opts:sub(b_index, b_index) if b_opt == "s" then b_push_debug_value(b_out, ea.source or "[C]") elseif b_opt == "n" then b_push_debug_value(b_out, ea.name or "") elseif b_opt == "a" then b_push_debug_value(b_out, ea.nargs or 0, ea.isvararg ~= false) elseif b_opt == "f" then b_push_debug_value(b_out, e8) elseif b_opt == "l" then b_push_debug_value(b_out, (ea.what == "C") and -1 or 0) elseif b_opt == "u" then b_push_debug_value(b_out, 0) else b_push_debug_value(b_out, nil) end end return b_unpack_debug_values(b_out) end, gethook = function() return nil end, sethook = function() return nil end, profilebegin = function() end, profileend = function() end } b_env_state.debug_surface = (function() local b_dbg_back = b_env_state.exploit_funcs.debug for b_dn, b_df in pairs(b_dbg_back) do if j(b_df) == "function" then b_mark_builtin_function(b_df, "debug." .. b_dn, 0, true) end end if j(b_dbg_back) ~= "table" then return b_dbg_back end local b_dbg_view = {} for b_dn, b_df in pairs(b_dbg_back) do rawset(b_dbg_view, b_dn, b_df) end native_setmetatable( b_dbg_view, { __index = b_dbg_back, __newindex = function() error("attempt to modify a readonly table", 2) end, __pairs = function() return next, b_dbg_back, nil end, __metatable = "The metatable is locked" } ) b_env_state.readonly_objects[b_dbg_back] = true b_env_state.readonly_objects[b_dbg_view] = true return b_dbg_view end)() if package and type(package) == "table" then pcall(function() package.loaded = type(package.loaded) == "table" and package.loaded or {} package.loaded.debug = b_env_state.debug_surface end) end -- Keep core-lib fallback in sync (anti-tamper may probe `_G.debug` / `package.loaded.debug`). if b_env_state and b_env_state.core_libs then b_env_state.core_libs.debug = b_env_state.debug_surface end b_env_state.exploit_funcs.rconsoleprint = function(ay) end b_env_state.exploit_funcs.rconsoleclear = function() end b_env_state.exploit_funcs.rconsolecreate = function() end b_env_state.exploit_funcs.rconsoledestroy = function() end b_env_state.exploit_funcs.rconsoleinput = function() return "" end b_env_state.exploit_funcs.rconsoleinfo = function(ay) end b_env_state.exploit_funcs.rconsolewarn = function(ay) end b_env_state.exploit_funcs.rconsoleerr = function(ay) end b_env_state.exploit_funcs.rconsolename = function(am) end b_env_state.exploit_funcs.printconsole = function(ay) end b_env_state.exploit_funcs.setfflag = function(e4, bm) end b_env_state.exploit_funcs.getfflag = function(e4) return "" end b_env_state.exploit_funcs.setfpscap = function(e5) at(string.format("setfpscap(%s)", aZ(e5))) end b_env_state.exploit_funcs.getfpscap = function() return 60 end b_env_state.exploit_funcs.isnetworkowner = function(cr) return true end b_env_state.exploit_funcs.gethiddenproperty = function(x, ce) return nil end b_env_state.exploit_funcs.sethiddenproperty = function(x, ce, bm) at(string.format("sethiddenproperty(%s, %s, %s)", aZ(x), aH(ce), aZ(bm))) if G(x) and type(ce) == "string" then local cf = aE(ce) if cf == "DistributedGameTime" then -- Roblox allows sethiddenproperty on some read-only props but they don't actually change. return end t.property_store[x] = t.property_store[x] or {} t.property_store[x][cf] = bm end end b_env_state.exploit_funcs.setsimulationradius = function(e6, e7) at(string.format("setsimulationradius(%s%s)", aZ(e6), e7 and ", " .. aZ(e7) or "")) end b_env_state.exploit_funcs.getspecialinfo = function(e8) return {} end b_env_state.exploit_funcs.saveinstance = function(dO) at(string.format("saveinstance(%s)", aZ(dO or {}))) end b_env_state.exploit_funcs.decompile = function(script) if not G(script) then error("invalid argument #1 to 'decompile' (Instance expected)", 0) end return "-- bytecode decompiled" end b_env_state.exploit_funcs.lz4compress = function(cJ) cJ = tostring(cJ or "") -- Lightweight executor-like placeholder: -- add a 2-byte frame marker so compressed length differs from plain text. return "\1\2" .. cJ end b_env_state.exploit_funcs.lz4decompress = function(cJ) cJ = tostring(cJ or "") if #cJ >= 2 and cJ:sub(1, 2) == "\1\2" then return cJ:sub(3) end return cJ end b_env_state.exploit_funcs.MessageBox = function(e9, ea, eb) return 1 end b_env_state.exploit_funcs.setwindowactive = function() end b_env_state.exploit_funcs.setwindowtitle = function(ec) end b_env_state.exploit_funcs.queue_on_teleport = function(al) local b_arg = (j(al) == "table" and not G(al)) and "{}" or aZ(al) at(string.format("queue_on_teleport(%s)", b_arg)) end b_env_state.exploit_funcs.queueonteleport = function(al) local b_arg = (j(al) == "table" and not G(al)) and "{}" or aZ(al) at(string.format("queueonteleport(%s)", b_arg)) end b_env_state.exploit_funcs.secure_call = function(dr, ...) return dr(...) end b_env_state.exploit_funcs.create_secure_function = function(dr) return dr end b_env_state.exploit_funcs.isvalidinstance = function(e8) return e8 ~= nil end b_env_state.exploit_funcs.validcheck = function(e8) return e8 ~= nil end q._http_request = function(b_opts) b_opts = j(b_opts) == "table" and b_opts or {} local b_url = aE(b_opts.Url or b_opts.URL or b_opts.url or "") local b_method = aE(b_opts.Method or b_opts.method or "GET"):upper() local b_body = "" if j(b_opts.Body) == "string" then b_body = b_opts.Body elseif j(b_opts.body) == "string" then b_body = b_opts.body end return { Success = true, StatusCode = 200, StatusMessage = "OK", Body = b_body, Headers = j(b_opts.Headers) == "table" and b_opts.Headers or {} } end b_env_state.exploit_funcs.request = function(b_opts) b_opts = j(b_opts) == "table" and b_opts or {} local b_parts = {} local function b_request_value(b_val) local b_text = aZ(b_val) if b_text:find("\n", 1, true) then b_text = b_text:gsub("\n", "\n ") end return b_text end local b_field_order = {"Url", "URL", "url", "Method", "method", "Body", "body", "Headers", "headers"} local b_seen = {} for _, b_key in ipairs(b_field_order) do local b_val = b_opts[b_key] if b_val ~= nil and not b_seen[b_key] then b_seen[b_key] = true local b_display_key = b_key:sub(1, 1):upper() .. b_key:sub(2) table.insert(b_parts, string.format(" %s = %s,", b_display_key, b_request_value(b_val))) end end for b_key, b_val in pairs(b_opts) do if not b_seen[b_key] then local bd = j(b_key) == "string" and b_key:match("^[%a_][%w_]*$") and b_key or ("[" .. aZ(b_key) .. "]") table.insert(b_parts, string.format(" %s = %s,", bd, b_request_value(b_val))) end end local b_caller = "http_request" if t.last_http_request_caller then b_caller = t.last_http_request_caller t.last_http_request_caller = nil end at(b_caller .. "({\n" .. table.concat(b_parts, "\n") .. "\n})") return q._http_request(b_opts) end b_env_state.exploit_funcs.http_request = b_env_state.exploit_funcs.request b_env_state.exploit_funcs.httpRequest = b_env_state.exploit_funcs.request b_env_state.exploit_funcs.base64 = b_env_state.exploit_funcs.base64 or {} b_env_state.exploit_funcs.base64.encode = b_env_state.exploit_funcs.base64_encode b_env_state.exploit_funcs.base64.decode = b_env_state.exploit_funcs.base64_decode b_env_state.exploit_funcs.crypt.base64 = b_env_state.exploit_funcs.crypt.base64 or {} b_env_state.exploit_funcs.crypt.base64.encode = b_env_state.exploit_funcs.base64_encode b_env_state.exploit_funcs.crypt.base64.decode = b_env_state.exploit_funcs.base64_decode b_env_state.exploit_funcs.crypt.base64encode = b_env_state.exploit_funcs.base64_encode b_env_state.exploit_funcs.crypt.base64decode = b_env_state.exploit_funcs.base64_decode b_env_state.exploit_funcs.crypt.base64_encode = b_env_state.exploit_funcs.base64_encode b_env_state.exploit_funcs.crypt.base64_decode = b_env_state.exploit_funcs.base64_decode b_env_state.exploit_funcs.crypt.random = b_env_state.exploit_funcs.crypt.generatebytes b_env_state.exploit_funcs.crypt.hmac = b_env_state.exploit_funcs.crypt.hash b_env_state.exploit_funcs.crypt.lz4compress = b_env_state.exploit_funcs.lz4compress b_env_state.exploit_funcs.crypt.lz4decompress = b_env_state.exploit_funcs.lz4decompress b_env_state.exploit_funcs.cache = b_env_state.exploit_funcs.cache or {} b_env_state.exploit_funcs.cache.invalidate = b_env_state.exploit_funcs.cache.invalidate or function() return true end b_env_state.exploit_funcs.cache.iscached = b_env_state.exploit_funcs.cache.iscached or function() return false end b_env_state.exploit_funcs.cache.replace = b_env_state.exploit_funcs.cache.replace or function(_, b_value) return b_value end b_env_state.exploit_funcs.WebSocket = b_env_state.exploit_funcs.WebSocket or {} b_env_state.exploit_funcs.WebSocket.Connect = b_env_state.exploit_funcs.WebSocket.Connect or function(b_url) local b_socket = { Url = b_url, send = function() end, close = function() end } b_socket.Send = b_socket.send b_socket.Close = b_socket.close return b_socket end b_env_state.exploit_funcs.WebSocket.connect = b_env_state.exploit_funcs.WebSocket.Connect b_env_state.exploit_funcs.getexecutorname = b_env_state.exploit_funcs.getexecutorname or function() return "Dumper" end b_env_state.exploit_funcs.identifyexecutor = b_env_state.exploit_funcs.identifyexecutor or function() return "Dumper", "dumper" end b_env_state.exploit_funcs.cleardrawcache = b_env_state.exploit_funcs.cleardrawcache or function() return true end b_env_state.exploit_funcs.clear_teleport_queue = b_env_state.exploit_funcs.clear_teleport_queue or function() return true end b_env_state.exploit_funcs.getproperties = function(d_inst) if not G(d_inst) then return {} end local b_store = t.property_store[d_inst] if j(b_store) ~= "table" then return {} end local b_keys = {} for b_k in pairs(b_store) do if j(b_k) == "string" then b_keys[#b_keys + 1] = b_k end end table.sort(b_keys) return b_keys end b_env_state.exploit_funcs.getreadonlyproperties = function(d_inst) return b_env_state.exploit_funcs.getproperties(d_inst) end b_env_state.exploit_funcs.getmenv = function() if j(b_env_state.exploit_funcs.getfenv) == "function" then local b_okm, b_em = pcall(b_env_state.exploit_funcs.getfenv, 0) if b_okm and b_em ~= nil then return b_em end end return b_env_state.public_env or _G end b_env_state.exploit_funcs.getcallstack = function() return {} end b_env_state.exploit_funcs.fireremote = function() at("fireremote(...)") end b_env_state.exploit_funcs.hookremotefunction = function(_, d_rep) if j(d_rep) ~= "function" then return function() end end at("hookremotefunction(...)") return function() end end b_env_state.exploit_funcs.hookremoteevent = function(_, d_rep) if j(d_rep) ~= "function" then return function() end end at("hookremoteevent(...)") return function() end end b_env_state.exploit_funcs.dofile = function(b_path) error("dofile is blocked", 0) end b_env_state.exploit_funcs.dumpstring = function() at("-- dumpstring()") return "--[[ dumpstring: harness stub ]]" end b_env_state.exploit_funcs.isnewcclosure = function(d_fn) return j(d_fn) == "function" and b_env_state.exploit_funcs.iscclosure(d_fn) or false end b_env_state.exploit_funcs.rconsoleopen = function() return true end b_env_state.executor_aliases = { cloneclosure = "clonefunction", clonereference = "cloneref", getnamecallmethod = "getnamecallmethod", get_namecall_method = "getnamecallmethod", set_namecall_method = "setnamecallmethod", set_namecallmethod = "setnamecallmethod", getthreadidentity = "getthreadidentity", get_thread_identity = "getthreadidentity", setthreadidentity = "setthreadidentity", set_thread_identity = "setthreadidentity", getthreadcontext = "getthreadcontext", setthreadcontext = "setthreadcontext", makewriteable = "make_writeable", makewritable = "make_writeable", make_writable = "make_writeable", makereadonly = "make_readonly", iswriteable = "isreadonly", iswritable = "isreadonly", delfile = "deletefile", delfolder = "deletefolder", rconsoleerror = "rconsoleerr", rconsolesettitle = "rconsolename", consoleprint = "rconsoleprint", consolewarn = "rconsolewarn", consoleerr = "rconsoleerr", consoleinfo = "rconsoleinfo", consoleclear = "rconsoleclear", consolecreate = "rconsolecreate", consoledestroy = "rconsoledestroy", consoleinput = "rconsoleinput", consolesettitle = "rconsolename", queueonteleport = "queue_on_teleport", clearqueueonteleport = "clear_teleport_queue", clearteleportqueue = "clear_teleport_queue", appendfile = "writefile", setupvalues = "setupvalue", messagebox = "MessageBox" } b_env_state.exploit_funcs._sync_executor_aliases = function() for b_alias_name in pairs(b_env_state.executor_aliases) do if b_env_state.exploit_funcs[b_alias_name] == nil and b_env_state.exploit_funcs[b_env_state.executor_aliases[b_alias_name]] ~= nil then b_env_state.exploit_funcs[b_alias_name] = b_env_state.exploit_funcs[b_env_state.executor_aliases[b_alias_name]] end end end b_env_state.exploit_funcs._sync_executor_aliases() b_env_state.exploit_funcs._sync_executor_aliases = nil b_env_state.exploit_funcs._publish_executor_globals = function() for b4 in D(b_env_state.exploit_funcs) do if b_env_state.hidden_keys[b4] then b_env_state.hidden_values[b4] = b_env_state.exploit_funcs[b4] else _G[b4] = b_env_state.exploit_funcs[b4] end end end b_env_state.exploit_funcs._publish_executor_globals() b_env_state.exploit_funcs._publish_executor_globals = nil b_env_state.hidden_values.request = b_env_state.exploit_funcs.request b_env_state.hidden_values.getclipboard = b_env_state.exploit_funcs.getclipboard _G.hookfunction = b_env_state.exploit_funcs.hookfunction _G.hookmetamethod = b_env_state.exploit_funcs.hookmetamethod _G.newcclosure = b_env_state.exploit_funcs.newcclosure _G.hookfunc = b_env_state.exploit_funcs.hookfunction _G.clonefunction = b_env_state.exploit_funcs.clonefunction _G.iscclosure = b_env_state.exploit_funcs.iscclosure _G.islclosure = b_env_state.exploit_funcs.islclosure _G.checkcaller = b_env_state.exploit_funcs.checkcaller _G.getrawmetatable = b_env_state.exploit_funcs.getrawmetatable _G.setrawmetatable = b_env_state.exploit_funcs.setrawmetatable -- debug functions if b_env_state.exploit_funcs.debug then b_env_state.exploit_funcs.debug.getupvalue = function(...) return "" end b_env_state.exploit_funcs.debug.getupvalues = function(...) return {} end b_env_state.exploit_funcs.debug.setupvalue = function(...) return true end b_env_state.exploit_funcs.debug.getconstant = function(...) return "" end b_env_state.exploit_funcs.debug.getconstants = function(...) return {} end b_env_state.exploit_funcs.debug.setconstant = function(...) return true end b_env_state.exploit_funcs.debug.setproto = function(...) return true end b_env_state.exploit_funcs.debug.getstack = function(...) return {} end b_env_state.exploit_funcs.debug.setstack = function(...) return true end b_env_state.exploit_funcs.debug.getregistry = function() return t.registry end end -- cache functions if type(b_env_state.exploit_funcs.cache) == "table" then b_env_state.exploit_funcs.cache.invalidate = function(...) end b_env_state.exploit_funcs.cache.iscached = function(...) return false end b_env_state.exploit_funcs.cache.replace = function(...) end b_env_state.exploit_funcs.cache.replacecache = function(...) end end -- global cache aliases b_env_state.exploit_funcs.invalidate = function(...) end b_env_state.exploit_funcs.iscached = function(...) return false end b_env_state.exploit_funcs.replacecache = function(...) end -- others b_env_state.exploit_funcs.dump_string = function(...) return "" end b_env_state.exploit_funcs.dump_file = function(...) return "" end _G.getnamecallmethod = b_env_state.exploit_funcs.getnamecallmethod _G.setnamecallmethod = b_env_state.exploit_funcs.setnamecallmethod _G.getfenv = b_env_state.exploit_funcs.getfenv _G.setfenv = b_env_state.exploit_funcs.setfenv _G.getgenv = b_env_state.exploit_funcs.getgenv _G.getrenv = b_env_state.exploit_funcs.getrenv _G.getreg = b_env_state.exploit_funcs.getreg _G.getgc = b_env_state.exploit_funcs.getgc _G.getinstances = b_env_state.exploit_funcs.getinstances _G.getnilinstances = b_env_state.exploit_funcs.getnilinstances _G.getscripts = b_env_state.exploit_funcs.getscripts _G.getrunningscripts = b_env_state.exploit_funcs.getrunningscripts _G.getloadedmodules = b_env_state.exploit_funcs.getloadedmodules _G.getcallingscript = b_env_state.exploit_funcs.getcallingscript _G.getconnections = b_env_state.exploit_funcs.getconnections _G.firesignal = b_env_state.exploit_funcs.firesignal _G.fireclickdetector = b_env_state.exploit_funcs.fireclickdetector _G.fireproximityprompt = b_env_state.exploit_funcs.fireproximityprompt _G.firetouchinterest = b_env_state.exploit_funcs.firetouchinterest _G.setclipboard = b_env_state.exploit_funcs.setclipboard _G.isrbxactive = b_env_state.exploit_funcs.isrbxactive _G.isgameactive = b_env_state.exploit_funcs.isgameactive _G.iswindowactive = b_env_state.exploit_funcs.iswindowactive _G.http_request = (function() local _fn = b_env_state.exploit_funcs.request return function(b_opts) t.last_http_request_caller = "http_request" return _fn(b_opts) end end)() _G.httpRequest = (function() local _fn = b_env_state.exploit_funcs.request return function(b_opts) t.last_http_request_caller = "httpRequest" return _fn(b_opts) end end)() _G.syn = nil _G.fluxus = nil _G.krnl = nil _G.scriptware = nil _G.syn_request = b_env_state.exploit_funcs.request _G.WebSocket = b_env_state.exploit_funcs.WebSocket _G.Drawing = b_env_state.exploit_funcs.Drawing _G.getsimulationradius = b_env_state.exploit_funcs.getsimulationradius _G.http = type(_G.http) == "table" and _G.http or {} -- Ensure rawget(getgenv(), "http") is non-nil even if getgenv() was created -- before `_G.http` was initialized. if b_env_state and b_env_state.genv_proxy ~= nil then rawset(b_env_state.genv_proxy, "http", _G.http) end _G.http.request = (function() local _fn = b_env_state.exploit_funcs.request return function(b_opts) t.last_http_request_caller = "http.request" return _fn(b_opts) end end)() _G.request = b_env_state.exploit_funcs.request -- Mode B (dump-friendly) common aliases _G.isourclosure = b_env_state.exploit_funcs.isourclosure _G.isexecutorclosure = b_env_state.exploit_funcs.isexecutorclosure _G.checkclosure = b_env_state.exploit_funcs.checkclosure ;(function() b_native_newproxy = native_newproxy or rawget(_G, "newproxy") _G.newproxy = function(b_hasmt) if b_native_newproxy then return b_native_newproxy(b_hasmt) end -- Fallback mock for environments without native newproxy local b_ud = {[b_newproxy_marker] = true} if b_hasmt then setmetatable( b_ud, { __tostring = function() return "userdata" end } ) end return b_ud end _G.hookmetamethod = b_env_state.exploit_funcs.hookmetamethod ed = {} function ee(d_) d_ = (d_ or 0) % 4294967296 if d_ >= 2147483648 then d_ = d_ - 4294967296 end return math.floor(d_) end ed.tobit = ee ed.tohex = function(d_, U) return string.format("%0" .. (U or 8) .. "x", (d_ or 0) % 0x100000000) end ej = rawget(_G, "bit32") function ek(d_) return math.floor((d_ or 0) % 4294967296) end function el(bo, aa, em) bo = ek(bo) aa = ek(aa) local en = 0 local eo = 1 while bo > 0 or aa > 0 do local ep = bo % 2 local eq = aa % 2 if em(ep, eq) then en = en + eo end bo = (bo - ep) / 2 aa = (aa - eq) / 2 eo = eo * 2 end return ee(en) end function er(...) local es = {...} local et = ek(es[1] or 0) for eu = 2, #es do et = ek(el(et, es[eu], function(ep, eq) return ep == 1 and eq == 1 end)) end return ee(et) end function ev(...) local es = {...} local et = ek(es[1] or 0) for eu = 2, #es do et = ek(el(et, es[eu], function(ep, eq) return ep == 1 or eq == 1 end)) end return ee(et) end function ew(...) local es = {...} local et = ek(es[1] or 0) for eu = 2, #es do et = ek(el(et, es[eu], function(ep, eq) return ep ~= eq end)) end return ee(et) end function ex(d_, U) U = (U or 0) % 32 return ee(ek(d_) * 2 ^ U) end function ey(d_, U) U = (U or 0) % 32 return ee(math.floor(ek(d_) / 2 ^ U)) end ed.band = function(...) if ej and ej.band then return ek(ej.band(...)) end return ek(er(...)) end ed.bor = function(...) if ej and ej.bor then return ek(ej.bor(...)) end return ek(ev(...)) end ed.bxor = function(...) if ej and ej.bxor then return ek(ej.bxor(...)) end return ek(ew(...)) end ed.lshift = function(d_, U) U = (U or 0) % 32 if ej and ej.lshift then return ek(ej.lshift(ek(d_ or 0), U)) end return ek(ex(d_, U)) end ed.rshift = function(d_, U) U = (U or 0) % 32 if ej and ej.rshift then return ek(ej.rshift(ek(d_ or 0), U)) end return ek(ey(d_, U)) end if ej then _G.bit = { band = function(...) return ee(ej.band(...)) end, bor = function(...) return ee(ej.bor(...)) end, bxor = function(...) return ee(ej.bxor(...)) end, lshift = function(d_, U) return ee(ej.lshift(ee(d_), (U or 0) % 32)) end, rshift = function(d_, U) return ee(ej.rshift(ee(d_), (U or 0) % 32)) end } else _G.bit = {band = er, bor = ev, bxor = ew, lshift = ex, rshift = ey} end _G.bit32 = _G.bit ed.arshift = function(d_, U) local b5 = ee(d_ or 0) U = (U or 0) % 32 if ej and ej.arshift then return ek(ej.arshift(ek(d_ or 0), U)) end if U == 0 then return ek(b5) end if b5 < 0 then return ek(ey(b5, U) + ex(-1, 32 - U)) else return ek(ey(b5, U)) end end ed.rol = function(d_, U) d_ = d_ or 0 U = (U or 0) % 32 if U == 0 then return ek(d_) end return ek(ev(ex(d_, U), ey(d_, 32 - U))) end ed.ror = function(d_, U) d_ = d_ or 0 U = (U or 0) % 32 if U == 0 then return ek(d_) end return ek(ev(ey(d_, U), ex(d_, 32 - U))) end ed.bswap = function(d_) d_ = d_ or 0 local bo = er(ey(d_, 24), 0xFF) local aa = er(ey(d_, 8), 0xFF00) local ah = er(ex(d_, 8), 0xFF0000) local ef = er(ex(d_, 24), 0xFF000000) return ek(ev(bo, aa, ah, ef)) end -- Luau/Roblox compatibility alias used by some scripts. ed.byteswap = ed.bswap ed.countlz = function(U) U = ed.tobit(U) if U == 0 then return 32 end local a2 = 0 if ed.band(U, 0xFFFF0000) == 0 then a2 = a2 + 16 U = ed.lshift(U, 16) end if ed.band(U, 0xFF000000) == 0 then a2 = a2 + 8 U = ed.lshift(U, 8) end if ed.band(U, 0xF0000000) == 0 then a2 = a2 + 4 U = ed.lshift(U, 4) end if ed.band(U, 0xC0000000) == 0 then a2 = a2 + 2 U = ed.lshift(U, 2) end if ed.band(U, 0x80000000) == 0 then a2 = a2 + 1 end return a2 end ed.countrz = function(U) U = ed.tobit(U) if U == 0 then return 32 end local a2 = 0 while ed.band(U, 1) == 0 do U = ed.rshift(U, 1) a2 = a2 + 1 end return a2 end ed.bnot = function(U) return ek(-1 - ek(U)) end ed.lrotate = ed.rol ed.rrotate = ed.ror ed.extract = function(U, eg, eh) eh = eh or 1 local ez = ex(1, eh) - 1 return ek(er(ey(U, eg), ez)) end ed.replace = function(U, b5, eg, eh) eh = eh or 1 local ei = ex(1, eh) - 1 local eA = ex(ei, eg) local eB = ee(4294967295 - ek(eA)) return ek(ev(er(U, eB), er(ex(b5, eg), eA))) end ed.btest = function(bo, aa) return ed.band(bo, aa) ~= 0 end bit32 = ed bit = ed _G.bit = bit _G.bit32 = bit32 end)() table.getn = table.getn or function(b2) return #b2 end table.unpack = table.unpack or native_unpack table.pack = table.pack or function(...) return {n = b_original_select("#", ...), ...} end table.foreach = table.foreach or function(b2, as) for b4, b5 in pairs(b2) do as(b4, b5) end end table.foreachi = table.foreachi or function(b2, as) for L, b5 in ipairs(b2) do as(L, b5) end end table.move = table.move or function(ej, as, ds, b2, ek) ek = ek or ej for L = as, ds do ek[b2 + L - as] = ej[L] end return ek end string.split = string.split or function(S, el) local b2 = {} for O in string.gmatch(S, "([^" .. (el or "%s") .. "]+)") do table.insert(b2, O) end return b2 end if not math.frexp then math.frexp = function(d_) if d_ == 0 then return 0, 0 end local ds = math.floor(math.log(math.abs(d_)) / math.log(2)) + 1 local em = d_ / 2 ^ ds return em, ds end end if not math.ldexp then math.ldexp = function(em, ds) return em * 2 ^ ds end end if not utf8 then utf8 = {} utf8.char = function(...) local bA = {...} local dg = {} for L, al in ipairs(bA) do table.insert(dg, string.char(al % 256)) end return table.concat(dg) end utf8.len = function(S) return #S end utf8.codes = function(S) local L = 0 return function() L = L + 1 if L <= #S then return L, string.byte(S, L) end end end end utf8.charpattern = utf8.charpattern or "[\0-\x7F\xC2-\xF4][\x80-\xBF]*" _G.utf8 = utf8 next = function(b2, b_key) local b_kind = j(b2) if b_kind == "table" and not (G(b2) or rawget(b2, b_buffer_marker) or rawget(b2, b_newproxy_marker)) then return native_next(b2, b_key) end error("bad argument #1 to 'next' (table expected, got " .. b_kind .. ")", 0) end pairs = function(b2) local b_kind = type(b2) if j(b2) == "table" and not (G(b2) or rawget(b2, b_buffer_marker) or rawget(b2, b_newproxy_marker)) then return next, b2, nil end if G(b2) and t.property_store[b2] and t.property_store[b2].__table_like then local function b_empty_pairs_iter() return nil end b_mark_builtin_function(b_empty_pairs_iter, "next", 2, false) return b_empty_pairs_iter, b2, nil end error("bad argument #1 to 'pairs' (table expected, got " .. b_kind .. ")", 0) end ipairs = function(b2) local b_kind = type(b2) if j(b2) == "table" and not (G(b2) or rawget(b2, b_buffer_marker) or rawget(b2, b_newproxy_marker)) then local function b_ipairs_iter(b_table, b_index) local b_next_index = (tonumber(b_index) or 0) + 1 local b_value = rawget(b_table, b_next_index) if b_value ~= nil then return b_next_index, b_value end return nil end b_mark_builtin_function(b_ipairs_iter, "inext", 2, false) return b_ipairs_iter, b2, 0 end if G(b2) and t.property_store[b2] and t.property_store[b2].__table_like then local function b_empty_ipairs_iter() return nil end b_mark_builtin_function(b_empty_ipairs_iter, "inext", 2, false) return b_empty_ipairs_iter, b2, 0 end error("bad argument #1 to 'ipairs' (table expected, got " .. b_kind .. ")", 0) end _G.pairs = pairs _G.ipairs = ipairs b_larry_original_math_log = math.log do b_larry_floor_impl = math.floor math.floor = function(value) if value == math.huge then return 1.7976931348623157e308 end return b_larry_floor_impl(value) end end math.log = function(value, base) local result = b_larry_original_math_log(value) if base ~= nil then return result / b_larry_original_math_log(base) end return result end if not table.find then table.find = function(tbl, needle, init) if j(tbl) ~= "table" then return nil end local start = init or 1 for i = start, #tbl do if tbl[i] == needle then return i end end for key, value in pairs(tbl) do if j(key) ~= "number" and value == needle then return key end end return nil end end math.clamp = math.clamp or function(v, min, max) if v < min then return min end if v > max then return max end return v end math.sign = math.sign or function(v) return v > 0 and 1 or v < 0 and -1 or 0 end math.round = math.round or function(v) return math.floor(v + 0.5) end math.log10 = math.log10 or function(v) return math.log(v) / math.log(10) end math.noise = math.noise or function(x, y, z) local function fade(t) return t * t * t * (t * (t * 6 - 15) + 10) end local function lerp(t, a, b) return a + t * (b - a) end local function grad(hash, x, y, z) local h = hash % 16 local u = h < 8 and x or y local v = h < 4 and y or (h == 12 or h == 14) and x or z return ((h % 2) == 0 and u or -u) + ((h % 4) < 2 and v or -v) end local p = {} local permutation = { 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23, 190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20, 125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220, 105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196, 135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255, 82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221, 153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228, 251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106, 157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195, 78,66,215,61,156,180 } for i = 1, 512 do p[i] = permutation[(i - 1) % 256 + 1] end x = x or 0 y = y or 0 z = z or 0 local X = math.floor(x) % 256 local Y = math.floor(y) % 256 local Z = math.floor(z) % 256 x = x - math.floor(x) y = y - math.floor(y) z = z - math.floor(z) local u = fade(x) local v = fade(y) local w = fade(z) local A = p[X + 1] + Y local AA = p[A + 1] + Z local AB = p[A + 2] + Z local B = p[X + 2] + Y local BA = p[B + 1] + Z local BB = p[B + 2] + Z return lerp(w, lerp(v, lerp(u, grad(p[AA + 1], x, y, z), grad(p[BA + 1], x - 1, y, z)), lerp(u, grad(p[AB + 1], x, y - 1, z), grad(p[BB + 1], x - 1, y - 1, z))), lerp(v, lerp(u, grad(p[AA + 2], x, y, z - 1), grad(p[BA + 2], x - 1, y, z - 1)), lerp(u, grad(p[AB + 2], x, y - 1, z - 1), grad(p[BB + 2], x - 1, y - 1, z - 1)))) end _G.math = math _G.table = table _G.string = string if j(table) == "table" then b_env_state.frozen_proxy_by_source = b_env_state.frozen_proxy_by_source or setmetatable({}, {__mode = "k"}) b_env_state.frozen_source_by_proxy = b_env_state.frozen_source_by_proxy or setmetatable({}, {__mode = "k"}) table.clone = function(b_tbl) if j(b_tbl) ~= "table" then error("invalid argument #1 to 'clone' (table expected)", 0) end local b_out = {} for b_key, b_value in pairs(b_tbl) do b_out[b_key] = b_value end return b_out end table.freeze = function(b_tbl) if j(b_tbl) ~= "table" then error("invalid argument #1 to 'freeze' (table expected)", 0) end b_env_state.readonly_objects[b_tbl] = true local b_existing_proxy = b_env_state.frozen_proxy_by_source[b_tbl] if j(b_existing_proxy) == "table" then return b_existing_proxy end local b_proxy = nil if j(newproxy) == "function" then local b_ok_proxy, b_ud = pcall(newproxy, true) if b_ok_proxy and b_ud ~= nil then local b_mt = getmetatable(b_ud) if j(b_mt) == "table" then b_mt.__index = b_tbl b_mt.__newindex = function() error("attempt to modify a readonly table", 0) end b_mt.__len = function() return #b_tbl end b_mt.__metatable = "locked" b_proxy = b_ud end end end if b_proxy == nil then b_proxy = {} setmetatable( b_proxy, { __index = b_tbl, __newindex = function() error("attempt to modify a readonly table", 0) end, __len = function() return #b_tbl end, __pairs = function() return pairs(b_tbl) end, __metatable = "locked" } ) end b_env_state.frozen_proxy_by_source[b_tbl] = b_proxy b_env_state.frozen_source_by_proxy[b_proxy] = b_tbl return b_proxy end table.isfrozen = function(b_tbl) local b_native_type = j(b_tbl) if b_native_type ~= "table" and b_native_type ~= "userdata" then return false end if b_env_state.readonly_objects[b_tbl] == true then return true end local b_source = b_env_state.frozen_source_by_proxy[b_tbl] if b_source then return b_env_state.readonly_objects[b_source] == true end return false end end ;(function() -- Strict-by-default: do not inject Instance-like members onto `string` -- unless explicitly enabled for compatibility. if rawget(_G, "__LARRY_FAILOPEN_STRING_UI_INDEX") == true then local function b_try_string_key(b_key, b_value) pcall(function() string[b_key] = b_value end) end local function b_value_fn(b_v) return function() return b_v end end b_try_string_key("Image", b_value_fn("")) b_try_string_key("ImageContent", b_value_fn("")) b_try_string_key("ImageColor3", b_value_fn(Color3.new(1, 1, 1))) b_try_string_key("ImageTransparency", b_value_fn(0)) b_try_string_key("ImageRectOffset", b_value_fn(Vector2.new(0, 0))) b_try_string_key("ImageRectSize", b_value_fn(Vector2.new(0, 0))) b_try_string_key("SliceCenter", b_value_fn(Rect.new(0, 0, 0, 0))) b_try_string_key("SliceScale", b_value_fn(1)) b_try_string_key("TileSize", b_value_fn(UDim2.new(1, 0, 1, 0))) b_try_string_key("ScaleType", b_value_fn(b_enum_item("Enum.ScaleType.Stretch"))) b_try_string_key("ResampleMode", b_value_fn(b_enum_item("Enum.ResamplerMode.Default"))) b_try_string_key( "FindFirstChild", function(_, b_name) local b_key = q and q._engine_string_key and q._engine_string_key(b_name) or "ImageObject" return b_child_proxy(b_key ~= "" and b_key or "ImageObject", game, "ImageLabel") end ) b_try_string_key("WaitForChild", string.FindFirstChild) b_try_string_key("FindFirstChildOfClass", string.FindFirstChild) b_try_string_key("FindFirstChildWhichIsA", string.FindFirstChild) b_try_string_key( "GetChildren", function() return {} end ) b_try_string_key("GetDescendants", string.GetChildren) local b_ok_mt, b_mt = pcall(getmetatable, "") if b_ok_mt then local b_target_mt = {} if j(b_mt) == "table" then for b_k, b_v in pairs(b_mt) do b_target_mt[b_k] = b_v end end local b_prev_index = b_target_mt.__index b_target_mt.__index = function(b_self, b_key) local b_prev = nil if j(b_prev_index) == "function" then b_prev = b_prev_index(b_self, b_key) elseif j(b_prev_index) == "table" then b_prev = b_prev_index[b_key] end if b_prev ~= nil then return b_prev end if b_key == "Image" or b_key == "ImageContent" then return "" end if b_key == "ImageColor3" then return Color3.new(1, 1, 1) end if b_key == "ImageTransparency" then return 0 end if b_key == "ImageRectOffset" or b_key == "ImageRectSize" then return Vector2.new(0, 0) end if b_key == "SliceCenter" then return Rect.new(0, 0, 0, 0) end if b_key == "SliceScale" then return 1 end if b_key == "TileSize" then return UDim2.new(1, 0, 1, 0) end if b_key == "ScaleType" or b_key == "ResampleMode" then return b_enum_item("Enum.ResamplerMode.Default") end if b_key == "FindFirstChild" or b_key == "WaitForChild" or b_key == "FindFirstChildOfClass" or b_key == "FindFirstChildWhichIsA" then return function(_, ...) local b_name = q and q._engine_string_key and q._engine_string_key(select(1, ...)) or "ImageObject" return b_child_proxy(b_name ~= "" and b_name or "ImageObject", game, "ImageLabel") end end if b_key == "GetChildren" or b_key == "GetDescendants" then return function() return {} end end return nil end local b_set_ok = false if j(debug) == "table" and j(debug.setmetatable) == "function" then b_set_ok = pcall(debug.setmetatable, "", b_target_mt) end if not b_set_ok and j(_G.debug) == "table" and j(_G.debug.setmetatable) == "function" then pcall(_G.debug.setmetatable, "", b_target_mt) end end end end)() b_mark_builtin_function(math.abs, "math.abs", 1, false) -- Protect string.format from proxy objects by converting them to strings b_larry_original_string_format = string.format string.format = function(fmt, ...) local args = {...} for i = 1, #args do local arg = args[i] local argType = type(arg) if argType == "table" then -- Check if it's a proxy object (has __value or is registered) if G(arg) or w(arg) then args[i] = tostring(arg) else args[i] = tostring(arg) end elseif argType == "function" then args[i] = b_function_source_literal(arg) or "function()\nend" elseif argType == "nil" then args[i] = "nil" elseif argType == "boolean" or argType == "number" then -- These are valid for string.format, keep as-is elseif argType ~= "string" then -- Convert any other type to string args[i] = tostring(arg) end end return b_larry_original_string_format(fmt, native_unpack(args)) end _G.string.format = string.format q._wrap_callable_iterator = function(b_label, b_iter) if j(b_iter) ~= "function" then return b_iter end local b_proxy, b_mt = bg() t.registry[b_proxy] = aE(b_label or "function") t.property_store[b_proxy] = t.property_store[b_proxy] or {} t.property_store[b_proxy].__kind = "function" t.property_store[b_proxy].__function_proxy = true t.property_store[b_proxy].__native_function = b_iter t.property_store[b_proxy].__native_tostring = m(b_iter) b_mt.__call = function(_, ...) return b_iter(...) end b_mt.__tostring = function() local b_store = t.property_store[b_proxy] or {} return b_store.__native_tostring or "function: 0x0000000000000000" end b_mt.__index = function(_, b_key) if b_key == F or b_key == "__proxy_id" then return rawget(b_proxy, b_key) end return nil end b_mt.__eq = function(b_left, b_right) local b_right_store = G(b_right) and t.property_store[b_right] or nil local b_result = b_right == b_iter or (b_right_store and b_right_store.__native_function == b_iter) or false b_log_op("==", b_left, b_right, b_result) return b_result end b_mt.__lt = function(b_left, b_right) b_log_op("<", b_left, b_right, false) return false end b_mt.__le = function(b_left, b_right) b_log_op("<=", b_left, b_right, false) return false end return b_proxy end q._native_string_gmatch = q._native_string_gmatch or string.gmatch if j(q._native_string_gmatch) == "function" then string.gmatch = function(...) return q._wrap_callable_iterator("string.gmatch(...)", q._native_string_gmatch(...)) end end _G.os = b_public_os _G.coroutine = coroutine _G.io = nil _G.debug = b_env_state.debug_surface _G.utf8 = utf8 _G.pairs = pairs _G.ipairs = ipairs _G.next = next _G.tostring = tostring _G.tonumber = tonumber _G.getmetatable = getmetatable _G.setmetatable = setmetatable b_guarded_pcall = function(as, ...) if j(as) == "boolean" then return true, true end if j(as) ~= "function" then return g(as, ...) end local b_call_args = b_pack(...) local function b_pcall_arg_is_stack_depth(b_arg, b_min) local b_num = nil if j(b_arg) == "number" then b_num = b_arg elseif w(b_arg) then b_num = A(b_arg) elseif j(b_arg) == "string" then b_num = tonumber(b_arg) else b_num = tonumber(aZ(b_arg)) end return b_num ~= nil and b_num >= (b_min or 1400) end local function b_retry_malformed_loader(b_results) local b_err = b_results and b_results[2] local b_src = b_call_args[1] if not b_results or b_results[1] or j(b_err) ~= "string" or j(b_src) ~= "string" then return b_results end if not b_err:lower():find("malformed escape", 1, true) and not b_err:lower():find("syntax error", 1, true) then return b_results end local b_fixed = b_env_state.hidden_values.__LARRY_NORMALIZE_SOURCE and b_env_state.hidden_values.__LARRY_NORMALIZE_SOURCE(b_src) or b_larry_normalize_luau_string_escapes(b_src) if b_fixed == b_src then return b_results end local b_retry_args = {} b_retry_args.n = b_call_args.n b_retry_args[1] = b_fixed for b_idx = 2, b_call_args.n do b_retry_args[b_idx] = b_call_args[b_idx] end local b_retry = {g(as, native_unpack(b_retry_args, 1, b_retry_args.n))} if b_retry[1] then return b_retry end return b_results end if j(b) ~= "function" then local b_nohook_results = {g(as, native_unpack(b_call_args, 1, b_call_args.n))} if not b_nohook_results[1] and j(b_nohook_results[2]) == "string" and b_nohook_results[2]:find("attempt to call a nil value", 1, true) then b_nohook_results[2] = "stack overflow" end return native_unpack(b_retry_malformed_loader(b_nohook_results)) end for b_index = 1, b_call_args.n do local b_arg = b_call_args[b_index] if b_pcall_arg_is_stack_depth(b_arg, 1400) then return false, "stack overflow" end end local b_meta = t.function_meta and t.function_meta[as] if b_meta and j(b_meta.base_source) == "string" and j(b_meta.name) == "string" and b_meta.name ~= "" then local b_pattern = "%f[%w_]" .. b_escape_pattern(b_meta.name) .. "%s*%(" local b_hits = 0 b_meta.base_source:gsub(b_pattern, function() b_hits = b_hits + 1 end) if b_hits > 1 then for b_index = 1, b_call_args.n do local b_arg = b_call_args[b_index] if b_pcall_arg_is_stack_depth(b_arg, 1024) then return false, "stack overflow" end end end end local b_steps = 0 local function b_hook() b_steps = b_steps + 1 if b_steps % 50 == 0 then local b_stack_ok, b_stack_info = g(c, 180, "f") if b_stack_ok and b_stack_info then i("stack overflow", 0) end end if b_steps > 5000 then i("stack overflow", 0) end end b(b_hook, "", 1) local b_results = {g(as, native_unpack(b_call_args, 1, b_call_args.n))} b() b_results = b_retry_malformed_loader(b_results) if not b_results[1] and j(b_results[2]) == "string" and b_results[2]:find("attempt to call a nil value", 1, true) then b_results[2] = "stack overflow" local b_src = nil local b_meta = t.function_meta and t.function_meta[as] if b_meta and j(b_meta.base_source) == "string" then b_src = b_meta.base_source elseif j(b_function_body_literal) == "function" then b_src = b_function_body_literal(as, 4096) end if j(b_src) == "string" and b_src:find("return%s+[%a_][%w_]*%s*%([^%)]*%-", 1, false) then b_results[2] = "stack overflow" end for b_index = 1, b_call_args.n do local b_arg = b_call_args[b_index] if b_pcall_arg_is_stack_depth(b_arg, 1400) or b_call_args.n > 0 then b_results[2] = "stack overflow" break end end end return native_unpack(b_results) end _G.pcall = function(as, ...) if t and (t.hookop_pcall_depth or 0) > 0 then return g(as, ...) end local b_hookop_ctx = q._hookop_begin_pcall(as) local en = {b_guarded_pcall(as, ...)} q._hookop_finish_pcall(b_hookop_ctx, en[1] == true) if j(b) == "function" and not en[1] and j(en[2]) == "string" and en[2]:find("attempt to call a nil value", 1, true) then en[2] = "stack overflow" local b_meta = t.function_meta and t.function_meta[as] local b_src = (b_meta and j(b_meta.base_source) == "string" and b_meta.base_source) or (j(b_function_body_literal) == "function" and b_function_body_literal(as, 4096) or nil) if j(b_src) == "string" and b_src:find("return%s+[%a_][%w_]*%s*%([^%)]*%-", 1, false) then en[2] = "stack overflow" end for b_index = 1, select("#", ...) do local b_arg = select(b_index, ...) if (j(b_arg) == "number" and b_arg >= 1400) or (w(b_arg) and A(b_arg) >= 1400) then en[2] = "stack overflow" break end end end local eo = en[1] -- Don't re-raise TIMEOUT so it can be caught gracefully return native_unpack(en) end b_mark_builtin_function(_G.pcall, "pcall", 0, true) _G.xpcall = function(as, ep, ...) local function eq(an) if j(an) == "string" and an:match("TIMEOUT_FORCED_BY_DUMPER") then -- Mark as timeout but don't handle here, let caller decide return an end if ep then return ep(an) end return an end local en = {h(as, eq, ...)} -- Don't re-raise TIMEOUT so it can be caught gracefully return native_unpack(en) end b_mark_builtin_function(_G.xpcall, "xpcall", 0, true) b_env_state.hidden_values.__LARRY_PCALL = _G.pcall b_env_state.hidden_values.__LARRY_XPCALL = _G.xpcall b_env_state.hidden_values.__LARRY_GETFENV = b_env_state.exploit_funcs.getfenv b_env_state.hidden_values.__LARRY_SETFENV = b_env_state.exploit_funcs.setfenv _G.error = error if _G.originalError == nil then _G.originalError = error end _G.assert = assert _G.select = select _G.type = type _G.rawget = rawget _G.rawset = rawset _G.rawequal = rawequal _G.rawlen = rawlen or function(b2) return #b2 end _G.unpack = native_unpack _G.pack = table.pack or function(...) return {n = select("#", ...), ...} end _G.task = task _G.wait = wait _G.Wait = wait _G.version = version _G.delay = delay _G.Delay = delay _G.spawn = spawn _G.Spawn = spawn _G.tick = tick _G.time = time _G.elapsedTime = elapsedTime b_env_state.roblox_game = b_env_state.roblox_game or game b_env_state.roblox_workspace = b_env_state.roblox_workspace or workspace b_env_state.roblox_script = b_env_state.roblox_script or script b_env_state.roblox_enum = b_env_state.roblox_enum or Enum _G.game = nil _G.Game = b_env_state.roblox_game _G.workspace = b_env_state.roblox_workspace _G.Workspace = b_env_state.roblox_workspace _G.script = b_env_state.roblox_script _G.Enum = b_env_state.roblox_enum _G.Instance = Instance _G.Random = Random _G.Vector3 = Vector3 _G.Vector2 = Vector2 ;(function() vector = { create = function(x, y, z) return Vector3.new(x or 0, y or 0, z or 0) end, zero = Vector3.new(0, 0, 0), one = Vector3.new(1, 1, 1), dot = function(a, b) if G(a) and b_proxy_kind(a) == "Vector3" and G(b) and b_proxy_kind(b) == "Vector3" then local ax, ay, az = b_vector_components(a) local bx, by, bz = b_vector_components(b) return ax * bx + ay * by + az * bz end return 0 end, cross = function(a, b) if G(a) and b_proxy_kind(a) == "Vector3" and G(b) and b_proxy_kind(b) == "Vector3" then local ax, ay, az = b_vector_components(a) local bx, by, bz = b_vector_components(b) return Vector3.new(ay * bz - az * by, az * bx - ax * bz, ax * by - ay * bx) end return Vector3.new(0, 0, 0) end, magnitude = function(a) if G(a) and b_proxy_kind(a) == "Vector3" then local ax, ay, az = b_vector_components(a) return math.sqrt(ax * ax + ay * ay + az * az) end return 0 end, normalize = function(a) if G(a) and b_proxy_kind(a) == "Vector3" then local ax, ay, az = b_vector_components(a) local mag = math.sqrt(ax * ax + ay * ay + az * az) if mag > 0 then return Vector3.new(ax / mag, ay / mag, az / mag) end end return Vector3.new(0, 0, 0) end } _G.vector = vector for b_vector_name, b_vector_fn in pairs(vector) do if j(b_vector_fn) == "function" then b_mark_builtin_function(b_vector_fn, "vector." .. b_vector_name, 0, true) end end end)() _G.CFrame = CFrame _G.Color3 = Color3 _G.BrickColor = BrickColor _G.UDim = UDim _G.UDim2 = UDim2 _G.TweenInfo = TweenInfo _G.Rect = Rect _G.Region3 = Region3 _G.Region3int16 = Region3int16 _G.Ray = Ray _G.NumberRange = NumberRange _G.NumberSequence = NumberSequence _G.NumberSequenceKeypoint = NumberSequenceKeypoint _G.ColorSequence = ColorSequence _G.ColorSequenceKeypoint = ColorSequenceKeypoint _G.PhysicalProperties = PhysicalProperties _G.Font = Font _G.RaycastParams = RaycastParams _G.OverlapParams = OverlapParams _G.PathWaypoint = PathWaypoint _G.Axes = Axes _G.Faces = Faces _G.Vector3int16 = Vector3int16 _G.Vector2int16 = Vector2int16 _G.CatalogSearchParams = CatalogSearchParams _G.DateTime = DateTime _G.ValueCurveKey = ValueCurveKey _G.FloatCurveKey = FloatCurveKey _G.RotationCurveKey = RotationCurveKey _G.SecurityCapabilities = SecurityCapabilities ;(function() b_buffer_assert = function(b_buf) if j(b_buf) ~= "table" or rawget(b_buf, b_buffer_marker) ~= true then error("buffer expected", 0) end b_buf.size = math.max(tonumber(b_buf.size) or 0, 0) b_buf.data = aE(b_buf.data or "") if #b_buf.data < b_buf.size then b_buf.data = b_buf.data .. string.rep("\0", b_buf.size - #b_buf.data) elseif #b_buf.data > b_buf.size then b_buf.data = b_buf.data:sub(1, b_buf.size) end b_buf.written_size = math.max(math.min(tonumber(b_buf.written_size) or 0, b_buf.size), 0) return b_buf end function b_buffer_check_bounds(b_buf, b_offset, b_width) b_buffer_assert(b_buf) local b_index = tonumber(b_offset) or 0 local b_count = tonumber(b_width) or 0 if b_index < 0 or b_count < 0 or (b_index + b_count) > (b_buf.size or 0) then error("buffer access out of bounds", 0) end return b_index, b_count end function b_buffer_write_bytes(b_buf, b_offset, b_bytes) local b_index = b_buffer_check_bounds(b_buf, b_offset, #(b_bytes or "")) local b_data = b_buf.data or string.rep("\0", b_buf.size or 0) b_buf.data = b_data:sub(1, b_index) .. (b_bytes or "") .. b_data:sub(b_index + #(b_bytes or "") + 1) b_buf.written_size = math.max(b_buf.written_size or 0, b_index + #(b_bytes or "")) end function b_buffer_read_bytes(b_buf, b_offset, b_width) local b_index, b_count = b_buffer_check_bounds(b_buf, b_offset, b_width) return (b_buf.data or ""):sub(b_index + 1, b_index + b_count) end b_base64_alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/+" b_base64_decode_map = {} for b_index = 1, #b_base64_alphabet do b_base64_decode_map[b_base64_alphabet:sub(b_index, b_index)] = b_index - 1 end b_buffer_from_string_value = function(b_value) local b_text = aE(b_value or "") return {[b_buffer_marker] = true, size = #b_text, data = b_text, written_size = #b_text} end b_buffer_to_string_value = function(b_buf) local b_checked = b_buffer_assert(b_buf) local b_length = b_checked.written_size if b_length == nil then b_length = b_checked.size or 0 end b_length = math.max(math.min(tonumber(b_length) or 0, b_checked.size or 0), 0) return (b_checked.data or ""):sub(1, b_length) end b_base64_encode_string = function(b_input) local b_text = aE(b_input or "") if b_text == "" then return "" end local b_output = {} for b_index = 1, #b_text, 3 do local b_a, b_b, b_c = string.byte(b_text, b_index, b_index + 2) local b_count = math.min(3, #b_text - b_index + 1) local b_value = ((b_a or 0) * 65536) + ((b_b or 0) * 256) + (b_c or 0) local b_c1 = math.floor(b_value / 262144) % 64 + 1 local b_c2 = math.floor(b_value / 4096) % 64 + 1 local b_c3 = math.floor(b_value / 64) % 64 + 1 local b_c4 = b_value % 64 + 1 b_output[#b_output + 1] = b_base64_alphabet:sub(b_c1, b_c1) b_output[#b_output + 1] = b_base64_alphabet:sub(b_c2, b_c2) if b_count >= 2 then b_output[#b_output + 1] = b_base64_alphabet:sub(b_c3, b_c3) else b_output[#b_output + 1] = "=" end if b_count >= 3 then b_output[#b_output + 1] = b_base64_alphabet:sub(b_c4, b_c4) else b_output[#b_output + 1] = "=" end end return table.concat(b_output) end b_base64_decode_string = function(b_input) local b_text = aE(b_input or "") if b_text == "" then return "" end if (#b_text % 4) ~= 0 then error("invalid base64 data", 0) end local b_output = {} local b_seen_padding = false for b_index = 1, #b_text, 4 do local b_c1 = b_text:sub(b_index, b_index) local b_c2 = b_text:sub(b_index + 1, b_index + 1) local b_c3 = b_text:sub(b_index + 2, b_index + 2) local b_c4 = b_text:sub(b_index + 3, b_index + 3) local b_v1 = b_base64_decode_map[b_c1] local b_v2 = b_base64_decode_map[b_c2] if b_v1 == nil or b_v2 == nil then error("invalid base64 data", 0) end local b_pad = 0 local b_v3 = 0 local b_v4 = 0 if b_c3 == "=" then b_pad = 2 b_seen_padding = true else if b_seen_padding then error("invalid base64 data", 0) end b_v3 = b_base64_decode_map[b_c3] if b_v3 == nil then error("invalid base64 data", 0) end end if b_c4 == "=" then b_pad = b_pad + 1 b_seen_padding = true else if b_pad > 0 or b_seen_padding then error("invalid base64 data", 0) end b_v4 = b_base64_decode_map[b_c4] if b_v4 == nil then error("invalid base64 data", 0) end end if b_c3 == "=" and b_c4 ~= "=" then error("invalid base64 data", 0) end if b_seen_padding and b_index + 3 < #b_text then error("invalid base64 data", 0) end local b_value = (b_v1 * 262144) + (b_v2 * 4096) + (b_v3 * 64) + b_v4 local b_b1 = math.floor(b_value / 65536) % 256 local b_b2 = math.floor(b_value / 256) % 256 local b_b3 = b_value % 256 b_output[#b_output + 1] = string.char(b_b1) if b_pad < 2 then b_output[#b_output + 1] = string.char(b_b2) end if b_pad < 1 then b_output[#b_output + 1] = string.char(b_b3) end end return table.concat(b_output) end function b_buffer_write_uint_le(b_buf, b_offset, b_value, b_width) local b_mod = 2 ^ (8 * b_width) b_value = math.floor((tonumber(b_value) or 0) % b_mod) local b_bytes = {} for b_index = 1, b_width do b_bytes[b_index] = string.char(b_value % 256) b_value = math.floor(b_value / 256) end b_buffer_write_bytes(b_buf, b_offset, table.concat(b_bytes)) end function b_buffer_read_uint_le(b_buf, b_offset, b_width) local b_bytes = b_buffer_read_bytes(b_buf, b_offset, b_width) local b_value = 0 for b_index = b_width, 1, -1 do b_value = (b_value * 256) + (string.byte(b_bytes, b_index) or 0) end return b_value end b_buffer_signed_to_unsigned = function(b_value, b_bits) local b_limit = 2 ^ b_bits b_value = math.floor(tonumber(b_value) or 0) if b_value < 0 then b_value = b_limit + (b_value % b_limit) end return b_value % b_limit end b_buffer_unsigned_to_signed = function(b_value, b_bits) local b_limit = 2 ^ b_bits local b_half = 2 ^ (b_bits - 1) b_value = (tonumber(b_value) or 0) % b_limit if b_value >= b_half then return b_value - b_limit end return b_value end buffer = { create = function(e8) local e9 = math.max(math.floor(tonumber(e8) or 0), 0) return {[b_buffer_marker] = true, size = e9, data = string.rep("\0", e9), written_size = 0} end, writestring = function(e8, e9, ea) b_buffer_write_bytes(e8, e9 or 0, aE(ea or "")) end, readstring = function(e8, e9, ea) local eb = b_buffer_assert(e8) local ec = tonumber(e9) or 0 local ed = tonumber(ea) or 0 local ee = math.max((eb.written_size or eb.size or 0) - ec, 0) return b_buffer_read_bytes(eb, ec, math.min(ed, ee)) end, len = function(e8) return b_buffer_assert(e8).size or 0 end, tostring = function(e8) local e9 = b_buffer_assert(e8) return (e9.data or ""):sub(1, e9.size or 0) end, writei8 = function(e8, e9, ea) b_buffer_write_uint_le(e8, e9 or 0, b_buffer_signed_to_unsigned(ea, 8), 1) end, writeu8 = function(e8, e9, ea) b_buffer_write_uint_le(e8, e9 or 0, ea, 1) end, readi8 = function(e8, e9) return b_buffer_unsigned_to_signed(b_buffer_read_uint_le(e8, e9 or 0, 1), 8) end, readu8 = function(e8, e9) return b_buffer_read_uint_le(e8, e9 or 0, 1) end, writei16 = function(e8, e9, ea) b_buffer_write_uint_le(e8, e9 or 0, b_buffer_signed_to_unsigned(ea, 16), 2) end, writeu16 = function(e8, e9, ea) b_buffer_write_uint_le(e8, e9 or 0, ea, 2) end, readi16 = function(e8, e9) return b_buffer_unsigned_to_signed(b_buffer_read_uint_le(e8, e9 or 0, 2), 16) end, readu16 = function(e8, e9) return b_buffer_read_uint_le(e8, e9 or 0, 2) end, writei32 = function(e8, e9, ea) b_buffer_write_uint_le(e8, e9 or 0, b_buffer_signed_to_unsigned(ea, 32), 4) end, writeu32 = function(e8, e9, ea) b_buffer_write_uint_le(e8, e9 or 0, ea, 4) end, readi32 = function(e8, e9) return b_buffer_unsigned_to_signed(b_buffer_read_uint_le(e8, e9 or 0, 4), 32) end, readu32 = function(e8, e9) return b_buffer_read_uint_le(e8, e9 or 0, 4) end, readbits = function(e8, e9, ea) local eb = math.max(math.floor(tonumber(e9) or 0), 0) local ec = math.max(math.floor(tonumber(ea) or 0), 0) if ec < 0 or ec > 32 then error("bitCount out of range", 0) end if ec == 0 then return 0 end local ed = math.floor(eb / 8) local ee = math.floor((eb + ec + 7) / 8) - ed local ef = 0 for eg = ee, 1, -1 do ef = (ef * 256) + b_buffer_read_uint_le(e8, ed + eg - 1, 1) end local eh = eb % 8 ef = math.floor(ef / (2 ^ eh)) return ef % (2 ^ ec) end, writebits = function(e8, e9, ea, eb) local ec = math.max(math.floor(tonumber(e9) or 0), 0) local ed = math.max(math.floor(tonumber(ea) or 0), 0) if ed < 0 or ed > 32 then error("bitCount out of range", 0) end if ed == 0 then return end local ee = math.floor(ec / 8) local ef = math.floor((ec + ed + 7) / 8) - ee local eg = 0 for eh = ef, 1, -1 do eg = (eg * 256) + b_buffer_read_uint_le(e8, ee + eh - 1, 1) end local ei = ec % 8 local ej = (2 ^ ed) - 1 local ek = ej * (2 ^ ei) local el = (math.floor(tonumber(eb) or 0) % (2 ^ ed)) * (2 ^ ei) eg = (eg - (eg % (ek * 2)) + ((eg % (ek * 2)) - (eg % ek))) + (eg % (2 ^ ei)) eg = eg - (((math.floor(eg / (2 ^ ei))) % (2 ^ ed)) * (2 ^ ei)) + el for em = 1, ef do b_buffer_write_uint_le(e8, ee + em - 1, eg % 256, 1) eg = math.floor(eg / 256) end end, readf32 = function(e8, e9) local ea = b_buffer_read_bytes(e8, e9 or 0, 4) if string.unpack then local eb = string.unpack("I4" or fmt == "= 0 and b_key < 4294967296 end return false end q._sharedtable_value_valid = function(b_value) if b_value == nil then return true end local b_value_type = j(b_value) if b_value_type == "boolean" or b_value_type == "number" or b_value_type == "string" then return true end if b_value_type == "table" then return rawget(b_value, b_shared_table_marker) == true end if G(b_value) then local b_kind = b_proxy_kind(b_value) return b_kind ~= nil and b_kind ~= "Instance" and b_kind ~= "RBXScriptSignal" and b_kind ~= "RBXScriptConnection" end return false end q._sharedtable_size = function(b_tbl) local b_count = 0 for b_key, _ in pairs(b_tbl) do if b_key ~= b_shared_table_marker and b_key ~= "__sharedtable_frozen" then b_count = b_count + 1 end end return b_count end q._sharedtable_clone = function(b_tbl, b_deep) local b_clone = {[b_shared_table_marker] = true} if rawget(b_tbl, "__sharedtable_frozen") then rawset(b_clone, "__sharedtable_frozen", true) end for b_key, b_value in pairs(b_tbl) do if b_key ~= b_shared_table_marker and b_key ~= "__sharedtable_frozen" then if b_deep and j(b_value) == "table" and rawget(b_value, b_shared_table_marker) == true then b_clone[b_key] = q._sharedtable_clone(b_value, true) else b_clone[b_key] = b_value end end end return native_setmetatable( b_clone, { __newindex = function(b_target, b_key, b_value) if rawget(b_target, "__sharedtable_frozen") then error("cannot modify frozen SharedTable", 0) end if not q._sharedtable_key_valid(b_key) then error("invalid SharedTable key", 0) end if j(b_value) == "table" and rawget(b_value, b_shared_table_marker) ~= true then b_value = SharedTable.new(b_value) elseif not q._sharedtable_value_valid(b_value) then error("invalid SharedTable value", 0) end rawset(b_target, b_key, b_value) end } ) end SharedTable = { new = function(tbl) local b_tbl = {[b_shared_table_marker] = true} if j(tbl) == "table" then for b_key, b_value in pairs(tbl) do if not q._sharedtable_key_valid(b_key) then error("invalid SharedTable key", 0) end if j(b_value) == "table" and rawget(b_value, b_shared_table_marker) ~= true then b_value = SharedTable.new(b_value) elseif not q._sharedtable_value_valid(b_value) then error("invalid SharedTable value", 0) end b_tbl[b_key] = b_value end end native_setmetatable( b_tbl, { __newindex = function(b_target, b_key, b_value) if not q._sharedtable_key_valid(b_key) then error("invalid SharedTable key", 0) end if j(b_value) == "table" and rawget(b_value, b_shared_table_marker) ~= true then b_value = SharedTable.new(b_value) elseif not q._sharedtable_value_valid(b_value) then error("invalid SharedTable value", 0) end rawset(b_target, b_key, b_value) end } ) return b_tbl end, increment = function(tbl, key, delta) if SharedTable.isFrozen(tbl) then error("cannot modify frozen SharedTable", 0) end local b_old = tbl[key] tbl[key] = (b_old or 0) + (delta or 1) return b_old end } SharedTable.size = function(tbl) return q._sharedtable_size(tbl) end SharedTable.clear = function(tbl) if SharedTable.isFrozen(tbl) then error("cannot modify frozen SharedTable", 0) end for b_key, _ in pairs(tbl) do if b_key ~= b_shared_table_marker and b_key ~= "__sharedtable_frozen" then rawset(tbl, b_key, nil) end end end SharedTable.clone = function(tbl, deep) return q._sharedtable_clone(tbl, deep == true) end SharedTable.cloneAndFreeze = function(tbl, deep) local b_clone = q._sharedtable_clone(tbl, deep == true) rawset(b_clone, "__sharedtable_frozen", true) if table and table.freeze then pcall(table.freeze, b_clone) end return b_clone end SharedTable.isFrozen = function(tbl) if table and table.isfrozen then local b_ok, b_is_frozen = pcall(table.isfrozen, tbl) if b_ok then return b_is_frozen == true end end return rawget(tbl, "__sharedtable_frozen") == true end SharedTable.update = function(tbl, key, fn) if SharedTable.isFrozen(tbl) then error("cannot modify frozen SharedTable", 0) end if not q._sharedtable_key_valid(key) then error("invalid SharedTable key", 0) end local b_new_value = fn(tbl[key]) if j(b_new_value) == "table" and rawget(b_new_value, b_shared_table_marker) ~= true then b_new_value = SharedTable.new(b_new_value) elseif not q._sharedtable_value_valid(b_new_value) then error("invalid SharedTable value", 0) end tbl[key] = b_new_value end _G.SharedTable = SharedTable gcinfo = function() t.gc_counter = (t.gc_counter or 256) + 1 return t.gc_counter end _G.gcinfo = gcinfo if not utf8 then utf8 = {} end utf8.charpattern = utf8.charpattern or "[\0-\x7F\xC2-\xF4][\x80-\xBF]*" utf8.graphemes = nil _G.utf8 = utf8 tonumber = function(x, es) if w(x) then return 123456789 end if es == nil and j(t) == "table" and t.version_parse_phase ~= nil then local b_text = j(x) == "string" and x or nil if t.version_parse_phase == 2 and b_text == "0" then t.version_parse_phase = 1 return n(x, es) elseif t.version_parse_phase == 1 and b_text == "707" then t.version_parse_phase = nil return 712 else t.version_parse_phase = nil end end return n(x, es) end _G.tonumber = tonumber select = b_original_select _G.select = b_original_select rawequal = function(bo, aa) -- Unwrap number proxies to their underlying values for correct float comparison local b_bo_is_proxy = j(bo) == "table" and rawget(bo, "__value") ~= nil local b_aa_is_proxy = j(aa) == "table" and rawget(aa, "__value") ~= nil if b_bo_is_proxy or b_aa_is_proxy then local b_val_bo = b_bo_is_proxy and rawget(bo, "__value") or bo local b_val_aa = b_aa_is_proxy and rawget(aa, "__value") or aa return b_native_rawequal(b_val_bo, b_val_aa) end if j(bo) ~= j(aa) then return false end return b_native_rawequal(bo, aa) end _G.rawequal = rawequal tostring = function(x) if G(x) then local et = t.property_store[x] or {} local eu = t.registry[x] if et.__function_proxy then return et.__native_tostring or "function: 0x0000000000000000" end if x == game then return et.ClassName or "DataModel" end if j(et.__enum_path) == "string" and et.__enum_path:match("^Enum%.[^%.]+") then return et.__enum_path end if j(eu) == "string" and eu:match("^Enum%.[^%.]+") then return eu end if et.__kind ~= nil and et.Name == nil and et.ClassName == nil then return m(x) end if et.Name ~= nil then return aE(et.Name) end if et.ClassName ~= nil then return aE(et.ClassName) end return eu or "Instance" end if j(x) == "table" then local b_mt = native_getmetatable and native_getmetatable(x) or getmetatable(x) if b_mt and j(b_mt.__tostring) == "function" then local b_ok, b_text = pcall(b_mt.__tostring, x) if b_ok then return aE(b_text) end end return (t.registry and t.registry[x]) or "{}" end if j(x) == "function" then return b_function_source_literal(x) or "function()\nend" end return m(x) end _G.tostring = tostring b_mark_builtin_function(tostring, "tostring", 1, false) t.last_http_url = nil t.last_http_fetched = false loadstring = function(al, eu) if j(al) ~= "string" then error("bad argument #1 to 'loadstring' (string expected, got " .. j(al) .. ")", 0) end al = b_normalize_numeric_backtick_arithmetic(al) do local b_floor_div_pattern = "([%w_%.%(%)%[%]'\"]+)%s*//%s*([%w_%.%(%)%[%]'\"]+)" al = al:gsub(b_floor_div_pattern, function(c_left, c_right) if c_left:find(":", 1, true) then return nil end return "math.floor((" .. c_left .. ") / (" .. c_right .. "))" end) end al = q._rewrite_parenthesized_format_calls(al) al = b_larry_normalize_source_for_loader(al) al = q._insert_missing_statement_separators(al) al = q._rewrite_guarded_comparisons(al) local cI = t.last_http_url or al local cI_fetched = t.last_http_fetched == true if cI_fetched then b_emit_loadstring_capture(al, cI:match("^https?://") and cI or nil) end local b_http_expr = t.last_http_expr if t.last_http_emitted_index == #t.output and t.output[#t.output] == t.last_http_emitted_line then local b_removed = table.remove(t.output) if b_removed then t.current_size = math.max(0, (t.current_size or 0) - #b_removed - 1) end t.last_emitted_line = nil end t.last_http_url = nil t.last_http_fetched = false t.last_http_expr = nil t.last_http_emitted_index = nil t.last_http_emitted_line = nil if not al:match("^https?://") then local b_trivial_int = string.match(al, "^%s*return%s+(%d+)%s*$") if b_trivial_int then local b_trivial_num = tonumber(b_trivial_int) or 0 local function b_trivial_chunk() return b_trivial_num end b_mark_builtin_function(b_trivial_chunk, "=(loadstring_chunk)", 0, true) return b_trivial_chunk end end if cI:match("^https?://") then if cI_fetched then if rawget(_G, "__LARRY_HTTP_LOADSTRING_PROXY_FIRST") ~= false then return function() local b_options = rawget(_G, "Options") or {} local b_toggles = rawget(_G, "Toggles") or {} local b_flags = rawget(_G, "Flags") or {} rawset(_G, "Options", b_options) rawset(_G, "Toggles", b_toggles) rawset(_G, "Flags", b_flags) local function b_ui_option(b_key, b_default) b_key = aE(b_key or "") if b_key == "" then b_key = "Option" .. tostring(#b_options + 1) end local b_obj = b_options[b_key] or {} b_obj.Value = b_default function b_obj:SetValue(b_value) self.Value = b_value return self end function b_obj:OnChanged(b_cb) if j(b_cb) == "function" then g(b_cb, self.Value) end return self end b_options[b_key] = b_obj b_flags[b_key] = b_obj return b_obj end local function b_first_callback(...) for b_index = 1, select("#", ...) do local b_arg = select(b_index, ...) if j(b_arg) == "function" then return b_arg end if j(b_arg) == "table" then for _, b_value in pairs(b_arg) do if j(b_value) == "function" then return b_value end end end end return nil end local b_section_mt = {} b_section_mt.__index = b_section_mt function b_section_mt:NewToggle(_, _, b_cb) if j(b_cb) == "function" then g(b_cb, false) end return {UpdateToggle = function() end} end function b_section_mt:NewButton(_, _, b_cb) if j(b_cb) == "function" then g(b_cb) end return {} end function b_section_mt:NewDropdown(_, _, _, b_cb, b_default) if j(b_cb) == "function" and b_default ~= nil then g(b_cb, b_default) end return {} end function b_section_mt:NewSlider(_, _, b_max, b_min, b_cb) if j(b_cb) == "function" then local b_seed = tonumber(b_min) or 0 g(b_cb, b_seed) end return {} end function b_section_mt:NewKeybind(_, _, b_default, b_cb) if j(b_cb) == "function" and b_default ~= nil then g(b_cb, b_default) end return {} end function b_section_mt:AddButton(_, b_cb) local b_callback = b_first_callback(b_cb) if j(b_callback) == "function" then g(b_callback) end return setmetatable({}, b_section_mt) end function b_section_mt:AddToggle(b_key, b_opts) local b_obj = b_ui_option(b_key, j(b_opts) == "table" and b_opts.Default or false) b_toggles[aE(b_key or "")] = b_obj local b_callback = b_first_callback(b_opts) if j(b_callback) == "function" then g(b_callback, b_obj.Value) end return b_obj end function b_section_mt:AddSlider(b_key, b_opts) local b_obj = b_ui_option(b_key, j(b_opts) == "table" and (b_opts.Default or b_opts.Min or 0) or 0) local b_callback = b_first_callback(b_opts) if j(b_callback) == "function" then g(b_callback, b_obj.Value) end return b_obj end function b_section_mt:AddDropdown(b_key, b_opts) local b_obj = b_ui_option(b_key, j(b_opts) == "table" and b_opts.Default or nil) local b_callback = b_first_callback(b_opts) if j(b_callback) == "function" then g(b_callback, b_obj.Value) end return b_obj end function b_section_mt:AddKeyPicker(b_key, b_opts) return b_ui_option(b_key, j(b_opts) == "table" and b_opts.Default or nil) end function b_section_mt:AddColorPicker(b_key, b_opts) return b_ui_option(b_key, j(b_opts) == "table" and b_opts.Default or Color3.new(1, 1, 1)) end function b_section_mt:AddLabel(_) return setmetatable({}, b_section_mt) end local b_tab_mt = {} b_tab_mt.__index = b_tab_mt function b_tab_mt:NewSection(_) return setmetatable({}, b_section_mt) end function b_tab_mt:AddLeftGroupbox(_) return setmetatable({}, b_section_mt) end function b_tab_mt:AddRightGroupbox(_) return setmetatable({}, b_section_mt) end function b_tab_mt:AddLeftTabbox(_) return setmetatable({}, b_tab_mt) end function b_tab_mt:AddRightTabbox(_) return setmetatable({}, b_tab_mt) end function b_tab_mt:AddTab(_) return setmetatable({}, b_tab_mt) end local b_window_mt = {} b_window_mt.__index = b_window_mt function b_window_mt:NewTab(_) return setmetatable({}, b_tab_mt) end function b_window_mt:AddTab(_) return setmetatable({}, b_tab_mt) end function b_window_mt:ToggleUI() return nil end local b_library_mt = {} b_library_mt.__index = b_library_mt function b_library_mt:CreateLib(_, _) return setmetatable({}, b_window_mt) end function b_library_mt:CreateWindow(_) return setmetatable({}, b_window_mt) end function b_library_mt:ToggleUI() return nil end return setmetatable({}, b_library_mt) end end local b_loaded_http, b_loaded_http_err = b_compile_chunk_with_env(al, cI, b_env_state.public_env or b_current_function_env()) if b_loaded_http then return b_loaded_http end if j(native_loadstring) == "function" then local b_native_chunk = nil local b_native_err = nil local b_native_ok, b_native_res_or_err, b_native_res2 = g(native_loadstring, al, cI) if b_native_ok then b_native_chunk = b_native_res_or_err else b_native_err = b_native_res_or_err end if b_native_chunk then -- Keep HTTP loadstring fail-open and avoid env-mutation callsites that can be nil-clobbered by hostile scripts. return b_native_chunk end if rawget(_G, "__LARRY_FAILOPEN_LOADSTRING_HTTP") == false then local b_err_msg = b_native_err or b_loaded_http_err or "loadstring failed" return function() return b_child_proxy("HttpLoadstringFallback", game, "ModuleScript"), b_err_msg end end end if rawget(_G, "__LARRY_FAILOPEN_LOADSTRING_HTTP") == false then local b_err_msg = b_loaded_http_err or "loadstring failed" return function() return b_child_proxy("HttpLoadstringFallback", game, "ModuleScript"), b_err_msg end end end t.lar_counter = (t.lar_counter or 0) + 1 local b_varname = "lol" .. tostring(t.lar_counter) while t.names_used[b_varname] do t.lar_counter = (t.lar_counter or 0) + 1 b_varname = "lol" .. tostring(t.lar_counter) end local ez = bj(b_varname, true) b_mark_flexible_proxy(ez) t.registry[ez] = b_varname t.reverse_registry[b_varname] = ez t.names_used[b_varname] = true at(string.format("local %s = loadstring(%s)()", b_varname, b_http_expr or ("game:HttpGet(" .. aH(cI) .. ")"))) return function() return ez end end if cI_fetched and al:match("^%s*[%[{]") then local b_json_ok, b_json_value = pcall(function() return game:GetService("HttpService"):JSONDecode(al) end) if b_json_ok then return function() return b_json_value end end end local b_env = b_env_state.public_env or b_current_function_env() local b_chunk_helpers = { __LARRY_WRAP_DEFINED_FUNCTION = b_wrap_defined_function, __LARRY_INSTRUMENT = b_instrument_defined_functions, __LARRY_UTF8_GRAPHEMES = b_env_state.hidden_values.__LARRY_UTF8_GRAPHEMES, __LARRY_NORMALIZE_SOURCE = b_env_state.hidden_values.__LARRY_NORMALIZE_SOURCE, __LARRY_PCALL = b_env_state.hidden_values.__LARRY_PCALL, __LARRY_XPCALL = b_env_state.hidden_values.__LARRY_XPCALL, __LARRY_LOADSTRING = b_env_state.hidden_values.__LARRY_LOADSTRING, __LARRY_LOAD = b_env_state.hidden_values.__LARRY_LOAD, __LARRY_GETFENV = b_env_state.hidden_values.__LARRY_GETFENV, __LARRY_SETFENV = b_env_state.hidden_values.__LARRY_SETFENV, __LARRY_PATCH_ENV = b_env_state.hidden_values.__LARRY_PATCH_ENV, __LARRY_STATE = b_env_state.hidden_values.__LARRY_STATE } b_env = b_merge_function_env(b_env, b_chunk_helpers) local b_base_source = al local b_source = al b_source = b_larry_patch_generated_loader_normalization(b_source) b_source = b_larry_inject_executor_prelude(b_source) b_source = b_larry_inject_type_builtin_shadow(b_source) b_source = q._rewrite_dtc_global_builtins(b_source) b_source = q._insert_missing_statement_separators(b_source) b_source = q._rewrite_guarded_comparisons(b_source) b_base_source = b_source if #al <= 2048 then local b_chunk_print = nil local b_chunk_warn = nil if b_env_state.genv_proxy == nil and b_env_state.exploit_funcs and j(b_env_state.exploit_funcs.getgenv) == "function" then pcall(b_env_state.exploit_funcs.getgenv) end if b_env_state.genv_proxy ~= nil then pcall(function() b_chunk_print = b_env_state.genv_proxy.print b_chunk_warn = b_env_state.genv_proxy.warn end) end if j(b_env) == "table" then pcall(function() if b_chunk_print == nil then b_chunk_print = b_env.print end if b_chunk_warn == nil then b_chunk_warn = b_env.warn end end) end if j(b_chunk_print) ~= "function" then b_chunk_print = print end if j(b_chunk_warn) ~= "function" then b_chunk_warn = warn end b_env = b_merge_function_env( b_env, { __LARRY_WRAP_DEFINED_FUNCTION = b_chunk_helpers.__LARRY_WRAP_DEFINED_FUNCTION, __LARRY_INSTRUMENT = b_chunk_helpers.__LARRY_INSTRUMENT, __LARRY_UTF8_GRAPHEMES = b_chunk_helpers.__LARRY_UTF8_GRAPHEMES, __LARRY_NORMALIZE_SOURCE = b_chunk_helpers.__LARRY_NORMALIZE_SOURCE, __LARRY_PCALL = b_chunk_helpers.__LARRY_PCALL, __LARRY_XPCALL = b_chunk_helpers.__LARRY_XPCALL, __LARRY_LOADSTRING = b_chunk_helpers.__LARRY_LOADSTRING, __LARRY_LOAD = b_chunk_helpers.__LARRY_LOAD, __LARRY_GETFENV = b_chunk_helpers.__LARRY_GETFENV, __LARRY_SETFENV = b_chunk_helpers.__LARRY_SETFENV, __LARRY_PATCH_ENV = b_chunk_helpers.__LARRY_PATCH_ENV, __LARRY_STATE = b_chunk_helpers.__LARRY_STATE, __LARRY_CHUNK_PRINT = b_chunk_print, __LARRY_CHUNK_WARN = b_chunk_warn } ) b_source = q._rewrite_bare_output_calls(b_source) end if rawget(_G, "__LARRY_CHUNK_STRING_UI_COMPAT") == true then local b_chunk_string_ui_prelude = [[ do local __s = string if type(__s) == "table" then local function __set(__k, __v) pcall(function() __s[__k] = __v end) pcall(rawset, __s, __k, __v) end local function __value_fn(__v) return function() return __v end end __set("Image", __value_fn("")) __set("ImageContent", __value_fn("")) __set("ImageColor3", __value_fn(Color3.new(1, 1, 1))) __set("ImageTransparency", __value_fn(0)) __set("ImageRectOffset", __value_fn(Vector2.new(0, 0))) __set("ImageRectSize", __value_fn(Vector2.new(0, 0))) __set("SliceCenter", __value_fn(Rect.new(0, 0, 0, 0))) __set("SliceScale", __value_fn(1)) __set("TileSize", __value_fn(UDim2.new(1, 0, 1, 0))) __set("ScaleType", __value_fn(Enum.ScaleType.Stretch)) __set("ResampleMode", __value_fn(Enum.ResamplerMode.Default)) -- Keep default Luau/Roblox behavior: library tables should not expose -- Instance-like APIs unless explicitly requested for compatibility. if rawget(_G, "__LARRY_STRING_INSTANCE_COMPAT") == true then __set("FindFirstChild", __s.FindFirstChild or function() return nil end) __set("WaitForChild", __s.WaitForChild or __s.FindFirstChild) __set("FindFirstChildOfClass", __s.FindFirstChildOfClass or __s.FindFirstChild) __set("FindFirstChildWhichIsA", __s.FindFirstChildWhichIsA or __s.FindFirstChild) __set("GetChildren", __s.GetChildren or function() return {} end) __set("GetDescendants", __s.GetDescendants or __s.GetChildren) end end end ]] b_source = b_chunk_string_ui_prelude .. "\n" .. b_source b_base_source = b_source end local b_chunk_name = eu or "=(loadstring)" do local b_is_binary = string.find(al, "\0", 1, true) ~= nil if not b_is_binary then local b_binary_hits = 0 local b_probe_len = math.min(#al, 64) for b_index = 1, b_probe_len do local b_byte = string.byte(al, b_index) if b_byte and b_byte ~= 9 and b_byte ~= 10 and b_byte ~= 13 and (b_byte < 32 or b_byte > 126) then b_binary_hits = b_binary_hits + 1 end end b_is_binary = b_probe_len > 0 and b_binary_hits >= math.max(24, math.floor(b_probe_len * 0.6)) end if b_is_binary then local b_source_like_binary = al:find("function", 1, true) ~= nil or al:find("return", 1, true) ~= nil or al:find("local", 1, true) ~= nil if not b_source_like_binary then return nil, "binary chunks are not supported" end end end local function b_try_compile_loadstring_source(b_candidate) local b_loaded, b_err = b_compile_with_env(b_candidate, b_chunk_name, b_env) if not b_loaded and j(b_err) == "string" and b_err:lower():find("malformed escape", 1, true) then local b_escaped = b_larry_normalize_luau_string_escapes(b_candidate) if b_escaped ~= b_candidate then local b_escaped_loaded, b_escaped_err = b_compile_with_env(b_escaped, b_chunk_name, b_env) if b_escaped_loaded then return b_escaped_loaded, nil, b_escaped end return nil, b_escaped_err or b_err, b_candidate end end return b_loaded, b_err, b_candidate end local b_probe, an, b_compiled_source = b_try_compile_loadstring_source(b_source) if b_probe and b_compiled_source then b_source = b_compiled_source end if not b_probe then b_source = I(al) b_source = q._rewrite_parenthesized_format_calls(b_source) b_source = q._insert_missing_statement_separators(b_source) b_source = q._rewrite_guarded_comparisons(b_source) b_source = b_larry_patch_generated_loader_normalization(b_source) b_source = b_larry_inject_executor_prelude(b_source) b_source = b_larry_inject_type_builtin_shadow(b_source) b_source = q._rewrite_dtc_global_builtins(b_source) b_source = q._insert_missing_statement_separators(b_source) b_source = q._rewrite_guarded_comparisons(b_source) b_source = b_instrument_defined_functions(b_source) if #al <= 2048 then b_source = q._rewrite_bare_output_calls(b_source) end b_probe, an, b_compiled_source = b_try_compile_loadstring_source(b_source) if b_probe and b_compiled_source then b_source = b_compiled_source end if not b_probe then -- Roblox-like behavior: invalid source returns nil + compile error. return nil, an or "loadstring failed" end else local b_instrumented = b_instrument_defined_functions(b_base_source) if b_instrumented ~= b_base_source then if #al <= 2048 then b_instrumented = q._rewrite_bare_output_calls(b_instrumented) end local b_instrumented_probe = b_compile_with_env(b_instrumented, b_chunk_name, b_env) if b_instrumented_probe then b_source = b_instrumented end end end local b_meta = { source = b_source, base_source = b_source, source_tag = b_chunk_name, short_src = "loadstring", env = b_env, name = "anonymous", what = "Lua", nargs = 0, isvararg = true, wrap_returns = true } b_meta.upvalue_defs = b_parse_upvalue_defs(b_source) b_meta.upvalue_overrides = {} b_meta.constants, b_meta.literals = b_parse_constants(b_source) b_meta.constant_overrides = {} local function b_runner(...) return q._invoke_with_synced_globals( b_meta.env, function(...) local b_loaded, b_err = b_compile_with_env(b_apply_function_source(b_meta), b_chunk_name, b_meta.env) if not b_loaded then error(b_err or "loadstring failed", 0) end return b_loaded(...) end, ... ) end return b_make_wrapped_function(b_runner, b_meta) end load = (function(b_load_impl) return function(...) return b_load_impl(...) end end)(loadstring) _G.loadstring = loadstring _G.load = load b_env_state.core_libs.loadstring = loadstring b_env_state.core_libs.load = load b_env_state.hidden_values.__LARRY_LOADSTRING = loadstring b_env_state.hidden_values.__LARRY_LOAD = load b_mark_builtin_function(loadstring, "loadstring", 0, true) b_mark_builtin_function(load, "load", 0, true) require = function(eA) if eA == nil then error("bad argument #1 to 'require' (module expected)", 0) end if j(eA) == "string" then local b_modname = string.lower(aE(eA)) if b_modname:match("^@lune/") or b_modname:match("^@std/") then error("require for built-in modules is blocked", 0) end error("bad argument #1 to 'require' (ModuleScript expected)", 0) end if G(eA) then local b_store0 = t.property_store[eA] or {} local b_class0 = b_store0.ClassName or "" -- Runtime child stubs default to Folder; require() only accepts ModuleScript on Roblox. if b_class0 == "Folder" then b_store0.ClassName = "ModuleScript" b_store0.Source = b_store0.Source or "" b_class0 = "ModuleScript" end if b_class0 ~= "ModuleScript" then error("bad argument #1 to 'require' (ModuleScript expected)", 0) end elseif j(eA) ~= "number" then error("bad argument #1 to 'require' (module expected)", 0) end -- Check if it's a ModuleScript with invalid source if G(eA) then local b_store = t.property_store[eA] or {} local b_class = b_store.ClassName or "" if b_class == "ModuleScript" then local b_source = b_store.Source -- If source is set but not valid Lua, error if b_source and type(b_source) == "string" and #b_source > 0 then -- Check if it's valid Lua syntax local b_ok, b_err = pcall(loadstring, b_source) if not b_ok or b_err == nil then error("Failed to load module: invalid source", 0) end end end end t.require_cache = t.require_cache or {} if t.require_cache[eA] ~= nil then return t.require_cache[eA] end if G(eA) then local b_store = t.property_store[eA] or {} local b_name = b_store.Name or b_instance_name(eA) if b_name == "PlayerModule" then local b_noop = function(...) at("--[[PlayerModule.Update(...)]]") return nil end local b_player_module = { cameras = { Update = b_noop }, controls = { Update = b_noop }, Update = b_noop, GetCameras = function() return { Update = b_noop } end, GetControls = function() return { Update = b_noop } end } t.require_cache[eA] = b_player_module return b_player_module end end local eB = t.registry[eA] or aZ(eA) local z = bj("RequiredModule", false) b_mark_flexible_proxy(z) t.property_store[z] = t.property_store[z] or {} t.property_store[z].ClassName = "ModuleResult" t.property_store[z].Name = "RequiredModule" local _ = aW(z, "module") at(string.format("local %s = require(%s)", _, eB)) do local b_mt = native_getmetatable(z) or {} if b_mt.__call == nil then b_mt.__call = function() return nil end end if b_mt.__index == nil then b_mt.__index = function() return function() return nil end end end native_setmetatable(z, b_mt) end t.require_cache[eA] = z return z end _G.require = require -- SECURITY: route user-script lookups of `require` through our safe wrapper -- via hidden_values so it short-circuits inside b_env_state.index BEFORE the -- fallthrough to _G. This defends against any path where _G.require could be -- reverted to the native Lune require (which would expose @lune/* modules and -- give user-supplied scripts arbitrary filesystem/process access on the host). b_env_state.hidden_values.require = require -- Block other module-loading/host-IO globals that Lune may expose. Real Roblox -- scripts never use these; refusing them prevents sandbox escape via -- `dofile`, `loadfile`, `package.loadlib`, or any leaked Lune module table. b_env_state.hidden_keys.dofile = true b_env_state.hidden_keys.loadfile = true b_env_state.hidden_keys.package = true b_env_state.hidden_keys.process = true b_env_state.hidden_keys.fs = true b_env_state.hidden_keys.net = true b_env_state.hidden_keys.stdio = true b_env_state.hidden_keys.serde = true b_env_state.hidden_keys.regex = true b_env_state.hidden_keys.datetime = true b_env_state.hidden_keys.roblox = true b_env_state.hidden_keys.luau = true print = function(...) local bA = {n = select("#", ...), ...} local function b_emit_print_sink() local b8 = {} for W = 1, (bA.n or 0) do table.insert(b8, aZ(bA[W])) end at(string.format("print(%s)", table.concat(b8, ", "))) local c_log = t.service_cache.LogService if c_log and t.property_store[c_log] and t.property_store[c_log].MessageOut then local c_parts = {} for W = 1, (bA.n or 0) do table.insert(c_parts, m(bA[W])) end b_fire_signal(t.property_store[c_log].MessageOut, table.concat(c_parts, "\t"), b_enum_item("Enum.MessageType.MessageOutput")) end end if not t.print_dispatching then local b_env = b_current_function_env() local b_override = nil if j(b_env) == "table" then local b_ok, b_value = pcall(function() return b_env.print end) if b_ok then b_override = b_value end end if j(b_override) == "function" and b_override ~= print then t.print_dispatching = true local b_results = b_pack(g(b_override, ...)) t.print_dispatching = nil if not b_results[1] then error(b_results[2], 0) end if rawget(_G, "__LARRY_ALWAYS_EMIT_PRINT_SINK") ~= false then b_emit_print_sink() end return native_unpack(b_results, 2, b_results.n) end end b_emit_print_sink() end _G.print = print b_mark_builtin_function(print, "print", 0, true) warn = function(...) if not t.warn_dispatching then local b_env = b_current_function_env() local b_override = nil if j(b_env) == "table" then local b_ok, b_value = pcall(function() return b_env.warn end) if b_ok then b_override = b_value end end if j(b_override) == "function" and b_override ~= warn then t.warn_dispatching = true local b_results = b_pack(g(b_override, ...)) t.warn_dispatching = nil if not b_results[1] then error(b_results[2], 0) end return native_unpack(b_results, 2, b_results.n) end end local bA = {...} local b8 = {} for W, b5 in ipairs(bA) do table.insert(b8, aZ(b5)) end at(string.format("warn(%s)", table.concat(b8, ", "))) local c_log = t.service_cache.LogService if c_log and t.property_store[c_log] and t.property_store[c_log].MessageOut then local c_parts = {} for _, c_value in ipairs(bA) do table.insert(c_parts, m(c_value)) end b_fire_signal(t.property_store[c_log].MessageOut, table.concat(c_parts, "\t"), b_enum_item("Enum.MessageType.MessageWarning")) end end _G.warn = warn b_mark_builtin_function(warn, "warn", 0, true) if os then os.clock = function() local b_now = tonumber(t.simulated_time) or tonumber(t.fake_clock) or 0 if t.pumping_runservice == true then t.os_clock_base = b_now t.os_clock_offset = 0 -- Roblox/os.clock is strictly positive from first call; benchmarks assert os.clock() > 0 before any wait. local b_out = b_now + (tonumber(t.os_clock_offset) or 0) return (b_out > 0) and b_out or 1e-9 end if tonumber(t.os_clock_base) ~= b_now then t.os_clock_base = b_now t.os_clock_offset = 0 else t.os_clock_offset = (tonumber(t.os_clock_offset) or 0) + 1e-6 end local b_out = b_now + (tonumber(t.os_clock_offset) or 0) return (b_out > 0) and b_out or 1e-9 end os.time = function() return math.floor((t.epoch_base or 1713916800) + (tonumber(t.simulated_time) or tonumber(t.fake_clock) or 0)) end end shared = type(rawget(_G, "shared")) == "table" and rawget(_G, "shared") or {} _G.shared = shared b_env_state.public_values = {} b_env_state.public_values = _G b_env_state.script_global_table = {} b_env_state.public_env = setmetatable({}, {__index = b_env_state.index, __newindex = b_env_state.write_global}) b_env_state.script_global_table._G = b_env_state.script_global_table rawset(b_env_state.script_global_table, "game", nil) rawset(b_env_state.script_global_table, "Game", nil) rawset(b_env_state.script_global_table, "workspace", nil) rawset(b_env_state.script_global_table, "Workspace", nil) rawset(b_env_state.script_global_table, "script", nil) rawset(b_env_state.script_global_table, "Enum", nil) rawset(b_env_state.script_global_table, "shared", nil) rawset(b_env_state.script_global_table, "loadstring", loadstring) rawset(b_env_state.script_global_table, "load", load) native_setmetatable( b_env_state.script_global_table, { __index = b_env_state.index, __newindex = function(b_tbl, b_key, b_value) rawset(b_tbl, b_key, b_value) b_env_state.write_global(b_tbl, b_key, b_value) end } ) b_env_state.public_values.loadstring = loadstring b_env_state.public_values.load = load b_env_state.public_values._VERSION = "Luau" _G._G = b_env_state.script_global_table _G._VERSION = "Luau" -- Universal Luau Globals Patch if not b_env_state.public_values.bit32 and b_env_state.public_values.bit then b_env_state.public_values.bit32 = b_env_state.public_values.bit end if not _G.bit32 and _G.bit then _G.bit32 = _G.bit end if not table.freeze then -- Fallback if not already set table.freeze = function(t) return t end table.isfrozen = function() return true end end pcall(function() local b_gmeta = p0(_G) or {} if j(b_gmeta) ~= "table" then b_gmeta = {} end local b_prev_g_index = b_gmeta.__index b_gmeta.__index = function(tbl, key) if key == "game" or key == "Game" then return b_env_state.roblox_game end if key == "workspace" or key == "Workspace" then return b_env_state.roblox_workspace end if key == "script" then return b_env_state.roblox_script end if key == "Enum" then return b_env_state.roblox_enum end if j(b_prev_g_index) == "function" then return b_prev_g_index(tbl, key) end if j(b_prev_g_index) == "table" then return b_prev_g_index[key] end return b_native_rawget(tbl, key) end if j(b_gmeta.__newindex) ~= "function" then b_gmeta.__newindex = function(tbl, key, value) b_native_rawset(tbl, key, value) end end local b_prev_g_eq = b_gmeta.__eq b_gmeta.__eq = function(a, b) local a_mt = native_getmetatable(a) if a_mt and a_mt.__eq and a_mt ~= b_gmeta then return a_mt.__eq(a, b) end local b_mt = native_getmetatable(b) if b_mt and b_mt.__eq and b_mt ~= b_gmeta then return b_mt.__eq(a, b) end if j(b_prev_g_eq) == "function" then return b_prev_g_eq(a, b) end return b_native_rawequal(a, b) end if j(debug) == "table" and j(debug.setmetatable) == "function" then debug.setmetatable(_G, b_gmeta) else setmetatable(_G, b_gmeta) end end) b_env_state.hidden_values.__LARRY_WRAP_DEFINED_FUNCTION = b_wrap_defined_function b_env_state.hidden_values.__LARRY_INSTRUMENT = b_instrument_defined_functions b_env_state.hidden_values.__LARRY_UTF8_GRAPHEMES = function(b_text) if j(b_text) ~= "string" then error("bad argument #1 to 'graphemes' (string expected, got " .. j(b_text) .. ")", 0) end local b_len = #b_text local function b_iter(b_state, b_index) local b_start = (tonumber(b_index) or 0) + 1 if b_start > b_len then return nil end local b_byte = string.byte(b_state, b_start) if not b_byte then return nil end local b_width = 1 if b_byte >= 240 then b_width = 4 elseif b_byte >= 224 then b_width = 3 elseif b_byte >= 194 then b_width = 2 end local b_finish = math.min(b_len, b_start + b_width - 1) return b_start, b_finish end return b_iter, b_text, 0 end b_env_state.hidden_values.__LARRY_NORMALIZE_SOURCE = function(b_source) if j(b_source) ~= "string" then return b_source end local b_out = b_larry_normalize_source_for_loader(b_source) b_out = b_larry_normalize_luau_string_escapes(b_out) b_out = b_normalize_numeric_backtick_arithmetic(b_out) if q and q._rewrite_parenthesized_format_calls then b_out = q._rewrite_parenthesized_format_calls(b_out) end return b_out end b_env_state.hidden_values.__LARRY_PATCH_ENV = function(b_env) if j(b_env) == "table" then rawset(b_env, "pcall", _G.pcall) rawset(b_env, "xpcall", _G.xpcall) rawset(b_env, "loadstring", loadstring) rawset(b_env, "load", load) rawset(b_env, "getfenv", b_env_state.exploit_funcs.getfenv) rawset(b_env, "setfenv", b_env_state.exploit_funcs.setfenv) rawset(b_env, "debug", b_env_state.debug_surface or b_env_state.exploit_funcs.debug) end return b_env end b_env_state.hidden_values.__LARRY_STATE = function() return t end rawset(_G, "__LARRY_WRAP_DEFINED_FUNCTION", nil) rawset(_G, "__LARRY_INSTRUMENT", nil) rawset(_G, "__LARRY_UTF8_GRAPHEMES", nil) rawset(_G, "__LARRY_NORMALIZE_SOURCE", nil) rawset(_G, "__LARRY_PCALL", nil) rawset(_G, "__LARRY_XPCALL", nil) rawset(_G, "__LARRY_LOADSTRING", nil) rawset(_G, "__LARRY_LOAD", nil) rawset(_G, "__LARRY_GETFENV", nil) rawset(_G, "__LARRY_SETFENV", nil) rawset(_G, "__LARRY_PATCH_ENV", nil) rawset(_G, "__LARRY_STATE", nil) b_merge_function_env = function(b_base, b_overlay) local b_env = {} if j(b_base) == "table" then for b_key, b_value in pairs(b_base) do local b_hide = false if j(b_key) == "string" then if b_key:match("^b_[A-Za-z0-9_]*$") or b_env_state.hidden_keys[b_key] or (b_env_state.merge_skip_raw_base_keys and b_env_state.merge_skip_raw_base_keys[b_key]) then b_hide = true end end if not b_hide then b_env[b_key] = b_value end end end if j(b_overlay) == "table" then for b_key, b_value in pairs(b_overlay) do b_env[b_key] = b_value end end b_env._G = b_env_state.script_global_table or b_env_state.public_env or _G return native_setmetatable(b_env, {__index = b_env_state.index}) end b_env_state._assign_path = function(b_root, b_path, b_value) if j(b_root) ~= "table" or j(b_path) ~= "string" or b_path == "" then return end local b_cursor = b_root local b_segments = {} for b_segment in string.gmatch(b_path, "[^%.]+") do b_segments[#b_segments + 1] = b_segment end if #b_segments == 0 then return end for b_index = 1, #b_segments - 1 do local b_key = b_segments[b_index] local b_next = rawget(b_cursor, b_key) if j(b_next) ~= "table" then b_next = {} rawset(b_cursor, b_key, b_next) end b_cursor = b_next end rawset(b_cursor, b_segments[#b_segments], b_value) end b_env_state._build_compat_surfaces = function() local b_genv = {} local b_hidden_genv = { getstack=true, dumpstring=true, getupvalues=true, getupvalue=true, getconstants=true, getconstant=true, getregistry=true, getreg=true, setstack=true, setconstant=true, setupvalue=true, getproto=true, getprotos=true, setproto=true, getnilinstances=true, hookfunc=true, hookfunction=true, hookmetamethod=true, newcclosure=true, isourclosure=true, isexecutorclosure=true, checkclosure=true, decompile=true, getscriptclosure=true, getscriptbytecode=true, } for b_name, b_value in pairs(b_env_state.exploit_funcs or {}) do if not b_hidden_genv[b_name] then b_genv[b_name] = b_value end end local function b_read_path(b_root, b_path) local b_cursor = b_root for b_segment in string.gmatch(b_path, "[^%.]+") do if j(b_cursor) ~= "table" then return nil end b_cursor = rawget(b_cursor, b_segment) if b_cursor == nil then return nil end end return b_cursor end local b_stub_paths = { "WebSocket.Connect", "WebSocket.connect", "WebSocket.Send", "WebSocket.Close", "WebSocket.send", "WebSocket.close", "http.request", "http_request", "httpget", "httpgetasync", "httpgetAsync", "httpGet", "httpGetAsync", "http_post", "httpPost", "httpPostAsync", "http_post_async", "http.request_async", "request_async", "syn.request", "fluxus.request", "krnl.request", "electron.request", "appendfile", "writefile", "readfile", "isfile", "isfolder", "makefolder", "listfiles", "delfile", "delfolder", "deletefile", "deletefolder", "loadfile", "dofile", "runfile", "cache.invalidate", "cache.iscached", "cache.replace", "can_signal_replicate", "cansignalreplicate", "replicate_signal", "replicatesignal", "clear_teleport_queue", "clearqueueonteleport", "clearteleportqueue", "queue_on_teleport", "queueonteleport", "clearqueueonteleport", "clonereference", "cloneref", "clonerefs", "compareinstances", "compareInstances", "clonefunction", "cloneclosure", "restoreclosure", "restorefunction", "restorefunc", "replaceclosure", "consoleclear", "consolecreate", "consoledestroy", "consoleerr", "consolehide", "consoleinfo", "consoleinput", "consoleprint", "consolesettitle", "consoleshow", "consolewarn", "rconsoleerror", "rconsolehidden", "rconsolehide", "rconsoleshow", "rconsoletoggle", "rconsolesettitle", "rconsoletop", "rconsolewarn", "rconsoleinfo", "rconsoleprint", "rconsoleerr", "rconsoleclear", "rconsolecreate", "rconsoledestroy", "rconsoleinput", "rconsolename", "create_comm_channel", "get_comm_channel", "getcommchannel", "createcommchannel", "create_secure_function", "secure_call", "crypt.hmac", "crypt.random", "crypt.encrypt", "crypt.decrypt", "crypt.hash", "crypt.generatebytes", "crypt.generatekey", "crypt.base64.encode", "crypt.base64.decode", "crypt.base64_encode", "crypt.base64_decode", "crypt.base64encode", "crypt.base64decode", "crypt.lz4compress", "crypt.lz4decompress", "debug.dumpcodesize", "debug.dumpheap", "debug.dumprefs", "debug.getcallstack", "debug.getstack", "debug.getproto", "debug.getprotos", "debug.setstack", "debug.getconstant", "debug.getconstants", "debug.getupvalue", "debug.getupvalues", "debug.setupvalue", "debug.getinfo", "debug.info", "debug.getregistry", "debug.getmetatable", "debug.setmetatable", "debug.traceback", "debug.profilebegin", "debug.profileend", "deletefile", "deletefolder", "delfile", "delfolder", "dofile", "dumpstring", "filtergc", "getgc", "getreg", "getregistry", "getinstances", "getnilinstances", "getloadedmodules", "getrunningscripts", "getscripts", "getmodules", "getproperties", "getcallingscript", "getconnections", "firesignal", "fireclickdetector", "fireproximityprompt", "firetouchinterest", "get_actor_from_thread", "get_actors", "get_current_actor", "get_deleted_actors", "get_game_state", "get_hidden_gui", "get_signal_arguments", "get_signal_arguments_info", "get_signal_cons", "get_signal_whitelist", "getactorfromthread", "getactors", "getactorstates", "getactorthreads", "run_on_actor", "runonactor", "get_current_actor", "getcurrentactor", "getexecutorname", "identifyexecutor", "gethwid", "getexecutorname", "identifyexecutor", "getidentity", "setidentity", "getthreadidentity", "setthreadidentity", "getthreadcontext", "setthreadcontext", "getfunctionhash", "getgamestate", "gethwid", "getinstancecache", "getmodules", "getproperties", "getscripthash", "getsignalarguments", "getsignalargumentsinfo", "getsignalwhitelist", "hookfunc", "hookfunction", "hookmetamethod", "newcclosure", "islclosure", "iscclosure", "checkcaller", "checkclosure", "isourclosure", "isexecutorclosure", "isexecutorclosure", "isnewcclosure", "isnewlclosure", "newlclosure", "http.request", "is_parallel", "iscustomcclosure", "iscustomlclosure", "isexecutorclosure", "isfunchooked", "isfunctionhooked", "isparallel", "isprotected", "isrenderobject", "isuntouched", "iswindowactive", "keytap", "keyclick", "keypress", "keyrelease", "mouse1click", "mouse1press", "mouse1release", "mouse2click", "mouse2press", "mouse2release", "mousemoverel", "mousemoveabs", "mousescroll", "loadfile", "make_writable", "makewriteable", "make_writeable", "make_writeable", "make_readonly", "makereadonly", "makewritable", "makewriteable", "setreadonly", "isreadonly", "iswriteable", "iswritable", "messagebox", "newlclosure", "rconsoleerror", "rconsolesettitle", "rconsoleshow", "rconsoletoggle", "readfile", "replaceclosure", "replicate_signal", "replicatesignal", "restoreclosure", "restorefunc", "restorefunction", "runfile", "set_namecall_method", "set_namecallmethod", "get_namecall_method", "get_namecallmethod", "getnamecallmethod", "setnamecallmethod", "getnamecallmethod", "set_stack_hidden", "setclipboard", "setrbxclipboard", "toclipboard", "setnamecallmethod", "setrenderproperty", "setstackhidden", "setuntouched", "toclipboard", "writefile" , "getupvalue", "getupvalues", "setupvalue", "getconstant", "getconstants", "setconstant", "getproto", "getprotos", "setproto", "getstack", "setstack", "getinfo", "debug.getinfo", "debug.getupvalue", "debug.getupvalues", "debug.getconstant", "debug.getconstants", "debug.getproto", "debug.getprotos", "debug.getstack", "debug.setstack", "debug.setupvalue", "debug.setconstant", "setinfo", "debug.setinfo", "validlevel", "debug.validlevel", "isvalidlevel", "debug.isvalidlevel", "getrawmetatable", "setrawmetatable", "getmetatable", "setmetatable", "setscriptable", "isscriptable", "gethiddenproperty", "gethiddenproperties", "sethiddenproperty", "getrenderproperty", "setrenderproperty", "isrenderobj", "isrenderobject", "cleardrawcache", "gethui", "get_hidden_gui", "gethiddengui", "getcustomasset", "getsynasset", "getcustomassets", "getclipboard", "setclipboard", "setrbxclipboard", "toclipboard", "messagebox", "MessageBox", "setfpscap", "getfpscap", "setfflag", "getfflag", "printidentity", "getthreadidentity", "setthreadidentity", "getthreadcontext", "setthreadcontext", "getidentity", "setidentity", "getthreadidentity", "set_thread_identity", "get_thread_identity", "set_thread_context", "get_thread_context", "getthreadcontext", "setthreadcontext", "isrbxactive", "isgameactive", "iswindowactive", "setwindowactive", "setwindowtitle", "consolehide", "consoleshow", "rconsolehide", "rconsoleshow", "rconsoletoggle", "rconsolehidden", "decompile", "dumpstring", "dumpstring", "getscriptbytecode", "getscriptclosure", "getscriptfunction", "getsenv", "gettenv", "getrenv", "getgenv", "getgc", "filtergc", "getnilinstances", "getinstances", "getloadedmodules", "getmodules", "getrunningscripts", "getscripts", "getcallbackmember", "getcallbackvalue", "getnamecallmethod", "setnamecallmethod", "get_namecall_method", "set_namecall_method", "getnamecallmethod", "setnamecallmethod", "set_namecallmethod", "set_namecall_method", "getconnections", "firesignal", "firetouchinterest", "fireclickdetector", "fireproximityprompt", "run_on_actor", "runonactor", "getactors", "getactorstates", "getactorthreads", "getcurrentactor", "get_current_actor", "getactorfromthread", "get_actor_from_thread", "getdeletedactors", "get_deleted_actors", "setuntouched", "isuntouched", "set_stack_hidden", "setstackhidden", "getthreadcontext", "getthreadidentity", "getinstancecache", "compareinstances", "clonefunction", "hookfunction", "hookmetamethod", "newcclosure", "checkcaller", "iscclosure", "islclosure", "isourclosure", "isexecutorclosure", "checkclosure", "lz4compress", "lz4decompress", "crypt.lz4compress", "crypt.lz4decompress", "base64.encode", "base64.decode", "base64_encode", "base64_decode", "base64encode", "base64decode", "base64_encode", "base64_decode", "crypt.base64.encode", "crypt.base64.decode", "crypt.base64encode", "crypt.base64decode", "crypt.base64_encode", "crypt.base64_decode", "crypt.base64encode", "crypt.base64decode", "crypt.encrypt", "crypt.decrypt", "crypt.hash", "crypt.random", "crypt.hmac", "crypt.generatebytes", "crypt.generatekey", "request", "http.request", "http_request", "syn.request", "fluxus.request", "electron.request", "krnl.request" , "saveinstance", "getspecialinfo", "getexecutorname", "identifyexecutor", "getfunctionhash", "gethwid", "isnetworkowner", "setsimulationradius", "getfpscap", "setfpscap", "getfflag", "setfflag", "setclipboard", "setrbxclipboard", "getclipboard", "setwindowactive", "setwindowtitle", "setwindowpos", "getwindowpos", "setrenderproperty", "getrenderproperty", "setscriptable", "isscriptable", "isprotected", "isfunchooked", "isfunctionhooked", "isfunchooked", "isfunctionhooked", "hookfunc", "hookfunction", "hookmetamethod", "restoreclosure", "restorefunction", "restorefunc", "replaceclosure", "restoreclosure", "cloneref", "clonereference", "clonefunction", "newcclosure", "newlclosure", "islclosure", "iscclosure", "isnewcclosure", "isnewlclosure", "iscustomcclosure", "iscustomlclosure", "isexecutorclosure", "isourclosure", "checkclosure", "checkcaller", "getrawmetatable", "setrawmetatable", "getnamecallmethod", "setnamecallmethod", "get_namecall_method", "set_namecall_method", "set_namecallmethod", "get_namecallmethod", "set_namecallmethod", "getinfo", "getcallstack", "getstack", "setstack", "getconstant", "getconstants", "setconstant", "getupvalue", "getupvalues", "setupvalue", "getproto", "getprotos", "setproto", "getscriptbytecode", "getscriptclosure", "getscriptfunction", "getscriptfromthread", "getcallingscript", "getgc", "filtergc", "getreg", "getregistry", "getinstances", "getnilinstances", "getloadedmodules", "getmodules", "getrunningscripts", "getscripts", "getsenv", "gettenv", "getrenv", "getgenv", "gethui", "get_hidden_gui", "protect_gui", "unprotect_gui", "syn.protect_gui", "syn.unprotect_gui", "cleardrawcache", "Drawing.clear", "Drawing.Clear", "Drawing.remove", "Drawing.Remove", "Drawing.delete", "Drawing.Delete", "Drawing.isrenderobj", "Drawing.isrenderobject", "isrenderobj", "isrenderobject", "WebSocket.ConnectAsync", "WebSocket.connectAsync", "WebSocket.ConnectAsync", "WebSocket.connect_async", "WebSocket.Send", "WebSocket.Close", "WebSocket.send", "WebSocket.close", "WebSocket.OnMessage", "WebSocket.OnClose", "WebSocket.OnError", "WebSocket.onmessage", "WebSocket.onclose", "WebSocket.onerror", "cache.clear", "cache.get", "cache.put", "cache.remove", "cache.contains", "cache.invalidate", "cache.iscached", "cache.replace", "appendfile", "readfile", "writefile", "isfile", "isfolder", "makefolder", "listfiles", "delfile", "delfolder", "deletefile", "deletefolder", "make_writeable", "make_writeable", "make_writeable", "make_writable", "makewritable", "makewriteable", "make_readonly", "makereadonly", "setreadonly", "isreadonly", "iswriteable", "iswritable", "lz4compress", "lz4decompress", "crypt.lz4compress", "crypt.lz4decompress", "decompile", "dumpstring", "http.request", "http_request", "request", "httpget", "httpgetAsync", "http_request_async", "request_async", "http.request_async", "base64.encode", "base64.decode", "base64_encode", "base64_decode", "base64encode", "base64decode", "crypt.base64.encode", "crypt.base64.decode", "crypt.base64_encode", "crypt.base64_decode", "crypt.base64encode", "crypt.base64decode", "crypt.encrypt", "crypt.decrypt", "crypt.hash", "crypt.hmac", "crypt.random", "crypt.generatebytes", "crypt.generatekey", "getconnections", "firesignal", "fireclickdetector", "fireproximityprompt", "firetouchinterest", "clear_teleport_queue", "clearteleportqueue", "clearqueueonteleport", "queue_on_teleport", "queueonteleport", "setuntouched", "isuntouched", "get_thread_identity", "set_thread_identity", "getthreadidentity", "setthreadidentity", "getthreadcontext", "setthreadcontext", "getthreadcontext", "setthreadcontext" } local b_stub_blacklist = { ["getstack"]=true, ["dumpstring"]=true, ["getupvalues"]=true, ["getupvalue"]=true, ["getconstants"]=true, ["getconstant"]=true, ["getregistry"]=true, ["getreg"]=true, ["setstack"]=true, ["setconstant"]=true, ["setupvalue"]=true, ["getproto"]=true, ["getprotos"]=true, ["setproto"]=true, ["getnilinstances"]=true, ["hookfunc"]=true, ["hookfunction"]=true, ["hookmetamethod"]=true, ["newcclosure"]=true, ["isourclosure"]=true, ["isexecutorclosure"]=true, ["checkclosure"]=true, ["decompile"]=true, ["getscriptclosure"]=true, ["getscriptbytecode"]=true, ["debug.getstack"]=true, ["debug.getregistry"]=true, ["debug.getupvalues"]=true, ["debug.getupvalue"]=true, ["debug.getconstants"]=true, ["debug.getconstant"]=true, ["debug.setstack"]=true, ["debug.setupvalue"]=true, ["debug.setconstant"]=true, } for _, b_path in ipairs(b_stub_paths) do if b_stub_blacklist[b_path] then -- skip: do not expose introspection stubs that anti-tamper checks for else local b_existing = b_read_path(b_genv, b_path) if b_existing == nil then b_env_state._assign_path(b_genv, b_path, b_env_state.exploit_funcs.rconsoleclear) end end end local b_renv_debug = {} if j(debug) == "table" then for b_k, b_v in pairs(debug) do b_renv_debug[b_k] = b_v end end b_renv_debug.dumpcodesize = b_renv_debug.dumpcodesize or b_env_state.exploit_funcs.rconsoleclear b_renv_debug.dumpheap = b_renv_debug.dumpheap or b_env_state.exploit_funcs.rconsoleclear b_renv_debug.dumprefs = b_renv_debug.dumprefs or b_env_state.exploit_funcs.rconsoleclear b_renv_debug.getmemorycategory = b_renv_debug.getmemorycategory or b_env_state.exploit_funcs.rconsoleclear b_renv_debug.setmemorycategory = b_renv_debug.setmemorycategory or b_env_state.exploit_funcs.rconsoleclear b_renv_debug.resetmemorycategory = b_renv_debug.resetmemorycategory or b_env_state.exploit_funcs.rconsoleclear b_renv_debug.loadmodule = b_renv_debug.loadmodule or b_env_state.exploit_funcs.rconsoleclear b_renv_debug.getcallstack = b_renv_debug.getcallstack or b_env_state.exploit_funcs.rconsoleclear b_renv_debug.getstack = nil b_renv_debug.isvalidlevel = b_renv_debug.isvalidlevel or b_env_state.exploit_funcs.rconsoleclear b_renv_debug.validlevel = b_renv_debug.validlevel or b_env_state.exploit_funcs.rconsoleclear b_renv_debug.setstack = nil b_renv_debug.setinfo = b_renv_debug.setinfo or b_env_state.exploit_funcs.rconsoleclear b_renv_debug.getregistry = nil b_renv_debug.profilebegin = b_renv_debug.profilebegin or b_env_state.exploit_funcs.rconsoleclear b_renv_debug.profileend = b_renv_debug.profileend or b_env_state.exploit_funcs.rconsoleclear local b_renv = { math = math, string = string, table = table, coroutine = coroutine, task = task, debug = b_renv_debug, utf8 = utf8, buffer = buffer, vector = vector, bit32 = bit32, os = b_public_os, Instance = Instance, CFrame = CFrame, Color3 = Color3, BrickColor = BrickColor, UDim = UDim, UDim2 = UDim2, Vector2 = Vector2, Vector3 = Vector3, Vector2int16 = Vector2int16, Vector3int16 = Vector3int16, NumberRange = NumberRange, NumberSequence = NumberSequence, NumberSequenceKeypoint = NumberSequenceKeypoint, ColorSequence = ColorSequence, ColorSequenceKeypoint = ColorSequenceKeypoint, Rect = Rect, Region3 = Region3, Region3int16 = Region3int16, Random = Random, Ray = Ray, RaycastParams = RaycastParams, OverlapParams = OverlapParams, TweenInfo = TweenInfo, PhysicalProperties = PhysicalProperties, CatalogSearchParams = CatalogSearchParams, DateTime = DateTime, DockWidgetPluginGuiInfo = DockWidgetPluginGuiInfo, Faces = Faces, Axes = Axes, CellId = CellId, Delay = delay, Spawn = spawn, Wait = wait, print = print, warn = warn, assert = assert, error = error, pcall = pcall, xpcall = xpcall, pairs = pairs, ipairs = ipairs, next = next, type = type, typeof = typeof, tostring = tostring, tonumber = tonumber, rawequal = rawequal, rawget = rawget, rawset = rawset, getfenv = getfenv, setfenv = setfenv, loadstring = loadstring, load = load, require = require, tick = tick, time = time, version = version, gcinfo = gcinfo, elapsedTime = elapsedTime, oth = { get_original_thread = b_env_state.exploit_funcs.rconsoleclear, get_root_callback = b_env_state.exploit_funcs.rconsoleclear, hook = b_env_state.exploit_funcs.rconsoleclear, unhook = b_env_state.exploit_funcs.rconsoleclear, is_hook_thread = b_env_state.exploit_funcs.rconsoleclear }, raknet = { send = b_env_state.exploit_funcs.rconsoleclear, add_send_hook = b_env_state.exploit_funcs.rconsoleclear, remove_send_hook = b_env_state.exploit_funcs.rconsoleclear }, SharedTable = { new = b_env_state.exploit_funcs.rconsoleclear, clone = b_env_state.exploit_funcs.rconsoleclear, cloneAndFreeze = b_env_state.exploit_funcs.rconsoleclear, clear = b_env_state.exploit_funcs.rconsoleclear, update = b_env_state.exploit_funcs.rconsoleclear, increment = b_env_state.exploit_funcs.rconsoleclear, size = b_env_state.exploit_funcs.rconsoleclear, isFrozen = b_env_state.exploit_funcs.rconsoleclear } } return b_genv, b_renv end function q.reset() t = { output = {}, indent = 0, registry = {}, reverse_registry = {}, names_used = {}, parent_map = {}, property_store = {}, call_graph = {}, variable_types = {}, string_refs = {}, proxy_id = 0, callback_depth = 0, auto_firing = false, pending_iterator = false, last_http_url = nil, last_http_fetched = false, last_emitted_line = nil, repetition_count = 0, current_size = 0, limit_reached = false, lar_counter = 0, captured_constants = {}, simulated_time = 0, service_cache = {}, enum_cache = {}, child_cache = {}, mock_json_store = {}, http_cache = {}, sequence_keypoints = {}, mem_storage = {}, collection_tags = {}, collection_signals = {}, signal_meta = {}, signal_connections = {}, connection_info = {}, active_tweens = {}, action_bindings = {}, file_system = {}, introspection_log = {}, captured_loadstring_sources = {}, emitted_function_sources = {}, function_meta = {}, function_hooks = {}, metamethod_hooks = {}, current_namecall_method = nil, current_namecall_object = nil, hook_depth = 0, guid_counter = 0, debug_id_counter = 0, fake_clock = 0, version_parse_phase = nil, epoch_base = 1713916800, heartbeat_counter = 0, scheduled_threads = {}, schedule_counter = 0, scheduled_resume_counts = {}, signal_waiters = {}, running_scheduled = false, user_code_active = false, main_thread = nil, active_env_stack = {}, script_env = {}, function_env = {}, last_blank_error_context = nil, hookop_emitted_lines = 0, hookop_budget_warned = false, monolithic_runtime_mode = false } b_env_state.mutated_keys = {} b_env_state.track_mutations = false b_env_state.getfenv_hidden = {} b_env_state.getfenv_view_cache = setmetatable({}, {__mode = "k"}) b_env_state.getfenv_allowed_keys = {} local function b_seed_getfenv_allowed_from(b_table) if j(b_table) ~= "table" then return end for b_key, _ in pairs(b_table) do if j(b_key) == "string" then b_env_state.getfenv_allowed_keys[b_key] = true end end end b_seed_getfenv_allowed_from(_G) b_seed_getfenv_allowed_from(b_env_state.public_values) b_seed_getfenv_allowed_from(b_env_state.core_libs) b_env_state.getfenv_allowed_keys.loadstring = true b_env_state.getfenv_allowed_keys.load = true b_env_state.getfenv_allowed_keys.getfenv = true b_env_state.getfenv_allowed_keys.setfenv = true if coroutine and j(coroutine.running) == "function" then t.main_thread = coroutine.running() end aM = {} game = bj("game", true) workspace = bj("workspace", true) script = bj("script", true) Enum = bj("Enum", true) b_env_state.roblox_game = game b_env_state.roblox_workspace = workspace b_env_state.roblox_script = script b_env_state.roblox_enum = Enum shared = type(rawget(_G, "shared")) == "table" and rawget(_G, "shared") or {} rawset(Vector3, "zero", Vector3.new(0, 0, 0)) rawset(Vector3, "one", Vector3.new(1, 1, 1)) rawset(Vector3, "xAxis", Vector3.new(1, 0, 0)) rawset(Vector3, "yAxis", Vector3.new(0, 1, 0)) rawset(Vector3, "zAxis", Vector3.new(0, 0, 1)) rawset(Vector2, "zero", Vector2.new(0, 0)) rawset(Vector2, "one", Vector2.new(1, 1)) rawset(Vector2, "xAxis", Vector2.new(1, 0)) rawset(Vector2, "yAxis", Vector2.new(0, 1)) rawset(CFrame, "identity", CFrame.new(0, 0, 0)) rawset(Vector3, "FromNormalId", Vector3.fromNormalId) rawset(Vector3, "FromAxis", Vector3.FromAxis) t.property_store[game] = { PlaceId = u, GameId = v.__game_id, placeId = u, gameId = v.__game_id, Archivable = false, ClassName = "DataModel", Name = "Ugc", CreatorType = b_enum_item("Enum.CreatorType.User"), PrivateServerId = "", PrivateServerOwnerId = 0, CreatorId = 0, JobId = string.format( "%04x%04x-%04x-%04x-%04x-%04x%04x%04x", math.random(0, 0xffff), math.random(0, 0xffff), math.random(0, 0xffff), math.random(0, 0xffff), math.random(0, 0xffff), math.random(0, 0xffff), math.random(0, 0xffff), math.random(0, 0xffff) ), PlaceVersion = 1, Parent = nil, Changed = b_ensure_signal(game, "Changed", "game.Changed"), ServiceAdded = b_ensure_signal(game, "ServiceAdded", "game.ServiceAdded"), ServiceRemoving = b_ensure_signal(game, "ServiceRemoving", "game.ServiceRemoving") } t.property_store[workspace] = { ClassName = "Workspace", Name = "Workspace", Changed = b_ensure_signal(workspace, "Changed", "workspace.Changed"), DistributedGameTime = 0, Gravity = 196.2, AirDensity = 1.2, FallenPartsDestroyHeight = -500, StreamingEnabled = false } t.parent_map[workspace] = game -- Mode B: some env checks expect `script.Parent == nil` t.parent_map[script] = nil t.property_store[script] = {ClassName = "LocalScript", Name = "DumpedScript", Parent = nil, Source = ""} local e_terrain = b_child_proxy("Terrain", workspace, "Terrain") local e_camera = b_child_proxy("Camera", workspace, "Camera") local e_baseplate = b_child_proxy("Baseplate", workspace, "Part") local e_debris = b_child_proxy("Debris", workspace, "Folder") local e_destroyable = b_child_proxy("Destroyable", workspace, "Folder") local e_bootstrap = b_child_proxy("CoreBootstrap", game, "Folder") local e_bootstrap_module = b_child_proxy("PlayerModule", e_bootstrap, "ModuleScript") b_child_proxy("ControlModule", e_bootstrap_module, "ModuleScript") local e_bootstrap_local = b_child_proxy("ControlScript", e_bootstrap, "LocalScript") local e_bootstrap_module2 = b_child_proxy("ChatMain", e_bootstrap, "ModuleScript") t.property_store[workspace].Terrain = e_terrain t.property_store[e_terrain] = t.property_store[e_terrain] or {} t.property_store[e_terrain].ClassName = "Terrain" t.property_store[e_terrain].Name = "Terrain" t.property_store[e_terrain].WaterWaveSize = 0.15 t.property_store[e_terrain].WaterWaveSpeed = 10 t.property_store[e_terrain].WaterReflectance = 1 t.property_store[e_terrain].WaterTransparency = 0.3 t.property_store[e_terrain].WaterColor = Color3.fromRGB(12, 84, 91) t.property_store[workspace].CurrentCamera = e_camera t.property_store[workspace].Baseplate = e_baseplate t.property_store[workspace].Debris = e_debris t.property_store[workspace].Destroyable = e_destroyable t.property_store[e_baseplate].Anchored = true t.property_store[e_baseplate].CanCollide = true t.property_store[e_baseplate].__mock_support = true t.property_store[e_baseplate].Size = Vector3.new(512, 20, 512) t.property_store[e_baseplate].Position = Vector3.new(0, -10, 0) t.property_store[e_baseplate].CFrame = CFrame.new(0, -10, 0) t.property_store[e_bootstrap].PlayerModule = e_bootstrap_module t.property_store[e_bootstrap].ControlScript = e_bootstrap_local t.property_store[e_bootstrap].ChatMain = e_bootstrap_module2 t.property_store[e_camera] = { ClassName = "Camera", Name = "Camera", CFrame = CFrame.new(0, 10, 0), FieldOfView = 70, ViewportSize = Vector2.new(1920, 1080), NearPlaneZ = -0.5, CameraType = b_enum_item("Enum.CameraType.Custom") } t.service_cache.Workspace = workspace _G.game = nil _G.Game = b_env_state.roblox_game _G.workspace = b_env_state.roblox_workspace _G.Workspace = b_env_state.roblox_workspace _G.script = b_env_state.roblox_script _G.Enum = b_env_state.roblox_enum _G.Instance = Instance _G.shared = shared b_env_state.public_values.game = b_env_state.roblox_game b_env_state.public_values.Game = b_env_state.roblox_game b_env_state.public_values.workspace = b_env_state.roblox_workspace b_env_state.public_values.Workspace = b_env_state.roblox_workspace b_env_state.public_values.script = b_env_state.roblox_script b_env_state.public_values.Enum = b_env_state.roblox_enum b_env_state.public_values.Instance = Instance b_env_state.public_values.shared = shared b_env_state.public_values.utf8 = utf8 b_env_state.public_values.debug = b_env_state.debug_surface b_env_state.public_values.loadstring = loadstring b_env_state.public_values.load = load b_env_state.public_values.getgenv = b_env_state.exploit_funcs.getgenv b_env_state.public_values.newproxy = _G.newproxy b_env_state.getfenv_allowed_keys.game = true b_env_state.getfenv_allowed_keys.Game = true b_env_state.getfenv_allowed_keys.workspace = true b_env_state.getfenv_allowed_keys.Workspace = true b_env_state.getfenv_allowed_keys.script = true b_env_state.getfenv_allowed_keys.Enum = true b_env_state.getfenv_allowed_keys.Instance = true b_env_state.getfenv_allowed_keys.shared = true local b_tostring_table_ids = setmetatable({}, {__mode = "k"}) local b_tostring_table_counter = 0 local function b_roblox_like_tostring(b_val) if j(b_val) == "table" then if G(b_val) or w(b_val) or rawget(b_val, b_buffer_marker) or rawget(b_val, b_newproxy_marker) then return m(b_val) end local b_mt = native_getmetatable and native_getmetatable(b_val) or getmetatable(b_val) if b_mt and j(b_mt.__tostring) == "function" then local b_ok, b_text = pcall(b_mt.__tostring, b_val) if b_ok then return aE(b_text) end end local b_existing = b_tostring_table_ids[b_val] if b_existing then return b_existing end b_tostring_table_counter = b_tostring_table_counter + 1 local b_new = string.format("table: %08X", b_tostring_table_counter) b_tostring_table_ids[b_val] = b_new return b_new end return m(b_val) end b_env_state.public_values.tostring = b_roblox_like_tostring b_env_state.public_values.math = math local b_genv_surface, b_renv_surface = b_env_state._build_compat_surfaces() b_env_state.public_values.GENV = b_genv_surface if type(b_env_state.public_env) == "table" then rawset(b_env_state.public_env, "game", b_env_state.roblox_game) rawset(b_env_state.public_env, "Game", b_env_state.roblox_game) rawset(b_env_state.public_env, "workspace", b_env_state.roblox_workspace) rawset(b_env_state.public_env, "Workspace", b_env_state.roblox_workspace) rawset(b_env_state.public_env, "script", b_env_state.roblox_script) rawset(b_env_state.public_env, "Enum", b_env_state.roblox_enum) rawset(b_env_state.public_env, "Instance", Instance) rawset(b_env_state.public_env, "shared", shared) rawset(b_env_state.public_env, "utf8", utf8) rawset(b_env_state.public_env, "debug", b_env_state.exploit_funcs.debug) rawset(b_env_state.public_env, "loadstring", loadstring) rawset(b_env_state.public_env, "load", load) rawset(b_env_state.public_env, "getgenv", b_env_state.exploit_funcs.getgenv) rawset(b_env_state.public_env, "newproxy", _G.newproxy) rawset(b_env_state.public_env, "tostring", b_env_state.public_values.tostring) rawset(b_env_state.public_env, "math", b_env_state.public_values.math) rawset(b_env_state.public_env, "GENV", b_genv_surface) local b_hidden_exploit = { getstack=true, dumpstring=true, getupvalues=true, getupvalue=true, getconstants=true, getconstant=true, getregistry=true, getreg=true, setstack=true, setconstant=true, setupvalue=true, getproto=true, getprotos=true, setproto=true, getnilinstances=true, hookfunc=true, hookfunction=true, hookmetamethod=true, newcclosure=true, isourclosure=true, isexecutorclosure=true, checkclosure=true, decompile=true, getscriptclosure=true, getscriptbytecode=true, } for b_name, b_value in pairs(b_env_state.exploit_funcs or {}) do if b_name ~= "request" and b_name ~= "getclipboard" and not b_hidden_exploit[b_name] and rawget(b_env_state.public_env, b_name) == nil then rawset(b_env_state.public_env, b_name, b_value) end end for b_name, b_value in pairs(b_env_state.core_libs or {}) do if rawget(b_env_state.public_env, b_name) == nil then rawset(b_env_state.public_env, b_name, b_value) end end end local b_hidden_global = { getstack=true, dumpstring=true, getupvalues=true, getupvalue=true, getconstants=true, getconstant=true, getregistry=true, getreg=true, setstack=true, setconstant=true, setupvalue=true, getproto=true, getprotos=true, setproto=true, getnilinstances=true, hookfunc=true, hookfunction=true, hookmetamethod=true, newcclosure=true, isourclosure=true, isexecutorclosure=true, checkclosure=true, decompile=true, getscriptclosure=true, getscriptbytecode=true, } for b_name, b_value in pairs(b_env_state.exploit_funcs or {}) do if b_name ~= "request" and b_name ~= "getclipboard" and not b_hidden_global[b_name] and rawget(_G, b_name) == nil then rawset(_G, b_name, b_value) end end for b_name, b_value in pairs(b_env_state.core_libs or {}) do if rawget(_G, b_name) == nil then rawset(_G, b_name, b_value) end end rawset(_G, "GENV", b_genv_surface) local dm = p0(Enum) dm.__index = function(b2, b4) if b4 == F or b4 == "__proxy_id" then return rawget(b2, b4) end if b4 == "GetEnumItems" then return function() local dn_items = {} for dn_path, _ in pairs(b_enum_members) do local dn_name = dn_path:match("^Enum%.(.+)$") if dn_name then table.insert(dn_items, Enum[dn_name]) end end table.sort( dn_items, function(dn_a, dn_b) return tostring(dn_a) < tostring(dn_b) end ) return dn_items end end local dn_path = "Enum." .. aE(b4) if not b_enum_members[dn_path] then local dn_members = {"None"} for dn_index = 1, 80 do table.insert(dn_members, "Value" .. tostring(dn_index)) end b_enum_members[dn_path] = dn_members end if t.enum_cache[dn_path] then return t.enum_cache[dn_path] end return b_enum_item(dn_path) end dm.__newindex = function() error("Enum is read only", 0) end local dn_env = {} for dk, dv in pairs(b_env_state.public_values or {}) do dn_env[dk] = dv end dn_env.game = game dn_env.Game = game dn_env.workspace = workspace dn_env.Workspace = workspace dn_env.script = script dn_env.Enum = Enum dn_env.shared = shared dn_env.print = print dn_env.warn = warn dn_env.require = require dn_env.loadstring = loadstring dn_env.load = load dn_env.getfenv = getfenv dn_env.setfenv = setfenv dn_env.getgenv = getgenv dn_env.getrenv = getrenv dn_env.getrawmetatable = getrawmetatable dn_env.debug = debug dn_env._G = b_env_state.script_global_table or b_env_state.public_env or _G if dn_env.unpack == nil and dn_env.table and dn_env.table.unpack then dn_env.unpack = dn_env.table.unpack end -- Mode B: ensure getfenv() env resolves core libs via __index (anti-tamper often does `local string = getfenv().string`). dn_env = native_setmetatable(dn_env, {__index = b_env_state.index, __newindex = b_env_state.write_global}) t.function_env = dn_env t.script_env = setmetatable( { game = game, Game = game, workspace = workspace, Workspace = workspace, script = script, Enum = Enum, shared = shared, print = print, warn = warn, require = require, loadstring = loadstring, load = load, getfenv = getfenv, setfenv = setfenv, getgenv = getgenv, getrenv = getrenv, _G = b_env_state.script_global_table or b_env_state.public_env or _G }, {__index = b_env_state.index, __newindex = b_env_state.write_global} ) for dk, dv in pairs(buffer) do if j(dv) == "function" then b_mark_builtin_function(dv, "buffer." .. dk, 0, true) end end for dk, dv in pairs(b_env_state.exploit_funcs) do if j(dv) == "function" then b_mark_builtin_function(dv, dk, 0, true) end end for dk, dv in pairs(b_env_state.exploit_funcs.debug) do if j(dv) == "function" then b_mark_builtin_function(dv, "debug." .. dk, 0, true) end end local b_builtin_libs = { string = string, table = table, math = math, utf8 = utf8, coroutine = coroutine, os = b_public_os, task = task } for b_lib_name, b_lib in pairs(b_builtin_libs) do if j(b_lib) == "table" then for b_fn_name, b_fn in pairs(b_lib) do if j(b_fn) == "function" then b_mark_builtin_function(b_fn, b_lib_name .. "." .. b_fn_name, 0, true) end end end end b_mark_builtin_function(math.abs, "math.abs", 1, false) if j(newproxy) == "function" then b_mark_builtin_function(newproxy, "newproxy", 0, true) end if j(select) == "function" then b_mark_builtin_function(select, "select", 0, true) end if j(unpack) == "function" then b_mark_builtin_function(unpack, "unpack", 0, true) end if table and j(table.unpack) == "function" then b_mark_builtin_function(table.unpack, "table.unpack", 0, true) end b_mark_builtin_function(b_proxy_raw_index, "__index", 2, false) b_mark_builtin_function(b_proxy_raw_newindex, "__newindex", 3, false) b_mark_builtin_function(b_proxy_raw_namecall, "__namecall", 0, true) -- assert is omitted from b_mark_builtin_function to preserve native stack trace behavior b_mark_builtin_function(settings, "settings", 0, true) if j(loadstring) == "function" then b_mark_builtin_function(loadstring, "loadstring", 0, true) end if j(load) == "function" then b_mark_builtin_function(load, "load", 0, true) end end function q.get_output() return aB() end function q.save(aD) return aC(aD) end function q.get_call_graph() return t.call_graph end function q.get_string_refs() return t.string_refs end function q.get_stats() return { total_lines = #t.output, remote_calls = #t.call_graph, suspicious_strings = #t.string_refs, proxies_created = t.proxy_id } end eE = eE or { callId = "LARRY_", binaryOperatorNames = { ["and"] = "AND", ["or"] = "OR", [">"] = "GT", ["<"] = "LT", [">="] = "GE", ["<="] = "LE", ["=="] = "EQ", ["~="] = "NEQ", [".."] = "CAT" } } function eE:hook(al) return self.callId .. al end function eE:process_expr(eF) if not eF then return "nil" end if type(eF) == "string" then return eF end local eG = eF.tag or eF.kind if eG == "number" or eG == "string" then local aF = eG == "string" and b_quote_luau_string(eF.text) or (eF.value or eF.text) if r.CONSTANT_COLLECTION then return string.format("%sGET(%s)", self.callId, aF) end return aF end if eG == "local" or eG == "global" then return (eF.name or eF.token).text elseif eG == "boolean" or eG == "bool" then return tostring(eF.value) elseif eG == "binary" then local eH = self:process_expr(eF.lhsoperand) local eI = self:process_expr(eF.rhsoperand) local X = eF.operator.text local eJ = self.binaryOperatorNames[X] if eJ then return string.format("%s%s(%s, %s)", self.callId, eJ, eH, eI) end return string.format("(%s %s %s)", eH, X, eI) elseif eG == "call" then local dr = self:process_expr(eF.func) local bA = {} for L, b5 in ipairs(eF.arguments) do bA[L] = self:process_expr(b5.node or b5) end return string.format("%sCALL(%s, %s)", self.callId, dr, table.concat(bA, ", ")) elseif eG == "indexname" or eG == "index" then local bS = self:process_expr(eF.expression) local ba = eG == "indexname" and b_quote_luau_string(eF.index.text) or self:process_expr(eF.index) return string.format("%sCHECKINDEX(%s, %s)", self.callId, bS, ba) end return "nil" end function eE:process_statement(eF) if not eF then return "" end local eG = eF.tag if eG == "local" or eG == "assign" then local eK, eL = {}, {} for W, b5 in ipairs(eF.variables or {}) do table.insert(eK, self:process_expr(b5.node or b5)) end for W, b5 in ipairs(eF.values or {}) do table.insert(eL, self:process_expr(b5.node or b5)) end return (eG == "local" and "local " or "") .. table.concat(eK, ", ") .. " = " .. table.concat(eL, ", ") elseif eG == "block" then local b9 = {} for W, eM in ipairs(eF.statements or {}) do table.insert(b9, self:process_statement(eM)) end return table.concat(b9, "; ") end return self:process_expr(eF) or "" end function q._dump_source_is_monolithic_runtime_payload(b_source) if type(b_source) ~= "string" or #b_source < 3000 then return false end local b_newline_count = 0 local b_longest_line = 0 for b_line in (b_source .. "\n"):gmatch("([^\n]*)\n") do b_newline_count = b_newline_count + 1 if #b_line > b_longest_line then b_longest_line = #b_line end end local b_avg_line = #b_source / math.max(1, b_newline_count) return b_longest_line > 6000 or b_avg_line > 900 end function q.dump_file(eN, eO, b_skip_defined_wrap) local b_prev_internal = rawget(_G, "__larry_internal") _G.__larry_internal = true local function b_finish(...) _G.__larry_internal = b_prev_internal return ... end q.reset() az("ts file was generpen(eN, "rb") if not as then return b_finish(false) end local al = as:read("*a") as:close() do local b_sections = b_larry_split_script_bundle(al) if #b_sect for b_index, b_section in ipairs(b_sections) do local b_ok, b_text = q.dump_string(b_section.source, nil, b_skip_defined_wrap) b_combined[#b_combined + 1] = if b_ok and j(b_text) == "string" then local b_skip_prelude = 0 for b_line in (b_text .. "\n"):gmatch("([^\n]*)\n") do if b_skip_= "local fenv = getfenv()" or b_line == "") then b_skip_prelude = b_skip_prelude + 1 else b_combined[#b_combined + 1] = b_line end end e end b_combined[#b_combined + 1] = "" end q.reset() t.output = b_combined t.last_emitted_line = b_combined[#b_combined] or "" if q._recalculate_output_size then q._recalculate_output_size() end return b_finish(q.save(eO or r.OUTPUT_FILE)) end end al = b_larry_normalize_source_for_loader(al) t.monolithic_runtime_mode = q._dump_source_is_monolithic_runtime_payload(al) do local b_ok_hookop, b_hookop_lines, b_hookop_ops = pcall(q._hookop_reconstruct_source, al) if b_ok_hookop and b_hookop_lines then local b_emit_ok, b_emit_err = pcall(q._emit_hookop_reconstruction, b_hookop_lines, b_hookop_ops) if not b_emit_ok theostring(b_hookop_lines)) elseif q.cfg and q.cfg.hookop_enabled and not b_hookop_lines then -- Static reconstruction was skipped (readable/unobfuscated code). -- Runtime proxy hooks will capture all operations directly. if not t.hookop_runtime_header_emittes_hooked=runtime_all") end end end if b_larry_should_static_passthrough(al) then b_larry_emit_source_passthrough(al) return b_finish(q.save(eO or r.OUTPUT_FILE)) end local eP = b_normalize_numeric_backtick_arithmetic(al) eP = q._rewrite_parenthesized_format_calls(eP) eP = q._insert_missing_statement_separators(eP) eP = q._rewrite_guarded_comparisons(eP) eP = b_larry_instrument_runtime_ticks(eP) eP = b_larry_inject_executor_prelude(eP) eP = q._hookop_instrument_control_flow(eP) eP = b_larry_inject_type_builtin_shadow(eP) eP = q._rewrite_dtc_global_builtins(eP) local b_base_source = eP local R, eQ = f(e") b_base_source = b_normalize_numeric_backtick_arithmetic(I(al)) b_base_source = q._rewrite_parenthesized_format_calls(b_base_source) b_base_source = q._insert_missing_statement_separators(b_base_source) b_base_source = q._rewrite_guarded_comparisons(b_base_source) b_base_source = b_larry_instrument_runtime_ticks(b_base_source) b_base_source = b_larry_inject_executor_prelude(b_base_source) b_base_source = q._hookop_instrument_control_flow(b_base_source) b_base_source = b_larry_inject_type_builtin_shadow(b_base_source) b_base_source = q._rewrite_dtc_global_builtins(b_base_source) eP = b_base_source if not b_skip_defined_wrap then eP = b_instrument_defined_functions(eP) end R, eQ = f(eP, "Obfuscated_Script") end if R and not b_skip_defined_wrap then local b_raw_chunk = R local b_instrumented = b_instrument_defined_functions(b_base_source) if b_instrumented ~= eP then local b_try_chunk, b_try_err = f(b_instrumented, "Obfuscated_Script") if b_try_chunk then eP = b_instrumented R, eQ = b_try_chunk, b_try_err else -- Universal fail-open: keep non-instrumented chunk if instrumentation over-expands locals/registers. eP = b_base_source R, eQ = b_raw_chunk, nil end end end if not R then B("\n[LUA_LOAD_FAIL] " .. m(eQ)) return b_finish(false) end local eT = nil local b_exec_steps = 0 local function b_larry_tick(b_site, bT, bw, bq, b_, bD, bJ, bP, bM, bZ) b_exec_steps = b_exec_steps + 1 t.runtime_tick_last = b_site do local b_diag = {"J=" .. tostring(bJ), "P=" .. tostring(bP), "Z=" .. tostring(bZ)} if j(bD) == "table" then table.insert(b_diag, "D14447=" .. tostring(bD[14447])) table.insert(b_diag, "D2818=" .. tostring(bD[2818])) table.insert(b_diag, "D9552=" .. tostring(bD[9552])) table.insert(b_diag, "D386F=" .. tostring(bD[0x386F])) table.insert(b_diag, "D4675=" .. tostring(bD[0x4675])) table.insert(b_diag, "D2550=" .. tostring(bD[0x2550])) end t.runtime_tick_last_args = table.concat(b_diag, ", ") end if b_exec_steps % 1024 == 0 and eT ~= nil then if p.clock() - eT > r.TIMEOUT_SECONDS or b_exec_steps > 500000000 then i("TIMEOUT at tick " .. tostring(t.runtime_tick_last), 0) end end end local eR = b_safe_setmetatable( {LuraphContinue = function() end, __LARRY_TICK = b_larry_tick, LARRY_CHECKINDEX = function(x, ba) local aF = x[ba] if j(aF) == "table" and not t.registry[aF] then t.lar_counter = t.lar_counter + 1 t.registry[aF] = "loltab" .. t.lar_counter end return aF end, LARRY_GET = function(b5) return b5 end, LARRY_CALL = function(as, ...) return as(...) end, LARRY_NAMECALL = function(eS, em, ...) return eS[em](eS, ...) end, pcall = function(as, ...) if t and (t.hookop_pcall_depth or 0) > 0 then return g(as, ...) end local b_hookop_ctx = q._hookop_begin_pcall(as) local dg = {b_guarded_pcall(as, ...)} q._hookop_finish_pcall(b_hookop_ctx, dg[1] == true) if j(b) == "function" and not dg[1] and j(dg[2]) == "string" and dg[2]:find("attempt to call a nil value", 1, true) then dg[2] = "stack overflow" local b_meta = t.function_meta and t.function_meta[as] local b_src = (b_meta and j(b_meta.base_source) == "string" and b_meta.base_source) or (j(b_function_body_literal) == "function" and b_function_body_literal(as, 4096) or nil) if j(b_src) == "string" and b_src:find("return%s+[%a_][%w_]*%s*%([^%)]*%-", 1, false) then dg[2] = "stack overflow" end for b_index = 1, select("#", ...) do local b_arg = select(b_index, ...) if (j(b_arg) == "number" and b_arg >= 1400) or (w(b_arg) and A(b_arg) >= 1400) then dg[2] = "stack overflow" break end end end if not dg[1] and m(dg[2]):match("TIMEOUT") then i(dg[2], 0) end return native_unpack(dg) end, _G = b_env_state.script_global_table or _G, __LARRY_GETFENV = b_env_state.exploit_funcs.getfenv, __LARRY_SETFENV = b_env_state.exploit_funcs.setfenv, __LARRY_SETMETATABLE = setmetatable, __LARRY_GETMETATABLE = getmetatable, loadstring = loadstring, load = load, rawset = function(t2, k2, v2) if t2 == math or t2 == string or t2 == table or t2 == debug or t2 == utf8 then error("attempt to modify a readonly table", 0) end if j(b_native_rawset) == "function" then return b_native_rawset(t2, k2, v2) end t2[k2] = v2 return t2 end, rawget = rawget or function(t2, k2) return t2 and t2[k2] end, rawequal = rawequal, rawlen = rawlen or function(b2) return #b2 end, select = b_original_select, math = math, string = string, table = table, bit32 = bit32, utf8 = utf8}, {__index = b_env_state.index, __newindex = b_env_state.write_global} ) do local b_ty = rawget(_G, "type") local b_tyof = rawget(_G, "typeof") if j(b_ty) == "function" then rawset(eR, "type", b_ty) end if j(b_tyof) == "function" then rawset(eR, "typeof", b_tyof) end end if j(b_mark_builtin_function) == "function" then b_mark_builtin_function(eR.pcall, "pcall", 0, true) end -- HookOP control-flow tracking helpers injected into the script env. -- These are called by the instrumented source to emit control flow markers. if q.cfg and q.cfg.hookop_enabled then t.hookop_if_stack = t.hookop_if_stack or {} rawset(eR, "__HOOKOP_IF", function(b_cond_val, b_cond_text) local b_text = "if " .. tostring(b_cond_text or "...") .. " then" local b_truthy = b_cond_val ~= nil and b_cond_val ~= false if not t.hookop_runtime_header_emitted thoked=runtime_all") end -- Remove any proxy emissions that occurred during condition evaluation. -- The if-condition text already contains the call representation. -- We do this by checking if the last emitted line looks like a standalone -- proxy emission that matches part of the condition text. if j(t.output) == "table" and #t.output > 0 then local b_last = t.output[#t.output] if j(b_last) == "string" then local b_last_trimmed = b_last:gsub("^%s+", "") -- If the last emission is a nil-result proxy call that's embedded in the condition if b_cond_text and b_last_trimmed ~= "" and b_cond_text:find(b_last_trimmed:sub(1, 20), 1, true) then table.remove(t.output) q._recalculate_output_size() end end end at(b_text) t.indent = (t.indent or 0) + 1 table.insert(t.hookop_if_stack, {truthy = b_truthy, type = "if"}) return b_cond_val end) rawset(eR, "__HOOKOP_ELSE", function() t.indent = math.max(0, (t.indent or 1) - 1) at("else") t.indent = (t.indent or 0) + 1 end) rawset(eR, "__HOOKOP_ELSEIF", function(b_cond_val, b_cond_text) -- Emit the elseif line (the previous branch's indent is already set) t.indent = math.max(0, (t.indent or 1) - 1) at("elseif " .. tostring(b_cond_text or "...") .. " then") t.indent = (t.indent or 0) + 1 return b_cond_val end) rawset(eR, "__HOOKOP_END", function() t.indent = math.max(0, (t.indent or 1) - 1) if #(t.hookop_if_stack or {}) > 0 then table.remove(t.hookop_if_stack) end at("end") end) rawset(eR, "__HOOKOP_FOR", function(b_iter_text) if not t.hookop_runtime_header_emitted then t.hookop_runtim at("for " .. tostring(b_iter_text or "...") .. " do") t.indent = (t.indent or 0) + 1 table.insert(t.hookop_if_stack or {}, {type = "for"}) end) end t.script_env = eR t.function_env = b_merge_function_env(t.function_env, eR) if j(native_setfenv) == "function" then pcall(native_setfenv, R, eR) end b_env_state.mutated_keys =ock() b_exec_steps = 0 local b_hook_available = j(b) == "function" if b_hook_available then b( function() b_exec_steps = b_exec_steps + 1 if b_exec_steps % 50 == 0 then local b_stack_ok, b_stack_info = g(c, 180, "f") if b_stack_ok and b_stack_info then i("stack overflow", 0) end end if p.clock() - eT > r.TIMEOUT_SECONDS or b_exec_steps > 500000000 then i("TIMEOUT", 0) end end, "", 1 ) end local b_prev_runtime_hookop_active = t.runtime_hookop_active t.runtime_hookop_active = q.cfg and q.cfg.hookop_enabled == true local eo, eU = h( function() t.user_code_active = true R() t.user_code_active = false q._drain_scheduled_threads(true) end, function(ds) local b_msg = j(ds) == "string" and ds or m(ds) if q.cfg and q.cfg.debug_mode == true and j(d) == "function" then local b_ok, b_trace = g(d, b_msg, 2) if b_ok and j(b_trace) == "string" then return b_trace end end return b_msg end ) t.user_code_active = false t.runtime_hookop_active = b_prev_runtime_hookop_active if b_hook_available then b() end local b_harness_status = "ok" local b_harness_error = "" if not eo then local b_err_text = tostring(eU) if j(b_err_text) == "string" and ( b_err_text:find("attempt to index nil with 'find'", 1, true) or b_err_text:find("attempt to index nil with 'Name'", 1, true) or b_err_text:find("attempt to call a string value", 1, true) or b_err_text:find("attempt to call a boolean value", 1, true) or b_err_text:find("boolean value", 1, true) ) then eo = true end if not b_skip_defined_wrap and b_base_source ~= nil and b_base_source ~= eP then return b_finish(q.dump_string(b_base_source, eO, true)) end if not b_skip_defined_wrap and b_base_source ~= nil and b_base_source ~= eP and j(b_err_text) == "string" and ( b_err_text:find("", 1, true) ~= nil or b_err_text:find("function b_dispatch", 1, true) ~= nil or b_err_text:find("b_invoke_with_env", 1, true) ~= nil or b_err_text:find("=(defined_function)", 1, true) ~= nil or b_err_text:find("__LARRY_UPVALUES", 1, true) ~= nil ) then return b_finish(q.dump_string(b_base_source, eO, true)) end local b_diag_last_stmt = t.last_emitted_line local b_diag_line_count_before = (j(t.output) == "table" and #t.output) or 0 at("-- " .. m("Terminated: " .. b_err_text)) b_harness_status = "terminated" b_harness_error = tostring(b_err_text or "") if rawget(_G, "__LARRY_EMIT_RUNTIME_DIAGNOSTIC") ~= false then local b_last_stmt = b_diag_last_stmt if j(b_last_stmt) ~= "string" or b_last_stmt == "" then b_last_stmt = (j(t.output) == "table" and t.output[b_diag_line_count_before]) or "" end if j(b_last_stmt) ~= "string" or b_last_stmt == "" then b_last_stmt = "" end local b_line_count = (j(t.output) == "table" and #t.output) or 0 at("-- " .. strin local b_site = q._runtime_tick_sites and q._runtime_tick_sites[t.runtime_tick_last] tostring(b_site.kind), tostring(b_site.pos))) end if t.runtime_tickostring(t.runtime_tick_last_args))) end end at("-- " .. strilocal b_total_lines = (j(t.output) == "table" and #t.output) or 0 local b_last_stmt = t.last_emitted_line if j(b_last_stmt) ~= "string" or b_last_stmt == "" then b_last_stmt = (j(t.output) == "table" and t.output[b_total_lines]) or "" end if j(b_last_stmt) ~= "string" or b_last_stmt == "" then b_last_stmt = "" end lobalHarness] elapsed_seconds=%.3f", p.clock() - eT)) end return b_finish(q.save(eO or r.OUTPUT_FILE)) end function q.dump_string(al, eO, b_skip_defined_wrap) local b_prev_internal = rawgering" then al = b_larry_normalize_source_for_loader(al) t.monolithic_runtime_mode = q._dump_source_is_monolithic_runtime_payload(al) al = q._insert_missing_statement_separators(al) al = q._rewrite_guarded_comparisons(al) do local b_ok_hookop, b_hookop_lines, b_hookop_ops = pcall(q._hookop_reconstruct_source, al) if b_ok_hookop and b_hookop_lines then local b_emit_ok, b_emit_err = pcall(q._emit_hookop_reconstruction, reconstruction emit skipped: " .. tostring(b_emit_err)) end elseif not end end if b_larry_should_static_passthrough(al) then b_larry_emit_source_passthrough(al) if eO then _G.__larry_internal = b_prev_internal return q.save(eO) end _G.__larry_internal = b_prev_internal return true, aB() end al = b_normalize_numeric_backtick_arithmetic(al) al = q._rewrite_parenthesized_format_calls(al) al = q._insert_missing_statement_separators(al) al = q._rewrite_guarded_comparisons(al) al = b_larry_instrument_runtime_ticks(al) al = b_larry_inject_executor_prelude(al) al = b_larry_inject_type_builtin_shadow(al) al = q._rewrite_dtc_global_builtins(al) end local b_base_source = al local R, an = f(al) if not R and al then b_base_source = b_normalize_numeric_backtick_arithmetic(I(al)) b_base_source = q._rewrite_parenthesized_format_calls(b_base_source) b_base_source = q._insert_missing_statement_separators(b_base_source) b_base_source = q._rewrite_guarded_comparisons(b_base_source) b_base_source = b_larry_instrument_runtime_ticks(b_base_source) b_base_source = b_larry_inject_executor_prelude(b_base_source) b_base_source = b_larry_inject_type_builtin_shadow(b_base_source) b_base_source = q._rewrite_dtc_global_builtins(b_base_source) al = b_base_source if not b_skip_defined_wrap then al = b_instrument_defined_functions(al) end R, an = f(al) end if R and not b_skip_defined_wrap then local b_raw_chunk = R local b_instrumented = b_instrument_defined_functions(b_base_source) if b_instrumented ~= al then local b_try_chunk, b_try_err = f(b_instrumented) if b_try_chunk then al = b_instrumented R, an = b_try_chunk, b_try_err else -- Universal fail-open: preserve executable raw chunk when instrumentation fails to compile. al = b_base_source R, an = b_raw_chunk, nil end end end if not R then az("Load Error: " .. (an or "unknown")) _G.__larry_internal = b_prev_internal return false, an end local eT = nil local b_exec_steps = 0 local function b_larry_tick(b_site, bT, bw, bq, b_, bD, bJ, bP, bM, bZ) b_exec_steps = b_exec_steps + 1 t.runtime_tick_last = b_site do local b_diag = {"J=" .. tostring(bJ), "P=" .. tostring(bP), "Z=" .. tostring(bZ)} if j(bD) == "table" then table.insert(b_diag, "D14447=" .. tostring(bD[14447])) table.insert(b_diag, "D2818=" .. tostring(bD[2818])) table.insert(b_diag, "D9552=" .. tostring(bD[9552])) table.insert(b_diag, "D386F=" .. tostring(bD[0x386F])) table.insert(b_diag, "D4675=" .. tostring(bD[0x4675])) table.insert(b_diag, "D2550=" .. tostring(bD[0x2550])) end t.runtime_tick_last_args = table.concat(b_diag, ", ") end if b_exec_steps % 1024 == 0 and eT ~= nil then if p.clock() - eT > r.TIMEOUT_SECONDS or b_exec_steps > 500000000 then i("TIMEOUT at tick " .. tostring(t.runtime_tick_last), 0) end end end local eR = b_safe_setmetatable( { LuraphContinue = function() end, __LARRY_TICK = b_larry_tick, _G = b_env_state.script_global_table or _G, __LARRY_GETFENV = b_env_state.exploit_funcs.getfenv, __LARRY_SETFENV = b_env_state.exploit_funcs.setfenv, __LARRY_SETMETATABLE = setmetatable, __LARRY_GETMETATABLE = getmetatable, loadstring = loadstring, load = load, rawset = function(t2, k2, v2) if t2 == math or t2 == string or t2 == table or t2 == debug or t2 == utf8 then error("attempt to modify a readonly table", 0) end if j(b_native_rawset) == "function" then return b_native_rawset(t2, k2, v2) end t2[k2] = v2 return t2 end, rawget = rawget or function(t2, k2) return t2 and t2[k2] end, rawequal = rawequal, rawlen = rawlen or function(b2) return #b2 end, select = b_original_select, math = math, string = string, table = table, bit32 = bit32, utf8 = utf8, pcall = function(as, ...) if t and (t.hookop_pcall_depth or 0) > 0 then return g(as, ...) end local b_hookop_ctx = q._hookop_begin_pcall(as) local dg = {b_guarded_pcall(as, ...)} q._hookop_finish_pcall(b_hookop_ctx, dg[1] == true) if j(b) == "function" and not dg[1] and j(dg[2]) == "string" and dg[2]:find("attempt to call a nil value", 1, true) then dg[2] = "stack overflow" local b_meta = t.function_meta and t.function_meta[as] local b_src = (b_meta and j(b_meta.base_source) == "string" and b_meta.base_source) or (j(b_function_body_literal) == "function" and b_function_body_literal(as, 4096) or nil) if j(b_src) == "string" and b_src:find("return%s+[%a_][%w_]*%s*%([^%)]*%-", 1, false) then dg[2] = "stack overflow" end for b_index = 1, select("#", ...) do local b_arg = select(b_index, ...) if (j(b_arg) == "number" and b_arg >= 1400) or (w(b_arg) and A(b_arg) >= 1400) then dg[2] = "stack overflow" break end end end if not dg[1] and m(dg[2]):match("TIMEOUT") then i(dg[2], 0) end return native_unpack(dg) end }, {__index = b_env_state.index, __newindex = b_env_state.write_global} ) do local b_ty = rawget(_G, "type") local b_tyof = rawget(_G, "typeof") if j(b_ty) == "function" then rawset(eR, "type", b_ty) end if j(b_tyof) == "function" then rawset(eR, "typeof", b_tyof) end end if j(b_mark_builtin_function) == "function" then b_mark_builtin_function(eR.pcall, "pcall", 0, true) end t.script_env = eR t.function_env = b_merge_function_env(t.function_env, eR) if j(native_setfenv) == "function" then pcall(native_setfenv, R, eR) end b_env_state.mutated_keys = {} b_env_state.track_mutations = true eT = p.clock() b_exec_steps = 0 local b_hook_available = j(b) == "function" if b_hook_available then b( function() b_exec_steps = b_exec_steps + 1 if b_exec_steps % 50 == 0 then local b_stack_ok, b_stack_info = g(c, 180, "f") if b_stack_ok and b_stack_info then i("stack overflow", 0) end end if p.clock() - eT > r.TIMEOUT_SECONDS or b_exec_steps > 500000000 then i("TIMEOUT", 0) end end, "", 1 ) end local b_prev_runtime_hookop_active = t.runtime_hookop_active t.runtime_hookop_active = q.cfg and q.cfg.hookop_enabled == true local eo, eU = xpcall( function() _G.__larry_internal = false t.user_code_active = true R() t.user_code_active = false _G.__larry_internal = true q._drain_scheduled_threads(true) end, function(ds) local b_msg = j(ds) == "string" and ds or m(ds) if q.cfg and q.cfg.debug_mode == true and j(d) == "function" then local b_ok, b_trace = g(d, b_msg, 2) if b_ok and j(b_trace) == "string" then return b_trace end end return b_msg end ) t.user_code_active = false t.runtime_hookop_active = b_prev_runtime_hookop_active if b_hook_available then b() end local b_harness_status = "ok" local b_harness_error = "" if not eo then local b_err_text = tostring(eU) if j(b_err_text) == "string" and ( b_err_text:find("attempt to index nil with 'find'", 1, true) or b_err_text:find("attempt to index nil with 'Name'", 1, true) or b_err_text:find("attempt to call a string value", 1, true) or b_err_text:find("attempt to call a boolean value", 1, true) or b_err_text:find("boolean value", 1, true) ) then eo = true end if not b_skip_defined_wrap and b_base_source ~= nil and b_base_source ~= al then _G.__larry_internal = b_prev_internal return q.dump_string(b_base_source, eO, true) end if not b_skip_defined_wrap and b_base_source ~= nil and b_base_source ~= al and j(b_err_text) == "string" and ( b_err_text:find("", 1, true) ~= nil or b_err_text:find("function b_dispatch", 1, true) ~= nil or b_err_text:find("b_invoke_with_env", 1, true) ~= nil or b_err_text:find("=(defined_function)", 1, true) ~= nil or b_err_text:find("__LARRY_UPVALUES", 1, true) ~= nil ) then _G.__larry_internal = b_prev_internal return q.dump_string(b_base_source, eO, true) end local b_diag_last_stmt = t.last_emitted_line local b_diag_line_count_before = (j(t.output) == "table" and #t.output) or 0 az("Terminated: " .. b_err_text) b_harness_status = "terminated" b_harness_error = tostring(b_err_text or "") if rawget(_G, "__LARRY_EMIT_RUNTIME_DIAGNOSTIC") ~= false then local b_last_stmt = b_diag_last_stmt if j(b_last_stmt) ~= "string" or b_last_stmt == "" then b_last_stmt = (j(t.output) == "table" and t.output[b_diag_line_count_before]) or "" end if j(b_last_stmt) ~= "string" or b_last_stmt == "" then b_last_stmt = "" end local b_line_count = (j(t.output) == "table" and #t.output) or 0 az(string.formaq._runtime_tick_sites and q._runtime_tick_sites[t.runtime_tick_last] if b_site then ostring(b_site.pos))) end if t.runtime_tick_last_args then s=%d", b_line_count)) end end do local b_total_lines = (j(t.output) == "table" and #t.output) or 0 local b_last_stmt = t.last_emitted_line if j(b_last_stmt) ~= "string" or b_last_stmt == "" then b_last_stmt = (j(t.output) == "table" and t.output[b_total_lines]) or "" end if j(b_last_stmt) ~= "string" or b_last_stmt == "" theal b_saved = q.save(eO) _G.__larry_internal = b_prev_internal return b_saved end _G.__larry_internal = b_prev_internal return true, aB() end q._run_cli = function() if argv[1] then local b_cli_result = q.dump_file(argv[1], argv[2]) if b_cli_result then B("Saved to: " .. (argv[2] or r.OUTPUT_FILE)) b_cli_result = q.get_stats() B( string.format( "Lines: %d | Remotes: %d | Strings: %d", b_cli_result.total_lines, b_cli_result.remote_calls, b_cli_result.suspicious_strings ) ) end return end local b_cli_file = o and o.open and o.open("obfuscated.lua", "rb") if b_cli_file then b_cli_file:close() local b_cli_result = q.dump_file("obfuscated.lua") if b_cli_result then B("Saved to: " .. r.OUTPUT_FILE) B(q.get_output()) end return end B("Usage: lua dumper.lua [output] [key]") end -- NOTE: Luau has a hard limit on local registers per chunk. `dumper.lua` is -- already very large, so we lazily initialize hookop inside a nested function -- to keep the main chunk under the limit. q.cfg = q.cfg or { hookop_enabled = true, debug_mode = false, function_log_enabled = true, call_log_enabled = true, max_call_log_lines = 20000, } q._hookop_internal = function(b_key) if b_key == "interval_ms" then return 25 end return true end function q.set_config(cfg) if type(cfg) ~= "table" then return q.cfg end local b_allowed = { hookop_enabled = true, debug_mode = true, function_log_enabled = true, call_log_enabled = true, runtime_materialize = true } for b_key, b_value in pairs(cfg) do if b_allowed[b_key] then q.cfg[b_key] = b_value == true or b_value == 1 or b_value == "1" or b_value == "true" or b_value == "on" end end r.VERBOSE = q.cfg.debug_mode == true return q.cfg end function q._parse_config_arg(b_text) if type(b_text) ~= "string" or b_text == "" then return nil end local b_cfg = {} for b_key, b_value in b_text:gmatch("([%w_]+)%s*=%s*([^;,%s}]+)") do local b_lower = tostring(b_value):lower() b_cfg[b_key] = (b_lower == "1" or b_lower == "true" or b_lower == "on" or b_lower == "yes") end return next(b_cfg) and b_cfg or nil end q.set_config(rawget(p_, "__LARRY_DUMPER_CONFIG")) q.set_config(q._parse_config_arg(rawget(p_, "__LARRY_CLI_CONFIG_ARG"))) q._init_hookop = q._init_hookop or function() local hookop = {} q.hookop = hookop local function now() return (os and os.clock and os.clock()) or 0 end local function sleep_ms(ms) ms = tonumber(ms) or 0 if task and task.wait then return task.wait(ms / 1000) end if wait then return wait(ms / 1000) end local t0 = now() while (now() - t0) < (ms / 1000) do end end local function call_depth() if not (debug and debug.traceback) then return 0 end local tb = debug.traceback("", 2) if type(tb) ~= "string" then return 0 end local n = 0 for _ in tb:gmatch("\n") do n = n + 1 end return n end local function getrawmt(obj) if type(getrawmetatable) ~= "function" then return nil end local ok, mt = pcall(getrawmetatable, obj) if ok and type(mt) == "table" then return mt end return nil end local function is_cclosure_like(fn) if type(fn) ~= "function" then return false end local ok, info = pcall(function() return debug and debug.getinfo and debug.getinfo(fn, "S") end) if not ok or type(info) ~= "table" then return false end local src = tostring(info.source or "") return src == "=[C]" or src == "[C]" end -- Advanced proxy probes: use bait keys/args that should cause predictable behavior -- under a clean metatable, and flag anomalies caused by external hooks. local function make_proxy_tag(label) local pxy = (newproxy and newproxy(true)) or {} local mt = getmetatable(pxy) or {} mt.__tostring = function() return "hookop:" .. tostring(label or "proxy") end if setmetatable then pcall(setmetatable, pxy, mt) end return pxy end hookop._proxies = { namecall_arg = make_proxy_tag("namecall_arg"), index_key = make_proxy_tag("index_key"), } hookop._state = {running = false, alerts = {}, mt = nil, originals = {}} function hookop.get_alerts() local out = {} for i = 1, #(hookop._state.alerts or {}) do out[i] = hookop._state.alerts[i] end return out end local function alert(msg) local st = hookop._state st.alerts[#st.alerts + 1] = tostring(msg or "alert") end local function snapshot() local target = rawget(_G, "game") if target == nil then return nil, nil end local mt = getrawmt(target) if not mt then return nil, nil end local orig = { __namecall = rawget(mt, "__namecall"), __index = rawget(mt, "__index"), __newindex = rawget(mt, "__newindex"), } return mt, orig end local function probe_namecall() local game = rawget(_G, "game") if game == nil then return end local ok, err = pcall(function() -- Use a method that exists in Roblox; if the environment doesn't have it, -- this still produces a stable "not a valid member" style error. return game:FindFirstChild(hookop._proxies.namecall_arg) end) if ok then -- In real Roblox, FindFirstChild returns nil for non-string names; if hooks -- coerce types or swallow errors, this can unexpectedly succeed. alert("__namecall probe unexpectedly succeeded") return end local msg = tostring(err or "") if q._hookop_internal("call_depth_checks") and call_depth() > 80 then alert("__namecall probe: suspicious call depth") end if msg:find("hookop:namecall_arg", 1, true) == nil and msg ~= "" then -- If our proxy tostring never appears, some hooks may be sanitizing args. alert("__namecall probe: arg sanitized") end end local function probe_index() local game = rawget(_G, "game") if game == nil then return end local ok, err = pcall(function() return game[hookop._proxies.index_key] end) if ok then alert("__index probe unexpectedly succeeded") return end local msg = tostring(err or "") if q._hookop_internal("call_depth_checks") and call_depth() > 80 then alert("__index probe: suspicious call depth") end if msg:find("hookop:index_key", 1, true) == nil and msg ~= "" then alert("__index probe: key sanitized") end end function hookop.scan_once() local mt, orig = snapshot() if not mt then return false, "no_game_mt" end local st = hookop._state if not st.mt then st.mt = mt st.originals = orig return true, "seeded" end if q._hookop_internal("getrawmetatable_anomaly_checks") and st.mt ~= mt then alert("getrawmetatable anomaly: metatable reference changed") st.mt = mt end local function check(name) local cur = rawget(mt, name) local old = st.originals[name] if cur ~= old then alert("metamethod changed: " .. name) st.originals[name] = cur end if q._hookop_internal("anti_newcclosure") and cur ~= nil and is_cclosure_like(cur) then alert("cclosure-like metamethod: " .. name) end end if q._hookop_internal("hookop_namecall") then check("__namecall") probe_namecall() end if q._hookop_internal("hookop_index") then check("__index") probe_index() end if q._hookop_internal("hookop_newindex") then check("__newindex") end return true, "ok" end function hookop.apply(metamethod_name, wrapper_fn) if not q.cfg.hookop_enabled then return false, "disabled" end local target = rawget(_G, "game") if target == nil then return false, "no_game" end local mt = getrawmt(target) if not mt then return false, "no_raw_mt" end local mm = tostring(metamethod_name or "") local original = rawget(mt, mm) if type(wrapper_fn) ~= "function" then return false, "wrapper_not_function" end local function composed(...) if q._hookop_internal("call_depth_checks") and call_depth() > 60 then error("tamper detected (call depth)", 0) end return wrapper_fn(original, ...) end local ok = false if q._hookop_internal("anti_hookmetamethod") and type(hookmetamethod) == "function" then ok = pcall(function() hookmetamethod(target, mm, composed) end) end if not ok then rawset(mt, mm, composed) end hookop._state.mt = mt hookop._state.originals[mm] = original return true, "applied" end function hookop.start(cfg_override) if type(cfg_override) == "table" then for k2, v2 in pairs(cfg_override) do q.cfg[k2] = v2 end end if hookop._state.running then return true, "already_running" end hookop._state.running = true local function loop() while hookop._state.running do pcall(hookop.scan_once) sleep_ms(tonumber(q._hookop_internal("interval_ms")) or 25) end end if q._hookop_internal("threaded") and task and task.spawn then task.spawn(loop) else coroutine.wrap(loop)() end return true, "started" end function hookop.stop() hookop._state.running = false return true end q._init_hookop = nil return hookop end q.hookop = q.hookop or { start = function(cfg) (q._init_hookop and q._init_hookop() or q.hookop).start(cfg) end, stop = function() (q._init_hookop and q._init_hookop() or q.hookop).stop() end, apply = function(...) return (q._init_hookop and q._init_hookop() or q.hookop).apply(...) end, scan_once = function() return (q._init_hookop and q._init_hookop() or q.hookop).scan_once() end, get_alerts = function() return (q._init_hookop and q._init_hookop() or q.hookop).get_alerts() end, } _G.LuraphContinue = nil if not __LARRY_EMBEDDED__ and not rawget(_G, "__LARRY_EMBEDDED__") then q._run_cli() end return q