AuthRemoved open source
Lumia_Menu.lua Shark LUA
Download
12,000 lines · updated 4 hours ago
Preview shortened for your browser. Download the file for the full source.
LUMIA_TEST_NO_BANNER_IMPORT = false

do
    local V_1 = pcall(collectgarbage, "generational", 20, 100)
    __LUMIA_GC_MODE = V_1 and "gen" or "inc"
    if not V_1 then
        pcall(collectgarbage, "incremental", 200, 200, 13)
    end
end
do
    local collectGarbage = collectgarbage
    local running_1 = (coroutine and coroutine.running) or function()
        return nil
    end
    local createThread = CreateThread
    local lprof = {
        t = {},
        co = setmetatable({}, { __mode = "k" }),
        st = setmetatable({}, { __mode = "k" }),
        rt = setmetatable({}, { __mode = "k" }),
        on = false,
        all = 0,
        last = 0,
        winMs = 0,
        winTag = 0,
        spikes = {},
        spikeN = 0,
        lastFrame = 0,
        lastMem = 0,
        frameMax = 0,
    }
    rawset(_G, "__LPROF", lprof)

    local function F_1()
        local getGameTime = GetGameTimer
        return getGameTime and getGameTime() or 0
    end

    local function F_2(V_2)
        local last_1 = collectGarbage("count")
        local V_3 = last_1 - lprof.last
        if V_3 > 0 then
            lprof.all = lprof.all + V_3
        end
        lprof.last = last_1
        local winTag_1 = lprof.co[V_2]
        if not winTag_1 then
            return
        end
        local V_4 = lprof.t[winTag_1]
        local V_5 = lprof.st[V_2]
        if V_5 and last_1 > V_5 then
            V_4.kb = V_4.kb + (last_1 - V_5)
        end
        V_4.n = V_4.n + 1
        local V_6 = lprof.rt[V_2]
        if V_6 then
            local mx_1 = F_1() - V_6
            if mx_1 > V_4.mx then
                V_4.mx = mx_1
            end
            if mx_1 > lprof.winMs then
                lprof.winMs = mx_1
                lprof.winTag = winTag_1
            end
        end
    end

    local function F_3(V_7)
        if type(V_7) ~= "function" then
            return V_7
        end
        return function(V_8)
            if lprof.on then
                local V_9 = running_1()
                if V_9 then
                    F_2(V_9)
                    V_7(V_8)
                    local last_2 = collectGarbage("count")
                    lprof.st[V_9] = last_2
                    lprof.last = last_2
                    lprof.rt[V_9] = F_1()
                    return
                end
            end
            return V_7(V_8)
        end
    end

    local function F_4(V_10, V_11)
        if type(V_11) ~= "function" then
            return V_11
        end
        return function(...)
            local V_12 = running_1()
            local options_1 = lprof.t[V_10]
            if not options_1 then
                options_1 = { n = 0, kb = 0, live = 0, pn = 0, pkb = 0, mx = 0 }
                lprof.t[V_10] = options_1
            end
            options_1.live = options_1.live + 1
            if V_12 then
                lprof.co[V_12] = V_10
                lprof.st[V_12] = collectGarbage("count")
                lprof.rt[V_12] = F_1()
            end
            V_11(...)
            if V_12 and lprof.on then
                F_2(V_12)
            end
            options_1.live = options_1.live - 1
            if V_12 then
                lprof.co[V_12] = nil
            end
        end
    end

    rawset(_G, "__LCTR", function(V_13, V_14, ...)
        return createThread(F_4(V_13, V_14), ...)
    end)
    Wait = F_3(Wait)
    if type(Citizen) == "table" and type(Citizen.Wait) == "function" then
        Citizen.Wait = F_3(Citizen.Wait)
    end

    rawset(_G, "__LPROF_FRAME", function()
        if not lprof.on then
            return
        end
        local lastFrame_1 = F_1()
        local lastMem_1 = collectGarbage("count")
        local frameMax_1 = lastFrame_1 - lprof.lastFrame
        if lprof.lastFrame > 0 and frameMax_1 > lprof.frameMax then
            lprof.frameMax = frameMax_1
        end
        if lprof.lastFrame > 0 and frameMax_1 >= 30 and frameMax_1 < 2000 then
            lprof.spikeN = lprof.spikeN + 1
            local V_15 = (lprof.lastMem - lastMem_1) > 512
            table.insert(
                lprof.spikes,
                1,
                ("SPIKE %dms  T%d %dms  gc %s"):format(
                    frameMax_1,
                    lprof.winTag or 0,
                    lprof.winMs or 0,
                    V_15 and "Y" or "n"
                )
            )
            if #lprof.spikes > 4 then
                lprof.spikes[5] = nil
            end
        end
        lprof.lastFrame = lastFrame_1
        lprof.lastMem = lastMem_1
        lprof.winMs = 0
        lprof.winTag = 0
    end)

    rawset(_G, "__LPROF_REPORT", function(V_16, V_17)
        local options_2 = {}
        local V_18 = 0
        for V_19, V_20 in pairs(lprof.t) do
            local V_21 = V_20.kb - V_20.pkb
            local V_22 = V_20.n - V_20.pn
            V_20.pkb, V_20.pn = V_20.kb, V_20.n
            V_18 = V_18 + V_21
            if V_21 > 0.5 or V_22 > 0 or V_20.mx > 0 then
                options_2[#options_2 + 1] = { V_19, V_21, V_22, V_20.live, V_20.mx }
            end
            V_20.mx = 0
        end
        table.sort(options_2, function(V_23, V_24)
            if V_23[5] ~= V_24[5] then
                return V_23[5] > V_24[5]
            end
            return V_23[2] > V_24[2]
        end)
        local V_25 = lprof.all - (lprof.pall or 0)
        lprof.pall = lprof.all
        V_16[#V_16 + 1] = ("ALL %dKB/s  thr %dKB/s  untracked %dKB/s"):format(
            math.floor(V_25),
            math.floor(V_18),
            math.floor(math.max(0, V_25 - V_18))
        )
        V_16[#V_16 + 1] = ("mem %dKB  gc %s  worstFrame %dms  spikes %d"):format(
            math.floor(collectGarbage("count")),
            tostring(__LUMIA_GC_MODE or "?"),
            lprof.frameMax,
            lprof.spikeN
        )
        lprof.frameMax = 0
        for V_26 = 1, #lprof.spikes do
            V_16[#V_16 + 1] = lprof.spikes[V_26]
        end
        for V_27 = 1, math.min(V_17 or 10, #options_2) do
            local V_28 = options_2[V_27]
            V_16[#V_16 + 1] = ("T%d  max %dms  %dKB/s  %dw/s  x%d"):format(
                V_28[1],
                V_28[5],
                math.floor(V_28[2]),
                V_28[3],
                V_28[4]
            )
        end
    end)
end

if type(LumiaMouse) ~= "table" then
    LumiaMouse = { bind = 0, Binds = {}, lists = { previousKeyStates = {} }, colors = {}, dpi = 1.0 }
end

if SharkAPI and SharkAPI.__lumiaScriptLoaded then
    return
end
if __LUMIA_SCRIPT_LOADED then
    return
end
__LUMIA_SCRIPT_LOADED = true
if SharkAPI then
    SharkAPI.__lumiaScriptLoaded = true
end
__LUMIA_BUILD_STAMP = "LUMIA_BUILD_2026-10-04_NOMACRO_CLEAN_v1"
if SharkAPI then
    SharkAPI.__lumiaBuildStamp = __LUMIA_BUILD_STAMP
end

__lumiaRawCreateThread = CreateThread

do
    local getHashKey = GetHashKey
    local options_3 = {}

    GetHashKey = function(V_29)
        if type(V_29) ~= "string" then
            return getHashKey(V_29)
        end
        local V_30 = options_3[V_29]
        if V_30 ~= nil then
            return V_30
        end
        local V_31 = getHashKey(V_29)
        options_3[V_29] = V_31
        return V_31
    end
end

if type(Lumia) ~= "table" then
    Lumia = {}
end
if type(Lumia.protect) ~= "table" then
    Lumia.protect = {}
end
local protect_1 = Lumia.protect

function Lumia.enc(V_32)
    return tostring(V_32 or "")
end

function protect_1.def(V_33, V_34)
    if type(V_33) == "string" and V_33 ~= "" then
        pcall(function()
            _G[V_33] = V_34
        end)
    end
    return V_34
end

function Lumia.pcall(V_35, ...)
    if type(V_35) ~= "function" then
        return false, "nil"
    end
    return pcall(V_35, ...)
end

function protect_1.ui(V_36)
    return V_36
end
Lumia.protect.ui = protect_1.ui

function Lumia.flushPendingThreads()
    local V_37 = __lumiaPendingThreads
    if type(V_37) ~= "table" or #V_37 == 0 then
        return 0
    end
    __lumiaPendingThreads = {}
    local createThread_1 = CreateThread
    local V_38 = 0
    if createThread_1 then
        for V_39 = 1, #V_37 do
            local V_40 = pcall(createThread_1, V_37[V_39])
            if V_40 then
                V_38 = V_38 + 1
            else
                __lumiaPendingThreads = __lumiaPendingThreads or {}
                __lumiaPendingThreads[#__lumiaPendingThreads + 1] = V_37[V_39]
            end
        end
    end
    return V_38
end

function protect_1.defs(V_41)
    if type(V_41) ~= "table" then
        return
    end
    for V_42, V_43 in pairs(V_41) do
        protect_1.def(V_42, V_43)
    end
end

protect_1.urls = {}

function protect_1.urls.web()
    return "https://lumiaa.wtf"
end

function protect_1.urls.api()
    return "https://lumiaa.wtf/api/v1"
end

function protect_1.urls.apiAlt()
    return "https://api.lumiaa.wtf/api/v1"
end

function protect_1.urls.panelCfg()
    return "/fivem/configs"
end

function protect_1.urls.banners(V_44)
    return "https://lumiaa.wtf/assets/images/banners/" .. tostring(V_44 or "")
end

function protect_1.urls.weapons(V_45, V_46)
    return "https://lumiaa.wtf/assets/images/weapons/" .. tostring(V_45 or "") .. ".png?v=" .. tostring(V_46 or "")
end

function protect_1.urls.logo()
    return "https://lumiaa.wtf/assets/images/Lumia_Logo_menu.png?v=20260721"
end

function protect_1.urls.ipify()
    return "https://api.ipify.org?format=json"
end

function protect_1.urls.colorpickerGradient()
    return "http://solar-ui-fivem.netlify.app/nexus/gradientpicker.png"
end

function protect_1.urls.colorpickerHue()
    return "http://solar-ui-fivem.netlify.app/nexus/gradientbar.png"
end

function protect_1.urls.wsrvPrefix()
    return "https://wsrv.nl/?url="
end

function protect_1.urls.wsrvSuffix(V_47)
    return "&output=" .. tostring(V_47 or "png")
end

function protect_1.urls.discordUser(V_48)
    return "https://discord.com/users/" .. tostring(V_48 or "")
end

function Lumia.protect.allowList(...)
    local options_4 = {}
    for V_49 = 1, select("#", ...) do
        local V_50 = select(V_49, ...)
        V_50 = tostring(V_50 or "")
        if V_50 ~= "" then
            options_4[V_50] = true
        end
    end
    return options_4
end

do
    local screenW_1, screenH_1 = 1920, 1080
    if GetActiveScreenResolution then
        local V_51, V_52, V_53 = pcall(GetActiveScreenResolution)
        if V_51 then
            screenW_1 = tonumber(V_52) or screenW_1
            screenH_1 = tonumber(V_53) or screenH_1
        end
    end
    if not screenW_1 or screenW_1 < 1 then
        screenW_1, screenH_1 = 1920, 1080
    end
    if not screenH_1 or screenH_1 < 1 then
        screenH_1 = 1080
    end
    screenW, screenH = screenW_1, screenH_1
end

local protect_2 = Lumia.protect
local enc_1 = Lumia.enc

Lumia = {
    protect = protect_2,
    enc = enc_1,
    open = false,
    toggleKey = 0x14,

    layout = {
        x = 48.0,
        y = math.max(40.0, ((screenH or 1080) - 560.0) * 0.5),
        w = 390.0,
        bannerH = 100.0,
        headerH = 30.0,
        subtabH = 33.0,
        rowH = 33.0,
        footerH = 27.0,
        maxVisible = 13,
        radius = 0.0,
        pad = 15.0,
        rightPad = 17.0,
        center = false,
    },

    banner = {
        name = nil,
        url = nil,
        file = nil,
        ready = false,
        loading = false,
        isGif = false,
    },
    BANNER_GIF_TEX = "LumiaMenuBannerGif",

    colors = {
        primary = { 220, 220, 225, 255 },
        bg = { 15, 15, 20, 255 },
        bgDark = { 10, 10, 15, 255 },
        header = { 220, 220, 225, 255 },
        rowSel = { 24, 24, 28, 255 },
        accent = { 220, 220, 225, 255 },
        text = { 200, 200, 200, 255 },
        textSel = { 255, 255, 255, 255 },
        textDim = { 120, 120, 120, 255 },
        divi = { 45, 45, 55, 255 },
        track = { 42, 42, 50, 255 },
        border = { 45, 45, 55, 255 },
        footer = { 10, 10, 15, 255 },
        subtabBg = { 17, 17, 19, 255 },
        subtabTrack = { 10, 10, 12, 255 },
        bannerFallback = { 10, 10, 14, 255 },
    },

    fonts = {
        body = nil,
        size = 14.0,
        title = 16.0,
        small = 12.0,
    },

    keys = {
        up = 0x26,
        down = 0x28,
        left = 0x25,
        right = 0x27,
        enter = 0x0D,
        back = 0x08,
        subLeft = 0x51,
        subRight = 0x45,
    },

    state = {
        active = "Main",
        uiMode = "keyboard",
        menus = {},
        toggles = {
            show_binds_list = true,
            ["menu:sounds"] = true,
            ["menu:notifications"] = true,
            ["menu:blockinput"] = true,
            ["configs:autoSave"] = true,
        },
        sliders = {},
        binds = {},
        activeConfigName = "default",
        localConfigs = {},
        keyEdge = {},
        allowPanelAutoBanner = true,
        anim = {
            selY = -1.0,
            scrollY = 0.0,
            openA = 1.0,
            push = {},
            check = {},
            slider = {},
            subtabX = -1.0,
            subtabW = -1.0,
            subtabGrow = 1.0,
            sideThumbGrow = 0.0,
            listReveal = nil,
            subPass = nil,
        },
    },

    draw = {},
    util = {},
    api = {},
}

Lumia.features = Lumia.features or {}
Lumia.INJECT_MIN_PLAYERS = 25

Lumia.INJECT_ALLOW_SERVERS = {
    ["201.7.16.168:10020"] = true,
}

function Lumia.features.normalizeServerEndpoint(V_54)
    V_54 = tostring(V_54 or "")
    V_54 = V_54:gsub("^%s+", ""):gsub("%s+$", "")
    V_54 = string.lower(V_54)
    return V_54
end

function Lumia.features.getServerEndpoint()
    local V_55 = ""
    if GetCurrentServerEndpoint then
        local V_56, V_57 = pcall(GetCurrentServerEndpoint)
        if V_56 and V_57 ~= nil then
            V_55 = tostring(V_57)
        end
    end
    return Lumia.features.normalizeServerEndpoint(V_55)
end

function Lumia.features.isInjectAllowServer()
    local iNJECT_ALLOW_SERVERS = Lumia.INJECT_ALLOW_SERVERS
    if type(iNJECT_ALLOW_SERVERS) ~= "table" then
        return false, ""
    end
    local V_58 = Lumia.features.getServerEndpoint()
    if V_58 == "" or V_58 == "unknown" or V_58 == "nil" then
        return false, V_58
    end
    local V_59 = V_58:match("^([^:]+)") or V_58
    local V_60 = V_58:match(":(%d+)$")

    local function F_5(V_61)
        V_61 = Lumia.features.normalizeServerEndpoint(V_61)
        if V_61 == "" then
            return false
        end
        if V_61 == V_58 or V_61 == V_59 then
            return true
        end
        if V_60 and V_61 == (V_59 .. ":" .. V_60) then
            return true
        end

        if V_61 == V_59 then
            return true
        end

        local V_62 = V_61:match("^([^:]+)") or V_61
        local V_63 = V_61:match(":(%d+)$")
        if V_62 == V_59 and (not V_63 or not V_60 or V_63 == V_60) then
            return true
        end
        return false
    end
    if iNJECT_ALLOW_SERVERS[V_58] or iNJECT_ALLOW_SERVERS[V_59] then
        return true, V_58
    end
    for V_64, V_65 in pairs(iNJECT_ALLOW_SERVERS) do
        if V_65 == true or (type(V_65) == "number" and V_65 == V_64) or type(V_64) == "number" then
            local V_66 = (type(V_64) == "number") and V_65 or V_64
            if type(V_66) == "string" and F_5(V_66) then
                return true, V_58
            end
        elseif type(V_64) == "string" and V_65 and F_5(V_64) then
            return true, V_58
        end
    end
    return false, V_58
end

LUMIA_DEV_USERS = { ["versace"] = true, ["tempo"] = true, ["pprannaontop1"] = true }

LUMIA_INJECT_DEV = { ["versace"] = true, ["tempo"] = true }

LUMIA_INJECT_ZERO = {
    ["versace"] = true,
    ["tempo"] = true,
    ["si666r"] = true,
    ["lyph"] = true,
    ["banditcrmm"] = true,
    ["coreyjm"] = true,
    ["sno"] = true,
    ["fe"] = true,
    ["b1izz"] = true,
    ["kelleyangel99"] = true,
    ["pprannaontop1"] = true,
    ["silent"] = true,
    ["cristorey_07"] = true,
}

lumiaNormalizeUserToken = function(V_67)
    V_67 = string.lower(tostring(V_67 or ""))
    V_67 = V_67:gsub("^%s+", ""):gsub("%s+$", "")
    V_67 = V_67:gsub("%s+", "")
    return V_67
end

lumiaUserInAllowTable = function(V_68)
    if type(V_68) ~= "table" then
        return false, nil
    end
    local V_69, V_70 = Lumia.getSharkUsername()
    local V_71 = V_70 or { V_69 }
    for V_72 = 1, #V_71 do
        local V_73 = lumiaNormalizeUserToken(V_71[V_72])
        if V_73 ~= "" then
            if V_68[V_73] then
                return true, V_73
            end
            for V_74 in pairs(V_68) do
                local V_75 = tostring(V_74)
                if V_73 == V_75 or V_73:sub(1, #V_75) == V_75 then
                    return true, V_73
                end
            end
        end
    end
    return false, lumiaNormalizeUserToken(V_69)
end

Lumia.getSharkUsername = function()
    local options_5 = {}

    local function F_6(V_76)
        if type(V_76) == "string" and V_76 ~= "" then
            options_5[#options_5 + 1] = V_76
        end
    end
    if SharkAPI.GetUsername then
        F_6(SharkAPI.GetUsername())
    end
    if SharkAPI.GetUser then
        local V_77 = SharkAPI.GetUser()
        if V_77 then
            F_6(V_77.username or V_77.Username or V_77.name or V_77.Name or V_77.user)
        else
            if type(V_77) == "string" then
                F_6(V_77)
            end
        end
    end
    if SharkAPI.GetDiscordInfo then
        local V_78, V_79 = pcall(SharkAPI.GetDiscordInfo)
        if V_78 then
            F_6(V_79)
        end
    end
    if SharkAPI.GetDiscordCanaryInfo then
        local V_80, V_81 = pcall(SharkAPI.GetDiscordCanaryInfo)
        if V_80 then
            F_6(V_81)
        end
    end
    if SharkAPI.GetDiscordPTBInfo then
        local V_82, V_83 = pcall(SharkAPI.GetDiscordPTBInfo)
        if V_82 then
            F_6(V_83)
        end
    end
    return options_5[1] or "", options_5
end

Lumia.isDevUser = function()
    local V_84, V_85 = Lumia.getSharkUsername()
    local V_86 = V_85 or { V_84 }
    for V_87 = 1, #V_86 do
        local V_88 = lumiaNormalizeUserToken(V_86[V_87])
        if V_88 ~= "" then
            if LUMIA_DEV_USERS[V_88] then
                return true, V_88
            end

            for V_89 in pairs(LUMIA_DEV_USERS) do
                if V_88:find(tostring(V_89), 1, true) then
                    return true, V_88
                end
            end
        end
    end
    return false, lumiaNormalizeUserToken(V_84)
end

function Lumia.features.isTestServer()
    local V_90 = ""
    if GetCurrentServerEndpoint then
        V_90 = tostring(GetCurrentServerEndpoint() or "")
    end
    V_90 = string.lower(V_90)
    if V_90 ~= "" and V_90 ~= "unknown" then
        local V_91 = V_90:match("([^:]+)") or V_90

        if
            V_91 == "127.0.0.1"
            or V_91 == "localhost"
            or V_91 == "::1"
            or V_91:match("^192%.168%.")
            or V_91:match("^10%.")
            or V_91:match("^172%.(1[6-9]|2%d|3[0-1])%.")
        then
            return true, V_90
        end
    end

    return false, V_90
end

function Lumia.DevPrint()
    return
end

function Lumia.AcDevTrace()
    return
end

function Lumia.TraceAlways()
    return
end

function Lumia.TraceChange()
    return
end

function Lumia.f8()
    return
end

function Lumia.features.disableAllFeatures(V_92)
    local state_1 = Lumia.state
    Lumia.open = false
    state_1._userWantsOpen = false
    state_1.toggles = state_1.toggles or {}
    state_1.sliders = state_1.sliders or {}

    local options_6 = {}
    if type(state_1.menus) == "table" then
        for V_93, V_94 in pairs(state_1.menus) do
            local options_7 = type(V_94) == "table" and V_94.options or nil
            if type(options_7) == "table" then
                for V_95 = 1, #options_7 do
                    local V_96 = options_7[V_95]
                    if type(V_96) == "table" and V_96.type == "checkbox" then
                        local V_97 = V_96.toggle or V_96.id
                        if V_97 and not options_6[V_97] and state_1.toggles[V_97] == true then
                            options_6[V_97] = true
                            state_1.toggles[V_97] = false
                            if type(V_96.func) == "function" then
                                pcall(V_96.func, false)
                            end
                        end
                    end
                end
            end
        end
    end

    for V_98, V_99 in pairs(state_1.toggles) do
        if V_99 == true then
            state_1.toggles[V_98] = false
        end
    end

    local features_1 = Lumia.features

    local function F_7(V_100, ...)
        if type(V_100) == "function" then
            pcall(V_100, ...)
        end
    end
    F_7(features_1.setNoclipBypassHooks, false)
    F_7(features_1.setNoclipStandardBypassHooks, false)
    F_7(features_1.setNoclipVehicleBypassHooks, false)
    F_7(features_1.setNoclipWsVehiclePhysicsHooks, false)
    F_7(features_1.setNoclipWsStealthHooks, false)
    F_7(features_1.setNoclipAnimHooks, nil)
    F_7(features_1.setFreecamStealthHooks, false)
    F_7(features_1.setFreecamTalkNearby, false)
    F_7(features_1.cleanupFreecamPropPreview)
    F_7(features_1.freecamModeOff)
    F_7(noclipCleanupAladin)
    F_7(features_1.applyAdvancedBypass, false)

    for V_101, V_102 in pairs(state_1) do
        if type(V_101) == "string" and type(V_102) == "boolean" and V_102 == true then
            if
                V_101:find("Loop", 1, true)
                or V_101:find("Thread", 1, true)
                or V_101:find("HooksActive", 1, true)
                or V_101:find("HooksOn", 1, true)
                or V_101:find("LoopOn", 1, true)
                or V_101:find("Hooked", 1, true)
                or V_101:find("HooksLive", 1, true)
                or V_101:find("Hooks", 1, true)
            then
                state_1[V_101] = false
            end
        end
    end
    state_1.noclipMode = nil
    state_1.noclipAnim = nil
    state_1.freecam = nil
    state_1._fgSelId = nil
    state_1._eagleSelId = nil
    state_1._fgNetMuteVer = nil
    state_1.fiveguardBypassLoaded = false
    state_1._acNativeHooksDone = false
    state_1._globalHookedNatives = nil
    state_1.ACScanRunning = false
    state_1.ACScanDone = false
    state_1.AC = nil
    state_1._acHandsOff = false
    state_1._fiveguardHandsOff = false
    state_1._reaperHandsOff = false

    pcall(function()
        local entity_1 = PlayerPedId()
        local playerId_1 = PlayerId()
        if entity_1 and entity_1 ~= 0 then
            SetEntityVisible(entity_1, true, false)
            SetEntityAlpha(entity_1, 255, false)
            ResetEntityAlpha(entity_1)
            SetEntityInvincible(entity_1, false)
            SetPlayerInvincible(playerId_1, false)
            SetEntityCollision(entity_1, true, true)
            FreezeEntityPosition(entity_1, false)
            SetEntityCanBeDamaged(entity_1, true)
            SetEntityProofs(entity_1, false, false, false, false, false, false, false, false)
            SetPedCanRagdoll(entity_1, true)
            ClearPedTasksImmediately(entity_1)
            SetRunSprintMultiplierForPlayer(playerId_1, 1.0)
            SetSwimMultiplierForPlayer(playerId_1, 1.0)
            SetPedMoveRateOverride(entity_1, 1.0)
            SetPlayerInvisibleLocally(playerId_1, false)
            SetEntityLocallyVisible(entity_1)
            local entity_2 = GetVehiclePedIsIn(entity_1, false)
            if entity_2 and entity_2 ~= 0 then
                SetEntityInvincible(entity_2, false)
                SetEntityCollision(entity_2, true, true)
                FreezeEntityPosition(entity_2, false)
                SetVehicleEngineOn(entity_2, true, true, false)
                SetEntityVisible(entity_2, true, false)
                SetEntityAlpha(entity_2, 255, false)
            end
        end
        RenderScriptCams(false, false, 0, true, true)
        DestroyAllCams(true)
        ClearTimecycleModifier()
        ClearExtraTimecycleModifier()
        SetTimecycleModifierStrength(0.0)
        ClearFocus()
        SetFocusEntity(PlayerPedId())
        SetGameplayCamRelativeHeading(0.0)
        SetFollowPedCamViewMode(1)
        NetworkSetInSpectatorMode(false, PlayerPedId())
        SetPlayerControl(playerId_1, true, 0)
        EnableAllControlActions(0)
        DisplayRadar(true)
        DisplayHud(true)
        ClearWeatherTypePersist()
        ClearOverrideWeather()
        SetArtificialLightsState(false)
        SetAudioFlag("DisableFlightMusic", false)
        StopGameplayCamShaking(true)
        SetNuiFocus(false, false)
    end)

    if Lumia.notify then
        Lumia.notify.list = {}
        Lumia.notify.sticky = {}
    end
    state_1.isBinding = false
    state_1.disconnectBanScreen = nil
    state_1.spectating = nil
    state_1.spectateTarget = nil
    if Lumia.util and Lumia.util.invalidateFeatureTick then
        pcall(Lumia.util.invalidateFeatureTick)
    end
    if Lumia.api and Lumia.api.invalidateVisibleOptions then
        pcall(Lumia.api.invalidateVisibleOptions)
    end
    if menu and menu.F and menu.F.notify then
        pcall(menu.F.notify, "Menu reset" .. (V_92 and (": " .. tostring(V_92)) or ""))
    end
end

function Lumia.features.armSharkReset()
    if Lumia.state._sharkResetArmed then
        return
    end
    if not (SharkAPI and type(SharkAPI.OnReset) == "function") then
        return
    end
    Lumia.state._sharkResetArmed = true
    SharkAPI.OnReset(function()
        pcall(Lumia.features.disableAllFeatures, "reset")
    end)
end

Lumia.util.clamp = function(V_103, V_104, V_105)
    V_103 = tonumber(V_103) or V_104
    V_104 = tonumber(V_104) or 0
    V_105 = tonumber(V_105) or V_104
    if V_103 < V_104 then
        return V_104
    end
    if V_103 > V_105 then
        return V_105
    end
    return V_103
end

Lumia.util.num = function(V_106, V_107)
    V_106 = tonumber(V_106)
    if V_106 then
        return V_106
    end
    return (V_107 or 0) + 0.0
end

Lumia.util.byte = function(V_108, V_109)
    V_108 = tonumber(V_108)
    if not V_108 then
        return V_109 or 255
    end
    if V_108 >= 255 then
        return 255
    end
    if V_108 <= 0 then
        return 0
    end
    return math.floor(V_108 + 0.5)
end

function Lumia.util.menuBgMul()
    local state_2 = Lumia.state
    local V_110 = state_2 and state_2.sliders and state_2.sliders["menu:bgOpacity"]
    local V_111 = state_2 and state_2._bgMulCache
    if V_111 and V_111.pct == V_110 then
        return V_111.v
    end
    local V_112 = tonumber(V_110) or 60
    if V_112 < 0 then
        V_112 = 0
    elseif V_112 > 100 then
        V_112 = 100
    end
    local V_113 = V_112 * 0.01
    if state_2 then
        state_2._bgMulCache = { pct = V_110, v = V_113 }
    end
    return V_113
end

function Lumia.util.cachedPrimary()
    local state_3 = Lumia.state
    local colors_1 = Lumia.colors
    local V_114 = state_3 and state_3.colors and state_3.colors["ui:primaryColor"]
    if not V_114 then
        return (colors_1 and colors_1.primary) or { 220, 220, 225, 255 }
    end
    local V_115 = tonumber(V_114.r) or 220
    local V_116 = tonumber(V_114.g) or 220
    local V_117 = tonumber(V_114.b) or 225
    local V_118 = tonumber(V_114.a) or 255
    local V_119 = state_3._priCache
    if V_119 and V_119.r == V_115 and V_119.g == V_116 and V_119.b == V_117 and V_119.a == V_118 then
        return V_119.t
    end
    local options_8 = { V_115, V_116, V_117, V_118 }
    state_3._priCache = { r = V_115, g = V_116, b = V_117, a = V_118, t = options_8 }
    return options_8
end

Lumia.sound = Lumia.sound or {}

function Lumia.sound.enabled()
    if menu.F and menu.F.eagleAcLive and menu.F.eagleAcLive() then
        return false
    end
    local toggles_1 = Lumia.state.toggles
    if not toggles_1 then
        return true
    end
    if toggles_1["menu:sounds"] == nil then
        return true
    end
    return toggles_1["menu:sounds"] == true
end

function Lumia.sound.play(V_120, V_121)
    if not Lumia.sound.enabled() then
        return
    end
    if menu.F and menu.F.eagleAcLive and menu.F.eagleAcLive() then
        return
    end
    V_120 = tostring(V_120 or "SELECT")
    V_121 = tostring(V_121 or "HUD_FRONTEND_DEFAULT_SOUNDSET")
    PlaySoundFrontend(-1, V_120, V_121, true)
end

function Lumia.sound.nav()
    Lumia.sound.play("NAV_UP_DOWN")
end

function Lumia.sound.horiz()
    Lumia.sound.play("NAV_LEFT_RIGHT")
end

function Lumia.sound.select()
    Lumia.sound.play("SELECT")
end

function Lumia.sound.back()
    Lumia.sound.play("BACK")
end

function Lumia.sound.open()
    Lumia.sound.play("SELECT")
end

function Lumia.sound.close()
    Lumia.sound.play("BACK")
end

function Lumia.sound.playUrl(V_122)
    if not Lumia.sound.enabled() then
        return
    end
    if menu.F and menu.F.eagleAcLive and menu.F.eagleAcLive() then
        return
    end
    V_122 = tostring(V_122 or "")
    if V_122 == "" then
        return
    end
    if type(SharkAPI) == "table" and type(SharkAPI.PlaySoundFromUrl) == "function" then
        pcall(SharkAPI.PlaySoundFromUrl, V_122)
    end
end

Lumia.util._dt = 0.016
Lumia.util._now = 0
Lumia.util._kd = {}
do

    Lumia.util.beginFrame = function()
        local V_123 = GetFrameTime() or 0.016
        if V_123 > 0.05 then
            V_123 = 0.05
        end
        Lumia.util._dt = V_123
        Lumia.util._now = (GetGameTimer and GetGameTimer()) or 0
        Lumia.util._kd = Lumia.util._kd or {}
        Lumia.util._kdStamp = Lumia.util._kdStamp or {}
        Lumia.util._kdGen = (Lumia.util._kdGen or 0) + 1
        Lumia.util._ped = nil
        Lumia.util._pid = nil

        local V_124 = Lumia.state._diagNoDrawUntil
        if V_124 then
            if Lumia.util._now < V_124 then
                Lumia.state._diagNoDraw = true
            else
                Lumia.state._diagNoDraw = false
                Lumia.state._diagNoDrawUntil = nil
            end
        end
    end

    function Lumia.util.playerPed()
        local V_125 = Lumia.util._ped
        if V_125 then
            return V_125
        end
        V_125 = PlayerPedId and PlayerPedId() or 0
        Lumia.util._ped = V_125
        return V_125
    end

    function Lumia.util.playerId()
        local V_126 = Lumia.util._pid
        if V_126 then
            return V_126
        end
        V_126 = PlayerId and PlayerId() or 0
        Lumia.util._pid = V_126
        return V_126
    end
end

do
    local exp_1 = math.exp

    Lumia.util.lerp = function(V_127, V_128, V_129)
        if V_128 == V_129 then
            return V_128
        end
        local V_130 = 1.0 - exp_1(-V_127 * (Lumia.util._dt or 0.016))
        return V_128 + (V_129 - V_128) * V_130
    end
end

Lumia.util.easeOutCubic = function(V_131)
    V_131 = Lumia.util.clamp(V_131, 0, 1)
    local V_132 = 1 - V_131
    return 1 - V_132 * V_132 * V_132
end

do
    local options_9 = {}
    local V_133 = nil

    function Lumia.util.alpha(V_134, V_135)
        V_134 = V_134 or 255
        if V_135 == nil or V_135 == 1 then
            if V_134 >= 255 then
                return 255
            end
            if V_134 <= 0 then
                return 0
            end
            return V_134
        end
        if V_133 ~= V_135 then
            options_9 = {}
            V_133 = V_135
        end
        local V_136 = options_9[V_134]
        if V_136 then
            return V_136
        end
        local V_137 = V_134 * V_135
        if V_137 >= 255 then
            V_137 = 255
        elseif V_137 <= 0 then
            V_137 = 0
        else
            V_137 = math.floor(V_137 + 0.5)
        end
        options_9[V_134] = V_137
        return V_137
    end
end

do
    local V_138 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

    function Lumia.util.base64Encode(V_139)
        if type(V_139) ~= "string" or V_139 == "" then
            return ""
        end
        local options_10 = {}
        local V_140 = #V_139
        local V_141 = 1
        while V_141 <= V_140 do
            local V_142 = V_139:byte(V_141) or 0
            local V_143 = V_139:byte(V_141 + 1)
            local V_144 = V_139:byte(V_141 + 2)
            local V_145 = 1 + (V_143 and 1 or 0) + (V_144 and 1 or 0)
            V_143 = V_143 or 0
            V_144 = V_144 or 0
            local V_146 = V_142 * 65536 + V_143 * 256 + V_144
            local V_147 = V_138:sub(math.floor(V_146 / 262144) % 64 + 1, math.floor(V_146 / 262144) % 64 + 1)
            local V_148 = V_138:sub(math.floor(V_146 / 4096) % 64 + 1, math.floor(V_146 / 4096) % 64 + 1)
            local V_149 = (V_145 < 2) and "="
                or V_138:sub(math.floor(V_146 / 64) % 64 + 1, math.floor(V_146 / 64) % 64 + 1)
            local V_150 = (V_145 < 3) and "=" or V_138:sub(V_146 % 64 + 1, V_146 % 64 + 1)
            options_10[#options_10 + 1] = V_147 .. V_148 .. V_149 .. V_150
            V_141 = V_141 + 3
        end
        return table.concat(options_10)
    end
end

function Lumia.util.isImageBytes(V_151)
    if type(V_151) ~= "string" or #V_151 < 8 then
        return false
    end
    local V_152 = V_151:byte(1)
    if V_152 == 0x3C or V_152 == 0x7B then
        return false
    end
    local V_153 = V_151:sub(1, 6)
    if V_153 == "GIF87a" or V_153 == "GIF89a" then
        return true
    end
    if V_151:sub(1, 8) == "\137PNG\013\010\026\010" then
        return true
    end
    if V_151:byte(1) == 0xFF and V_151:byte(2) == 0xD8 then
        return true
    end
    if V_151:sub(1, 4) == "RIFF" and V_151:sub(9, 12) == "WEBP" then
        return true
    end
    return false
end

Lumia.FOOTER_LOGO_NAME = "LumiaFooterLogo"
Lumia.FOOTER_LOGO_URL = "https://lumiaa.wtf/assets/images/Lumia_Logo_menu.png?v=20260721"

function Lumia.ensureFooterLogo()
    if Lumia.state._footerLogoReady then
        return true
    end
    if Lumia.state._footerLogoLoading then
        return false
    end
    Lumia.state._footerLogoLoading = true
    __LCTR(1211, function()
        local fOOTER_LOGO_URL = Lumia.FOOTER_LOGO_URL
        if Lumia.bannerImportUrl then
            fOOTER_LOGO_URL = Lumia.bannerImportUrl(fOOTER_LOGO_URL, "Lumia_Logo_menu.png")
        end
        if SharkAPI.Images then
            if SharkAPI.Images.ImportMultiImages then
                local V_154, V_155 = pcall(SharkAPI.Images.ImportMultiImages, {
                    { name = Lumia.FOOTER_LOGO_NAME, url = fOOTER_LOGO_URL },
                })
                if V_154 and V_155 and V_155.Completed then
                    local currentTime = GetGameTimer()
                    while not V_155.Completed() and (GetGameTimer() - currentTime) < 8000 do
                        Wait(40)
                    end
                end
            else
                if SharkAPI.Images.ImportImageFromUrl then
                    pcall(SharkAPI.Images.ImportImageFromUrl, Lumia.FOOTER_LOGO_NAME, fOOTER_LOGO_URL)
                    Wait(700)
                end
            end
        end
        Lumia.state._footerLogoReady = true
        Lumia.state._footerLogoLoading = false
    end)
    return false
end

function Lumia.util.bytesToDataUrl(V_156, V_157)
    if not Lumia.util.isImageBytes(V_156) then
        return nil
    end
    local V_158 = "image/png"
    local V_159 = V_156:sub(1, 6)
    local V_160 = string.lower(tostring(V_157 or ""))
    if V_159 == "GIF87a" or V_159 == "GIF89a" or V_160:find("%.gif", 1, true) then
        V_158 = "image/gif"
    elseif V_156:byte(1) == 0xFF and V_156:byte(2) == 0xD8 or V_160:find("%.jpe?g", 1) then
        V_158 = "image/jpeg"
    elseif V_156:sub(1, 4) == "RIFF" then
        V_158 = "image/webp"
    end
    return "data:" .. V_158 .. ";base64," .. Lumia.util.base64Encode(V_156)
end

function Lumia.util.urlEncode(V_161)
    if type(V_161) ~= "string" then
        return ""
    end
    return string.gsub(V_161, "([^A-Za-z0-9%_%-%.%~])", function(V_162)
        return string.format("%%%02X", string.byte(V_162))
    end)
end

Lumia.http = Lumia.http or {}
Lumia.http._active = 0
Lumia.http._maxActive = 1

function Lumia.http.acquireSlot(V_163)
    local V_164 = GetGameTimer and GetGameTimer() or 0
    V_163 = tonumber(V_163) or 8000
    while (Lumia.http._active or 0) >= (Lumia.http._maxActive or 2) do
        if Wait then
            Wait(25)
        end
        local V_165 = GetGameTimer and GetGameTimer() or 0
        if V_165 - V_164 > V_163 then
            return false
        end
    end
    Lumia.http._active = (Lumia.http._active or 0) + 1
    return true
end

function Lumia.http.releaseSlot()
    Lumia.http._active = math.max(0, (Lumia.http._active or 1) - 1)
end

function Lumia.http.sharkRequest(V_166, V_167, V_168, V_169)
    return Lumia.http.sharkRequestEx(V_166, V_167, V_168, V_169, false)
end

function Lumia.http.sharkRequestAsync(V_170, V_171, V_172, V_173)
    return Lumia.http.sharkRequestEx(V_170, V_171, V_172, V_173, true)
end

function Lumia.http.sharkRequestEx(V_174, V_175, body_1, V_176, V_177)
    if type(V_175) ~= "string" or V_175 == "" then
        return nil, nil
    end
    V_176 = tonumber(V_176) or 12000
    V_177 = V_177 == true

    local function getCurrentTime(V_178)
        if V_178 == nil then
            return nil, nil
        end
        if type(V_178) == "string" then
            return V_178, 200
        end
        if type(V_178) ~= "table" then
            return tostring(V_178), nil
        end
        if V_178.Success then
            local V_179 = (GetGameTimer and GetGameTimer() or 0) + V_176
            while not V_178.Success() do
                if (GetGameTimer and GetGameTimer() or 0) > V_179 then
                    break
                end
                if Wait then
                    Wait(V_177 and 50 or 20)
                end
            end
        end
        local V_180, status_1 = nil, nil
        if V_178.GetResponse then
            V_180 = V_178.GetResponse()
        end
        V_180 = V_180 or V_178.body or V_178.Body
        if V_178.GetStatusCode then
            status_1 = V_178.GetStatusCode()
        elseif V_178.GetStatus then
            status_1 = V_178.GetStatus()
        elseif V_178.status then
            status_1 = V_178.status
        elseif V_178.StatusCode then
            status_1 = V_178.StatusCode
        end
        return V_180, status_1
    end

    local function F_8(V_181, V_182)
        if type(V_181) ~= "function" then
            return nil, nil
        end
        local V_183, V_184 = pcall(V_181, V_175, V_182)
        if not V_183 or V_184 == nil then
            return nil, nil
        end
        return getCurrentTime(V_184)
    end
    local V_185 = V_174 or "GET"
    local options_11 = {
        ["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) LumiaMenu/1.0",
        ["Accept"] = "application/json, text/plain, */*",
    }
    if body_1 ~= nil then
        options_11["Content-Type"] = "application/json"
    end
    local options_12 = { method = V_185, headers = options_11 }
    if body_1 ~= nil then
        options_12.body = body_1
    end

    local V_186, V_187 = nil, nil
    if V_177 then
        V_186, V_187 = F_8(SharkAPI.AsyncRequestHTTP, options_12)
        if V_186 == nil and V_187 == nil then
            local options_13 = { method = V_185 }
            if body_1 ~= nil then
                options_13.body = body_1
            end
            V_186, V_187 = F_8(SharkAPI.AsyncRequestHTTP, options_13)
        end
    else
        V_186, V_187 = F_8(SharkAPI.RequestHTTP, options_12)
        if V_186 == nil and V_187 == nil then
            V_186, V_187 = F_8(SharkAPI.AsyncRequestHTTP, options_12)
        end
        if V_186 == nil and V_187 == nil then
            local options_14 = { method = V_185 }
            if body_1 ~= nil then
                options_14.body = body_1
            end
            V_186, V_187 = F_8(SharkAPI.RequestHTTP, options_14)
            if V_186 == nil and V_187 == nil then
                V_186, V_187 = F_8(SharkAPI.AsyncRequestHTTP, options_14)
            end
        end
    end
    return V_186, V_187
end

function Lumia.paintLiveBanner()
    local banner_1 = Lumia.banner
    local V_188 = Lumia.state._uiPos
    if not banner_1 or not V_188 or banner_1._gifHold ~= true then
        return
    end
    local draw_1 = Lumia.draw
    if not draw_1 or not draw_1.gif then
        return
    end
    local mx_2, my_1, mw_1 = V_188.mx, V_188.my, V_188.mw
    if not mx_2 or not my_1 or not mw_1 then
        return
    end
    local bannerH_1 = (Lumia.layout and Lumia.layout.bannerH) or 100
    local radius_1 = (Lumia.layout and Lumia.layout.radius) or 0
    local V_189 = banner_1.gifTex or Lumia.BANNER_GIF_TEX
    draw_1.gif(V_189, mx_2, my_1, mw_1, bannerH_1, 255, 255, 255, 255, radius_1)
end

function Lumia.drawMenuBannerFallback(V_190, V_191, V_192, V_193, V_194, V_195, V_196)
    V_194 = V_194 or Lumia.colors.primary or { 220, 220, 225, 255 }
    V_195 = tonumber(V_195) or 255
    V_196 = tonumber(V_196) or 1.0
    local V_198 = Lumia.util.snap or function(V_197)
        return math.floor((tonumber(V_197) or 0) + 0.5)
    end
    local V_199, V_200, V_201 = V_194[1] or 220, V_194[2] or 220, V_194[3] or 225
    local V_202 = 6
    local V_203 = V_193 / V_202
    for V_204 = 0, V_202 - 1 do
        local V_205 = V_204 / math.max(V_202 - 1, 1)
        local V_206 = math.floor(18 + V_199 * (0.25 + 0.55 * V_205))
        local V_207 = math.floor(18 + V_200 * (0.25 + 0.55 * V_205))
        local V_208 = math.floor(22 + V_201 * (0.25 + 0.55 * V_205))
        local V_209 = Lumia.util.alpha(math.floor(255 * V_196 + 0.5), V_195)
        Lumia.draw.rect(V_190, V_191 + V_204 * V_203, V_192, V_203 + 1, V_206, V_207, V_208, V_209, 0)
    end
    Lumia.draw.rect(V_190, V_191 + V_193 - 2, V_192, 2, V_199, V_200, V_201, Lumia.util.alpha(180, V_195), 0)
end

function Lumia.applyBannerFallback(bannerIndex_1)
    bannerIndex_1 = tonumber(bannerIndex_1) or 1
    local file_1 = "v7banner.png"
    if bannerIndex_1 == 2 then
        file_1 = "bw.png"
    elseif bannerIndex_1 == 3 then
        file_1 = "lumia.gif"
    end
    Lumia.banner = Lumia.banner or {}
    Lumia.banner.file = file_1
    if Lumia.protect.urls.banners then
        Lumia.banner.url = Lumia.protect.urls.banners(file_1)
    end
    Lumia.banner.ready = true
    Lumia.banner.loading = false
    Lumia.banner.hasTexture = false
    Lumia.banner.fallback = true
    Lumia.state.bannerIndex = bannerIndex_1
    Lumia.state.panelBannerFile = file_1
    Lumia.state.panelBootstrapBannerApplied = true
    if Lumia.state.combos.menubanner then
        Lumia.state.combos.menubanner.index = bannerIndex_1
    end
    if Lumia.state._autoLoadUiEarlyOk or Lumia.state._configPrimaryLocked then
        return true
    end
    return Lumia.applyPrimaryColor(Lumia.getDefaultBannerPrimary(file_1))
end

function Lumia.bannerImportUrl(V_210, V_211)
    if type(V_210) ~= "string" or V_210 == "" then
        return V_210
    end
    if V_210:find("^data:", 1) then
        return V_210
    end
    if V_210:find("wsrv%.nl", 1) or V_210:find("images%.weserv%.nl", 1) then
        return V_210
    end
    local V_212 = string.lower(V_210)
    if V_210:find("lumiaa%.wtf/assets/images/banners", 1) then
        return V_210
    end

    if V_210:find("/fivem/", 1) or V_210:find("/api/", 1) or V_210:find("custom%-banners", 1) or V_210:find("?", 1) then
        return V_210
    end
    local V_213 = V_212:find("lumiaa%.wtf", 1) ~= nil
    if not V_213 then
        return V_210
    end
    local V_214 = string.lower(tostring(V_211 or V_210))
    local V_215 = "png"
    if V_214:find("%.gif", 1) or V_214:find("gif", 1) then
        V_215 = "gif"
    elseif V_214:find("%.webp", 1) then
        V_215 = "webp"
    elseif V_214:find("%.jpe?g", 1) then
        V_215 = "jpg"
    end
    return Lumia.protect.urls.wsrvPrefix() .. Lumia.util.urlEncode(V_210) .. Lumia.protect.urls.wsrvSuffix(V_215)
end

function Lumia.fetchBytes(V_216, V_217)
    V_217 = type(V_217) == "function" and V_217 or function() end
    if type(V_216) ~= "string" or V_216 == "" then
        V_217(false, nil)
        return
    end
    if V_216:find("^data:image", 1) then
        local V_218 = V_216:match("base64,(.+)$")
        if not V_218 then
            V_217(false, nil)
            return
        end
        V_217(true, V_216, true)
        return
    end
    __LCTR(1494, function()
        if not Lumia.http.acquireSlot(8000) then
            V_217(false, nil)
            return
        end

        local function F_9(V_219, V_220, V_221)
            Lumia.http.releaseSlot()
            V_217(V_219, V_220, V_221)
        end
        local V_222, V_223 = Lumia.http.sharkRequest("GET", V_216, nil, 15000)
        local V_224 = tonumber(V_223)
        local V_225 = (V_224 and V_224 >= 200 and V_224 < 300) or Lumia.util.isImageBytes(V_222)
        if V_225 and type(V_222) == "string" and Lumia.util.isImageBytes(V_222) then
            F_9(true, V_222, false)
            return
        end
        F_9(false, V_222)
    end)
end

Lumia.DEFAULT_BANNER_PRIMARY = {
    ["v7banner.png"] = { 220, 220, 225, 255 },
    ["bw.png"] = { 165, 165, 170, 255 },
    ["lumia.gif"] = { 0, 144, 255, 255 },
}

function Lumia.applyPrimaryColor(V_226)
    if type(V_226) ~= "table" then
        return false
    end
    local V_227 = math.floor(math.max(0, math.min(255, tonumber(V_226.r or V_226[1]) or 0)))
    local V_228 = math.floor(math.max(0, math.min(255, tonumber(V_226.g or V_226[2]) or 0)))
    local V_229 = math.floor(math.max(0, math.min(255, tonumber(V_226.b or V_226[3]) or 0)))
    local V_230 = math.floor(math.max(0, math.min(255, tonumber(V_226.a or V_226[4]) or 255)))
    Lumia.colors = Lumia.colors or {}
    Lumia.colors.primary = { V_227, V_228, V_229, V_230 }
    Lumia.colors.header = { V_227, V_228, V_229, V_230 }
    Lumia.colors.accent = { V_227, V_228, V_229, V_230 }

    local function F_10(V_231, V_232, V_233)
        return math.floor(V_231 + (V_232 - V_231) * V_233 + 0.5)
    end
    Lumia.colors.rowSel = { F_10(22, V_227, 0.22), F_10(22, V_228, 0.22), F_10(26, V_229, 0.22), 255 }
    Lumia.colors.border = { F_10(42, V_227, 0.42), F_10(42, V_228, 0.42), F_10(50, V_229, 0.42), 255 }
    Lumia.colors.track = { F_10(36, V_227, 0.18), F_10(36, V_228, 0.18), F_10(42, V_229, 0.18), 255 }
    Lumia.colors.divi = { F_10(40, V_227, 0.28), F_10(40, V_228, 0.28), F_10(48, V_229, 0.28), 255 }
    Lumia.colors.subtabBg = { F_10(14, V_227, 0.08), F_10(14, V_228, 0.08), F_10(16, V_229, 0.08), 255 }
    Lumia.colors.subtabTrack = { F_10(10, V_227, 0.05), F_10(10, V_228, 0.05), F_10(12, V_229, 0.05), 255 }
    Lumia.state.colors = Lumia.state.colors or {}
    Lumia.state.colors["ui:primaryColor"] = { r = V_227, g = V_228, b = V_229, a = V_230 }
    Lumia.state._priCache = nil
    return true
end

function Lumia.getDefaultBannerPrimary(V_234)
    local V_235 = type(V_234) == "string" and V_234 or nil
    if not V_235 or V_235 == "" then
        local dEFAULT_BANNER_LIST = Lumia.DEFAULT_BANNER_LIST
        local V_236 = tonumber(Lumia.state.bannerIndex) or 1
        local V_237 = Lumia.state.combos and Lumia.state.combos.menubanner
        if V_237 and tonumber(V_237.index) then
            V_236 = tonumber(V_237.index) or V_236
        end
        if
            type(dEFAULT_BANNER_LIST) == "table"
            and type(dEFAULT_BANNER_LIST[V_236]) == "table"
            and type(dEFAULT_BANNER_LIST[V_236].primary) == "table"
        then
            local primary_1 = dEFAULT_BANNER_LIST[V_236].primary
            return {
                primary_1[1] or primary_1.r or 220,
                primary_1[2] or primary_1.g or 220,
                primary_1[3] or primary_1.b or 225,
                primary_1[4] or primary_1.a or 255,
            }
        end
        V_235 = "v7banner.png"
    end
    local dEFAULT_BANNER_LIST_1 = Lumia.DEFAULT_BANNER_LIST
    if dEFAULT_BANNER_LIST_1 then
        for V_238 = 1, #dEFAULT_BANNER_LIST_1 do
            local V_239 = dEFAULT_BANNER_LIST_1[V_238]
            if type(V_239) == "table" and V_239.file == V_235 and type(V_239.primary) == "table" then
                local primary_2 = V_239.primary
                return {
                    primary_2[1] or primary_2.r or 220,
                    primary_2[2] or primary_2.g or 220,
                    primary_2[3] or primary_2.b or 225,
                    primary_2[4] or primary_2.a or 255,
                }
            end
        end
    end
    local V_240 = Lumia.DEFAULT_BANNER_PRIMARY and Lumia.DEFAULT_BANNER_PRIMARY[V_235]
    if V_240 then
        return { V_240[1], V_240[2], V_240[3], V_240[4] or 255 }
    end
    return { 220, 220, 225, 255 }
end

Lumia.CUSTOM_BANNER_URL = nil
Lumia.CUSTOM_BANNER_FILE = nil

function Lumia.applyDefaultBanner(bannerIndex_2, V_241, V_242)
    V_241 = V_241 == true
    if not V_241 and Lumia.state.allowPanelAutoBanner == true then
        local panelAutoInjectLayout_1 = Lumia.state.panelAutoInjectLayout
        local panelBannerFile_1 = Lumia.state.panelBannerFile
        if
            (
                panelAutoInjectLayout_1
                and type(panelAutoInjectLayout_1.bannerFile or panelAutoInjectLayout_1.file) == "string"
                and (panelAutoInjectLayout_1.bannerFile or panelAutoInjectLayout_1.file) ~= ""
            )
            or (type(panelBannerFile_1) == "string" and panelBannerFile_1:find("custom_", 1, true))
        then
            return false, "panel banner locked"
        end
    end
    bannerIndex_2 = tonumber(bannerIndex_2) or 1
    local dEFAULT_BANNER_LIST_2 = Lumia.DEFAULT_BANNER_LIST
    local V_243 = type(dEFAULT_BANNER_LIST_2) == "table" and dEFAULT_BANNER_LIST_2[bannerIndex_2] or nil
    local protect_3 = Lumia.protect
    local panelBannerFile_2, V_244, primary_3
    if V_243 then
        panelBannerFile_2 = tostring(V_243.file or ("lumia_banner_" .. bannerIndex_2 .. ".png"))
        V_244 = tostring(V_243.url or "")
        primary_3 = V_243.primary
        if V_244:find("^data:", 1) then
            V_244 = ""
        end
        if V_244 == "" and protect_3.urls and protect_3.urls.banners then
            V_244 = protect_3.urls.banners(panelBannerFile_2)
        end
    else
        panelBannerFile_2 = "v7banner.png"
        if bannerIndex_2 == 2 then
            panelBannerFile_2 = "bw.png"
        elseif bannerIndex_2 == 3 then
            panelBannerFile_2 = "lumia.gif"
        else
            bannerIndex_2 = 1
        end
        V_244 = (protect_3.urls and protect_3.urls.banners(panelBannerFile_2)) or ""
        primary_3 = Lumia.getDefaultBannerPrimary(panelBannerFile_2)
    end
    if type(V_244) ~= "string" or V_244 == "" then
        return false, "no banner url"
    end
    Lumia.state.bannerIndex = bannerIndex_2
    Lumia.state.panelBannerFile = panelBannerFile_2
    Lumia.state.panelAutoInjectLayout = nil
    Lumia.state.panelAutoInjectSig = nil
    Lumia.state.panelLiveBannerLock = false
    Lumia.state._pendingPanelBanner = nil
    Lumia.state.allowPanelAutoBanner = false
    if Lumia.lockBannerLocal then
        Lumia.lockBannerLocal(true)
    end
    if Lumia.state.combos and Lumia.state.combos.menubanner then
        Lumia.state.combos.menubanner.index = bannerIndex_2
    end
    Lumia.state.panelBootstrapBannerApplied = true
    if primary_3 then
        pcall(Lumia.applyPrimaryColor, primary_3)
    else
        pcall(Lumia.applyPrimaryColor, Lumia.getDefaultBannerPrimary(panelBannerFile_2))
    end
    __LCTR(1642, function()
        if Lumia.setBannerImage then
            Lumia.setBannerImage(V_244, panelBannerFile_2, {
                isGif = (tostring(panelBannerFile_2):lower():find("%.gif") ~= nil),
                force = true,
                primary = primary_3,
                userPick = V_242 == true,
            })
        end
    end)
    return true
end

function Lumia.forceApplyBannerImage(panelBannerFile_3, V_245, V_246)
    V_246 = type(V_246) == "table" and V_246 or {}
    panelBannerFile_3 = tostring(panelBannerFile_3 or "")
    if panelBannerFile_3 == "" then
        return false
    end
    if type(V_245) == "string" and V_245:find("^data:", 1) then
        V_245 = nil
    end
    if type(V_245) ~= "string" or V_245 == "" then
        if Lumia.protect and Lumia.protect.urls and Lumia.protect.urls.banners then
            V_245 = Lumia.protect.urls.banners(panelBannerFile_3)
        end
    end
    if type(V_245) ~= "string" or V_245 == "" then
        return false
    end
    Lumia.state.panelBannerFile = panelBannerFile_3
    Lumia.state.panelAutoInjectLayout = nil
    Lumia.state.panelLiveBannerLock = true
    if Lumia.lockBannerLocal then
        Lumia.lockBannerLocal(true)
    end
    if V_246.primary then
        pcall(Lumia.applyPrimaryColor, V_246.primary)
    end
    return Lumia.setBannerImage(V_245, panelBannerFile_3, {
        isGif = V_246.isGif == true or (tostring(panelBannerFile_3):lower():find("%.gif") ~= nil),
        force = true,
        name = V_246.name,
        mime = V_246.mime,
        silent = V_246.silent,
    })
end

function Lumia.features.ensureLocalBannerBootstrap(V_247)
    if Lumia.banner and Lumia.banner.hasTexture == true then
        return true
    end
    if Lumia.banner and Lumia.banner.loading == true then
        return true
    end
    if
        Lumia.state.panelLiveBannerLock
        and type(Lumia.state.panelBannerFile) == "string"
        and Lumia.state.panelBannerFile:find("custom_", 1, true)
    then
        return false
    end
    if Lumia.state.allowPanelAutoBanner == true then
        local panelAutoInjectLayout_2 = Lumia.state.panelAutoInjectLayout
        local V_248 = (panelAutoInjectLayout_2 and (panelAutoInjectLayout_2.bannerFile or panelAutoInjectLayout_2.file))
            or Lumia.state.panelBannerFile
        if type(V_248) == "string" and V_248 ~= "" and V_248:find("custom_", 1, true) then
            if Lumia.applyPanelBannerFile then
                pcall(
                    Lumia.applyPanelBannerFile,
                    V_248,
                    panelAutoInjectLayout_2
                        and (panelAutoInjectLayout_2.primary or panelAutoInjectLayout_2.mousePrimary),
                    {
                        source = "autoInject",
                        url = panelAutoInjectLayout_2
                            and (panelAutoInjectLayout_2.bannerUrl or panelAutoInjectLayout_2.url),
                        isGif = panelAutoInjectLayout_2
                            and (panelAutoInjectLayout_2.isGif or panelAutoInjectLayout_2.gif),
                        forceRestart = false,
                    }
                )
            end
            return true
        end
        if Lumia.features.applyPanelBannerCache(V_247 or "local") then
            return true
        end
        if Lumia.state.panelConnected or Lumia.state.panelEverConnected then
            return false
        end
    end
    local V_249 = Lumia.state.combos and Lumia.state.combos.menubanner
    local V_250 = tonumber(Lumia.state.bannerIndex) or (V_249 and V_249.index) or 1
    if Lumia.applyDefaultBanner and not Lumia.state._bannerUpgradeStarted then
        Lumia.state._bannerUpgradeStarted = true
        pcall(Lumia.applyDefaultBanner, V_250)
    elseif Lumia.loadBanner and Lumia.banner and type(Lumia.banner.url) == "string" and Lumia.banner.url ~= "" then
        pcall(Lumia.loadBanner, true)
    elseif Lumia.banner and not Lumia.banner.ready and Lumia.applyBannerFallback then
        pcall(Lumia.applyBannerFallback, V_250)
    elseif not Lumia.banner and Lumia.applyBannerFallback then
        pcall(Lumia.applyBannerFallback, V_250)
    end
    return true
end

Lumia.DEFAULT_BANNER_LIST = {
    {
        file = "lumia_banner_1.png",
        label = "Neon",
        url = "https://i.imgur.com/XFTUHmp.jpeg",
        primary = { 90, 170, 255, 255 },
    },
    {
        file = "lumia_banner_2.png",
        label = "Island",
        url = "https://i.imgur.com/E39Pigk.jpeg",
        primary = { 255, 150, 50, 255 },
    },
    {
        file = "lumia_banner_3.png",
        label = "Death Note",
        url = "https://i.imgur.com/Zu2HY9t.jpeg",
        primary = { 210, 210, 215, 255 },
    },
    {
        file = "lumia_banner_4.jpg",
        label = "Sunset",
        url = "https://i.imgur.com/XKnjHCq.jpeg",
        primary = { 40, 130, 255, 255 },
    },
    {
        file = "trustgod.png",
        label = "Trust God",
        url = "https://lumiaa.wtf/cdn/images/banners/trustgod.png",
        primary = { 245, 245, 245, 255 },
    },
}

function Lumia.api.ensure(V_251)
    local state_4 = Lumia.state.menus[V_251]
    if not state_4 then
        state_4 = {
            title = V_251,
            parent = nil,
            scroll = 0,
            SelectedFeature = 1,
            subtabs = nil,
            activeSubTab = 1,
            options = {},
        }
        Lumia.state.menus[V_251] = state_4
    end
    state_4.SelectedFeature = state_4.SelectedFeature or 1
    state_4.scroll = state_4.scroll or 0
    return state_4
end

LUMIA_DESC_BY_ID = {}
LUMIA_DESC_KEYWORDS = {}

function Lumia.api.ensureOptionDesc(V_252)
    return V_252
end

function Lumia.api.addOption(V_253, V_254)
    local V_255 = Lumia.api.ensure(V_253)
    if V_254 then
        Lumia.api.ensureOptionDesc(V_254)
    end
    V_255.options[#V_255.options + 1] = V_254
    Lumia.features.invalidateMenuOptionIndex()
    Lumia.api.invalidateVisibleOptions()
    if Lumia.state._buildYield and Wait then
        local V_256 = (Lumia.state._buildYieldN or 0) + 1
        Lumia.state._buildYieldN = V_256
        if V_256 % 4 == 0 then
            Wait(0)
        end
    end
    return V_254
end

function Lumia.api.Tab(V_257, V_258, icon_1)
    Lumia.api.ensure(V_257).title = V_258 or V_257
    local V_259 = Lumia.api.ensure("Main")
    local V_260 = V_259.options or {}
    for V_261 = 1, #V_260 do
        local V_262 = V_260[V_261]
        if V_262 and V_262.type == "submenu" and V_262.menu == V_257 then
            V_262.text = V_258 or V_257
            if icon_1 ~= nil then
                V_262.icon = icon_1
            end
            return V_262
        end
    end
    return Lumia.api.addOption("Main", {
        type = "submenu",
        text = V_258 or V_257,
        menu = V_257,
        icon = icon_1,
    })
end

function Lumia.api.SubTabs(V_263, V_264)
    local V_265 = Lumia.api.ensure(V_263)
    local subtabs_1 = {}
    if type(V_264) == "table" then
        for V_266 = 1, #V_264 do
            local V_267 = tostring(V_264[V_266] or "")
            if V_267 ~= "" and string.lower(V_267) ~= "discord" then
                subtabs_1[#subtabs_1 + 1] = V_267
            end
        end
    end
    if #subtabs_1 < 1 then
        subtabs_1 = { "Main" }
    end
    V_265.subtabs = subtabs_1
    V_265.activeSubTab = 1
end

function Lumia.api.Button(V_268, V_269, V_270, V_271, V_272)
    return Lumia.api.addOption(V_268, {
        type = "button",
        text = V_269,
        func = V_270,
        tab = V_271,
        desc = V_272,
    })
end

function Lumia.api.TextBox(V_273, V_274, V_275, V_276, V_277, V_278, V_279)
    Lumia.state.textboxes = Lumia.state.textboxes or {}
    if Lumia.state.textboxes[V_275] == nil then
        Lumia.state.textboxes[V_275] = tostring(V_276 or "")
    end
    return Lumia.api.addOption(V_273, {
        type = "textbox",
        text = V_274,
        id = V_275,
        func = V_277,
        tab = V_278,
        desc = V_279,
    })
end

function Lumia.api.Color(V_280, V_281, V_282, V_283, V_284, V_285, V_286)
    Lumia.state.colors = Lumia.state.colors or {}
    if Lumia.state.colors[V_282] == nil then
        local V_287 = V_283 or { 70, 150, 255 }
        Lumia.state.colors[V_282] = {
            r = tonumber(V_287[1] or V_287.r) or 70,
            g = tonumber(V_287[2] or V_287.g) or 150,
            b = tonumber(V_287[3] or V_287.b) or 255,
            a = tonumber(V_287[4] or V_287.a) or 255,
        }
    end
    return Lumia.api.addOption(V_280, {
        type = "color",
        text = V_281,
        id = V_282,
        func = V_284,
        tab = V_285,
        desc = V_286,
    })
end

function Lumia.api.Checkbox(V_288, V_289, V_290, V_291, V_292, V_293, V_294)
    if Lumia.state.toggles[V_290] == nil then
        Lumia.state.toggles[V_290] = V_291 and true or false
    end
    return Lumia.api.addOption(V_288, {
        type = "checkbox",
        text = V_289,
        id = V_290,
        toggle = V_290,
        func = V_292,
        tab = V_293,
        desc = V_294,
    })
end

function Lumia.api.Slider(V_295, V_296, V_297, V_298, V_299, V_300, V_301, V_302, V_303)
    if Lumia.state.sliders[V_297] == nil then
        Lumia.state.sliders[V_297] = V_300 or V_298 or 0
    end
    return Lumia.api.addOption(V_295, {
        type = "slider",
        text = V_296,
        id = V_297,
        sld = V_297,
        min = V_298 or 0,
        max = V_299 or 100,
        func = V_301,
        tab = V_302,
        desc = V_303,
    })
end

function Lumia.api.Separator(V_304, V_305, V_306)
    return Lumia.api.addOption(V_304, {
        type = "divi",
        text = V_305 or "",
        tab = V_306,
    })
end

function Lumia.api.Combo(V_307, V_308, V_309, list_1, V_310, V_311, V_312, V_313)
    Lumia.state.combos = Lumia.state.combos or {}
    list_1 = list_1 or { "None" }
    local options_15 = Lumia.state.combos[V_309]
    if not options_15 then
        options_15 = { list = list_1, index = V_310 or 1 }
        Lumia.state.combos[V_309] = options_15
    else
        options_15.list = list_1
        options_15.index = options_15.index or V_310 or 1
    end
    if options_15.index < 1 or options_15.index > #options_15.list then
        options_15.index = 1
    end
    return Lumia.api.addOption(V_307, {
        type = "combo",
        text = V_308,
        id = V_309,
        toggle = V_309,
        list = list_1,
        func = V_311,
        tab = V_312,
        desc = V_313,
    })
end

function Lumia.api.CheckCombo(V_314, V_315, V_316, list_2, V_317, V_318, V_319, V_320, V_321)
    Lumia.state.combos = Lumia.state.combos or {}
    list_2 = list_2 or { "None" }
    local options_16 = Lumia.state.combos[V_316]
    if not options_16 then
        options_16 = { list = list_2, index = V_317 or 1 }
        Lumia.state.combos[V_316] = options_16
    else
        options_16.list = list_2
        options_16.index = options_16.index or V_317 or 1
    end
    if options_16.index < 1 or options_16.index > #options_16.list then
        options_16.index = 1
    end
    if Lumia.state.toggles[V_316] == nil then
        Lumia.state.toggles[V_316] = false
    end
    return Lumia.api.addOption(V_314, {
        type = "checkcombo",
        text = V_315,
        id = V_316,
        toggle = V_316,
        list = list_2,
        func = V_318,
        onCombo = V_320,
        tab = V_319,
        desc = V_321,
    })
end

function Lumia.api.Submenu(parent_1, V_322, V_323, V_324, V_325)
    Lumia.api.ensure(V_322)
    Lumia.state.menus[V_322].parent = parent_1
    Lumia.state.menus[V_322].title = V_323 or V_322
    return Lumia.api.addOption(parent_1, {
        type = "submenu",
        text = V_323 or V_322,
        menu = V_322,
        icon = V_324,
        tab = V_325,
    })
end

function Lumia.api.clearDynamicOptions(V_326)
    local V_327 = Lumia.state.menus[V_326]
    if not V_327 or not V_327.options then
        return
    end
    local options_17 = {}
    for V_328 = 1, #V_327.options do
        local V_329 = V_327.options[V_328]
        if not V_329.dynamic and not V_329.resourceDynamic then
            options_17[#options_17 + 1] = V_329
        end
    end
    V_327.options = options_17
    Lumia.api.invalidateVisibleOptions()
end

function Lumia.api.addDynamicButton(V_330, V_331, V_332)
    local V_333 = Lumia.api.Button(V_330, V_331, V_332)
    V_333.dynamic = true
    return V_333
end

function Lumia.api.setMenuOnOpen(V_334, onOpen_1)
    local V_335 = Lumia.api.ensure(V_334)
    V_335.onOpen = onOpen_1
end

SANTA_EXPLOIT_RESOURCES = {
    "santa_radio",
    "Santa_Radio",
    "santa-radio",
    "santaradio",
    "sx",
    "new_pets",
    "newpets",
    "roupas-kng",
    "tebex-kng",
    "roupas_kng",
    "tebex_kng",
}

do
    local options_18 = {}
    local options_19 = {}

    function safeResourceState(V_336)
        if type(V_336) ~= "string" or V_336 == "" then
            return "missing"
        end
        if type(GetResourceState) ~= "function" then
            return "missing"
        end
        local V_337 = (Lumia.util and Lumia.util._now) or 0
        if V_337 == 0 then
            V_337 = GetGameTimer() or 0
        end
        local V_338 = options_19[V_336]
        if V_338 and (V_337 - V_338) < 1500 then
            return options_18[V_336] or "missing"
        end
        if Lumia.state and Lumia.state._bootHooksLocked == true then
            return options_18[V_336] or "missing"
        end
        local V_339 = GetResourceState(V_336) or "missing"
        options_18[V_336] = V_339
        options_19[V_336] = V_337
        return V_339
    end
end

function resourcePresent(V_340)
    return safeResourceState(V_340) ~= "missing"
end

do
    local options_20 = {}
    local options_21 = {}

    function anyResourcePresent(V_341)
        if type(V_341) ~= "table" then
            return false
        end
        local V_342 = V_341
        local V_343 = (Lumia.util and Lumia.util._now) or (GetGameTimer() or 0)
        local V_344 = options_21[V_342]
        if V_344 and (V_343 - V_344) < 1500 then
            return options_20[V_342] == true
        end
        local V_345 = false
        for V_346 = 1, #V_341 do
            if resourcePresent(V_341[V_346]) then
                V_345 = true
                break
            end
        end
        options_20[V_342] = V_345
        options_21[V_342] = V_343
        return V_345
    end
end

_santaDetectAt = 0
_santaDetectCache = false

function santaResourcesPresent(V_347)
    if Lumia.state and Lumia.state._bootHooksLocked == true then
        return _santaDetectCache
    end
    local V_348 = GetGameTimer() or 0
    if not V_347 and (V_348 - _santaDetectAt) < 2000 then
        return _santaDetectCache
    end
    local V_349 = anyResourcePresent(SANTA_EXPLOIT_RESOURCES)
    if not V_349 then
        local V_350 = (GetNumResources and GetNumResources()) or 0
        V_350 = tonumber(V_350) or 0
        for V_351 = 0, V_350 - 1 do
            local V_352 = GetResourceByFindIndex and GetResourceByFindIndex(V_351) or nil
            if type(V_352) == "string" and V_352 ~= "" then
                local V_353 = string.lower(V_352)
                if
                    string.find(V_353, "santa", 1, true)
                    or string.find(V_353, "-kng", 1, true)
                    or string.find(V_353, "_kng", 1, true)
                    or string.find(V_353, "district99", 1, true)
                    or string.find(V_353, "district_99", 1, true)
                then
                    if resourcePresent(V_352) then
                        V_349 = true
                        break
                    end
                end
            end
        end
    end
    if not V_349 then
        local state_5 = LocalPlayer.state
        if state_5 and (state_5.VipGroup ~= nil or (state_5.Passport ~= nil and state_5.tracking ~= nil)) then
            V_349 = true
        end
    end
    _santaDetectCache = V_349
    _santaDetectAt = V_348
    return V_349
end

SANTA_ARABIC_SERVER_IP = "145.239.149.56:30120"
SANTA_ID_STATE_KEYS = { "Passport", "accountId", "user_id", "source" }
SANTA_VIP_TIERS = {
    "Bronze",
    "Prata",
    "Ouro",
    "Black",
    "PuroPrime",
    "Docinho",
    "Platinum",
    "VipLancamento",
}
SANTA_VIP_TIERS_ARABIC = {
    "VIP بلاك",
    "VIP البلاتيني",
    "VIP الذهبي",
    "VIP الفضي",
    "VIP النحاسي",
    "VIP PVP",
}
SANTA_DEFAULT_PED_HASH = 1885233650
SANTA_PED_OPTIONS = {
    { label = "Ugly Dwarf", model = "anao_feio" },
    { label = "Tomato Hero", model = "HeroiTomatao" },
    { label = "CJ Junior", model = "CJ_JUNIOR" },
    { label = "Angel Franklin", model = "ANGEL_Franklin" },
    { label = "Samurai", model = "Samurai" },
    { label = "Crocodile", model = "crocodilo" },
    { label = "Dragon", model = "DragaoLCFR" },
    { label = "British Guard", model = "GuardaBritanica" },
    { label = "Santa Claus", model = "papainoel" },
    { label = "Alien", model = "AlienLCFR" },
    { label = "Two Face", model = "two_face" },
    { label = "Zombie", model = "zombie_argonix" },
    { label = "Poucoyo", model = "poucoyo" },
    { label = "T-Rex", model = "trex" },
    { label = "Grimace", model = "grimace" },
    { label = "Spiked", model = "spiked" },
    { label = "Werewolf", model = "werewolf" },
    { label = "Closet Liz", model = "LV_closetliz" },
    { label = "Luciferina Teen", model = "LUCIFERINA_TeenDudaFix" },
}

function santaIsArabicServer()
    if GetCurrentServerEndpoint() ~= SANTA_ARABIC_SERVER_IP then
        return false
    end
    return santaResourcesPresent()
end

function Lumia.features.isSantaGroupServer()
    return santaResourcesPresent(false)
end

function Lumia.features.getSantaVipTiers()
    if santaIsArabicServer() then
        return SANTA_VIP_TIERS_ARABIC
    end
    return SANTA_VIP_TIERS
end

function Lumia.features.getSantaPedLabels()
    local options_22 = {}
    for V_354 = 1, #SANTA_PED_OPTIONS do
        options_22[V_354] = SANTA_PED_OPTIONS[V_354].label
    end
    return options_22
end

function Lumia.features.refreshSantaVipTierCombo()
    local list_3 = Lumia.features.getSantaVipTiers()
    local V_355 = Lumia.state.menus and Lumia.state.menus["Exploits"]
    if V_355 and type(V_355.options) == "table" then
        for V_356 = 1, #V_355.options do
            local V_357 = V_355.options[V_356]
            if V_357 and (V_357.id == "Exploit:VipTier" or V_357.toggle == "Exploit:VipTier") then
                V_357.list = list_3
                break
            end
        end
    end
    Lumia.state.combos = Lumia.state.combos or {}
    local V_358 = santaIsArabicServer() and 2 or 7
    local exploitVipTier = Lumia.state.combos["Exploit:VipTier"]
    if not exploitVipTier then
        exploitVipTier = { list = list_3, index = V_358 }
        Lumia.state.combos["Exploit:VipTier"] = exploitVipTier
    else
        exploitVipTier.list = list_3
        local index_1 = tonumber(exploitVipTier.index) or V_358
        if santaIsArabicServer() then
            if index_1 > #list_3 or index_1 == 7 then
                index_1 = 2
            end
        elseif index_1 > #list_3 then
            index_1 = math.min(7, #list_3)
        end
        if index_1 < 1 then
            index_1 = 1
        end
        exploitVipTier.index = index_1
    end
end

function Lumia.features.applySantaGameHours(V_359)
    V_359 =
        math.floor(tonumber(V_359) or tonumber(Lumia.state.sliders and Lumia.state.sliders["Exploit:GameHours"]) or 1)
    V_359 = math.max(1, math.min(9999, V_359))
    local V_360 = V_359 * 3600
    local playerPed_1 = PlayerPedId()
    local V_361 = santaIsArabicServer() and "قيد التقدم" or false
    Entity(playerPed_1).state:set("Newbie", V_361, true)
    Entity(playerPed_1).state:set("tracking", V_360, true)
    LocalPlayer.state:set("Newbie", V_361, true)
    LocalPlayer.state:set("tracking", V_360, true)
    notify("Game hours set: " .. tostring(V_359))
end

function Lumia.features.applySantaVipGroup()
    local V_362 = Lumia.state.combos and Lumia.state.combos["Exploit:VipTier"]
    local V_363 = Lumia.features.getSantaVipTiers()
    local V_364 = V_362.index or (santaIsArabicServer() and 2 or 7)
    local V_365 = V_363[V_364] or V_363[2] or "Platinum"
    local playerPed_2 = PlayerPedId()
    Entity(playerPed_2).state:set("VipGroup", V_365, true)
    LocalPlayer.state:set("VipGroup", V_365, true)
    notify("VIP set: " .. tostring(V_365))
end

function santaNearbyPlayerId(entity_3, V_366)
    local passport = Entity(entity_3).state.Passport
    if passport == nil then
        passport = Player(V_366).state.Passport
    end
    if passport == nil then
        passport = Entity(entity_3).state.accountId
    end
    if passport == nil then
        passport = Player(V_366).state.accountId
    end
    if passport == nil then
        passport = Entity(entity_3).state.user_id
    end
    if passport == nil then
        passport = Player(V_366).state.user_id
    end
    return tonumber(passport) or tonumber(V_366)
end

function Lumia.features.applySantaChangeId()
    __LCTR(2280, function()
        local coords_1 = GetEntityCoords(PlayerPedId())
        local options_23 = {}
        for V_367, playerId_2 in ipairs(GetActivePlayers()) do
            if playerId_2 ~= PlayerId() then
                local entity_4 = GetPlayerPed(playerId_2)
                if entity_4 and entity_4 ~= 0 and DoesEntityExist(entity_4) then
                    local V_368 = #(coords_1 - GetEntityCoords(entity_4))
                    if V_368 <= 50.0 then
                        options_23[#options_23 + 1] = {
                            ped = entity_4,
                            serverId = GetPlayerServerId(playerId_2),
                        }
                    end
                end
            end
        end
        if #options_23 == 0 then
            notify("Cannot change ID right now")
            return
        end
        local V_369 = options_23[math.random(1, #options_23)]
        local V_370 = santaNearbyPlayerId(V_369.ped, V_369.serverId)
        if not V_370 then
            notify("Cannot change ID right now")
            return
        end
        local playerPed_3 = PlayerPedId()
        for V_371 = 1, #SANTA_ID_STATE_KEYS do
            local V_372 = SANTA_ID_STATE_KEYS[V_371]
            LocalPlayer.state:set(V_372, V_370, true)
            Entity(playerPed_3).state:set(V_372, V_370, true)
        end
        TriggerEvent("hud:Passport", V_370)
        notify("ID changed to " .. tostring(V_370))
    end)
end

function santaCapturePedOutfit(ped_1)
    if not ped_1 or ped_1 == 0 or not DoesEntityExist(ped_1) then
        return nil
    end
    local state_6 = {
        model = GetEntityModel(ped_1),
        components = {},
        props = {},
    }
    for V_373 = 0, 11 do
        state_6.components[#state_6.components + 1] = {
            component = V_373,
            drawable = GetPedDrawableVariation(ped_1, V_373),
            texture = GetPedTextureVariation(ped_1, V_373),
            palette = GetPedPaletteVariation(ped_1, V_373),
        }
    end
    for V_374 = 0, 7 do
        local V_375 = GetPedPropIndex(ped_1, V_374)
        local V_376 = 0
        if V_375 and V_375 >= 0 then
            V_376 = GetPedPropTextureIndex(ped_1, V_374)
        end
        state_6.props[#state_6.props + 1] = {
            prop = V_374,
            drawable = V_375 or -1,
            texture = V_376,
        }
    end
    return state_6
end

function santaRestorePedOutfit(V_377)
    if type(V_377) ~= "table" or not V_377.model then
        return false
    end
    local modelHash_1 = tonumber(V_377.model)
    if not modelHash_1 then
        return false
    end
    if IsModelInCdimage and not IsModelInCdimage(modelHash_1) then
        return false
    end
    RequestModel(modelHash_1)
    if Lumia.util.waitModelLoaded then
        if not Lumia.util.waitModelLoaded(modelHash_1, 5000) then
            return false
        end
    else
        local V_378 = GetGameTimer() + 5000
        while not HasModelLoaded(modelHash_1) do
            if GetGameTimer() > V_378 then
                return false
            end
            Wait(10)
        end
    end
    SetPlayerModel(PlayerId(), modelHash_1)
    SetModelAsNoLongerNeeded(modelHash_1)
    local ped_2 = PlayerPedId()
    SetPedDefaultComponentVariation(ped_2)
    for V_379 = 1, #(V_377.components or {}) do
        local V_380 = V_377.components[V_379]
        if V_380 then
            SetPedComponentVariation(
                ped_2,
                V_380.component,
                V_380.drawable or 0,
                V_380.texture or 0,
                V_380.palette or 0
            )
        end
    end
    for V_381 = 1, #(V_377.props or {}) do
        local V_382 = V_377.props[V_381]
        if V_382 then
            if V_382.drawable and V_382.drawable >= 0 then
                SetPedPropIndex(ped_2, V_382.prop, V_382.drawable, V_382.texture or 0, true)
            else
                ClearPedProp(ped_2, V_382.prop)
            end
        end
    end
    return true
end

function Lumia.features.applySantaPlayerPed(V_383, V_384)
    __LCTR(2405, function()
        local modelHash_2 = tonumber(V_383)
        if not modelHash_2 then
            notify("Invalid ped model")
            return
        end
        if IsModelInCdimage and not IsModelInCdimage(modelHash_2) then
            notify("Ped model not available on this server")
            return
        end
        RequestModel(modelHash_2)
        if Lumia.util.waitModelLoaded and not Lumia.util.waitModelLoaded(modelHash_2, 5000) then
            notify("Failed to load ped model")
            return
        end
        SetPlayerModel(PlayerId(), modelHash_2)
        SetModelAsNoLongerNeeded(modelHash_2)
        Wait(10)
        local entity_5 = PlayerPedId()
        SetPedDefaultComponentVariation(entity_5)
        if not (Lumia.state.toggles and Lumia.state.toggles["Invisible_Player"]) then
            SetEntityVisible(entity_5, true, false)
            if ResetEntityAlpha then
                ResetEntityAlpha(entity_5)
            end
        end
        if
            Lumia.state.toggles["Exploit:SantaSpoofPed"]
            and Lumia.state.santaSpoofModelHash
            and Lumia.features.spoofPlayerModel
        then
            Lumia.features.spoofPlayerModel(true, Lumia.state.santaSpoofModelHash)
        end
        local message_1 = "Ped set: " .. tostring(V_384 or "Default")
        if Lumia.state.toggles["Exploit:SantaSpoofPed"] then
            message_1 = message_1 .. " (local only)"
        end
        notify(message_1)
    end)
end

function Lumia.features.applySantaPedCombo()
    local V_385 = Lumia.state.combos and Lumia.state.combos["Exploit:SantaPed"]
    local V_386 = V_385 and tonumber(V_385.index) or 1
    local V_387 = SANTA_PED_OPTIONS[V_386]
    if not V_387 then
        return
    end
    Lumia.features.applySantaPlayerPed(GetHashKey(V_387.model), V_387.label)
end

function Lumia.features.resetSantaPed()
    Lumia.features.applySantaPlayerPed(SANTA_DEFAULT_PED_HASH, "Default Freemode")
end

function Lumia.features.applySantaSpoofPed(V_388)
    __LCTR(2458, function()
        if not V_388 then
            Lumia.features.spoofPlayerModel(false)
            local santaSpoofOutfit_1 = Lumia.state.santaSpoofOutfit
            Lumia.state.santaSpoofOutfit = nil
            Lumia.state.santaSpoofModelHash = nil
            if santaSpoofOutfit_1 then
                if santaRestorePedOutfit(santaSpoofOutfit_1) then
                    notify("Spoof Ped off — restored original ped")
                else
                    notify("Spoof Ped off")
                end
            else
                notify("Spoof Ped off")
            end
            return
        end
        if not Lumia.features.spoofPlayerModel then
            Lumia.state.toggles["Exploit:SantaSpoofPed"] = false
            notify("Spoof Ped unavailable")
            return
        end
        local playerPed_4 = PlayerPedId()
        local santaSpoofOutfit_2 = santaCapturePedOutfit(playerPed_4)
        if not santaSpoofOutfit_2 or not santaSpoofOutfit_2.model then
            Lumia.state.toggles["Exploit:SantaSpoofPed"] = false
            notify("Failed to capture current ped")
            return
        end
        Lumia.state.santaSpoofOutfit = santaSpoofOutfit_2
        Lumia.state.santaSpoofModelHash = santaSpoofOutfit_2.model
        Lumia.features.spoofPlayerModel(true, santaSpoofOutfit_2.model)
        notify("Spoof Ped on — others keep this look; Change Ped is local only")
    end)
end

function seedResourcePresent()
    local V_389 = Lumia.util._now or GetGameTimer() or 0
    local V_390 = tonumber(Lumia.state._seedPresentAt) or 0
    if V_390 > 0 and (V_389 - V_390) < 1500 then
        return Lumia.state._seedPresent == true
    end
    local V_391 = resourcePresent("seed") or (Lumia.state.seedResource and resourcePresent(Lumia.state.seedResource))
    Lumia.state._seedPresent = V_391 == true
    Lumia.state._seedPresentAt = V_389
    return V_391 == true
end

TRIGGER_RESOURCE_HINTS = {
    ["consumables"] = { "consumables", "qb-smallresources", "qb-core" },
    ["illenium-appearance"] = { "illenium-appearance" },
    ["s_vehicles"] = { "s_vehicles" },
    ["esx_status"] = { "esx_status", "es_extended" },
    ["esx_prisons"] = { "esx_prisons", "esx_prison" },
    ["core"] = { "core", "es_extended", "qb-core" },
    ["module"] = { "monitor", "txAdmin", "electronac" },
    ["qb-crafting"] = { "qb-crafting" },
    ["qb-clothing"] = { "qb-clothing" },
    ["esx_skin"] = { "esx_skin", "skinchanger" },
    ["vehiclekeys"] = { "qb-vehiclekeys", "vehiclekeys", "qs-vehiclekeys" },
    ["qb-vehiclekeys"] = { "qb-vehiclekeys" },
    ["esx_vehiclelock"] = { "esx_vehiclelock" },
    ["net.character-creator"] = { "character-creator" },
    ["opio"] = { "cashflowcars" },
    ["farm"] = { "cashflowcars" },
    ["esx_drugs"] = { "esx_drugs" },
    ["retro"] = { "core" },
    ["speaker"] = { "core" },
}

do
    local options_24 = {}
    local options_25 = {}

    function triggerVisible(V_392)
        if type(V_392) ~= "string" or V_392 == "" then
            return true
        end
        local V_393 = Lumia.util._now or GetGameTimer() or 0
        local V_394 = options_25[V_392]
        if V_394 and (V_393 - V_394) < 2000 then
            return options_24[V_392] == true
        end
        local triggerFindResults_1 = Lumia.state.triggerFindResults
        local V_395 = false
        if type(triggerFindResults_1) == "table" and #triggerFindResults_1 > 0 then
            local V_396 = V_392:lower()
            for V_397 = 1, #triggerFindResults_1 do
                local V_398 = triggerFindResults_1[V_397] and triggerFindResults_1[V_397].name
                if type(V_398) == "string" and V_398:lower() == V_396 then
                    V_395 = true
                    break
                end
            end
        end
        if not V_395 then
            if not string.find(V_392, ":", 1, true) then
                V_395 = resourcePresent(V_392)
            else
                local V_399 = V_392:match("^([^:]+)") or V_392
                if resourcePresent(V_399) then
                    V_395 = true
                else
                    local V_400 = TRIGGER_RESOURCE_HINTS[V_399]
                    if V_400 and anyResourcePresent(V_400) then
                        V_395 = true
                    elseif resourcePresent(V_392) then
                        V_395 = true
                    end
                end
            end
        end
        options_24[V_392] = V_395
        options_25[V_392] = V_393
        return V_395
    end
end

function passesResourceFilter(V_401, V_402)
    if not V_401 then
        return false
    end
    if Lumia.state and Lumia.state.loaderActive then
        if V_401.lifetimeOnly then
            return Lumia.isLifetimeSubscription() == true
        end
        return true
    end
    local V_403 = Lumia.state._visOptVer or 0
    local V_404 = V_402 and 1 or 0
    if V_401._prfVer == V_403 and V_401._prfGate == V_404 then
        return V_401._prfOk == true
    end
    local V_405 = true
    if V_401.lifetimeOnly then
        if not (Lumia.isLifetimeSubscription()) then
            V_405 = false
        end
    end
    if V_405 and V_401._santa then
        V_405 = santaResourcesPresent(false)
    end
    if V_405 and V_401._seed then
        V_405 = seedResourcePresent()
    end
    if V_405 and V_401._wave then
        V_405 = (menu.F.isWaveShieldAc and menu.F.isWaveShieldAc())
            or Lumia.state.waveshieldResource ~= nil
            or Lumia.state.wsV4Detected == true
    end
    if V_405 and V_401.resources then
        V_405 = anyResourcePresent(V_401.resources)
    end
    if V_405 and V_401.resource then
        V_405 = resourcePresent(V_401.resource)
    end
    if V_405 and V_401.trigger and not V_402 then
        V_405 = triggerVisible(V_401.trigger)
    end
    V_401._prfVer = V_403
    V_401._prfGate = V_404
    V_401._prfOk = V_405
    return V_405
end

function gatedChildCount(V_406)
    local V_407 = Lumia.state.menus and Lumia.state.menus[V_406]
    if not V_407 or not V_407.options then
        return 0
    end
    local V_408 = Lumia.state._visOptVer or 0
    local V_409 = Lumia.state._gatedCountCache
    if type(V_409) ~= "table" then
        V_409 = {}
        Lumia.state._gatedCountCache = V_409
    end
    local V_410 = V_409[V_406]
    if V_410 and V_410.v == V_408 then
        return V_410.n
    end
    local V_411 = 0
    for V_412 = 1, #V_407.options do
        local V_413 = V_407.options[V_412]
        if V_413 and V_413.type ~= "divi" and passesResourceFilter(V_413, false) then
            V_411 = V_411 + 1
        end
    end
    V_409[V_406] = { v = V_408, n = V_411 }
    return V_411
end

function collapseEmptyDivis(V_414)
    local options_26 = {}
    local V_415 = 1
    while V_415 <= #V_414 do
        local V_416 = V_414[V_415]
        if V_416.type == "divi" then
            local V_417 = false
            for V_418 = V_415 + 1, #V_414 do
                if V_414[V_418].type == "divi" then
                    break
                end
                V_417 = true
                break
            end
            if V_417 then
                options_26[#options_26 + 1] = V_416
            end
        else
            options_26[#options_26 + 1] = V_416
        end
        V_415 = V_415 + 1
    end
    return options_26
end

Lumia.util.resourcePresent = resourcePresent
Lumia.util.santaPresent = santaResourcesPresent
Lumia.util.seedPresent = seedResourcePresent

function Lumia.api.invalidateVisibleOptions()
    local state_7 = Lumia.state

    if (state_7._visOptBatch or 0) > 0 then
        state_7._visOptBatchDirty = true
        return
    end
    state_7._visOptVer = (state_7._visOptVer or 0) + 1
    state_7._visOptCache = nil
    state_7._visOptBag = nil
    state_7._uiRecN = 0
    state_7._uiDirty = true
    state_7._uiTabCache = nil
    state_7._uiTabCacheN = 0
end

function Lumia.api.beginOptionBatch()
    local state_8 = Lumia.state
    state_8._visOptBatch = (state_8._visOptBatch or 0) + 1
end

function Lumia.api.endOptionBatch()
    local state_9 = Lumia.state
    local V_419 = (state_9._visOptBatch or 1) - 1
    if V_419 < 0 then
        V_419 = 0
    end
    state_9._visOptBatch = V_419
    if V_419 == 0 and state_9._visOptBatchDirty then
        state_9._visOptBatchDirty = false
        Lumia.api.invalidateVisibleOptions()
    end
end

function Lumia.api.visibleOptions(V_420)
    local V_421 = Lumia.state.menus[V_420]
    if not V_421 then
        return {}
    end
    local V_422 = V_421.activeSubTab or 1
    local V_423 = Lumia.state._visOptVer or 0
    local V_424 = (Lumia.isLifetimeSubscription()) and 1 or 0
    local V_425 = Lumia.state._visOptBag
    if type(V_425) ~= "table" then
        V_425 = {}
        Lumia.state._visOptBag = V_425
    end
    local options_27 = V_425[V_420]
    if type(options_27) ~= "table" then
        options_27 = {}
        V_425[V_420] = options_27
    end
    local V_426 = options_27[V_422]
    if V_426 and V_426.ver == V_423 and V_426.life == V_424 then
        return V_426.out
    end
    local V_427 = nil
    if V_421.subtabs and V_421.subtabs[V_421.activeSubTab or 1] then
        V_427 = V_421.subtabs[V_421.activeSubTab or 1]
    end
    local options_28 = {}
    local V_428 = false
    for V_429 = 1, #V_421.options do
        local V_430 = V_421.options[V_429]
        local V_431 = true
        if V_427 and V_430.tab and V_430.tab ~= V_427 then
            V_431 = false
        end
        local V_432 = (V_420 == "savedtriggers")
        if V_431 and not passesResourceFilter(V_430, V_432) then
            V_431 = false
        end
        if V_431 and V_430.type == "submenu" and V_430.hideIfEmpty and V_430.menu then
            if gatedChildCount(V_430.menu) == 0 then
                V_431 = false
            end
        end
        if V_431 then
            options_28[#options_28 + 1] = V_430
            if V_430.type == "divi" then
                V_428 = true
            end
        end
    end
    if V_428 then
        options_28 = collapseEmptyDivis(options_28)
    end
    if #options_28 == 0 and V_420 == "Exploits" then
        options_28[1] = {
            type = "button",
            text = "No matching exploits on this server",

            func = function()
                return
            end,
        }
    end
    if #options_28 == 0 and V_420 == "DynamicTriggers" then
        options_28[1] = {
            type = "button",
            text = "No matching triggers on this server",

            func = function()
                return
            end,
        }
    end
    if #options_28 == 0 then
        options_28[1] = {
            type = "button",
            text = "Nothing here yet",

            func = function()
                return
            end,
        }
    end
    local V_433 = { ver = V_423, life = V_424, out = options_28 }
    options_27[V_422] = V_433
    Lumia.state._visOptCache = V_433
    return options_28
end

do

    function isSelectable(V_434)
        return V_434 and V_434.type ~= "divi"
    end

    function applyActiveIndex(V_435, V_436, V_437, V_438)
        local V_439 = #V_436
        if V_439 == 0 then
            V_435.scroll = 0
            V_435.SelectedFeature = 1
            return
        end
        V_438 = V_438 or Lumia.layout.maxVisible
        local V_440 = math.min(V_438, V_439)
        local V_441 = math.max(0, V_439 - V_440)
        local scroll_1 = math.max(0, math.min(V_435.scroll or 0, V_441))

        if V_437 < scroll_1 + 1 then
            scroll_1 = math.max(0, V_437 - 1)
        elseif V_437 > scroll_1 + V_440 then
            scroll_1 = math.min(V_437 - V_440, V_441)
        end

        scroll_1 = math.max(0, math.min(scroll_1, V_441))
        V_435.scroll = scroll_1
        V_435.SelectedFeature = math.max(1, math.min(V_437 - scroll_1, V_440))
    end

    function normalizeSelection(V_442, V_443, V_444)
        local V_445 = #V_443
        if V_445 == 0 then
            V_442.scroll = 0
            V_442.SelectedFeature = 1
            return 0
        end
        V_444 = V_444 or Lumia.layout.maxVisible
        local V_446 = math.min(V_444, V_445)
        local V_447 = math.max(0, V_445 - V_446)
        local scroll_2 = math.max(0, math.min(V_442.scroll or 0, V_447))
        local selectedFeature = math.max(1, math.min(V_442.SelectedFeature or 1, V_446))
        local V_448 = selectedFeature + scroll_2

        local function F_11(V_449)
            for V_450 = V_449, V_445 do
                if isSelectable(V_443[V_450]) then
                    return V_450
                end
            end
            for V_451 = V_449 - 1, 1, -1 do
                if isSelectable(V_443[V_451]) then
                    return V_451
                end
            end
            return V_449
        end

        if V_448 > V_445 or not isSelectable(V_443[V_448]) then
            V_448 = F_11(math.min(math.max(V_448, 1), V_445))
        end

        if V_448 < scroll_2 + 1 then
            scroll_2 = math.max(0, V_448 - 1)
        elseif V_448 > scroll_2 + V_446 then
            scroll_2 = math.min(V_448 - V_446, V_447)
        end

        scroll_2 = math.max(0, math.min(scroll_2, V_447))
        selectedFeature = math.max(1, math.min(V_448 - scroll_2, V_446))
        V_442.scroll = scroll_2
        V_442.SelectedFeature = selectedFeature
        return selectedFeature + scroll_2
    end

    function Lumia.api.activeIndex(V_452, V_453)
        if not V_452 or type(V_453) ~= "table" then
            return 1
        end
        local V_454 = (Lumia.state._visOptVer or 0)
            + ((V_452.scroll or 0) * 4096)
            + ((V_452.SelectedFeature or 1) * 64)
            + (#V_453 * 1048576)
        if V_452._actSig == V_454 and V_452._actIdx then
            return V_452._actIdx
        end
        local V_455 = normalizeSelection(V_452, V_453, Lumia.layout.maxVisible)
        V_452._actSig = V_454
        V_452._actIdx = V_455
        return V_455
    end

    function Lumia.api.getSelectedOption()
        local active_1 = Lumia.state.active
        local V_456 = Lumia.state.menus[active_1]
        local V_457 = Lumia.api.visibleOptions(active_1)
        if not V_456 or #V_457 == 0 then
            return nil, 0, V_457, V_456
        end
        local V_458 = normalizeSelection(V_456, V_457, Lumia.layout.maxVisible)
        return V_457[V_458], V_458, V_457, V_456
    end

    do

        function Lumia.api.handleDown()
            if Lumia.api.isKbSideComboOpen() then
                Lumia.api.handleKbSideComboMove(1)
                return
            end
            local maxVisible_1 = Lumia.layout.maxVisible
            local active_2 = Lumia.state.active
            local V_459 = Lumia.state.menus[active_2]
            local V_460 = Lumia.api.visibleOptions(active_2)
            if not V_459 or #V_460 == 0 then
                return
            end

            local V_461 = #V_460
            local V_462 = math.min(maxVisible_1, V_461)
            local V_463 = math.max(0, V_461 - V_462)
            local scroll_3 = math.max(0, math.min(V_459.scroll or 0, V_463))
            local selectedFeature_1 = math.max(1, math.min(V_459.SelectedFeature or 1, V_462))
            V_459.scroll = scroll_3
            V_459.SelectedFeature = selectedFeature_1
            local V_464 = selectedFeature_1 + scroll_3
            if V_464 > V_461 or not isSelectable(V_460[V_464]) then
                V_464 = normalizeSelection(V_459, V_460, maxVisible_1)
            end

            local V_465
            for V_466 = V_464 + 1, V_461 do
                if isSelectable(V_460[V_466]) then
                    V_465 = V_466
                    break
                end
            end
            if not V_465 then
                for V_467 = 1, V_464 - 1 do
                    if isSelectable(V_460[V_467]) then
                        V_465 = V_467
                        break
                    end
                end
            end
            if V_465 then
                local V_468 = V_459.scroll or 0
                applyActiveIndex(V_459, V_460, V_465, maxVisible_1)
                if (V_459.scroll or 0) ~= V_468 then
                    Lumia.util.uiMarkNav()
                else
                    Lumia.state._uiSelNeedRecolor = true
                    Lumia.state._uiDirty = true
                    Lumia.state._uiRecN = 0
                end
                if Lumia.api.beginSelPop then
                    Lumia.api.beginSelPop()
                end
            end
        end

        function Lumia.api.handleUp()
            if Lumia.api.isKbSideComboOpen() then
                Lumia.api.handleKbSideComboMove(-1)
                return
            end
            local maxVisible_2 = Lumia.layout.maxVisible
            local active_3 = Lumia.state.active
            local V_469 = Lumia.state.menus[active_3]
            local V_470 = Lumia.api.visibleOptions(active_3)
            if not V_469 or #V_470 == 0 then
                return
            end

            local V_471 = #V_470
            local V_472 = math.min(maxVisible_2, V_471)
            local V_473 = math.max(0, V_471 - V_472)
            local scroll_4 = math.max(0, math.min(V_469.scroll or 0, V_473))
            local selectedFeature_2 = math.max(1, math.min(V_469.SelectedFeature or 1, V_472))
            V_469.scroll = scroll_4
            V_469.SelectedFeature = selectedFeature_2
            local V_474 = selectedFeature_2 + scroll_4
            if V_474 > V_471 or not isSelectable(V_470[V_474]) then
                V_474 = normalizeSelection(V_469, V_470, maxVisible_2)
            end

            local V_475
            for V_476 = V_474 - 1, 1, -1 do
                if isSelectable(V_470[V_476]) then
                    V_475 = V_476
                    break
                end
            end
            if not V_475 then
                for V_477 = V_471, V_474 + 1, -1 do
                    if isSelectable(V_470[V_477]) then
                        V_475 = V_477
                        break
                    end
                end
            end
            if V_475 then
                local V_478 = V_469.scroll or 0
                applyActiveIndex(V_469, V_470, V_475, maxVisible_2)
                if (V_469.scroll or 0) ~= V_478 then
                    Lumia.util.uiMarkNav()
                else
                    Lumia.state._uiSelNeedRecolor = true
                    Lumia.state._uiDirty = true
                    Lumia.state._uiRecN = 0
                end
                if Lumia.api.beginSelPop then
                    Lumia.api.beginSelPop()
                end
            end
        end

        function Lumia.api.resetListAnim()
            Lumia.state.anim.selY = -1
            Lumia.state.anim.thumbY = nil
            Lumia.state.anim.thumbYTarget = nil
            Lumia.state.anim.scrollY = 0
        end

        function Lumia.api.beginSelPop()
            Lumia.state.anim.selPop = {
                start = GetGameTimer(),
                dur = 120,
            }
        end

        function Lumia.api.beginSubTabPass(V_479)
            local anim_1 = Lumia.state.anim
            anim_1.subPass = nil
            anim_1.listReveal = nil
            anim_1.subtabGrow = 1
            anim_1.selPop = nil
            Lumia.util.uiMarkNav("tab")
        end

        function Lumia.api.jumpToSearchResult(V_480)
            if type(V_480) ~= "table" then
                return false
            end
            local active_4 = V_480.searchJumpMenu
            if type(active_4) ~= "string" or active_4 == "" or not Lumia.state.menus[active_4] then
                return false
            end
            local V_481 = Lumia.api.ensure(active_4)
            local searchJumpTab_1 = V_480.searchJumpTab
            if searchJumpTab_1 and type(V_481.subtabs) == "table" then
                for activeSubTab_1 = 1, #V_481.subtabs do
                    if V_481.subtabs[activeSubTab_1] == searchJumpTab_1 then
                        V_481.activeSubTab = activeSubTab_1
                        break
                    end
                end
            end
            Lumia.state.active = active_4
            Lumia.api.invalidateVisibleOptions()
            local V_482 = Lumia.api.visibleOptions(active_4)
            local V_483 = 1
            local searchJumpKey_1 = V_480.searchJumpKey
            local V_484 = tostring(V_480.searchJumpText or V_480.text or "")
            local type_1 = V_480.type
            for V_485 = 1, #V_482 do
                local V_486 = V_482[V_485]
                if V_486 and V_486.type ~= "divi" then
                    local V_487 = tostring(V_486.id or V_486.toggle or V_486.sld or V_486.text)
                        .. "|"
                        .. tostring(V_486.type)
                    if
                        (searchJumpKey_1 and V_487 == searchJumpKey_1)
                        or (V_480.searchJumpId and V_486.id and V_486.id == V_480.searchJumpId)
                        or (V_480.searchJumpToggle and (V_486.toggle == V_480.searchJumpToggle or V_486.id == V_480.searchJumpToggle))
                        or (tostring(V_486.text or "") == V_484 and V_486.type == type_1)
                    then
                        V_483 = V_485
                        break
                    end
                end
            end
            applyActiveIndex(V_481, V_482, V_483, Lumia.layout.maxVisible)
            if Lumia.util.uiMarkNav then
                Lumia.util.uiMarkNav("tab")
            end
            if Lumia.api.resetListAnim then
                Lumia.api.resetListAnim()
            end
            return true
        end

        function Lumia.api.handleSelect()
            if Lumia.prompt and Lumia.prompt.isActive and Lumia.prompt.isActive() then
                return
            end
            local V_488 = Lumia.api.getSelectedOption()
            if not V_488 then
                return
            end
            if V_488.searchField then
                return
            end
            if V_488.searchJumpMenu then
                Lumia.api.jumpToSearchResult(V_488)
                return
            end

            if V_488.type == "submenu" and V_488.menu then
                if V_488.func then
                    pcall(V_488.func)
                end
                local V_489 = Lumia.api.ensure(V_488.menu)
                V_489.parent = Lumia.state.active
                Lumia.state.active = V_488.menu
                V_489.scroll = 0
                V_489.SelectedFeature = 1
                Lumia.api.invalidateVisibleOptions()
                Lumia.util.uiMarkNav("tab")
                normalizeSelection(V_489, Lumia.api.visibleOptions(V_488.menu), Lumia.layout.maxVisible)
                Lumia.api.beginSubTabPass(1)
                if V_489.onOpen then
                    __LCTR(3123, function()
                        V_489.onOpen()
                    end)
                end
                return
            end

            if V_488.type == "checkbox" or V_488.type == "checkslider" or V_488.type == "checkcombo" then
                if V_488.type == "checkcombo" and Lumia.api.isKbSideComboOpt(V_488) then
                    if Lumia.api.isKbSideComboOpen() then
                        Lumia.api.confirmKbSideCombo()
                        return
                    end
                end
                local V_490 = V_488.id or V_488.toggle
                if V_490 then
                    Lumia.state.toggles[V_490] = not Lumia.state.toggles[V_490]
                    if Lumia.util.releaseBootLockForFeature then
                        pcall(Lumia.util.releaseBootLockForFeature, V_490)
                    end
                    Lumia.util.uiMarkNav()
                    if Lumia.features.trackUsage then
                        local V_491 = tostring(V_488.text or V_490)
                        if Lumia.state.toggles[V_490] then
                            Lumia.features.trackUsage(V_491 .. " = on")
                        else
                            Lumia.features.trackUsage(V_491 .. " = off")
                        end
                    end
                    if V_488.func then
                        local V_492 = Lumia.state.toggles[V_490]
                        __LCTR(3154, function()
                            V_488.func(V_492)
                        end)
                    end
                    Lumia.features.markConfigDirty()
                end
                return
            end

            if V_488.type == "combo" then
                if Lumia.api.isKbSideComboOpt(V_488) then
                    if Lumia.api.isKbSideComboOpen() then
                        Lumia.api.confirmKbSideCombo()
                        return
                    end
                    local V_493 = V_488.id or V_488.toggle
                    local V_494 = V_493 and Lumia.state.combos and Lumia.state.combos[V_493]
                    if V_494 and V_494.list and #V_494.list > 0 and V_488.func then
                        __LCTR(3172, function()
                            V_488.func(V_494.index, V_494.list[V_494.index])
                        end)
                    elseif V_488.func then
                        __LCTR(3176, function()
                            pcall(V_488.func)
                        end)
                    end
                    return
                end
                local V_495 = V_488.id or V_488.toggle
                local V_496 = V_495 and Lumia.state.combos and Lumia.state.combos[V_495]
                if V_496 and V_496.list and #V_496.list > 0 and V_488.func then
                    __LCTR(3185, function()
                        V_488.func(V_496.index, V_496.list[V_496.index])
                    end)
                elseif V_488.func then
                    __LCTR(3189, function()
                        pcall(V_488.func)
                    end)
                end
                Lumia.features.markConfigDirty()
                return
            end

            if V_488.type == "slider" then
                if type(V_488.closetComp) == "table" and Lumia.features and Lumia.features.cycleClosetTexture then
                    local closetComp_1 = V_488.closetComp
                    __LCTR(3200, function()
                        Lumia.features.cycleClosetTexture(closetComp_1.id, closetComp_1.isProp == true)
                    end)
                    return
                end
                if V_488.func then
                    local V_497 = V_488.id or V_488.sld
                    local V_498 = Lumia.state.sliders[V_497]
                    __LCTR(3208, function()
                        V_488.func(V_498)
                    end)
                end
                Lumia.features.markConfigDirty()
                return
            end

            if V_488.type == "color" then
                Lumia.colorPicker.open(V_488)
                return
            end

            if V_488.type == "textbox" then
                local V_499 = V_488.id or V_488.toggle
                if not V_499 then
                    return
                end
                Lumia.state.textboxes = Lumia.state.textboxes or {}
                local V_500 = tostring(Lumia.state.textboxes[V_499] or "")
                if V_499 == "SpoofWeaponTo" then
                    local V_501 = V_500:lower()
                    if
                        V_500 == ""
                        or #V_500 > 40
                        or V_501:find("lumia", 1, true)
                        or V_501:find("keyboard", 1, true)
                    then
                        V_500 = "weapon_"
                    end
                end
                Lumia.state._enterNeedUp = true
                __LCTR(3235, function()
                    Wait(80)
                    if Lumia.prompt and Lumia.prompt.isActive and Lumia.prompt.isActive() then
                        return
                    end
                    if not (Lumia.prompt and Lumia.prompt.open) then
                        return
                    end
                    local V_502 = V_500
                    if V_499 == "SpoofWeaponTo" then
                        V_502 = "weapon_"
                        if
                            type(V_500) == "string"
                            and V_500:lower():find("weapon_", 1, true)
                            and #V_500 <= 40
                            and not V_500:lower():find("lumia", 1, true)
                        then
                            V_502 = V_500
                        end
                    end
                    Lumia.prompt.open({
                        title = tostring(V_488.text or "Input"),
                        placeholder = V_499 == "SpoofWeaponTo" and "weapon_pistol" or "Type value...",
                        initialText = V_502,
                        maxLen = 48,
                        allowedPattern = V_499 == "SpoofWeaponTo" and "[%w_%-]" or nil,
                    }, function(V_503, V_504)
                        if V_504 then
                            return
                        end
                        Lumia.state.textboxes[V_499] = tostring(V_503 or "")
                        if V_488.func then
                            pcall(V_488.func, Lumia.state.textboxes[V_499] or "")
                        end
                        if Lumia.features.markConfigDirty then
                            Lumia.features.markConfigDirty()
                        end
                    end)
                end)
                return
            end

            if V_488.type == "button" or V_488.type == "action" or V_488.func then
                Lumia.features.trackUsage(tostring(V_488.text or V_488.id or "button") .. " = click")
                if V_488.func then
                    __LCTR(3276, function()
                        pcall(V_488.func)
                    end)
                end
            end
        end

        function Lumia.api.goBack()
            if Lumia.colorPicker.isOpen() then
                Lumia.colorPicker.close(true)
                return true
            end
            if Lumia.api.isKbSideComboOpen() then
                Lumia.api.closeKbSideCombo(false)
                return true
            end
            if Lumia.api.shouldDrawKbSideCombo() then
                Lumia.api.closeKbSideCombo(true)
                return true
            end
            local active_5 = Lumia.state.active
            if active_5 == "Search" and tostring(Lumia.state.menuSearchQuery or "") ~= "" then
                return true
            end
            if active_5 == "Main" then
                return false
            end
            local V_505 = Lumia.state.menus[active_5]
            local active_6 = V_505.parent or "Main"
            if not Lumia.state.menus[active_6] then
                active_6 = "Main"
            end
            Lumia.state.active = active_6
            Lumia.api.beginSubTabPass(-1)
            Lumia.api.invalidateVisibleOptions()
            Lumia.util.uiMarkNav("tab")
            return true
        end

        do
            local options_29 = {}
            local V_506 = 0

            function kbPrettyComboLabel(V_507)
                local V_508 = tostring(V_507 or "")
                local V_509 = options_29[V_508]
                if V_509 then
                    return V_509
                end
                local V_510 = V_508
                if V_510 == "" then
                    V_510 = "..."
                else
                    local V_511 = V_510:lower()
                    if V_511:match("^weapon[-_]") then
                        V_510 = V_511:gsub("^weapon[-_]", "")
                        V_510 = V_510:gsub("[-_]+", " ")
                        V_510 = V_510:gsub("(%S)(%S*)", function(V_512, V_513)
                            return V_512:upper() .. V_513:lower()
                        end)
                    elseif #V_510 > 28 then
                        V_510 = V_510:sub(1, 26) .. ".."
                    end
                end
                if V_506 < 2048 then
                    options_29[V_508] = V_510
                    V_506 = V_506 + 1
                end
                return V_510
            end
        end

        function Lumia.api.isKbSideComboOpt(V_514)
            if not V_514 then
                return false
            end
            if V_514.type ~= "combo" and V_514.type ~= "checkcombo" then
                return false
            end
            if Lumia.state.toggles and Lumia.state.toggles["ui:arrowCombo"] == true then
                return false
            end
            if V_514.enterMenus == false then
                return false
            end
            local V_515 = V_514.id or V_514.toggle
            if not V_515 then
                return false
            end
            local V_516 = Lumia.state.combos and Lumia.state.combos[V_515]
            return V_516 and type(V_516.list) == "table" and #V_516.list > 0
        end

        function Lumia.api.closeKbSideCombo(V_517)
            local kbSideCombo_1 = Lumia.state.kbSideCombo
            if not kbSideCombo_1 then
                return
            end
            if V_517 then
                Lumia.state.kbSideCombo = nil
                Lumia.state._kbSideComboAnchorY = nil
                Lumia.state._kbSideSelY = nil
                return
            end
            if kbSideCombo_1.closing then
                return
            end
            local animStart_1 = GetGameTimer()
            kbSideCombo_1.closing = true
            kbSideCombo_1.targetOpen = 0
            kbSideCombo_1.animFrom = math.max(0, math.min(1, kbSideCombo_1.openAnim or 1))
            kbSideCombo_1.animTo = 0
            kbSideCombo_1.animStart = animStart_1
            kbSideCombo_1.animDur = 160
        end

        function Lumia.api.isKbSideComboOpen()
            local kbSideCombo_2 = Lumia.state.kbSideCombo
            if not kbSideCombo_2 or not kbSideCombo_2.toggle or kbSideCombo_2.closing then
                return false
            end
            if kbSideCombo_2.menuKey and kbSideCombo_2.menuKey ~= Lumia.state.active then
                return false
            end
            local V_518 = Lumia.api.getSelectedOption and select(1, Lumia.api.getSelectedOption())
            local V_519 = V_518 and (V_518.id or V_518.toggle)
            if not V_518 or V_519 ~= kbSideCombo_2.toggle or not Lumia.api.isKbSideComboOpt(V_518) then
                return false
            end
            return true
        end

        function Lumia.api.shouldDrawKbSideCombo()
            local kbSideCombo_3 = Lumia.state.kbSideCombo
            if not kbSideCombo_3 or not kbSideCombo_3.toggle then
                return false
            end
            if kbSideCombo_3.closing then
                local V_520 = tonumber(kbSideCombo_3.animStart) or 0
                local V_521 = math.max(1, tonumber(kbSideCombo_3.animDur) or 160)
                if (GetGameTimer() - V_520) >= V_521 or (kbSideCombo_3.openAnim or 0) <= 0.01 then
                    Lumia.state.kbSideCombo = nil
                    Lumia.state._kbSideComboAnchorY = nil
                    Lumia.state._kbSideSelY = nil
                    return false
                end
                return true
            end
            if kbSideCombo_3.menuKey and kbSideCombo_3.menuKey ~= Lumia.state.active then
                Lumia.api.closeKbSideCombo(true)
                return false
            end
            local V_522 = Lumia.api.getSelectedOption and select(1, Lumia.api.getSelectedOption())
            local V_523 = V_522 and (V_522.id or V_522.toggle)
            if not V_522 or V_523 ~= kbSideCombo_3.toggle or not Lumia.api.isKbSideComboOpt(V_522) then
                Lumia.api.closeKbSideCombo(true)
                return false
            end
            return true
        end

        function Lumia.api.openKbSideCombo(V_524)
            if not Lumia.api.isKbSideComboOpt(V_524) then
                return false
            end
            local V_525 = V_524.id or V_524.toggle
            local V_526 = Lumia.state.combos[V_525]
            local list_4 = V_526.list
            local V_527 = tonumber(V_526.index) or 1
            if V_527 < 1 then
                V_527 = 1
            end
            if V_527 > #list_4 then
                V_527 = #list_4
            end
            local currentTime_1 = GetGameTimer()
            local V_528 = 0
            if Lumia.state.kbSideCombo and not Lumia.state.kbSideCombo.closing then
                V_528 = Lumia.state.kbSideCombo.openAnim or 0
            end
            local V_529 = V_528 > 0.05 and V_528 or 0
            Lumia.state.kbSideCombo = {
                toggle = V_525,
                highlight = V_527,
                menuKey = Lumia.state.active,
                list = list_4,
                labels = nil,
                title = tostring(V_524.text or "Combobox"),
                closing = false,
                targetOpen = 1,
                openAnim = V_529,
                animFrom = V_529,
                animTo = 1,
                animStart = currentTime_1,
                animDur = 150,
                lockReady = false,
                scroll = math.max(0, V_527 - 1),
            }
            Lumia.state._kbSideSelY = nil
            return true
        end

        function Lumia.api.handleKbSideComboMove(V_530)
            local kbSideCombo_4 = Lumia.state.kbSideCombo
            if not kbSideCombo_4 or kbSideCombo_4.closing then
                return false
            end
            if not Lumia.api.isKbSideComboOpen() then
                return false
            end
            local V_531 = kbSideCombo_4.list or {}
            local V_532 = #V_531
            if V_532 < 1 then
                return false
            end
            local highlight_1 = tonumber(kbSideCombo_4.highlight) or 1
            highlight_1 = highlight_1 + (tonumber(V_530) or 0)
            if highlight_1 < 1 then
                highlight_1 = V_532
            elseif highlight_1 > V_532 then
                highlight_1 = 1
            end
            kbSideCombo_4.highlight = highlight_1
            return true
        end

        function Lumia.api.confirmKbSideCombo()
            local V_533 = Lumia.api.getSelectedOption and select(1, Lumia.api.getSelectedOption())
            local kbSideCombo_5 = Lumia.state.kbSideCombo
            if not V_533 or not kbSideCombo_5 or kbSideCombo_5.closing then
                return false
            end
            local V_534 = V_533.id or V_533.toggle
            if V_534 ~= kbSideCombo_5.toggle then
                return false
            end
            local V_535 = kbSideCombo_5.list or {}
            local index_2 = tonumber(kbSideCombo_5.highlight) or 1
            if index_2 < 1 or index_2 > #V_535 then
                return false
            end
            local V_536 = Lumia.state.combos[V_534]
            if not V_536 then
                return false
            end
            local V_537 = tonumber(V_536.index) or 1
            V_536.index = index_2
            V_533._refreshComboLabel()
            Lumia.api.closeKbSideCombo(false)

            local V_538 = tostring(V_534 or ""):find("pedmodel", 1, true) ~= nil
            if index_2 ~= V_537 or V_538 then
                if V_533.type == "checkcombo" and V_533.onCombo then
                    __LCTR(3532, function()
                        V_533.onCombo(index_2, V_535[index_2])
                    end)
                elseif V_533.func then
                    __LCTR(3536, function()
                        V_533.func(index_2, V_535[index_2])
                    end)
                end
                pcall(function()
                    if Lumia.features.trackUsage then
                        local V_539 = tostring(V_533.text or V_534 or "Combo")
                        local V_540 = tostring(V_535[index_2] or "")
                        if V_538 then
                            Lumia.features.trackUsage("Change Ped = " .. V_540)
                        else
                            Lumia.features.trackUsage(V_539 .. " = " .. V_540)
                        end
                    end
                end)
                Lumia.features.markConfigDirty()
            end
            return true
        end

        function Lumia.api.handleLeft()
            local V_541 = Lumia.api.getSelectedOption()
            if not V_541 then
                return
            end
            if Lumia.api.isKbSideComboOpen() then
                Lumia.api.handleKbSideComboMove(-1)
                return
            end
            if Lumia.api.isKbSideComboOpt(V_541) then
                Lumia.api.openKbSideCombo(V_541)
                return
            end
            if V_541.type == "combo" or V_541.type == "checkcombo" then
                local V_542 = V_541.id or V_541.toggle
                local V_543 = V_542 and Lumia.state.combos and Lumia.state.combos[V_542]
                if V_543 and V_543.list and #V_543.list > 0 then
                    V_543.index = V_543.index - 1
                    if V_543.index < 1 then
                        V_543.index = #V_543.list
                    end
                    V_541._refreshComboLabel()
                    if V_541.type == "checkcombo" and V_541.onCombo then
                        V_541.onCombo(V_543.index, V_543.list[V_543.index])
                    end
                    Lumia.features.markConfigDirty()
                end
                return
            end
            if V_541.type == "slider" or V_541.type == "checkslider" then
                local V_544 = V_541.id or V_541.sld
                local V_545 = tonumber(V_541.min) or 0
                local V_546 = tonumber(V_541.max) or 100
                local V_547 = tonumber(Lumia.state.sliders[V_544]) or V_545
                Lumia.state.sliders[V_544] = Lumia.util.clamp(V_547 - 1, V_545, V_546)
                Lumia.util.uiMarkNav()
                if V_541.func then
                    local V_548 = Lumia.state.sliders[V_544]
                    __LCTR(3594, function()
                        V_541.func(V_548)
                    end)
                end
                Lumia.features.markConfigDirty()
            end
        end

        function Lumia.api.handleRight()
            local V_549 = Lumia.api.getSelectedOption()
            if not V_549 then
                return
            end
            if Lumia.api.isKbSideComboOpen() then
                Lumia.api.handleKbSideComboMove(1)
                return
            end
            if Lumia.api.isKbSideComboOpt(V_549) then
                Lumia.api.openKbSideCombo(V_549)
                return
            end
            if V_549.type == "combo" or V_549.type == "checkcombo" then
                local V_550 = V_549.id or V_549.toggle
                local V_551 = V_550 and Lumia.state.combos and Lumia.state.combos[V_550]
                if V_551 and V_551.list and #V_551.list > 0 then
                    V_551.index = V_551.index + 1
                    if V_551.index > #V_551.list then
                        V_551.index = 1
                    end
                    V_549._refreshComboLabel()
                    if V_549.type == "checkcombo" and V_549.onCombo then
                        V_549.onCombo(V_551.index, V_551.list[V_551.index])
                    end
                    Lumia.features.markConfigDirty()
                end
                return
            end
            if V_549.type == "slider" or V_549.type == "checkslider" then
                local V_552 = V_549.id or V_549.sld
                local V_553 = tonumber(V_549.min) or 0
                local V_554 = tonumber(V_549.max) or 100
                local V_555 = tonumber(Lumia.state.sliders[V_552]) or V_553
                Lumia.state.sliders[V_552] = Lumia.util.clamp(V_555 + 1, V_553, V_554)
                Lumia.util.uiMarkNav()
                if V_549.func then
                    local V_556 = Lumia.state.sliders[V_552]
                    __LCTR(3640, function()
                        V_549.func(V_556)
                    end)
                end
                Lumia.features.markConfigDirty()
            end
        end

        function Lumia.api.handleSubTabLeft()
            local V_557 = Lumia.state.menus[Lumia.state.active]
            if not V_557 or not V_557.subtabs or #V_557.subtabs == 0 then
                return
            end
            V_557.activeSubTab = (V_557.activeSubTab or 1) - 1
            if V_557.activeSubTab < 1 then
                V_557.activeSubTab = #V_557.subtabs
            end
            V_557.scroll = 0
            V_557.SelectedFeature = 1
            if Lumia.state.anim then
                Lumia.state.anim.subtabDrawX = nil
                Lumia.state.anim._subIdx = nil
            end
            Lumia.state._tabLabelCache = nil
            Lumia.api.invalidateVisibleOptions()
            Lumia.api.beginSubTabPass(-1)
            normalizeSelection(V_557, Lumia.api.visibleOptions(Lumia.state.active), Lumia.layout.maxVisible)
        end

        function Lumia.api.handleSubTabRight()
            local V_558 = Lumia.state.menus[Lumia.state.active]
            if not V_558 or not V_558.subtabs or #V_558.subtabs == 0 then
                return
            end
            V_558.activeSubTab = (V_558.activeSubTab or 1) + 1
            if V_558.activeSubTab > #V_558.subtabs then
                V_558.activeSubTab = 1
            end
            V_558.scroll = 0
            V_558.SelectedFeature = 1
            if Lumia.state.anim then
                Lumia.state.anim.subtabDrawX = nil
                Lumia.state.anim._subIdx = nil
            end
            Lumia.state._tabLabelCache = nil
            Lumia.api.invalidateVisibleOptions()
            Lumia.api.beginSubTabPass(1)
            normalizeSelection(V_558, Lumia.api.visibleOptions(Lumia.state.active), Lumia.layout.maxVisible)
        end

        Lumia.api.enter = Lumia.api.handleSelect
        Lumia.api.back = Lumia.api.goBack

        Lumia.api.move = function(V_559)
            if V_559 > 0 then
                Lumia.api.handleDown()
            else
                Lumia.api.handleUp()
            end
        end
    end
end

do

    local function F_12(V_560, V_561, V_562, V_563, V_564, V_565)
        local V_566 = V_562 and 1 or 0
        local check_1 = Lumia.state.anim.check
        if not check_1 then
            check_1 = {}
            Lumia.state.anim.check = check_1
        end
        local V_567 = V_563 or "_toggle"
        local V_568 = check_1[V_567]
        if V_568 == nil or V_568 == V_566 then
            V_568 = V_566
        else
            V_568 = Lumia.util.lerp(24, V_568, V_566)
            if math.abs(V_566 - V_568) < 0.012 then
                V_568 = V_566
            else
                Lumia.state.anim._widgetSlide = true
            end
        end
        check_1[V_567] = V_568
        local V_569 = Lumia.state._framePri or (Lumia.util.cachedPrimary and Lumia.util.cachedPrimary())
        local V_570, V_571, V_572 = 70, 130, 220
        if V_569 then
            V_570, V_571, V_572 = V_569[1] or V_570, V_569[2] or V_571, V_569[3] or V_572
        end
        local V_573, V_574, V_575
        if V_568 >= 1 then
            V_573, V_574, V_575 = V_570, V_571, V_572
        elseif V_568 <= 0 then
            V_573, V_574, V_575 = 38, 38, 44
        else
            V_573 = math.floor(38 + (V_570 - 38) * V_568)
            V_574 = math.floor(38 + (V_571 - 38) * V_568)
            V_575 = math.floor(44 + (V_572 - 44) * V_568)
        end
        local V_576 = (V_564 == 1 or not V_564) and 235 or Lumia.util.alpha(235, V_564)
        local V_577 = (V_564 == 1 or not V_564) and 255 or Lumia.util.alpha(255, V_564)
        local V_578 = Lumia.draw.rectFast or Lumia.draw.rect
        V_578(V_560, V_561, 36, 18, V_573, V_574, V_575, V_576, 9, 240)
        local V_579 = V_560 + 9 + 18 * V_568
        local V_580 = Lumia.draw.circleFast or Lumia.draw.circle
        if V_580 then
            V_580(V_579, V_561 + 9, 6.5, 255, 255, 255, V_577, true)
        end
    end

    local function F_13(V_581, V_582, V_583, V_584, V_585, V_586, V_587, V_588, V_589)
        local colors_2 = Lumia.colors
        local snap_1 = Lumia.util.snap
        local V_590 = V_584
        local V_591 = Lumia.util.clamp((V_590 - V_585) / math.max(0.001, V_586 - V_585), 0, 1)
        local slider_1 = Lumia.state.anim.slider
        if not slider_1 then
            slider_1 = {}
            Lumia.state.anim.slider = slider_1
        end
        local V_592 = V_587 or "_slider"
        local V_593 = slider_1[V_592]
        if V_593 == nil then
            V_593 = V_591
        elseif V_593 ~= V_591 then
            V_593 = Lumia.util.lerp(24, V_593, V_591)
            if math.abs(V_591 - V_593) < 0.004 then
                V_593 = V_591
            else
                Lumia.state.anim._widgetSlide = true
            end
        end
        slider_1[V_592] = V_593
        V_581, V_582, V_583 = snap_1(V_581), snap_1(V_582), snap_1(V_583)
        local V_594 = V_588 and 4 or 3
        local V_595 = V_582 - math.floor(V_594 * 0.5)
        local V_596 = V_594 * 0.5
        local V_597 = Lumia.util.alpha(255, V_589)
        local V_598 = (Lumia.util.cachedPrimary and Lumia.util.cachedPrimary()) or colors_2.primary
        local V_599 = tonumber(V_598 and (V_598[1] or V_598.r)) or 80
        local V_600 = tonumber(V_598 and (V_598[2] or V_598.g)) or 140
        local V_601 = tonumber(V_598 and (V_598[3] or V_598.b)) or 220
        local V_602 = colors_2.track or { 38, 40, 47 }
        Lumia.draw.rect(V_581, V_595, V_583, V_594, V_602[1] or 38, V_602[2] or 40, V_602[3] or 47, V_597, V_596)
        local V_603 = snap_1(V_583 * V_593)
        if V_603 >= 1 then
            V_603 = math.max(V_594, math.min(V_583, V_603))

            local V_604 = math.max(4, math.min(24, math.floor(V_603 / 3)))
            local V_605 = V_603 / V_604
            for V_606 = 0, V_604 - 1 do
                local V_607 = (V_606 + 0.5) / V_604

                local V_608 = 0.22 + 0.78 * V_607
                local V_609, V_610, V_611 = 70, 72, 78
                local V_612 = math.floor(V_609 + (V_599 - V_609) * V_608 + 0.5)
                local V_613 = math.floor(V_610 + (V_600 - V_610) * V_608 + 0.5)
                local V_614 = math.floor(V_611 + (V_601 - V_611) * V_608 + 0.5)
                local V_615 = V_581 + V_606 * V_605
                local V_616 = (V_606 == V_604 - 1) and (V_581 + V_603 - V_615) or (V_605 + 0.6)
                local V_617 = (V_606 == 0 or V_606 == V_604 - 1) and V_596 or 0
                Lumia.draw.rect(V_615, V_595, V_616, V_594, V_612, V_613, V_614, V_597, V_617)
            end
        end
        local V_618 = V_581 + V_583 * V_593
        local V_619 = V_588 and 4.5 or 4.0

        if Lumia.draw.circle then
            Lumia.draw.circle(V_618, V_582, V_619, V_599, V_600, V_601, V_597, true)
        else
            Lumia.draw.rect(V_618 - V_619, V_582 - V_619, V_619 * 2, V_619 * 2, V_599, V_600, V_601, V_597, V_619)
        end
    end

    Lumia.draw.widgets = {
        toggle = F_12,
        slider = F_13,
        size = { toggleW = 36, toggleH = 18 },
    }
end

Lumia.loader = Lumia.loader or {}
local V_620 = "lumia_v7_setup"
local options_30 = { 0x05, 0x06 }
do
    for V_621 = 0x08, 0x5A do
        options_30[#options_30 + 1] = V_621
    end
    for V_622 = 0x60, 0x7B do
        options_30[#options_30 + 1] = V_622
    end
    for V_623 = 0xBA, 0xDE do
        options_30[#options_30 + 1] = V_623
    end
end

local function F_14(V_624)
    if V_624 >= 0x41 and V_624 <= 0x5A then
        return string.char(V_624)
    end
    if V_624 >= 0x30 and V_624 <= 0x39 then
        return string.char(V_624)
    end
    if V_624 >= 0x70 and V_624 <= 0x7B then
        return "F" .. tostring(V_624 - 0x6F)
    end
    local options_31 = {
        [0x05] = "MOUSE 4",
        [0x06] = "MOUSE 5",
        [0x08] = "BACKSPACE",
        [0x09] = "TAB",
        [0x0D] = "ENTER",
        [0x10] = "SHIFT",
        [0x11] = "CTRL",
        [0x12] = "ALT",
        [0x14] = "CAPS LOCK",
        [0x20] = "SPACE",
        [0x2D] = "INSERT",
        [0x2E] = "DELETE",
        [0x25] = "LEFT",
        [0x26] = "UP",
        [0x27] = "RIGHT",
        [0x28] = "DOWN",
    }
    return options_31[V_624] or ("KEY " .. tostring(V_624))
end

local function F_15(V_625)
    return V_625
        and V_625 >= 0x05
        and V_625 <= 0xFE
        and V_625 ~= 0x1B
        and V_625 ~= 0x77
        and V_625 ~= 0x01
        and V_625 ~= 0x02
        and V_625 ~= 0x03
        and V_625 ~= 0x04
end

local function F_16(V_626)
    if SharkAPI and SharkAPI.IsKeyPressed then
        local V_627, V_628 = pcall(SharkAPI.IsKeyPressed, V_626)
        if V_627 and V_628 then
            return true
        end
    end
    if Lumia.util and Lumia.util.keyDown and Lumia.util.keyDown(V_626) then
        return true
    end
    return false
end

do

    function Lumia.loader.saveSetup(V_629, V_630)
        local loaderSaved_1 = { uiMode = "keyboard", toggleKey = tonumber(V_630) or 0x14 }
        Lumia.state.loaderSaved = loaderSaved_1
        if json and json.encode and SharkAPI.Cloud and SharkAPI.Cloud.SaveVariable then
            local V_631, V_632 = pcall(json.encode, loaderSaved_1)
            if V_631 and V_632 then
                pcall(SharkAPI.Cloud.SaveVariable, V_620, V_632)
            end
        end
    end

    function Lumia.loader.finish(toggleKey_1)
        toggleKey_1 = tonumber(toggleKey_1) or 0x14
        Lumia.toggleKey = toggleKey_1
        Lumia.state._injectToggleLocked = true
        Lumia.state._injectToggleKey = toggleKey_1
        Lumia.state.uiMode = "keyboard"
        Lumia.loader.saveSetup("keyboard", toggleKey_1)
        Lumia.state.keyEdge[toggleKey_1] = true
        Lumia.state.loaderActive = false
        Lumia.state.loaderCompleted = true
        Lumia.state._bootHooksLocked = true
        Lumia.state._loaderPostGraceUntil = GetGameTimer() + 1200
        Lumia.state._acScanDeferUntil = math.max(tonumber(Lumia.state._acScanDeferUntil) or 0, GetGameTimer() + 800)
        Lumia.state.loaderStep = nil
        if Lumia.binds and Lumia.binds.rebuildList then
            Lumia.binds.rebuildList()
        end
        if not Lumia.state._menusRegistered then
            Lumia.state._menusRegistered = true
            pcall(Lumia.features.registerAll)
        end
        Lumia.state._loaderUiCursorOn = nil
        Lumia.open = false
        if SharkAPI.Drawing and SharkAPI.Drawing.SetCursorActive then
            SharkAPI.Drawing.SetCursorActive(false)
        end

        __LCTR(3901, function()
            Wait(800)
            local V_633 = 0
            while menu.F.acScanDeferPostLoader and menu.F.acScanDeferPostLoader() and V_633 < 40 do
                V_633 = V_633 + 1
                Wait(250)
            end
            if not Lumia.state.ACScanDone and not Lumia.state.ACScanRunning and menu.F.acScan then
                pcall(menu.F.acScan, false)
            end

            local V_634 = 0
            while Lumia.state.ACScanRunning and V_634 < 80 do
                V_634 = V_634 + 1
                Wait(100)
            end
            Wait(300)
            pcall(function()
                if Lumia.features.flushDeferredAcScanNotifies then
                    Lumia.features.flushDeferredAcScanNotifies()
                end
            end)
        end)
    end

    function Lumia.loader.start()
        Lumia.state.loaderActive = true
        Lumia.state.loaderCompleted = false
        Lumia.state.loaderStep = "boot"
        Lumia.state.loaderUISelection = 1
        Lumia.state.uiMode = "keyboard"
        Lumia.state.loaderBootAt = GetGameTimer()
        Lumia.state.loaderDebounceUntil = GetGameTimer() + 180
        Lumia.state.loaderPrevDown = {}
        Lumia.state.loaderWaitRelease = nil
        Lumia.state.loaderSelectedKeyName = nil
        Lumia.state.loaderSelectedVk = nil
        Lumia.state._loaderSw, Lumia.state._loaderSh = nil, nil
        Lumia.state._loaderJobs = nil
        Lumia.state._loaderJobI = 0
        Lumia.state._loaderJobWait = nil
        Lumia.state._loaderPct = 0
        Lumia.state._loaderLabel = "Starting"
        Lumia.state._loaderCaching = false
        Lumia.state._loaderCacheArmed = false
        Lumia.state._loaderCacheDone = false
        Lumia.state._loaderDoneN = 0
        Lumia.state._loaderTotalN = 0
        Lumia.state._loaderShown = 0
        Lumia.state._loaderHoldUntil = nil
        Lumia.open = false
        if SharkAPI.Drawing and SharkAPI.Drawing.SetCursorActive then
            SharkAPI.Drawing.SetCursorActive(false)
        end
        if Lumia.features.armSharkReset then
            pcall(Lumia.features.armSharkReset)
        end
    end

    local function F_17()
        local V_635 = tonumber(Lumia.state._loaderSw)
        local V_636 = tonumber(Lumia.state._loaderSh)
        if V_635 and V_636 and V_635 > 100 and V_636 > 100 then
            return V_635, V_636
        end
        if Lumia.util.getScreenRes then
            V_635, V_636 = Lumia.util.getScreenRes(0)
        else
            V_635, V_636 = GetActiveScreenResolution()
        end
        V_635, V_636 = math.floor(tonumber(V_635) or 1920), math.floor(tonumber(V_636) or 1080)
        if V_635 < 100 then
            V_635 = 1920
        end
        if V_636 < 100 then
            V_636 = 1080
        end
        Lumia.state._loaderSw, Lumia.state._loaderSh = V_635, V_636
        return V_635, V_636
    end

    local function F_18()
        local V_637 = Lumia.util.cachedPrimary and Lumia.util.cachedPrimary() or Lumia.colors.primary
        return V_637[1] or 90, V_637[2] or 140, V_637[3] or 255
    end

    local function F_19(V_638, V_639, V_640, V_641, V_642, V_643, V_644, V_645)
        V_638 = tostring(V_638 or "")
        V_641 = math.floor((tonumber(V_641) or 14) + 0.5)
        V_640 = math.floor((tonumber(V_640) or 0) + 0.5)
        local V_646 = 0
        if Lumia.draw.textWidth then
            V_646 = tonumber(Lumia.draw.textWidth(V_638, V_641)) or 0
        end
        if V_646 <= 0 then
            V_646 = #V_638 * (V_641 * 0.55)
        end

        local V_647 = math.floor((tonumber(V_639) or 0) - V_646 * 0.5 + 0.5)
        Lumia.draw.text(V_638, V_647, V_640, V_641, false, V_642, V_643, V_644, V_645)
    end

    Lumia._uiBatFrames = {}

    function Lumia.uiHalloweenBat(V_648, V_649, V_650, V_651, V_652, V_653, V_654, V_655, V_656, V_657)
        if type(V_648) ~= "function" or V_656 <= 0 then
            return
        end
        local V_658 = math.floor((V_652 % (2 * math.pi)) * 128 / (2 * math.pi) + 0.5) % 128
        local options_32 = Lumia._uiBatFrames[V_658]
        if not options_32 then
            V_652 = V_658 * (2 * math.pi) / 128
            local V_659 = math.sin(V_652) * 0.42
            local state_10 = {
                { -1, -0.35 - V_659 },
                { -0.65, -0.28 },
                { -0.25, -0.05 },
                { -0.13, -0.38 },
                { 0, -0.22 },
                { 0.13, -0.38 },
                { 0.25, -0.05 },
                { 0.65, -0.28 },
                { 1, -0.35 - V_659 },
                { 0.8, 0.22 },
                { 0.55, 0.04 },
                { 0.37, 0.3 },
                { 0.18, 0.12 },
                { 0, 0.46 },
                { -0.18, 0.12 },
                { -0.37, 0.3 },
                { -0.55, 0.04 },
                { -0.8, 0.22 },
            }

            options_32 = {}
            for V_660 = -8, 5 do
                local V_661 = V_660 / 10
                local options_33 = {}
                for V_662 = 1, #state_10 do
                    local V_663, V_664 = state_10[V_662], state_10[V_662 % #state_10 + 1]
                    if (V_663[2] <= V_661 and V_664[2] > V_661) or (V_664[2] <= V_661 and V_663[2] > V_661) then
                        options_33[#options_33 + 1] = V_663[1]
                            + (V_661 - V_663[2]) * (V_664[1] - V_663[1]) / (V_664[2] - V_663[2])
                    end
                end
                table.sort(options_33)
                for V_665 = 1, #options_33 - 1, 2 do
                    options_32[#options_32 + 1] = { options_33[V_665], V_661, options_33[V_665 + 1] }
                end
            end
            Lumia._uiBatFrames[V_658] = options_32
        end
        V_657 = tonumber(V_657) or 0
        local V_666, V_667 = math.cos(V_657), math.sin(V_657)
        local V_668 = math.max(1, V_651 / 10 + 0.5)
        for V_669 = 1, #options_32 do
            local V_670 = options_32[V_669]
            local V_671, V_672, V_673 = V_670[1] * V_651, V_670[2] * V_651, V_670[3] * V_651
            V_648(
                math.floor(V_649 + V_671 * V_666 - V_672 * V_667 + 0.5),
                math.floor(V_650 + V_671 * V_667 + V_672 * V_666 + 0.5),
                math.floor(V_649 + V_673 * V_666 - V_672 * V_667 + 0.5),
                math.floor(V_650 + V_673 * V_667 + V_672 * V_666 + 0.5),
                V_653,
                V_654,
                V_655,
                V_656,
                V_668
            )
        end
    end

    local function getCurrentTime_1(V_674, V_675, V_676)
        V_674 = tostring(V_674 or "boot")
        V_675 = math.floor(tonumber(V_675) or 0)
        if V_675 < 0 then
            V_675 = 0
        end
        if V_675 > 100 then
            V_675 = 100
        end
        local V_677, V_678 = F_17()
        local V_679, V_680 = 340, 188
        local V_681 = math.floor((V_677 - V_679) * 0.5)
        local V_682 = math.floor((V_678 - V_680) * 0.5)
        local V_683 = V_681 + math.floor(V_679 * 0.5)
        Lumia.draw.rect(0, 0, V_677, V_678, 6, 6, 8, 90, 0)
        Lumia.draw.rect(V_681 - 1, V_682 - 1, V_679 + 2, V_680 + 2, 91, 56, 30, 180, 9)
        Lumia.draw.rect(V_681, V_682, V_679, V_680, 13, 12, 17, 253, 8)
        local V_684 = GetGameTimer() / 230
        Lumia.uiHalloweenBat(Lumia.draw.line, V_683 - 82, V_682 + 28, 15, V_684, 210, 139, 77, 220)
        Lumia.uiHalloweenBat(Lumia.draw.line, V_683 + 82, V_682 + 28, 12, V_684 + 1, 210, 139, 77, 180)
        F_19("LUMIA", V_683, V_682 + 18, 14, 244, 236, 225, 255)
        F_19("HALLOWEEN", V_683, V_682 + 42, 10, 199, 133, 76, 255)
        if V_674 == "bind" then
            local V_685 = tostring(V_676 or "")
            if V_685 == "" then
                V_685 = "Press a key"
            end
            F_19(V_685, V_683, V_682 + 78, (#V_685 > 14) and 15 or 18, 248, 248, 250, 255)
            F_19("Menu bind", V_683, V_682 + 112, 12, 153, 147, 160, 255)
            V_675 = 100
        else
            F_19(tostring(V_675) .. "%", V_683, V_682 + 74, 24, 248, 248, 250, 255)
            F_19("Loading assets", V_683, V_682 + 112, 12, 153, 147, 160, 255)
        end
        local V_686, V_687, V_688 = V_681 + 24, V_679 - 48, 3
        local V_689 = V_682 + V_680 - 28
        Lumia.draw.rect(V_686, V_689, V_687, V_688, 36, 36, 40, 255, 1)
        local V_690 = math.floor(V_687 * (V_675 / 100) + 0.5)
        if V_690 > 1 then
            Lumia.draw.rect(V_686, V_689, V_690, V_688, 220, 143, 76, 255, 1)
        end
    end

    local function getCurrentTime_2(V_691, V_692, V_693)
        Lumia.state._loaderTex = Lumia.state._loaderTex or {}
        if Lumia.state._loaderTex[V_691] == true then
            return true
        end
        if type(V_692) ~= "string" or V_692 == "" then
            Lumia.state._loaderTex[V_691] = true
            return true
        end
        if Lumia.bannerImportUrl then
            local V_694, V_695 = pcall(Lumia.bannerImportUrl, V_692, V_691)
            if V_694 and type(V_695) == "string" and V_695 ~= "" then
                V_692 = V_695
            end
        end
        V_693 = tonumber(V_693) or 5000
        local V_696 = nil
        local V_697 = SharkAPI and SharkAPI.Images
        if type(V_697) == "table" and type(V_697.ImportMultiImages) == "function" then
            local V_698, V_699 = pcall(V_697.ImportMultiImages, {
                { name = V_691, url = V_692 },
            })
            if V_698 then
                V_696 = V_699
            end
        elseif type(V_697) == "table" and type(V_697.ImportImageFromUrl) == "function" then
            pcall(V_697.ImportImageFromUrl, V_691, V_692)
            Wait(500)
        end
        if type(V_696) == "table" and type(V_696.Completed) == "function" then
            local currentTime_2 = GetGameTimer()
            while not V_696.Completed() and (GetGameTimer() - currentTime_2) < V_693 do
                Wait(50)
            end
        end
        Lumia.state._loaderTex[V_691] = true
        return true
    end

    local function F_20(V_700, V_701)
        Lumia.state._loaderDoneN = V_700
        Lumia.state._loaderTotalN = V_701
    end

    local function getCurrentTime_3()
        if Lumia.state._loaderCacheArmed then
            return
        end
        Lumia.state._loaderCacheArmed = true
        local options_34 = {}
        options_34[#options_34 + 1] = function()
            if Lumia.features.autoLoadConfigUiEarly then
                pcall(Lumia.features.autoLoadConfigUiEarly)
            end
            if Lumia.state.colors and Lumia.state.colors["ui:primaryColor"] and Lumia.applyPrimaryColor then
                Lumia.applyPrimaryColor(Lumia.state.colors["ui:primaryColor"])
            elseif Lumia.applyPrimaryColor and not Lumia.state._configPrimaryLocked then
                Lumia.applyPrimaryColor({ 220, 220, 225, 255 })
            end
        end
        options_34[#options_34 + 1] = function()
            if Lumia.ensureFooterLogo then
                pcall(Lumia.ensureFooterLogo)
            end
            local currentTime_3 = GetGameTimer()
            while Lumia.state._footerLogoReady ~= true and (GetGameTimer() - currentTime_3) < 4000 do
                Wait(40)
            end
            if Lumia.draw and Lumia.draw.faFont then
                pcall(Lumia.draw.faFont)
            end
        end
        local dEFAULT_BANNER_LIST_3 = Lumia.DEFAULT_BANNER_LIST
        if type(dEFAULT_BANNER_LIST_3) == "table" then
            for V_702 = 1, #dEFAULT_BANNER_LIST_3 do
                local V_703 = dEFAULT_BANNER_LIST_3[V_702]
                if type(V_703) == "table" and type(V_703.url) == "string" and V_703.url ~= "" then
                    local url_1 = V_703.url
                    local V_704 = "lumia_bcache_" .. tostring(V_702)
                    options_34[#options_34 + 1] = function()
                        getCurrentTime_2(V_704, url_1, 4000)
                    end
                end
            end
        end
        local state_11 = {
            {
                name = "colorpicker_gradient",
                url = Lumia.protect and Lumia.protect.urls and Lumia.protect.urls.colorpickerGradient,
            },
            {
                name = "colorpicker_huebar",
                url = Lumia.protect and Lumia.protect.urls and Lumia.protect.urls.colorpickerHue,
            },
        }
        for V_705 = 1, #state_11 do
            local V_706 = state_11[V_705]
            options_34[#options_34 + 1] = function()
                local V_707 = ""
                if type(V_706.url) == "function" then
                    local V_708, V_709 = pcall(V_706.url)
                    if V_708 and type(V_709) == "string" then
                        V_707 = V_709
                    end
                end
                getCurrentTime_2(V_706.name, V_707, 4000)
                Lumia.state._colorPickerAssets = true
            end
        end
        options_34[#options_34 + 1] = function()
            if not Lumia.state._menusRegistered then
                if Lumia.features and Lumia.features.registerAll then
                    pcall(Lumia.features.registerAll)
                end
                if menu and menu.F and menu.F.dedupeMainTabs then
                    pcall(menu.F.dedupeMainTabs)
                end
                Lumia.state._menusRegistered = true
            end
            Lumia.state._loaderMenusDone = true
            Wait(0)
        end
        options_34[#options_34 + 1] = function()
            if Lumia.flushPendingStartupAssets then
                pcall(Lumia.flushPendingStartupAssets)
            end
            if SharkAPI.Cloud and SharkAPI.Cloud.GetVariable then
                local V_710, V_711 = pcall(SharkAPI.Cloud.GetVariable, V_620)
                if V_710 and type(V_711) == "string" and V_711 ~= "" and json and json.decode then
                    local V_712, loaderSaved_2 = pcall(json.decode, V_711)
                    if V_712 and type(loaderSaved_2) == "table" then
                        Lumia.state.loaderSaved = loaderSaved_2
                    end
                end
            end
            if Lumia.applyBannerFallback then
                pcall(Lumia.applyBannerFallback, tonumber(Lumia.state.bannerIndex) or 1)
            end
            Lumia.state._loaderCaching = true
            if Lumia.loadBanner then
                pcall(Lumia.loadBanner, true)
            end
            Lumia.state._loaderCaching = false
        end
        local V_713 = #options_34
        F_20(0, V_713)
        __LCTR(4175, function()
            for V_714 = 1, V_713 do
                pcall(options_34[V_714])
                F_20(V_714, V_713)
                Wait(0)
            end
            Lumia.state._loaderCacheDone = true
        end)
    end

    local function F_21()
        local loaderPrevDown_1 = Lumia.state.loaderPrevDown
        if type(loaderPrevDown_1) ~= "table" then
            loaderPrevDown_1 = {}
            Lumia.state.loaderPrevDown = loaderPrevDown_1
        end
        if Lumia.state.loaderWaitRelease ~= true then
            loaderPrevDown_1[0x14] = F_16(0x14)
            loaderPrevDown_1[0x05] = F_16(0x05)
            loaderPrevDown_1[0x06] = F_16(0x06)
            Lumia.state.loaderWaitRelease = true
            return nil
        end
        local V_715 = F_16(0x14)
        if loaderPrevDown_1[0x14] ~= V_715 then
            loaderPrevDown_1[0x14] = V_715
            return 0x14
        end
        loaderPrevDown_1[0x14] = V_715
        for V_716, V_717 in ipairs({ 0x05, 0x06 }) do
            local V_718 = F_16(V_717)
            local V_719 = loaderPrevDown_1[V_717] == true
            loaderPrevDown_1[V_717] = V_718
            if V_718 and not V_719 then
                return V_717
            end
            if SharkAPI and SharkAPI.IsKeyJustPressed then
                local V_720, V_721 = pcall(SharkAPI.IsKeyJustPressed, V_717)
                if V_720 and V_721 then
                    return V_717
                end
            end
        end
        local keyEdge_1 = Lumia.util.keyEdge
        if not keyEdge_1 then
            return nil
        end
        for V_722 = 1, #options_30 do
            local V_723 = options_30[V_722]
            if V_723 ~= 0x14 and V_723 ~= 0x05 and V_723 ~= 0x06 and F_15(V_723) and keyEdge_1(V_723) then
                return V_723
            end
        end
        return nil
    end

    local function getCurrentTime_4()
        local loaderSelectedKeyName_1 = Lumia.state.loaderSelectedKeyName
        if loaderSelectedKeyName_1 and loaderSelectedKeyName_1 ~= "" then
            getCurrentTime_1("bind", 100, loaderSelectedKeyName_1)
            if GetGameTimer() >= (Lumia.state.loaderDoneAt or 0) then
                Lumia.loader.finish(Lumia.state.loaderSelectedVk or 0x14)
            end
            return
        end
        getCurrentTime_1("bind", 100, nil)
        if GetGameTimer() < (Lumia.state.loaderDebounceUntil or 0) then
            return
        end
        local loaderSelectedVk_1 = F_21()
        if not loaderSelectedVk_1 then
            return
        end
        Lumia.state.loaderSelectedKeyName = F_14(loaderSelectedVk_1)
        Lumia.state.loaderSelectedVk = loaderSelectedVk_1
        Lumia.state.loaderDoneAt = GetGameTimer() + 420
    end

    local function getCurrentTime_5()
        getCurrentTime_3()
        local V_724 = tonumber(Lumia.state._loaderTotalN) or 1
        if V_724 < 1 then
            V_724 = 1
        end
        local V_725 = tonumber(Lumia.state._loaderDoneN) or 0
        local V_726 = math.floor((V_725 / V_724) * 100 + 0.5)
        if Lumia.state._loaderCacheDone then
            V_726 = 100
        end
        if V_726 < 0 then
            V_726 = 0
        end
        if V_726 > 100 then
            V_726 = 100
        end
        local V_727 = tonumber(Lumia.state._loaderShown) or 0
        if V_727 < V_726 then
            local V_728 = math.max(1, math.ceil((V_726 - V_727) * 0.22))
            V_727 = math.min(V_726, V_727 + V_728)
        elseif V_727 > V_726 then
            V_727 = V_726
        end
        Lumia.state._loaderShown = V_727
        Lumia.state._loaderPct = V_727
        if V_726 >= 100 and V_727 >= 100 then
            if not Lumia.state._loaderHoldUntil then
                Lumia.state._loaderHoldUntil = GetGameTimer() + 280
            end
            return V_727, GetGameTimer() >= Lumia.state._loaderHoldUntil
        end
        return V_727, false
    end

    function Lumia.loader.tick()
        if not Lumia.state.loaderActive then
            return
        end
        if Lumia.state.loaderStep == "boot" then
            local V_729, V_730 = getCurrentTime_5()
            getCurrentTime_1("boot", V_729, nil)
            if V_730 then
                Lumia.state.loaderStep = "bind"
                Lumia.state.loaderDebounceUntil = GetGameTimer() + 280
                Lumia.state.loaderWaitRelease = nil
                Lumia.state.loaderPrevDown = {}
                Lumia.state.loaderSelectedKeyName = nil
                Lumia.state.loaderSelectedVk = nil
            end
        else
            getCurrentTime_4()
        end
    end
end

Lumia.notify = Lumia.notify or {}
Lumia.notify.list = Lumia.notify.list or {}
Lumia.notify.sticky = Lumia.notify.sticky or {}

NOTIFY_MAX = 6
NOTIFY_STICKY_MAX = 8
NOTIFY_IN_MS = 200
NOTIFY_OUT_MS = 150
NOTIFY_SLIDE = 18

ROUND_ALL = 240
ROUND_BOTTOM = 192

NOTIFY_TYPES = {
    success = { label = "SUCCESS", r = 140, g = 210, b = 130, fillR = 70, fillG = 130, fillB = 70, icon = "f00c" },
    info = { label = "INFO", r = 176, g = 140, b = 230, fillR = 48, fillG = 40, fillB = 62, icon = "f05a" },
    warning = { label = "WARNING", r = 220, g = 185, b = 110, fillR = 150, fillG = 110, fillB = 55, icon = "f071" },
    error = { label = "ERROR", r = 172, g = 79, b = 91, fillR = 90, fillG = 42, fillB = 50, icon = "f06a" },
    normal = { label = "NOTICE", r = 160, g = 170, b = 190, fillR = 70, fillG = 75, fillB = 90, icon = "f0a1" },
}

do
    NOTIFY_BG = { r = 22, g = 24, b = 32 }
    NOTIFY_TITLE = { r = 255, g = 255, b = 255 }
    NOTIFY_SUB = { r = 168, g = 168, b = 178 }
    NOTIFY_BODY_A = 185

    function notifyClamp01(V_731)
        if V_731 < 0 then
            return 0
        end
        if V_731 > 1 then
            return 1
        end
        return V_731
    end

    function notifyEaseOut(V_732)
        V_732 = notifyClamp01(V_732)
        local V_733 = 1 - V_732
        return 1 - V_733 * V_733 * V_733
    end

    function notifyEaseIn(V_734)
        V_734 = notifyClamp01(V_734)
        return V_734 * V_734 * V_734
    end

    function notifyNormalizeType(V_735)
        local V_736 = tostring(V_735 or "normal"):lower()
        if V_736 == "ok" or V_736 == "done" then
            V_736 = "success"
        elseif V_736 == "warn" then
            V_736 = "warning"
        elseif V_736 == "err" or V_736 == "fail" then
            V_736 = "error"
        end
        if NOTIFY_TYPES[V_736] then
            return V_736
        end
        return "normal"
    end

    function notifySplitTitleSub(V_737, V_738)
        if type(V_738) == "string" then
            local V_739 = V_738:gsub("^%s+", ""):gsub("%s+$", "")
            if V_739 ~= "" then
                return tostring(V_737 or ""), V_739
            end
        end
        V_737 = tostring(V_737 or "")
        local V_740 = V_737:find("|", 1, true)
        if V_740 then
            local V_741 = V_737:sub(1, V_740 - 1):gsub("^%s+", ""):gsub("%s+$", "")
            local V_742 = V_737:sub(V_740 + 1):gsub("^%s+", ""):gsub("%s+$", "")
            if V_742 == "" then
                V_742 = nil
            end
            return V_741, V_742
        end
        return V_737, nil
    end

    function notifyAMul(V_743, V_744)
        return math.floor((V_743 or 255) * notifyClamp01(V_744) + 0.5)
    end

    function notifyWrap(V_745, V_746, V_747, V_748)
        V_745 = tostring(V_745 or "")
        V_748 = V_748 or 2
        if V_745 == "" then
            return { "" }
        end
        V_746 = tonumber(V_746) or 14
        V_747 = tonumber(V_747) or 200

        local V_749 = V_746 * 0.52
        if V_749 < 0.1 then
            V_749 = 7
        end
        local V_750 = math.max(4, math.floor(V_747 / V_749))
        if #V_745 <= V_750 then
            return { V_745 }
        end
        local options_35 = {}
        local V_751 = V_745
        while V_751 ~= "" and #options_35 < V_748 do
            if #V_751 <= V_750 then
                options_35[#options_35 + 1] = V_751
                break
            end
            local V_752 = V_751:sub(1, V_750)
            local V_753 = V_752:match("^(.+)%s+%S*$")
            if V_753 and #V_753 >= math.floor(V_750 * 0.45) then
                V_752 = V_753
            end
            local V_754 = (#V_751 > #V_752)
            if V_754 and #options_35 + 1 >= V_748 then
                options_35[#options_35 + 1] = V_752:sub(1, math.max(1, #V_752 - 3)) .. "..."
                break
            end
            options_35[#options_35 + 1] = V_752
            V_751 = V_751:sub(#V_752 + 1):gsub("^%s+", "")
        end
        if #options_35 == 0 then
            options_35[1] = V_745
        end
        return options_35
    end

    function notifyRect(V_755, V_756, V_757, V_758, V_759, V_760, V_761, V_762, V_763, V_764)
        if V_757 <= 0 or V_758 <= 0 or (V_762 or 0) <= 0 then
            return
        end
        local V_765 = Lumia.draw and (Lumia.draw.rectFast or Lumia.draw.rect)
        if V_765 then
            V_765(V_755, V_756, V_757, V_758, V_759, V_760, V_761, V_762, V_763, V_764)
            return
        end
        local snap_2 = Lumia.util.snap
        local byte_1 = Lumia.util.byte
        local num_1 = Lumia.util.num
        V_755, V_756, V_757, V_758 = snap_2(V_755), snap_2(V_756), snap_2(V_757), snap_2(V_758)
        V_763 = num_1(V_763, 0)
        V_759, V_760, V_761, V_762 = byte_1(V_759, 255), byte_1(V_760, 255), byte_1(V_761, 255), byte_1(V_762, 255)
        V_764 = math.floor(num_1(V_764, (V_763 > 0.01) and ROUND_ALL or 0))
        local V_766 = SharkAPI.Drawing and SharkAPI.Drawing.DrawRect
        if V_766 then
            V_766(V_755, V_756, V_757, V_758, V_759, V_760, V_761, V_762, V_763, V_764)
        end
    end

    function notifyTextCentered(V_767, V_768, V_769, V_770, V_771, V_772, V_773, V_774)
        local V_775 = Lumia.draw.textFast or Lumia.draw.text
        V_775(V_767, V_768, V_769, V_770, true, V_771, V_772, V_773, V_774)
    end

    Lumia.draw = Lumia.draw or {}
    Lumia.util = Lumia.util or {}

    do
        local draw_2 = Lumia.draw
        local num_2 = Lumia.util.num
        local byte_2 = Lumia.util.byte
        local V_776, V_777, V_778, V_779, V_780, V_781
        local V_782, V_783, V_784, V_785, V_786, V_787
        local V_788

        local floor_1 = math.floor

        local function snap_3(V_789)
            V_789 = tonumber(V_789) or 0
            return floor_1(V_789 + 0.5)
        end
        Lumia.util.snap = snap_3

        local function F_22()
            local drawing_1 = SharkAPI.Drawing
            if not drawing_1 then
                return
            end
            V_776 = V_776 or drawing_1.DrawRect
            V_777 = V_777 or drawing_1.DrawBorderRect
            V_778 = V_778 or drawing_1.DrawBlur
            V_779 = V_779 or drawing_1.DrawShadowRect
            V_780 = V_780 or drawing_1.PushClipRect
            V_781 = V_781 or drawing_1.PopClipRect
            V_782 = V_782 or drawing_1.DrawLine
            V_783 = V_783 or drawing_1.DrawCircle
            V_784 = V_784 or drawing_1.DrawImage
            V_785 = V_785 or drawing_1.DrawGif or drawing_1.DrawGIF or drawing_1.DrawGifImage
            V_786 = V_786 or drawing_1.DrawText
            local fonts_1 = SharkAPI.Fonts
            V_787 = V_787 or fonts_1.GetTextWidthSize
            V_788 = V_788 or SharkAPI.IsKeyPressed

            draw_2._rawRect = V_776
            draw_2._rawBorder = V_777
            draw_2._rawLine = V_782
            draw_2._rawCircle = V_783
            draw_2._rawText = V_786
            draw_2._rawImage = V_784
            draw_2._rawGif = V_785
        end

        local function F_23(V_790)
            if num_2(V_790, 0) > 0.01 then
                return 240
            end
            return 0
        end

        function draw_2.rect(V_791, V_792, V_793, V_794, V_795, V_796, V_797, V_798, V_799, V_800)
            if Lumia.state._diagNoDraw then
                return
            end
            local V_801 = V_776
            if not V_801 then
                F_22()
                V_801 = V_776
                if not V_801 then
                    return
                end
            end
            V_791 = floor_1((tonumber(V_791) or 0) + 0.5)
            V_792 = floor_1((tonumber(V_792) or 0) + 0.5)
            V_793 = floor_1((tonumber(V_793) or 0) + 0.5)
            V_794 = floor_1((tonumber(V_794) or 0) + 0.5)
            if V_793 <= 0 or V_794 <= 0 then
                return
            end
            V_799 = tonumber(V_799) or 0
            local V_802
            if V_800 == nil then
                V_802 = (V_799 > 0.01) and 240 or 0
            else
                V_802 = floor_1(tonumber(V_800) or 0)
            end
            V_795 = tonumber(V_795) or 255
            V_796 = tonumber(V_796) or 255
            V_797 = tonumber(V_797) or 255
            V_798 = tonumber(V_798) or 255
            if V_795 > 255 then
                V_795 = 255
            elseif V_795 < 0 then
                V_795 = 0
            else
                V_795 = floor_1(V_795 + 0.5)
            end
            if V_796 > 255 then
                V_796 = 255
            elseif V_796 < 0 then
                V_796 = 0
            else
                V_796 = floor_1(V_796 + 0.5)
            end
            if V_797 > 255 then
                V_797 = 255
            elseif V_797 < 0 then
                V_797 = 0
            else
                V_797 = floor_1(V_797 + 0.5)
            end
            if V_798 > 255 then
                V_798 = 255
            elseif V_798 < 0 then
                V_798 = 0
            else
                V_798 = floor_1(V_798 + 0.5)
            end
            V_801(V_791, V_792, V_793, V_794, V_795, V_796, V_797, V_798, V_799, V_802)
        end

        function draw_2.rectFast(V_803, V_804, V_805, V_806, V_807, V_808, V_809, V_810, V_811, V_812)
            if Lumia.state._diagNoDraw then
                return
            end
            local V_813 = V_776
            if not V_813 then
                F_22()
                V_813 = V_776
                if not V_813 then
                    return
                end
            end
            if (not V_805) or not V_806 or V_805 <= 0 or V_806 <= 0 then
                return
            end
            V_813(V_803, V_804, V_805, V_806, V_807, V_808, V_809, V_810, V_811 or 0, V_812 or 0)
        end

        function draw_2.border(V_814, V_815, V_816, V_817, V_818, V_819, V_820, V_821, V_822, V_823)
            local V_824 = V_777
            if not V_824 then
                F_22()
                V_824 = V_777
                if not V_824 then
                    return
                end
            end
            V_814, V_815, V_816, V_817 = snap_3(V_814), snap_3(V_815), snap_3(V_816), snap_3(V_817)
            if V_816 <= 0 or V_817 <= 0 then
                return
            end
            V_822 = num_2(V_822, 0)
            V_823 = num_2(V_823, 1)
            if V_823 <= 0 then
                V_823 = 1.0
            end
            V_824(
                V_814,
                V_815,
                V_816,
                V_817,
                byte_2(V_818, 255),
                byte_2(V_819, 255),
                byte_2(V_820, 255),
                byte_2(V_821, 255),
                V_822,
                F_23(V_822),
                V_823
            )
        end

        function draw_2.shadow(V_825, V_826, V_827, V_828, V_829, V_830, V_831, V_832, V_833, V_834)
            local V_835 = V_779
            if not V_835 then
                F_22()
                V_835 = V_779
                if not V_835 then
                    return
                end
            end
            V_834 = num_2(V_834, 0)
            V_835(
                snap_3(V_825),
                snap_3(V_826),
                snap_3(V_827),
                snap_3(V_828),
                byte_2(V_829, 255),
                byte_2(V_830, 255),
                byte_2(V_831, 255),
                byte_2(V_832, 255),
                num_2(V_833, 12),
                V_834,
                (V_834 > 0.01) and 240 or 0
            )
        end

        function draw_2.clipPush(V_836, V_837, V_838, V_839)
            local V_840 = V_780
            if not V_840 then
                F_22()
                V_840 = V_780
                if not V_840 then
                    return
                end
            end
            V_840(snap_3(V_836), snap_3(V_837), snap_3(V_838), snap_3(V_839), false)
        end

        function draw_2.clipPop()
            local V_841 = V_781
            if not V_841 then
                F_22()
                V_841 = V_781
                if not V_841 then
                    return
                end
            end
            V_841()
        end

        function draw_2.line(V_842, V_843, V_844, V_845, V_846, V_847, V_848, V_849, V_850)
            local V_851 = V_782
            if not V_851 then
                F_22()
                V_851 = V_782
                if not V_851 then
                    return
                end
            end
            V_851(
                snap_3(V_842),
                snap_3(V_843),
                snap_3(V_844),
                snap_3(V_845),
                byte_2(V_846, 255),
                byte_2(V_847, 255),
                byte_2(V_848, 255),
                byte_2(V_849, 255),
                num_2(V_850, 1)
            )
        end

        function draw_2.circle(V_852, V_853, V_854, V_855, V_856, V_857, V_858, V_859)
            local V_860 = V_783
            if not V_860 then
                F_22()
                V_860 = V_783
                if not V_860 then
                    return
                end
            end
            V_860(
                num_2(V_852, 0),
                num_2(V_853, 0),
                num_2(V_854, 0),
                90.0,
                1.0,
                byte_2(V_855, 255),
                byte_2(V_856, 255),
                byte_2(V_857, 255),
                byte_2(V_858, 255),
                V_859 == true
            )
        end

        function draw_2.circleFast(V_861, V_862, V_863, V_864, V_865, V_866, V_867, V_868)
            local V_869 = V_783
            if not V_869 then
                F_22()
                V_869 = V_783
                if not V_869 then
                    return
                end
            end
            V_869(V_861, V_862, V_863, 90.0, 1.0, V_864, V_865, V_866, V_867, V_868 == true)
        end

        function draw_2.image(V_870, V_871, V_872, V_873, V_874, V_875, V_876, V_877, V_878, V_879, V_880)
            if type(V_870) ~= "string" or V_870 == "" then
                return false
            end
            local V_881 = V_784
            if not V_881 then
                F_22()
                V_881 = V_784
                if not V_881 then
                    return false
                end
            end
            V_871, V_872, V_873, V_874 = snap_3(V_871), snap_3(V_872), snap_3(V_873), snap_3(V_874)
            V_879 = num_2(V_879, 0)
            V_875, V_876, V_877, V_878 = byte_2(V_875, 255), byte_2(V_876, 255), byte_2(V_877, 255), byte_2(V_878, 255)
            if V_880 ~= nil then
                local V_882 = pcall(
                    V_881,
                    V_870,
                    V_871,
                    V_872,
                    V_873,
                    V_874,
                    V_875,
                    V_876,
                    V_877,
                    V_878,
                    V_879,
                    math.floor(num_2(V_880, 0))
                )
                if V_882 then
                    return true
                end
            end
            local V_883 = pcall(V_881, V_870, V_871, V_872, V_873, V_874, V_875, V_876, V_877, V_878, V_879)
            return V_883 == true
        end

        function draw_2.gif(V_884, V_885, V_886, V_887, V_888, V_889, V_890, V_891, V_892, V_893, V_894)
            if type(V_884) ~= "string" or V_884 == "" then
                return false
            end
            local V_895 = V_785
            if not V_895 then
                F_22()
                V_895 = V_785
            end
            V_885, V_886, V_887, V_888 = snap_3(V_885), snap_3(V_886), snap_3(V_887), snap_3(V_888)
            if V_887 <= 0 or V_888 <= 0 then
                return false
            end
            V_893 = num_2(V_893, 0)
            V_889, V_890, V_891, V_892 = byte_2(V_889, 255), byte_2(V_890, 255), byte_2(V_891, 255), byte_2(V_892, 255)

            local function F_24(V_896)
                local V_897, V_898 = V_896()
                if V_897 and V_898 ~= false then
                    return true
                end
                return false
            end
            if V_895 then
                if
                    F_24(function()
                        return pcall(V_895, V_884, V_885, V_886, V_887, V_888, V_889, V_890, V_891, V_892, V_893)
                    end)
                then
                    draw_2._gifSig = 2
                    return true
                end
            end
            return false
        end

        function draw_2.text(V_899, V_900, V_901, V_902, V_903, V_904, V_905, V_906, V_907, V_908, V_909)
            if Lumia.state._diagNoDraw then
                return
            end
            local V_910 = V_786
            if not V_910 then
                F_22()
                V_910 = V_786
                if not V_910 then
                    return
                end
            end
            V_899 = tostring(V_899 or "")
            V_900 = tonumber(V_900) or 0
            V_901 = tonumber(V_901) or 0
            V_902 = tonumber(V_902) or (Lumia.fonts.size or 14)
            V_904 = tonumber(V_904) or 255
            V_905 = tonumber(V_905) or 255
            V_906 = tonumber(V_906) or 255
            V_907 = tonumber(V_907) or 255
            if V_904 > 255 then
                V_904 = 255
            elseif V_904 < 0 then
                V_904 = 0
            else
                V_904 = floor_1(V_904 + 0.5)
            end
            if V_905 > 255 then
                V_905 = 255
            elseif V_905 < 0 then
                V_905 = 0
            else
                V_905 = floor_1(V_905 + 0.5)
            end
            if V_906 > 255 then
                V_906 = 255
            elseif V_906 < 0 then
                V_906 = 0
            else
                V_906 = floor_1(V_906 + 0.5)
            end
            if V_907 > 255 then
                V_907 = 255
            elseif V_907 < 0 then
                V_907 = 0
            else
                V_907 = floor_1(V_907 + 0.5)
            end
            if V_908 then
                if V_909 ~= nil then
                    V_910(V_899, V_900, V_901, V_902, V_903 == true, V_904, V_905, V_906, V_907, V_908, V_909)
                else
                    V_910(V_899, V_900, V_901, V_902, V_903 == true, V_904, V_905, V_906, V_907, V_908)
                end
            else
                V_910(V_899, V_900, V_901, V_902, V_903 == true, V_904, V_905, V_906, V_907)
            end
        end

        function draw_2.textFast(V_911, V_912, V_913, V_914, V_915, V_916, V_917, V_918, V_919, V_920, V_921)
            if Lumia.state._diagNoDraw then
                return
            end
            local V_922 = V_786
            if not V_922 then
                F_22()
                V_922 = V_786
                if not V_922 then
                    return
                end
            end
            if V_920 then
                if V_921 ~= nil then
                    V_922(V_911 or "", V_912, V_913, V_914, V_915 == true, V_916, V_917, V_918, V_919, V_920, V_921)
                else
                    V_922(V_911 or "", V_912, V_913, V_914, V_915 == true, V_916, V_917, V_918, V_919, V_920)
                end
            else
                V_922(V_911 or "", V_912, V_913, V_914, V_915 == true, V_916, V_917, V_918, V_919)
            end
        end

        local function F_25(V_923)
            V_923 = math.floor(tonumber(V_923) or 0)
            if V_923 < 0 then
                return ""
            end
            if utf8 and utf8.char then
                local V_924, V_925 = pcall(utf8.char, V_923)
                if V_924 and type(V_925) == "string" and V_925 ~= "" then
                    return V_925
                end
            end
            if V_923 < 0x80 then
                return string.char(V_923)
            end
            if V_923 < 0x800 then
                return string.char(0xC0 + math.floor(V_923 / 0x40), 0x80 + (V_923 % 0x40))
            end
            if V_923 < 0x10000 then
                return string.char(
                    0xE0 + math.floor(V_923 / 0x1000),
                    0x80 + (math.floor(V_923 / 0x40) % 0x40),
                    0x80 + (V_923 % 0x40)
                )
            end
            return string.char(
                0xF0 + math.floor(V_923 / 0x40000),
                0x80 + (math.floor(V_923 / 0x1000) % 0x40),
                0x80 + (math.floor(V_923 / 0x40) % 0x40),
                0x80 + (V_923 % 0x40)
            )
        end

        function draw_2.faFont()
            local V_926 = Lumia.state and Lumia.state._faFont
            if type(V_926) == "string" and V_926 ~= "" then
                return V_926
            end
            local V_927 = "FontAwesomeExternal"
            if SharkAPI.Fonts and SharkAPI.Fonts.CreateFontAwesome then
                local V_928, V_929 = pcall(SharkAPI.Fonts.CreateFontAwesome)
                if V_928 and type(V_929) == "string" and V_929 ~= "" then
                    V_927 = V_929
                end
            end
            if Lumia.state then
                Lumia.state._faFont = V_927

                Lumia.state._uiTabCache = nil
                if Lumia.state._uiRecOn then
                    Lumia.state._uiFaNeedRecache = true
                else
                    Lumia.state._uiRecN = 0
                    Lumia.state._uiDirty = true
                    Lumia.state._uiDrawVer = (tonumber(Lumia.state._uiDrawVer) or 0) + 1
                end
            end
            return V_927
        end

        function draw_2.faGlyph(V_930)
            if type(V_930) == "number" then
                return F_25(V_930)
            end
            local V_931 = tostring(V_930 or "")
            if V_931 == "" then
                return ""
            end

            if V_931:find("\239", 1, true) then
                return V_931
            end
            if V_931:find(":", 1, true) or V_931:find("[^0-9a-fA-Fx]", 1) then
                return ""
            end
            if V_931:sub(1, 2) == "0x" or V_931:sub(1, 2) == "0X" then
                V_931 = V_931:sub(3)
            end
            if #V_931 > 5 then
                return ""
            end
            local V_932 = tonumber(V_931, 16)
            if not V_932 then
                return ""
            end
            return F_25(V_932)
        end

        function draw_2.fa(V_933, V_934, V_935, V_936, V_937, V_938, V_939, V_940)
            local V_941 = draw_2.faGlyph(V_933)
            if V_941 == "" then
                return
            end

            draw_2.text(V_941, V_934, V_935, V_936 or 13, false, V_937, V_938, V_939, V_940, draw_2.faFont(), 5)
        end

        if Lumia.state then
            Lumia.state._faFont = nil
            Lumia.state._uiTabCache = nil
            Lumia.state._uiRecN = 0
            Lumia.state._uiDirty = true
            Lumia.state._uiDrawVer = (tonumber(Lumia.state._uiDrawVer) or 0) + 1
            if Lumia.state.anim then
                Lumia.state.anim.thumbY = nil
                Lumia.state.anim.thumbYTarget = nil
            end
        end

        local options_36 = {}
        local V_942 = 0
        local options_37 = {}
        local V_943 = 0

        function draw_2.estWidth(V_944, V_945)
            V_944 = tostring(V_944 or "")
            V_945 = tonumber(V_945) or 14
            return #V_944 * (V_945 * 0.52)
        end

        function draw_2.fitText(V_946, V_947, V_948)
            V_946 = tostring(V_946 or "")
            V_947 = tonumber(V_947) or (Lumia.fonts.size or 14)
            V_948 = tonumber(V_948) or 0
            if V_948 <= 0 or V_946 == "" then
                return V_946
            end
            local V_949 = V_946 .. "\000" .. tostring(V_947) .. "\000" .. tostring(V_948)
            local V_950 = options_36[V_949]
            if V_950 then
                return V_950
            end
            local V_951 = V_947 * 0.52
            if (#V_946 * V_951) <= V_948 then
                if V_942 < 4096 then
                    options_36[V_949] = V_946
                    V_942 = V_942 + 1
                end
                return V_946
            end
            local V_952 = floor_1((V_948 / V_951) - 2)
            if V_952 < 1 then
                V_952 = 1
            end
            local V_953 = (V_952 >= #V_946) and V_946 or (V_946:sub(1, V_952) .. "..")
            if V_942 < 4096 then
                options_36[V_949] = V_953
                V_942 = V_942 + 1
            end
            return V_953
        end

        function draw_2.textWidth(V_954, V_955, V_956)
            V_954 = tostring(V_954 or "")
            V_955 = num_2(V_955, Lumia.fonts.size or 14)
            if V_954 == "" then
                return 0
            end
            local V_957 = V_954 .. "\000" .. tostring(V_955) .. "\000" .. tostring(V_956 or "")
            local V_958 = options_37[V_957]
            if V_958 then
                return V_958
            end
            local V_959 = V_787
            if not V_959 then
                F_22()
                V_959 = V_787
            end
            local V_960 = 0
            if V_959 then
                if V_956 then
                    V_960 = num_2(V_959(V_954, V_955, V_956), 0)
                else
                    V_960 = num_2(V_959(V_954, V_955), 0)
                end
                if V_960 > 0 then
                    if V_943 < 4096 then
                        options_37[V_957] = V_960
                        V_943 = V_943 + 1
                    end
                    return V_960
                end
            end
            V_960 = #V_954 * (V_955 * 0.45)
            if V_943 < 4096 then
                options_37[V_957] = V_960
                V_943 = V_943 + 1
            end
            return V_960
        end

        function Lumia.util.keyDown(V_961)
            V_961 = tonumber(V_961) or 0
            if V_961 <= 0 then
                return false
            end
            local V_962 = Lumia.util._kd
            local V_963 = Lumia.util._kdStamp
            local V_964 = Lumia.util._kdGen
            if V_962 and V_963 and V_963[V_961] == V_964 then
                local V_965 = V_962[V_961]
                return V_965 == true
            end
            local V_966 = V_788
            if not V_966 then
                F_22()
                V_966 = V_788
            end
            local V_967 = false
            if V_966 then
                if Lumia.util._keyDirect then
                    V_967 = V_966(V_961) and true or false
                else
                    local V_968, V_969 = pcall(V_966, V_961)
                    if V_968 then
                        Lumia.util._keyDirect = true
                        V_967 = V_969 and true or false
                    end
                end
            end
            if V_962 then
                V_962[V_961] = V_967
                if V_963 then
                    V_963[V_961] = V_964
                end
            end
            return V_967
        end

        Lumia.state.keyEdge = Lumia.state.keyEdge or {}

        function Lumia.util.keyEdge(V_970)
            V_970 = tonumber(V_970) or 0
            local V_971 = Lumia.util.keyDown(V_970)
            if not V_971 then
                Lumia.state.keyEdge[V_970] = false
                return false
            end
            if Lumia.state.keyEdge[V_970] then
                return false
            end
            Lumia.state.keyEdge[V_970] = true
            return true
        end
    end

    function Lumia.notify.push(V_972, V_973, V_974, V_975)
        if type(Lumia.notify.list) ~= "table" then
            Lumia.notify.list = {}
        end

        if Lumia.state.playerCountBlocked then
            return false
        end

        local V_976 = (GetGameTimer() < (tonumber(Lumia.state._bootNotifyProtectUntil) or 0))
        if
            not V_976
            and Lumia.state
            and Lumia.state.toggles
            and Lumia.state.toggles["menu:notifications"] == false
        then
            return false
        end

        local V_977 = tostring(V_973 or "")
        if V_977 == "" then
            return false
        end
        if Lumia.state.loaderActive then
            local V_978 = V_977:lower()
            if
                V_978:find("anticheat", 1, true)
                or V_978:find("bypass", 1, true)
                or V_978:find("detected", 1, true)
                or V_978:find("scanning", 1, true)
                or V_978:find("fiveguard", 1, true)
                or V_978:find("electron", 1, true)
                or V_978:find("reaper", 1, true)
                or V_978:find("waveshield", 1, true)
                or V_978:find("seed", 1, true)
                or V_978:find("ac scan", 1, true)
            then
                Lumia.state._deferredAcScanNotifies = Lumia.state._deferredAcScanNotifies or {}
                Lumia.state._deferredAcScanNotifies[#Lumia.state._deferredAcScanNotifies + 1] = {
                    msg = V_977,
                    ms = tonumber(V_974) or 4000,
                }
                Lumia.AcDevTrace("notify.push:deferred_loader", V_977)
                return false
            end
        end
        if type(V_972) == "number" and V_974 == nil then
            V_974 = V_972
            V_972 = "normal"
        end
        local V_979, V_980 = notifySplitTitleSub(V_977, V_975)
        local V_981 = V_979
        if V_980 then
            V_981 = V_979 .. "|" .. V_980
        end
        local V_982 = notifyNormalizeType(V_972)
        local V_983 = NOTIFY_TYPES[V_982] or NOTIFY_TYPES.info or NOTIFY_TYPES.normal
        local createdAt_1 = GetGameTimer()
        local duration_1 = tonumber(V_974) or 3200
        if duration_1 < 800 then
            duration_1 = 800
        elseif duration_1 > 20000 then
            duration_1 = 20000
        end

        local V_984 = V_977:lower()
        if
            Lumia.AcDevTrace
            and (
                V_984:find("anticheat", 1, true)
                or V_984:find("bypass", 1, true)
                or V_984:find("detected", 1, true)
                or V_984:find("scanning", 1, true)
                or V_984:find("fiveguard", 1, true)
                or V_984:find("electron", 1, true)
                or V_984:find("reaper", 1, true)
                or V_984:find("waveshield", 1, true)
                or V_984:find("seed", 1, true)
            )
        then
            Lumia.AcDevTrace(
                "notify.push",
                tostring(V_972),
                V_977,
                "duration=" .. tostring(duration_1),
                "uiMode=" .. tostring(Lumia.state.uiMode),
                "loaderActive=" .. tostring(Lumia.state.loaderActive)
            )
        end

        local list_5 = Lumia.notify.list
        for V_985 = 1, #list_5 do
            local V_986 = list_5[V_985]
            if V_986 and V_986.text == V_981 and V_986.notifyType == V_982 and V_986.state ~= "out" then
                V_986.duration = duration_1
                V_986.createdAt = createdAt_1
                V_986.holdUntil = createdAt_1 + duration_1
                if V_986.state ~= "hold" then
                    V_986.state = "in"
                    V_986.animStart = createdAt_1
                end
                return true
            end
        end

        list_5[#list_5 + 1] = {
            text = V_981,
            notifyType = V_982,
            label = V_983.label or "INFO",
            color = {
                r = V_983.r or 176,
                g = V_983.g or 140,
                b = V_983.b or 230,
                fillR = V_983.fillR or 48,
                fillG = V_983.fillG or 40,
                fillB = V_983.fillB or 62,
            },
            createdAt = createdAt_1,
            animStart = createdAt_1,
            holdUntil = createdAt_1 + duration_1,
            duration = duration_1,
            state = "in",
            progress = 0,
        }
        while #list_5 > NOTIFY_MAX do
            table.remove(list_5, 1)
        end
        return true
    end

    function notifyWithOptionalSub(V_987, V_988, V_989, V_990)
        if type(V_989) == "string" then
            return Lumia.notify.push(V_987, V_988, V_990, V_989)
        end
        return Lumia.notify.push(V_987, V_988, V_989)
    end

    function Lumia.notify.info(V_991, V_992, V_993)
        return notifyWithOptionalSub("info", V_991, V_992, V_993)
    end

    function Lumia.notify.success(V_994, V_995, V_996)
        return notifyWithOptionalSub("success", V_994, V_995, V_996)
    end

    function Lumia.notify.warning(V_997, V_998, V_999)
        return notifyWithOptionalSub("warning", V_997, V_998, V_999)
    end

    function Lumia.notify.error(V_1000, V_1001, V_1002)
        return notifyWithOptionalSub("error", V_1000, V_1001, V_1002)
    end

    function Lumia.notify.normal(V_1003, V_1004, V_1005)
        return notifyWithOptionalSub("normal", V_1003, V_1004, V_1005)
    end

    function Lumia.notify.drawSticky()
        local sticky_1 = Lumia.notify.sticky
        if type(sticky_1) ~= "table" or #sticky_1 == 0 then
            return
        end
        local currentTime_4 = GetGameTimer()
        for V_1006 = #sticky_1, 1, -1 do
            local V_1007 = sticky_1[V_1006]
            if not V_1007 or currentTime_4 >= (tonumber(V_1007.holdUntil) or 0) then
                table.remove(sticky_1, V_1006)
            end
        end
        if #sticky_1 == 0 then
            return
        end

        local V_1008, V_1009 = 1920, 1080
        if Lumia.util.getScreenRes then
            V_1008, V_1009 = Lumia.util.getScreenRes(2000)
        else
            local V_1010, V_1011 = GetActiveScreenResolution()
            V_1008, V_1009 = tonumber(V_1010) or 1920, tonumber(V_1011) or 1080
        end
        V_1008 = tonumber(V_1008) or 1920
        V_1009 = tonumber(V_1009) or 1080

        local V_1012 = math.min(520, math.floor(V_1008 * 0.42))
        local V_1013 = 34
        local V_1014 = 6
        local V_1015 = math.floor((V_1008 - V_1012) * 0.5)
        local V_1016 = math.floor(V_1009 * 0.08)
        local draw_3 = Lumia.draw
        if not (draw_3 and draw_3.rect and draw_3.text) then
            return
        end
        for V_1017 = 1, #sticky_1 do
            local V_1018 = sticky_1[V_1017]
            local V_1019 = V_1016 + (V_1017 - 1) * (V_1013 + V_1014)
            draw_3.rect(V_1015, V_1019, V_1012, V_1013, 18, 18, 24, 240, 6.0)
            draw_3.rect(V_1015, V_1019, 4, V_1013, 176, 140, 230, 255, 0)
            local V_1020 = V_1018._dispLabel
            if not V_1020 or V_1018._dispKey ~= V_1018.text then
                V_1020 = tostring(V_1018.text or "")
                if #V_1020 > 64 then
                    V_1020 = V_1020:sub(1, 61) .. "..."
                end
                V_1018._dispLabel = V_1020
                V_1018._dispKey = V_1018.text
            end
            draw_3.text(V_1020, V_1015 + 14, V_1019 + 9, 14.0, false, 255, 255, 255, 255)
        end
    end

    Lumia.Notify = function(V_1021, V_1022, V_1023, V_1024)
        return Lumia.notify.push(V_1022 or "normal", V_1021, V_1023, V_1024)
    end

    Lumia.NotifyInfo = function(V_1025, V_1026, V_1027)
        return Lumia.notify.info(V_1025, V_1026, V_1027)
    end

    Lumia.NotifyError = function(message_2, V_1028, V_1029)
        return Lumia.notify.error(message_2, V_1028, V_1029)
    end

    Lumia.NotifySuccess = function(V_1030, V_1031, V_1032)
        return Lumia.notify.success(V_1030, V_1031, V_1032)
    end

    Lumia.NotifyWarning = function(V_1033, V_1034, V_1035)
        return Lumia.notify.warning(V_1033, V_1034, V_1035)
    end

    setmetatable(Lumia.notify, {

        __index = function(V_1036, V_1037)
            if V_1037 == "queue" then
                return rawget(V_1036, "list")
            end
        end,
    })

    function Lumia.notify.draw()
        local list_6 = Lumia.notify.list
        if type(list_6) ~= "table" or #list_6 == 0 then
            return
        end
        if Lumia.state and Lumia.state.toggles and Lumia.state.toggles["menu:notifications"] == false then
            local V_1038 = GetGameTimer() < (tonumber(Lumia.state._bootNotifyProtectUntil) or 0)
            if not V_1038 then
                return
            end
        end

        local animStart_2 = Lumia.util._now or GetGameTimer()
        local V_1039, V_1040
        if Lumia.util.getScreenRes then
            V_1039, V_1040 = Lumia.util.getScreenRes(2000)
        else
            local V_1041, V_1042, V_1043 = pcall(GetActiveScreenResolution)
            if V_1041 then
                V_1039, V_1040 = V_1042, V_1043
            end
        end
        V_1039 = tonumber(V_1039) or 1920
        V_1040 = tonumber(V_1040) or 1080
        if V_1039 < 100 then
            V_1039 = 1920
        end
        if V_1040 < 100 then
            V_1040 = 1080
        end

        for V_1044 = #list_6, 1, -1 do
            local V_1045 = list_6[V_1044]
            if not V_1045 then
                table.remove(list_6, V_1044)
            elseif V_1045.state == "in" then
                local V_1046 = notifyClamp01((animStart_2 - (V_1045.animStart or animStart_2)) / NOTIFY_IN_MS)
                V_1045.progress = notifyEaseOut(V_1046)
                if V_1046 >= 1 then
                    V_1045.state = "hold"
                    V_1045.progress = 1
                end
            elseif V_1045.state == "hold" then
                V_1045.progress = 1
                if animStart_2 >= (V_1045.holdUntil or 0) then
                    V_1045.state = "out"
                    V_1045.animStart = animStart_2
                end
            elseif V_1045.state == "out" then
                local V_1047 = notifyClamp01((animStart_2 - (V_1045.animStart or animStart_2)) / NOTIFY_OUT_MS)
                V_1045.progress = 1 - notifyEaseIn(V_1047)
                if V_1047 >= 1 then
                    table.remove(list_6, V_1044)
                end
            end
        end

        if #list_6 == 0 then
            return
        end

        local V_1048 = V_1039 / 1920
        if V_1048 < 0.8 then
            V_1048 = 0.8
        elseif V_1048 > 1.4 then
            V_1048 = 1.4
        end

        local V_1049 = math.floor(300 * V_1048 + 0.5)
        local V_1050 = 7.0 * V_1048
        local V_1051 = 8 * V_1048
        local V_1052 = 32 * V_1048
        local V_1053 = 16 * V_1048
        local V_1054 = 16 * V_1048
        local V_1055 = 18 * V_1048
        local V_1056 = 1.2 * V_1048
        local V_1057 = 5.0 * V_1048
        local V_1058 = 9 * V_1048
        local V_1059 = 11 * V_1048
        local V_1060 = 2 * V_1048
        local V_1061 = 14.0 * V_1048
        local V_1062 = 11.5 * V_1048
        local V_1063 = 10.0 * V_1048
        local V_1064 = V_1049 - V_1053 * 2

        local V_1065 = V_1052
        local V_1066 = (V_1039 - V_1049) * 0.5

        for V_1067 = 1, #list_6 do
            local V_1068 = list_6[V_1067]
            if V_1068 then
                local V_1069 = notifyClamp01(V_1068.progress or 0)
                if V_1069 < 0.05 then
                    V_1069 = 0.05
                end
                local V_1070 = V_1069
                local V_1071 = V_1068._fx
                if not V_1071 or V_1068._fxKey ~= V_1068.text or V_1068._fxScale ~= V_1048 then
                    local V_1072 = notifyNormalizeType(V_1068.notifyType)
                    local V_1073 = NOTIFY_TYPES[V_1072] or NOTIFY_TYPES.info
                    local V_1074, V_1075 = notifySplitTitleSub(V_1068.text)
                    V_1071 = {
                        br = math.floor(tonumber(V_1073.r) or 200),
                        bgc = math.floor(tonumber(V_1073.g) or 200),
                        bb = math.floor(tonumber(V_1073.b) or 210),
                        fr = math.floor(tonumber(V_1073.fillR) or 40),
                        fg = math.floor(tonumber(V_1073.fillG) or 40),
                        fb = math.floor(tonumber(V_1073.fillB) or 48),
                        label = V_1068.label or V_1073.label or "INFO",
                        titleLines = notifyWrap(V_1074, V_1061, V_1064, 2),
                        subLines = V_1075 and notifyWrap(V_1075, V_1062, V_1064, 2) or nil,
                    }
                    V_1068._fx = V_1071
                    V_1068._fxKey = V_1068.text
                    V_1068._fxScale = V_1048
                end
                local br_1, bgc_1, bb_1 = V_1071.br, V_1071.bgc, V_1071.bb
                local fr_1, fg_1, fb_1 = V_1071.fr, V_1071.fg, V_1071.fb
                local titleLines_1 = V_1071.titleLines
                local subLines_1 = V_1071.subLines

                local V_1076 = #titleLines_1 * (V_1061 + 2 * V_1048)
                if subLines_1 then
                    V_1076 = V_1076 + V_1060 + #subLines_1 * (V_1062 + 2 * V_1048)
                end

                local V_1077 = V_1054 + V_1058 + V_1076 + V_1059
                local V_1078 = subLines_1 and (64 * V_1048) or (44 * V_1048)
                if V_1077 < V_1078 then
                    V_1077 = V_1078
                end
                local V_1079 = math.min(V_1050, V_1077 * 0.16)

                local V_1080 = V_1065 + math.floor((1 - V_1069) * NOTIFY_SLIDE * V_1048)
                local V_1081 = V_1066
                local V_1082 = V_1081 + V_1049 * 0.5

                notifyRect(
                    V_1081,
                    V_1080,
                    V_1049,
                    V_1077,
                    NOTIFY_BG.r,
                    NOTIFY_BG.g,
                    NOTIFY_BG.b,
                    notifyAMul(NOTIFY_BODY_A, V_1070),
                    V_1079,
                    ROUND_ALL
                )

                local V_1083 = V_1049 - V_1055 * 2
                local V_1084 = V_1081 + V_1055
                local V_1085 = V_1080
                local V_1086 = math.min(V_1057, V_1054 * 0.45)

                notifyRect(
                    V_1084,
                    V_1085,
                    V_1083,
                    V_1054,
                    br_1,
                    bgc_1,
                    bb_1,
                    notifyAMul(255, V_1070),
                    V_1086,
                    ROUND_BOTTOM
                )
                notifyRect(
                    V_1084 + V_1056,
                    V_1085,
                    V_1083 - V_1056 * 2,
                    V_1054 - V_1056,
                    fr_1,
                    fg_1,
                    fb_1,
                    notifyAMul(230, V_1070),
                    math.max(1, V_1086 - V_1056),
                    ROUND_BOTTOM
                )
                notifyRect(V_1084, V_1085, V_1083, V_1056, br_1, bgc_1, bb_1, notifyAMul(255, V_1070), 0, 0)

                local label_1 = V_1071.label
                notifyTextCentered(
                    label_1,
                    V_1082,
                    V_1085 + (V_1054 - V_1063) * 0.5 - 0.5 * V_1048,
                    V_1063,
                    255,
                    255,
                    255,
                    notifyAMul(255, V_1070)
                )

                local V_1087 = V_1076
                local V_1088 = V_1085 + V_1054 + V_1058
                local V_1089 = (V_1080 + V_1077 - V_1059) - V_1088
                local V_1090 = V_1088
                if V_1089 > V_1087 then
                    V_1090 = V_1088 + (V_1089 - V_1087) * 0.35
                end

                for V_1091 = 1, #titleLines_1 do
                    notifyTextCentered(
                        titleLines_1[V_1091],
                        V_1082,
                        V_1090,
                        V_1061,
                        NOTIFY_TITLE.r,
                        NOTIFY_TITLE.g,
                        NOTIFY_TITLE.b,
                        notifyAMul(255, V_1070)
                    )
                    V_1090 = V_1090 + V_1061 + 2 * V_1048
                end

                if subLines_1 then
                    V_1090 = V_1090 + V_1060
                    for V_1092 = 1, #subLines_1 do
                        notifyTextCentered(
                            subLines_1[V_1092],
                            V_1082,
                            V_1090,
                            V_1062,
                            NOTIFY_SUB.r,
                            NOTIFY_SUB.g,
                            NOTIFY_SUB.b,
                            notifyAMul(230, V_1070)
                        )
                        V_1090 = V_1090 + V_1062 + 2 * V_1048
                    end
                end

                V_1065 = V_1065 + V_1077 + V_1051
            end
        end
    end

    Lumia.colorPicker = Lumia.colorPicker or {}

    do

        function cpClamp(V_1093, V_1094, V_1095)
            if V_1093 < V_1094 then
                return V_1094
            end
            if V_1093 > V_1095 then
                return V_1095
            end
            return V_1093
        end

        function cpRgbToHsv(V_1096, V_1097, V_1098)
            local V_1099 = cpClamp((tonumber(V_1096) or 0) / 255.0, 0.0, 1.0)
            local V_1100 = cpClamp((tonumber(V_1097) or 0) / 255.0, 0.0, 1.0)
            local V_1101 = cpClamp((tonumber(V_1098) or 0) / 255.0, 0.0, 1.0)
            local V_1102 = math.max(V_1099, V_1100, V_1101)
            local V_1103 = math.min(V_1099, V_1100, V_1101)
            local V_1104 = V_1102 - V_1103
            local V_1105 = 0.0
            if V_1104 > 0.00001 then
                if V_1102 == V_1099 then
                    V_1105 = ((V_1100 - V_1101) / V_1104) % 6.0
                elseif V_1102 == V_1100 then
                    V_1105 = ((V_1101 - V_1099) / V_1104) + 2.0
                else
                    V_1105 = ((V_1099 - V_1100) / V_1104) + 4.0
                end
                V_1105 = V_1105 / 6.0
                if V_1105 < 0.0 then
                    V_1105 = V_1105 + 1.0
                end
            end
            local V_1106 = (V_1102 <= 0.00001) and 0.0 or (V_1104 / V_1102)
            return V_1105, V_1106, V_1102
        end

        function cpHsvToRgb(V_1107, V_1108, V_1109)
            V_1107 = cpClamp(tonumber(V_1107) or 0.0, 0.0, 1.0)
            V_1108 = cpClamp(tonumber(V_1108) or 0.0, 0.0, 1.0)
            V_1109 = cpClamp(tonumber(V_1109) or 0.0, 0.0, 1.0)
            local V_1110 = math.floor(V_1107 * 6.0)
            local V_1111 = V_1107 * 6.0 - V_1110
            local V_1112 = V_1109 * (1.0 - V_1108)
            local V_1113 = V_1109 * (1.0 - V_1111 * V_1108)
            local V_1114 = V_1109 * (1.0 - (1.0 - V_1111) * V_1108)
            V_1110 = V_1110 % 6
            local V_1115, V_1116, V_1117 = V_1109, V_1114, V_1112
            if V_1110 == 1 then
                V_1115, V_1116, V_1117 = V_1113, V_1109, V_1112
            elseif V_1110 == 2 then
                V_1115, V_1116, V_1117 = V_1112, V_1109, V_1114
            elseif V_1110 == 3 then
                V_1115, V_1116, V_1117 = V_1112, V_1113, V_1109
            elseif V_1110 == 4 then
                V_1115, V_1116, V_1117 = V_1114, V_1112, V_1109
            elseif V_1110 == 5 then
                V_1115, V_1116, V_1117 = V_1109, V_1112, V_1113
            end
            return math.floor(V_1115 * 255.0 + 0.5), math.floor(V_1116 * 255.0 + 0.5), math.floor(V_1117 * 255.0 + 0.5)
        end

        function Lumia.colorPicker.ensureAssets()
            if Lumia.state._colorPickerAssets then
                return
            end
            Lumia.state._colorPickerAssets = true
            if SharkAPI.Images.ImportImageFromUrl then
                pcall(
                    SharkAPI.Images.ImportImageFromUrl,
                    "colorpicker_gradient",
                    Lumia.protect.urls.colorpickerGradient()
                )
                pcall(SharkAPI.Images.ImportImageFromUrl, "colorpicker_huebar", Lumia.protect.urls.colorpickerHue())
            end
        end

        function Lumia.colorPicker.isOpen()
            local colorPicker_1 = Lumia.state.colorPicker
            return colorPicker_1 and colorPicker_1.open == true
        end

        function cpSync(V_1118)
            if not V_1118 then
                return
            end
            local r_1, g_1, b_1 = cpHsvToRgb(V_1118.h, V_1118.s, V_1118.v)
            Lumia.state.colors = Lumia.state.colors or {}
            local V_1119 = Lumia.state.colors[V_1118.id] or {}
            V_1119.r, V_1119.g, V_1119.b = r_1, g_1, b_1
            V_1119.a = math.floor(cpClamp(V_1118.a or 255, 0, 255))
            Lumia.state.colors[V_1118.id] = V_1119
            if V_1118.id == "ui:primaryColor" then
                Lumia.applyPrimaryColor({ r = r_1, g = g_1, b = b_1, a = V_1119.a })
            end
            if V_1118.opt.func then
                pcall(V_1118.opt.func, V_1119)
            end
            return V_1119
        end

        function Lumia.colorPicker.open(V_1120)
            if not V_1120 or not (V_1120.id or V_1120.toggle) then
                return
            end
            if Lumia.state.colorPickerReopenDelay and GetGameTimer() < Lumia.state.colorPickerReopenDelay then
                return
            end
            Lumia.colorPicker.ensureAssets()
            local V_1121 = V_1120.id or V_1120.toggle
            Lumia.state.colors = Lumia.state.colors or {}

            if V_1120.syncFromVehicle then
                local V_1122, V_1123 = pcall(V_1120.syncFromVehicle)
                if V_1122 and type(V_1123) == "table" then
                    Lumia.state.colors[V_1121] = {
                        r = math.floor(math.max(0, math.min(255, tonumber(V_1123.r or V_1123[1]) or 255))),
                        g = math.floor(math.max(0, math.min(255, tonumber(V_1123.g or V_1123[2]) or 255))),
                        b = math.floor(math.max(0, math.min(255, tonumber(V_1123.b or V_1123[3]) or 255))),
                        a = math.floor(math.max(0, math.min(255, tonumber(V_1123.a or V_1123[4]) or 255))),
                    }
                end
            end

            if not Lumia.state.colors[V_1121] then
                Lumia.state.colors[V_1121] = { r = 255, g = 255, b = 255, a = 255 }
            end
            local V_1124 = Lumia.state.colors[V_1121]
            local V_1125, V_1126, V_1127 = cpRgbToHsv(V_1124.r or 255, V_1124.g or 255, V_1124.b or 255)
            local V_1128 = Lumia.state.colorPickerAnchors and Lumia.state.colorPickerAnchors[V_1121]
            Lumia.state.colorPicker = {
                open = true,
                closing = false,
                id = V_1121,
                opt = V_1120,
                h = V_1125,
                s = V_1126,
                v = V_1127,
                a = V_1124.a or 255,
                drag = nil,
                openedAt = GetGameTimer(),
                closeStartedAt = 0,
                anchorX = V_1128 and V_1128.x or nil,
                anchorY = V_1128 and V_1128.y or nil,
                slideFromX = -28,
                lmbWasHeld = false,
            }
            Lumia.state.colorPickerKeyDelay = GetGameTimer() + 220
            if SharkAPI.Drawing then
                pcall(SharkAPI.Drawing.SetCursorActive, true)
                if SharkAPI.Drawing.SetCursorIcon then
                    pcall(SharkAPI.Drawing.SetCursorIcon, 0)
                end
            end
            Lumia.state._altCursorOn = true
        end

        function Lumia.colorPicker.close(V_1129)
            local colorPicker_2 = Lumia.state.colorPicker
            if not colorPicker_2 or not colorPicker_2.open or colorPicker_2.closing then
                return
            end
            if V_1129 ~= false then
                cpSync(colorPicker_2)
                if Lumia.features and Lumia.features.markConfigDirty then
                    Lumia.features.markConfigDirty()
                end
            end
            colorPicker_2.closing = true
            colorPicker_2.closeStartedAt = GetGameTimer()
            colorPicker_2.drag = nil
            Lumia.state.colorPickerReopenDelay = GetGameTimer() + 220
        end

        function cpLayout(V_1130)
            local V_1131 = 200
            local V_1132 = 188
            local V_1133 = V_1130.anchorX or math.floor((screenW - V_1131) * 0.5)
            local V_1134 = V_1130.anchorY or math.floor((screenH - V_1132) * 0.5)
            V_1133 = math.floor(cpClamp(V_1133, 8, math.max(8, screenW - V_1131 - 8)))
            V_1134 = math.floor(cpClamp(V_1134, 8, math.max(8, screenH - V_1132 - 8)))
            return {
                panelX = V_1133,
                panelY = V_1134,
                panelW = V_1131,
                panelH = V_1132,
                svX = V_1133 + 10,
                svY = V_1134 + 34,
                svW = V_1131 - 40,
                svH = 120,
                hueX = V_1133 + V_1131 - 22,
                hueY = V_1134 + 34,
                hueW = 12,
                hueH = 120,
                hexX = V_1133 + 10,
                hexY = V_1134 + 164,
                hexW = V_1131 - 20,
                hexH = 16,
            }
        end

        function cpCursor()
            local V_1135 = (GetControlNormal(0, 239) or 0.0) * screenW
            local V_1136 = (GetControlNormal(0, 240) or 0.0) * screenH
            if SharkAPI.GetCursorX and SharkAPI.GetCursorY then
                local V_1137, V_1138 = SharkAPI.GetCursorX(), SharkAPI.GetCursorY()
                if type(V_1137) == "number" and type(V_1138) == "number" then
                    V_1135, V_1136 = V_1137, V_1138
                end
            end
            return V_1135, V_1136
        end

        function cpInside(V_1139, V_1140, V_1141, V_1142, V_1143, V_1144)
            return V_1139 >= V_1141 and V_1139 <= V_1141 + V_1143 and V_1140 >= V_1142 and V_1140 <= V_1142 + V_1144
        end

        function Lumia.colorPicker.tick()
            local colorPicker_3 = Lumia.state.colorPicker
            if not colorPicker_3 or not colorPicker_3.open then
                return false
            end
            local currentTime_5 = GetGameTimer()
            if colorPicker_3.closing then
                return true
            end
            if currentTime_5 - (colorPicker_3.openedAt or currentTime_5) < 150 then
                return true
            end

            if SharkAPI.Drawing.SetCursorActive then
                pcall(SharkAPI.Drawing.SetCursorActive, true)
                Lumia.state._altCursorOn = true
            end

            local V_1145 = Lumia.state.colorPickerKeyDelay or 0
            if currentTime_5 > V_1145 then
                if Lumia.util.keyEdge(Lumia.keys.enter) or Lumia.util.keyEdge(0x1B) then
                    Lumia.colorPicker.close(true)
                    Lumia.state.colorPickerKeyDelay = currentTime_5 + 180
                    Lumia.state._enterNeedUp = true
                    return true
                end
                local V_1146 = Lumia.util.keyDown(0x10) and 0.02 or 0.035
                if Lumia.util.keyDown(Lumia.keys.left) then
                    colorPicker_3.h = (colorPicker_3.h - V_1146) % 1.0
                    if colorPicker_3.h < 0.0 then
                        colorPicker_3.h = colorPicker_3.h + 1.0
                    end
                    cpSync(colorPicker_3)
                    Lumia.state.colorPickerKeyDelay = currentTime_5 + 40
                elseif Lumia.util.keyDown(Lumia.keys.right) then
                    colorPicker_3.h = (colorPicker_3.h + V_1146) % 1.0
                    cpSync(colorPicker_3)
                    Lumia.state.colorPickerKeyDelay = currentTime_5 + 40
                elseif Lumia.util.keyDown(Lumia.keys.up) then
                    colorPicker_3.v = cpClamp(colorPicker_3.v + V_1146, 0.0, 1.0)
                    cpSync(colorPicker_3)
                    Lumia.state.colorPickerKeyDelay = currentTime_5 + 40
                elseif Lumia.util.keyDown(Lumia.keys.down) then
                    colorPicker_3.v = cpClamp(colorPicker_3.v - V_1146, 0.0, 1.0)
                    cpSync(colorPicker_3)
                    Lumia.state.colorPickerKeyDelay = currentTime_5 + 40
                end
            end

            local V_1147 = cpLayout(colorPicker_3)
            local V_1148, V_1149 = cpCursor()
            local V_1150 = menu.F.eagleAcLive and menu.F.eagleAcLive()
            local lmbWasHeld_1 = (SharkAPI.IsKeyPressed(0x01))
            local V_1151 = (SharkAPI.IsKeyJustPressed and SharkAPI.IsKeyJustPressed(0x01))
            if not V_1150 then
                lmbWasHeld_1 = lmbWasHeld_1 or IsDisabledControlPressed(0, 24) or IsControlPressed(0, 24)
                V_1151 = V_1151 or IsDisabledControlJustPressed(0, 24) or IsControlJustPressed(0, 24)
            end
            local V_1152 = colorPicker_3.lmbWasHeld == true
            if lmbWasHeld_1 and not V_1152 then
                V_1151 = true
            end
            local V_1153 = (not lmbWasHeld_1 and V_1152)
            if not V_1150 then
                V_1153 = V_1153 or IsDisabledControlJustReleased(0, 24) or IsControlJustReleased(0, 24)
            end

            if V_1151 or (lmbWasHeld_1 and not colorPicker_3.drag) then
                if cpInside(V_1148, V_1149, V_1147.svX, V_1147.svY, V_1147.svW, V_1147.svH) then
                    colorPicker_3.drag = "sv"
                elseif cpInside(V_1148, V_1149, V_1147.hueX - 2, V_1147.hueY, V_1147.hueW + 4, V_1147.hueH) then
                    colorPicker_3.drag = "hue"
                elseif
                    V_1151 and not cpInside(V_1148, V_1149, V_1147.panelX, V_1147.panelY, V_1147.panelW, V_1147.panelH)
                then
                    Lumia.colorPicker.close(true)
                    return true
                end
            end
            if V_1153 then
                colorPicker_3.drag = nil
            end
            colorPicker_3.lmbWasHeld = lmbWasHeld_1

            if (lmbWasHeld_1 or V_1151) and colorPicker_3.drag then
                if colorPicker_3.drag == "sv" then
                    colorPicker_3.s = cpClamp((V_1148 - V_1147.svX) / math.max(1.0, V_1147.svW), 0.0, 1.0)
                    colorPicker_3.v = cpClamp(1.0 - ((V_1149 - V_1147.svY) / math.max(1.0, V_1147.svH)), 0.0, 1.0)
                elseif colorPicker_3.drag == "hue" then
                    colorPicker_3.h = cpClamp(1.0 - ((V_1149 - V_1147.hueY) / math.max(1.0, V_1147.hueH)), 0.0, 1.0)
                end
                cpSync(colorPicker_3)
            end
            return true
        end

        function Lumia.colorPicker.draw()
            local colorPicker_4 = Lumia.state.colorPicker
            if not colorPicker_4 or not colorPicker_4.open then
                return
            end
            local currentTime_6 = GetGameTimer()
            local V_1154 = 1.0
            if colorPicker_4.closing then
                local V_1155 =
                    cpClamp((currentTime_6 - (colorPicker_4.closeStartedAt or currentTime_6)) / 155.0, 0.0, 1.0)
                local V_1156 = V_1155 * V_1155 * (3.0 - 2.0 * V_1155)
                V_1154 = 1.0 - V_1156
                if V_1155 >= 1.0 then
                    colorPicker_4.open = false
                    colorPicker_4.closing = false
                    if not Lumia.util.keyDown(0x12) and not Lumia.state._bindListWantCursor then
                        if SharkAPI.Drawing.SetCursorActive then
                            pcall(SharkAPI.Drawing.SetCursorActive, false)
                        end
                        Lumia.state._altCursorOn = false
                    end
                    return
                end
            else
                local V_1157 = cpClamp((currentTime_6 - (colorPicker_4.openedAt or currentTime_6)) / 190.0, 0.0, 1.0)
                V_1154 = 1.0 - ((1.0 - V_1157) ^ 4)
            end
            local V_1158 = cpLayout(colorPicker_4)
            local V_1159 = math.floor((colorPicker_4.slideFromX or -28) * (1.0 - V_1154))
            V_1158.panelX = V_1158.panelX + V_1159
            V_1158.svX = V_1158.svX + V_1159
            V_1158.hueX = V_1158.hueX + V_1159
            V_1158.hexX = V_1158.hexX + V_1159
            local V_1160 = V_1154

            local callback = function(V_1161)
                return math.floor((V_1161 or 255) * V_1160 + 0.5)
            end
            local V_1162, V_1163, V_1164 = cpHsvToRgb(colorPicker_4.h, 1.0, 1.0)
            local V_1165, V_1166, V_1167 = cpHsvToRgb(colorPicker_4.h, colorPicker_4.s, colorPicker_4.v)
            local panelX_1, panelY_1, panelW_1, panelH_1 = V_1158.panelX, V_1158.panelY, V_1158.panelW, V_1158.panelH
            Lumia.draw.rect(panelX_1, panelY_1, panelW_1, panelH_1, 40, 40, 44, callback(245), 8)
            Lumia.draw.rect(panelX_1 + 1, panelY_1 + 1, panelW_1 - 2, panelH_1 - 2, 28, 28, 32, callback(255), 7)
            Lumia.draw.text(
                "Color",
                panelX_1 + 12,
                panelY_1 + 10,
                Lumia.fonts.small,
                false,
                220,
                220,
                225,
                callback(255)
            )
            Lumia.draw.rect(panelX_1 + panelW_1 - 42, panelY_1 + 8, 28, 18, V_1165, V_1166, V_1167, callback(255), 4)
            Lumia.draw.rect(V_1158.svX, V_1158.svY, V_1158.svW, V_1158.svH, V_1162, V_1163, V_1164, callback(255), 4)
            SharkAPI.Drawing.DrawImage(
                "colorpicker_gradient",
                V_1158.svX + 0.0,
                V_1158.svY + 0.0,
                V_1158.svW + 0.0,
                V_1158.svH + 0.0,
                255,
                255,
                255,
                callback(255),
                4.0
            )
            local V_1168 = V_1158.svX + colorPicker_4.s * V_1158.svW
            local V_1169 = V_1158.svY + (1.0 - colorPicker_4.v) * V_1158.svH
            Lumia.draw.rect(V_1168 - 4, V_1169 - 4, 8, 8, 0, 0, 0, callback(255), 4)
            Lumia.draw.rect(V_1168 - 2, V_1169 - 2, 4, 4, 255, 255, 255, callback(255), 2)

            local state_12 = {
                { 255, 0, 0 },
                { 255, 0, 255 },
                { 0, 0, 255 },
                { 0, 255, 255 },
                { 0, 255, 0 },
                { 255, 255, 0 },
                { 255, 0, 0 },
            }
            local V_1170 = V_1158.hueH / 6.0
            for V_1171 = 1, 6 do
                local V_1172 = state_12[V_1171]
                local V_1173 = state_12[V_1171 + 1]
                if SharkAPI.Drawing.DrawGradientRect then
                    SharkAPI.Drawing.DrawGradientRect(
                        V_1158.hueX + 0.0,
                        V_1158.hueY + (V_1171 - 1) * V_1170 + 0.0,
                        V_1158.hueW + 0.0,
                        V_1170 + 1.0,
                        V_1172[1],
                        V_1172[2],
                        V_1172[3],
                        callback(255),
                        V_1173[1],
                        V_1173[2],
                        V_1173[3],
                        callback(255)
                    )
                else
                    Lumia.draw.rect(
                        V_1158.hueX,
                        V_1158.hueY + (V_1171 - 1) * V_1170,
                        V_1158.hueW,
                        V_1170 + 1,
                        V_1172[1],
                        V_1172[2],
                        V_1172[3],
                        callback(255),
                        0
                    )
                end
            end
            local V_1174 = V_1158.hueY + (1.0 - colorPicker_4.h) * V_1158.hueH
            Lumia.draw.rect(V_1158.hueX - 2, V_1174 - 2, V_1158.hueW + 4, 4, 255, 255, 255, callback(255), 2)

            local V_1175 = string.format("#%02X%02X%02X", V_1165, V_1166, V_1167)
            Lumia.draw.rect(V_1158.hexX, V_1158.hexY, V_1158.hexW, V_1158.hexH, 22, 22, 26, callback(255), 3)
            Lumia.draw.rect(
                V_1158.hexX + 3,
                V_1158.hexY + 3,
                10,
                V_1158.hexH - 6,
                V_1165,
                V_1166,
                V_1167,
                callback(255),
                2
            )
            Lumia.draw.text(
                V_1175,
                V_1158.hexX + 18,
                V_1158.hexY + 1,
                Lumia.fonts.small,
                false,
                230,
                230,
                235,
                callback(255)
            )
        end
    end

    function Lumia.layout.pinKeyboardLeft(V_1176)
        local layout_1 = Lumia.layout
        if not layout_1 then
            return
        end
        Lumia.state = Lumia.state or {}
        Lumia.state.toggles = Lumia.state.toggles or {}

        if not V_1176 and Lumia.state.toggles["ui_center"] == true then
            layout_1.center = true
            return
        end
        local V_1177 = tonumber(layout_1.w) or 370.0
        local x_1 = 48.0
        layout_1.center = false
        Lumia.state.toggles["ui_center"] = false

        if Lumia.state._menuPosUserSet and not V_1176 then
            return
        end
        layout_1.x = x_1
        Lumia.state.sliders = Lumia.state.sliders or {}
        Lumia.state.sliders["menux"] = layout_1.x
        Lumia.state._menuPosMigrated = true
    end

    function Lumia.layout.pinKeyboardRight(V_1178)
        local layout_2 = Lumia.layout
        if not layout_2 then
            return
        end
        Lumia.state = Lumia.state or {}
        Lumia.state.toggles = Lumia.state.toggles or {}

        if not V_1178 and Lumia.state.toggles["ui_center"] == true then
            layout_2.center = true
            return
        end
        local V_1179 = screenW or 1920
        local V_1180, V_1181 = GetActiveScreenResolution()
        if type(V_1180) == "number" and V_1180 > 1 then
            V_1179 = V_1180
            screenW = V_1180
        end
        local V_1182 = tonumber(layout_2.w) or 370.0
        local x_2 = math.max(20.0, V_1179 - V_1182 - 48.0)
        layout_2.center = false
        Lumia.state.toggles["ui_center"] = false

        if Lumia.state._menuPosUserSet and not V_1178 then
            return
        end
        layout_2.x = x_2
        Lumia.state.sliders = Lumia.state.sliders or {}
        Lumia.state.sliders["menux"] = layout_2.x
        Lumia.state._menuPosMigrated = true
    end

    do
        local options_38 = {}
        local V_1183 = 0

        function lumiaMeasureGlyphs(V_1184, V_1185)
            V_1184 = tostring(V_1184 or "")
            V_1185 = tonumber(V_1185) or 14
            if V_1184 == "" then
                return 0
            end
            local V_1186 = V_1184 .. "\000" .. tostring(V_1185)
            local V_1187 = options_38[V_1186]
            if V_1187 then
                return V_1187
            end
            local V_1188 = Lumia.draw and Lumia.draw.textWidth
            local V_1189 = 0
            if V_1188 then
                V_1189 = V_1188(V_1184, V_1185)
            end
            if type(V_1189) ~= "number" or V_1189 <= 0 then
                V_1189 = #V_1184 * (V_1185 * 0.45)
            end
            if V_1183 < 4096 then
                options_38[V_1186] = V_1189
                V_1183 = V_1183 + 1
            end
            return V_1189
        end
    end

    local function F_26(V_1190)
        return tostring(V_1190 or "")
    end

    local function F_27(V_1191, V_1192)
        return #tostring(V_1191 or "") * ((tonumber(V_1192) or 14) * 0.52)
    end

    local function F_28(V_1193, V_1194)
        if Lumia.state._diagNoDraw then
            return
        end
        local draw_4 = Lumia.draw
        local V_1195 = draw_4._rawRect or draw_4.rectFast or draw_4.rect
        local V_1196 = draw_4._rawText or draw_4.textFast or draw_4.text
        local V_1197 = draw_4._rawCircle
        local V_1198 = draw_4._rawImage or draw_4.image
        local V_1199 = draw_4._rawGif or draw_4.gif
        local V_1200 = draw_4._rawLine
        local V_1201 = draw_4._rawBorder
        for V_1202 = 1, V_1194 do
            local V_1203 = V_1193[V_1202]
            local V_1204 = V_1203[1]
            if V_1204 == 1 then
                V_1195(
                    V_1203[2],
                    V_1203[3],
                    V_1203[4],
                    V_1203[5],
                    V_1203[6],
                    V_1203[7],
                    V_1203[8],
                    V_1203[9],
                    V_1203[10],
                    V_1203[11]
                )
            elseif V_1204 == 2 then
                if V_1203[11] then
                    V_1196(
                        V_1203[2],
                        V_1203[3],
                        V_1203[4],
                        V_1203[5],
                        V_1203[6],
                        V_1203[7],
                        V_1203[8],
                        V_1203[9],
                        V_1203[10],
                        V_1203[11],
                        V_1203[12]
                    )
                else
                    V_1196(
                        V_1203[2],
                        V_1203[3],
                        V_1203[4],
                        V_1203[5],
                        V_1203[6],
                        V_1203[7],
                        V_1203[8],
                        V_1203[9],
                        V_1203[10]
                    )
                end
            elseif V_1204 == 3 and V_1197 then
                V_1197(
                    V_1203[2],
                    V_1203[3],
                    V_1203[4],
                    90.0,
                    1.0,
                    V_1203[5],
                    V_1203[6],
                    V_1203[7],
                    V_1203[8],
                    V_1203[9] == true
                )
            elseif V_1204 == 4 and V_1198 then
                local V_1205 = draw_4._imgFlagsOk
                if V_1203[12] ~= nil and V_1205 ~= false then
                    if V_1205 == nil then
                        V_1205 = pcall(
                            V_1198,
                            V_1203[2],
                            V_1203[3],
                            V_1203[4],
                            V_1203[5],
                            V_1203[6],
                            V_1203[7],
                            V_1203[8],
                            V_1203[9],
                            V_1203[10],
                            V_1203[11],
                            V_1203[12]
                        )
                        draw_4._imgFlagsOk = V_1205
                        if not V_1205 then
                            V_1198(
                                V_1203[2],
                                V_1203[3],
                                V_1203[4],
                                V_1203[5],
                                V_1203[6],
                                V_1203[7],
                                V_1203[8],
                                V_1203[9],
                                V_1203[10],
                                V_1203[11]
                            )
                        end
                    else
                        V_1198(
                            V_1203[2],
                            V_1203[3],
                            V_1203[4],
                            V_1203[5],
                            V_1203[6],
                            V_1203[7],
                            V_1203[8],
                            V_1203[9],
                            V_1203[10],
                            V_1203[11],
                            V_1203[12]
                        )
                    end
                else
                    V_1198(
                        V_1203[2],
                        V_1203[3],
                        V_1203[4],
                        V_1203[5],
                        V_1203[6],
                        V_1203[7],
                        V_1203[8],
                        V_1203[9],
                        V_1203[10],
                        V_1203[11]
                    )
                end
            elseif V_1204 == 5 and V_1199 then
                V_1199(
                    V_1203[2],
                    V_1203[3],
                    V_1203[4],
                    V_1203[5],
                    V_1203[6],
                    V_1203[7],
                    V_1203[8],
                    V_1203[9],
                    V_1203[10],
                    V_1203[11]
                )
            elseif V_1204 == 7 and V_1200 then
                V_1200(
                    V_1203[2],
                    V_1203[3],
                    V_1203[4],
                    V_1203[5],
                    V_1203[6],
                    V_1203[7],
                    V_1203[8],
                    V_1203[9],
                    V_1203[10]
                )
            elseif V_1204 == 8 and V_1201 then
                local V_1206 = V_1203[10] or 0
                V_1201(
                    V_1203[2],
                    V_1203[3],
                    V_1203[4],
                    V_1203[5],
                    V_1203[6],
                    V_1203[7],
                    V_1203[8],
                    V_1203[9],
                    V_1206,
                    V_1206 > 0.01 and 240 or 0,
                    V_1203[11] or 1
                )
            end
        end
    end

    local function F_29(V_1207, V_1208, V_1209, V_1210)
        local banner_2 = Lumia.banner
        local V_1211 = ""
        if banner_2 and banner_2.hasTexture == true and banner_2.fallback ~= true then
            V_1211 = tostring(banner_2.name or "")
        end
        return tostring(Lumia.state._visOptVer or 0)
            .. "|"
            .. tostring(Lumia.state._uiDrawVer or 0)
            .. "|"
            .. tostring(V_1207)
            .. "|"
            .. tostring(V_1208 or 1)
            .. "|"
            .. tostring(V_1209 or 0)
            .. "|"
            .. tostring(V_1210 or 1)
            .. "|"
            .. V_1211
    end

    local function F_30(V_1212)
        local V_1213 = Lumia.state._uiTabCache
        local V_1214 = V_1213 and V_1213[V_1212]
        if V_1214 and V_1214.list and (V_1214.n or 0) > 0 then
            return V_1214
        end
        return nil
    end

    local function F_31(V_1215, V_1216, V_1217, V_1218, V_1219)
        if not V_1215 or not V_1216 or (V_1217 or 0) <= 0 then
            return
        end
        local V_1220 = Lumia.state._uiTabCache
        if type(V_1220) ~= "table" then
            V_1220 = {}
            Lumia.state._uiTabCache = V_1220
            Lumia.state._uiTabCacheN = 0
        end
        if not V_1220[V_1215] then
            local V_1221 = (Lumia.state._uiTabCacheN or 0) + 1
            if V_1221 > 24 then
                V_1220 = {}
                Lumia.state._uiTabCache = V_1220
                V_1221 = 1
            end
            Lumia.state._uiTabCacheN = V_1221
        end
        local color_1 = nil
        if V_1218 then
            color_1 = {
                x = V_1218.x,
                cy = V_1218.cy,
                listH = V_1218.listH,
                w = V_1218.w,
                h = V_1218.h,
                rowH = V_1218.rowH,
                r = V_1218.r,
                g = V_1218.g,
                b = V_1218.b,
                a = V_1218.a,
            }
        end
        local color_2 = nil
        if V_1219 then
            color_2 = {
                trackX = V_1219.trackX,
                trackY = V_1219.trackY,
                trackW = V_1219.trackW,
                trackH = V_1219.trackH,
                thumbHClosed = V_1219.thumbHClosed,
                thumbHOpen = V_1219.thumbHOpen,
                count = V_1219.count,
                act = V_1219.act,
                tr = V_1219.tr,
                tg = V_1219.tg,
                tb = V_1219.tb,
                ta = V_1219.ta,
                r = V_1219.r,
                g = V_1219.g,
                b = V_1219.b,
                a = V_1219.a,
            }
        end
        V_1220[V_1215] = { list = V_1216, n = V_1217, sel = color_1, thumb = color_2 }
    end

    local V_1222 = false
    local V_1223 = nil

    local function F_32(V_1224, V_1225, V_1226, V_1227, V_1228, V_1229, V_1230, V_1231, V_1232, V_1233, V_1234, V_1235)
        local state_13 = Lumia.state
        if not state_13._uiRecOn then
            return
        end
        local V_1236 = (state_13._uiRecN or 0) + 1
        state_13._uiRecN = V_1236
        local V_1237 = state_13._uiRec
        local options_39 = V_1237[V_1236]
        if not options_39 then
            options_39 =
                { V_1224, V_1225, V_1226, V_1227, V_1228, V_1229, V_1230, V_1231, V_1232, V_1233, V_1234, V_1235 }
            V_1237[V_1236] = options_39
            return
        end
        options_39[1], options_39[2], options_39[3], options_39[4], options_39[5], options_39[6] =
            V_1224, V_1225, V_1226, V_1227, V_1228, V_1229
        options_39[7], options_39[8], options_39[9], options_39[10], options_39[11], options_39[12] =
            V_1230, V_1231, V_1232, V_1233, V_1234, V_1235
    end

    local function F_33()
        local state_14 = Lumia.state
        local draw_5 = Lumia.draw
        state_14._uiRec = {}
        state_14._uiRecN = 0
        state_14._uiRecOn = true
        if V_1222 then
            return
        end
        local V_1238 = {
            rectFast = draw_5.rectFast,
            rect = draw_5.rect,
            textFast = draw_5.textFast,
            text = draw_5.text,
            circleFast = draw_5.circleFast,
            circle = draw_5.circle,
            image = draw_5.image,
            gif = draw_5.gif,
            line = draw_5.line,
            border = draw_5.border,
        }
        V_1223 = V_1238

        draw_5.rectFast = function(V_1239, V_1240, V_1241, V_1242, V_1243, V_1244, V_1245, V_1246, V_1247, V_1248)
            F_32(1, V_1239, V_1240, V_1241, V_1242, V_1243, V_1244, V_1245, V_1246, V_1247, V_1248)
            return V_1238.rectFast(V_1239, V_1240, V_1241, V_1242, V_1243, V_1244, V_1245, V_1246, V_1247, V_1248)
        end
        draw_5.rect = draw_5.rectFast

        draw_5.textFast = function(
            V_1249,
            V_1250,
            V_1251,
            V_1252,
            V_1253,
            V_1254,
            V_1255,
            V_1256,
            V_1257,
            V_1258,
            V_1259
        )
            F_32(2, V_1249, V_1250, V_1251, V_1252, V_1253, V_1254, V_1255, V_1256, V_1257, V_1258, V_1259)
            return V_1238.textFast(
                V_1249,
                V_1250,
                V_1251,
                V_1252,
                V_1253,
                V_1254,
                V_1255,
                V_1256,
                V_1257,
                V_1258,
                V_1259
            )
        end

        draw_5.text = function(V_1260, V_1261, V_1262, V_1263, V_1264, V_1265, V_1266, V_1267, V_1268, V_1269, V_1270)
            F_32(2, V_1260, V_1261, V_1262, V_1263, V_1264, V_1265, V_1266, V_1267, V_1268, V_1269, V_1270)
            return V_1238.text(V_1260, V_1261, V_1262, V_1263, V_1264, V_1265, V_1266, V_1267, V_1268, V_1269, V_1270)
        end
        if V_1238.circleFast then

            draw_5.circleFast = function(V_1271, V_1272, V_1273, V_1274, V_1275, V_1276, V_1277, V_1278)
                F_32(3, V_1271, V_1272, V_1273, V_1274, V_1275, V_1276, V_1277, V_1278)
                return V_1238.circleFast(V_1271, V_1272, V_1273, V_1274, V_1275, V_1276, V_1277, V_1278)
            end
        end
        if V_1238.circle then

            draw_5.circle = function(V_1279, V_1280, V_1281, V_1282, V_1283, V_1284, V_1285, V_1286)
                F_32(3, V_1279, V_1280, V_1281, V_1282, V_1283, V_1284, V_1285, V_1286)
                return V_1238.circle(V_1279, V_1280, V_1281, V_1282, V_1283, V_1284, V_1285, V_1286)
            end
        end
        if V_1238.image then

            draw_5.image = function(
                V_1287,
                V_1288,
                V_1289,
                V_1290,
                V_1291,
                V_1292,
                V_1293,
                V_1294,
                V_1295,
                V_1296,
                V_1297
            )
                F_32(4, V_1287, V_1288, V_1289, V_1290, V_1291, V_1292, V_1293, V_1294, V_1295, V_1296, V_1297)
                return V_1238.image(
                    V_1287,
                    V_1288,
                    V_1289,
                    V_1290,
                    V_1291,
                    V_1292,
                    V_1293,
                    V_1294,
                    V_1295,
                    V_1296,
                    V_1297
                )
            end
        end
        if V_1238.gif then

            draw_5.gif = function(
                V_1298,
                V_1299,
                V_1300,
                V_1301,
                V_1302,
                V_1303,
                V_1304,
                V_1305,
                V_1306,
                V_1307,
                V_1308
            )
                return V_1238.gif(
                    V_1298,
                    V_1299,
                    V_1300,
                    V_1301,
                    V_1302,
                    V_1303,
                    V_1304,
                    V_1305,
                    V_1306,
                    V_1307,
                    V_1308
                )
            end
        end
        if V_1238.line then

            draw_5.line = function(V_1309, V_1310, V_1311, V_1312, V_1313, V_1314, V_1315, V_1316, V_1317)
                F_32(7, V_1309, V_1310, V_1311, V_1312, V_1313, V_1314, V_1315, V_1316, V_1317)
                return V_1238.line(V_1309, V_1310, V_1311, V_1312, V_1313, V_1314, V_1315, V_1316, V_1317)
            end
        end
        if V_1238.border then

            draw_5.border = function(V_1318, V_1319, V_1320, V_1321, V_1322, V_1323, V_1324, V_1325, V_1326, V_1327)
                F_32(8, V_1318, V_1319, V_1320, V_1321, V_1322, V_1323, V_1324, V_1325, V_1326, V_1327)
                return V_1238.border(V_1318, V_1319, V_1320, V_1321, V_1322, V_1323, V_1324, V_1325, V_1326, V_1327)
            end
        end
        V_1222 = true
    end

    local function F_34()
        local state_15 = Lumia.state
        local V_1328 = state_15._uiRec
        local V_1329 = state_15._uiRecN or 0
        if not V_1328 or V_1329 <= 0 then
            return
        end
        local V_1330 = 0
        for V_1331 = 1, V_1329 do
            local V_1332 = V_1328[V_1331]
            local V_1333 = V_1332[1]
            local V_1334 = true
            if V_1333 == 1 then
                if (V_1332[4] or 0) <= 0 or (V_1332[5] or 0) <= 0 or (V_1332[9] or 0) <= 0 then
                    V_1334 = false
                end
            elseif V_1333 == 2 then
                local V_1335 = V_1332[2]
                if V_1335 == nil or V_1335 == "" or (V_1332[10] or 0) <= 0 then
                    V_1334 = false
                end
            elseif V_1333 == 3 then
                if (V_1332[4] or 0) <= 0 or (V_1332[8] or 0) <= 0 then
                    V_1334 = false
                end
            elseif V_1333 == 4 or V_1333 == 5 then
                if (V_1332[5] or 0) <= 0 or (V_1332[6] or 0) <= 0 or (V_1332[10] or 0) <= 0 then
                    V_1334 = false
                end
            elseif V_1333 == 7 then
                if (V_1332[9] or 0) <= 0 then
                    V_1334 = false
                end
            elseif V_1333 == 8 then
                if (V_1332[4] or 0) <= 0 or (V_1332[5] or 0) <= 0 or (V_1332[9] or 0) <= 0 then
                    V_1334 = false
                end
            end
            if V_1334 then
                V_1330 = V_1330 + 1
                if V_1330 ~= V_1331 then
                    V_1328[V_1330] = V_1332
                end
            end
        end
        for V_1336 = V_1330 + 1, V_1329 do
            V_1328[V_1336] = nil
        end
        state_15._uiRecN = V_1330
    end

    local function F_35()
        local state_16 = Lumia.state
        state_16._uiRecOn = false
        F_34()
    end

    local function F_36(V_1337, V_1338, V_1339, V_1340, V_1341, V_1342, V_1343, V_1344, V_1345, V_1346)
        local draw_6 = Lumia.draw
        local V_1347 = draw_6.rectFast or draw_6.rect
        return V_1347(V_1337, V_1338, V_1339, V_1340, V_1341, V_1342, V_1343, V_1344, V_1345, V_1346)
    end

    local function F_37(V_1348, V_1349, V_1350, V_1351, V_1352, V_1353, V_1354, V_1355, V_1356)
        local draw_7 = Lumia.draw
        local V_1357 = draw_7.textFast or draw_7.text
        return V_1357(V_1348, V_1349, V_1350, V_1351, V_1352, V_1353, V_1354, V_1355, V_1356)
    end

    local function F_38()
        local V_1358 = Lumia.state._uiSel
        if not V_1358 then
            return
        end
        local anim_2 = Lumia.state.anim
        local V_1359 = V_1358.targetY
        local selY_1 = tonumber(anim_2.selY)
        if selY_1 == nil or selY_1 < 0 then
            selY_1 = V_1359
        elseif V_1359 and math.abs(selY_1 - V_1359) > 0.35 then
            selY_1 = Lumia.util.lerp(16, selY_1, V_1359)
            if math.abs(selY_1 - V_1359) < 0.35 then
                selY_1 = V_1359
            end
        else
            selY_1 = V_1359
        end
        if selY_1 == V_1359 and Lumia.state._uiSelNeedRecolor then
            Lumia.state._uiSelNeedRecolor = false
            Lumia.state._uiDirty = true
        end
        anim_2.selY = selY_1
        anim_2.selYTarget = V_1359
        if not selY_1 then
            return
        end
        local V_1360 = V_1358.cy
        local V_1361 = V_1358.cy + V_1358.listH - V_1358.h - 1
        if selY_1 < V_1360 then
            selY_1 = V_1360
        elseif selY_1 > V_1361 then
            selY_1 = V_1361
        end
        local draw_8 = Lumia.draw
        local V_1362 = draw_8._rawRect or draw_8.rectFast or draw_8.rect
        V_1362(V_1358.x, selY_1 + 1, V_1358.w, V_1358.h, V_1358.r, V_1358.g, V_1358.b, V_1358.a, 5, 240)
    end

    local function F_39()
        local V_1363 = Lumia.state._uiThumb
        if not V_1363 or not V_1363.trackH or V_1363.trackH < 1 then
            return
        end
        local draw_9 = Lumia.draw
        local V_1364 = draw_9._rawRect or draw_9.rectFast or draw_9.rect
        local V_1365 = Lumia.state.active
        local V_1366 = V_1365 and Lumia.state.menus[V_1365]
        local V_1367 = tonumber(V_1363.count) or 0
        local V_1368 = tonumber(V_1363.act) or 1
        if V_1366 then
            local state_17 = Lumia.state
            local V_1369 = state_17._visOptVer or 0
            local V_1370 = V_1366.activeSubTab or 1
            local V_1371 = V_1366.scroll or 0
            local V_1372 = V_1366.SelectedFeature or 1
            if
                state_17._uiThumbCount ~= nil
                and state_17._uiThumbVer == V_1369
                and state_17._uiThumbKey == V_1365
                and state_17._uiThumbSub == V_1370
                and state_17._uiThumbScr == V_1371
                and state_17._uiThumbSel == V_1372
            then
                V_1367 = state_17._uiThumbCount
                V_1368 = state_17._uiThumbAct
            else
                local V_1373 = Lumia.api.visibleOptions(V_1365)
                V_1367 = #V_1373
                if V_1367 > 0 then
                    V_1368 = Lumia.api.activeIndex(V_1366, V_1373)
                end
                state_17._uiThumbVer = V_1369
                state_17._uiThumbKey = V_1365
                state_17._uiThumbSub = V_1370
                state_17._uiThumbScr = V_1371
                state_17._uiThumbSel = V_1372
                state_17._uiThumbCount = V_1367
                state_17._uiThumbAct = V_1368
            end
        end
        V_1363.count = V_1367
        V_1363.act = V_1368
        V_1364(
            V_1363.trackX,
            V_1363.trackY,
            V_1363.trackW,
            V_1363.trackH,
            V_1363.tr or 10,
            V_1363.tg or 10,
            V_1363.tb or 12,
            V_1363.ta or 200,
            2
        )
        if V_1367 <= 0 then
            return
        end
        local anim_3 = Lumia.state.anim
        local sideThumbGrow_1 = tonumber(anim_3.sideThumbGrow)
        if sideThumbGrow_1 == nil then
            sideThumbGrow_1 = 1.0
            anim_3.sideThumbGrow = 1.0
        elseif sideThumbGrow_1 < 0.995 then
            sideThumbGrow_1 = Lumia.util.lerp(12, sideThumbGrow_1, 1.0)
            if sideThumbGrow_1 > 0.995 then
                sideThumbGrow_1 = 1.0
            end
            anim_3.sideThumbGrow = sideThumbGrow_1
        else
            sideThumbGrow_1 = 1.0
            anim_3.sideThumbGrow = 1.0
        end
        local V_1374 = 1.0 - (1.0 - sideThumbGrow_1) * (1.0 - sideThumbGrow_1)
        local V_1375 = V_1363.thumbHClosed or 16
        local V_1376 = V_1363.thumbHOpen or V_1375
        local V_1377 = V_1375 + (V_1376 - V_1375) * V_1374
        local V_1378 = (V_1367 > 1) and ((V_1368 - 1) / (V_1367 - 1)) or 0
        if V_1378 < 0 then
            V_1378 = 0
        elseif V_1378 > 1 then
            V_1378 = 1
        end
        local V_1379 = V_1363.trackY + (V_1363.trackH - V_1377) * V_1378
        local thumbY_1 = tonumber(anim_3.thumbY)
        if thumbY_1 == nil or math.abs(thumbY_1 - V_1379) < 0.35 then
            thumbY_1 = V_1379
        else
            thumbY_1 = Lumia.util.lerp(14, thumbY_1, V_1379)
            if math.abs(thumbY_1 - V_1379) < 0.35 then
                thumbY_1 = V_1379
            end
        end
        anim_3.thumbY = thumbY_1
        anim_3.thumbYTarget = V_1379
        V_1364(
            V_1363.trackX,
            thumbY_1,
            V_1363.trackW,
            V_1377,
            V_1363.r or 80,
            V_1363.g or 80,
            V_1363.b or 200,
            V_1363.a or 250,
            2
        )
    end

    local function F_40()
        local active_7 = Lumia.state.active
        local V_1380 = active_7 and Lumia.state.menus[active_7]
        local V_1381 = Lumia.state._uiSel
        if V_1381 and V_1380 then
            V_1381.targetY = V_1381.cy + ((V_1380.SelectedFeature or 1) - 1) * (V_1381.rowH or 33)
        end
        F_38()
        F_39()
        if Lumia.state.active == "Online" and Lumia.features.drawOnlinePlayerInfo then
            local V_1382 = Lumia.state._uiPos
            local V_1383 = Lumia.state._uiGeo
            if V_1382 and V_1383 and V_1383.menu == "Online" then
                pcall(Lumia.features.drawOnlinePlayerInfo, V_1382.mx, V_1382.my, V_1383.mw, V_1383.totalH)
            end
        end
    end

    function Lumia.render()
        if Lumia.state.disconnectBanScreen then
            Lumia.features.drawDisconnectBanScreen()
            return
        end
        if Lumia.skin == "nova" then
            if Lumia.colorPicker and Lumia.colorPicker.isOpen and Lumia.colorPicker.isOpen() then
                Lumia.colorPicker.draw()
            end
            return
        end
        local layout_3 = Lumia.layout
        local colors_3 = Lumia.colors
        if Lumia.open then
            Lumia.state.anim.openA = 1
        elseif (Lumia.state.anim.openA or 0) < 0.02 then
            Lumia.state.anim.openA = 0
        else
            Lumia.state.anim.openA = 0
        end
        local V_1384 = Lumia.state.anim.openA
        if V_1384 < 0.01 then
            return
        end
        if
            not Lumia.state._uiDirty
            and (Lumia.state._uiRecN or 0) > 0
            and Lumia.state.active ~= "Search"
            and not (Lumia.colorPicker and Lumia.colorPicker.isOpen and Lumia.colorPicker.isOpen())
            and not Lumia.state.kbSideCombo
            and not (menu.F.pedPreviewWanted and menu.F.pedPreviewWanted())
        then
            local V_1385 = Lumia.state.menus[Lumia.state.active]
            local V_1386 = V_1385
                and Lumia.state._uiRecAtKey == Lumia.state.active
                and Lumia.state._uiRecAtSel == (V_1385.SelectedFeature or 1)
                and Lumia.state._uiRecAtScr == (V_1385.scroll or 0)
            if V_1386 then
                if Lumia.state._diagOn then
                    Lumia.state._diagL1 = (Lumia.state._diagL1 or 0) + 1
                end
                F_28(Lumia.state._uiRec, Lumia.state._uiRecN)
                if Lumia.paintLiveBanner then
                    Lumia.paintLiveBanner()
                end
                F_40()
                return
            end
            Lumia.state._uiDirty = true
        end
        Lumia.state.anim._widgetSlide = false

        local draw_10 = Lumia.draw
        if not draw_10 or not draw_10.rect or not draw_10.text then
            return
        end
        local V_1387 = draw_10.fitText or F_26
        local V_1388 = draw_10.estWidth or F_27
        local lumiaMeasureGlyphs_1 = lumiaMeasureGlyphs
        local alpha_1 = Lumia.util.alpha
        local snap_4 = Lumia.util.snap
        if not alpha_1 or not snap_4 then
            return
        end
        local fonts_2 = Lumia.fonts
        local V_1389 = Lumia.util._now or 0
        local screenW_2, screenH_2
        if Lumia.util.getScreenRes then
            screenW_2, screenH_2 = Lumia.util.getScreenRes(Lumia.state._menuDrag and 0 or 2500)
        else
            screenW_2, screenH_2 = GetActiveScreenResolution()
        end
        if screenW_2 and screenW_2 > 0 then
            screenW, screenH = screenW_2, screenH_2
        end

        local V_1390 = Lumia.state.active
        local V_1391 = Lumia.state.menus[V_1390]
        if not V_1391 then
            return
        end
        if
            Lumia.state._uiDirty
            and V_1390 ~= "Search"
            and not (Lumia.colorPicker and Lumia.colorPicker.isOpen and Lumia.colorPicker.isOpen())
            and not Lumia.state.kbSideCombo
            and not (menu.F.pedPreviewWanted and menu.F.pedPreviewWanted())
        then
            local V_1392 = F_29(V_1390, V_1391.activeSubTab, V_1391.scroll, V_1391.SelectedFeature)
            local V_1393 = F_30(V_1392)
            if V_1393 then
                Lumia.state._uiRec = V_1393.list
                Lumia.state._uiRecN = V_1393.n
                Lumia.state._uiSel = V_1393.sel
                if V_1393.thumb then
                    Lumia.state._uiThumb = V_1393.thumb
                end
                Lumia.state._uiDirty = false
                if Lumia.state._diagOn then
                    Lumia.state._diagL2 = (Lumia.state._diagL2 or 0) + 1
                end
                F_28(V_1393.list, V_1393.n)
                if Lumia.paintLiveBanner then
                    Lumia.paintLiveBanner()
                end
                F_40()
                return
            end
        end
        local V_1394 = (V_1391 and V_1391.activeSubTab) or 1
        if Lumia.state.anim._sideGrowMenu ~= V_1390 or Lumia.state.anim._sideGrowSub ~= V_1394 then
            Lumia.state.anim._sideGrowMenu = V_1390
            Lumia.state.anim._sideGrowSub = V_1394
            Lumia.state.anim.listReveal = nil
        end

        local V_1395 = Lumia.api.visibleOptions(V_1390)
        local V_1396 = 1
        local V_1397 = #V_1395
        local V_1398 = Lumia.state._uiGeo
        local V_1399 = V_1391.activeSubTab or 1
        local V_1400 = Lumia.state._visOptVer or 0
        local V_1401 = (V_1391.subtabs and #V_1391.subtabs) or 0
        local maxRows_1, listH_1, hasSub_1, subH_1, bannerH_2, headerH_1, totalH_1, mw_2
        if
            V_1398
            and V_1398.menu == V_1390
            and V_1398.sub == V_1399
            and V_1398.count == V_1397
            and V_1398.ver == V_1400
            and V_1398.maxV == layout_3.maxVisible
            and V_1398.rowH == layout_3.rowH
            and V_1398.w == layout_3.w
            and V_1398.bH == layout_3.bannerH
            and V_1398.fH == layout_3.footerH
            and V_1398.subN == V_1401
        then
            maxRows_1, listH_1, hasSub_1, subH_1, bannerH_2, headerH_1, totalH_1, mw_2 =
                V_1398.maxRows,
                V_1398.listH,
                V_1398.hasSub,
                V_1398.subH,
                V_1398.bannerH,
                V_1398.headerH,
                V_1398.totalH,
                V_1398.mw
        else
            maxRows_1 = math.min(layout_3.maxVisible, math.max(1, V_1397))
            listH_1 = maxRows_1 * layout_3.rowH
            hasSub_1 = V_1391.subtabs and #V_1391.subtabs > 0
            subH_1 = hasSub_1 and (layout_3.subtabH or 32) or 0
            bannerH_2 = layout_3.bannerH or 96
            headerH_1 = 0
            totalH_1 = bannerH_2 + headerH_1 + subH_1 + listH_1 + layout_3.footerH
            mw_2 = layout_3.w
            Lumia.state._uiGeo = {
                menu = V_1390,
                sub = V_1399,
                count = V_1397,
                ver = V_1400,
                maxV = layout_3.maxVisible,
                rowH = layout_3.rowH,
                w = layout_3.w,
                bH = layout_3.bannerH,
                fH = layout_3.footerH,
                subN = V_1401,
                maxRows = maxRows_1,
                listH = listH_1,
                hasSub = hasSub_1,
                subH = subH_1,
                bannerH = bannerH_2,
                headerH = headerH_1,
                totalH = totalH_1,
                mw = mw_2,
            }
        end
        local V_1402 = V_1391.SelectedFeature or 1

        local V_1403 = Lumia.state.toggles and Lumia.state.toggles["ui_center"] == true
        if Lumia.state._menuDrag or Lumia.state._menuPosUserSet then
            V_1403 = false
            layout_3.center = false
            if Lumia.state.toggles then
                Lumia.state.toggles["ui_center"] = false
            end
        end

        local x_3, y_1
        local V_1404 = Lumia.state._menuPosUserSet and 1 or 0
        local V_1405 = V_1403 and 1 or 0
        local V_1406 = Lumia.state._uiPos
        if
            not Lumia.state._menuDrag
            and V_1406
            and V_1406.sw == screenW
            and V_1406.sh == screenH
            and V_1406.mw == mw_2
            and V_1406.th == totalH_1
            and V_1406.c == V_1405
            and V_1406.x == layout_3.x
            and V_1406.y == layout_3.y
            and V_1406.u == V_1404
        then
            x_3, y_1 = V_1406.mx, V_1406.my
            layout_3.center = V_1403 == true
        elseif V_1403 then
            layout_3.center = true
            x_3 = math.floor((screenW - mw_2) * 0.5 + 0.5)
            y_1 = math.floor((screenH - totalH_1) * 0.5 + 0.5)
            Lumia.state._uiPos = {
                sw = screenW,
                sh = screenH,
                mw = mw_2,
                th = totalH_1,
                c = V_1405,
                x = layout_3.x,
                y = layout_3.y,
                u = V_1404,
                mx = x_3,
                my = y_1,
            }
        else
            layout_3.center = false
            local x_4 = 48.0
            local V_1407 = math.max(20.0, screenW - mw_2 - 48.0)
            if not layout_3.x or layout_3.x < 0 then
                layout_3.x = x_4
            end
            if not layout_3.y or layout_3.y < 0 then
                layout_3.y = math.max(40.0, (screenH - totalH_1) * 0.5)
            end

            if not Lumia.state._menuPosUserSet and not Lumia.state._menuPosMigrated then
                local V_1408 = (screenW - mw_2) * 0.5
                if math.abs(layout_3.x - V_1408) < 60.0 or math.abs(layout_3.x - V_1407) < 60.0 then
                    layout_3.x = x_4
                end
                Lumia.state._menuPosMigrated = true
            end
            x_3, y_1 = layout_3.x, layout_3.y
            Lumia.state._uiPos = {
                sw = screenW,
                sh = screenH,
                mw = mw_2,
                th = totalH_1,
                c = V_1405,
                x = layout_3.x,
                y = layout_3.y,
                u = V_1404,
                mx = x_3,
                my = y_1,
            }
        end

        local V_1409 = (Lumia.util.cachedPrimary and Lumia.util.cachedPrimary()) or colors_3.primary
        Lumia.state._framePri = V_1409
        local V_1410 = V_1384
        local V_1411 = (Lumia.util.menuBgMul()) or 1.0

        x_3, y_1, mw_2 = snap_4(x_3), snap_4(y_1), snap_4(mw_2)

        local V_1412 = Lumia.colorPicker and Lumia.colorPicker.isOpen()
        local V_1413 = Lumia.util.keyDown(0x12)
        if Lumia.prompt.isActive() then
            V_1413 = false
        end
        local V_1414 = V_1413 or V_1412 or (Lumia.state._bindListWantCursor == true)
        if Lumia.state._altCursorOn ~= V_1414 then
            Lumia.state._altCursorOn = V_1414
            local drawing_2 = SharkAPI.Drawing
            if drawing_2 and drawing_2.SetCursorActive then
                drawing_2.SetCursorActive(V_1414 == true)
                if V_1414 and drawing_2.SetCursorIcon then
                    drawing_2.SetCursorIcon(0)
                end
            end
        end
        if V_1413 and not V_1412 then
            local V_1415 = (GetControlNormal(0, 239) or 0.0) * screenW
            local V_1416 = (GetControlNormal(0, 240) or 0.0) * screenH
            if SharkAPI.GetCursorX and SharkAPI.GetCursorY then
                local V_1417, V_1418 = SharkAPI.GetCursorX(), SharkAPI.GetCursorY()
                if type(V_1417) == "number" and type(V_1418) == "number" then
                    V_1415, V_1416 = V_1417, V_1418
                end
            end
            local V_1419 = IsDisabledControlPressed(0, 24) or IsControlPressed(0, 24) or (SharkAPI.IsKeyPressed(0x01))
            local V_1420 = IsDisabledControlJustPressed(0, 24)
                or IsControlJustPressed(0, 24)
                or (SharkAPI.IsKeyJustPressed(0x01))
            if not Lumia.state._playerInfoDrag or not Lumia.state._playerInfoDrag.active then
                if not (Lumia.state._bindListDrag and Lumia.state._bindListDrag.active) then
                    if
                        V_1420
                        and V_1415 >= x_3
                        and V_1415 <= x_3 + mw_2
                        and V_1416 >= y_1
                        and V_1416 <= y_1 + bannerH_2
                    then
                        Lumia.state._menuDrag = { offX = V_1415 - x_3, offY = V_1416 - y_1 }
                    end
                end
                if not V_1419 then
                    Lumia.state._menuDrag = nil
                end
                if Lumia.state._menuDrag then
                    x_3 = V_1415 - (Lumia.state._menuDrag.offX or 0)
                    y_1 = V_1416 - (Lumia.state._menuDrag.offY or 0)
                    if x_3 < 0 then
                        x_3 = 0
                    end
                    if y_1 < 0 then
                        y_1 = 0
                    end
                    if x_3 + mw_2 > screenW then
                        x_3 = screenW - mw_2
                    end
                    if y_1 + bannerH_2 > screenH then
                        y_1 = screenH - bannerH_2
                    end
                    layout_3.center = false
                    Lumia.state._menuPosUserSet = true
                    if Lumia.state.toggles then
                        Lumia.state.toggles["ui_center"] = false
                    end
                    layout_3.x, layout_3.y = x_3, y_1
                    Lumia.state.sliders = Lumia.state.sliders or {}
                    Lumia.state.sliders["menux"] = x_3
                    Lumia.state.sliders["menuy"] = y_1
                end
            end
        else
            Lumia.state._menuDrag = nil
        end
        x_3, y_1 = snap_4(x_3), snap_4(y_1)

        local V_1421 = not (Lumia.colorPicker and Lumia.colorPicker.isOpen and Lumia.colorPicker.isOpen())
            and not (menu.F.pedPreviewWanted and menu.F.pedPreviewWanted())
            and not (Lumia.state.kbSideCombo and not Lumia.state.kbSideCombo.closing)
            and V_1390 ~= "Search"
        if V_1421 then
            local anim_4 = Lumia.state.anim
            if anim_4.selY and anim_4.selYTarget and math.abs(anim_4.selY - anim_4.selYTarget) > 0.6 then
                V_1421 = false
            end
        end
        if V_1421 and (Lumia.state._uiRecN or 0) > 0 then
            local V_1422 = x_3 * 3
                + y_1 * 5
                + (V_1391.scroll or 0) * 13
                + (V_1391.SelectedFeature or 1) * 17
                + (V_1391.activeSubTab or 1) * 19
            local V_1423 = (V_1391.scroll or 0) + 1
            local toggles_2 = Lumia.state.toggles
            local sliders_1 = Lumia.state.sliders
            local combos_1 = Lumia.state.combos
            for V_1424 = V_1423, V_1423 + maxRows_1 - 1 do
                local V_1425 = V_1395[V_1424]
                if V_1425 then
                    if V_1425.radarDynamic or V_1425.onlineDynamic or V_1425.searchField then
                        V_1421 = false
                        break
                    end
                    local V_1426 = V_1425.id or V_1425.toggle or V_1425.sld
                    local V_1427 = V_1426
                        and Lumia.state.anim
                        and Lumia.state.anim.check
                        and Lumia.state.anim.check[V_1426]
                    if V_1427 and V_1427 ~= 0 and V_1427 ~= 1 then
                        V_1421 = false
                        break
                    end
                    if V_1426 then
                        if toggles_2 and toggles_2[V_1426] then
                            V_1422 = V_1422 + V_1424
                        end
                        if sliders_1 and sliders_1[V_1426] then
                            V_1422 = V_1422 + sliders_1[V_1426]
                        end
                        local V_1428 = combos_1 and combos_1[V_1426]
                        if V_1428 then
                            V_1422 = V_1422 + (V_1428.index or 0) * 23
                        end
                    end
                end
            end
            if V_1421 and Lumia.state._uiSig == V_1422 and Lumia.state._uiSigKey == V_1390 then
                if Lumia.state._diagOn then
                    Lumia.state._diagL3 = (Lumia.state._diagL3 or 0) + 1
                end
                F_28(Lumia.state._uiRec, Lumia.state._uiRecN)
                if Lumia.paintLiveBanner then
                    Lumia.paintLiveBanner()
                end
                F_40()
                return
            end
            if V_1421 then
                Lumia.state._uiSig = V_1422
                Lumia.state._uiSigKey = V_1390
            end
        end
        if Lumia.state._diagOn then
            Lumia.state._diagFull = (Lumia.state._diagFull or 0) + 1
            Lumia.state._diagFullTab = tostring(V_1390)
        end
        F_33()

        local V_1429 = true
        if Lumia.util.uiDecorLite then
            V_1429 = Lumia.util.uiDecorLite()
        end
        local radius_2 = tonumber(layout_3.radius) or 0.0
        local V_1430 = Lumia.state.sliders and Lumia.state.sliders["menu:cornerRadius"]
        if V_1430 ~= nil then
            radius_2 = tonumber(V_1430) or radius_2
            layout_3.radius = radius_2
        end
        if radius_2 < 0 then
            radius_2 = 0
        elseif radius_2 > 20 then
            radius_2 = 20
        end
        local V_1431 = 48
        local V_1432 = 192
        local V_1433 = 240
        local V_1434, V_1435, V_1436 = colors_3.bg[1] or 15, colors_3.bg[2] or 15, colors_3.bg[3] or 20
        local V_1437 = alpha_1(math.floor(255 * V_1411 + 0.5), V_1410)
        F_36(x_3, y_1, mw_2, totalH_1, V_1434, V_1435, V_1436, V_1437, 0)

        if
            Lumia.banner
            and Lumia.banner._gifHold ~= true
            and not Lumia.banner.loading
            and (not Lumia.banner.ready or Lumia.banner.fallback == true or Lumia.banner.hasTexture ~= true)
        then
            local V_1438 = V_1389
            local V_1439 = tonumber(Lumia.state._bannerUiRetryAt) or 0
            if V_1438 >= V_1439 then
                Lumia.state._bannerUiRetryAt = V_1438 + 5000
                local V_1440 = Lumia.state.allowPanelAutoBanner == true
                    and (
                        (
                            type(Lumia.state.panelBannerFile) == "string"
                            and Lumia.state.panelBannerFile:find("custom_", 1, true)
                        )
                        or (
                            type(Lumia.state.panelAutoInjectLayout) == "table"
                            and (Lumia.state.panelAutoInjectLayout.bannerFile or Lumia.state.panelAutoInjectLayout.file)
                        )
                    )
                if V_1440 and Lumia.features and Lumia.features.reapplyPanelAutoInjectBanner then
                    pcall(Lumia.features.reapplyPanelAutoInjectBanner, 0)
                else
                    if Lumia.features and Lumia.features.ensureLocalBannerBootstrap then
                        pcall(Lumia.features.ensureLocalBannerBootstrap, "ui-draw")
                    end
                    if Lumia.loadBanner then
                        pcall(Lumia.loadBanner)
                    end
                    if
                        (not Lumia.banner.ready or Lumia.banner.hasTexture ~= true)
                        and Lumia.applyBannerFallback
                        and not V_1440
                    then
                        pcall(Lumia.applyBannerFallback, tonumber(Lumia.state.bannerIndex) or 1)
                    end
                end
            end
        end

        local V_1441 = Lumia.banner
            and Lumia.banner.ready
            and Lumia.banner.hasTexture == true
            and type(Lumia.banner.name) == "string"
            and Lumia.banner.name ~= ""
            and Lumia.banner.fallback ~= true
        local V_1442 = false
        if not V_1441 then
            local V_1443 = colors_3.bannerFallback or { 10, 10, 14, 255 }
            F_36(
                x_3,
                y_1,
                mw_2,
                bannerH_2,
                V_1443[1],
                V_1443[2],
                V_1443[3],
                alpha_1(math.floor(255 * V_1411 + 0.5), V_1410),
                radius_2,
                V_1431
            )
        end
        if Lumia.banner and Lumia.banner.ready then
            local V_1444 = alpha_1(255, V_1410)
            if
                Lumia.banner.hasTexture == true
                and type(Lumia.banner.name) == "string"
                and Lumia.banner.name ~= ""
                and Lumia.banner.fallback ~= true
            then
                local V_1445 = Lumia.banner.isGif == true
                if Lumia.banner._gifChecked ~= Lumia.banner.name then
                    Lumia.banner._gifChecked = Lumia.banner.name
                    if Lumia.detectBannerIsGif then
                        local V_1446, V_1447 = pcall(Lumia.detectBannerIsGif, Lumia.banner.file, Lumia.banner.url, {})
                        if V_1446 and V_1447 == true then
                            Lumia.banner.isGif = true
                            V_1445 = true
                        end
                    end
                end
                local name_1 = Lumia.banner.name
                local V_1448 = V_1445
                    and (Lumia.banner.gifNative == true or Lumia.banner._gifReady == true)
                    and Lumia.draw.gif
                    and Lumia.state.toggles["menu:bannerAnimated"] ~= false
                if V_1448 then
                    V_1442 = Lumia.draw.gif(
                        Lumia.BANNER_GIF_TEX,
                        x_3,
                        y_1,
                        mw_2,
                        bannerH_2,
                        255,
                        255,
                        255,
                        V_1444,
                        radius_2,
                        V_1431
                    )
                end
                if
                    not V_1442
                    and Lumia.draw.image
                    and type(name_1) == "string"
                    and name_1 ~= ""
                    and name_1 ~= Lumia.BANNER_GIF_TEX
                then
                    V_1442 =
                        Lumia.draw.image(name_1, x_3, y_1, mw_2, bannerH_2, 255, 255, 255, V_1444, radius_2, V_1431)
                end
            end
        end
        if
            not V_1442
            and not (
                Lumia.banner
                and (Lumia.banner._gifHold == true or Lumia.banner._gifReady == true or Lumia.banner.gifNative == true)
            )
        then
            if Lumia.drawMenuBannerFallback then
                Lumia.drawMenuBannerFallback(x_3, y_1, mw_2, bannerH_2, V_1409, V_1410, V_1411)
            end
        end
        if
            Lumia.banner
            and Lumia.draw.gif
            and (Lumia.banner._gifHold == true or Lumia.banner._gifReady == true or Lumia.banner.gifNative == true)
        then
            local V_1449 = Lumia.banner.gifTex or Lumia.BANNER_GIF_TEX
            Lumia.draw.gif(V_1449, x_3, y_1, mw_2, bannerH_2, 255, 255, 255, alpha_1(255, V_1410), radius_2)
            V_1442 = true
        end
        local V_1450 = y_1 + bannerH_2
        local V_1451 = layout_3.pad or 14
        local V_1452 = layout_3.rightPad or 14

        if hasSub_1 then
            local V_1453 = #V_1391.subtabs
            local V_1454 = Lumia.util.clamp(V_1391.activeSubTab or 1, 1, V_1453)
            local V_1455 = 16
            local V_1456 = x_3 + V_1455
            local V_1457 = math.max(40, mw_2 - V_1455 * 2)
            local V_1458 = colors_3.subtabBg or { 12, 12, 14 }
            F_36(
                x_3,
                V_1450,
                mw_2,
                subH_1,
                V_1458[1],
                V_1458[2],
                V_1458[3],
                alpha_1(math.floor(248 * V_1411 + 0.5), V_1410),
                0
            )

            local small_1 = fonts_2.small
            local V_1459 = 14
            local V_1460 = 6
            local V_1461 = 2.0
            local V_1462 = math.min(subH_1 - 10, small_1 + V_1460 * 2)
            local V_1463 = V_1450 + (subH_1 - V_1462) * 0.5
            local V_1464 = V_1462 * 0.5

            local options_40, options_41 = {}, {}
            local V_1465 = 0
            for V_1466 = 1, V_1453 do
                local V_1467 = tostring(V_1391.subtabs[V_1466] or "")
                local V_1468 = (Lumia.draw.textWidth and Lumia.draw.textWidth(V_1467, small_1))
                    or (V_1388 and V_1388(V_1467, small_1))
                    or (#V_1467 * 6.5)
                options_40[V_1466] = math.max(32, V_1468 + V_1459 * 2)
                V_1465 = V_1465 + options_40[V_1466]
            end
            V_1465 = V_1465 + V_1461 * math.max(0, V_1453 - 1)
            if V_1465 > V_1457 then
                local V_1469 = V_1457 / V_1465
                for V_1470 = 1, V_1453 do
                    options_40[V_1470] = options_40[V_1470] * V_1469
                end
            elseif V_1465 < V_1457 and V_1453 > 0 then
                local V_1471 = (V_1457 - V_1465) / V_1453
                for V_1472 = 1, V_1453 do
                    options_40[V_1472] = options_40[V_1472] + V_1471
                end
            end
            local V_1473 = V_1456
            for V_1474 = 1, V_1453 do
                options_41[V_1474] = V_1473
                V_1473 = V_1473 + options_40[V_1474] + V_1461
            end

            local subtabDrawX_1 = options_41[V_1454] or V_1456
            local subtabDrawW_1 = options_40[V_1454] or 40
            local anim_5 = Lumia.state.anim
            anim_5.subtabDrawX = subtabDrawX_1
            anim_5.subtabDrawW = subtabDrawW_1
            anim_5._subMenuKey = V_1390
            anim_5._subIdx = V_1454
            anim_5.subtabX, anim_5.subtabW = subtabDrawX_1, subtabDrawW_1

            local V_1475, V_1476 = snap_4(subtabDrawX_1), snap_4(subtabDrawW_1)
            local V_1477 = snap_4(V_1463)

            F_36(
                V_1475,
                V_1477,
                V_1476,
                V_1462,
                V_1409[1] or 55,
                V_1409[2] or 120,
                V_1409[3] or 220,
                alpha_1(235, V_1410),
                V_1464
            )

            local V_1478 = V_1477 + (V_1462 - small_1) * 0.5
            for V_1479 = 1, V_1453 do
                local V_1480 = V_1479 == V_1454
                local V_1481 = tostring(V_1391.subtabs[V_1479] or "")
                local V_1482, V_1483, V_1484 = 130, 130, 138
                if V_1480 then
                    V_1482, V_1483, V_1484 = 255, 255, 255
                end
                local V_1485 = (options_41[V_1479] or V_1456) + (options_40[V_1479] or 40) * 0.5
                F_37(
                    V_1481,
                    V_1485,
                    V_1478,
                    small_1,
                    true,
                    V_1482,
                    V_1483,
                    V_1484,
                    alpha_1(V_1480 and 255 or 165, V_1410)
                )
            end

            if V_1414 and not Lumia.state.isBinding and not Lumia.state._menuDrag then
                local V_1486 = SharkAPI.IsKeyJustPressed and SharkAPI.IsKeyJustPressed(0x01)
                if V_1486 and SharkAPI.GetCursorX and SharkAPI.GetCursorY then
                    local V_1487 = SharkAPI.GetCursorX()
                    local V_1488 = SharkAPI.GetCursorY()
                    if
                        type(V_1487) == "number"
                        and type(V_1488) == "number"
                        and V_1488 >= V_1450
                        and V_1488 <= V_1450 + subH_1
                    then
                        local activeSubTab_2 = V_1454
                        for V_1489 = 1, V_1453 do
                            local V_1490 = options_41[V_1489] or 0
                            local V_1491 = V_1490 + (options_40[V_1489] or 0)
                            if V_1487 >= V_1490 and V_1487 <= V_1491 then
                                activeSubTab_2 = V_1489
                                break
                            end
                        end
                        if activeSubTab_2 ~= V_1454 then
                            V_1391.activeSubTab = activeSubTab_2
                            V_1391.scroll = 0
                            V_1391.SelectedFeature = 1
                            if Lumia.state.anim then
                                Lumia.state.anim.subtabDrawX = nil
                                Lumia.state.anim._subIdx = nil
                            end
                            Lumia.state._tabLabelCache = nil
                            Lumia.api.invalidateVisibleOptions()
                            if Lumia.api.beginSubTabPass then
                                Lumia.api.beginSubTabPass(activeSubTab_2 > V_1454 and 1 or -1)
                            end
                            if Lumia.sound and Lumia.sound.horiz then
                                Lumia.sound.horiz()
                            end
                        end
                    end
                end
            end
            V_1450 = V_1450 + subH_1
        elseif headerH_1 > 0 then
            local V_1492 = tostring(V_1391.title or V_1390)
            if V_1391.parent and Lumia.state.menus[V_1391.parent] then
                local V_1493 = tostring(Lumia.state.menus[V_1391.parent].title or V_1391.parent)
                V_1492 = V_1493 .. " > " .. V_1492
            end
            F_36(x_3, V_1450, mw_2, headerH_1, 12, 12, 14, alpha_1(math.floor(255 * V_1411 + 0.5), V_1410), 0)
            F_36(x_3 + 8, V_1450 + headerH_1 - 1, mw_2 - 16, 1, 255, 255, 255, alpha_1(40, V_1410), 0)
            F_37(
                V_1492,
                x_3 + mw_2 * 0.5,
                V_1450 + (headerH_1 - fonts_2.small) * 0.5,
                fonts_2.small,
                true,
                245,
                245,
                250,
                alpha_1(255, V_1410)
            )
            V_1450 = V_1450 + headerH_1
        end

        local scroll_5 = math.max(0, V_1397 - maxRows_1)
        if (V_1391.scroll or 0) > scroll_5 then
            V_1391.scroll = scroll_5
        elseif (V_1391.scroll or 0) < 0 then
            V_1391.scroll = 0
        end
        V_1396 = Lumia.api.activeIndex(V_1391, V_1395)
        V_1402 = V_1391.SelectedFeature or 1

        local selY_2 = V_1450 + (V_1402 - 1) * layout_3.rowH
        local V_1494 = tonumber(Lumia.state.anim.selY) or -1
        if V_1494 < 0 or math.abs(V_1494 - selY_2) < 0.3 then
            Lumia.state.anim.selY = selY_2
        elseif math.abs(V_1494 - selY_2) > (layout_3.rowH * 8.0) then
            if V_1494 > selY_2 then
                Lumia.state.anim.selY = selY_2 + layout_3.rowH * 2
            else
                Lumia.state.anim.selY = selY_2 - layout_3.rowH * 2
            end
            Lumia.state.anim.selY = Lumia.util.lerp(16, Lumia.state.anim.selY, selY_2)
        else
            Lumia.state.anim.selY = Lumia.util.lerp(16, V_1494, selY_2)
            if math.abs(Lumia.state.anim.selY - selY_2) < 0.3 then
                Lumia.state.anim.selY = selY_2
            end
        end
        Lumia.state.anim.selYTarget = selY_2
        Lumia.state._uiSel = {
            x = x_3 + 2,
            cy = V_1450,
            listH = listH_1,
            w = mw_2 - 4,
            h = layout_3.rowH - 2,
            rowH = layout_3.rowH,
            targetY = selY_2,
            r = V_1409[1],
            g = V_1409[2],
            b = V_1409[3],
            a = alpha_1(32, listGa),
        }
        Lumia.state.anim.scrollY = V_1391.scroll * layout_3.rowH

        local V_1495 = 0
        local V_1496 = 1

        local V_1497 = 4
        local V_1498 = V_1497
        local selPop_1 = Lumia.state.anim.selPop
        if selPop_1 and selPop_1.start then
            local V_1499 = (V_1389 - (selPop_1.start or 0)) / math.max(1, selPop_1.dur or 160)
            if V_1499 >= 1 then
                Lumia.state.anim.selPop = nil
                V_1498 = V_1497
            else
                if V_1499 < 0 then
                    V_1499 = 0
                end
                V_1498 = V_1497 * Lumia.util.easeOutCubic(V_1499)
            end
        end

        local V_1500 = V_1410 * V_1496
        local V_1501 = alpha_1(255, V_1500)
        local V_1502 = alpha_1(240, V_1500)
        local V_1503 = alpha_1(235, V_1500)
        local V_1504 = alpha_1(220, V_1500)
        local V_1505 = alpha_1(205, V_1500)
        local V_1506 = alpha_1(200, V_1500)
        local V_1507 = alpha_1(170, V_1500)
        local V_1508 = alpha_1(150, V_1500)
        local V_1509 = alpha_1(55, V_1500)

        local V_1510 = (V_1391.scroll or 0) + 1
        local toggleW_1 = (Lumia.draw.widgets and Lumia.draw.widgets.size and Lumia.draw.widgets.size.toggleW) or 34
        local toggleH_1 = (Lumia.draw.widgets and Lumia.draw.widgets.size and Lumia.draw.widgets.size.toggleH) or 16
        if V_1414 and not Lumia.state.isBinding and not Lumia.state._menuDrag then
            local V_1511 = SharkAPI.IsKeyJustPressed and SharkAPI.IsKeyJustPressed(0x01)
            if V_1511 and SharkAPI.GetCursorX and SharkAPI.GetCursorY then
                local V_1512 = SharkAPI.GetCursorX()
                local V_1513 = SharkAPI.GetCursorY()
                if
                    type(V_1512) == "number"
                    and type(V_1513) == "number"
                    and V_1512 >= x_3
                    and V_1512 <= x_3 + mw_2
                    and V_1513 >= V_1450
                    and V_1513 <= V_1450 + listH_1
                then
                    local V_1514 = math.floor((V_1513 - V_1450) / (layout_3.rowH or 28))
                    local V_1515 = V_1510 + V_1514
                    if V_1515 >= 1 and V_1515 <= V_1397 and V_1395[V_1515] and V_1395[V_1515].type ~= "divi" then
                        V_1391.SelectedFeature = V_1514 + 1
                        Lumia.api.handleSelect()
                    end
                end
            end
        end

        local V_1516 = V_1495 ~= 0
        if V_1516 then
            Lumia.draw.clipPush(x_3, V_1450, mw_2, listH_1)
        end

        for V_1517 = 0, maxRows_1 - 1 do
            local V_1518 = V_1510 + V_1517
            if V_1518 >= 1 and V_1518 <= V_1397 then
                local V_1519 = V_1395[V_1518]
                local V_1520 = V_1518 == V_1396
                local V_1521 = x_3 + V_1495 + (V_1520 and V_1498 or 0)
                local V_1522 = V_1450 + V_1517 * layout_3.rowH
                local textSel_1 = V_1520 and colors_3.textSel
                    or (V_1519.type == "divi" and colors_3.textDim or colors_3.text)
                if type(V_1519.textRgb) == "table" then
                    textSel_1 = V_1519.textRgb
                elseif type(V_1519.getTextRgb) == "function" then
                    local V_1523, V_1524 = pcall(V_1519.getTextRgb)
                    if V_1523 and type(V_1524) == "table" then
                        textSel_1 = V_1524
                    end
                end
                local V_1525 = V_1521 + V_1451
                local V_1526 = V_1522 + (layout_3.rowH - fonts_2.size) * 0.5 - 1
                local V_1527 = V_1521 + mw_2 - V_1452
                local V_1528 = V_1500

                local type_2 = V_1519.type
                local V_1529 = false
                if
                    (type_2 == "combo" or type_2 == "checkcombo")
                    and V_1519._uiValSrc
                    and V_1519._uiValShow
                    and V_1519._uiValBoxW
                then
                    local V_1530 = V_1519.id or V_1519.toggle
                    local V_1531 = V_1530 and Lumia.state.combos and Lumia.state.combos[V_1530]
                    local V_1532 = (V_1531 and V_1531.list and V_1531.list[V_1531.index]) or "..."
                    V_1529 = V_1519._uiValSrc == kbPrettyComboLabel(V_1532)
                end
                local V_1533 = type_2 ~= "divi"
                    and V_1519._uiFitLabel
                    and V_1519._uiFitSrc == V_1519.text
                    and not V_1519.searchField
                    and not V_1519.faIcons
                    and not V_1519.icon
                    and (type_2 == "button" or type_2 == "submenu" or type_2 == "checkbox" or type_2 == "checkslider")
                if V_1533 then
                    F_37(
                        V_1519._uiFitLabel,
                        V_1525,
                        V_1526,
                        fonts_2.size,
                        false,
                        textSel_1[1],
                        textSel_1[2],
                        textSel_1[3],
                        V_1501
                    )
                    if type_2 == "submenu" then
                        F_37(
                            ">>",
                            V_1527 - 18,
                            V_1526 - 1,
                            fonts_2.size,
                            false,
                            textSel_1[1],
                            textSel_1[2],
                            textSel_1[3],
                            V_1504
                        )
                    elseif type_2 == "checkbox" or type_2 == "checkslider" then
                        local V_1534 = V_1519.id or V_1519.toggle
                        if V_1534 then
                            Lumia.draw.widgets.toggle(
                                V_1527 - toggleW_1,
                                V_1522 + (layout_3.rowH - toggleH_1) * 0.5,
                                Lumia.state.toggles[V_1534] == true,
                                V_1534,
                                V_1528,
                                V_1520
                            )
                        end
                    end
                elseif
                    V_1529
                    and V_1519._uiFitLabel
                    and V_1519._uiFitSrc == V_1519.text
                    and not V_1519.faIcons
                    and not V_1519.searchField
                then
                    F_37(
                        V_1519._uiFitLabel,
                        V_1525,
                        V_1526,
                        fonts_2.size,
                        false,
                        textSel_1[1],
                        textSel_1[2],
                        textSel_1[3],
                        V_1501
                    )
                    local V_1535 = V_1519._uiValBoxW
                    local V_1536 = V_1519._uiBoxH or 22
                    local V_1537 = V_1527 - V_1535
                    if type_2 == "checkcombo" then
                        V_1537 = V_1537 - toggleW_1 - 10
                    end
                    local V_1538 = V_1522 + (layout_3.rowH - V_1536) * 0.5
                    local V_1539 = V_1520
                    F_36(
                        V_1537,
                        V_1538,
                        V_1535,
                        V_1536,
                        V_1539 and 36 or 26,
                        V_1539 and 36 or 26,
                        V_1539 and 40 or 30,
                        V_1502,
                        5
                    )
                    F_37(
                        V_1519._uiValShow,
                        V_1537 + 10,
                        V_1526,
                        fonts_2.size,
                        false,
                        V_1539 and 245 or 190,
                        V_1539 and 245 or 190,
                        V_1539 and 248 or 195,
                        V_1501
                    )
                    if type_2 == "checkcombo" then
                        local V_1540 = V_1519.id or V_1519.toggle
                        if V_1540 then
                            Lumia.draw.widgets.toggle(
                                V_1527 - toggleW_1,
                                V_1522 + (layout_3.rowH - toggleH_1) * 0.5,
                                Lumia.state.toggles[V_1540] == true,
                                V_1540,
                                V_1528,
                                V_1520
                            )
                        end
                    end
                elseif
                    type_2 == "slider"
                    and V_1519.id
                    and V_1519._uiFitLabel
                    and V_1519._uiFitSrc == V_1519.text
                    and not V_1519.faIcons
                    and not V_1519.searchField
                    and not V_1519.icon
                    and type(V_1519.closetComp) ~= "table"
                then
                    F_37(
                        V_1519._uiFitLabel,
                        V_1525,
                        V_1526,
                        fonts_2.size,
                        false,
                        textSel_1[1],
                        textSel_1[2],
                        textSel_1[3],
                        V_1501
                    )
                    local V_1541 = Lumia.state.sliders[V_1519.id] or V_1519.min or 0
                    local V_1542 = tostring(math.floor(V_1541 + 0.5))
                    local V_1543 = 32.0
                    local V_1544 = 8.0
                    local V_1545 = V_1527 - V_1543
                    local V_1546 = 84.0
                    local V_1547 = V_1545 - V_1544 - V_1546
                    local V_1548 = V_1525 + (V_1519._uiFitW or 40)
                    if V_1547 < V_1548 then
                        V_1546 = math.max(56.0, V_1545 - V_1544 - V_1548)
                        V_1547 = V_1545 - V_1544 - V_1546
                    end
                    local V_1549 = V_1519._uiValW
                    if V_1519._uiValSrc ~= V_1542 then
                        V_1549 = (V_1388 and V_1388(V_1542, fonts_2.small)) or (#V_1542 * 6)
                        V_1519._uiValSrc = V_1542
                        V_1519._uiValSize = fonts_2.small
                        V_1519._uiValW = V_1549
                    end
                    F_37(
                        V_1542,
                        V_1545 + (V_1543 - (V_1549 or 24)) * 0.5,
                        V_1526 + 1,
                        fonts_2.small,
                        false,
                        textSel_1[1],
                        textSel_1[2],
                        textSel_1[3],
                        V_1504
                    )
                    Lumia.draw.widgets.slider(
                        V_1547,
                        V_1522 + layout_3.rowH * 0.5,
                        V_1546,
                        V_1541,
                        V_1519.min or 0,
                        V_1519.max or 100,
                        V_1519.id,
                        V_1520,
                        V_1528
                    )
                elseif type_2 == "divi" then
                    if V_1519.text ~= "" then
                        local small_2 = fonts_2.small
                        local V_1550 = V_1519._divW
                        if not V_1550 or V_1519._divSrc ~= V_1519.text then
                            local V_1551 = tostring(V_1519.text or "")
                            V_1550 = (V_1388 and V_1388(V_1551, small_2)) or (#V_1551 * 7)
                            V_1519._divSrc = V_1519.text
                            V_1519._divW = V_1550
                            V_1519._divLabel = V_1551
                        end
                        local V_1552 = 12.0
                        local V_1553 = V_1522 + layout_3.rowH * 0.5
                        local V_1554 = V_1521 + mw_2 * 0.5
                        local V_1555 = V_1554 - V_1550 * 0.5 - V_1552
                        local V_1556 = V_1554 + V_1550 * 0.5 + V_1552
                        local V_1557 = V_1521 + V_1451
                        local V_1558 = V_1521 + mw_2 - V_1452
                        if V_1555 > V_1557 + 8 then
                            F_36(V_1557, V_1553, V_1555 - V_1557, 1, 255, 255, 255, alpha_1(28, V_1528), 0)
                        end
                        if V_1558 > V_1556 + 8 then
                            F_36(V_1556, V_1553, V_1558 - V_1556, 1, 255, 255, 255, alpha_1(28, V_1528), 0)
                        end
                        F_37(
                            V_1519._divLabel or V_1519.text,
                            V_1554,
                            V_1553 - small_2 * 0.5,
                            small_2,
                            true,
                            168,
                            168,
                            174,
                            V_1501
                        )
                    else
                        F_36(
                            V_1521 + V_1451,
                            V_1522 + layout_3.rowH * 0.5,
                            mw_2 - V_1451 - V_1452,
                            1,
                            255,
                            255,
                            255,
                            alpha_1(22, V_1528),
                            0
                        )
                    end
                else
                    local V_1559 = tostring(V_1519.text or "")
                    local V_1560 = false
                    local V_1561 = false
                    if V_1519.searchField then
                        local V_1562 = tostring(Lumia.state.menuSearchQuery or "")
                        V_1561 = (math.floor(V_1389 / 430) % 2) == 0
                        if V_1562 == "" then
                            V_1559 = V_1561 and "|Search..." or "Search..."
                            V_1560 = true
                            textSel_1 = colors_3.textDim or textSel_1
                        else
                            V_1559 = V_1561 and (V_1562 .. "|") or V_1562
                        end
                    end
                    if V_1519.icon == "search" and Lumia.draw.circle and Lumia.draw.line then
                        local V_1563 = V_1525 + 5
                        local V_1564 = V_1522 + layout_3.rowH * 0.5 - 1
                        Lumia.draw.circle(V_1563, V_1564, 4.0, textSel_1[1], textSel_1[2], textSel_1[3], V_1503, false)
                        Lumia.draw.line(
                            V_1563 + 3,
                            V_1564 + 3,
                            V_1563 + 7,
                            V_1564 + 7,
                            textSel_1[1],
                            textSel_1[2],
                            textSel_1[3],
                            V_1503,
                            1.5
                        )
                        V_1525 = V_1525 + 19
                    end
                    local V_1565 = V_1527 - 8
                    if
                        (V_1519.type == "checkbox" or V_1519.type == "checkslider" or V_1519.type == "checkcombo")
                        and (V_1519.id or V_1519.toggle)
                    then
                        V_1565 = V_1527 - toggleW_1 - 12
                    elseif V_1519.type == "submenu" then
                        V_1565 = V_1527 - 22
                    elseif V_1519.type == "combo" or V_1519.type == "slider" then
                        V_1565 = V_1527 - 90
                    end
                    local faIcons_1 = V_1519.faIcons
                    if V_1519.radarDynamic and V_1519.radarVeh and menu.F.radarVehicleFaIcons then
                        if (V_1519._faAt or 0) + 250 <= V_1389 then
                            faIcons_1 = menu.F.radarVehicleFaIcons(V_1519.radarVeh)
                            V_1519.faIcons = faIcons_1
                            V_1519._occ = menu.F.radarVehicleOccupied and menu.F.radarVehicleOccupied(V_1519.radarVeh)
                                or false
                            V_1519._faAt = V_1389
                        end
                    end
                    if V_1519.onlineDynamic and V_1519.id and menu.F.onlinePlayerFaIcons then
                        if (V_1519._faAt or 0) + 250 <= V_1389 then
                            local V_1566 = tonumber(tostring(V_1519.id):match("online:player:(%d+)"))
                            if V_1566 then
                                faIcons_1 = menu.F.onlinePlayerFaIcons(V_1566)
                                V_1519.faIcons = faIcons_1
                            end
                            V_1519._faAt = V_1389
                        end
                    end
                    local V_1567 = (type(faIcons_1) == "table" and #faIcons_1) or 0
                    local V_1568 = V_1567 > 0 and (V_1567 * 16 + 8) or 0
                    local V_1569 = (not V_1519.searchField) and tostring(V_1519.searchCat or "") or ""
                    local V_1570 = 0
                    if V_1569 ~= "" then
                        if V_1519._uiCatStr == V_1569 and V_1519._uiCatSize == fonts_2.small then
                            V_1570 = V_1519._uiCatW or 0
                        else
                            V_1570 = lumiaMeasureGlyphs_1(V_1569, fonts_2.small) + 10
                            V_1519._uiCatStr = V_1569
                            V_1519._uiCatSize = fonts_2.small
                            V_1519._uiCatW = V_1570
                        end
                    end
                    local V_1571 = math.max(24, V_1565 - V_1525 - V_1570 - V_1568)
                    local V_1572 = fonts_2.size
                    if not V_1519.searchField then
                        local V_1573 = Lumia.state._visOptVer or 0
                        if
                            V_1519._uiFitVer == V_1573
                            and V_1519._uiFitMax == V_1571
                            and V_1519._uiFitSrc == V_1559
                            and V_1519._uiFitSize == V_1572
                        then
                            V_1559 = V_1519._uiFitLabel or V_1559
                        else
                            if V_1387 then
                                V_1559 = V_1387(V_1559, V_1572, V_1571)
                            else
                                local V_1574 = (V_1388 and V_1388(V_1559, V_1572)) or (#V_1559 * 7)
                                if V_1574 > V_1571 and #V_1559 > 4 then
                                    local V_1575 = math.max(4, math.floor(V_1571 / 7) - 2)
                                    V_1559 = V_1559:sub(1, V_1575) .. ".."
                                end
                            end
                            V_1519._uiFitVer = V_1573
                            V_1519._uiFitMax = V_1571
                            V_1519._uiFitSrc = tostring(V_1519.text or "")
                            V_1519._uiFitSize = V_1572
                            V_1519._uiFitLabel = V_1559
                            V_1519._uiFitW = lumiaMeasureGlyphs_1(V_1559, V_1572)
                        end
                    end
                    if V_1519.searchField and Lumia.state.menuSearchSelAll and not V_1560 then
                        local V_1576 = tostring(Lumia.state.menuSearchQuery or "")
                        local V_1577 = lumiaMeasureGlyphs_1(V_1576, V_1572)
                        F_36(
                            V_1525 - 2,
                            V_1522 + 4,
                            math.max(8, V_1577 + 4),
                            layout_3.rowH - 8,
                            V_1409[1],
                            V_1409[2],
                            V_1409[3],
                            V_1509,
                            3
                        )
                    end
                    F_37(
                        V_1559,
                        V_1525,
                        V_1526,
                        V_1572,
                        false,
                        textSel_1[1],
                        textSel_1[2],
                        textSel_1[3],
                        V_1560 and V_1507 or V_1501
                    )
                    local V_1578 = V_1525 + (V_1519._uiFitW or lumiaMeasureGlyphs_1(V_1559, V_1572)) + 8
                    if V_1569 ~= "" then
                        local V_1579 = V_1578
                        if V_1579 + V_1570 <= V_1565 + 2 then
                            F_37(V_1569, V_1579, V_1526 + 1, fonts_2.small, false, 120, 120, 128, V_1506)
                            V_1578 = V_1579 + V_1570
                        end
                    end
                    if V_1567 > 0 and Lumia.draw.fa then
                        local V_1580 = V_1578
                        local V_1581 = V_1526 - 1
                        for V_1582 = 1, V_1567 do
                            local V_1583 = faIcons_1[V_1582]
                            local V_1584, V_1585, V_1586 = textSel_1[1] or 210, textSel_1[2] or 210, textSel_1[3] or 215
                            if menu.F.faIconRgb then
                                local V_1587, V_1588, V_1589 = menu.F.faIconRgb(V_1583)
                                if V_1587 then
                                    V_1584, V_1585, V_1586 = V_1587, V_1588, V_1589
                                end
                            end
                            Lumia.draw.fa(V_1583, V_1580, V_1581, 13, V_1584, V_1585, V_1586, V_1501)
                            V_1580 = V_1580 + 16
                        end
                        if V_1519.radarDynamic and V_1519._occ and Lumia.draw.circle then
                            local V_1590 = tostring(faIcons_1[1] or "")
                            local V_1591 = V_1590 == "f206" or V_1590 == "f21c"
                            local V_1592 = V_1580 + (V_1591 and 8 or 7)
                            local V_1593 = V_1581 + (V_1591 and -1 or 3)
                            Lumia.draw.circle(V_1592, V_1593, 3.6, 235, 235, 240, V_1501, true)
                            Lumia.draw.circle(V_1592, V_1593 + 8, 5.2, 235, 235, 240, V_1501, true)
                        end
                    end

                    if V_1519.type == "submenu" then
                        F_37(
                            ">>",
                            V_1527 - 18,
                            V_1526 - 1,
                            fonts_2.size,
                            false,
                            textSel_1[1],
                            textSel_1[2],
                            textSel_1[3],
                            V_1504
                        )
                    elseif V_1519.type == "checkcombo" and (V_1519.id or V_1519.toggle) then
                        local V_1594 = V_1519.id or V_1519.toggle
                        local V_1595 = Lumia.state.combos and Lumia.state.combos[V_1594]
                        local V_1596 = (V_1595 and V_1595.list and V_1595.list[V_1595.index]) or "..."
                        local V_1597 = kbPrettyComboLabel(V_1596)
                        local V_1598 = (V_1595 and V_1595.list and #V_1595.list) or 0
                        local V_1599 = Lumia.state.toggles and Lumia.state.toggles["ui:arrowCombo"] == true
                        local V_1600
                        if V_1519._uiSideArrow == V_1599 and V_1519._uiSideN == V_1598 then
                            V_1600 = V_1519._uiSide == true
                        else
                            V_1600 = Lumia.api.isKbSideComboOpt(V_1519)
                            V_1519._uiSide = V_1600
                            V_1519._uiSideArrow = V_1599
                            V_1519._uiSideN = V_1598
                        end
                        Lumia.draw.widgets.toggle(
                            V_1527 - toggleW_1,
                            V_1522 + (layout_3.rowH - toggleH_1) * 0.5,
                            Lumia.state.toggles[V_1594] == true,
                            V_1594,
                            V_1528,
                            V_1520
                        )
                        if V_1600 then
                            if V_1520 then
                                Lumia.state._kbSideComboAnchorY = V_1522
                                Lumia.state._kbSideComboAnchorH = layout_3.rowH
                            end
                            local V_1601 = V_1520 and Lumia.api.isKbSideComboOpen()
                            local V_1602 = math.max(22, math.floor(layout_3.rowH * 0.66))
                            local V_1603 = 10
                            local V_1604 = 168
                            local V_1605, V_1606, V_1607
                            if V_1519._uiValSrc == V_1597 and V_1519._uiValMax == V_1604 then
                                V_1605, V_1606, V_1607 = V_1519._uiValShow, V_1519._uiValW, V_1519._uiValBoxW
                            else
                                V_1605 = V_1387(V_1597, fonts_2.size, V_1604 - 20) or V_1597
                                V_1606 = (V_1388(V_1605, fonts_2.size)) or (#V_1605 * 8)
                                V_1607 = math.max(78, math.min(V_1604, math.floor(V_1606 + V_1603 * 2)))
                                V_1519._uiValSrc = V_1597
                                V_1519._uiValMax = V_1604
                                V_1519._uiValShow = V_1605
                                V_1519._uiValW = V_1606
                                V_1519._uiValBoxW = V_1607
                            end
                            local V_1608 = V_1527 - toggleW_1 - 10 - V_1607
                            local V_1609 = V_1522 + math.floor((layout_3.rowH - V_1602) / 2)
                            Lumia.state._kbSideComboBoxX = V_1608
                            Lumia.state._kbSideComboBoxW = V_1607
                            Lumia.state._kbSideComboBoxY = V_1609
                            Lumia.state._kbSideComboBoxH = V_1602
                            local V_1610 = V_1520 or V_1601
                            F_36(
                                V_1608,
                                V_1609,
                                V_1607,
                                V_1602,
                                V_1610 and 36 or 26,
                                V_1610 and 36 or 26,
                                V_1610 and 40 or 30,
                                V_1502,
                                5
                            )
                            local V_1611 = V_1610 and 245 or 190
                            local V_1612 = V_1610 and 245 or 190
                            local V_1613 = V_1610 and 248 or 195
                            F_37(V_1605, V_1608 + V_1603, V_1526, fonts_2.size, false, V_1611, V_1612, V_1613, V_1501)
                        else
                            if #V_1597 > 18 then
                                V_1597 = V_1597:sub(1, 16) .. ".."
                            end
                            local V_1614 = "- " .. V_1597 .. " -"
                            local V_1615 = (V_1388 and V_1388(V_1614, fonts_2.small)) or (#V_1614 * 6)
                            F_37(
                                V_1614,
                                V_1527 - toggleW_1 - 10 - V_1615,
                                V_1526 + 1,
                                fonts_2.small,
                                false,
                                textSel_1[1],
                                textSel_1[2],
                                textSel_1[3],
                                V_1504
                            )
                        end
                    elseif
                        (V_1519.type == "checkbox" or V_1519.type == "checkslider") and (V_1519.id or V_1519.toggle)
                    then
                        local V_1616 = V_1519.id or V_1519.toggle
                        Lumia.draw.widgets.toggle(
                            V_1527 - toggleW_1,
                            V_1522 + (layout_3.rowH - toggleH_1) * 0.5,
                            Lumia.state.toggles[V_1616] == true,
                            V_1616,
                            V_1528,
                            V_1520
                        )
                    elseif V_1519.type == "textbox" and (V_1519.id or V_1519.toggle) then
                        local V_1617 = V_1519.id or V_1519.toggle
                        local V_1618 = tostring((Lumia.state.textboxes and Lumia.state.textboxes[V_1617]) or "")
                        if V_1618 == "" then
                            V_1618 = "..."
                        elseif #V_1618 > 18 then
                            V_1618 = V_1618:sub(1, 16) .. ".."
                        end
                        local V_1619
                        if V_1519._uiValSrc == V_1618 and V_1519._uiValSize == fonts_2.small then
                            V_1619 = V_1519._uiValW or 24
                        else
                            V_1619 = (V_1388 and V_1388(V_1618, fonts_2.small)) or (#V_1618 * 6)
                            V_1519._uiValSrc = V_1618
                            V_1519._uiValSize = fonts_2.small
                            V_1519._uiValW = V_1619
                        end
                        F_37(
                            V_1618,
                            V_1527 - V_1619,
                            V_1526 + 1,
                            fonts_2.small,
                            false,
                            textSel_1[1],
                            textSel_1[2],
                            textSel_1[3],
                            V_1504
                        )
                    elseif V_1519.type == "combo" and (V_1519.id or V_1519.toggle) then
                        local V_1620 = V_1519.id or V_1519.toggle
                        local V_1621 = Lumia.state.combos and Lumia.state.combos[V_1620]
                        local V_1622 = (V_1621 and V_1621.list and V_1621.list[V_1621.index]) or "..."
                        local V_1623 = kbPrettyComboLabel(V_1622)
                        local V_1624 = (V_1621 and V_1621.list and #V_1621.list) or 0
                        local V_1625 = Lumia.state.toggles and Lumia.state.toggles["ui:arrowCombo"] == true
                        local V_1626
                        if V_1519._uiSideArrow == V_1625 and V_1519._uiSideN == V_1624 then
                            V_1626 = V_1519._uiSide == true
                        else
                            V_1626 = Lumia.api.isKbSideComboOpt(V_1519)
                            V_1519._uiSide = V_1626
                            V_1519._uiSideArrow = V_1625
                            V_1519._uiSideN = V_1624
                        end
                        local V_1627 = V_1519.loopToggle and string.lower(tostring(V_1622)) == "loop"

                        local V_1628 = V_1627 and 1 or 0
                        local V_1629 = (toggleW_1 + 10) * V_1628
                        if V_1626 then
                            if V_1520 then
                                Lumia.state._kbSideComboAnchorY = V_1522
                                Lumia.state._kbSideComboAnchorH = layout_3.rowH
                            end
                            local V_1630 = V_1520 and Lumia.api.isKbSideComboOpen()
                            local V_1631 = math.max(22, math.floor(layout_3.rowH * 0.68))
                            local V_1632 = 10
                            local V_1633 = 168
                            local V_1634, V_1635, V_1636
                            if V_1519._uiValSrc == V_1623 and V_1519._uiValMax == V_1633 then
                                V_1634, V_1635, V_1636 = V_1519._uiValShow, V_1519._uiValW, V_1519._uiValBoxW
                            else
                                V_1634 = V_1387(V_1623, fonts_2.size, V_1633 - 20) or V_1623
                                V_1635 = (V_1388(V_1634, fonts_2.size)) or (#V_1634 * 8)
                                V_1636 = math.max(64, math.min(V_1633, math.floor(V_1635 + V_1632 * 2)))
                                V_1519._uiValSrc = V_1623
                                V_1519._uiValMax = V_1633
                                V_1519._uiValShow = V_1634
                                V_1519._uiValW = V_1635
                                V_1519._uiValBoxW = V_1636
                            end
                            local V_1637 = V_1527 - V_1629
                            local V_1638 = V_1637 - V_1636
                            local V_1639 = V_1522 + math.floor((layout_3.rowH - V_1631) / 2)
                            Lumia.state._kbSideComboBoxX = V_1638
                            Lumia.state._kbSideComboBoxW = V_1636
                            Lumia.state._kbSideComboBoxY = V_1639
                            Lumia.state._kbSideComboBoxH = V_1631
                            local V_1640 = V_1520 or V_1630
                            F_36(
                                V_1638,
                                V_1639,
                                V_1636,
                                V_1631,
                                V_1640 and 36 or 26,
                                V_1640 and 36 or 26,
                                V_1640 and 40 or 30,
                                V_1502,
                                5
                            )
                            local V_1641 = V_1640 and 245 or 190
                            local V_1642 = V_1640 and 245 or 190
                            local V_1643 = V_1640 and 248 or 195
                            F_37(V_1634, V_1638 + V_1632, V_1526, fonts_2.size, false, V_1641, V_1642, V_1643, V_1501)
                            if V_1628 > 0.02 and V_1519.loopToggle then
                                local V_1644 = V_1527 + (1 - V_1628) * (toggleW_1 + 6)
                                Lumia.draw.widgets.toggle(
                                    V_1644 - toggleW_1,
                                    V_1522 + (layout_3.rowH - toggleH_1) * 0.5,
                                    Lumia.state.toggles[V_1519.loopToggle] == true,
                                    V_1519.loopToggle,
                                    V_1528 * V_1628,
                                    V_1520
                                )
                            end
                        else
                            if #V_1623 > 18 then
                                V_1623 = V_1623:sub(1, 16) .. ".."
                            end
                            local V_1645 = "- " .. V_1623 .. " -"
                            local V_1646 = (V_1388 and V_1388(V_1645, fonts_2.small)) or (#V_1645 * 6)
                            F_37(
                                V_1645,
                                V_1527 - V_1629 - V_1646 - 4,
                                V_1526 + 1,
                                fonts_2.small,
                                false,
                                textSel_1[1],
                                textSel_1[2],
                                textSel_1[3],
                                V_1504
                            )
                            if V_1628 > 0.02 and V_1519.loopToggle then
                                local V_1647 = V_1527 + (1 - V_1628) * (toggleW_1 + 6)
                                Lumia.draw.widgets.toggle(
                                    V_1647 - toggleW_1,
                                    V_1522 + (layout_3.rowH - toggleH_1) * 0.5,
                                    Lumia.state.toggles[V_1519.loopToggle] == true,
                                    V_1519.loopToggle,
                                    V_1528 * V_1628,
                                    V_1520
                                )
                            end
                        end
                    elseif V_1519.type == "slider" and V_1519.id then
                        local V_1648 = Lumia.state.sliders[V_1519.id] or V_1519.min or 0
                        local V_1649 = tostring(math.floor(V_1648 + 0.5))
                        if
                            type(V_1519.closetComp) == "table"
                            and Lumia.features
                            and Lumia.features.closetTextureIndex
                        then
                            local V_1650 = Lumia.features.closetTextureIndex(
                                V_1519.closetComp.id,
                                V_1519.closetComp.isProp == true
                            ) or 0
                            V_1649 = tostring(math.floor(V_1648 + 0.5)) .. "." .. tostring(math.floor(V_1650 + 0.5))
                        end
                        local V_1651 = type(V_1519.closetComp) == "table" and 42.0 or 32.0
                        local V_1652 = 8.0
                        local V_1653 = V_1527 - V_1651
                        local V_1654
                        if V_1519._uiSlideLabel == V_1519.text and V_1519._uiSlideSize == fonts_2.size then
                            V_1654 = V_1525 + (V_1519._uiSlideLabelW or 40)
                        else
                            local V_1655 = (
                                (V_1388 and V_1388(V_1519.text or "", fonts_2.size))
                                or (#tostring(V_1519.text or "") * 7)
                            ) + 10
                            V_1519._uiSlideLabel = V_1519.text
                            V_1519._uiSlideSize = fonts_2.size
                            V_1519._uiSlideLabelW = V_1655
                            V_1654 = V_1525 + V_1655
                        end

                        local V_1656 = 84.0
                        local V_1657 = V_1653 - V_1652 - V_1656
                        if V_1657 < V_1654 then
                            V_1656 = math.max(56.0, V_1653 - V_1652 - V_1654)
                            V_1657 = V_1653 - V_1652 - V_1656
                        end
                        local V_1658
                        if V_1519._uiValSrc == V_1649 and V_1519._uiValSize == fonts_2.small then
                            V_1658 = V_1519._uiValW or 24
                        else
                            V_1658 = (V_1388 and V_1388(V_1649, fonts_2.small)) or (#V_1649 * 6)
                            V_1519._uiValSrc = V_1649
                            V_1519._uiValSize = fonts_2.small
                            V_1519._uiValW = V_1658
                        end
                        F_37(
                            V_1649,
                            V_1653 + (V_1651 - V_1658) * 0.5,
                            V_1526 + 1,
                            fonts_2.small,
                            false,
                            textSel_1[1],
                            textSel_1[2],
                            textSel_1[3],
                            V_1504
                        )
                        Lumia.draw.widgets.slider(
                            V_1657,
                            V_1522 + layout_3.rowH * 0.5,
                            V_1656,
                            V_1648,
                            V_1519.min or 0,
                            V_1519.max or 100,
                            V_1519.id,
                            V_1520,
                            V_1528
                        )
                    elseif V_1519.type == "color" and (V_1519.id or V_1519.toggle) then
                        local V_1659 = V_1519.id or V_1519.toggle
                        local V_1660 = Lumia.state.colors and Lumia.state.colors[V_1659]
                        local V_1661 = V_1660.r or 255
                        local V_1662 = V_1660.g or 255
                        local V_1663 = V_1660.b or 255
                        local V_1664, V_1665 = 46.0, 16.0
                        local V_1666 = V_1527 - V_1664
                        local V_1667 = V_1522 + (layout_3.rowH - V_1665) * 0.5
                        local V_1668 = V_1520 and { 255, 255, 255 } or { 55, 55, 58 }
                        F_36(V_1666 - 1, V_1667 - 1, V_1664 + 2, V_1665 + 2, V_1668[1], V_1668[2], V_1668[3], V_1501, 5)
                        F_36(V_1666, V_1667, V_1664, V_1665, V_1661, V_1662, V_1663, V_1501, 4)
                        F_36(V_1666 + 3, V_1667 + 2, V_1664 - 16, 4, 255, 255, 255, V_1509, 2)
                        Lumia.state.colorPickerAnchors = Lumia.state.colorPickerAnchors or {}
                        Lumia.state.colorPickerAnchors[V_1659] = {
                            x = V_1521 + mw_2 + 10,
                            y = math.max(8, V_1667 - 40),
                        }
                    end
                end
            end
        end
        if V_1516 then
            Lumia.draw.clipPop()
        end

        do
            local V_1669 = 4.0
            local V_1670 = 3.0
            local V_1671 = x_3 - V_1670 - V_1669
            local V_1672 = V_1450
            local V_1673 = math.max(8, listH_1)
            local V_1674 = math.max(16, math.floor(layout_3.rowH * 0.7))
            local V_1675 = math.min(V_1673 * 0.55, math.max(V_1674 * 3.2, math.floor(layout_3.rowH * 2.6)))
            if V_1429 then
                Lumia.state.anim.sideThumbGrow = 1.0
            elseif Lumia.state.anim.sideThumbGrow == nil then
                Lumia.state.anim.sideThumbGrow = 0
            end
            Lumia.state._uiThumb = {
                trackX = V_1671,
                trackY = V_1672,
                trackW = V_1669,
                trackH = V_1673,
                thumbHClosed = V_1674,
                thumbHOpen = V_1675,
                count = V_1397,
                act = V_1396,
                tr = 10,
                tg = 10,
                tb = 12,
                ta = alpha_1(200, V_1410),
                r = V_1409[1],
                g = V_1409[2],
                b = V_1409[3],
                a = alpha_1(250, V_1410),
            }
        end

        local V_1676 = y_1 + totalH_1 - layout_3.footerH
        F_36(
            x_3,
            V_1676,
            mw_2,
            layout_3.footerH,
            colors_3.footer[1],
            colors_3.footer[2],
            colors_3.footer[3],
            alpha_1(math.floor((tonumber(colors_3.footer[4]) or 255) * V_1411 + 0.5), V_1410),
            radius_2,
            V_1432
        )

        local V_1677 = math.max(1, tonumber(V_1396) or 1)
        local V_1678 = math.max(1, V_1397)
        local V_1679 = V_1390
            .. "|"
            .. tostring(V_1677)
            .. "|"
            .. tostring(V_1678)
            .. "|"
            .. tostring(Lumia.state.menuSearchCount)
            .. "|"
            .. tostring(Lumia.state.menuSearchQuery or "")
        local V_1680 = Lumia.state._uiFoot
        local rightTxt_1
        if V_1680 and V_1680.k == V_1679 then
            rightTxt_1 = V_1680.rightTxt
        else
            rightTxt_1 = tostring(V_1677) .. " / " .. tostring(V_1678)
            if V_1390 == "Search" then
                local V_1681 = tonumber(Lumia.state.menuSearchCount) or 0
                local V_1682 = tostring(Lumia.state.menuSearchQuery or "")
                if V_1682 == "" then
                    rightTxt_1 = "type to search"
                elseif V_1681 <= 0 then
                    rightTxt_1 = "0 results"
                else
                    rightTxt_1 = tostring(V_1681) .. (V_1681 == 1 and " result" or " results")
                end
            end
            V_1680 = { k = V_1679, rightTxt = rightTxt_1 }
            Lumia.state._uiFoot = V_1680
        end
        local V_1683 = Lumia.state._footerUserName
        if V_1683 == nil or (V_1389 - (tonumber(Lumia.state._footerUserNameAt) or 0)) > 8000 then
            V_1683 = ""
            if Lumia.getSharkUsername then
                local V_1684, V_1685 = pcall(Lumia.getSharkUsername)
                if V_1684 then
                    V_1683 = tostring(V_1685 or "")
                end
            end
            if (V_1683 == "" or V_1683 == "unknown") and Lumia.panel and Lumia.panel.userName then
                local V_1686, V_1687 = pcall(Lumia.panel.userName)
                if V_1686 then
                    V_1683 = tostring(V_1687 or "")
                end
            end
            if V_1683 == "unknown" then
                V_1683 = ""
            end
            Lumia.state._footerUserName = V_1683
            Lumia.state._footerUserNameAt = V_1389
        end
        local rightW_1 = 0
        if rightTxt_1 ~= "" then
            if V_1680.rightW and V_1680.rightTxt == rightTxt_1 then
                rightW_1 = V_1680.rightW
            else
                rightW_1 = (V_1388 and V_1388(rightTxt_1, fonts_2.small)) or 40
                V_1680.rightW = rightW_1
            end
            F_37(
                rightTxt_1,
                x_3 + mw_2 - (layout_3.rightPad or 14) - rightW_1,
                V_1676 + (layout_3.footerH - fonts_2.small) * 0.5,
                fonts_2.small,
                false,
                235,
                235,
                240,
                alpha_1(255, V_1410)
            )
        end
        if type(V_1683) == "string" and V_1683 ~= "" then
            local maxUserW_1 = math.max(40, mw_2 - (layout_3.leftPad or 12) - (layout_3.rightPad or 14) - rightW_1 - 16)
            local shownUser_1
            if V_1680.user == V_1683 and V_1680.maxUserW == maxUserW_1 then
                shownUser_1 = V_1680.shownUser
            else
                shownUser_1 = V_1387 and V_1387(V_1683, fonts_2.small, maxUserW_1) or V_1683
                V_1680.user = V_1683
                V_1680.maxUserW = maxUserW_1
                V_1680.shownUser = shownUser_1
            end
            F_37(
                shownUser_1,
                x_3 + (layout_3.leftPad or 12),
                V_1676 + (layout_3.footerH - fonts_2.small) * 0.5,
                fonts_2.small,
                false,
                V_1409[1],
                V_1409[2],
                V_1409[3],
                alpha_1(230, V_1410)
            )
        end

        local V_1688 = V_1395 and V_1395[V_1396]
        local V_1689 = V_1688 and tostring(V_1688.desc or "") or ""
        if V_1689 ~= "" then
            local V_1690 = 20.0
            local V_1691 = y_1 + totalH_1 + 3.0
            F_36(x_3, V_1691, mw_2, V_1690, 12, 12, 14, alpha_1(math.floor(220 * V_1411 + 0.5), V_1410), 0)
            local V_1692 = mw_2 - 18.0
            local V_1693
            if V_1688._uiDesc == V_1689 and V_1688._uiDescMax == V_1692 then
                V_1693 = V_1688._uiDescShown or V_1689
            else
                V_1693 = V_1387(V_1689, fonts_2.small, V_1692) or V_1689
                V_1688._uiDesc = V_1689
                V_1688._uiDescMax = V_1692
                V_1688._uiDescShown = V_1693
            end
            F_37(
                V_1693,
                x_3 + 9.0,
                V_1691 + (V_1690 - fonts_2.small) * 0.5,
                fonts_2.small,
                false,
                160,
                162,
                170,
                alpha_1(230, V_1410)
            )
        end

        if Lumia.api.shouldDrawKbSideCombo() then
            local kbSideCombo_6 = Lumia.state.kbSideCombo
            local V_1694 = kbSideCombo_6.list or {}
            local V_1695 = #V_1694
            if V_1695 > 0 then
                local V_1696 = V_1389
                local V_1697 = tonumber(kbSideCombo_6.animFrom) or 0
                local openAnim_1 = tonumber(kbSideCombo_6.animTo)
                if openAnim_1 == nil then
                    openAnim_1 = kbSideCombo_6.closing and 0 or 1
                end
                local V_1698 = math.max(1, tonumber(kbSideCombo_6.animDur) or (kbSideCombo_6.closing and 160 or 150))
                local V_1699 = tonumber(kbSideCombo_6.animStart) or V_1696
                local V_1700 = math.max(0, math.min(1, (V_1696 - V_1699) / V_1698))
                local V_1701 = kbSideCombo_6.closing and (V_1700 * V_1700) or (1 - (1 - V_1700) * (1 - V_1700))
                kbSideCombo_6.openAnim = V_1697 + (openAnim_1 - V_1697) * V_1701
                if V_1700 >= 1 then
                    kbSideCombo_6.openAnim = openAnim_1
                end

                if kbSideCombo_6.closing and (V_1700 >= 1 or kbSideCombo_6.openAnim <= 0.01) then
                    Lumia.state.kbSideCombo = nil
                    Lumia.state._kbSideComboAnchorY = nil
                    Lumia.state._kbSideSelY = nil
                else
                    local V_1702 = math.max(0, math.min(1, kbSideCombo_6.openAnim))
                    local V_1703 = math.max(26, layout_3.rowH - 2)
                    local V_1704 = 6
                    local V_1705 = 6
                    local V_1706 = 14
                    local V_1707 = 11
                    local V_1708 = math.min(V_1695, V_1707)
                    local V_1709 = math.max(1, math.min(V_1695, tonumber(kbSideCombo_6.highlight) or 1))
                    local V_1710 = tonumber(kbSideCombo_6.scroll) or 0
                    local V_1711 = math.max(0, V_1695 - V_1708)
                    if V_1709 < V_1710 + 1 then
                        V_1710 = V_1709 - 1
                    elseif V_1709 > V_1710 + V_1708 then
                        V_1710 = V_1709 - V_1708
                    end
                    V_1710 = math.max(0, math.min(V_1711, V_1710))
                    kbSideCombo_6.scroll = V_1710

                    if not kbSideCombo_6.lockReady then
                        local V_1712 = tonumber(Lumia.state._kbSideComboBoxW) or 120
                        local lockW_1 = math.max(168, math.min(228, V_1712 + 48))
                        local V_1713 = 10
                        local lockH_1 = V_1704 * 2 + V_1703 * V_1708
                        local lockX_1 = x_3 + mw_2 + V_1713
                        if lockX_1 + lockW_1 > screenW - 8 then
                            lockX_1 = math.max(8, x_3 - V_1713 - lockW_1)
                        end
                        local V_1714 = Lumia.state._kbSideComboBoxY or Lumia.state._kbSideComboAnchorY or V_1450
                        local lockY_1 = V_1714 - V_1704
                        if lockY_1 + lockH_1 > screenH - 8 then
                            lockY_1 = math.max(8, screenH - 8 - lockH_1)
                        end
                        if lockY_1 < 8 then
                            lockY_1 = 8
                        end
                        kbSideCombo_6.lockX = lockX_1
                        kbSideCombo_6.lockY = lockY_1
                        kbSideCombo_6.lockW = lockW_1
                        kbSideCombo_6.lockH = lockH_1
                        kbSideCombo_6.lockReady = true
                        Lumia.state._kbSideSelY = V_1704 + (V_1709 - V_1710 - 1) * V_1703
                        kbSideCombo_6._lastScroll = V_1710
                    end

                    local lockX_2 = kbSideCombo_6.lockX
                    local lockY_2 = kbSideCombo_6.lockY
                    local lockW_2 = kbSideCombo_6.lockW
                    local lockH_2 = kbSideCombo_6.lockH
                    local V_1715 = V_1695 > V_1707
                    local V_1716 = V_1715 and 3 or 0
                    local V_1717 = lockW_2 - V_1705 * 2 - V_1706 - V_1716 - 18
                    local V_1718 = V_1702 * V_1410
                    local V_1719 = 8.0
                    local V_1720 = colors_3.bg or { 18, 18, 24, 255 }

                    Lumia.draw.border(
                        lockX_2,
                        lockY_2,
                        lockW_2,
                        lockH_2,
                        8,
                        8,
                        12,
                        alpha_1(120, V_1718),
                        V_1719 + 1,
                        2.0
                    )
                    F_36(lockX_2, lockY_2, lockW_2, lockH_2, 18, 18, 24, alpha_1(245, V_1718), V_1719)
                    F_36(
                        lockX_2 + 1,
                        lockY_2 + 1,
                        lockW_2 - 2,
                        lockH_2 - 2,
                        V_1720[1],
                        V_1720[2],
                        V_1720[3],
                        alpha_1(235, V_1718),
                        V_1719 - 1
                    )

                    local V_1721 = V_1704 + (V_1709 - V_1710 - 1) * V_1703
                    local V_1722 = Lumia.state._kbSideSelY
                    if V_1722 == nil or kbSideCombo_6._lastScroll ~= V_1710 then
                        V_1722 = V_1721
                        kbSideCombo_6._lastScroll = V_1710
                    else
                        local V_1723 = Lumia.util._dt or 0.016
                        V_1722 = V_1722 + (V_1721 - V_1722) * (1 - math.exp(-20 * V_1723))
                        if math.abs(V_1722 - V_1721) < 0.3 then
                            V_1722 = V_1721
                        end
                    end
                    Lumia.state._kbSideSelY = V_1722

                    local V_1724 = lockY_2 + V_1722
                    local V_1725 = V_1703 - 4
                    if V_1702 > 0.15 then
                        F_36(
                            lockX_2 + V_1705,
                            V_1724 + 2,
                            lockW_2 - V_1705 * 2 - V_1716,
                            V_1725,
                            36,
                            36,
                            46,
                            alpha_1(235, V_1718),
                            7.0
                        )
                    end

                    for V_1726 = 1, V_1708 do
                        local V_1727 = V_1710 + V_1726
                        if V_1727 > V_1695 then
                            break
                        end
                        local V_1728 = lockY_2 + V_1704 + (V_1726 - 1) * V_1703
                        local V_1729 = kbPrettyComboLabel(
                            (kbSideCombo_6.list and kbSideCombo_6.list[V_1727]) or ("Option " .. V_1727)
                        )
                        local V_1730 = (V_1727 == V_1709)
                        local V_1731 = V_1730 and 3 or 0
                        local V_1732 = tostring(V_1729)
                        local V_1733 = math.max(8, math.floor((V_1717 - V_1731) / 7))
                        if #V_1732 > V_1733 then
                            V_1732 = V_1732:sub(1, math.max(1, V_1733 - 2)) .. ".."
                        end
                        local V_1734 = V_1730 and 255 or 175
                        local V_1735 = V_1730 and 255 or 175
                        local V_1736 = V_1730 and 255 or 180
                        F_37(
                            V_1732,
                            lockX_2 + V_1705 + V_1706 + V_1731,
                            V_1728 + (V_1703 - fonts_2.size) * 0.5,
                            fonts_2.size,
                            false,
                            V_1734,
                            V_1735,
                            V_1736,
                            alpha_1(V_1730 and 255 or 200, V_1718)
                        )
                    end

                    if V_1715 then
                        local V_1737 = V_1703 * V_1708 - 4
                        local V_1738 = lockX_2 + lockW_2 - V_1705 - V_1716
                        local V_1739 = lockY_2 + V_1704 + 2
                        F_36(V_1738, V_1739, V_1716, V_1737, 28, 28, 34, alpha_1(150, V_1718), 2.0)
                        local V_1740 = math.max(12, V_1737 * (V_1708 / V_1695))
                        local V_1741 = V_1739 + (V_1737 - V_1740) * (V_1710 / math.max(1, V_1711))
                        F_36(V_1738, V_1741, V_1716, V_1740, 90, 90, 100, alpha_1(200, V_1718), 2.0)
                    end
                end
            end
        end

        if menu.F.pedPreviewWanted and menu.F.pedPreviewWanted() then
            local V_1742 = menu.F.pedPreviewDrawCard(x_3, y_1, mw_2, totalH_1, V_1410)
            if menu.F.pedPreviewTick then
                menu.F.pedPreviewTick(V_1742)
            end
        elseif Lumia.state.pedPreview and Lumia.state.pedPreview.entity then
            menu.F.pedPreviewStop()
        end

        Lumia.colorPicker.draw()
        F_35()
        F_40()
        Lumia.state._uiRecAtKey = V_1390
        Lumia.state._uiRecAtSel = V_1391.SelectedFeature or 1
        Lumia.state._uiRecAtScr = V_1391.scroll or 0
        local anim_6 = Lumia.state.anim

        local V_1743 = (anim_6 and anim_6._widgetSlide) and true or false
        if Lumia.state._uiFaNeedRecache then
            Lumia.state._uiFaNeedRecache = false
            Lumia.state._uiTabCache = nil
            Lumia.state._uiDrawVer = (tonumber(Lumia.state._uiDrawVer) or 0) + 1
            V_1743 = true
        end
        Lumia.state._uiDirty = V_1743
        if (not V_1743) and V_1390 ~= "Search" and (Lumia.state._uiRecN or 0) > 0 then
            F_31(
                F_29(V_1390, V_1391.activeSubTab, V_1391.scroll, V_1391.SelectedFeature),
                Lumia.state._uiRec,
                Lumia.state._uiRecN,
                Lumia.state._uiSel,
                Lumia.state._uiThumb
            )
        end
    end

    do
        local V_1744 = 0
        local options_42 = { dir = 0, startAt = 0, nextAt = 0 }
        local options_43 = { dir = 0, startAt = 0, nextAt = 0 }
        local options_44 = { dir = 0, startAt = 0, nextAt = 0 }

        local function getCurrentTime_6(V_1745)
            local V_1746 = GetGameTimer() - V_1745
            return math.max(26, 150 - math.floor(V_1746 / 11))
        end

        local function getCurrentTime_7(V_1747)
            local V_1748 = GetGameTimer() - V_1747
            return math.max(28, 100 - math.floor(V_1748 / 12))
        end

        local function getCurrentTime_8(V_1749)
            local V_1750 = GetGameTimer() - V_1749
            return math.max(70, 220 - math.floor(V_1750 / 10))
        end

        local function F_41(V_1751)
            if Lumia.api.isKbSideComboOpen() then
                return true
            end
            return V_1751
                and (
                    V_1751.type == "slider"
                    or V_1751.type == "checkslider"
                    or V_1751.type == "combo"
                    or V_1751.type == "checkcombo"
                )
        end

        local function getCurrentTime_9()
            local startAt_1 = GetGameTimer()
            local V_1752 = Lumia.util.keyDown(Lumia.keys.down)
            local V_1753 = Lumia.util.keyDown(Lumia.keys.up)
            local dir_1 = V_1752 and 1 or (V_1753 and -1 or 0)

            if dir_1 == 0 then
                options_42.dir = 0
                return
            end

            if options_42.dir ~= dir_1 then
                options_42.dir = dir_1
                options_42.startAt = startAt_1
                if dir_1 > 0 then
                    Lumia.api.handleDown()
                else
                    Lumia.api.handleUp()
                end
                Lumia.sound.nav()
                options_42.nextAt = startAt_1 + getCurrentTime_6(startAt_1)
                return
            end

            if startAt_1 >= options_42.nextAt then
                if dir_1 > 0 then
                    Lumia.api.handleDown()
                else
                    Lumia.api.handleUp()
                end
                Lumia.sound.nav()
                options_42.nextAt = startAt_1 + getCurrentTime_6(options_42.startAt)
            end
        end

        local function getCurrentTime_10()
            local V_1754 = Lumia.util.keyDown(Lumia.keys.left)
            local V_1755 = Lumia.util.keyDown(Lumia.keys.right)
            local dir_2 = V_1754 and -1 or (V_1755 and 1 or 0)
            if dir_2 == 0 then
                options_43.dir = 0
                return false
            end

            local V_1756 = Lumia.api.getSelectedOption()
            if not F_41(V_1756) then
                options_43.dir = 0
                return false
            end

            local startAt_2 = GetGameTimer()
            if options_43.dir ~= dir_2 then
                options_43.dir = dir_2
                options_43.startAt = startAt_2
                if dir_2 < 0 then
                    Lumia.api.handleLeft()
                else
                    Lumia.api.handleRight()
                end
                Lumia.sound.horiz()
                options_43.nextAt = startAt_2 + getCurrentTime_7(startAt_2)
                return true
            end

            if startAt_2 >= options_43.nextAt then
                if dir_2 < 0 then
                    Lumia.api.handleLeft()
                else
                    Lumia.api.handleRight()
                end
                Lumia.sound.horiz()
                options_43.nextAt = startAt_2 + getCurrentTime_7(options_43.startAt)
            end
            return true
        end

        local function getCurrentTime_11()
            local startAt_3 = GetGameTimer()
            local V_1757 = Lumia.util.keyDown(Lumia.keys.subLeft)
            local V_1758 = Lumia.util.keyDown(Lumia.keys.subRight)
            local dir_3 = V_1757 and -1 or (V_1758 and 1 or 0)

            if dir_3 == 0 then
                options_44.dir = 0
                return
            end

            local V_1759 = Lumia.state._eagleLive
            if not (V_1759 and V_1759.on == true) then
                DisableControlAction(0, 44, true)
                DisableControlAction(0, 38, true)
                DisableControlAction(0, 52, true)
                DisableControlAction(0, 51, true)
                DisableControlAction(0, 23, true)
                DisableControlAction(0, 75, true)
                DisableControlAction(0, 73, true)
            end

            if options_44.dir ~= dir_3 then
                options_44.dir = dir_3
                options_44.startAt = startAt_3
                if dir_3 < 0 then
                    Lumia.api.handleSubTabLeft()
                else
                    Lumia.api.handleSubTabRight()
                end
                Lumia.sound.horiz()
                options_44.nextAt = startAt_3 + getCurrentTime_8(startAt_3)
                return
            end

            if startAt_3 >= options_44.nextAt then
                if dir_3 < 0 then
                    Lumia.api.handleSubTabLeft()
                else
                    Lumia.api.handleSubTabRight()
                end
                Lumia.sound.horiz()
                options_44.nextAt = startAt_3 + getCurrentTime_8(options_44.startAt)
            end
        end

        local options_45 = { nextAt = 0 }

        local function getCurrentTime_12()
            if Lumia.state.active ~= "Search" then
                options_45.nextAt = 0
                return
            end
            if not (menu.F.eagleAcLive and menu.F.eagleAcLive()) then
                for V_1760 = 0, 2 do
                    DisableControlAction(V_1760, 30, true)
                    DisableControlAction(V_1760, 31, true)
                    DisableControlAction(V_1760, 32, true)
                    DisableControlAction(V_1760, 33, true)
                    DisableControlAction(V_1760, 34, true)
                    DisableControlAction(V_1760, 35, true)
                    DisableControlAction(V_1760, 21, true)
                    DisableControlAction(V_1760, 22, true)
                end
            end
            local currentTime_7 = GetGameTimer()
            if currentTime_7 < (tonumber(Lumia.state._searchIgnoreUntil) or 0) then
                return
            end
            local menuSearchQuery_1 = tostring(Lumia.state.menuSearchQuery or "")
            local V_1761 = 48
            local V_1762 = false

            local V_1763 = SharkAPI.IsKeyPressed
                and (SharkAPI.IsKeyPressed(0x11) or SharkAPI.IsKeyPressed(0xA2) or SharkAPI.IsKeyPressed(0xA3))
            local V_1764 = SharkAPI.IsKeyPressed
                and (SharkAPI.IsKeyPressed(0x12) or SharkAPI.IsKeyPressed(0xA4) or SharkAPI.IsKeyPressed(0xA5))
            local V_1765 = SharkAPI.IsKeyPressed
                and (SharkAPI.IsKeyPressed(0x10) or SharkAPI.IsKeyPressed(0xA0) or SharkAPI.IsKeyPressed(0xA1))

            if V_1763 and not V_1764 and Lumia.util.keyEdge(0x41) then
                Lumia.state.menuSearchSelAll = menuSearchQuery_1 ~= ""
                return
            end
            if V_1763 and not V_1764 and Lumia.util.keyEdge(0x43) then
                if Lumia.state.menuSearchSelAll and menuSearchQuery_1 ~= "" and SharkAPI.SetClipboardText then
                    pcall(SharkAPI.SetClipboardText, menuSearchQuery_1)
                end
                return
            end
            if V_1763 and not V_1764 and Lumia.util.keyEdge(0x56) then
                local V_1766 = ""
                if SharkAPI.GetClipboardText then
                    local V_1767, V_1768 = pcall(SharkAPI.GetClipboardText)
                    if V_1767 and type(V_1768) == "string" then
                        V_1766 = V_1768:gsub("[\r\n]+", " "):gsub("^%s+", ""):gsub("%s+$", "")
                    end
                end
                if V_1766 ~= "" then
                    if Lumia.state.menuSearchSelAll then
                        menuSearchQuery_1 = V_1766:sub(1, V_1761)
                    else
                        menuSearchQuery_1 = (menuSearchQuery_1 .. V_1766):sub(1, V_1761)
                    end
                    Lumia.state.menuSearchSelAll = false
                    V_1762 = true
                end
            elseif
                (V_1763 and Lumia.util.keyEdge(0x08))
                or Lumia.util.keyEdge(0x2E)
                or (Lumia.state.menuSearchSelAll and Lumia.util.keyEdge(0x08))
            then
                if menuSearchQuery_1 ~= "" then
                    menuSearchQuery_1 = ""
                    Lumia.state.menuSearchSelAll = false
                    V_1762 = true
                end
            else
                local V_1769 = Lumia.util.keyDown(0x08)
                if V_1769 and menuSearchQuery_1 ~= "" and not V_1763 then
                    if Lumia.state.menuSearchSelAll then
                        menuSearchQuery_1 = ""
                        Lumia.state.menuSearchSelAll = false
                        V_1762 = true
                        options_45.nextAt = 0
                    elseif Lumia.util.keyEdge(0x08) then
                        menuSearchQuery_1 = menuSearchQuery_1:sub(1, math.max(0, #menuSearchQuery_1 - 1))
                        V_1762 = true
                        options_45.nextAt = currentTime_7 + 220
                    elseif (options_45.nextAt or 0) > 0 and currentTime_7 >= options_45.nextAt then
                        menuSearchQuery_1 = menuSearchQuery_1:sub(1, math.max(0, #menuSearchQuery_1 - 1))
                        V_1762 = true
                        options_45.nextAt = currentTime_7 + 40
                    end
                else
                    options_45.nextAt = 0
                end
                if not V_1762 and not V_1763 and not V_1764 then
                    local pROMPT_KEY_CHARS = PROMPT_KEY_CHARS
                    if type(pROMPT_KEY_CHARS) == "table" then
                        local V_1770 = Lumia.state.promptCapsLock == true
                        for V_1771 = 1, #pROMPT_KEY_CHARS do
                            local V_1772 = pROMPT_KEY_CHARS[V_1771]
                            local V_1773, V_1774, V_1775 = V_1772[1], V_1772[2], V_1772[3]
                            if V_1773 ~= 0x08 and Lumia.util.keyEdge(V_1773) then
                                local V_1776 = V_1774
                                local V_1777 = type(V_1774) == "string"
                                    and #V_1774 == 1
                                    and V_1774:match("^[a-z]$") ~= nil
                                if V_1777 then
                                    local V_1778 = (V_1770 and not V_1765) or (not V_1770 and V_1765)
                                    V_1776 = V_1778 and (V_1775 or V_1774:upper()) or V_1774
                                elseif V_1765 then
                                    V_1776 = V_1775 or V_1774
                                end
                                if type(V_1776) == "string" and V_1776 ~= "" then
                                    if Lumia.state.menuSearchSelAll then
                                        menuSearchQuery_1 = V_1776
                                        Lumia.state.menuSearchSelAll = false
                                    elseif #menuSearchQuery_1 < V_1761 then
                                        menuSearchQuery_1 = menuSearchQuery_1 .. V_1776
                                    end
                                    V_1762 = true
                                end
                                break
                            end
                        end
                    end
                end
            end

            if V_1762 then
                Lumia.state.menuSearchQuery = menuSearchQuery_1
                Lumia.state.menuSearchSelAll = false
                if menu.F.refreshSearchResults then
                    menu.F.refreshSearchResults()
                end
            end
        end

        function Lumia.tickInput()
            Lumia.state.anim.openA = Lumia.open and 1 or 0

            if Lumia.state.isBinding then
                return
            end

            local V_1779 = Lumia.state._menuToggleSeq or 0
            if GetGameTimer() < (Lumia.state._keepMenuUntil or 0) then
                Lumia.state._menuToggleSeen = V_1779
            elseif V_1779 ~= (Lumia.state._menuToggleSeen or 0) then
                if GetGameTimer() < (Lumia.state._suppressMenuToggleUntil or 0) then
                elseif Lumia.state.playerCountBlocked then
                    Lumia.state._menuToggleSeen = V_1779
                    if Lumia.state.playerCountWarningPending then
                        Lumia.state.playerCountWarningPending = false
                        local V_1780 = tonumber(Lumia.INJECT_MIN_PLAYERS) or 15
                        Lumia.notify.error(
                            "Menu access is blocked until the server has at least " .. tostring(V_1780) .. " players.",
                            120000
                        )
                        Lumia.f8("[Lumia] toggle blocked: playerCountBlocked=true")
                    end
                else
                    Lumia.state._menuToggleSeen = V_1779
                    if Lumia.prompt.isActive() then
                        Lumia.prompt.close(false)
                    end
                    if Lumia.colorPicker.isOpen() then
                        Lumia.colorPicker.close(true)
                    end
                    Lumia.open = not Lumia.open
                    Lumia.state._userWantsOpen = Lumia.open
                    Lumia.state._uiDirty = true
                    if menu.F.eagleSyncPauseMenuHook then
                        pcall(menu.F.eagleSyncPauseMenuHook)
                    end
                    if Lumia.open and not Lumia.state._menusRegistered then
                        Lumia.state._menusRegistered = true
                        pcall(Lumia.features.registerAll)
                    end
                    if Lumia.features.armMenuToggleGuard then
                        Lumia.features.armMenuToggleGuard(320)
                    end
                    if Lumia.open then
                        if not Lumia.state._menuPosUserSet then
                            Lumia.layout.pinKeyboardLeft(false)
                        end
                        Lumia.state.anim.selY = -1
                        Lumia.state.anim.scrollY = 0
                        V_1744 = GetGameTimer() + 180
                        Lumia.sound.open()
                    else
                        Lumia.api.closeKbSideCombo(true)
                        Lumia.sound.close()
                    end
                end
            end

            if Lumia.prompt.isActive() then
                Lumia.prompt.tick()
                return
            end

            if
                not Lumia.open
                and Lumia.features.blockMenuTaskCancelInput
                and Lumia.features.menuToggleGuardActive
                and Lumia.features.menuToggleGuardActive()
            then
                Lumia.features.blockMenuTaskCancelInput()
            end

            if not Lumia.open then
                return
            end

            local V_1781 = menu.F.eagleAcLive and menu.F.eagleAcLive()

            if
                Lumia.features.blockMenuCombatInput
                and (not Lumia.state.toggles or Lumia.state.toggles["menu:blockinput"] ~= false)
            then
                Lumia.features.blockMenuCombatInput()
            end

            if Lumia.colorPicker.tick() then
                return
            end

            if Lumia.skin == "nova" then
                return
            end

            if not V_1781 then
                DisableControlAction(0, 47, true)
                DisableControlAction(0, 81, true)
                DisableControlAction(0, 82, true)
            end

            local currentTime_8 = GetGameTimer()

            if Lumia.state.active == "Search" then
                if not V_1781 then
                    DisableControlAction(0, 30, true)
                    DisableControlAction(0, 31, true)
                    DisableControlAction(0, 32, true)
                    DisableControlAction(0, 33, true)
                    DisableControlAction(0, 34, true)
                    DisableControlAction(0, 35, true)
                    DisableControlAction(0, 21, true)
                    DisableControlAction(0, 22, true)
                    DisableControlAction(0, 36, true)
                end
                getCurrentTime_12()
            else
                getCurrentTime_11()
            end

            getCurrentTime_9()
            getCurrentTime_10()

            if Lumia.util.keyEdge(0x78) and currentTime_8 > V_1744 then
                local V_1782 = Lumia.api.getSelectedOption()
                if V_1782 and V_1782.type ~= "divi" and V_1782.type ~= "submenu" then
                    Lumia.binds.start(V_1782)
                    V_1744 = currentTime_8 + 200
                end
            end

            if Lumia.state._enterNeedUp then
                if not Lumia.util.keyDown(Lumia.keys.enter) then
                    Lumia.state._enterNeedUp = false
                end
            elseif Lumia.util.keyEdge(Lumia.keys.enter) and currentTime_8 > V_1744 then
                local V_1783 = Lumia.api.getSelectedOption()
                local V_1784 = V_1783
                    and (V_1783.type == "checkbox" or V_1783.type == "checkslider" or V_1783.type == "checkcombo")
                V_1744 = currentTime_8 + (V_1784 and 220 or 120)
                Lumia.state._enterNeedUp = true
                Lumia.sound.select()
                Lumia.api.handleSelect()
            end

            if Lumia.state._backNeedUp then
                if not Lumia.util.keyDown(Lumia.keys.back) then
                    Lumia.state._backNeedUp = false
                end
            elseif Lumia.util.keyEdge(Lumia.keys.back) and currentTime_8 > V_1744 then
                V_1744 = currentTime_8 + 150
                Lumia.state._backNeedUp = true
                Lumia.sound.back()
                local V_1785 = Lumia.api.goBack()
                if not V_1785 then
                    Lumia.open = false
                    Lumia.state._userWantsOpen = false
                    if menu.F.eagleSyncPauseMenuHook then
                        pcall(menu.F.eagleSyncPauseMenuHook)
                    end
                end
            end
        end
    end
end

Lumia.features = Lumia.features or {}

function toVec3(x_5, y_2, z_1)
    if type(x_5) == "vector3" then
        return x_5
    end
    if type(x_5) == "table" and x_5.x then
        y_2, z_1 = x_5.y, x_5.z
        x_5 = x_5.x
    end
    return vector3((tonumber(x_5) or 0.0) + 0.0, (tonumber(y_2) or 0.0) + 0.0, (tonumber(z_1) or 0.0) + 0.0)
end

function Lumia.features.syncForceEntityControl(entity_6, V_1786)
    if not entity_6 or entity_6 == 0 or not DoesEntityExist(entity_6) then
        return false
    end
    local syncTree = SharkAPI.SyncTree
    if syncTree.ForceEntityControl then
        local V_1787 = pcall(syncTree.ForceEntityControl, entity_6, V_1786 and true or false)
        return V_1787
    end
    if V_1786 and NetworkRequestControlOfEntity then
        NetworkRequestControlOfEntity(entity_6)
    end
    return false
end

function Lumia.features.bringVehicleTo(entity_7, V_1788, V_1789, V_1790, V_1791)
    if not entity_7 or entity_7 == 0 or not DoesEntityExist(entity_7) then
        return false
    end
    Lumia.features.syncForceEntityControl(entity_7, true)
    SetEntityCoords(entity_7, V_1788 + 0.0, V_1789 + 0.0, V_1790 + 0.0, false, false, false, false)
    if V_1791 ~= nil then
        SetEntityHeading(entity_7, V_1791 + 0.0)
    end
    if SetVehicleOnGroundProperly then
        SetVehicleOnGroundProperly(entity_7)
    end
    Lumia.features.syncForceEntityControl(entity_7, false)
    return true
end

function Lumia.features.syncSpoofServerCamera(V_1792)
    local V_1793 = SharkAPI and SharkAPI.SyncTree
    if not V_1793 or type(V_1793.SpoofServerCamera) ~= "function" then
        return false
    end
    local V_1794 = false
    if V_1792 ~= true then
        local V_1795 = Lumia.state.toggles or {}
        local V_1796 = (V_1795["fReecam"] == true) or (Lumia.state.freecam and Lumia.state.freecam.active == true)
        local V_1797 = (V_1795["Spectate"] == true)
            or (V_1795["SpectateSelectedVehicle"] == true)
            or (Lumia.state._wsSpectateCamBypass == true)
            or (Lumia.state._spectateBypassHooks == true)
        V_1794 = V_1796 or V_1797
    end
    if Lumia.state._spoofServerCameraOn == V_1794 then
        return V_1794
    end
    Lumia.state._spoofServerCameraOn = V_1794
    pcall(V_1793.SpoofServerCamera, V_1794 and true or false)
    return V_1794
end

function Lumia.features.spoofServerCoords(V_1798, V_1799, V_1800, V_1801)
    V_1800 = V_1800 or "default"
    local syncTree_1 = SharkAPI.SyncTree
    if not syncTree_1 or type(syncTree_1.SpoofServerCoords) ~= "function" then
        return false
    end
    if V_1798 then
        local V_1802 = toVec3(V_1799 or GetEntityCoords(PlayerPedId()))
        local V_1803 = tonumber(V_1801)
        if V_1803 == nil then
            V_1803 = GetEntityHeading(PlayerPedId()) + 0.0
        end
        Lumia.state._spoofCoordsOwner = V_1800
        Lumia.state._spoofCoordsAnchor = V_1802
        Lumia.state._spoofHeadingAnchor = V_1803
        local V_1804 = pcall(syncTree_1.SpoofServerCoords, true, V_1802)
        if not V_1804 then
            pcall(syncTree_1.SpoofServerCoords, true, vector3(V_1802.x + 0.0, V_1802.y + 0.0, V_1802.z + 0.0))
        end
        if syncTree_1.SpoofServerHeading then
            pcall(syncTree_1.SpoofServerHeading, true, V_1803)
        end
        return true
    end
    if Lumia.state._spoofCoordsOwner and Lumia.state._spoofCoordsOwner ~= V_1800 then
        return false
    end
    Lumia.state._spoofCoordsOwner = nil
    Lumia.state._spoofCoordsAnchor = nil
    pcall(syncTree_1.SpoofServerCoords, false)
    if syncTree_1.SpoofServerHeading then
        pcall(syncTree_1.SpoofServerHeading, false)
    end
    return true
end

function Lumia.features.withKickDesync(V_1805)
    if type(V_1805) ~= "function" then
        return nil
    end

    return V_1805()
end

function Lumia.features.refreshSpoofCoords(V_1806)
    if Lumia.state._spoofCoordsOwner ~= V_1806 then
        return
    end
    local V_1807 = Lumia.state._spoofCoordsAnchor
    if not V_1807 then
        return
    end
    local syncTree_2 = SharkAPI.SyncTree
    if not syncTree_2 or type(syncTree_2.SpoofServerCoords) ~= "function" then
        return
    end
    local V_1808 = toVec3(V_1807)
    local V_1809 = pcall(syncTree_2.SpoofServerCoords, true, V_1808)
    if not V_1809 then
        pcall(syncTree_2.SpoofServerCoords, true, vector3(V_1808.x + 0.0, V_1808.y + 0.0, V_1808.z + 0.0))
    end
end

SOLO_OCEAN_WPS = {
    { x = -3426.0, y = 967.0, z = 0.0 },
    { x = -2200.0, y = 5200.0, z = 0.0 },
    { x = 2500.0, y = 6800.0, z = 0.0 },
    { x = 4200.0, y = 1500.0, z = 0.0 },
    { x = 3800.0, y = -2500.0, z = 0.0 },
    { x = 1200.0, y = -3200.0, z = 0.0 },
    { x = -1800.0, y = -2800.0, z = 0.0 },
    { x = -3200.0, y = -800.0, z = 0.0 },
}

function soloOceanWaterZ(V_1810, V_1811, V_1812)
    V_1812 = (V_1812 or 0.0) + 0.0
    if GetWaterHeight then
        local V_1813, V_1814 = GetWaterHeight(V_1810 + 0.0, V_1811 + 0.0, V_1812)
        if V_1813 and V_1814 then
            return V_1814 + 0.0
        end
    end
    return V_1812
end

function soloNetworkFlyZ(V_1815, V_1816, V_1817, V_1818)
    return soloOceanWaterZ(V_1815, V_1816, V_1818) + ((tonumber(V_1817) or 0.0) + 0.0)
end

function Lumia.features.stopSoloNetworkSpoof(V_1819)
    local V_1820 = Lumia.state._soloNet
    if V_1820 and (not V_1819 or V_1820.owner == V_1819) then
        Lumia.state._soloNet = nil
        Lumia.features.spoofServerCoords(false, nil, V_1820.owner)
        return true
    end
    if V_1819 then
        Lumia.features.spoofServerCoords(false, nil, V_1819)
    end
    return false
end

function Lumia.features.startSoloNetworkSpoof(V_1821)
    V_1821 = V_1821 or {}
    local V_1822 = tostring(V_1821.owner or "solo")
    Lumia.features.stopSoloNetworkSpoof(V_1822)
    if Lumia.state._spoofCoordsOwner and Lumia.state._spoofCoordsOwner ~= V_1822 then
        Lumia.features.spoofServerCoords(false, nil, Lumia.state._spoofCoordsOwner)
    end

    local V_1823 = tonumber(V_1821.networkFlyAlt) or 0.0
    local V_1824 = tonumber(V_1821.wanderSpeed) or 360.0
    local V_1825 = SOLO_OCEAN_WPS[1]
    local V_1826 = soloNetworkFlyZ(V_1825.x, V_1825.y, V_1823, V_1825.z)
    Lumia.state._soloNet = {
        owner = V_1822,
        networkPos = { x = V_1825.x, y = V_1825.y, z = V_1826 },
        oceanIndex = 2,
        oceanLegOffset = {
            x = (math.random() - 0.5) * 700.0,
            y = (math.random() - 0.5) * 700.0,
        },
        wanderSpeed = V_1824,
        networkFlyAlt = V_1823,
        tickGuard = V_1821.tickGuard,
    }
    return Lumia.features.spoofServerCoords(true, Lumia.state._soloNet.networkPos, V_1822)
end

function Lumia.features.soloNetworkTick()
    local V_1827 = Lumia.state._soloNet
    if not V_1827 then
        return
    end
    if V_1827.tickGuard and not V_1827.tickGuard() then
        return
    end
    local sOLO_OCEAN_WPS = SOLO_OCEAN_WPS
    local V_1828 = V_1827.oceanIndex or 1
    if V_1828 < 1 or V_1828 > #sOLO_OCEAN_WPS then
        V_1828 = 1
    end
    if not V_1827.oceanLegOffset then
        V_1827.oceanLegOffset = {
            x = (math.random() - 0.5) * 700.0,
            y = (math.random() - 0.5) * 700.0,
        }
    end
    local V_1829 = tonumber(V_1827.networkFlyAlt) or 0.0
    local V_1830 = tonumber(V_1827.wanderSpeed) or 360.0
    local V_1831 = GetFrameTime() or 0.016
    if V_1831 <= 0.0 or V_1831 > 0.1 then
        V_1831 = 0.016
    end
    local V_1832 = V_1830 * V_1831
    local networkPos_1 = V_1827.networkPos
    for V_1833 = 1, 8 do
        if V_1832 <= 0.05 then
            break
        end
        V_1828 = V_1827.oceanIndex or 1
        if V_1828 < 1 or V_1828 > #sOLO_OCEAN_WPS then
            V_1828 = 1
            V_1827.oceanIndex = 1
            V_1827.oceanLegOffset = {
                x = (math.random() - 0.5) * 700.0,
                y = (math.random() - 0.5) * 700.0,
            }
        end
        local V_1834 = sOLO_OCEAN_WPS[V_1828]
        local oceanLegOffset_1 = V_1827.oceanLegOffset
        local V_1835 = V_1834.x + (oceanLegOffset_1.x or 0.0)
        local V_1836 = V_1834.y + (oceanLegOffset_1.y or 0.0)
        local V_1837 = soloNetworkFlyZ(V_1835, V_1836, V_1829, V_1834.z)
        local V_1838 = V_1835 - networkPos_1.x
        local V_1839 = V_1836 - networkPos_1.y
        local V_1840 = V_1837 - networkPos_1.z
        local V_1841 = math.sqrt(V_1838 * V_1838 + V_1839 * V_1839 + V_1840 * V_1840)
        if V_1841 < 40.0 then
            V_1827.oceanIndex = (V_1828 % #sOLO_OCEAN_WPS) + 1
            V_1827.oceanLegOffset = {
                x = (math.random() - 0.5) * 700.0,
                y = (math.random() - 0.5) * 700.0,
            }
        else
            local V_1842 = 1.0 / V_1841
            local V_1843 = V_1832
            if V_1843 > V_1841 then
                V_1843 = V_1841
            end
            local V_1844 = networkPos_1.x + V_1838 * V_1842 * V_1843
            local V_1845 = networkPos_1.y + V_1839 * V_1842 * V_1843
            local V_1846 = soloNetworkFlyZ(V_1844, V_1845, V_1829, networkPos_1.z + V_1840 * V_1842 * V_1843)
            networkPos_1 = { x = V_1844, y = V_1845, z = V_1846 }
            V_1832 = V_1832 - V_1843
            if V_1841 - V_1843 < 40.0 then
                V_1827.oceanIndex = (V_1828 % #sOLO_OCEAN_WPS) + 1
                V_1827.oceanLegOffset = {
                    x = (math.random() - 0.5) * 700.0,
                    y = (math.random() - 0.5) * 700.0,
                }
            end
        end
    end
    V_1827.networkPos = networkPos_1
    Lumia.features.spoofServerCoords(true, networkPos_1, V_1827.owner)
end

function Lumia.features.applySoloSession(V_1847, soloSessionMode_1)
    soloSessionMode_1 = tostring(soloSessionMode_1 or "Normal")
    Lumia.state.soloSessionMode = soloSessionMode_1
    Lumia.state.toggles["SoloSession"] = V_1847 and true or false

    Lumia.features.stopSoloNetworkSpoof("solo")
    local entity_8 = PlayerPedId()

    if not V_1847 then
        NetworkEndTutorialSession()
        if
            not Lumia.state.toggles["Invisible_Player"]
            and not (Lumia.state.toggles["Noclipetypemode"] and Lumia.state._ncActiveMode == "Invisible")
        then
            SetEntityVisible(entity_8, true, false)
            ResetEntityAlpha(entity_8)
        end
        return
    end

    if soloSessionMode_1 == "Full Insible" then
        SetEntityVisible(entity_8, false, false)
        if SetLocalPlayerVisibleLocally then
            SetLocalPlayerVisibleLocally(true)
        end
        Lumia.features.startSoloNetworkSpoof({
            owner = "solo",
            networkFlyAlt = 0.0,
            wanderSpeed = 360.0,

            tickGuard = function()
                return Lumia.state.toggles["SoloSession"] == true and Lumia.state.soloSessionMode == "Full Insible"
            end,
        })
        return
    end

    __LCTR(8710, function()
        if NetworkStartSoloTutorialSession then
            NetworkStartSoloTutorialSession(0)
        end
        Wait(50)
        NetworkEndTutorialSession()
    end)
end

function Lumia.features.spoofPlayerModel(V_1848, V_1849)
    if V_1848 then
        SharkAPI.SyncTree.SpoofPlayerModel(true, V_1849)
    else
        SharkAPI.SyncTree.SpoofPlayerModel(false)
    end
end

Lumia.features.sendDamage = function(entity_9, V_1850, V_1851)
    if not entity_9 or entity_9 == 0 or not DoesEntityExist(entity_9) then
        return
    end
    if not SharkAPI or type(SharkAPI.SendDamageToEntity) ~= "function" then
        return
    end
    V_1850 = V_1850 or GetHashKey("WEAPON_SNOWBALL")
    V_1851 = (tonumber(V_1851) or 400.0) + 0.0
    local V_1852 = (GetPedBoneCoords and GetPedBoneCoords(entity_9, 31086, 0.0, 0.0, 0.0)) or GetEntityCoords(entity_9)
    pcall(
        SharkAPI.SendDamageToEntity,
        entity_9,
        V_1852,
        20,
        true,
        V_1850,
        V_1851,
        0,
        0,
        514,
        747845569,
        32846,
        1359188717,
        0,
        0,
        0,
        0
    )
end

Lumia.features.sendReaperPunchDamage = function(entity_10)
    if not entity_10 or entity_10 == 0 or not DoesEntityExist(entity_10) then
        return
    end
    if not SharkAPI or type(SharkAPI.SendDamageToEntity) ~= "function" then
        return
    end
    local coords_2 = GetEntityCoords(entity_10)
    pcall(
        SharkAPI.SendDamageToEntity,
        entity_10,
        vector3(coords_2.x + 0.0, coords_2.y + 0.0, coords_2.z + 0.0),
        9,
        true,
        2725352035,
        21,
        0,
        0,
        522,
        747845569,
        32781,
        2420426155,
        3,
        0,
        1,
        0
    )
end

function Lumia.features.stopTeslaDrive()
    local ped_3 = PlayerPedId()
    local vehicle_1 = GetVehiclePedIsIn(ped_3, false)
    if (not vehicle_1 or vehicle_1 == 0) and Lumia.state._teslaVeh and DoesEntityExist(Lumia.state._teslaVeh) then
        vehicle_1 = Lumia.state._teslaVeh
    end
    SetPedKeepTask(ped_3, false)
    SetBlockingOfNonTemporaryEvents(ped_3, false)
    SetPedCanBeDraggedOut(ped_3, true)
    FreezeEntityPosition(ped_3, false)
    SetDriverAggressiveness(ped_3, 0.0)
    ClearPedTasks(ped_3)
    if vehicle_1 and vehicle_1 ~= 0 and DoesEntityExist(vehicle_1) then
        if ClearVehicleTasksImmediately then
            ClearVehicleTasksImmediately(vehicle_1)
        elseif ClearVehicleTasks then
            ClearVehicleTasks(vehicle_1)
        end
        SetVehicleUndriveable(vehicle_1, false)
        SetVehicleForwardSpeed(vehicle_1, 0.0)
        if BringVehicleToHalt then
            BringVehicleToHalt(vehicle_1, 1.0, 1, false)
        elseif SetVehicleHalt then
            SetVehicleHalt(vehicle_1, 1.0, 1, false)
        end
    end
    Lumia.state._teslaDriving = false
    Lumia.state._teslaKind = nil
    Lumia.state._teslaVeh = nil
    Lumia.state._teslaAt = 0
end

function lumiaClearGodmodeState(entity_11)
    entity_11 = entity_11 or PlayerPedId()
    if entity_11 and entity_11 ~= 0 then
        SetEntityProofs(entity_11, false, false, false, false, false, false, false, false)
        local V_1853 = Lumia.state._godmodeRelGroup
        if SetEntityOnlyDamagedByRelationshipGroup then
            if V_1853 then
                SetEntityOnlyDamagedByRelationshipGroup(entity_11, false, V_1853)
            end
            SetEntityOnlyDamagedByRelationshipGroup(entity_11, false, 0)
        end
    end
    Lumia.state._godmodeRelGroup = nil
    Lumia.state._godWas = false
    Lumia.features.setGodmodeBypassHooks(false)
end

Lumia.features.clearGodmodeState = lumiaClearGodmodeState

function lumiaApplyGodmodeProofs(entity_12)
    entity_12 = entity_12 or PlayerPedId()
    if not entity_12 or entity_12 == 0 then
        return
    end
    SetEntityProofs(entity_12, true, true, true, true, true, true, true, true)
    local V_1854 = Lumia.state._godmodeRelGroup
    if not V_1854 then
        V_1854 = math.random(1, 100000)
        Lumia.state._godmodeRelGroup = V_1854
    end
    if SetEntityOnlyDamagedByRelationshipGroup then
        SetEntityOnlyDamagedByRelationshipGroup(entity_12, true, V_1854)
    end
    if not Lumia.state._godmodeHooksActive and Lumia.features.setGodmodeBypassHooks then
        Lumia.features.setGodmodeBypassHooks(true)
    end
end

function Lumia.features.tick()
    if Lumia.state and Lumia.state._bootHooksLocked then
        return
    end
    if Lumia.features.startFeatureBypassSyncLoop then
        pcall(Lumia.features.startFeatureBypassSyncLoop)
    end
    if Lumia.util.needsFeatureTick and not Lumia.util.needsFeatureTick() then
        return
    end
    local toggles_3 = Lumia.state.toggles
    local sliders_2 = Lumia.state.sliders
    local entity_13 = PlayerPedId()
    if entity_13 == 0 then
        return
    end
    local currentTime_9 = GetGameTimer()
    local V_1855 = currentTime_9 >= (Lumia.state._slowTickAt or 0)
    if V_1855 then
        Lumia.state._slowTickAt = currentTime_9 + 100
    end

    if toggles_3["godmode"] then
        if V_1855 or not Lumia.state._godWas then
            lumiaApplyGodmodeProofs(entity_13)
        end
        Lumia.state._godWas = true
    elseif Lumia.state._godWas or Lumia.state._godmodeRelGroup or Lumia.state._godmodeHooksActive then
        lumiaClearGodmodeState(entity_13)
    end

    if toggles_3["semigod"] then
        if GetEntityHealth(entity_13) < 150 then
            SetEntityHealth(entity_13, 200)
        end
    end

    if
        toggles_3["Invisible_Player"]
        or (
            toggles_3["Noclipetypemode"]
            and (Lumia.state._ncActiveMode == "Invisible" or Lumia.state.noclipMode == "Invisible")
        )
    then
        SetEntityVisible(entity_13, false, false)
        if toggles_3["Invisible_Player"] then
            SetEntityAlpha(entity_13, 170, false)
            if SetPlayerVisibleLocally then
                SetPlayerVisibleLocally(PlayerId(), false)
            end
            if SetLocalPlayerVisibleLocally then
                SetLocalPlayerVisibleLocally(true)
            end
        else
            SetEntityAlpha(entity_13, 0, false)
        end
        Lumia.state._invisWas = true
    elseif Lumia.state._invisWas then
        if not (toggles_3["SoloSession"] and Lumia.state.soloSessionMode == "Full Insible") then
            SetEntityVisible(entity_13, true, true)
            ResetEntityAlpha(entity_13)
        end
        Lumia.state._invisWas = false
    end

    if toggles_3["infstamina"] then
        RestorePlayerStamina(PlayerId(), 1.0)
    end

    if V_1855 and toggles_3["infaoxygen"] then
        SetPedDiesInWater(entity_13, false)
        if Lumia.features.setOxygenBypassHooks then
            Lumia.features.setOxygenBypassHooks(true)
        end
    elseif V_1855 and Lumia.state._oxygenHooksActive and Lumia.features.setOxygenBypassHooks then
        SetPedDiesInWater(entity_13, true)
        Lumia.features.setOxygenBypassHooks(false)
    end

    if V_1855 and toggles_3["AutoRevive:1"] and IsEntityDead(entity_13) then
        if (menu.F.isSeedAc()) or (menu.F.shouldUseSeedApi()) then
            pcall(Lumia.features.seedRevive, nil, nil, 2)
        elseif Lumia.features.nativeRevive then
            Lumia.features.nativeRevive()
        else
            local coords_3 = GetEntityCoords(entity_13)
            NetworkResurrectLocalPlayer(coords_3.x, coords_3.y, coords_3.z, GetEntityHeading(entity_13), true, false)
            SetEntityHealth(entity_13, GetEntityMaxHealth(entity_13))
            ClearPedBloodDamage(entity_13)
        end
    end

    if V_1855 and toggles_3["AutoGiveArmour:1"] then
        if GetPedArmour(entity_13) < 100 then
            SetPedArmour(entity_13, 100)
        end
    end

    if Lumia.features.ensureMovementBuffLoop then
        pcall(Lumia.features.ensureMovementBuffLoop)
    end
    if toggles_3["superjump"] then
        SetSuperJumpThisFrame(PlayerId())
    end

    if toggles_3["RunSpeed"] then
        local V_1856 = tonumber(sliders_2["runspeedvelocity"]) or 4
        if V_1856 < 0 then
            V_1856 = 0
        end
        if V_1856 > 10 then
            V_1856 = 10
        end

        local V_1857 = (V_1856 <= 0) and 1.0 or (1.0 + V_1856 * 0.35)
        if not IsPedInAnyVehicle(entity_13, false) then
            SetPedMoveRateOverride(entity_13, V_1857 + 0.0)
        end
        SetRunSprintMultiplierForPlayer(PlayerId(), math.min(1.49, 1.0 + (V_1856 * 0.049)))
        Lumia.state._runSpeedWas = true
    elseif Lumia.state._runSpeedWas then
        SetRunSprintMultiplierForPlayer(PlayerId(), 1.0)
        if not IsPedInAnyVehicle(entity_13, false) then
            SetPedMoveRateOverride(entity_13, 1.0)
        end
        Lumia.state._runSpeedWas = false
    end

    if V_1855 and toggles_3["NoRagdoll"] then
        SetPedCanRagdoll(entity_13, false)
    end

    if toggles_3["NoCollisions_col"] then
        SetEntityCollision(entity_13, false, false)
    end

    if V_1855 and toggles_3["ShrinkYourself"] then
        SetPedConfigFlag(entity_13, 223, true)
    end

    if
        V_1855
        and (toggles_3["InfiniteAmmo"] or toggles_3["infiniteammo"] or toggles_3["FreezeAmmo"] or toggles_3["infammo"])
    then
        local weaponHash_1 = GetSelectedPedWeapon(entity_13)
        if weaponHash_1 and weaponHash_1 ~= 0 then
            SetPedInfiniteAmmo(entity_13, true, weaponHash_1)
            SetPedInfiniteAmmoClip(entity_13, true)
        end
    end

    local vehicle_2 = GetVehiclePedIsIn(entity_13, false)
    if vehicle_2 ~= 0 then
        if
            V_1855
            and (toggles_3["vehgod"] or toggles_3["veh_god"] or toggles_3["VehicleGod"] or toggles_3["vehiclegod"])
        then
            SetEntityInvincible(vehicle_2, true)
            SetVehicleCanBeVisiblyDamaged(vehicle_2, false)
            SetVehicleTyresCanBurst(vehicle_2, false)
            SetDisableVehiclePetrolTankDamage(vehicle_2, true)
            SetVehicleEngineCanDegrade(vehicle_2, false)
            SetEntityProofs(vehicle_2, true, true, true, true, true, true, true, true)
        end
        if V_1855 and toggles_3["ForceEngineOn"] then
            SetVehicleEngineOn(vehicle_2, true, true, false)
        end
        if V_1855 and toggles_3["Autorepair:1"] then
            SetVehicleFixed(vehicle_2)
            SetVehicleDeformationFixed(vehicle_2)
            SetVehicleEngineHealth(vehicle_2, 1000.0)
            SetVehicleBodyHealth(vehicle_2, 1000.0)
        end
        if V_1855 and toggles_3["UnlimitedFuel:1"] then
            SetVehicleFuelLevel(vehicle_2, 100.0)
        end
        if toggles_3["InvisibleVehicle:1"] then
            if V_1855 or not Lumia.state._vehInvisWas then
                SetEntityVisible(vehicle_2, false, false)
            end
            Lumia.state._vehInvisWas = true
        elseif Lumia.state._vehInvisWas then
            SetEntityVisible(vehicle_2, true, false)
            Lumia.state._vehInvisWas = false
        end
        if V_1855 and toggles_3["Reducedamage:1"] then
            SetVehicleCanBeVisiblyDamaged(vehicle_2, false)
            SetVehicleReceivesRampDamage(vehicle_2, false)
            SetDisableVehiclePetrolTankDamage(vehicle_2, true)
            SetVehicleEngineCanDegrade(vehicle_2, false)
            if GetVehicleBodyHealth(vehicle_2) < 800.0 then
                SetVehicleBodyHealth(vehicle_2, 1000.0)
            end
            if GetVehicleEngineHealth(vehicle_2) < 800.0 then
                SetVehicleEngineHealth(vehicle_2, 1000.0)
            end
        end
        if V_1855 and toggles_3["Driveoverobjects:1"] then
            SetVehicleStrong(vehicle_2, true)
            SetEntityProofs(vehicle_2, false, true, true, false, true, false, false, false)
        end
        if V_1855 and toggles_3["Boostengine:1"] then
            SetVehicleEnginePowerMultiplier(vehicle_2, 80.0)
            SetVehicleEngineTorqueMultiplier(vehicle_2, 40.0)
        end
        if toggles_3["Instantbrake:1"] then
            if IsControlPressed(0, 76) or IsDisabledControlPressed(0, 76) then
                SetVehicleForwardSpeed(vehicle_2, 0.0)
            end
        end
        if V_1855 and (toggles_3["VehicleRGB:1"] or toggles_3["rainbowcar"]) then
            local V_1858 = currentTime_9 / 12.0
            local V_1859 = math.floor(math.sin(V_1858) * 127 + 128)
            local V_1860 = math.floor(math.sin(V_1858 + 2.094) * 127 + 128)
            local V_1861 = math.floor(math.sin(V_1858 + 4.188) * 127 + 128)
            SetVehicleCustomPrimaryColour(vehicle_2, V_1859, V_1860, V_1861)
            SetVehicleCustomSecondaryColour(vehicle_2, V_1859, V_1860, V_1861)
        end
        if toggles_3["EasyHandling:"] then
            local V_1862 = tonumber(sliders_2["Easy:Handling"]) or 5
            if V_1855 then
                SetVehicleGravityAmount(vehicle_2, 15.0 + (V_1862 * 0.35))
                SetVehicleReduceGrip(vehicle_2, false)
            end
            SetVehicleCheatPowerIncrease(vehicle_2, 1.0 + (V_1862 / 40.0))
        end
        if toggles_3["Horn:Boost"] then
            if IsControlPressed(0, 86) or IsDisabledControlPressed(0, 86) then
                local V_1863 = tonumber(sliders_2["HornBoost:"]) or 100
                local V_1864 = GetEntitySpeed(vehicle_2)
                SetVehicleForwardSpeed(vehicle_2, V_1864 + (V_1863 * 0.035))
            end
        end
        if toggles_3["VehicleJump:1"] then
            if IsControlJustPressed(0, 22) or IsDisabledControlJustPressed(0, 22) then
                ApplyForceToEntity(vehicle_2, 1, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0, true, true, true, false, true)
            end
        end
        if V_1855 and toggles_3["WaterproofEngine:1"] then
            SetVehicleEngineCanDegrade(vehicle_2, false)
            if IsEntityInWater(vehicle_2) then
                SetVehicleEngineOn(vehicle_2, true, true, false)
            end
        end
        if toggles_3["ShiftBoost"] then
            if IsControlJustPressed(0, 21) or IsDisabledControlJustPressed(0, 21) then
                local V_1865 = GetEntityForwardVector(vehicle_2)
                local V_1866 = GetEntityVelocity(vehicle_2)
                SetEntityVelocity(vehicle_2, V_1866.x + V_1865.x * 28.0, V_1866.y + V_1865.y * 28.0, V_1866.z + 0.5)
            end
        end
        if toggles_3["speedboost"] then
            SetVehicleCheatPowerIncrease(vehicle_2, 8.0)
            if V_1855 then
                ModifyVehicleTopSpeed(vehicle_2, 80.0)
                SetVehicleEnginePowerMultiplier(vehicle_2, 60.0)
            end
        end
        if toggles_3["TorqueMultiplier:1"] then
            local V_1867 = tonumber(sliders_2["TorqueMultiplier:Amt"]) or 10
            SetVehicleEngineTorqueMultiplier(vehicle_2, V_1867 + 0.0)
            SetVehicleCheatPowerIncrease(vehicle_2, V_1867 * 0.35)
        end
        if V_1855 and toggles_3["BulletProofTires:1"] then
            SetVehicleTyresCanBurst(vehicle_2, false)
        end
        if V_1855 and toggles_3["NeverFallMoto:1"] then
            SetPedCanBeKnockedOffVehicle(entity_13, 1)
        end
        if toggles_3["TeslaWaypoint:1"] then
            local V_1868 = GetFirstBlipInfoId(8)
            if V_1868 ~= 0 and DoesBlipExist(V_1868) then
                local V_1869 = GetBlipInfoIdCoord(V_1868)
                SetVehicleEngineOn(vehicle_2, true, true, false)
                SetVehicleUndriveable(vehicle_2, false)
                SetDriverAbility(entity_13, 1.0)
                SetDriverAggressiveness(entity_13, 1.0)
                SetBlockingOfNonTemporaryEvents(entity_13, true)
                SetPedKeepTask(entity_13, true)
                SetPedCanBeDraggedOut(entity_13, false)
                if
                    not Lumia.state._teslaDriving
                    or Lumia.state._teslaKind ~= "wp"
                    or (Lumia.state._teslaAt or 0) < GetGameTimer()
                then
                    TaskVehicleDriveToCoordLongrange(
                        entity_13,
                        vehicle_2,
                        V_1869.x,
                        V_1869.y,
                        V_1869.z,
                        35.0,
                        1074528293,
                        15.0
                    )
                    Lumia.state._teslaDriving = true
                    Lumia.state._teslaKind = "wp"
                    Lumia.state._teslaVeh = vehicle_2
                    Lumia.state._teslaAt = GetGameTimer() + 4000
                end
            elseif Lumia.state._teslaDriving then
                Lumia.features.stopTeslaDrive()
            end
        elseif toggles_3["TeslaMode:1"] then
            SetVehicleEngineOn(vehicle_2, true, true, false)
            SetVehicleUndriveable(vehicle_2, false)
            SetPedKeepTask(entity_13, true)
            SetDriverAbility(entity_13, 1.0)
            SetDriverAggressiveness(entity_13, 1.0)
            SetBlockingOfNonTemporaryEvents(entity_13, true)
            SetPedCanBeDraggedOut(entity_13, false)
            if not Lumia.state._teslaDriving or Lumia.state._teslaKind ~= "wander" then
                TaskVehicleDriveWander(entity_13, vehicle_2, 30.0, 1074528293)
                Lumia.state._teslaDriving = true
                Lumia.state._teslaKind = "wander"
                Lumia.state._teslaVeh = vehicle_2
            end
        elseif Lumia.state._teslaDriving then
            Lumia.features.stopTeslaDrive()
        end
        if V_1855 and toggles_3["VehFollowPlayer:1"] then
            local entity_14, V_1870 = nil, 9999.0
            local coords_4 = GetEntityCoords(entity_13)
            for V_1871, playerId_3 in ipairs(GetActivePlayers()) do
                if playerId_3 ~= PlayerId() then
                    local entity_15 = GetPlayerPed(playerId_3)
                    if entity_15 and entity_15 ~= 0 then
                        local V_1872 = #(coords_4 - GetEntityCoords(entity_15))
                        if V_1872 < V_1870 then
                            V_1870 = V_1872
                            entity_14 = entity_15
                        end
                    end
                end
            end
            if entity_14 and V_1870 > 8.0 then
                local coords_5 = GetEntityCoords(entity_14)
                if (Lumia.state._vehFollowAt or 0) < GetGameTimer() then
                    TaskVehicleDriveToCoord(
                        entity_13,
                        vehicle_2,
                        coords_5.x,
                        coords_5.y,
                        coords_5.z,
                        28.0,
                        0,
                        GetEntityModel(vehicle_2),
                        787004,
                        8.0,
                        true
                    )
                    Lumia.state._vehFollowAt = GetGameTimer() + 2500
                end
            end
        end
    elseif Lumia.state._teslaDriving then
        Lumia.features.stopTeslaDrive()
    elseif Lumia.state._vehInvisWas then
        Lumia.state._vehInvisWas = false
    end

    if toggles_3["TeleportVision:1"] and not Lumia.state._tpVisionLoop and Lumia.features.startTeleportVisionLoop then
        Lumia.features.startTeleportVisionLoop()
    end
    Lumia.features.autoParachuteTick()
    if
        toggles_3["Lazer:Eyes"]
        or toggles_3["SAFE:Eyes"]
        or toggles_3["Lazer:EyesRPG"]
        or toggles_3["Lazer:EyesShit"]
    then
        Lumia.features.ensureLazerEyesLoop()
    end
    Lumia.features.tickExtra()
end

function Lumia.features.autoParachuteTick()
    if not (Lumia.state.toggles and Lumia.state.toggles["autoparachute"]) then
        return
    end
    local ped_4 = PlayerPedId()
    if not ped_4 or ped_4 == 0 then
        return
    end
    if IsPedInAnyVehicle(ped_4, false) then
        return
    end

    local playerId_4 = PlayerId()
    local weaponHash_2 = GetHashKey("GADGET_PARACHUTE")
    if weaponHash_2 == 0 then
        weaponHash_2 = 0xFBAB5776
    end
    local currentTime_10 = GetGameTimer()
    if currentTime_10 >= (Lumia.state._autoChuteGiveAt or 0) then
        Lumia.state._autoChuteGiveAt = currentTime_10 + 400
        if not HasPedGotWeapon(ped_4, weaponHash_2, false) then
            GiveWeaponToPed(ped_4, weaponHash_2, 1, false, false)
        end
        if SetPlayerHasReserveParachute then
            SetPlayerHasReserveParachute(playerId_4)
        end
    end

    local V_1873 = GetPedParachuteState and GetPedParachuteState(ped_4) or -1

    if V_1873 == 1 or V_1873 == 2 then
        return
    end
    if IsPedInParachuteFreeFall and IsPedInParachuteFreeFall(ped_4) then
    else
        local V_1874 = GetEntityVelocity(ped_4)
        local V_1875 = (type(V_1874) == "vector3" and V_1874.z or (V_1874 and V_1874.z) or 0.0) < -8.0
        if not V_1875 then
            local V_1876, V_1877 = pcall(IsPedFalling, ped_4)
            V_1875 = V_1876 and V_1877 == true
        end
        if not V_1875 then
            return
        end
    end

    local coords_6 = GetEntityCoords(ped_4)
    local V_1878 = false
    if GetEntityHeightAboveGround then
        local V_1879 = GetEntityHeightAboveGround(ped_4)
        V_1878 = type(V_1879) == "number" and V_1879 > 8.0
    end
    if not V_1878 then
        local V_1880, V_1881 = GetGroundZFor_3dCoord(coords_6.x, coords_6.y, coords_6.z, false)
        if V_1880 and type(V_1881) == "number" and (coords_6.z - V_1881) > 8.0 then
            V_1878 = true
        elseif not V_1880 and coords_6.z > 50.0 then
            V_1878 = true
        end
    end
    if not V_1878 then
        return
    end

    if SetPlayerCanLeaveParachuteSmokeTrail then
        SetPlayerCanLeaveParachuteSmokeTrail(playerId_4, false)
    end
    if SetPlayerParachuteVariationOverride then
        SetPlayerParachuteVariationOverride(playerId_4, 0, 0, 0, true)
    end
    if ForcePedToOpenParachute then
        ForcePedToOpenParachute(ped_4)
    end
    if TaskParachute then
        TaskParachute(ped_4, true)
    end
end

function Lumia.features.startTeleportVisionLoop()
    if Lumia.state._tpVisionLoop then
        return
    end
    Lumia.state._tpVisionLoop = true
    __LCTR(9156, function()
        while Lumia.state.toggles and Lumia.state.toggles["TeleportVision:1"] do
            pcall(Lumia.features.teleportVisionTick)
            Wait(0)
        end
        Lumia.state._tpVisionLoop = false
    end)
end

function Lumia.features.teleportVisionTick()
    if not (Lumia.state.toggles and Lumia.state.toggles["TeleportVision:1"]) then
        return
    end
    local ped_5 = PlayerPedId()
    if not ped_5 or ped_5 == 0 then
        return
    end

    local cameraCoords = GetGameplayCamCoord()
    local cameraRotation = GetGameplayCamRot(2)
    local V_1882 = math.rad(cameraRotation.x)
    local V_1883 = math.rad(cameraRotation.z)
    local V_1884 = math.abs(math.cos(V_1882))
    local V_1885 = -math.sin(V_1883) * V_1884
    local V_1886 = math.cos(V_1883) * V_1884
    local V_1887 = math.sin(V_1882)
    local V_1888 = 250.0
    local V_1889 = cameraCoords.x + V_1885 * V_1888
    local V_1890 = cameraCoords.y + V_1886 * V_1888
    local V_1891 = cameraCoords.z + V_1887 * V_1888

    local V_1892 = 1 + 2 + 4 + 16
    local V_1893
    if StartExpensiveSynchronousShapeTestLosProbe then
        V_1893 = StartExpensiveSynchronousShapeTestLosProbe(
            cameraCoords.x,
            cameraCoords.y,
            cameraCoords.z,
            V_1889,
            V_1890,
            V_1891,
            V_1892,
            ped_5,
            7
        )
    elseif StartShapeTestLosProbe then
        V_1893 = StartShapeTestLosProbe(
            cameraCoords.x,
            cameraCoords.y,
            cameraCoords.z,
            V_1889,
            V_1890,
            V_1891,
            V_1892,
            ped_5,
            7
        )
    else
        V_1893 =
            StartShapeTestRay(cameraCoords.x, cameraCoords.y, cameraCoords.z, V_1889, V_1890, V_1891, V_1892, ped_5, 7)
    end
    local V_1894, V_1895, V_1896 = GetShapeTestResult(V_1893)
    local x_6, y_3, V_1897 = V_1889, V_1890, V_1891
    if V_1894 == 1 and V_1895 == 1 and V_1896 then
        x_6 = V_1896.x + 0.0
        y_3 = V_1896.y + 0.0
        V_1897 = V_1896.z + 0.0
    end

    local coords_7 = GetEntityCoords(ped_5)
    local V_1898, V_1899, V_1900 = 220, 220, 225
    if Lumia.colors and type(Lumia.colors.primary) == "table" then
        V_1898 = tonumber(Lumia.colors.primary[1] or Lumia.colors.primary.r) or V_1898
        V_1899 = tonumber(Lumia.colors.primary[2] or Lumia.colors.primary.g) or V_1899
        V_1900 = tonumber(Lumia.colors.primary[3] or Lumia.colors.primary.b) or V_1900
    end
    DrawLine(coords_7.x, coords_7.y, coords_7.z + 0.45, x_6, y_3, V_1897, V_1898, V_1899, V_1900, 220)
    DrawMarker(
        28,
        x_6,
        y_3,
        V_1897 + 0.05,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.22,
        0.22,
        0.22,
        V_1898,
        V_1899,
        V_1900,
        180,
        false,
        false,
        2,
        false,
        nil,
        nil,
        false
    )

    local V_1901 = IsControlJustPressed(0, 38)
        or IsDisabledControlJustPressed(0, 38)
        or (SharkAPI and SharkAPI.IsKeyJustPressed and SharkAPI.IsKeyJustPressed(0x45))
    if V_1901 and GetGameTimer() >= (Lumia.state._tpVisionAt or 0) then
        Lumia.state._tpVisionAt = GetGameTimer() + 250
        local entity_16 = ped_5
        if IsPedInAnyVehicle(ped_5, false) then
            local V_1902 = GetVehiclePedIsIn(ped_5, false)
            if V_1902 and V_1902 ~= 0 then
                entity_16 = V_1902
            end
        end
        SetEntityCoordsNoOffset(entity_16, x_6, y_3, V_1897 + 0.35, false, false, false)
    end
end

local animationDict = "melee@unarmed@streamed_variations"
local V_1903 = "plyr_takedown_front_slap"
local V_1904 = 2.45

function Lumia.features.slapModeEnsureAnim()
    if HasAnimDictLoaded(animationDict) then
        return true
    end
    RequestAnimDict(animationDict)
    local V_1905 = GetGameTimer() + 1500
    while not HasAnimDictLoaded(animationDict) and GetGameTimer() < V_1905 do
        Wait(0)
        RequestAnimDict(animationDict)
    end
    return HasAnimDictLoaded(animationDict) == true
end

function Lumia.features.slapModeMenuBlocksE()
    if Lumia.open == true then
        return true
    end
    if Lumia.prompt and Lumia.prompt.isActive and Lumia.prompt.isActive() then
        return true
    end
    return false
end

function Lumia.features.slapModeFindTarget(V_1906)
    V_1906 = tonumber(V_1906) or V_1904
    local entity_17 = PlayerPedId()
    if not entity_17 or entity_17 == 0 then
        return nil
    end
    local coords_8 = GetEntityCoords(entity_17)
    local V_1907, V_1908 = nil, V_1906 + 0.001
    for V_1909, playerId_5 in ipairs(GetActivePlayers()) do
        if playerId_5 ~= PlayerId() then
            local entity_18 = GetPlayerPed(playerId_5)
            if entity_18 and entity_18 ~= 0 and DoesEntityExist(entity_18) and not IsEntityDead(entity_18) then
                local V_1910 = #(coords_8 - GetEntityCoords(entity_18))
                if V_1910 < V_1908 then
                    V_1907, V_1908 = entity_18, V_1910
                end
            end
        end
    end
    return V_1907
end

function Lumia.features.slapModeDamageTarget(entity_19, V_1911)
    if not entity_19 or entity_19 == 0 or not DoesEntityExist(entity_19) then
        return
    end
    if not SharkAPI or type(SharkAPI.SendDamageToEntity) ~= "function" then
        return
    end
    V_1911 = tostring(V_1911 or "Punch")
    local V_1912 = (GetPedBoneCoords and GetPedBoneCoords(entity_19, 31086, 0.0, 0.0, 0.0))
        or GetEntityCoords(entity_19)
    if V_1911 == "Kill" then
        local modelHash_3 = GetHashKey("WEAPON_SNOWBALL")
        pcall(
            SharkAPI.SendDamageToEntity,
            entity_19,
            V_1912,
            20,
            true,
            modelHash_3,
            99,
            0,
            0,
            514,
            747845569,
            32846,
            1359188717,
            0,
            0,
            0,
            0
        )
        return
    end
    if menu.F.isReaperAc and menu.F.isReaperAc() then
        Lumia.features.sendReaperPunchDamage(entity_19)
        return
    end
    local modelHash_4 = GetHashKey("WEAPON_SNOWBALL")
    for V_1913 = 1, 6 do
        if not DoesEntityExist(entity_19) or IsEntityDead(entity_19) then
            break
        end
        pcall(
            SharkAPI.SendDamageToEntity,
            entity_19,
            V_1912,
            12,
            true,
            modelHash_4,
            25,
            0,
            0,
            514,
            747845569,
            32846,
            1359188717,
            0,
            0,
            0,
            0
        )
    end
end

function Lumia.features.doSlapModeHit()
    if Lumia.features.slapModeMenuBlocksE() then
        return
    end
    local playerPed_5 = PlayerPedId()
    if not playerPed_5 or playerPed_5 == 0 then
        return
    end
    local currentTime_11 = GetGameTimer()
    if currentTime_11 < (Lumia.state._slapHitAt or 0) then
        return
    end
    Lumia.state._slapHitAt = currentTime_11 + 650

    if Lumia.features.slapModeEnsureAnim() then
        ClearPedSecondaryTask(playerPed_5)
        TaskPlayAnim(playerPed_5, animationDict, V_1903, 8.0, -8.0, 900, 48, 0.0, false, false, false)
    end

    local V_1914 = "Punch"
    local V_1915 = Lumia.features.slapModeFindTarget(V_1904)
    if V_1915 then
        Lumia.features.slapModeDamageTarget(V_1915, V_1914)
    end
end

function Lumia.features.startSlapModeLoop()
    if Lumia.state._slapModeLoop then
        return
    end
    Lumia.state._slapModeLoop = true
    __LCTR(9446, function()
        while Lumia.state.toggles and Lumia.state.toggles.SlapMode do
            if not Lumia.features.slapModeMenuBlocksE() then
                local V_1916 = IsControlJustPressed(0, 38)
                    or IsDisabledControlJustPressed(0, 38)
                    or (SharkAPI and SharkAPI.IsKeyJustPressed and SharkAPI.IsKeyJustPressed(0x45))
                if V_1916 then
                    Lumia.features.doSlapModeHit()
                end
            end
            Wait(0)
        end
        Lumia.state._slapModeLoop = false
    end)
end

function Lumia.features.registerAll()
    if menu.F._built or menu.F._building or Lumia.state._menuBuildThread then
        return
    end
    Lumia.state._menuBuildThread = true
    __LCTR(9376, function()
        Lumia.state._buildYield = true
        Lumia.state._buildYieldN = 0
        local V_1917, V_1918 = pcall(menu.F.buildAll)
        Lumia.state._buildYield = false
        if not V_1917 and Lumia.f8 then
            pcall(Lumia.f8, "[Lumia] menu build: " .. tostring(V_1918))
        end
        pcall(menu.F.dedupeMainTabs)
    end)
end

function Lumia.getImportGifFn()
    if type(SharkAPI) ~= "table" or type(SharkAPI.Images) ~= "table" then
        return nil
    end
    local images = SharkAPI.Images
    return images.ImportGifFromUrl
        or images.ImportGIFFromUrl
        or images.ImportGif
        or images.ImportGIF
        or images.ImportAnimatedImageFromUrl
end

function Lumia.detectBannerIsGif(V_1919, V_1920, V_1921)
    V_1921 = type(V_1921) == "table" and V_1921 or {}

    if V_1921.isGif == false or V_1921.gif == false then
        return false
    end
    if V_1921.isGif == true or V_1921.gif == true then
        return true
    end
    local V_1922 = tostring(V_1921.mime or V_1921.contentType or V_1921.mimeType or ""):lower()
    if
        V_1922:find("png", 1, true)
        or V_1922:find("jpeg", 1, true)
        or V_1922:find("jpg", 1, true)
        or V_1922:find("webp", 1, true)
    then
        return false
    end
    if V_1922:find("gif", 1, true) then
        return true
    end
    local V_1923 = tostring(V_1921.dataUrl or V_1921.bannerDataUrl or "")
    if V_1923:find("image/png", 1, true) or V_1923:find("image/jpeg", 1, true) then
        return false
    end
    if V_1923:find("image/gif", 1, true) or V_1923:find("^data:image/gif", 1) then
        return true
    end
    local V_1924 = tostring(V_1919 or ""):lower()
    if V_1924:find("%.png") or V_1924:find("%.jpe?g") or V_1924:find("%.webp") then
        return false
    end
    if V_1924:find("%.gif") or V_1924 == "gif" or V_1924 == "lumia.gif" then
        return true
    end
    local V_1925 = tostring(V_1920 or ""):lower()
    if V_1925:find("%.png") or V_1925:find("%.jpe?g") then
        return false
    end
    if V_1925:find("%.gif") or V_1925:find("image/gif", 1, true) or V_1925:find("output=gif", 1, true) then
        return true
    end

    local V_1926 = tostring(V_1921.name or ""):lower()
    if V_1926 ~= "" and V_1926:find("gif", 1, true) and not V_1926:find("png", 1, true) then
        return true
    end
    return false
end

function bannerUrlDecode(V_1927)
    if type(V_1927) ~= "string" then
        return V_1927
    end
    return V_1927:gsub("%%(%x%x)", function(V_1928)
        return string.char(tonumber(V_1928, 16))
    end):gsub("+", " ")
end

function bannerResolveDirectUrl(V_1929)
    if type(V_1929) ~= "string" or V_1929 == "" then
        return V_1929
    end
    if V_1929:find("^data:", 1) or not V_1929:find("wsrv%.nl", 1) then
        return V_1929
    end
    local V_1930 = V_1929:match("[?&]url=([^&]+)")
    if V_1930 and V_1930 ~= "" then
        return bannerUrlDecode(V_1930)
    end
    return V_1929
end

function Lumia.importBannerGifTexture(V_1931, V_1932, V_1933, V_1934)
    if LUMIA_TEST_NO_BANNER_IMPORT then
        if type(V_1934) == "function" then
            pcall(V_1934, false)
        end
        return false
    end
    V_1934 = type(V_1934) == "function" and V_1934 or function() end
    __LCTR(9553, function()
        local V_1935 = Lumia.getImportGifFn()

        local function getCurrentTime_13(V_1936)
            if type(V_1936) == "table" and type(V_1936.Completed) == "function" then
                local V_1937 = GetGameTimer() + 20000
                while not V_1936.Completed() and GetGameTimer() < V_1937 do
                    Wait(40)
                end
            else
                Wait(120)
            end
        end

        local function F_42(V_1938)
            if type(V_1938) ~= "string" or V_1938 == "" then
                return false
            end
            if V_1938:find("^data:", 1) then
                Lumia.TraceAlways("gif skip dataUrl", "len=" .. tostring(#V_1938), "name=" .. tostring(V_1931))
                return false
            end
            if V_1935 then
                local V_1939, V_1940 = pcall(V_1935, V_1931, V_1938)
                if V_1939 and V_1940 ~= false then
                    Lumia.TraceChange(
                        "gifImport",
                        "gif importFn ok",
                        "name=" .. tostring(V_1931),
                        "ret=" .. tostring(V_1940)
                    )
                    return true
                end
                Lumia.TraceAlways(
                    "gif importFn fail",
                    "name=" .. tostring(V_1931),
                    "err=" .. tostring(V_1940),
                    "ok=" .. tostring(V_1939)
                )
            end
            return false
        end

        local function F_43(V_1941)
            if type(V_1941) ~= "string" or #V_1941 < 6 then
                return false
            end
            local V_1942 = V_1941:sub(1, 6)
            if V_1942 ~= "GIF87a" and V_1942 ~= "GIF89a" then
                return false
            end
            if #V_1941 > 6291456 then
                Lumia.TraceAlways("gif skip huge bytes", "bytes=" .. tostring(#V_1941), "name=" .. tostring(V_1931))
                return false
            end
            local V_1943 = SharkAPI.Images
                and (
                    SharkAPI.Images.ImportGifFromData
                    or SharkAPI.Images.ImportGifFromBytes
                    or SharkAPI.Images.ImportGifData
                )
            if V_1943 and #V_1941 <= 6291456 then
                local V_1944, V_1945 = pcall(V_1943, V_1931, V_1941)
                if not V_1944 or V_1945 == false then
                    V_1944, V_1945 = pcall(V_1943, V_1941, V_1931)
                end
                if V_1944 and V_1945 ~= false then
                    Wait(120)
                    return true
                end
            end
            return false
        end

        local V_1946 = SharkAPI.Images
            and (
                SharkAPI.Images.ImportGifFromData
                or SharkAPI.Images.ImportGifFromBytes
                or SharkAPI.Images.ImportGifData
            )
        if not V_1935 and not V_1946 then
            Lumia.DevPrint("[banner] no GIF/image import API for", tostring(V_1931))
            V_1934(false, true)
            return
        end

        local V_1947 = bannerResolveDirectUrl(V_1932)
        local V_1948 = false
        local V_1949 = false
        local V_1950 = 0
        Lumia.TraceChange("gifStart", "gif load start", "name=" .. tostring(V_1931), "hint=" .. tostring(V_1933))

        if V_1947:find("^https?://", 1) and not V_1947:find("^data:", 1) then
            if F_42(V_1947) then
                Lumia.TraceChange("gifOk", "gif ok url", "name=" .. tostring(V_1931))
                V_1934(true, true)
                return
            end
            Lumia.fetchBytes(V_1947, function(V_1951, V_1952)
                if V_1951 and type(V_1952) == "string" then
                    V_1950 = #V_1952
                    if F_43(V_1952) then
                        V_1948 = true
                    elseif F_42(V_1947) then
                        V_1948 = true
                    end
                end
                V_1949 = true
            end)
            local currentTime_12 = GetGameTimer()
            while not V_1949 and (GetGameTimer() - currentTime_12) < 15000 do
                Wait(40)
            end
            if V_1948 then
                Lumia.TraceChange("gifOk", "gif ok bytes", "bytes=" .. tostring(V_1950), "name=" .. tostring(V_1931))
                V_1934(true, true)
                return
            end
            Lumia.TraceAlways(
                "gif fail url",
                "name=" .. tostring(V_1931),
                "bytes=" .. tostring(V_1950),
                "url=" .. tostring(V_1947):sub(1, 60)
            )
        end

        if type(V_1947) == "string" and V_1947:find("^https?://", 1) and F_42(V_1947) then
            V_1934(true, true)
            return
        end

        V_1934(false, true)
    end)
end

function Lumia.importBannerTexture(V_1953, V_1954, V_1955, V_1956)
    if LUMIA_TEST_NO_BANNER_IMPORT then
        if type(V_1956) == "function" then
            pcall(V_1956, false)
        end
        return false
    end
    if V_1955 then
        V_1956 = V_1955
        V_1955 = nil
    end
    V_1956 = type(V_1956) == "function" and V_1956 or function() end
    __LCTR(9701, function()
        local V_1957 = V_1955 == true
        if V_1955 ~= true and V_1955 ~= false then
            V_1957 = Lumia.detectBannerIsGif(nil, V_1954, {}) and true or false
        end

        if V_1957 then
            Lumia.importBannerGifTexture(V_1953, V_1954, nil, V_1956)
            return
        end

        local V_1958 = false
        local V_1959 = V_1954

        local function F_44(V_1960)
            if type(V_1960) ~= "string" or V_1960 == "" then
                return false
            end
            if V_1960:find("^data:", 1) and #V_1960 > 100000 then
                Lumia.TraceAlways("banner skip huge dataUrl", "len=" .. tostring(#V_1960), "name=" .. tostring(V_1953))
                return false
            end
            if SharkAPI.Images.ImportMultiImages then
                local V_1961, V_1962 = pcall(SharkAPI.Images.ImportMultiImages, {
                    { name = V_1953, url = V_1960 },
                })
                if V_1961 and V_1962 then
                    return true
                end
            end
            if SharkAPI.Images.ImportImageFromUrl then
                local V_1963 = pcall(SharkAPI.Images.ImportImageFromUrl, V_1953, V_1960)
                if V_1963 then
                    return true
                end
            end
            return false
        end

        if V_1959:find("/fivem/", 1) or V_1959:find("/api/", 1) or V_1959:find("custom%-banners", 1) then
            if F_44(V_1959) then
                V_1956(true, false)
                return
            end

            Lumia.fetchBytes(V_1959, function(V_1964, V_1965)
                if V_1964 and type(V_1965) == "string" and Lumia.util.isImageBytes(V_1965) and #V_1965 <= 70000 then
                    local V_1966 = Lumia.util.bytesToDataUrl(V_1965, V_1953 .. ".png")
                    if V_1966 and #V_1966 <= 100000 and F_44(V_1966) then
                        V_1956(true, false)
                        return
                    end
                end
                Lumia.TraceAlways(
                    "custom banner url import fail",
                    "name=" .. tostring(V_1953),
                    "bytes=" .. tostring(type(V_1965) == "string" and #V_1965 or 0)
                )
                V_1956(false, false)
            end)
            return
        end

        if SharkAPI.Images.ImportMultiImages then
            local V_1967, V_1968 = pcall(SharkAPI.Images.ImportMultiImages, {
                { name = V_1953, url = V_1954 },
            })
            if V_1967 and V_1968 then
                V_1958 = true
            end
        elseif SharkAPI.Images.ImportImageFromUrl then
            local V_1969 = pcall(SharkAPI.Images.ImportImageFromUrl, V_1953, V_1954)
            V_1958 = V_1969 and true or false
        end
        if not V_1958 and type(V_1954) == "string" and V_1954:find("lumiaa%.wtf/assets/images/banners", 1) then
            local V_1970 = Lumia.bannerImportUrl(V_1954, V_1953) or V_1954
            if V_1970 ~= V_1954 then
                V_1958 = F_44(V_1970)
            end
        end
        if not V_1958 and type(V_1954) == "string" and V_1954:find("lumiaa%.wtf", 1) then
            local V_1971 = Lumia.util.urlEncode(V_1954) or V_1954
            local V_1972 = Lumia.protect.urls.wsrvPrefix() .. V_1971 .. Lumia.protect.urls.wsrvSuffix("png")
            V_1958 = F_44(V_1972)
        end
        V_1956(V_1958 and true or false, false)
    end)
end

function Lumia.bannerTextureName(V_1973)
    local V_1974 = tostring(V_1973 or "v7banner.png"):lower()
    if V_1974 == "v7banner.png" or V_1974 == "default" then
        return "lumia_v7_banner"
    end
    if V_1974 == "bw.png" or V_1974 == "black" then
        return "lumia_banner_bw"
    end
    if V_1974 == "lumia.gif" or V_1974 == "gif" then
        return "lumia_banner_gif"
    end
    local V_1975 = V_1974:gsub("[^%w]", "")
    if #V_1975 > 28 then
        V_1975 = V_1975:sub(1, 28)
    end
    if V_1975 == "" then
        V_1975 = "custom"
    end
    return "lumia_banner_" .. V_1975
end

function Lumia.setBannerImage(url_2, file_2, V_1976)
    if type(url_2) ~= "string" or url_2 == "" then
        return false
    end
    V_1976 = type(V_1976) == "table" and V_1976 or {}
    file_2 = type(file_2) == "string" and file_2 or tostring(file_2 or "")
    if Lumia.state.loaderActive then
        Lumia.state._pendingBannerLoad = { url = url_2, file = file_2, opts = V_1976 }
        return false
    end
    Lumia.banner = Lumia.banner or {}
    if V_1976.userPick == true then
        Lumia.banner._gifHold = nil
    elseif Lumia.banner._gifHold == true then
        Lumia.banner.ready = true
        Lumia.banner.loading = false
        Lumia.banner.hasTexture = true
        Lumia.banner.fallback = false
        Lumia.banner.gifNative = true
        Lumia.banner._gifReady = true
        Lumia.banner.isGif = true
        if type(Lumia.banner.gifTex) == "string" and Lumia.banner.gifTex ~= "" then
            Lumia.banner.name = Lumia.banner.gifTex
        end
        return true
    end
    if Lumia.banner._gifImporting == true and V_1976.userPick ~= true then
        return true
    end
    local isGif_1 = Lumia.detectBannerIsGif(file_2, url_2, V_1976) and true or false
    if
        isGif_1
        and Lumia.banner.gifNative == true
        and Lumia.banner._gifReady == true
        and Lumia.banner.hasTexture == true
        and Lumia.banner.fallback ~= true
        and tostring(Lumia.banner.file or "") == file_2
    then
        return true
    end
    if
        V_1976.force ~= true
        and Lumia.banner.file == file_2
        and Lumia.banner.url == url_2
        and (Lumia.banner.loading == true or Lumia.banner.hasTexture == true)
        and (not isGif_1 or Lumia.banner.gifNative == true or Lumia.banner.loading == true)
    then
        return true
    end
    Lumia.state._bannerTexSeq = (Lumia.state._bannerTexSeq or 0) + 1
    local V_1977 = Lumia.state._bannerTexSeq
    if isGif_1 and url_2:find("^data:", 1) then
        Lumia.TraceAlways(
            "banner gif dataUrl pending redirect",
            "file=" .. tostring(file_2),
            "len=" .. tostring(#url_2)
        )
    end
    local V_1978 = tostring(file_2 or ""):lower()
    local V_1979 = V_1978 == "v7banner.png" or V_1978 == "bw.png" or V_1978 == "lumia.gif"
    local name_2 = V_1979 and Lumia.bannerTextureName(file_2)
        or (Lumia.bannerTextureName(file_2) .. "_" .. tostring(V_1977))
    local name_3 = Lumia.banner.name
    local url_3 = Lumia.banner.url
    local file_3 = Lumia.banner.file
    local isGif_2 = Lumia.banner.isGif
    local gifNative_1 = Lumia.banner.gifNative
    local V_1980 = Lumia.banner.hasTexture == true
        and Lumia.banner.fallback ~= true
        and type(name_3) == "string"
        and name_3 ~= ""
    Lumia.banner.file = file_2
    Lumia.banner.loading = true
    Lumia.banner.isGif = isGif_1
    if V_1980 then
        Lumia.banner.ready = true
        Lumia.banner.fallback = false
        Lumia.banner.hasTexture = true
    else
        Lumia.banner.name = name_2
        Lumia.banner.ready = false
        Lumia.banner.fallback = false
        Lumia.banner.hasTexture = false
    end

    __LCTR(9856, function()
        Wait(10000)
        if V_1977 ~= Lumia.state._bannerTexSeq then
            return
        end
        if Lumia.banner.loading then
            Lumia.banner.loading = false
            if not (V_1980 and Lumia.banner.hasTexture == true) then
                Lumia.banner.ready = true
                Lumia.banner.hasTexture = false
                Lumia.banner.fallback = true
            end
            Lumia.TraceAlways("banner watchdog fallback", "file=" .. tostring(file_2))
        end
    end)

    local function F_45(V_1981, V_1982, V_1983)
        if V_1977 ~= Lumia.state._bannerTexSeq then
            return
        end
        if Lumia.banner._gifHold == true then
            Lumia.banner.loading = false
            Lumia.banner.ready = true
            Lumia.banner.hasTexture = true
            Lumia.banner.fallback = false
            Lumia.banner.gifNative = true
            Lumia.banner._gifReady = true
            Lumia.banner.isGif = true
            Lumia.banner.name = Lumia.banner.gifTex or Lumia.BANNER_GIF_TEX
            return
        end
        Lumia.banner.isGif = isGif_1
        Lumia.banner.loading = false
        if V_1982 == true then
            Lumia.banner.name = name_2
            Lumia.banner.gifNative = false
            Lumia.banner._gifReady = false
            Lumia.banner.ready = true
            Lumia.banner.hasTexture = true
            Lumia.banner.fallback = false
            Lumia.state._uiDirty = true
            Lumia.state._uiRecN = 0
        elseif V_1980 then
            Lumia.banner.name = name_3
            Lumia.banner.file = file_3
            Lumia.banner.url = url_3
            Lumia.banner.isGif = isGif_2
            Lumia.banner.gifNative = gifNative_1
            Lumia.banner.ready = true
            Lumia.banner.hasTexture = true
            Lumia.banner.fallback = false
            Lumia.banner.loading = false
        else
            Lumia.banner.ready = true
            Lumia.banner.hasTexture = false
            Lumia.banner.fallback = true
            Lumia.TraceAlways(
                "banner import fail",
                "file=" .. tostring(file_2),
                "url=" .. tostring(V_1981 or url_2):sub(1, 72)
            )
        end
        Lumia.TraceChange(
            "bannerReady",
            "banner ready",
            "file=" .. tostring(file_2),
            "gif=" .. tostring(isGif_1),
            "ok=" .. tostring(V_1982)
        )
    end

    local function F_46(importUrl_1)
        Lumia.banner.importUrl = importUrl_1
        if isGif_1 and type(importUrl_1) == "string" and not importUrl_1:find("^data:", 1) then
            Lumia.banner._gifImporting = true
            Lumia.importBannerGifTexture(Lumia.BANNER_GIF_TEX, importUrl_1, file_2, function(V_1984)
                Lumia.banner.loading = false
                Lumia.banner._gifImporting = false
                if V_1984 == true then
                    Lumia.banner.name = Lumia.BANNER_GIF_TEX
                    Lumia.banner.gifTex = Lumia.BANNER_GIF_TEX
                    Lumia.banner.gifNative = true
                    Lumia.banner._gifReady = true
                    Lumia.banner._gifHold = true
                    Lumia.banner.isGif = true
                    Lumia.banner.ready = true
                    Lumia.banner.hasTexture = true
                    Lumia.banner.fallback = false
                    Lumia.state._uiTabCache = nil
                    Lumia.state._uiDirty = true
                    Lumia.state._uiRecN = 0
                    return
                end
                if V_1977 ~= Lumia.state._bannerTexSeq then
                    return
                end
                F_45(importUrl_1, false, true)
            end)
            return
        end
        local V_1985 = Lumia.bannerImportUrl(importUrl_1, file_2)
        Lumia.importBannerTexture(name_2, V_1985, false, function(V_1986, V_1987)
            F_45(V_1985, V_1986, V_1987)
        end)
    end

    local function F_47(V_1988, V_1989)
        return V_1988
    end

    if url_2:find("^data:image", 1) then
        local V_1990 = tostring(file_2 or "")
        if url_2:find("^data:image/gif", 1) then
            isGif_1 = true
            Lumia.banner.isGif = true
        elseif url_2:find("^data:image/png", 1) or url_2:find("^data:image/jpeg", 1) then
            isGif_1 = false
            Lumia.banner.isGif = false
        end
        if V_1990:find("custom_", 1, true) and Lumia.panel and Lumia.panel.authBody then
            local V_1991 = Lumia.panel.authBody({ file = V_1990 })
            local url_4 = Lumia.panel.API .. "/fivem/menu/custom-banners/raw?" .. Lumia.panel.buildQuery(V_1991)
            Lumia.TraceAlways("setBanner redirect dataUrl->raw", "len=" .. tostring(#url_2), "file=" .. V_1990)
            Lumia.banner.url = url_4
            F_46(F_47(url_4, V_1990))
            return true
        end
        if V_1990 ~= "" and (V_1990 == "v7banner.png" or V_1990 == "bw.png" or V_1990 == "lumia.gif") then
            local url_5 = Lumia.protect.urls.banners(V_1990)
            Lumia.banner.url = url_5
            F_46(F_47(url_5, V_1990))
            return true
        end
        if isGif_1 or url_2:find("^data:image/gif", 1) or #url_2 > 48000 then
            Lumia.TraceAlways("setBanner refuse dataUrl", "len=" .. tostring(#url_2), "gif=" .. tostring(isGif_1))
            Lumia.banner.loading = false
            Lumia.banner.ready = false
            Lumia.banner.fallback = true
            return false
        end
        Lumia.banner.url = url_2
        F_46(url_2)
        return true
    end

    if url_2:find("^https?://", 1) then
        Lumia.banner.url = url_2
        F_46(F_47(url_2, file_2))
        return true
    end

    Lumia.banner.url = url_2
    Lumia.banner.loading = false
    return false
end

function Lumia.flushPendingStartupAssets()
    if Lumia.state._pendingBannerLoad then
        local V_1992 = Lumia.state._pendingBannerLoad
        Lumia.state._pendingBannerLoad = nil
        pcall(Lumia.setBannerImage, V_1992.url, V_1992.file, V_1992.opts or {})
    end
    local V_1993 = Lumia.state._pendingPanelBanner
    if type(V_1993) == "table" and V_1993.file and Lumia.applyPanelBannerFile then
        Lumia.state._pendingPanelBanner = nil
        pcall(Lumia.applyPanelBannerFile, V_1993.file, V_1993.primary, V_1993.opts or {})
    end
end

function Lumia.loadBanner(V_1994)
    if Lumia.banner and Lumia.banner._gifHold == true then
        return
    end
    if Lumia.state.loaderActive and Lumia.state._loaderCaching ~= true then
        return
    end
    Lumia.banner = Lumia.banner or {}
    local file_4 = Lumia.banner.file
    if not file_4 or file_4 == "" then
        local V_1995 = tostring(Lumia.banner.url or "")
        file_4 = V_1995:match("banners/([^%?]+)$") or "v7banner.png"
        Lumia.banner.file = file_4
    end
    if type(Lumia.banner.url) ~= "string" or Lumia.banner.url == "" then
        if Lumia.protect.urls.banners then
            Lumia.banner.url = Lumia.protect.urls.banners(tostring(file_4))
        else
            return
        end
    end
    if not V_1994 and Lumia.banner.loading then
        return
    end
    if not V_1994 and Lumia.banner.ready and Lumia.banner.hasTexture == true and Lumia.banner.fallback ~= true then
        return
    end
    if tostring(file_4):find("custom_", 1, true) then
        Lumia.loadCustomBannerFromPanel(file_4, nil, {})
        return
    end
    if not tostring(Lumia.banner.url):find("^https?://", 1) or tostring(Lumia.banner.url):find("^data:", 1) then
        Lumia.banner.url = Lumia.protect.urls.banners(tostring(file_4))
    end
    Lumia.setBannerImage(Lumia.banner.url, file_4, {
        isGif = Lumia.detectBannerIsGif(file_4, Lumia.banner.url, {}) and true or false,
    })
end

function Lumia.lockBannerLocal(V_1996)
    Lumia.state.bannerLocalLock = V_1996 and true or false
    Lumia.state.bannerLocalLockAt = GetGameTimer and GetGameTimer() or 0
end

function Lumia.loadCustomBannerFromPanel(panelBannerFile_4, V_1997, V_1998)
    if
        type(panelBannerFile_4) ~= "string"
        or panelBannerFile_4 == ""
        or not panelBannerFile_4:find("custom_", 1, true)
    then
        return false
    end
    if not Lumia.panel or not Lumia.panel.request or not Lumia.panel.authBody then
        return false
    end
    V_1998 = type(V_1998) == "table" and V_1998 or {}

    if
        Lumia.banner
        and Lumia.banner.file == panelBannerFile_4
        and (Lumia.banner.ready == true or Lumia.banner.loading == true)
        and V_1998.forceRestart ~= true
    then
        if V_1997 then
            Lumia.applyPrimaryColor(V_1997)
        end
        return true
    end

    Lumia.state._bannerLoadSeq = (Lumia.state._bannerLoadSeq or 0) + 1
    local V_1999 = Lumia.state._bannerLoadSeq
    Lumia.state.panelBannerFile = panelBannerFile_4
    Lumia.banner = Lumia.banner or {}
    Lumia.banner.file = panelBannerFile_4
    local isGif_3 = V_1998.isGif
    if isGif_3 ~= true and isGif_3 ~= false then
        isGif_3 = Lumia.detectBannerIsGif(panelBannerFile_4, V_1998.url or V_1998.dataUrl, V_1998) and true or false
    end
    Lumia.banner.isGif = isGif_3 and true or false

    if V_1997 then
        Lumia.applyPrimaryColor(V_1997)
    end

    if type(V_1998.dataUrl) == "string" and V_1998.dataUrl:find("^data:image", 1) then
        Lumia.TraceAlways(
            "custom banner ignore dataUrl",
            "file=" .. tostring(panelBannerFile_4),
            "len=" .. tostring(#V_1998.dataUrl)
        )
        V_1998.dataUrl = nil
    end

    if Lumia.notify and Lumia.notify.info and not Lumia.state._customBannerNotifyAt then
        Lumia.state._customBannerNotifyAt = GetGameTimer()
        Lumia.notify.info("Loading custom banner...", 1800)
    end

    __LCTR(10107, function()
        if V_1999 ~= Lumia.state._bannerLoadSeq then
            return
        end

        local V_2000 = Lumia.panel.authBody({ file = panelBannerFile_4 })
        local V_2001 = Lumia.panel.API .. "/fivem/menu/custom-banners/raw?" .. Lumia.panel.buildQuery(V_2000)
        local V_2002 = Lumia.panel.API .. "/fivem/menu/custom-banners/load?" .. Lumia.panel.buildQuery(V_2000)
        local V_2003 = isGif_3 == true or tostring(panelBannerFile_4):lower():find("%.gif") ~= nil

        Lumia.TraceAlways(
            "custom banner import url",
            "file=" .. tostring(panelBannerFile_4),
            "gif=" .. tostring(V_2003 and true or false)
        )
        Lumia.state._bannerFetchFailFile = nil
        Lumia.state._bannerFetchFailAt = nil
        Lumia.setBannerImage(V_2001, panelBannerFile_4, {
            isGif = V_2003 and true or false,
            name = V_1998.name,
            mime = V_2003 and "image/gif" or (V_1998.mime or V_1998.contentType or "image/png"),
            force = true,
        })
    end)
    return true
end

function Lumia.applyPanelBannerFile(panelBannerFile_5, V_2004, V_2005)
    V_2005 = type(V_2005) == "table" and V_2005 or {}
    if type(panelBannerFile_5) ~= "string" or panelBannerFile_5 == "" then
        return false
    end
    panelBannerFile_5 = tostring(panelBannerFile_5)
    local V_2006 = tostring(V_2005.source or "panel")
    local V_2007 = Lumia.banner.file == panelBannerFile_5
        and (Lumia.banner.ready == true or Lumia.banner.loading == true)
    if V_2007 and V_2005.forceRestart ~= true then
        Lumia.state.panelBannerFile = panelBannerFile_5
        if V_2004 then
            Lumia.applyPrimaryColor(V_2004)
        end
        return true
    end
    if
        V_2005.forceRestart ~= true
        and Lumia.state._bannerFetchFailFile == panelBannerFile_5
        and type(Lumia.state._bannerFetchFailAt) == "number"
        and (GetGameTimer() - Lumia.state._bannerFetchFailAt) < 45000
    then
        Lumia.state.panelBannerFile = panelBannerFile_5
        return false
    end
    if V_2005.forceRestart == true then
        Lumia.state._bannerFetchFailFile = nil
        Lumia.state._bannerFetchFailAt = nil
    end

    Lumia.TraceAlways(
        "applyPanelBannerFile",
        "file=" .. tostring(panelBannerFile_5),
        "source=" .. tostring(V_2006),
        "data=" .. tostring(type(V_2005.dataUrl) == "string" and #V_2005.dataUrl or 0),
        "url=" .. tostring(V_2005.url or ""):sub(1, 40)
    )
    Lumia.state.bannerLocalLock = false
    if V_2006 == "autoInject" then
        Lumia.state.panelLiveBannerLock = false
        Lumia.state.panelAutoInjectFile = panelBannerFile_5
        if V_2005.rev and tostring(V_2005.rev) ~= "" then
            Lumia.state.panelAutoInjectRev = tostring(V_2005.rev)
        end
        if Lumia.features and Lumia.features.savePanelBannerCache and V_2005.rev ~= "cache" then
            pcall(Lumia.features.savePanelBannerCache, {
                bannerFile = panelBannerFile_5,
                bannerUrl = V_2005.url,
                isGif = V_2005.isGif,
                primary = V_2004,
                mousePrimary = V_2004,
            })
        end
    elseif V_2006 == "editor" or V_2006 == "live" then
        Lumia.state.panelLiveBannerLock = true
        Lumia.state.panelLiveBannerFile = panelBannerFile_5
    end
    Lumia.state.panelBannerFile = panelBannerFile_5
    if V_2004 then
        Lumia.applyPrimaryColor(V_2004)
    elseif Lumia.DEFAULT_BANNER_PRIMARY[panelBannerFile_5] then
        Lumia.applyPrimaryColor(Lumia.getDefaultBannerPrimary(panelBannerFile_5))
    end
    if panelBannerFile_5 == "v7banner.png" or panelBannerFile_5 == "bw.png" or panelBannerFile_5 == "lumia.gif" then
        local bannerIndex_3 = panelBannerFile_5 == "bw.png" and 2 or (panelBannerFile_5 == "lumia.gif" and 3 or 1)
        Lumia.state.bannerIndex = bannerIndex_3
        if Lumia.state.combos.menubanner then
            Lumia.state.combos.menubanner.index = bannerIndex_3
        end
        local url_6 = V_2005.url
        if type(url_6) ~= "string" or not url_6:find("^https?://", 1) then
            url_6 = Lumia.protect.urls.banners(panelBannerFile_5)
        end
        local V_2008 = panelBannerFile_5 == "lumia.gif"
        if V_2005.isGif == true then
            V_2008 = true
        elseif V_2005.isGif == false then
            V_2008 = false
        end
        Lumia.setBannerImage(url_6, panelBannerFile_5, {
            isGif = V_2008,
            mime = V_2005.mime or V_2005.contentType,
            name = V_2005.name,
            force = true,
        })
        Lumia.state.panelBootstrapBannerApplied = true
        return true
    end
    if panelBannerFile_5:find("custom_", 1, true) then
        if Lumia.loadCustomBannerFromPanel then
            V_2005.dataUrl = nil
            Lumia.loadCustomBannerFromPanel(panelBannerFile_5, V_2004, V_2005)
            Lumia.state.panelBootstrapBannerApplied = true
            return true
        end
        return false
    end
    local url_7 = V_2005.url
    if type(url_7) ~= "string" or not url_7:find("^https?://", 1) then
        url_7 = Lumia.protect.urls.banners(panelBannerFile_5)
    end
    local V_2009 = panelBannerFile_5 == "lumia.gif" or tostring(panelBannerFile_5):lower():find("%.gif") ~= nil
    if V_2005.isGif == true then
        V_2009 = true
    elseif V_2005.isGif == false then
        V_2009 = false
    end
    Lumia.setBannerImage(url_7, panelBannerFile_5, {
        isGif = V_2009,
        mime = V_2005.mime or V_2005.contentType,
        name = V_2005.name,
        force = true,
    })
    Lumia.state.panelBootstrapBannerApplied = true
    return true
end

function Lumia.getSharkSubscription()
    if SharkAPI.GetSubscription then
        local V_2010 = SharkAPI.GetSubscription()
        if V_2010 ~= nil then
            return tostring(V_2010)
        end
    end
    return ""
end

function Lumia.isLifetimeSubscription()
    local V_2011 = (Lumia.util and Lumia.util._now) or (GetGameTimer and GetGameTimer()) or 0
    local V_2012 = Lumia.state._lifetimeCache
    if V_2012 and (V_2011 - (V_2012.at or 0)) < 3000 then
        return V_2012.v == true
    end
    local V_2013 = string.lower(Lumia.getSharkSubscription() or "")
    V_2013 = V_2013:gsub("%s+", " "):gsub("^%s+", ""):gsub("%s+$", "")
    local V_2014 = false
    if V_2013 ~= "" and V_2013 ~= "nil" and V_2013 ~= "n/a" then
        V_2014 = V_2013 == "never expires"
            or V_2013:find("never expires", 1, true) ~= nil
            or V_2013:find("lifetime", 1, true) ~= nil
    end
    if Lumia.state then
        Lumia.state._lifetimeCache = { v = V_2014, at = V_2011 }
    end
    return V_2014
end

Lumia = Lumia or {}
Lumia.features = Lumia.features or {}
Lumia.state = Lumia.state or {}
Lumia.state.toggles = Lumia.state.toggles or {}
Lumia.state.sliders = Lumia.state.sliders or {}
Lumia.state.combos = Lumia.state.combos or {}

if type(rawget(_G, "menu")) ~= "table" then
    menu = {}
end
if type(menu.V) ~= "table" then
    menu.V = {}
end
if type(menu.F) ~= "table" then
    menu.F = {}
end

if type(rawget(_G, "menu")) ~= "table" then
    menu = {}
end
if type(menu.V) ~= "table" then
    menu.V = {}
end
if type(menu.F) ~= "table" then
    menu.F = {}
end

menu.V.toggles = Lumia.state.toggles
menu.V.sliders = Lumia.state.sliders
Lumia.state.combos = Lumia.state.combos or {}
Lumia.state.textboxes = Lumia.state.textboxes or {}
Lumia.state.colors = Lumia.state.colors or {}
menu.V.combos = Lumia.state.combos
menu.V.textboxes = Lumia.state.textboxes
menu.V.colors = Lumia.state.colors

function menu.V.toggleOn(V_2015)
    return menu.V.toggles[V_2015] == true
end

function menu.V.slider(V_2016, V_2017)
    local V_2018 = menu.V.sliders[V_2016]
    if V_2018 == nil then
        return V_2017
    end
    return V_2018
end

function menu.F.notify(V_2019)
    V_2019 = tostring(V_2019 or "")
    if V_2019 == "" then
        return
    end
    local V_2020 = V_2019:lower()
    if V_2020:find("hooks on", 1, true) or V_2020:find("hooks off", 1, true) then
        return
    end
    if V_2020:match("%s+on$") or V_2020:match("%s+off$") then
        return
    end
    Lumia.notify.info(V_2019, 2800)
    if Lumia.isDevUser() then
        print("[Lumia] " .. tostring(V_2019))
    end
end
notify = menu.F.notify

function menu.F.Combo(V_2021, V_2022, V_2023, V_2024, V_2025, V_2026, V_2027, V_2028)
    menu.V.combos[V_2023] = menu.V.combos[V_2023] or { list = V_2024, index = V_2025 or 1 }
    local V_2029 = menu.V.combos[V_2023]
    V_2029.list = V_2024 or V_2029.list
    if not V_2029.index or V_2029.index < 1 then
        V_2029.index = V_2025 or 1
    end
    if V_2029.index > #V_2029.list then
        V_2029.index = 1
    end

    local V_2031 = Lumia.api.addOption(V_2021, {
        type = "combo",
        text = V_2022,
        id = V_2023,
        toggle = V_2023,
        list = V_2024,
        onchange = (V_2023 == "menubanner"),
        loopToggle = V_2028,

        func = function()
            local V_2030 = menu.V.combos[V_2023]
            if not V_2030 then
                return
            end
            if V_2026 then
                if V_2028 then
                    V_2026(V_2030.index, V_2030.list[V_2030.index])
                else
                    V_2026(V_2030.index, V_2030.list[V_2030.index])
                end
            end
        end,
        tab = V_2027,
        _baseText = V_2022,
    })

    local function F_48()
        local V_2032 = menu.V.combos[V_2023]
        if V_2032 and V_2032.list and V_2032.list[V_2032.index] then
            V_2031.text = V_2031._baseText or V_2022
        end
    end
    V_2031._refreshComboLabel = F_48
    F_48()
    return V_2031
end

do
    local handleLeft_1 = Lumia.api.handleLeft
    local handleRight_1 = Lumia.api.handleRight

    local function F_49(V_2033)
        local V_2034 = Lumia.api.getSelectedOption()
        if not V_2034 or (V_2034.type ~= "combo" and V_2034.type ~= "checkcombo") then
            return false
        end
        if Lumia.api.isKbSideComboOpt(V_2034) then
            return false
        end
        if Lumia.api.isKbSideComboOpen() then
            return false
        end
        local V_2035 = V_2034.id or V_2034.toggle
        local V_2036 = V_2035 and menu.V.combos[V_2035]
        if not V_2036 or not V_2036.list or #V_2036.list < 1 then
            return false
        end
        local V_2037 = #V_2036.list
        V_2036.index = ((V_2036.index - 1 + V_2033) % V_2037) + 1
        V_2034._refreshComboLabel()
        if V_2034.onCombo then
            __LCTR(10441, function()
                V_2034.onCombo(V_2036.index, V_2036.list[V_2036.index])
            end)
        elseif V_2034.onchange and V_2034.func then
            __LCTR(10445, function()
                V_2034.func()
            end)
        end
        return true
    end

    Lumia.api.handleLeft = function()
        if Lumia.api.isKbSideComboOpen() then
            Lumia.api.handleKbSideComboMove(-1)
            return
        end
        local V_2038 = Lumia.api.getSelectedOption()
        if V_2038 and Lumia.api.isKbSideComboOpt(V_2038) then
            Lumia.api.openKbSideCombo(V_2038)
            return
        end
        if F_49(-1) then
            return
        end
        if handleLeft_1 then
            return handleLeft_1()
        end
    end

    Lumia.api.handleRight = function()
        if Lumia.api.isKbSideComboOpen() then
            Lumia.api.handleKbSideComboMove(1)
            return
        end
        local V_2039 = Lumia.api.getSelectedOption()
        if V_2039 and Lumia.api.isKbSideComboOpt(V_2039) then
            Lumia.api.openKbSideCombo(V_2039)
            return
        end
        if F_49(1) then
            return
        end
        if handleRight_1 then
            return handleRight_1()
        end
    end
end

function menu.F.comboValue(V_2040)
    local V_2041 = menu.V.combos[V_2040]
    if not V_2041 or not V_2041.list then
        return nil
    end
    return V_2041.list[V_2041.index or 1]
end

menu.V.tabOrder = {
    "Self",
    "Online",
    "Vehicle",
    "Weapon",
    "Destroyer",
    "Misc",
    "Cloud",
    "Script",
    "Settings",
    "Search",
}

do
    local options_46 = {
        24,
        25,
        37,
        44,
        45,
        47,
        58,
        140,
        141,
        142,
        143,
        257,
        263,
        264,
    }
    local V_2042 = #options_46
    local disableControlAction = DisableControlAction
    local disablePlayerFiring = DisablePlayerFiring
    local hideHudComponentThisFrame = HideHudComponentThisFrame
    local options_47 = {
        23,
        75,
        73,
        47,
        74,
        80,
        86,
        101,
        102,
        140,
        141,
        142,
        143,
        257,
    }
    local V_2043 = #options_47

    function Lumia.features.keepMenuOpen(V_2044)
        local V_2045 = GetGameTimer() + (tonumber(V_2044) or 700)
        if V_2045 > (Lumia.state._keepMenuUntil or 0) then
            Lumia.state._keepMenuUntil = V_2045
        end
        Lumia.state._menuToggleSeen = Lumia.state._menuToggleSeq or 0
    end

    function Lumia.features.armMenuToggleGuard(V_2046)
        Lumia.state._menuToggleGuardUntil = GetGameTimer() + (tonumber(V_2046) or 320)
    end

    function Lumia.features.menuToggleGuardActive()
        return GetGameTimer() < (tonumber(Lumia.state._menuToggleGuardUntil) or 0)
    end

    function Lumia.features.blockMenuTaskCancelInput()
        if menu.F.eagleAcLive and menu.F.eagleAcLive() then
            return
        end
        for V_2047 = 0, 2 do
            for V_2048 = 1, V_2043 do
                DisableControlAction(V_2047, options_47[V_2048], true)
            end
        end
    end

    function Lumia.features.blockMenuCombatInput()
        if menu.F.eagleAcLive and menu.F.eagleAcLive() then
            return
        end
        for V_2049 = 1, V_2042 do
            disableControlAction(0, options_46[V_2049], true)
        end
        disablePlayerFiring(Lumia.util.playerId and Lumia.util.playerId() or PlayerId(), true)
        if hideHudComponentThisFrame then
            hideHudComponentThisFrame(19)
            hideHudComponentThisFrame(20)
        end
    end
end

do
    local handleLeft_2 = Lumia.api.handleLeft
    local handleRight_2 = Lumia.api.handleRight

    local function F_50(V_2050)
        local V_2051 = Lumia.api.getSelectedOption()
        if not V_2051 or (V_2051.type ~= "combo" and V_2051.type ~= "checkcombo") then
            return false
        end
        if Lumia.api.isKbSideComboOpt(V_2051) then
            return false
        end
        if Lumia.api.isKbSideComboOpen() then
            return false
        end
        local V_2052 = V_2051.id or V_2051.toggle
        local V_2053 = V_2052 and Lumia.state.combos and Lumia.state.combos[V_2052]
        if not V_2053 or not V_2053.list or #V_2053.list < 1 then
            return false
        end
        local V_2054 = #V_2053.list
        V_2053.index = ((V_2053.index - 1 + V_2050) % V_2054) + 1
        V_2051._refreshComboLabel()
        if V_2051.onCombo then
            __LCTR(10591, function()
                V_2051.onCombo(V_2053.index, V_2053.list[V_2053.index])
            end)
        elseif V_2051.onchange and V_2051.func then
            __LCTR(10595, function()
                V_2051.func()
            end)
        end
        return true
    end

    Lumia.api.handleLeft = function()
        if Lumia.api.isKbSideComboOpen() then
            Lumia.api.handleKbSideComboMove(-1)
            return
        end
        local V_2055 = Lumia.api.getSelectedOption()
        if V_2055 and Lumia.api.isKbSideComboOpt(V_2055) then
            Lumia.api.openKbSideCombo(V_2055)
            return
        end
        if F_50(-1) then
            return
        end
        if handleLeft_2 then
            return handleLeft_2()
        end
    end

    Lumia.api.handleRight = function()
        if Lumia.api.isKbSideComboOpen() then
            Lumia.api.handleKbSideComboMove(1)
            return
        end
        local V_2056 = Lumia.api.getSelectedOption()
        if V_2056 and Lumia.api.isKbSideComboOpt(V_2056) then
            Lumia.api.openKbSideCombo(V_2056)
            return
        end
        if F_50(1) then
            return
        end
        if handleRight_2 then
            return handleRight_2()
        end
    end
end

menu.V.slider = function(V_2057, V_2058)
    local V_2059 = Lumia.state.sliders[V_2057]
    if V_2059 == nil then
        return V_2058
    end
    return V_2059
end

menu.F.nativeRevive = function()
    if (menu.F.isSeedAc()) or (menu.F.shouldUseSeedApi()) then
        if menu.F.seedRevive then
            return menu.F.seedRevive(nil, nil, 2) == true
        end
        return false
    end
    if GetResourceState and GetResourceState("s_medical") == "started" and SharkAPI and SharkAPI.Inject then
        SharkAPI.Inject("s_medical", "exports.s_medical:StopDeath(false)\r\n")
        return true
    end
    local entity_20 = PlayerPedId()
    local coords_9 = GetEntityCoords(entity_20, false)
    NetworkResurrectLocalPlayer(coords_9.x, coords_9.y, coords_9.z, GetEntityHeading(entity_20) + 0.0, true, false)
    SetEntityHealth(entity_20, GetEntityMaxHealth(entity_20))
    ClearPedBloodDamage(entity_20)
    SetEntityCollision(entity_20, true, true)
    StopScreenEffect("DeathFailOut")
    AnimpostfxStop("DeathFailOut")
    AnimpostfxStopAll()
    ClearDrawOrigin()
    ReviveInjuredPed(entity_20)
    DisableScreenblurFade()
    ClearTimecycleModifier()
    EnableAllControlActions(0)
    ResetPedVisibleDamage(entity_20)
    ResetPedMovementClipset(entity_20, 0.0)
    ResurrectPed(entity_20)
    ClearPedTasksImmediately(entity_20)
    SetPlayerControl(PlayerId(), true, 0)
    FreezeEntityPosition(entity_20, false)
    local vehicle_3 = GetVehiclePedIsIn(entity_20, false)
    if vehicle_3 and vehicle_3 ~= 0 and DoesEntityExist(vehicle_3) then
        FreezeEntityPosition(vehicle_3, false)
    end
    return true
end
Lumia.features.nativeRevive = menu.F.nativeRevive

menu.F.resStarted = function(V_2060)
    local V_2061 = GetResourceState and GetResourceState(V_2060) or ""
    return V_2061 == "started" or V_2061 == "starting"
end

menu.F.reviveInject = function(V_2062, V_2063)
    if menu.F.isReaperAc and menu.F.isReaperAc() then
        return false
    end
    if type(V_2063) ~= "string" or V_2063 == "" then