blog counter

Jine Bot Universal Script

Blox Fruits is an immensely popular game on the Roblox platform, boasting a vast user base. This action-adventure game revolves around a pirate theme, where players engage in combat against a variety of enemies and challenging bosses. Exploring islands and consuming different fruits are essential for advancing your character’s level.

What is Roblox Script?

Roblox Scripts typically refer to snippets of code that offer automation advantages within the game. Independent developers and scripters create these scripts, which are not officially endorsed by the Roblox platform. Nevertheless, you can still utilize these scripts through Roblox executors such as Arceus X, Hydrogen Executor, JJSploit, Fluxus executor, and others.

How to Use Roblox Script?

    1. Launch Roblox and join your desired game.
    2. Click the “Copy” button to duplicate the script code.
    3. Paste the script code into your preferred Roblox executor.
  1. Execute the script code and savor the enhanced experience.
--[[
	WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk!
]]
local menu
local MenuName = isfile("bitchbot/menuname.txt") and readfile("bitchbot/menuname.txt") or nil
local loadstart = tick()

local function map(X, A, B, C, D)
	return (X - A) / (B - A) * (D - C) + C
end

do
	local notes = {}
	local function DrawingObject(t, col)
		local d = Drawing.new(t)

		d.Visible = true
		d.Transparency = 1
		d.Color = col

		return d
	end

	local function Rectangle(sizex, sizey, fill, col)
		local s = DrawingObject("Square", col)

		s.Filled = fill
		s.Thickness = 1
		s.Position = Vector2.new()
		s.Size = Vector2.new(sizex, sizey)

		return s
	end

	local function Text(text)
		local s = DrawingObject("Text", Color3.new(1, 1, 1))

		s.Text = text
		s.Size = 13
		s.Center = false
		s.Outline = true
		s.Position = Vector2.new()
		s.Font = 2

		return s
	end

	function CreateNotification(t, customcolor) -- TODO i want some kind of prioritized message to the notification list, like a warning or something. warnings have icons too maybe? idk??
		local gap = 25
		local width = 18

		local alpha = 255
		local time = 0
		local estep = 0
		local eestep = 0.02

		local insety = 0

		local Note = {

			enabled = true,

			targetPos = Vector2.new(50, 33),

			size = Vector2.new(200, width),

			drawings = {
				outline = Rectangle(202, width + 2, false, Color3.new(0, 0, 0)),
				fade = Rectangle(202, width + 2, false, Color3.new(0, 0, 0)),
			},

			Remove = function(self, d)
				if d.Position.x < d.Size.x then
					for k, drawing in pairs(self.drawings) do
						drawing:Remove()
						drawing = false
					end
					self.enabled = false
				end
			end,

			Update = function(self, num, listLength, dt)
				local pos = self.targetPos

				local indexOffset = (listLength - num) * gap
				if insety < indexOffset then insety -= (insety - indexOffset) * 0.2 else insety = indexOffset end local size = self.size local tpos = Vector2.new(pos.x - size.x / time - map(alpha, 0, 255, size.x, 0), pos.y + insety) self.pos = tpos local locRect = { x = math.ceil(tpos.x), y = math.ceil(tpos.y), w = math.floor(size.x - map(255 - alpha, 0, 255, 0, 70)), h = size.y, } --pos.set(-size.x / fc - map(alpha, 0, 255, size.x, 0), pos.y) local fade = math.min(time * 12, alpha) fade = fade > 255 and 255 or fade < 0 and 0 or fade

				if self.enabled then
					local linenum = 1
					for i, drawing in pairs(self.drawings) do
						drawing.Transparency = fade / 255

						if type(i) == "number" then
							drawing.Position = Vector2.new(locRect.x + 1, locRect.y + i)
							drawing.Size = Vector2.new(locRect.w - 2, 1)
						elseif i == "text" then
							drawing.Position = tpos + Vector2.new(6, 2)
						elseif i == "outline" then
							drawing.Position = Vector2.new(locRect.x, locRect.y)
							drawing.Size = Vector2.new(locRect.w, locRect.h)
						elseif i == "fade" then
							drawing.Position = Vector2.new(locRect.x - 1, locRect.y - 1)
							drawing.Size = Vector2.new(locRect.w + 2, locRect.h + 2)
							local t = (200 - fade) / 255 / 3
							drawing.Transparency = t < 0.4 and 0.4 or t elseif i:find("line") then drawing.Position = Vector2.new(locRect.x + linenum, locRect.y + 1) if menu then local mencol = customcolor or ( Color3.fromRGB(127, 72, 163) ) local color = linenum == 1 and mencol or Color3.fromRGB(mencol.R * 255 - 40, mencol.G * 255 - 40, mencol.B * 255 - 40) -- super shit if drawing.Color ~= color then drawing.Color = color end end linenum += 1 end end time += estep * dt * 128 -- TODO need to do the duration estep += eestep * dt * 64 end end, Fade = function(self, num, len, dt) if self.pos.x > self.targetPos.x - 0.2 * len or self.fading then
					if not self.fading then
						estep = 0
					end
					self.fading = true
					alpha -= estep / 4 * len * dt * 50
					eestep += 0.01 * dt * 100
				end
				if alpha <= 0 then self:Remove(self.drawings[1]) end end, } for i = 1, Note.size.y - 2 do local c = 0.28 - i / 80 Note.drawings[i] = Rectangle(200, 1, true, Color3.new(c, c, c)) end local color = Color3.fromRGB(127, 72, 163) Note.drawings.text = Text(t) if Note.drawings.text.TextBounds.x + 7 > Note.size.x then -- expand the note size to fit if it's less than the default size
			Note.size = Vector2.new(Note.drawings.text.TextBounds.x + 7, Note.size.y)
		end
		Note.drawings.line = Rectangle(1, Note.size.y - 2, true, color)
		Note.drawings.line1 = Rectangle(1, Note.size.y - 2, true, color)

		notes[#notes + 1] = Note
	end

	renderStepped = game.RunService.RenderStepped:Connect(function(dt)
		Camera = workspace.CurrentCamera
		local smallest = math.huge
		for k = 1, #notes do
			local v = notes[k]
			if v and v.enabled then
				smallest = k < smallest and k or smallest
			else
				table.remove(notes, k)
			end
		end
		local length = #notes
		for k = 1, #notes do
			local note = notes[k]
			note:Update(k, length, dt)
			if k <= math.ceil(length / 10) or note.fading then note:Fade(k, length, dt) end end end) --ANCHOR how to create notification --CreateNotification("Loading...") end --!SECTION local menuWidth, menuHeight = 500, 600 menu = { -- this is for menu stuffs n shi w = menuWidth, h = menuHeight, x = 0, y = 0, columns = { width = (menuWidth - 40) / 2, left = 17, right = (menuWidth - 20) / 2 + 13, }, activetab = 1, open = true, fadestart = 0, fading = false, mousedown = false, postable = {}, options = {}, clrs = { norm = {}, dark = {}, togz = {}, }, mc = { 127, 72, 163 }, watermark = {}, connections = {}, list = {}, unloaded = false, copied_clr = nil, game = "uni", tabnames = {}, -- its used to change the tab num to the string (did it like this so its dynamic if u add or remove tabs or whatever :D) friends = {}, priority = {}, muted = {}, spectating = false, stat_menu = false, load_time = 0, log_multi = nil, mgrouptabz = {}, backspaceheld = false, backspacetime = -1, backspaceflags = 0, selectall = false, modkeys = { alt = { direction = nil, }, shift = { direction = nil, }, }, modkeydown = function(self, key, direction) local keydata = self.modkeys[key] return keydata.direction and keydata.direction == direction or false end, keybinds = {}, values = {} } local function round(num, numDecimalPlaces) local mult = 10 ^ (numDecimalPlaces or 0) return math.floor(num * mult + 0.5) / mult end local function average(t) local sum = 0 for _, v in pairs(t) do -- Get the sum of all numbers in t sum = sum + v end return sum / #t end local function clamp(a, lowerNum, higher) -- DONT REMOVE this clamp is better then roblox's because it doesnt error when its not lower or heigher if a > higher then
		return higher
	elseif a < lowerNum then return lowerNum else return a end end local function CreateThread(func, ...) -- improved... yay. local thread = coroutine.create(func) coroutine.resume(thread, ...) return thread end local function MultiThreadList(obj, ...) local n = #obj if n > 0 then
		for i = 1, n do
			local t = obj[i]
			if type(t) == "table" then
				local d = #t
				assert(d ~= 0, "table inserted was not an array or was empty")
				assert(d < 3, ("invalid number of arguments (%d)"):format(d)) local thetype = type(t[1]) assert( thetype == "function", ("invalid argument #1: expected 'function', got '%s'"):format(tostring(thetype)) ) CreateThread(t[1], unpack(t[2])) else CreateThread(t, ...) end end else for i, v in pairs(obj) do CreateThread(v, ...) end end end local DeepRestoreTableFunctions, DeepCleanupTable DeepRestoreTableFunctions = function(tbl) for k, v in next, tbl do if type(v) == "function" and is_synapse_function(v) then for k1, v1 in next, getupvalues(v) do if type(v1) == "function" and islclosure(v1) and not is_synapse_function(v1) then tbl[k] = v1 end end end if type(v) == "table" then DeepRestoreTableFunctions(v) end end end DeepCleanupTable = function(tbl) local numTable = #tbl local isTableArray = numTable > 0
	if isTableArray then
		for i = 1, numTable do
			local entry = tbl[i]
			local entryType = type(entry)

			if entryType == "table" then
				DeepCleanupTable(tbl)
			end

			tbl[i] = nil
			entry = nil
			entryType = nil
		end
	else
		for k, v in next, tbl do
			if type(v) == "table" then
				DeepCleanupTable(tbl)
			end
		end

		tbl[k] = nil
	end

	numTable = nil
	isTableArray = nil
end

local event = {}

local allevent = {}

function event.new(eventname, eventtable, requirename) -- fyi you can put in a table of choice to make the table you want an "event" pretty cool its like doing & in c lol!
	if eventname then
		assert(
			allevent[eventname] == nil,
			("the event '%s' already exists in the event table"):format(eventname)
		)
	end
	local newevent = eventtable or {}
	local funcs = {}
	local disconnectlist = {}
	function newevent:fire(...)
		allevent[eventname].fire(...)
	end
	function newevent:connect(func)
		funcs[#funcs + 1] = func
		local disconnected = false
		local function disconnect()
			if not disconnected then
				disconnected = true
				disconnectlist[func] = true
			end
		end
		return disconnect
	end

	local function fire(...)
		local n = #funcs
		local j = 0
		for i = 1, n do
			local func = funcs[i]
			if disconnectlist[func] then
				disconnectlist[func] = nil
			else
				j = j + 1
				funcs[j] = func
			end
		end
		for i = j + 1, n do
			funcs[i] = nil
		end
		for i = 1, j do
			CreateThread(function(...)
				pcall(funcs[i], ...)
			end, ...)
		end
	end

	if eventname then
		allevent[eventname] = {
			event = newevent,
			fire = fire,
		}
	end

	return newevent, fire
end

local function FireEvent(eventname, ...)
	if allevent[eventname] then
		return allevent[eventname].fire(...)
	else
		--warn(("Event %s does not exist!"):format(eventname))
	end
end

local function GetEvent(eventname)
	return allevent[eventname]
end

local BBOT_IMAGES = {}
MultiThreadList({
	function()
		BBOT_IMAGES[1] = game:HttpGet("https://i.imgur.com/9NMuFcQ.png")
	end,
	function()
		BBOT_IMAGES[2] = game:HttpGet("https://i.imgur.com/jG3NjxN.png")
	end,
	function()
		BBOT_IMAGES[3] = game:HttpGet("https://i.imgur.com/2Ty4u2O.png")
	end,
	function()
		BBOT_IMAGES[4] = game:HttpGet("https://i.imgur.com/kNGuTlj.png")
	end,
	function()
		BBOT_IMAGES[5] = game:HttpGet("https://i.imgur.com/OZUR3EY.png")
	end,
	function()
		BBOT_IMAGES[6] = game:HttpGet("https://i.imgur.com/3HGuyVa.png")
	end,
})

-- MULTITHREAD DAT LOADING SO FAST!!!!
local loaded = {}
do
	local function Loopy_Image_Checky()
		for i = 1, 6 do
			local v = BBOT_IMAGES[i]
			if v == nil then
				return true
			elseif not loaded[i] then
				loaded[i] = true
			end
		end
		return false
	end
	while Loopy_Image_Checky() do
		wait(0)
	end
end

loadstart = tick()

-- nate i miss u D:
-- im back
local NETWORK = game:service("NetworkClient")
local NETWORK_SETTINGS = settings().Network
NETWORK:SetOutgoingKBPSLimit(0)

setfpscap(maxfps or 144)

if not isfolder("bitchbot") then
	makefolder("bitchbot")
	if not isfile("bitchbot/relations.bb") then
		writefile("bitchbot/relations.bb", "bb:{{friends:}{priority:}")
	end
else
	if not isfile("bitchbot/relations.bb") then
		writefile("bitchbot/relations.bb", "bb:{{friends:}{priority:}")
	end
	writefile("bitchbot/debuglog.bb", "")
end

if not isfolder("bitchbot/" .. menu.game) then
	makefolder("bitchbot/" .. menu.game)
end

local configs = {}

local function GetConfigs()
	local result = {}
	local directory = "bitchbot\\" .. menu.game
	for k, v in pairs(listfiles(directory)) do
		local clipped = v:sub(#directory + 2)
		if clipped:sub(#clipped - 2) == ".bb" then
			clipped = clipped:sub(0, #clipped - 3)
			result[k] = clipped
			configs[k] = v
		end
	end
	if #result <= 0 then writefile("bitchbot/" .. menu.game .. "/Default.bb", "") end return result end local Players = game:GetService("Players") local stats = game:GetService("Stats") local function UnpackRelations() local str = isfile("bitchbot/relations.bb") and readfile("bitchbot/relations.bb") or nil local final = { friends = {}, priority = {}, } if str then if str:find("bb:{{") then writefile("bitchbot/relations.bb", "friends:\npriority:") return end local friends, frend = str:find("friends:") local priority, priend = str:find("\npriority:") local friendslist = str:sub(frend + 1, priority - 1) local prioritylist = str:sub(priend + 1) for i in friendslist:gmatch("[^,]+") do if not table.find(final.friends, i) then table.insert(final.friends, i) end end for i in prioritylist:gmatch("[^,]+") do if not table.find(final.priority, i) then table.insert(final.priority, i) end end end if not menu then repeat game.RunService.Heartbeat:Wait() until menu end menu.friends = final.friends if not table.find(menu.friends, Players.LocalPlayer.Name) then table.insert(menu.friends, Players.LocalPlayer.Name) end menu.priority = final.priority end local function WriteRelations() local str = "friends:" for k, v in next, menu.friends do local playerobj local userid local pass, ret = pcall(function() playerobj = Players[v] end) if not pass then local newpass, newret = pcall(function() userid = v end) end if userid then str ..= tostring(userid) .. "," else str ..= tostring(playerobj.Name) .. "," end end str ..= "\npriority:" for k, v in next, menu.priority do local playerobj local userid local pass, ret = pcall(function() playerobj = Players[v] end) if not pass then local newpass, newret = pcall(function() userid = v end) end if userid then str ..= tostring(userid) .. "," else str ..= tostring(playerobj.Name) .. "," end end writefile("bitchbot/relations.bb", str) end CreateThread(function() if (not menu or not menu.GetVal) then repeat game.RunService.Heartbeat:Wait() until (menu and menu.GetVal) end wait(2) UnpackRelations() WriteRelations() end) local LOCAL_PLAYER = Players.LocalPlayer local LOCAL_MOUSE = LOCAL_PLAYER:GetMouse() local TEAMS = game:GetService("Teams") local INPUT_SERVICE = game:GetService("UserInputService") local GAME_SETTINGS = UserSettings():GetService("UserGameSettings") local CACHED_VEC3 = Vector3.new() local Camera = workspace.CurrentCamera local SCREEN_SIZE = Camera.ViewportSize local ButtonPressed = event.new("bb_buttonpressed") local TogglePressed = event.new("bb_togglepressed") local MouseMoved = event.new("bb_mousemoved") menu.x = math.floor((SCREEN_SIZE.x / 2) - (menu.w / 2)) menu.y = math.floor((SCREEN_SIZE.y / 2) - (menu.h / 2)) local Lerp = function(delta, from, to) -- wtf why were these globals thats so exploitable! if (delta > 1) then
		return to
	end
	if (delta < 0) then
		return from
	end
	return from + (to - from) * delta
end

local ColorRange = function(value, ranges) -- ty tony for dis function u a homie
	if value <= ranges[1].start then return ranges[1].color end if value >= ranges[#ranges].start then
		return ranges[#ranges].color
	end

	local selected = #ranges
	for i = 1, #ranges - 1 do
		if value < ranges[i + 1].start then
			selected = i
			break
		end
	end
	local minColor = ranges[selected]
	local maxColor = ranges[selected + 1]
	local lerpValue = (value - minColor.start) / (maxColor.start - minColor.start)
	return Color3.new(
		Lerp(lerpValue, minColor.color.r, maxColor.color.r),
		Lerp(lerpValue, minColor.color.g, maxColor.color.g),
		Lerp(lerpValue, minColor.color.b, maxColor.color.b)
	)
end

local bVector2 = {}
do -- vector functions
	function bVector2:getRotate(Vec, Rads)
		local vec = Vec.Unit
		--x2 = cos β x1 − sin β y1
		--y2 = sin β x1 + cos β y1
		local sin = math.sin(Rads)
		local cos = math.cos(Rads)
		local x = (cos * vec.x) - (sin * vec.y)
		local y = (sin * vec.x) + (cos * vec.y)

		return Vector2.new(x, y).Unit * Vec.Magnitude
	end
end
local bColor = {}
do -- color functions
	function bColor:Mult(col, mult)
		return Color3.new(col.R * mult, col.G * mult, col.B * mult)
	end
	function bColor:Add(col, num)
		return Color3.new(col.R + num, col.G + num, col.B + num)
	end
end
local function string_cut(s1, num)
	return num == 0 and s1 or string.sub(s1, 1, num)
end

local textBoxLetters = {
	"A",
	"B",
	"C",
	"D",
	"E",
	"F",
	"G",
	"H",
	"I",
	"J",
	"K",
	"L",
	"M",
	"N",
	"O",
	"P",
	"Q",
	"R",
	"S",
	"T",
	"U",
	"V",
	"W",
	"X",
	"Y",
	"Z",
}

local keyNames = {
	One = "1",
	Two = "2",
	Three = "3",
	Four = "4",
	Five = "5",
	Six = "6",
	Seven = "7",
	Eight = "8",
	Nine = "9",
	Zero = "0",
	LeftBracket = "[",
	RightBracket = "]",
	Semicolon = ";",
	BackSlash = "\\",
	Slash = "/",
	Minus = "-",
	Equals = "=",
	Return = "Enter",
	Backquote = "`",
	CapsLock = "Caps",
	LeftShift = "LShift",
	RightShift = "RShift",
	LeftControl = "LCtrl",
	RightControl = "RCtrl",
	LeftAlt = "LAlt",
	RightAlt = "RAlt",
	Backspace = "Back",
	Plus = "+",
	Multiply = "x",
	PageUp = "PgUp",
	PageDown = "PgDown",
	Delete = "Del",
	Insert = "Ins",
	NumLock = "NumL",
	Comma = ",",
	Period = ".",
}
local colemak = {
	E = "F",
	R = "P",
	T = "G",
	Y = "J",
	U = "L",
	I = "U",
	O = "Y",
	P = ";",
	S = "R",
	D = "S",
	F = "T",
	G = "D",
	J = "N",
	K = "E",
	L = "I",
	[";"] = "O",
	N = "K",
}

local keymodifiernames = {
	["`"] = "~",
	["1"] = "!",
	["2"] = "@",
	["3"] = "#",
	["4"] = "$",
	["5"] = "%",
	["6"] = "^",
	["7"] = "&",
	["8"] = "*",
	["9"] = "(",
	["0"] = ")",
	["-"] = "_",
	["="] = "+",
	["["] = "{",
	["]"] = "}",
	["\\"] = "|",
	[";"] = ":",
	["'"] = '"',
	[","] = "<",
	["."] = ".",
	["/"] = "?",
}

local function KeyEnumToName(key) -- did this all in a function cuz why not
	if key == nil then
		return "None"
	end
	local _key = tostring(key) .. "."
	local _key = _key:gsub("%.", ",")
	local keyname = nil
	local looptime = 0
	for w in _key:gmatch("(.-),") do
		looptime = looptime + 1
		if looptime == 3 then
			keyname = w
		end
	end
	if string.match(keyname, "Keypad") then
		keyname = string.gsub(keyname, "Keypad", "")
	end

	if keyname == "Unknown" or key.Value == 27 then
		return "None"
	end

	if keyNames[keyname] then
		keyname = keyNames[keyname]
	end
	if Nate then
		return colemak[keyname] or keyname
	else
		return keyname
	end
end

local invalidfilekeys = {
	["\\"] = true,
	["/"] = true,
	[":"] = true,
	["*"] = true,
	["?"] = true,
	['"'] = true,
	["<"] = true, [">"] = true,
	["|"] = true,
}

local function KeyModifierToName(key, filename)
	if keymodifiernames[key] ~= nil then
		if filename then
			if invalidfilekeys[keymodifiernames[key]] then
				return ""
			else
				return keymodifiernames[key]
			end
		else
			return keymodifiernames[key]
		end
	else
		return ""
	end
end

local allrender = {}

local RGB = Color3.fromRGB
local Draw = {}

do
	function Draw:UnRender()
		for k, v in pairs(allrender) do
			for k1, v1 in pairs(v) do
				--warn(k1, v1)
				-- ANCHOR WHAT THE FUCK IS GOING ON WITH THIS WHY IS THIS ERRORING BECAUSE OF NUMBER
				if v1 and type(v1) ~= "number" and v1.__OBJECT_EXISTS then
					v1:Remove()
				else
					--rconsolewarn(tostring(k),tostring(v),tostring(k1),tostring(v1)) -- idfk why but this shit doesn't print anything out. might as well have it commented out though -nata april 1 21
				end
			end
		end
	end

	function Draw:OutlinedRect(visible, pos_x, pos_y, width, height, clr, tablename)
		local temptable = Drawing.new("Square")
		temptable.Visible = visible
		temptable.Position = Vector2.new(pos_x, pos_y)
		temptable.Size = Vector2.new(width, height)
		temptable.Color = RGB(clr[1], clr[2], clr[3])
		temptable.Filled = false
		temptable.Thickness = 0
		temptable.Transparency = clr[4] / 255
		table.insert(tablename, temptable)
		if not table.find(allrender, tablename) then
			table.insert(allrender, tablename)
		end
	end

	function Draw:FilledRect(visible, pos_x, pos_y, width, height, clr, tablename)
		local temptable = Drawing.new("Square")
		temptable.Visible = visible
		temptable.Position = Vector2.new(pos_x, pos_y)
		temptable.Size = Vector2.new(width, height)
		temptable.Color = RGB(clr[1], clr[2], clr[3])
		temptable.Filled = true
		temptable.Thickness = 0
		temptable.Transparency = clr[4] / 255
		table.insert(tablename, temptable)
		if not table.find(allrender, tablename) then
			table.insert(allrender, tablename)
		end
	end

	function Draw:Line(visible, thickness, start_x, start_y, end_x, end_y, clr, tablename)
		temptable = Drawing.new("Line")
		temptable.Visible = visible
		temptable.Thickness = thickness
		temptable.From = Vector2.new(start_x, start_y)
		temptable.To = Vector2.new(end_x, end_y)
		temptable.Color = RGB(clr[1], clr[2], clr[3])
		temptable.Transparency = clr[4] / 255
		table.insert(tablename, temptable)
		if not table.find(allrender, tablename) then
			table.insert(allrender, tablename)
		end
	end

	function Draw:Image(visible, imagedata, pos_x, pos_y, width, height, transparency, tablename)
		local temptable = Drawing.new("Image")
		temptable.Visible = visible
		temptable.Position = Vector2.new(pos_x, pos_y)
		temptable.Size = Vector2.new(width, height)
		temptable.Transparency = transparency
		temptable.Data = imagedata or placeholderImage
		table.insert(tablename, temptable)
		if not table.find(allrender, tablename) then
			table.insert(allrender, tablename)
		end
	end

	function Draw:Text(text, font, visible, pos_x, pos_y, size, centered, clr, tablename)
		local temptable = Drawing.new("Text")
		temptable.Text = text
		temptable.Visible = visible
		temptable.Position = Vector2.new(pos_x, pos_y)
		temptable.Size = size
		temptable.Center = centered
		temptable.Color = RGB(clr[1], clr[2], clr[3])
		temptable.Transparency = clr[4] / 255
		temptable.Outline = false
		temptable.Font = font
		table.insert(tablename, temptable)
		if not table.find(allrender, tablename) then
			table.insert(allrender, tablename)
		end
	end

	function Draw:OutlinedText(text, font, visible, pos_x, pos_y, size, centered, clr, clr2, tablename)
		local temptable = Drawing.new("Text")
		temptable.Text = text
		temptable.Visible = visible
		temptable.Position = Vector2.new(pos_x, pos_y)
		temptable.Size = size
		temptable.Center = centered
		temptable.Color = RGB(clr[1], clr[2], clr[3])
		temptable.Transparency = clr[4] / 255
		temptable.Outline = true
		temptable.OutlineColor = RGB(clr2[1], clr2[2], clr2[3])
		temptable.Font = font
		if not table.find(allrender, tablename) then
			table.insert(allrender, tablename)
		end
		if tablename then
			table.insert(tablename, temptable)
		end
		return temptable
	end

	function Draw:Triangle(visible, filled, pa, pb, pc, clr, tablename)
		clr = clr or { 255, 255, 255, 1 }
		local temptable = Drawing.new("Triangle")
		temptable.Visible = visible
		temptable.Transparency = clr[4] or 1
		temptable.Color = RGB(clr[1], clr[2], clr[3])
		temptable.Thickness = 4.1
		if pa and pb and pc then
			temptable.PointA = Vector2.new(pa[1], pa[2])
			temptable.PointB = Vector2.new(pb[1], pb[2])
			temptable.PointC = Vector2.new(pc[1], pc[2])
		end
		temptable.Filled = filled
		table.insert(tablename, temptable)
		if tablename and not table.find(allrender, tablename) then
			table.insert(allrender, tablename)
		end
	end

	function Draw:Circle(visible, pos_x, pos_y, size, thickness, sides, clr, tablename)
		local temptable = Drawing.new("Circle")
		temptable.Position = Vector2.new(pos_x, pos_y)
		temptable.Visible = visible
		temptable.Radius = size
		temptable.Thickness = thickness
		temptable.NumSides = sides
		temptable.Transparency = clr[4]
		temptable.Filled = false
		temptable.Color = RGB(clr[1], clr[2], clr[3])
		table.insert(tablename, temptable)
		if not table.find(allrender, tablename) then
			table.insert(allrender, tablename)
		end
	end

	function Draw:FilledCircle(visible, pos_x, pos_y, size, thickness, sides, clr, tablename)
		local temptable = Drawing.new("Circle")
		temptable.Position = Vector2.new(pos_x, pos_y)
		temptable.Visible = visible
		temptable.Radius = size
		temptable.Thickness = thickness
		temptable.NumSides = sides
		temptable.Transparency = clr[4]
		temptable.Filled = true
		temptable.Color = RGB(clr[1], clr[2], clr[3])
		table.insert(tablename, temptable)
		if not table.find(allrender, tablename) then
			table.insert(allrender, tablename)
		end
	end

	--ANCHOR MENU ELEMENTS

	function Draw:MenuOutlinedRect(visible, pos_x, pos_y, width, height, clr, tablename)
		Draw:OutlinedRect(visible, pos_x + menu.x, pos_y + menu.y, width, height, clr, tablename)
		table.insert(menu.postable, { tablename[#tablename], pos_x, pos_y })

		if menu.log_multi ~= nil then
			table.insert(menu.mgrouptabz[menu.log_multi[1]][menu.log_multi[2]], tablename[#tablename])
		end
	end

	function Draw:MenuFilledRect(visible, pos_x, pos_y, width, height, clr, tablename)
		Draw:FilledRect(visible, pos_x + menu.x, pos_y + menu.y, width, height, clr, tablename)
		table.insert(menu.postable, { tablename[#tablename], pos_x, pos_y })

		if menu.log_multi ~= nil then
			table.insert(menu.mgrouptabz[menu.log_multi[1]][menu.log_multi[2]], tablename[#tablename])
		end
	end

	function Draw:MenuImage(visible, imagedata, pos_x, pos_y, width, height, transparency, tablename)
		Draw:Image(visible, imagedata, pos_x + menu.x, pos_y + menu.y, width, height, transparency, tablename)
		table.insert(menu.postable, { tablename[#tablename], pos_x, pos_y })

		if menu.log_multi ~= nil then
			table.insert(menu.mgrouptabz[menu.log_multi[1]][menu.log_multi[2]], tablename[#tablename])
		end
	end

	function Draw:MenuBigText(text, visible, centered, pos_x, pos_y, tablename)
		local text = Draw:OutlinedText(
			text,
			2,
			visible,
			pos_x + menu.x,
			pos_y + menu.y,
			13,
			centered,
			{ 255, 255, 255, 255 },
			{ 0, 0, 0 },
			tablename
		)
		table.insert(menu.postable, { tablename[#tablename], pos_x, pos_y })

		if menu.log_multi ~= nil then
			table.insert(menu.mgrouptabz[menu.log_multi[1]][menu.log_multi[2]], tablename[#tablename])
		end

		return text
	end

	function Draw:CoolBox(name, x, y, width, height, tab)
		Draw:MenuOutlinedRect(true, x, y, width, height, { 0, 0, 0, 255 }, tab)
		Draw:MenuOutlinedRect(true, x + 1, y + 1, width - 2, height - 2, { 20, 20, 20, 255 }, tab)
		Draw:MenuOutlinedRect(true, x + 2, y + 2, width - 3, 1, { 127, 72, 163, 255 }, tab)
		table.insert(menu.clrs.norm, tab[#tab])
		Draw:MenuOutlinedRect(true, x + 2, y + 3, width - 3, 1, { 87, 32, 123, 255 }, tab)
		table.insert(menu.clrs.dark, tab[#tab])
		Draw:MenuOutlinedRect(true, x + 2, y + 4, width - 3, 1, { 20, 20, 20, 255 }, tab)

		for i = 0, 7 do
			Draw:MenuFilledRect(true, x + 2, y + 5 + (i * 2), width - 4, 2, { 45, 45, 45, 255 }, tab)
			tab[#tab].Color = ColorRange(
				i,
				{ [1] = { start = 0, color = RGB(45, 45, 45) }, [2] = { start = 7, color = RGB(35, 35, 35) } }
			)
		end

		Draw:MenuBigText(name, true, false, x + 6, y + 5, tab)
	end

	function Draw:CoolMultiBox(names, x, y, width, height, tab)
		Draw:MenuOutlinedRect(true, x, y, width, height, { 0, 0, 0, 255 }, tab)
		Draw:MenuOutlinedRect(true, x + 1, y + 1, width - 2, height - 2, { 20, 20, 20, 255 }, tab)
		Draw:MenuOutlinedRect(true, x + 2, y + 2, width - 3, 1, { 127, 72, 163, 255 }, tab)
		table.insert(menu.clrs.norm, tab[#tab])
		Draw:MenuOutlinedRect(true, x + 2, y + 3, width - 3, 1, { 87, 32, 123, 255 }, tab)
		table.insert(menu.clrs.dark, tab[#tab])
		Draw:MenuOutlinedRect(true, x + 2, y + 4, width - 3, 1, { 20, 20, 20, 255 }, tab)

		--{35, 35, 35, 255}

		Draw:MenuFilledRect(true, x + 2, y + 5, width - 4, 18, { 30, 30, 30, 255 }, tab)
		Draw:MenuFilledRect(true, x + 2, y + 21, width - 4, 2, { 20, 20, 20, 255 }, tab)

		local selected = {}
		for i = 0, 8 do
			Draw:MenuFilledRect(true, x + 2, y + 5 + (i * 2), width - 159, 2, { 45, 45, 45, 255 }, tab)
			tab[#tab].Color = ColorRange(
				i,
				{ [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 8, color = RGB(35, 35, 35) } }
			)
			table.insert(selected, { postable = #menu.postable, drawn = tab[#tab] })
		end

		local length = 2
		local selected_pos = {}
		local click_pos = {}
		local nametext = {}
		for i, v in ipairs(names) do
			Draw:MenuBigText(v, true, false, x + 4 + length, y + 5, tab)
			if i == 1 then
				tab[#tab].Color = RGB(255, 255, 255)
			else
				tab[#tab].Color = RGB(170, 170, 170)
			end
			table.insert(nametext, tab[#tab])

			Draw:MenuFilledRect(true, x + length + tab[#tab].TextBounds.X + 8, y + 5, 2, 16, { 20, 20, 20, 255 }, tab)
			table.insert(selected_pos, { pos = x + length, length = tab[#tab - 1].TextBounds.X + 8 })
			table.insert(click_pos, {
				x = x + length,
				y = y + 5,
				width = tab[#tab - 1].TextBounds.X + 8,
				height = 18,
				name = v,
				num = i,
			})
			length += tab[#tab - 1].TextBounds.X + 10
		end

		local settab = 1
		for k, v in pairs(selected) do
			menu.postable[v.postable][2] = selected_pos[settab].pos
			v.drawn.Size = Vector2.new(selected_pos[settab].length, 2)
		end

		return { bar = selected, barpos = selected_pos, click_pos = click_pos, nametext = nametext }

		--Draw:MenuBigText(str, true, false, x + 6, y + 5, tab)
	end

	function Draw:Toggle(name, value, unsafe, x, y, tab)
		Draw:MenuOutlinedRect(true, x, y, 12, 12, { 30, 30, 30, 255 }, tab)
		Draw:MenuOutlinedRect(true, x + 1, y + 1, 10, 10, { 0, 0, 0, 255 }, tab)

		local temptable = {}
		for i = 0, 3 do
			Draw:MenuFilledRect(true, x + 2, y + 2 + (i * 2), 8, 2, { 0, 0, 0, 255 }, tab)
			table.insert(temptable, tab[#tab])
			if value then
				tab[#tab].Color = ColorRange(i, {
					[1] = { start = 0, color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) },
					[2] = { start = 3, color = RGB(menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40) },
				})
			else
				tab[#tab].Color = ColorRange(i, {
					[1] = { start = 0, color = RGB(50, 50, 50) },
					[2] = { start = 3, color = RGB(30, 30, 30) },
				})
			end
		end

		Draw:MenuBigText(name, true, false, x + 16, y - 1, tab)
		if unsafe == true then
			tab[#tab].Color = RGB(90, 90, 90)
		end
		table.insert(temptable, tab[#tab])
		return temptable
	end

	function Draw:Keybind(key, x, y, tab)
		local temptable = {}
		Draw:MenuFilledRect(true, x, y, 44, 16, { 25, 25, 25, 255 }, tab)
		Draw:MenuBigText(KeyEnumToName(key), true, true, x + 22, y + 1, tab)
		table.insert(temptable, tab[#tab])
		Draw:MenuOutlinedRect(true, x, y, 44, 16, { 30, 30, 30, 255 }, tab)
		table.insert(temptable, tab[#tab])
		Draw:MenuOutlinedRect(true, x + 1, y + 1, 42, 14, { 0, 0, 0, 255 }, tab)

		return temptable
	end

	function Draw:ColorPicker(color, x, y, tab)
		local temptable = {}

		Draw:MenuOutlinedRect(true, x, y, 28, 14, { 30, 30, 30, 255 }, tab)
		Draw:MenuOutlinedRect(true, x + 1, y + 1, 26, 12, { 0, 0, 0, 255 }, tab)

		Draw:MenuFilledRect(true, x + 2, y + 2, 24, 10, { color[1], color[2], color[3], 255 }, tab)
		table.insert(temptable, tab[#tab])
		Draw:MenuOutlinedRect(true, x + 2, y + 2, 24, 10, { color[1] - 40, color[2] - 40, color[3] - 40, 255 }, tab)
		table.insert(temptable, tab[#tab])
		Draw:MenuOutlinedRect(true, x + 3, y + 3, 22, 8, { color[1] - 40, color[2] - 40, color[3] - 40, 255 }, tab)
		table.insert(temptable, tab[#tab])

		return temptable
	end

	function Draw:Slider(name, stradd, value, minvalue, maxvalue, customvals, rounded, x, y, length, tab)
		Draw:MenuBigText(name, true, false, x, y - 3, tab)

		for i = 0, 3 do
			Draw:MenuFilledRect(true, x + 2, y + 14 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab)
			tab[#tab].Color = ColorRange(
				i,
				{ [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 3, color = RGB(30, 30, 30) } }
			)
		end

		local temptable = {}
		for i = 0, 3 do
			Draw:MenuFilledRect(
				true,
				x + 2,
				y + 14 + (i * 2),
				(length - 4) * ((value - minvalue) / (maxvalue - minvalue)),
				2,
				{ 0, 0, 0, 255 },
				tab
			)
			table.insert(temptable, tab[#tab])
			tab[#tab].Color = ColorRange(i, {
				[1] = { start = 0, color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) },
				[2] = { start = 3, color = RGB(menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40) },
			})
		end
		Draw:MenuOutlinedRect(true, x, y + 12, length, 12, { 30, 30, 30, 255 }, tab)
		Draw:MenuOutlinedRect(true, x + 1, y + 13, length - 2, 10, { 0, 0, 0, 255 }, tab)

		local textstr = ""

		if stradd == nil then
			stradd = ""
		end

		local decplaces = rounded and string.rep("0", math.log(1 / rounded) / math.log(10)) or 1
		if rounded and value == math.floor(value * decplaces) then
			textstr = tostring(value) .. "." .. decplaces .. stradd
		else
			textstr = tostring(value) .. stradd
		end

		Draw:MenuBigText(customvals[value] or textstr, true, true, x + (length * 0.5), y + 11, tab)
		table.insert(temptable, tab[#tab])
		table.insert(temptable, stradd)
		return temptable
	end

	function Draw:Dropbox(name, value, values, x, y, length, tab)
		local temptable = {}
		Draw:MenuBigText(name, true, false, x, y - 3, tab)

		for i = 0, 7 do
			Draw:MenuFilledRect(true, x + 2, y + 14 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab)
			tab[#tab].Color = ColorRange(
				i,
				{ [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 7, color = RGB(35, 35, 35) } }
			)
		end

		Draw:MenuOutlinedRect(true, x, y + 12, length, 22, { 30, 30, 30, 255 }, tab)
		Draw:MenuOutlinedRect(true, x + 1, y + 13, length - 2, 20, { 0, 0, 0, 255 }, tab)

		Draw:MenuBigText(tostring(values[value]), true, false, x + 6, y + 16, tab)
		table.insert(temptable, tab[#tab])

		Draw:MenuBigText("-", true, false, x - 17 + length, y + 16, tab)
		table.insert(temptable, tab[#tab])

		return temptable
	end

	function Draw:Combobox(name, values, x, y, length, tab)
		local temptable = {}
		Draw:MenuBigText(name, true, false, x, y - 3, tab)

		for i = 0, 7 do
			Draw:MenuFilledRect(true, x + 2, y + 14 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab)
			tab[#tab].Color = ColorRange(
				i,
				{ [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 7, color = RGB(35, 35, 35) } }
			)
		end

		Draw:MenuOutlinedRect(true, x, y + 12, length, 22, { 30, 30, 30, 255 }, tab)
		Draw:MenuOutlinedRect(true, x + 1, y + 13, length - 2, 20, { 0, 0, 0, 255 }, tab)
		local textthing = ""
		for k, v in pairs(values) do
			if v[2] then
				if textthing == "" then
					textthing = v[1]
				else
					textthing ..= ", " .. v[1]
				end
			end
		end
		if string.len(textthing) > 25 then
			textthing = string_cut(textthing, 25)
		end
		textthing = textthing ~= "" and textthing or "None"
		Draw:MenuBigText(textthing, true, false, x + 6, y + 16, tab)
		table.insert(temptable, tab[#tab])

		Draw:MenuBigText("...", true, false, x - 27 + length, y + 16, tab)
		table.insert(temptable, tab[#tab])

		return temptable
	end

	function Draw:Button(name, x, y, length, tab)
		local temptable = {}

		for i = 0, 8 do
			Draw:MenuFilledRect(true, x + 2, y + 2 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab)
			tab[#tab].Color = ColorRange(
				i,
				{ [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 8, color = RGB(35, 35, 35) } }
			)
			table.insert(temptable, tab[#tab])
		end

		Draw:MenuOutlinedRect(true, x, y, length, 22, { 30, 30, 30, 255 }, tab)
		Draw:MenuOutlinedRect(true, x + 1, y + 1, length - 2, 20, { 0, 0, 0, 255 }, tab)
		temptable.text = Draw:MenuBigText(name, true, true, x + math.floor(length * 0.5), y + 4, tab)

		return temptable
	end

	function Draw:List(name, x, y, length, maxamount, columns, tab)
		local temptable = { uparrow = {}, downarrow = {}, liststuff = { rows = {}, words = {} } }

		for i, v in ipairs(name) do
			Draw:MenuBigText(
				v,
				true,
				false,
				(math.floor(length / columns) * i) - math.floor(length / columns) + 30,
				y - 3,
				tab
			)
		end

		Draw:MenuOutlinedRect(true, x, y + 12, length, 22 * maxamount + 4, { 30, 30, 30, 255 }, tab)
		Draw:MenuOutlinedRect(true, x + 1, y + 13, length - 2, 22 * maxamount + 2, { 0, 0, 0, 255 }, tab)

		Draw:MenuFilledRect(true, x + length - 7, y + 16, 1, 1, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, tab)
		table.insert(temptable.uparrow, tab[#tab])
		table.insert(menu.clrs.norm, tab[#tab])
		Draw:MenuFilledRect(true, x + length - 8, y + 17, 3, 1, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, tab)
		table.insert(temptable.uparrow, tab[#tab])
		table.insert(menu.clrs.norm, tab[#tab])
		Draw:MenuFilledRect(true, x + length - 9, y + 18, 5, 1, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, tab)
		table.insert(temptable.uparrow, tab[#tab])
		table.insert(menu.clrs.norm, tab[#tab])

		Draw:MenuFilledRect(
			true,
			x + length - 7,
			y + 16 + (22 * maxamount + 4) - 9,
			1,
			1,
			{ menu.mc[1], menu.mc[2], menu.mc[3], 255 },
			tab
		)
		table.insert(temptable.downarrow, tab[#tab])
		table.insert(menu.clrs.norm, tab[#tab])
		Draw:MenuFilledRect(
			true,
			x + length - 8,
			y + 16 + (22 * maxamount + 4) - 10,
			3,
			1,
			{ menu.mc[1], menu.mc[2], menu.mc[3], 255 },
			tab
		)
		table.insert(temptable.downarrow, tab[#tab])
		table.insert(menu.clrs.norm, tab[#tab])
		Draw:MenuFilledRect(
			true,
			x + length - 9,
			y + 16 + (22 * maxamount + 4) - 11,
			5,
			1,
			{ menu.mc[1], menu.mc[2], menu.mc[3], 255 },
			tab
		)
		table.insert(temptable.downarrow, tab[#tab])
		table.insert(menu.clrs.norm, tab[#tab])

		for i = 1, maxamount do
			temptable.liststuff.rows[i] = {}
			if i ~= maxamount then
				Draw:MenuOutlinedRect(true, x + 4, (y + 13) + (22 * i), length - 8, 2, { 20, 20, 20, 255 }, tab)
				table.insert(temptable.liststuff.rows[i], tab[#tab])
			end

			if columns ~= nil then
				for i1 = 1, columns - 1 do
					Draw:MenuOutlinedRect(
						true,
						x + math.floor(length / columns) * i1,
						(y + 13) + (22 * i) - 18,
						2,
						16,
						{ 20, 20, 20, 255 },
						tab
					)
					table.insert(temptable.liststuff.rows[i], tab[#tab])
				end
			end

			temptable.liststuff.words[i] = {}
			if columns ~= nil then
				for i1 = 1, columns do
					Draw:MenuBigText(
						"",
						true,
						false,
						(x + math.floor(length / columns) * i1) - math.floor(length / columns) + 5,
						(y + 13) + (22 * i) - 16,
						tab
					)
					table.insert(temptable.liststuff.words[i], tab[#tab])
				end
			else
				Draw:MenuBigText("", true, false, x + 5, (y + 13) + (22 * i) - 16, tab)
				table.insert(temptable.liststuff.words[i], tab[#tab])
			end
		end

		return temptable
	end

	function Draw:ImageWithText(size, image, text, x, y, tab)
		local temptable = {}
		Draw:MenuOutlinedRect(true, x, y, size + 4, size + 4, { 30, 30, 30, 255 }, tab)
		Draw:MenuOutlinedRect(true, x + 1, y + 1, size + 2, size + 2, { 0, 0, 0, 255 }, tab)
		Draw:MenuFilledRect(true, x + 2, y + 2, size, size, { 40, 40, 40, 255 }, tab)

		Draw:MenuBigText(text, true, false, x + size + 8, y, tab)
		table.insert(temptable, tab[#tab])

		Draw:MenuImage(true, BBOT_IMAGES[5], x + 2, y + 2, size, size, 1, tab)
		table.insert(temptable, tab[#tab])

		return temptable
	end

	function Draw:TextBox(name, text, x, y, length, tab)
		for i = 0, 8 do
			Draw:MenuFilledRect(true, x + 2, y + 2 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab)
			tab[#tab].Color = ColorRange(
				i,
				{ [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 8, color = RGB(35, 35, 35) } }
			)
		end

		Draw:MenuOutlinedRect(true, x, y, length, 22, { 30, 30, 30, 255 }, tab)
		Draw:MenuOutlinedRect(true, x + 1, y + 1, length - 2, 20, { 0, 0, 0, 255 }, tab)
		Draw:MenuBigText(text, true, false, x + 6, y + 4, tab)

		return tab[#tab]
	end
end

-- finish

local loadingthing = Draw:OutlinedText(
	"Loading...",
	2,
	true,
	math.floor(SCREEN_SIZE.x / 16),
	math.floor(SCREEN_SIZE.y / 16),
	13,
	true,
	{ 255, 50, 200, 255 },
	{ 0, 0, 0 }
)

function menu.Initialize(menutable)
	local bbmenu = {} -- this one is for the rendering n shi
	do
		Draw:MenuOutlinedRect(true, 0, 0, menu.w, menu.h, { 0, 0, 0, 255 }, bbmenu) -- first gradent or whatever
		Draw:MenuOutlinedRect(true, 1, 1, menu.w - 2, menu.h - 2, { 20, 20, 20, 255 }, bbmenu)
		Draw:MenuOutlinedRect(true, 2, 2, menu.w - 3, 1, { 127, 72, 163, 255 }, bbmenu)
		table.insert(menu.clrs.norm, bbmenu[#bbmenu])
		Draw:MenuOutlinedRect(true, 2, 3, menu.w - 3, 1, { 87, 32, 123, 255 }, bbmenu)
		table.insert(menu.clrs.dark, bbmenu[#bbmenu])
		Draw:MenuOutlinedRect(true, 2, 4, menu.w - 3, 1, { 20, 20, 20, 255 }, bbmenu)

		for i = 0, 19 do
			Draw:MenuFilledRect(true, 2, 5 + i, menu.w - 4, 1, { 20, 20, 20, 255 }, bbmenu)
			bbmenu[6 + i].Color = ColorRange(
				i,
				{ [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 20, color = RGB(35, 35, 35) } }
			)
		end
		Draw:MenuFilledRect(true, 2, 25, menu.w - 4, menu.h - 27, { 35, 35, 35, 255 }, bbmenu)

		Draw:MenuBigText(MenuName or "Bitch Bot", true, false, 6, 6, bbmenu)

		Draw:MenuOutlinedRect(true, 8, 22, menu.w - 16, menu.h - 30, { 0, 0, 0, 255 }, bbmenu) -- all this shit does the 2nd gradent
		Draw:MenuOutlinedRect(true, 9, 23, menu.w - 18, menu.h - 32, { 20, 20, 20, 255 }, bbmenu)
		Draw:MenuOutlinedRect(true, 10, 24, menu.w - 19, 1, { 127, 72, 163, 255 }, bbmenu)
		table.insert(menu.clrs.norm, bbmenu[#bbmenu])
		Draw:MenuOutlinedRect(true, 10, 25, menu.w - 19, 1, { 87, 32, 123, 255 }, bbmenu)
		table.insert(menu.clrs.dark, bbmenu[#bbmenu])
		Draw:MenuOutlinedRect(true, 10, 26, menu.w - 19, 1, { 20, 20, 20, 255 }, bbmenu)

		for i = 0, 14 do
			Draw:MenuFilledRect(true, 10, 27 + (i * 2), menu.w - 20, 2, { 45, 45, 45, 255 }, bbmenu)
			bbmenu[#bbmenu].Color = ColorRange(
				i,
				{ [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 15, color = RGB(35, 35, 35) } }
			)
		end
		Draw:MenuFilledRect(true, 10, 57, menu.w - 20, menu.h - 67, { 35, 35, 35, 255 }, bbmenu)
	end
	-- ok now the cool part :D
	--ANCHOR menu stuffz

	local tabz = {}
	for i = 1, #menutable do
		tabz[i] = {}
	end

	local tabs = {} -- i like tabby catz 🐱🐱🐱

	menu.multigroups = {}

	for k, v in pairs(menutable) do
		Draw:MenuFilledRect(
			true,
			10 + ((k - 1) * ((menu.w - 20) / #menutable)),
			27,
			((menu.w - 20) / #menutable),
			32,
			{ 30, 30, 30, 255 },
			bbmenu
		)
		Draw:MenuOutlinedRect(
			true,
			10 + ((k - 1) * ((menu.w - 20) / #menutable)),
			27,
			((menu.w - 20) / #menutable),
			32,
			{ 20, 20, 20, 255 },
			bbmenu
		)
		Draw:MenuBigText(
			v.name,
			true,
			true,
			math.floor(10 + ((k - 1) * ((menu.w - 20) / #menutable)) + (((menu.w - 20) / #menutable) * 0.5)),
			35,
			bbmenu
		)
		table.insert(tabs, { bbmenu[#bbmenu - 2], bbmenu[#bbmenu - 1], bbmenu[#bbmenu] })
		table.insert(menu.tabnames, v.name)

		menu.options[v.name] = {}
		menu.multigroups[v.name] = {}
		menu.mgrouptabz[v.name] = {}

		local y_offies = { left = 66, right = 66 }
		if v.content ~= nil then
			for k1, v1 in pairs(v.content) do
				if v1.autopos ~= nil then
					v1.width = menu.columns.width
					if v1.autopos == "left" then
						v1.x = menu.columns.left
						v1.y = y_offies.left
					elseif v1.autopos == "right" then
						v1.x = menu.columns.right
						v1.y = y_offies.right
					end
				end

				local groups = {}

				if type(v1.name) == "table" then
					groups = v1.name
				else
					table.insert(groups, v1.name)
				end

				local y_pos = 24

				for g_ind, g_name in ipairs(groups) do
					menu.options[v.name][g_name] = {}
					if type(v1.name) == "table" then
						menu.mgrouptabz[v.name][g_name] = {}
						menu.log_multi = { v.name, g_name }
					end

					local content = nil
					if type(v1.name) == "table" then
						y_pos = 28
						content = v1[g_ind].content
					else
						y_pos = 24
						content = v1.content
					end

					if content ~= nil then
						for k2, v2 in pairs(content) do
							if v2.type == "toggle" then
								menu.options[v.name][g_name][v2.name] = {}
								local unsafe = false
								if v2.unsafe then
									unsafe = true
								end
								menu.options[v.name][g_name][v2.name][4] = Draw:Toggle(v2.name, v2.value, unsafe, v1.x + 8, v1.y + y_pos, tabz[k])
								menu.options[v.name][g_name][v2.name][1] = v2.value
								menu.options[v.name][g_name][v2.name][7] = v2.value
								menu.options[v.name][g_name][v2.name][2] = v2.type
								menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1 }
								menu.options[v.name][g_name][v2.name][6] = unsafe
								menu.options[v.name][g_name][v2.name].tooltip = v2.tooltip or nil
								if v2.extra ~= nil then
									if v2.extra.type == "keybind" then
										menu.options[v.name][g_name][v2.name][5] = {}
										menu.options[v.name][g_name][v2.name][5][4] = Draw:Keybind(
											v2.extra.key,
											v1.x + v1.width - 52,
											y_pos + v1.y - 2,
											tabz[k]
										)
										menu.options[v.name][g_name][v2.name][5][1] = v2.extra.key
										menu.options[v.name][g_name][v2.name][5][2] = v2.extra.type
										menu.options[v.name][g_name][v2.name][5][3] = { v1.x + v1.width - 52, y_pos + v1.y - 2 }
										menu.options[v.name][g_name][v2.name][5][5] = false
										menu.options[v.name][g_name][v2.name][5].toggletype = v2.extra.toggletype == nil and 1 or v2.extra.toggletype
										menu.options[v.name][g_name][v2.name][5].relvalue = false
										local event = event.new(("%s %s %s"):format(v.name, g_name, v2.name))
										event:connect(function(newval) 
											if menu:GetVal("Visuals", "Keybinds" ,"Log Keybinds") then 
												CreateNotification(("%s %s %s has been set to %s"):format(v.name, g_name, v2.name, newval and "true" or "false")) 
											end 
										end)
										menu.options[v.name][g_name][v2.name][5].event = event
										menu.options[v.name][g_name][v2.name][5].bind = table.insert(menu.keybinds, {
												menu.options[v.name][g_name][v2.name],
												tostring(v2.name),
												tostring(g_name),
												tostring(v.name),
											})
									elseif v2.extra.type == "single colorpicker" then
										menu.options[v.name][g_name][v2.name][5] = {}
										menu.options[v.name][g_name][v2.name][5][4] = Draw:ColorPicker(
											v2.extra.color,
											v1.x + v1.width - 38,
											y_pos + v1.y - 1,
											tabz[k]
										)
										menu.options[v.name][g_name][v2.name][5][1] = v2.extra.color
										menu.options[v.name][g_name][v2.name][5][2] = v2.extra.type
										menu.options[v.name][g_name][v2.name][5][3] = { v1.x + v1.width - 38, y_pos + v1.y - 1 }
										menu.options[v.name][g_name][v2.name][5][5] = false
										menu.options[v.name][g_name][v2.name][5][6] = v2.extra.name
									elseif v2.extra.type == "double colorpicker" then
										menu.options[v.name][g_name][v2.name][5] = {}
										menu.options[v.name][g_name][v2.name][5][1] = {}
										menu.options[v.name][g_name][v2.name][5][1][1] = {}
										menu.options[v.name][g_name][v2.name][5][1][2] = {}
										menu.options[v.name][g_name][v2.name][5][2] = v2.extra.type
										for i = 1, 2 do
											menu.options[v.name][g_name][v2.name][5][1][i][4] = Draw:ColorPicker(
												v2.extra.color[i],
												v1.x + v1.width - 38 - ((i - 1) * 34),
												y_pos + v1.y - 1,
												tabz[k]
											)
											menu.options[v.name][g_name][v2.name][5][1][i][1] = v2.extra.color[i]
											menu.options[v.name][g_name][v2.name][5][1][i][3] = { v1.x + v1.width - 38 - ((i - 1) * 34), y_pos + v1.y - 1 }
											menu.options[v.name][g_name][v2.name][5][1][i][5] = false
											menu.options[v.name][g_name][v2.name][5][1][i][6] = v2.extra.name[i]
										end
									end
								end
								y_pos += 18
							elseif v2.type == "slider" then
								menu.options[v.name][g_name][v2.name] = {}
								menu.options[v.name][g_name][v2.name][4] = Draw:Slider(
									v2.name,
									v2.stradd,
									v2.value,
									v2.minvalue,
									v2.maxvalue,
									v2.custom or {},
									v2.decimal,
									v1.x + 8,
									v1.y + y_pos,
									v1.width - 16,
									tabz[k]
								)
								menu.options[v.name][g_name][v2.name][1] = v2.value
								menu.options[v.name][g_name][v2.name][2] = v2.type
								menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 }
								menu.options[v.name][g_name][v2.name][5] = false
								menu.options[v.name][g_name][v2.name][6] = { v2.minvalue, v2.maxvalue }
								menu.options[v.name][g_name][v2.name][7] = { v1.x + 7 + v1.width - 38, v1.y + y_pos - 1 }
								menu.options[v.name][g_name][v2.name].decimal = v2.decimal == nil and nil or v2.decimal
								menu.options[v.name][g_name][v2.name].stepsize = v2.stepsize
								menu.options[v.name][g_name][v2.name].custom = v2.custom or {}

								y_pos += 30
							elseif v2.type == "dropbox" then
								menu.options[v.name][g_name][v2.name] = {}
								menu.options[v.name][g_name][v2.name][1] = v2.value
								menu.options[v.name][g_name][v2.name][2] = v2.type
								menu.options[v.name][g_name][v2.name][5] = false
								menu.options[v.name][g_name][v2.name][6] = v2.values

								if v2.x == nil then
									menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 }
									menu.options[v.name][g_name][v2.name][4] = Draw:Dropbox(
										v2.name,
										v2.value,
										v2.values,
										v1.x + 8,
										v1.y + y_pos,
										v1.width - 16,
										tabz[k]
									)
									y_pos += 40
								else
									menu.options[v.name][g_name][v2.name][3] = { v2.x + 7, v2.y - 1, v2.w }
									menu.options[v.name][g_name][v2.name][4] = Draw:Dropbox(v2.name, v2.value, v2.values, v2.x + 8, v2.y, v2.w, tabz[k])
								end
							elseif v2.type == "combobox" then
								menu.options[v.name][g_name][v2.name] = {}
								menu.options[v.name][g_name][v2.name][4] = Draw:Combobox(
										v2.name,
										v2.values,
										v1.x + 8,
										v1.y + y_pos,
										v1.width - 16,
										tabz[k]
									)
								menu.options[v.name][g_name][v2.name][1] = v2.values
								menu.options[v.name][g_name][v2.name][2] = v2.type
								menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 }
								menu.options[v.name][g_name][v2.name][5] = false
								y_pos += 40
							elseif v2.type == "button" then
								menu.options[v.name][g_name][v2.name] = {}
								menu.options[v.name][g_name][v2.name][1] = false
								menu.options[v.name][g_name][v2.name][2] = v2.type
								menu.options[v.name][g_name][v2.name].name = v2.name
								menu.options[v.name][g_name][v2.name].groupbox = g_name
								menu.options[v.name][g_name][v2.name].tab = v.name -- why is it all v, v1, v2 so ugly
								menu.options[v.name][g_name][v2.name].doubleclick = v2.doubleclick

								if v2.x == nil then
									menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 }
									menu.options[v.name][g_name][v2.name][4] = Draw:Button(v2.name, v1.x + 8, v1.y + y_pos, v1.width - 16, tabz[k])
									y_pos += 28
								else
									menu.options[v.name][g_name][v2.name][3] = { v2.x + 7, v2.y - 1, v2.w }
									menu.options[v.name][g_name][v2.name][4] = Draw:Button(v2.name, v2.x + 8, v2.y, v2.w, tabz[k])
								end
							elseif v2.type == "textbox" then
								menu.options[v.name][g_name][v2.name] = {}
								menu.options[v.name][g_name][v2.name][4] = Draw:TextBox(v2.name, v2.text, v1.x + 8, v1.y + y_pos, v1.width - 16, tabz[k])
								menu.options[v.name][g_name][v2.name][1] = v2.text
								menu.options[v.name][g_name][v2.name][2] = v2.type
								menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 }
								menu.options[v.name][g_name][v2.name][5] = false
								menu.options[v.name][g_name][v2.name][6] = v2.file and true or false
								y_pos += 28
							elseif v2.type == "list" then
								menu.options[v.name][g_name][v2.name] = {}
								menu.options[v.name][g_name][v2.name][4] = Draw:List(
									v2.multiname,
									v1.x + 8,
									v1.y + y_pos,
									v1.width - 16,
									v2.size,
									v2.columns,
									tabz[k]
								)
								menu.options[v.name][g_name][v2.name][1] = nil
								menu.options[v.name][g_name][v2.name][2] = v2.type
								menu.options[v.name][g_name][v2.name][3] = 1
								menu.options[v.name][g_name][v2.name][5] = {}
								menu.options[v.name][g_name][v2.name][6] = v2.size
								menu.options[v.name][g_name][v2.name][7] = v2.columns
								menu.options[v.name][g_name][v2.name][8] = { v1.x + 8, v1.y + y_pos, v1.width - 16 }
								y_pos += 22 + (22 * v2.size)
							elseif v2.type == "image" then
								menu.options[v.name][g_name][v2.name] = {}
								menu.options[v.name][g_name][v2.name][1] = Draw:ImageWithText(v2.size, nil, v2.text, v1.x + 8, v1.y + y_pos, tabz[k])
								menu.options[v.name][g_name][v2.name][2] = v2.type
							end
						end
					end

					menu.log_multi = nil
				end

				y_pos += 2

				if type(v1.name) ~= "table" then
					if v1.autopos == nil then
						Draw:CoolBox(v1.name, v1.x, v1.y, v1.width, v1.height, tabz[k])
					else
						if v1.autofill then
							y_pos = (menu.h - 17) - v1.y
						elseif v1.size ~= nil then
							y_pos = v1.size
						end
						Draw:CoolBox(v1.name, v1.x, v1.y, v1.width, y_pos, tabz[k])
						y_offies[v1.autopos] += y_pos + 6
					end
				else
					if v1.autofill then
						y_pos = (menu.h - 17) - v1.y
						y_offies[v1.autopos] += y_pos + 6
					elseif v1.size ~= nil then
						y_pos = v1.size
						y_offies[v1.autopos] += y_pos + 6
					end

					local drawn

					if v1.autopos == nil then
						drawn = Draw:CoolMultiBox(v1.name, v1.x, v1.y, v1.width, v1.height, tabz[k])
					else
						drawn = Draw:CoolMultiBox(v1.name, v1.x, v1.y, v1.width, y_pos, tabz[k])
					end

					local group_vals = {}

					for _i, _v in ipairs(v1.name) do
						if _i == 1 then
							group_vals[_v] = true
						else
							group_vals[_v] = false
						end
					end
					table.insert(menu.multigroups[v.name], { vals = group_vals, drawn = drawn })
				end
			end
		end
	end

	menu.list.addval = function(list, option)
		table.insert(list[5], option)
	end

	menu.list.removeval = function(list, optionnum)
		if list[1] == optionnum then
			list[1] = nil
		end
		table.remove(list[5], optionnum)
	end

	menu.list.removeall = function(list)
		list[5] = {}
		for k, v in pairs(list[4].liststuff) do
			for i, v1 in ipairs(v) do
				for i1, v2 in ipairs(v1) do
					v2.Visible = false
				end
			end
		end
	end

	menu.list.setval = function(list, value)
		list[1] = value
	end

	Draw:MenuOutlinedRect(true, 10, 59, menu.w - 20, menu.h - 69, { 20, 20, 20, 255 }, bbmenu)

	Draw:MenuOutlinedRect(true, 11, 58, ((menu.w - 20) / #menutable) - 2, 2, { 35, 35, 35, 255 }, bbmenu)
	local barguy = { bbmenu[#bbmenu], menu.postable[#menu.postable] }

	local function setActiveTab(slot)
		barguy[1].Position = Vector2.new(
			(menu.x + 11 + ((((menu.w - 20) / #menutable) - 2) * (slot - 1))) + ((slot - 1) * 2),
			menu.y + 58
		)
		barguy[2][2] = (11 + ((((menu.w - 20) / #menutable) - 2) * (slot - 1))) + ((slot - 1) * 2)
		barguy[2][3] = 58

		for k, v in pairs(tabs) do
			if k == slot then
				v[1].Visible = false
				v[3].Color = RGB(255, 255, 255)
			else
				v[3].Color = RGB(170, 170, 170)
				v[1].Visible = true
			end
		end

		for k, v in pairs(tabz) do
			if k == slot then
				for k1, v1 in pairs(v) do
					v1.Visible = true
				end
			else
				for k1, v1 in pairs(v) do
					v1.Visible = false
				end
			end
		end

		for k, v in pairs(menu.multigroups) do
			if menu.tabnames[menu.activetab] == k then
				for k1, v1 in pairs(v) do
					for k2, v2 in pairs(v1.vals) do
						for k3, v3 in pairs(menu.mgrouptabz[k][k2]) do
							v3.Visible = v2
						end
					end
				end
			end
		end
	end

	setActiveTab(menu.activetab)

	local plusminus = {}

	Draw:OutlinedText("_", 1, false, 10, 10, 14, false, { 225, 225, 225, 255 }, { 20, 20, 20 }, plusminus)
	Draw:OutlinedText("+", 1, false, 10, 10, 14, false, { 225, 225, 225, 255 }, { 20, 20, 20 }, plusminus)

	local function set_plusminus(value, x, y)
		for i, v in ipairs(plusminus) do
			if value == 0 then
				v.Visible = false
			else
				v.Visible = true
			end
		end

		if value ~= 0 then
			plusminus[1].Position = Vector2.new(x + 3 + menu.x, y - 5 + menu.y)
			plusminus[2].Position = Vector2.new(x + 13 + menu.x, y - 1 + menu.y)

			if value == 1 then
				for i, v in ipairs(plusminus) do
					v.Color = RGB(225, 225, 225)
					v.OutlineColor = RGB(20, 20, 20)
				end
			else
				for i, v in ipairs(plusminus) do
					if i + 1 == value then
						v.Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
					else
						v.Color = RGB(255, 255, 255)
					end
					v.OutlineColor = RGB(0, 0, 0)
				end
			end
		end
	end

	set_plusminus(0, 20, 20)

	--DROP BOX THINGY
	local dropboxthingy = {}
	local dropboxtexty = {}

	Draw:OutlinedRect(false, 20, 20, 100, 22, { 20, 20, 20, 255 }, dropboxthingy)
	Draw:OutlinedRect(false, 21, 21, 98, 20, { 0, 0, 0, 255 }, dropboxthingy)
	Draw:FilledRect(false, 22, 22, 96, 18, { 45, 45, 45, 255 }, dropboxthingy)

	for i = 1, 30 do
		Draw:OutlinedText("", 2, false, 20, 20, 13, false, { 255, 255, 255, 255 }, { 0, 0, 0 }, dropboxtexty)
	end

	local function set_dropboxthingy(visible, x, y, length, value, values)
		for k, v in pairs(dropboxthingy) do
			v.Visible = visible
		end

		dropboxthingy[1].Position = Vector2.new(x, y)
		dropboxthingy[2].Position = Vector2.new(x + 1, y + 1)
		dropboxthingy[3].Position = Vector2.new(x + 2, y + 22)

		dropboxthingy[1].Size = Vector2.new(length, 21 * (#values + 1) + 3)
		dropboxthingy[2].Size = Vector2.new(length - 2, (21 * (#values + 1)) + 1)
		dropboxthingy[3].Size = Vector2.new(length - 4, (21 * #values) + 1 - 1)

		if visible then
			for i = 1, #values do
				dropboxtexty[i].Position = Vector2.new(x + 6, y + 26 + ((i - 1) * 21))
				dropboxtexty[i].Visible = true
				dropboxtexty[i].Text = values[i]
				if i == value then
					dropboxtexty[i].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
				else
					dropboxtexty[i].Color = RGB(255, 255, 255)
				end
			end
		else
			for k, v in pairs(dropboxtexty) do
				v.Visible = false
			end
		end
	end

	local function set_comboboxthingy(visible, x, y, length, values)
		for k, v in pairs(dropboxthingy) do
			v.Visible = visible
		end

		dropboxthingy[1].Position = Vector2.new(x, y)
		dropboxthingy[2].Position = Vector2.new(x + 1, y + 1)
		dropboxthingy[3].Position = Vector2.new(x + 2, y + 22)

		dropboxthingy[1].Size = Vector2.new(length, 22 * (#values + 1) + 2)
		dropboxthingy[2].Size = Vector2.new(length - 2, (22 * (#values + 1)))
		dropboxthingy[3].Size = Vector2.new(length - 4, (22 * #values))

		if visible then
			for i = 1, #values do
				dropboxtexty[i].Position = Vector2.new(x + 6, y + 26 + ((i - 1) * 22))
				dropboxtexty[i].Visible = true
				dropboxtexty[i].Text = values[i][1]
				if values[i][2] then
					dropboxtexty[i].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
				else
					dropboxtexty[i].Color = RGB(255, 255, 255)
				end
			end
		else
			for k, v in pairs(dropboxtexty) do
				v.Visible = false
			end
		end
	end

	set_dropboxthingy(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" })

	--MODE SELECT THING
	local modeselect = {}

	Draw:OutlinedRect(false, 20, 20, 100, 22, { 20, 20, 20, 255 }, modeselect)
	Draw:OutlinedRect(false, 21, 21, 98, 20, { 0, 0, 0, 255 }, modeselect)
	Draw:FilledRect(false, 22, 22, 96, 18, { 45, 45, 45, 255 }, modeselect)

	local modeselecttext = { "Hold", "Toggle", "Hold Off", "Always" }
	for i = 1, 4 do
		Draw:OutlinedText(
			modeselecttext[i],
			2,
			false,
			20,
			20,
			13,
			false,
			{ 255, 255, 255, 255 },
			{ 0, 0, 0 },
			modeselect
		)
	end

	local function set_modeselect(visible, x, y, value)
		for k, v in pairs(modeselect) do
			v.Visible = visible
		end

		if visible then
			modeselect[1].Position = Vector2.new(x, y)
			modeselect[2].Position = Vector2.new(x + 1, y + 1)
			modeselect[3].Position = Vector2.new(x + 2, y + 2)

			modeselect[1].Size = Vector2.new(70, 22 * 4 - 1)
			modeselect[2].Size = Vector2.new(70 - 2, 22 * 4 - 3)
			modeselect[3].Size = Vector2.new(70 - 4, 22 * 4 - 5)

			for i = 1, 4 do
				modeselect[i + 3].Position = Vector2.new(x + 6, y + 4 + ((i - 1) * 21))
				if value == i then
					modeselect[i + 3].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
				else
					modeselect[i + 3].Color = RGB(255, 255, 255)
				end
			end
		end
	end

	set_modeselect(false, 200, 400, 1)

	--COLOR PICKER
	local cp = {
		x = 400,
		y = 40,
		w = 280,
		h = 211,
		alpha = false,
		dragging_m = false,
		dragging_r = false,
		dragging_b = false,
		hsv = {
			h = 0,
			s = 0,
			v = 0,
			a = 0,
		},
		postable = {},
		drawings = {},
	}

	local function ColorpickerOutline(visible, pos_x, pos_y, width, height, clr, tablename) -- doing all this shit to make it easier for me to make this beat look nice and shit ya fell dog :dog_head:
		Draw:OutlinedRect(visible, pos_x + cp.x, pos_y + cp.y, width, height, clr, tablename)
		table.insert(cp.postable, { tablename[#tablename], pos_x, pos_y })
	end

	local function ColorpickerRect(visible, pos_x, pos_y, width, height, clr, tablename)
		Draw:FilledRect(visible, pos_x + cp.x, pos_y + cp.y, width, height, clr, tablename)
		table.insert(cp.postable, { tablename[#tablename], pos_x, pos_y })
	end

	local function ColorpickerImage(visible, imagedata, pos_x, pos_y, width, height, transparency, tablename)
		Draw:Image(visible, imagedata, pos_x, pos_y, width, height, transparency, tablename)
		table.insert(cp.postable, { tablename[#tablename], pos_x, pos_y })
	end

	local function ColorpickerText(text, visible, centered, pos_x, pos_y, tablename)
		Draw:OutlinedText(
			text,
			2,
			visible,
			pos_x + cp.x,
			pos_y + cp.y,
			13,
			centered,
			{ 255, 255, 255, 255 },
			{ 0, 0, 0 },
			tablename
		)
		table.insert(cp.postable, { tablename[#tablename], pos_x, pos_y })
	end

	ColorpickerRect(false, 1, 1, cp.w, cp.h, { 35, 35, 35, 255 }, cp.drawings)
	ColorpickerOutline(false, 1, 1, cp.w, cp.h, { 0, 0, 0, 255 }, cp.drawings)
	ColorpickerOutline(false, 2, 2, cp.w - 2, cp.h - 2, { 20, 20, 20, 255 }, cp.drawings)
	ColorpickerOutline(false, 3, 3, cp.w - 3, 1, { 127, 72, 163, 255 }, cp.drawings)
	table.insert(menu.clrs.norm, cp.drawings[#cp.drawings])
	ColorpickerOutline(false, 3, 4, cp.w - 3, 1, { 87, 32, 123, 255 }, cp.drawings)
	table.insert(menu.clrs.dark, cp.drawings[#cp.drawings])
	ColorpickerOutline(false, 3, 5, cp.w - 3, 1, { 20, 20, 20, 255 }, cp.drawings)
	ColorpickerText("color picker :D", false, false, 7, 6, cp.drawings)

	ColorpickerText("x", false, false, 268, 4, cp.drawings)

	ColorpickerOutline(false, 10, 23, 160, 160, { 30, 30, 30, 255 }, cp.drawings)
	ColorpickerOutline(false, 11, 24, 158, 158, { 0, 0, 0, 255 }, cp.drawings)
	ColorpickerRect(false, 12, 25, 156, 156, { 0, 0, 0, 255 }, cp.drawings)
	local maincolor = cp.drawings[#cp.drawings]
	ColorpickerImage(false, BBOT_IMAGES[1], 12, 25, 156, 156, 1, cp.drawings)

	--https://i.imgur.com/jG3NjxN.png
	local alphabar = {}
	ColorpickerOutline(false, 10, 189, 160, 14, { 30, 30, 30, 255 }, cp.drawings)
	table.insert(alphabar, cp.drawings[#cp.drawings])
	ColorpickerOutline(false, 11, 190, 158, 12, { 0, 0, 0, 255 }, cp.drawings)
	table.insert(alphabar, cp.drawings[#cp.drawings])
	ColorpickerImage(false, BBOT_IMAGES[2], 12, 191, 159, 10, 1, cp.drawings)
	table.insert(alphabar, cp.drawings[#cp.drawings])

	ColorpickerOutline(false, 176, 23, 14, 160, { 30, 30, 30, 255 }, cp.drawings)
	ColorpickerOutline(false, 177, 24, 12, 158, { 0, 0, 0, 255 }, cp.drawings)
	--https://i.imgur.com/2Ty4u2O.png
	ColorpickerImage(false, BBOT_IMAGES[3], 178, 25, 10, 156, 1, cp.drawings)

	ColorpickerText("New Color", false, false, 198, 23, cp.drawings)
	ColorpickerOutline(false, 197, 37, 75, 40, { 30, 30, 30, 255 }, cp.drawings)
	ColorpickerOutline(false, 198, 38, 73, 38, { 0, 0, 0, 255 }, cp.drawings)
	ColorpickerImage(false, BBOT_IMAGES[4], 199, 39, 71, 36, 1, cp.drawings)

	ColorpickerRect(false, 199, 39, 71, 36, { 255, 0, 0, 255 }, cp.drawings)
	local newcolor = cp.drawings[#cp.drawings]

	ColorpickerText("copy", false, true, 198 + 36, 41, cp.drawings)
	ColorpickerText("paste", false, true, 198 + 37, 56, cp.drawings)
	local newcopy = { cp.drawings[#cp.drawings - 1], cp.drawings[#cp.drawings] }

	ColorpickerText("Old Color", false, false, 198, 77, cp.drawings)
	ColorpickerOutline(false, 197, 91, 75, 40, { 30, 30, 30, 255 }, cp.drawings)
	ColorpickerOutline(false, 198, 92, 73, 38, { 0, 0, 0, 255 }, cp.drawings)
	ColorpickerImage(false, BBOT_IMAGES[4], 199, 93, 71, 36, 1, cp.drawings)

	ColorpickerRect(false, 199, 93, 71, 36, { 255, 0, 0, 255 }, cp.drawings)
	local oldcolor = cp.drawings[#cp.drawings]

	ColorpickerText("copy", false, true, 198 + 36, 103, cp.drawings)
	local oldcopy = { cp.drawings[#cp.drawings] }

	--ColorpickerRect(false, 197, cp.h - 25, 75, 20, {30, 30, 30, 255}, cp.drawings)
	ColorpickerText("[ Apply ]", false, true, 235, cp.h - 23, cp.drawings)
	local applytext = cp.drawings[#cp.drawings]

	local function set_newcolor(r, g, b, a)
		newcolor.Color = RGB(r, g, b)
		if a ~= nil then
			newcolor.Transparency = a / 255
		else
			newcolor.Transparency = 1
		end
	end

	local function set_oldcolor(r, g, b, a)
		oldcolor.Color = RGB(r, g, b)
		if a ~= nil then
			oldcolor.Transparency = a / 255
		else
			oldcolor.Transparency = 1
		end
	end
	-- all this color picker shit is disgusting, why can't it be in it's own fucking scope. these are all global
	local dragbar_r = {}
	Draw:OutlinedRect(true, 30, 30, 16, 5, { 0, 0, 0, 255 }, cp.drawings)
	table.insert(dragbar_r, cp.drawings[#cp.drawings])
	Draw:OutlinedRect(true, 31, 31, 14, 3, { 255, 255, 255, 255 }, cp.drawings)
	table.insert(dragbar_r, cp.drawings[#cp.drawings])

	local dragbar_b = {}
	Draw:OutlinedRect(true, 30, 30, 5, 16, { 0, 0, 0, 255 }, cp.drawings)
	table.insert(dragbar_b, cp.drawings[#cp.drawings])
	table.insert(alphabar, cp.drawings[#cp.drawings])
	Draw:OutlinedRect(true, 31, 31, 3, 14, { 255, 255, 255, 255 }, cp.drawings)
	table.insert(dragbar_b, cp.drawings[#cp.drawings])
	table.insert(alphabar, cp.drawings[#cp.drawings])

	local dragbar_m = {}
	Draw:OutlinedRect(true, 30, 30, 5, 5, { 0, 0, 0, 255 }, cp.drawings)
	table.insert(dragbar_m, cp.drawings[#cp.drawings])
	Draw:OutlinedRect(true, 31, 31, 3, 3, { 255, 255, 255, 255 }, cp.drawings)
	table.insert(dragbar_m, cp.drawings[#cp.drawings])

	local function set_dragbar_r(x, y)
		dragbar_r[1].Position = Vector2.new(x, y)
		dragbar_r[2].Position = Vector2.new(x + 1, y + 1)
	end

	local function set_dragbar_b(x, y)
		dragbar_b[1].Position = Vector2.new(x, y)
		dragbar_b[2].Position = Vector2.new(x + 1, y + 1)
	end

	local function set_dragbar_m(x, y)
		dragbar_m[1].Position = Vector2.new(x, y)
		dragbar_m[2].Position = Vector2.new(x + 1, y + 1)
	end

	local function set_colorpicker(visible, color, value, alpha, text, x, y)
		for k, v in pairs(cp.drawings) do
			v.Visible = visible
		end

		if visible then
			cp.x = clamp(x, 0, SCREEN_SIZE.x - cp.w)
			cp.y = clamp(y, 0, SCREEN_SIZE.y - cp.h)
			for k, v in pairs(cp.postable) do
				v[1].Position = Vector2.new(cp.x + v[2], cp.y + v[3])
			end

			local tempclr = RGB(color[1], color[2], color[3])
			local h, s, v = tempclr:ToHSV()
			cp.hsv.h = h
			cp.hsv.s = s
			cp.hsv.v = v

			set_dragbar_r(cp.x + 175, cp.y + 23 + math.floor((1 - h) * 156))
			set_dragbar_m(cp.x + 9 + math.floor(s * 156), cp.y + 23 + math.floor((1 - v) * 156))
			if not alpha then
				set_newcolor(color[1], color[2], color[3])
				set_oldcolor(color[1], color[2], color[3])
				cp.alpha = false
				for k, v in pairs(alphabar) do
					v.Visible = false
				end
				cp.h = 191
				for i = 1, 2 do
					cp.drawings[i].Size = Vector2.new(cp.w, cp.h)
				end
				cp.drawings[3].Size = Vector2.new(cp.w - 2, cp.h - 2)
			else
				cp.hsv.a = color[4]
				cp.alpha = true
				set_newcolor(color[1], color[2], color[3], color[4])
				set_oldcolor(color[1], color[2], color[3], color[4])
				cp.h = 211
				for i = 1, 2 do
					cp.drawings[i].Size = Vector2.new(cp.w, cp.h)
				end
				cp.drawings[3].Size = Vector2.new(cp.w - 2, cp.h - 2)
				set_dragbar_b(cp.x + 12 + math.floor(156 * (color[4] / 255)), cp.y + 188)
			end

			applytext.Position = Vector2.new(235 + cp.x, cp.y + cp.h - 23)
			maincolor.Color = Color3.fromHSV(h, 1, 1)
			cp.drawings[7].Text = text
		end
	end

	set_colorpicker(false, { 255, 0, 0 }, nil, false, "", 0, 0)

	--TOOL TIP
	local tooltip = {
		x = 0,
		y = 0,
		time = 0,
		active = false,
		text = "This does this and that i guess\npooping 24/7",
		drawings = {},
		postable = {},
	}

	local function ttOutline(visible, pos_x, pos_y, width, height, clr, tablename)
		Draw:OutlinedRect(visible, pos_x + tooltip.x, pos_y + tooltip.y, width, height, clr, tablename)
		table.insert(tooltip.postable, { tablename[#tablename], pos_x, pos_y })
	end

	local function ttRect(visible, pos_x, pos_y, width, height, clr, tablename)
		Draw:FilledRect(visible, pos_x + tooltip.x, pos_y + tooltip.y, width, height, clr, tablename)
		table.insert(tooltip.postable, { tablename[#tablename], pos_x, pos_y })
	end

	local function ttText(text, visible, centered, pos_x, pos_y, tablename)
		Draw:OutlinedText(
			text,
			2,
			visible,
			pos_x + tooltip.x,
			pos_y + tooltip.y,
			13,
			centered,
			{ 255, 255, 255, 255 },
			{ 0, 0, 0 },
			tablename
		)
		table.insert(tooltip.postable, { tablename[#tablename], pos_x, pos_y })
	end

	ttRect(
		false,
		tooltip.x + 1,
		tooltip.y + 1,
		1,
		28,
		{ menu.mc[1], menu.mc[2], menu.mc[3], 255 },
		tooltip.drawings
	)
	ttRect(
		false,
		tooltip.x + 2,
		tooltip.y + 1,
		1,
		28,
		{ menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40, 255 },
		tooltip.drawings
	)
	ttOutline(false, tooltip.x, tooltip.y, 4, 30, { 20, 20, 20, 255 }, tooltip.drawings)
	ttRect(false, tooltip.x + 4, tooltip.y, 100, 30, { 40, 40, 40, 255 }, tooltip.drawings)
	ttOutline(false, tooltip.x - 1, tooltip.y - 1, 102, 32, { 0, 0, 0, 255 }, tooltip.drawings)
	ttOutline(false, tooltip.x + 3, tooltip.y, 102, 30, { 20, 20, 20, 255 }, tooltip.drawings)
	ttText(tooltip.text, false, false, tooltip.x + 7, tooltip.y + 1, tooltip.drawings)

	local function set_tooltip(x, y, text, visible, dt)
		dt = dt or 0
		x = x or tooltip.x
		y = y or tooltip.y
		tooltip.x = x
		tooltip.y = y
		if tooltip.time < 1 and visible then
			if tooltip.time < -2 then
				tooltip.time = -2
			end
			tooltip.time += dt
		else
			tooltip.time -= dt
			if tooltip.time < -1 then tooltip.time = -1 end end if tooltip.time > 1 then
			tooltip.time = 1
		end
		for k, v in ipairs(tooltip.drawings) do
			v.Visible = tooltip.time > 0
		end

		tooltip.active = visible
		if text then
			tooltip.drawings[7].Text = text
		end
		for k, v in pairs(tooltip.postable) do
			v[1].Position = Vector2.new(x + v[2], y + v[3])
			v[1].Transparency = (0.3 + tooltip.time) ^ 3 - 1
			if not menu.open then
				v[1].Transparency = 0
			end
		end
		tooltip.drawings[1].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
		tooltip.drawings[2].Color = RGB(menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40)

		local tb = tooltip.drawings[7].TextBounds

		tooltip.drawings[1].Size = Vector2.new(1, tb.Y + 3)
		tooltip.drawings[2].Size = Vector2.new(1, tb.Y + 3)
		tooltip.drawings[3].Size = Vector2.new(4, tb.Y + 5)
		tooltip.drawings[4].Size = Vector2.new(tb.X + 6, tb.Y + 5)
		tooltip.drawings[5].Size = Vector2.new(tb.X + 12, tb.Y + 7)
		tooltip.drawings[6].Size = Vector2.new(tb.X + 7, tb.Y + 5)
	end

	set_tooltip(500, 500, "", false)

	-- mouse shiz
	local bbmouse = {}
	local mousie = {
		x = 100,
		y = 240,
	}
	Draw:Triangle(
		true,
		true,
		{ mousie.x, mousie.y },
		{ mousie.x, mousie.y + 15 },
		{ mousie.x + 10, mousie.y + 10 },
		{ 127, 72, 163, 255 },
		bbmouse
	)
	table.insert(menu.clrs.norm, bbmouse[#bbmouse])
	Draw:Triangle(
		true,
		false,
		{ mousie.x, mousie.y },
		{ mousie.x, mousie.y + 15 },
		{ mousie.x + 10, mousie.y + 10 },
		{ 0, 0, 0, 255 },
		bbmouse
	)
	local lastMousePos = Vector2.new()
	function menu:set_mouse_pos(x, y)
		FireEvent("bb_mousemoved", lastMousePos ~= Vector2.new(x, y))
		for k = 1, #bbmouse do
			local v = bbmouse[k]
			v.PointA = Vector2.new(x, y + 36)
			v.PointB = Vector2.new(x, y + 36 + 15)
			v.PointC = Vector2.new(x + 10, y + 46)
		end
		lastMousePos = Vector2.new(x, y)
	end

	function menu:set_menu_clr(r, g, b)
		menu.watermark.rect[1].Color = RGB(r - 40, g - 40, b - 40)
		menu.watermark.rect[2].Color = RGB(r, g, b)

		for k, v in pairs(menu.clrs.norm) do
			v.Color = RGB(r, g, b)
		end
		for k, v in pairs(menu.clrs.dark) do
			v.Color = RGB(r - 40, g - 40, b - 40)
		end
		local menucolor = { r, g, b }
		for k, v in pairs(menu.options) do
			for k1, v1 in pairs(v) do
				for k2, v2 in pairs(v1) do
					if v2[2] == "toggle" then
						if not v2[1] then
							for i = 0, 3 do
								v2[4][i + 1].Color = ColorRange(i, {
									[1] = { start = 0, color = RGB(50, 50, 50) },
									[2] = { start = 3, color = RGB(30, 30, 30) },
								})
							end
						else
							for i = 0, 3 do
								v2[4][i + 1].Color = ColorRange(i, {
									[1] = { start = 0, color = RGB(menucolor[1], menucolor[2], menucolor[3]) },
									[2] = {
										start = 3,
										color = RGB(menucolor[1] - 40, menucolor[2] - 40, menucolor[3] - 40),
									},
								})
							end
						end
					elseif v2[2] == "slider" then
						for i = 0, 3 do
							v2[4][i + 1].Color = ColorRange(i, {
								[1] = { start = 0, color = RGB(menucolor[1], menucolor[2], menucolor[3]) },
								[2] = {
									start = 3,
									color = RGB(menucolor[1] - 40, menucolor[2] - 40, menucolor[3] - 40),
								},
							})
						end
					end
				end
			end
		end
	end

	local function UpdateConfigs()
		local configthing = menu.options["Settings"]["Configuration"]["Configs"]

		configthing[6] = GetConfigs()
		if configthing[1] > #configthing[6] then
			configthing[1] = #configthing[6]
		end
		configthing[4][1].Text = configthing[6][configthing[1]]
	end

	menu.keybind_open = nil

	menu.dropbox_open = nil

	menu.colorpicker_open = false

	menu.textboxopen = nil

	function menu:InputBeganMenu(key) --ANCHOR menu input
		if key.KeyCode == Enum.KeyCode.RightShift and not loadingthing.Visible then
			cp.dragging_m = false
			cp.dragging_r = false
			cp.dragging_b = false

			UpdateConfigs()
			if menu.open and not menu.fading then
				for k = 1, #menu.options do
					local v = menu.options[k]
					for k1, v1 in pairs(v) do
						for k2, v2 in pairs(v1) do
							if v2[2] == "slider" and v2[5] then
								v2[5] = false
							elseif v2[2] == "dropbox" and v2[5] then
								v2[5] = false
							elseif v2[2] == "combobox" and v2[5] then
								v2[5] = false
							elseif v2[2] == "toggle" then
								if v2[5] ~= nil then
									if v2[5][2] == "keybind" and v2[5][5] then
										v2[5][4][2].Color = RGB(30, 30, 30)
										v2[5][5] = false
									elseif v2[5][2] == "single colorpicker" and v2[5][5] then
										v2[5][5] = false
									end
								end
							elseif v2[2] == "button" then
								if v2[1] then
									for i = 0, 8 do
										v2[4][i + 1].Color = ColorRange(i, {
											[1] = { start = 0, color = RGB(50, 50, 50) },
											[2] = { start = 8, color = RGB(35, 35, 35) },
										})
									end
									v2[1] = false
								end
							end
						end
					end
				end
				menu.keybind_open = nil
				set_modeselect(false, 20, 20, 1)
				menu.dropbox_open = nil
				set_dropboxthingy(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" })
				menu.colorpicker_open = nil
				set_tooltip(nil, nil, nil, false)
				set_colorpicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200)
			end
			if not menu.fading then
				menu.fading = true
				menu.fadestart = tick()
			end
		end

		if menu == nil then
			return
		end

		if menu.textboxopen then
			if key.KeyCode == Enum.KeyCode.RightShift or key.KeyCode == Enum.KeyCode.Return then
				for k, v in pairs(menu.options) do
					for k1, v1 in pairs(v) do
						for k2, v2 in pairs(v1) do
							if v2[2] == "textbox" then
								if v2[5] then
									v2[5] = false
									v2[4].Color = RGB(255, 255, 255)
									menu.textboxopen = false
									v2[4].Text = v2[1]
								end
							end
						end
					end
				end
			end
		end

		if menu.open and not menu.fading then
			for k, v in pairs(menu.options) do
				for k1, v1 in pairs(v) do
					for k2, v2 in pairs(v1) do
						if v2[2] == "toggle" then
							if v2[5] ~= nil then
								if v2[5][2] == "keybind" and v2[5][5] and key.KeyCode.Value ~= 0 then
									v2[5][4][2].Color = RGB(30, 30, 30)
									v2[5][4][1].Text = KeyEnumToName(key.KeyCode)
									if KeyEnumToName(key.KeyCode) == "None" then
										v2[5][1] = nil
									else
										v2[5][1] = key.KeyCode
									end
									v2[5][5] = false
								end
							end
						elseif v2[2] == "textbox" then --ANCHOR TEXTBOXES
							if v2[5] then
								if not INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftControl) then
									if string.len(v2[1]) <= 28 then if table.find(textBoxLetters, KeyEnumToName(key.KeyCode)) then if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftShift) then v2[1] ..= string.upper(KeyEnumToName(key.KeyCode)) else v2[1] ..= string.lower(KeyEnumToName(key.KeyCode)) end elseif KeyEnumToName(key.KeyCode) == "Space" then v2[1] ..= " " elseif keymodifiernames[KeyEnumToName(key.KeyCode)] ~= nil then if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftShift) then v2[1] ..= KeyModifierToName(KeyEnumToName(key.KeyCode), v2[6]) else v2[1] ..= KeyEnumToName(key.KeyCode) end elseif KeyEnumToName(key.KeyCode) == "Back" and v2[1] ~= "" then v2[1] = string.sub(v2[1], 0, #v2[1] - 1) end end v2[4].Text = v2[1] .. "|" end end end end end end end end function menu:InputBeganKeybinds(key) -- this is super shit because once we add mouse we need to change all this shit to be the contextaction stuff if INPUT_SERVICE:GetFocusedTextBox() or menu.textboxopen then return end for i = 1, #self.keybinds do local value = self.keybinds[i][1] if key.KeyCode == value[5][1] then value[5].lastvalue = value[5].relvalue if value[5].toggletype == 2 then value[5].relvalue = not value[5].relvalue elseif value[5].toggletype == 1 then value[5].relvalue = true elseif value[5].toggletype == 3 then value[5].relvalue = false end elseif value[5].toggletype == 4 then value[5].relvalue = true end if value[5].lastvalue ~= value[5].relvalue then value[5].event:fire(value[5].relvalue) end end end function menu:InputEndedKeybinds(key) for i = 1, #self.keybinds do local value = self.keybinds[i][1] value[5].lastvalue = value[5].relvalue if key.KeyCode == value[5][1] then if value[5].toggletype == 1 then value[5].relvalue = false elseif value[5].toggletype == 3 then value[5].relvalue = true end end if value[5].lastvalue ~= value[5].relvalue then value[5].event:fire(value[5].relvalue) end end end function menu:SetMenuPos(x, y) for k, v in pairs(menu.postable) do if v[1].Visible then v[1].Position = Vector2.new(x + v[2], y + v[3]) end end end function menu:MouseInArea(x, y, width, height) return LOCAL_MOUSE.x > x and LOCAL_MOUSE.x < x + width and LOCAL_MOUSE.y > 36 + y and LOCAL_MOUSE.y < 36 + y + height end function menu:MouseInMenu(x, y, width, height) return LOCAL_MOUSE.x > menu.x + x and LOCAL_MOUSE.x < menu.x + x + width and LOCAL_MOUSE.y > menu.y - 36 + y and LOCAL_MOUSE.y < menu.y - 36 + y + height end function menu:MouseInColorPicker(x, y, width, height) return LOCAL_MOUSE.x > cp.x + x and LOCAL_MOUSE.x < cp.x + x + width and LOCAL_MOUSE.y > cp.y - 36 + y and LOCAL_MOUSE.y < cp.y - 36 + y + height
	end

	local keyz = {}
	for k, v in pairs(Enum.KeyCode:GetEnumItems()) do
		keyz[v.Value] = v
	end

	function menu:GetVal(tab, groupbox, name, ...)
		local args = { ... }

		local option = menu.options[tab][groupbox][name]

		if args[1] == nil then
			if option[2] == "toggle" then
				local lastval = option[7]
				option[7] = option[1]
				return option[1], lastval
			elseif option[2] ~= "combobox" then
				return option[1]
			else
				local temptable = {}
				for k, v in ipairs(option[1]) do
					table.insert(temptable, v[2])
				end
				return temptable
			end
		else
			if args[1] == "keybind" or args[1] == "color" then
				if args[2] then
					return RGB(option[5][1][1], option[5][1][2], option[5][1][3])
				else
					return option[5][1]
				end
			elseif args[1] == "color1" then
				if args[2] then
					return RGB(option[5][1][1][1][1], option[5][1][1][1][2], option[5][1][1][1][3])
				else
					return option[5][1][1][1]
				end
			elseif args[1] == "color2" then
				if args[2] then
					return RGB(option[5][1][2][1][1], option[5][1][2][1][2], option[5][1][2][1][3])
				else
					return option[5][1][2][1]
				end
			end
		end
	end

	function menu:GetKey(tab, groupbox, name)
		local option = self.options[tab][groupbox][name][5]
		if self:GetVal(tab, groupbox, name) then
			if option.toggletype ~= 0 then
				if option.lastvalue == nil then
					option.lastvalue = option.relvalue
				end
				return option.relvalue, option.lastvalue, option.event
			else
				return false
			end
		end
	end

	function menu:SetKey(tab, groupbox, name, val)
		val = val or false
		local option = menu.options[tab][groupbox][name][5]
		if option.toggletype ~= 0 then
			option.lastvalue = option.relvalue
			option.relvalue = val
			if option.lastvalue ~= option.relvalue then
				option.event:fire(option.relvalue)
			end
		end
	end

	local menuElementTypes = { "toggle", "slider", "dropbox", "textbox" }
	local doubleclickDelay = 4
	local buttonsInQue = {}

	local function SaveCurSettings() --ANCHOR figgies
		local figgy = "BitchBot v2\nmade with <3 by nata and bitch\n\n" -- screw zarzel XD (and json and classy) for k, v in next, menuElementTypes do figgy ..= v .. "s {\n" for k1, v1 in pairs(menu.options) do for k2, v2 in pairs(v1) do for k3, v3 in pairs(v2) do if v3[2] == tostring(v) and k3 ~= "Configs" and k3 ~= "Player Status" and k3 ~= "ConfigName" then figgy ..= k1 .. "|" .. k2 .. "|" .. k3 .. "|" .. tostring(v3[1]) .. "\n" end end end end figgy = figgy .. "}\n" end figgy = figgy .. "comboboxes {\n" for k, v in pairs(menu.options) do for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == "combobox" then local boolz = "" for k3, v3 in pairs(v2[1]) do boolz = boolz .. tostring(v3[2]) .. ", " end figgy = figgy .. k .. "|" .. k1 .. "|" .. k2 .. "|" .. boolz .. "\n" end end end end figgy = figgy .. "}\n" figgy = figgy .. "keybinds {\n" for k, v in pairs(menu.options) do for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == "toggle" then if v2[5] ~= nil then if v2[5][2] == "keybind" then local toggletype = "|" .. tostring(v2[5].toggletype) if v2[5][1] == nil then figgy = figgy .. k .. "|" .. k1 .. "|" .. k2 .. "|nil" .. "|" .. tostring(v2[5].toggletype) .. "\n" else figgy = figgy .. k .. "|" .. k1 .. "|" .. k2 .. "|" .. tostring(v2[5][1].Value) .. "|" .. tostring(v2[5].toggletype) .. "\n" end end end end end end end figgy = figgy .. "}\n" figgy = figgy .. "colorpickers {\n" for k, v in pairs(menu.options) do for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == "toggle" then if v2[5] ~= nil then if v2[5][2] == "single colorpicker" then local clrz = "" for k3, v3 in pairs(v2[5][1]) do clrz = clrz .. tostring(v3) .. ", " end figgy = figgy .. k .. "|" .. k1 .. "|" .. k2 .. "|" .. clrz .. "\n" end end end end end end figgy = figgy .. "}\n" figgy = figgy .. "double colorpickers {\n" for k, v in pairs(menu.options) do for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == "toggle" then if v2[5] ~= nil then if v2[5][2] == "double colorpicker" then local clrz1 = "" for k3, v3 in pairs(v2[5][1][1][1]) do clrz1 = clrz1 .. tostring(v3) .. ", " end local clrz2 = "" for k3, v3 in pairs(v2[5][1][2][1]) do clrz2 = clrz2 .. tostring(v3) .. ", " end figgy = figgy .. k .. "|" .. k1 .. "|" .. k2 .. "|" .. clrz1 .. "|" .. clrz2 .. "\n" end end end end end end figgy = figgy .. "}\n" return figgy end local function LoadConfig(loadedcfg) local lines = {} for s in loadedcfg:gmatch("[^\r\n]+") do table.insert(lines, s) end if lines[1] == "BitchBot v2" then local start = nil for i, v in next, lines do if v == "toggles {" then start = i break end end local end_ = nil for i, v in next, lines do if i > start and v == "}" then
					end_ = i
					break
				end
			end
			for i = 1, end_ - start - 1 do
				local tt = string.split(lines[i + start], "|")

				if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil
				then
					if tt[4] == "true" then
						menu.options[tt[1]][tt[2]][tt[3]][1] = true
					else
						menu.options[tt[1]][tt[2]][tt[3]][1] = false
					end
				end
			end

			local start = nil
			for i, v in next, lines do
				if v == "sliders {" then
					start = i
					break
				end
			end
			local end_ = nil
			for i, v in next, lines do
				if i > start and v == "}" then
					end_ = i
					break
				end
			end
			for i = 1, end_ - start - 1 do
				local tt = string.split(lines[i + start], "|")
				if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil
				then
					menu.options[tt[1]][tt[2]][tt[3]][1] = tonumber(tt[4])
				end
			end

			local start = nil
			for i, v in next, lines do
				if v == "dropboxs {" then
					start = i
					break
				end
			end
			local end_ = nil
			for i, v in next, lines do
				if i > start and v == "}" then
					end_ = i
					break
				end
			end
			for i = 1, end_ - start - 1 do
				local tt = string.split(lines[i + start], "|")

				if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil
				then
					local num = tonumber(tt[4])
					if num > #menu.options[tt[1]][tt[2]][tt[3]][6] then
						num = #menu.options[tt[1]][tt[2]][tt[3]][6]
					elseif num < 0 then num = 1 end menu.options[tt[1]][tt[2]][tt[3]][1] = num end end local start = nil for i, v in next, lines do if v == "textboxs {" then start = i break end end if start ~= nil then local end_ = nil for i, v in next, lines do if i > start and v == "}" then
						end_ = i
						break
					end
				end
				for i = 1, end_ - start - 1 do
					local tt = string.split(lines[i + start], "|")
					if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil
					then
						menu.options[tt[1]][tt[2]][tt[3]][1] = tostring(tt[4])
					end
				end
			end

			local start = nil
			for i, v in next, lines do
				if v == "comboboxes {" then
					start = i
					break
				end
			end
			local end_ = nil
			for i, v in next, lines do
				if i > start and v == "}" then
					end_ = i
					break
				end
			end
			for i = 1, end_ - start - 1 do
				local tt = string.split(lines[i + start], "|")
				if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil
				then
					local subs = string.split(tt[4], ",")

					for i, v in ipairs(subs) do
						local opt = string.gsub(v, " ", "")
						if opt == "true" then
							menu.options[tt[1]][tt[2]][tt[3]][1][i][2] = true
						else
							menu.options[tt[1]][tt[2]][tt[3]][1][i][2] = false
						end
						if i == #subs - 1 then
							break
						end
					end
				end
			end

			local start = nil
			for i, v in next, lines do
				if v == "keybinds {" then
					start = i
					break
				end
			end
			local end_ = nil
			for i, v in next, lines do
				if i > start and v == "}" then
					end_ = i
					break
				end
			end
			for i = 1, end_ - start - 1 do
				local tt = string.split(lines[i + start], "|")
				if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]][5] ~= nil
				then
					if tt[5] ~= nil then
						local toggletype = clamp(tonumber(tt[5]), 1, 4)
						if menu.options[tt[1]][tt[2]][tt[3]][5].toggletype ~= 0 then
							menu.options[tt[1]][tt[2]][tt[3]][5].toggletype = toggletype
						end
					end

					if tt[4] == "nil" then
						menu.options[tt[1]][tt[2]][tt[3]][5][1] = nil
					else
						menu.options[tt[1]][tt[2]][tt[3]][5][1] = keyz[tonumber(tt[4])]
					end
				end
			end

			local start = nil
			for i, v in next, lines do
				if v == "colorpickers {" then
					start = i
					break
				end
			end
			local end_ = nil
			for i, v in next, lines do
				if i > start and v == "}" then
					end_ = i
					break
				end
			end
			for i = 1, end_ - start - 1 do
				local tt = string.split(lines[i + start], "|")
				if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil
				then
					local subs = string.split(tt[4], ",")

					for i, v in ipairs(subs) do
						if menu.options[tt[1]][tt[2]][tt[3]][5][1][i] == nil then
							break
						end
						local opt = string.gsub(v, " ", "")
						menu.options[tt[1]][tt[2]][tt[3]][5][1][i] = tonumber(opt)
						if i == #subs - 1 then
							break
						end
					end
				end
			end

			local start = nil
			for i, v in next, lines do
				if v == "double colorpickers {" then
					start = i
					break
				end
			end
			local end_ = nil
			for i, v in next, lines do
				if i > start and v == "}" then
					end_ = i
					break
				end
			end
			for i = 1, end_ - start - 1 do
				local tt = string.split(lines[i + start], "|")
				if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil
				then
					local subs = { string.split(tt[4], ","), string.split(tt[5], ",") }

					for i, v in ipairs(subs) do
						for i1, v1 in ipairs(v) do
							if menu.options[tt[1]][tt[2]][tt[3]][5][1][i][1][i1] == nil then
								break
							end
							local opt = string.gsub(v1, " ", "")
							menu.options[tt[1]][tt[2]][tt[3]][5][1][i][1][i1] = tonumber(opt)
							if i1 == #v - 1 then
								break
							end
						end
					end
				end
			end

			for k, v in pairs(menu.options) do
				for k1, v1 in pairs(v) do
					for k2, v2 in pairs(v1) do
						if v2[2] == "toggle" then
							if not v2[1] then
								for i = 0, 3 do
									v2[4][i + 1].Color = ColorRange(i, {
										[1] = { start = 0, color = RGB(50, 50, 50) },
										[2] = { start = 3, color = RGB(30, 30, 30) },
									})
								end
							else
								for i = 0, 3 do
									v2[4][i + 1].Color = ColorRange(i, {
										[1] = { start = 0, color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) },
										[2] = {
											start = 3,
											color = RGB(menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40),
										},
									})
								end
							end
							if v2[5] ~= nil then
								if v2[5][2] == "keybind" then
									v2[5][4][2].Color = RGB(30, 30, 30)
									v2[5][4][1].Text = KeyEnumToName(v2[5][1])
								elseif v2[5][2] == "single colorpicker" then
									v2[5][4][1].Color = RGB(v2[5][1][1], v2[5][1][2], v2[5][1][3])
									for i = 2, 3 do
										v2[5][4][i].Color = RGB(v2[5][1][1] - 40, v2[5][1][2] - 40, v2[5][1][3] - 40)
									end
								elseif v2[5][2] == "double colorpicker" then
									for i, v3 in ipairs(v2[5][1]) do
										v3[4][1].Color = RGB(v3[1][1], v3[1][2], v3[1][3])
										for i1 = 2, 3 do
											v3[4][i1].Color = RGB(v3[1][1] - 40, v3[1][2] - 40, v3[1][3] - 40)
										end
									end
								end
							end
						elseif v2[2] == "slider" then
							if v2[1] < v2[6][1] then v2[1] = v2[6][1] elseif v2[1] > v2[6][2] then
								v2[1] = v2[6][2]
							end

							local decplaces = v2.decimal and string.rep("0", math.log(1 / v2.decimal) / math.log(10))
							if decplaces and math.abs(v2[1]) < v2.decimal then v2[1] = 0 end v2[4][5].Text = v2.custom[v2[1]] or (v2[1] == math.floor(v2[1]) and v2.decimal) and tostring(v2[1]) .. "." .. decplaces .. v2[4][6] or tostring(v2[1]) .. v2[4][6] -- v2[4][5].Text = tostring(v2[1]).. v2[4][6] for i = 1, 4 do v2[4][i].Size = Vector2.new((v2[3][3] - 4) * ((v2[1] - v2[6][1]) / (v2[6][2] - v2[6][1])), 2) end elseif v2[2] == "dropbox" then if v2[6][v2[1]] == nil then v2[1] = 1 end v2[4][1].Text = v2[6][v2[1]] elseif v2[2] == "combobox" then local textthing = "" for k3, v3 in pairs(v2[1]) do if v3[2] then if textthing == "" then textthing = v3[1] else textthing = textthing .. ", " .. v3[1] end end end textthing = textthing ~= "" and textthing or "None" if string.len(textthing) > 25 then
								textthing = string_cut(textthing, 25)
							end
							v2[4][1].Text = textthing
						elseif v2[2] == "textbox" then
							v2[4].Text = v2[1]
						end
					end
				end
			end
		end
	end

	function menu.saveconfig()
		local figgy = SaveCurSettings()
		writefile(
			"bitchbot/"
				.. menu.game
				.. "/"
				.. menu.options["Settings"]["Configuration"]["ConfigName"][1]
				.. ".bb",
			figgy
		)
		CreateNotification('Saved "' .. menu.options["Settings"]["Configuration"]["ConfigName"][1] .. '.bb"!')
		UpdateConfigs()
	end
	
	function menu.loadconfig()
		local configname = "bitchbot/"
			.. menu.game
			.. "/"
			.. menu.options["Settings"]["Configuration"]["ConfigName"][1]
			.. ".bb"
		if not isfile(configname) then
			CreateNotification(
				'"'
					.. menu.options["Settings"]["Configuration"]["ConfigName"][1]
					.. '.bb" is not a valid config.'
			)
			return
		end
	
		local curcfg = SaveCurSettings()
		local loadedcfg = readfile(configname)
	
		if pcall(LoadConfig, loadedcfg) then
			CreateNotification('Loaded "' .. menu.options["Settings"]["Configuration"]["ConfigName"][1] .. '.bb"!')
		else
			LoadConfig(curcfg)
			CreateNotification(
				'There was an issue loading "'
					.. menu.options["Settings"]["Configuration"]["ConfigName"][1]
					.. '.bb"'
			)
		end
	end

	local function buttonpressed(bp)
		if bp.doubleclick then
			if buttonsInQue[bp] and tick() - buttonsInQue[bp] < doubleclickDelay then
				buttonsInQue[bp] = 0
			else
				for button, time in next, buttonsInQue do
					buttonsInQue[button] = 0
				end
				buttonsInQue[bp] = tick()
				return
			end
		end
		FireEvent("bb_buttonpressed", bp.tab, bp.groupbox, bp.name)
		--ButtonPressed:Fire(bp.tab, bp.groupbox, bp.name)
		if bp == menu.options["Settings"]["Cheat Settings"]["Unload Cheat"] then
			menu.fading = true
			wait()
			menu:unload()
		elseif bp == menu.options["Settings"]["Cheat Settings"]["Set Clipboard Game ID"] then
			setclipboard(game.JobId)
		elseif bp == menu.options["Settings"]["Configuration"]["Save Config"] then
			menu.saveconfig()
		elseif bp == menu.options["Settings"]["Configuration"]["Delete Config"] then
			delfile(
				"bitchbot/"
					.. menu.game
					.. "/"
					.. menu.options["Settings"]["Configuration"]["ConfigName"][1]
					.. ".bb"
			)
			CreateNotification('Deleted "' .. menu.options["Settings"]["Configuration"]["ConfigName"][1] .. '.bb"!')
			UpdateConfigs()
		elseif bp == menu.options["Settings"]["Configuration"]["Load Config"] then
			menu.loadconfig()
		elseif bp == menu.options["Visuals"]["Highlight Chams"]["Print Values"] then
			local hl = menu:GetVal("Visuals", "Highlight Chams", "Enable")
			local hlcf = Color3.fromRGB(unpack(menu:GetVal("Visuals", "Highlight Chams", "Enable", "color1")))
			local hlco = Color3.fromRGB(unpack(menu:GetVal("Visuals", "Highlight Chams", "Enable", "color2")))
			local hltype = menu:GetVal("Visuals", "Highlight Chams", "Highlight Type")
			print(hl)
			print(hltype - 1)
			print(menu.options["Visuals"]["Highlight Chams"]["Enable"][5][1][1][6])
			print(hlcf)
			print(menu.options["Visuals"]["Highlight Chams"]["Enable"][5][1][2][6])
			print(hlco)
		end
	end

	local function mousebutton2downfunc()
		if menu.colorpicker_open or menu.dropbox_open then
			return
		end

		for k, v in pairs(menu.options) do
			if menu.tabnames[menu.activetab] == k then
				for k1, v1 in pairs(v) do
					local pass = true
					for k3, v3 in pairs(menu.multigroups) do
						if k == k3 then
							for k4, v4 in pairs(v3) do
								for k5, v5 in pairs(v4.vals) do
									if k1 == k5 then
										pass = v5
									end
								end
							end
						end
					end

					if pass then
						for k2, v2 in pairs(v1) do --ANCHOR more menu bs
							if v2[2] == "toggle" then
								if v2[5] ~= nil then
									if v2[5][2] == "keybind" then
										if menu:MouseInMenu(v2[5][3][1], v2[5][3][2], 44, 16) then
											if menu.keybind_open ~= v2 and v2[5].toggletype ~= 0 then
												menu.keybind_open = v2
												set_modeselect(
													true,
													v2[5][3][1] + menu.x,
													v2[5][3][2] + 16 + menu.y,
													v2[5].toggletype
												)
											else
												menu.keybind_open = nil
												set_modeselect(false, 20, 20, 1)
											end
										end
									end
								end
							end
						end
					end
				end
			end
		end
	end

	local function mousebutton1downfunc() --ANCHOR menu mouse down func
		menu.dropbox_open = nil
		menu.textboxopen = false

		set_modeselect(false, 20, 20, 1)
		if menu.keybind_open then
			local key = menu.keybind_open
			local foundkey = false
			for i = 1, 4 do
				if menu:MouseInMenu(key[5][3][1], key[5][3][2] + 16 + ((i - 1) * 21), 70, 21) then
					foundkey = true
					menu.keybind_open[5].toggletype = i
					menu.keybind_open[5].relvalue = false
				end
			end
			menu.keybind_open = nil
			if foundkey then
				return
			end
		end

		for k, v in pairs(menu.options) do
			for k1, v1 in pairs(v) do
				for k2, v2 in pairs(v1) do
					if v2[2] == "dropbox" and v2[5] then
						if not menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 24 * (#v2[6] + 1) + 3) then
							set_dropboxthingy(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" })
							v2[5] = false
						else
							menu.dropbox_open = v2
						end
					end
					if v2[2] == "combobox" and v2[5] then
						if not menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 24 * (#v2[1] + 1) + 3) then
							set_dropboxthingy(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" })
							v2[5] = false
						else
							menu.dropbox_open = v2
						end
					end
					if v2[2] == "toggle" then
						if v2[5] ~= nil then
							if v2[5][2] == "keybind" then
								if v2[5][5] == true then
									v2[5][4][2].Color = RGB(30, 30, 30)
									v2[5][5] = false
								end
							elseif v2[5][2] == "single colorpicker" then
								if v2[5][5] == true then
									if not menu:MouseInColorPicker(0, 0, cp.w, cp.h) then
										set_colorpicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200)
										v2[5][5] = false
										menu.colorpicker_open = nil
										menu.colorpicker_open = nil
									end
								end
							elseif v2[5][2] == "double colorpicker" then
								for k3, v3 in pairs(v2[5][1]) do
									if v3[5] == true then
										if not menu:MouseInColorPicker(0, 0, cp.w, cp.h) then
											set_colorpicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200)
											v3[5] = false
											menu.colorpicker_open = nil
											menu.colorpicker_open = nil
										end
									end
								end
							end
						end
					end
					if v2[2] == "textbox" and v2[5] then
						v2[4].Color = RGB(255, 255, 255)
						v2[5] = false
						v2[4].Text = v2[1]
					end
				end
			end
		end
		for i = 1, #menutable do
			if menu:MouseInMenu(
					10 + ((i - 1) * math.floor((menu.w - 20) / #menutable)),
					27,
					math.floor((menu.w - 20) / #menutable),
					32
				)
			then
				menu.activetab = i
				setActiveTab(menu.activetab)
				menu:SetMenuPos(menu.x, menu.y)
				set_tooltip(nil, nil, nil, false)
			end
		end
		if menu.colorpicker_open then
			if menu:MouseInColorPicker(197, cp.h - 25, 75, 20) then
				local tempclr = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v)
				menu.colorpicker_open[4][1].Color = tempclr
				for i = 2, 3 do
					menu.colorpicker_open[4][i].Color = RGB(
						math.floor(tempclr.R * 255) - 40,
						math.floor(tempclr.G * 255) - 40,
						math.floor(tempclr.B * 255) - 40
					)
				end
				if cp.alpha then
					menu.colorpicker_open[1] = {
						math.floor(tempclr.R * 255),
						math.floor(tempclr.G * 255),
						math.floor(tempclr.B * 255),
						cp.hsv.a,
					}
				else
					menu.colorpicker_open[1] = {
						math.floor(tempclr.R * 255),
						math.floor(tempclr.G * 255),
						math.floor(tempclr.B * 255),
					}
				end
				menu.colorpicker_open = nil
				menu.colorpicker_open = nil
				set_colorpicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200)
			end
			if menu:MouseInColorPicker(264, 2, 14, 14) then
				menu.colorpicker_open = nil
				menu.colorpicker_open = nil
				set_colorpicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200)
			end
			if menu:MouseInColorPicker(10, 23, 160, 160) then
				cp.dragging_m = true
			elseif menu:MouseInColorPicker(176, 23, 14, 160) then
				cp.dragging_r = true
			elseif menu:MouseInColorPicker(10, 189, 160, 14) and cp.alpha then
				cp.dragging_b = true
			end

			if menu:MouseInColorPicker(197, 37, 75, 20) then
				menu.copied_clr = newcolor.Color
			elseif menu:MouseInColorPicker(197, 57, 75, 20) then
				if menu.copied_clr ~= nil then
					local cpa = false
					local clrtable = { menu.copied_clr.R * 255, menu.copied_clr.G * 255, menu.copied_clr.B * 255 }
					if menu.colorpicker_open[1][4] ~= nil then
						cpa = true
						table.insert(clrtable, menu.colorpicker_open[1][4])
					end

					set_colorpicker(true, clrtable, menu.colorpicker_open, cpa, menu.colorpicker_open[6], cp.x, cp.y)
					local oldclr = menu.colorpicker_open[4][1].Color
					if menu.colorpicker_open[1][4] ~= nil then
						set_oldcolor(oldclr.R * 255, oldclr.G * 255, oldclr.B * 255, menu.colorpicker_open[1][4])
					else
						set_oldcolor(oldclr.R * 255, oldclr.G * 255, oldclr.B * 255)
					end
				end
			end

			if menu:MouseInColorPicker(197, 91, 75, 40) then
				menu.copied_clr = oldcolor.Color
			end
		else
			for k, v in pairs(menu.multigroups) do
				if menu.tabnames[menu.activetab] == k then
					for k1, v1 in pairs(v) do
						local c_pos = v1.drawn.click_pos
						--local selected = v1.drawn.bar
						local selected_pos = v1.drawn.barpos

						for k2, v2 in pairs(v1.drawn.click_pos) do
							if menu:MouseInMenu(v2.x, v2.y, v2.width, v2.height) then
								for _k, _v in pairs(v1.vals) do
									if _k == v2.name then
										v1.vals[_k] = true
									else
										v1.vals[_k] = false
									end
								end

								local settab = v2.num
								for _k, _v in pairs(v1.drawn.bar) do
									menu.postable[_v.postable][2] = selected_pos[settab].pos
									_v.drawn.Size = Vector2.new(selected_pos[settab].length, 2)
								end

								for i, v in pairs(v1.drawn.nametext) do
									if i == v2.num then
										v.Color = RGB(255, 255, 255)
									else
										v.Color = RGB(170, 170, 170)
									end
								end

								menu:set_menu_visibility(true)
								setActiveTab(menu.activetab)
								menu:SetMenuPos(menu.x, menu.y)
							end
						end
					end
				end
			end
			local newdropbox_open
			for k, v in pairs(menu.options) do
				if menu.tabnames[menu.activetab] == k then
					for k1, v1 in pairs(v) do
						local pass = true
						for k3, v3 in pairs(menu.multigroups) do
							if k == k3 then
								for k4, v4 in pairs(v3) do
									for k5, v5 in pairs(v4.vals) do
										if k1 == k5 then
											pass = v5
										end
									end
								end
							end
						end

						if pass then
							for k2, v2 in pairs(v1) do
								if v2[2] == "toggle" and not menu.dropbox_open then
									if menu:MouseInMenu(v2[3][1], v2[3][2], 30 + v2[4][5].TextBounds.x, 16) then
										if v2[6] then
											if menu:GetVal(
													"Settings",
													"Cheat Settings",
													"Allow Unsafe Features"
												) and v2[1] == false
											then
												v2[1] = true
											else
												v2[1] = false
											end
										else
											v2[1] = not v2[1]
										end
										if not v2[1] then
											for i = 0, 3 do
												v2[4][i + 1].Color = ColorRange(i, {
													[1] = { start = 0, color = RGB(50, 50, 50) },
													[2] = { start = 3, color = RGB(30, 30, 30) },
												})
											end
										else
											for i = 0, 3 do
												v2[4][i + 1].Color = ColorRange(i, {
													[1] = {
														start = 0,
														color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]),
													},
													[2] = {
														start = 3,
														color = RGB(
															menu.mc[1] - 40,
															menu.mc[2] - 40,
															menu.mc[3] - 40
														),
													},
												})
											end
										end
										--TogglePressed:Fire(k1, k2, v2)
										FireEvent("bb_togglepressed", k1, k2, v2)
									end
									if v2[5] ~= nil then
										if v2[5][2] == "keybind" then
											if menu:MouseInMenu(v2[5][3][1], v2[5][3][2], 44, 16) then
												v2[5][4][2].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
												v2[5][5] = true
											end
										elseif v2[5][2] == "single colorpicker" then
											if menu:MouseInMenu(v2[5][3][1], v2[5][3][2], 28, 14) then
												v2[5][5] = true
												menu.colorpicker_open = v2[5]
												menu.colorpicker_open = v2[5]
												if v2[5][1][4] ~= nil then
													set_colorpicker(
														true,
														v2[5][1],
														v2[5],
														true,
														v2[5][6],
														LOCAL_MOUSE.x,
														LOCAL_MOUSE.y + 36
													)
												else
													set_colorpicker(
														true,
														v2[5][1],
														v2[5],
														false,
														v2[5][6],
														LOCAL_MOUSE.x,
														LOCAL_MOUSE.y + 36
													)
												end
											end
										elseif v2[5][2] == "double colorpicker" then
											for k3, v3 in pairs(v2[5][1]) do
												if menu:MouseInMenu(v3[3][1], v3[3][2], 28, 14) then
													v3[5] = true
													menu.colorpicker_open = v3
													menu.colorpicker_open = v3
													if v3[1][4] ~= nil then
														set_colorpicker(
															true,
															v3[1],
															v3,
															true,
															v3[6],
															LOCAL_MOUSE.x,
															LOCAL_MOUSE.y + 36
														)
													else
														set_colorpicker(
															true,
															v3[1],
															v3,
															false,
															v3[6],
															LOCAL_MOUSE.x,
															LOCAL_MOUSE.y + 36
														)
													end
												end
											end
										end
									end
								elseif v2[2] == "slider" and not menu.dropbox_open then
									if menu:MouseInMenu(v2[7][1], v2[7][2], 22, 13) then
										local stepval = 1
										if v2.stepsize then
											stepval = v2.stepsize
										end
										if menu:modkeydown("shift", "left") then
											stepval = 0.1
										end
										if menu:MouseInMenu(v2[7][1], v2[7][2], 11, 13) then
											v2[1] -= stepval
										elseif menu:MouseInMenu(v2[7][1] + 11, v2[7][2], 11, 13) then
											v2[1] += stepval
										end

										if v2[1] < v2[6][1] then v2[1] = v2[6][1] elseif v2[1] > v2[6][2] then
											v2[1] = v2[6][2]
										end
										local decplaces = v2.decimal and string.rep("0", math.log(1 / v2.decimal) / math.log(10))
										if decplaces and math.abs(v2[1]) < v2.decimal then v2[1] = 0 end v2[4][5].Text = v2.custom[v2[1]] or (v2[1] == math.floor(v2[1]) and v2.decimal) and tostring(v2[1]) .. "." .. decplaces .. v2[4][6] or tostring(v2[1]) .. v2[4][6] for i = 1, 4 do v2[4][i].Size = Vector2.new( (v2[3][3] - 4) * ((v2[1] - v2[6][1]) / (v2[6][2] - v2[6][1])), 2 ) end elseif menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 28) then v2[5] = true end elseif v2[2] == "dropbox" then if menu.dropbox_open then if v2 ~= menu.dropbox_open then continue end end if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 36) then if not v2[5] then set_dropboxthingy( true, v2[3][1] + menu.x + 1, v2[3][2] + menu.y + 13, v2[3][3], v2[1], v2[6] ) v2[5] = true newdropbox_open = v2 else set_dropboxthingy(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" }) v2[5] = false newdropbox_open = nil end elseif menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 24 * (#v2[6] + 1) + 3) and v2[5] then for i = 1, #v2[6] do if menu:MouseInMenu( v2[3][1], v2[3][2] + 36 + ((i - 1) * 21), v2[3][3], 21 ) then v2[4][1].Text = v2[6][i] v2[1] = i set_dropboxthingy(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" }) v2[5] = false newdropbox_open = nil end end if v2 == menu.options["Settings"]["Configuration"]["Configs"] then local textbox = menu.options["Settings"]["Configuration"]["ConfigName"] local relconfigs = GetConfigs() textbox[1] = relconfigs[menu.options["Settings"]["Configuration"]["Configs"][1]] textbox[4].Text = textbox[1] end end elseif v2[2] == "combobox" then if menu.dropbox_open then if v2 ~= menu.dropbox_open then continue end end if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 36) then if not v2[5] then set_comboboxthingy( true, v2[3][1] + menu.x + 1, v2[3][2] + menu.y + 13, v2[3][3], v2[1], v2[6] ) v2[5] = true newdropbox_open = v2 else set_dropboxthingy(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" }) v2[5] = false newdropbox_open = nil end elseif menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 24 * (#v2[1] + 1) + 3) and v2[5] then for i = 1, #v2[1] do if menu:MouseInMenu( v2[3][1], v2[3][2] + 36 + ((i - 1) * 22), v2[3][3], 23 ) then v2[1][i][2] = not v2[1][i][2] local textthing = "" for k, v in pairs(v2[1]) do if v[2] then if textthing == "" then textthing = v[1] else textthing = textthing .. ", " .. v[1] end end end textthing = textthing ~= "" and textthing or "None" if string.len(textthing) > 25 then
													textthing = string_cut(textthing, 25)
												end
												v2[4][1].Text = textthing
												set_comboboxthingy(
													true,
													v2[3][1] + menu.x + 1,
													v2[3][2] + menu.y + 13,
													v2[3][3],
													v2[1],
													v2[6]
												)
											end
										end
									end
								elseif v2[2] == "button" and not menu.dropbox_open then
									if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 22) then
										if not v2[1] then
											buttonpressed(v2)
											if k2 == "Unload Cheat" then
												return
											end
											for i = 0, 8 do
												v2[4][i + 1].Color = ColorRange(i, {
													[1] = { start = 0, color = RGB(35, 35, 35) },
													[2] = { start = 8, color = RGB(50, 50, 50) },
												})
											end
											v2[1] = true
										end
									end
								elseif v2[2] == "textbox" and not menu.dropbox_open then
									if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 22) then
										if not v2[5] then
											menu.textboxopen = v2

											v2[4].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
											v2[5] = true
										end
									end
								elseif v2[2] == "list" then
									--[[
									menu.options[v.name][v1.name][v2.name] = {}
									menu.options[v.name][v1.name][v2.name][4] = Draw:List(v2.name, v1.x + 8, v1.y + y_pos, v1.width - 16, v2.size, v2.columns, tabz[k])
									menu.options[v.name][v1.name][v2.name][1] = nil
									menu.options[v.name][v1.name][v2.name][2] = v2.type
									menu.options[v.name][v1.name][v2.name][3] = 1
									menu.options[v.name][v1.name][v2.name][5] = {}
									menu.options[v.name][v1.name][v2.name][6] = v2.size
									menu.options[v.name][v1.name][v2.name][7] = v2.columns
									menu.options[v.name][v1.name][v2.name][8] = {v1.x + 8, v1.y + y_pos, v1.width - 16}
									]]
									--
									if #v2[5] > v2[6] then
										for i = 1, v2[6] do
											if menu:MouseInMenu(v2[8][1], v2[8][2] + (i * 22) - 5, v2[8][3], 22)
											then
												if v2[1] == tostring(v2[5][i + v2[3] - 1][1][1]) then
													v2[1] = nil
												else
													v2[1] = tostring(v2[5][i + v2[3] - 1][1][1])
												end
											end
										end
									else
										for i = 1, #v2[5] do
											if menu:MouseInMenu(v2[8][1], v2[8][2] + (i * 22) - 5, v2[8][3], 22)
											then
												if v2[1] == tostring(v2[5][i + v2[3] - 1][1][1]) then
													v2[1] = nil
												else
													v2[1] = tostring(v2[5][i + v2[3] - 1][1][1])
												end
											end
										end
									end
								end
							end
						end
					end
				end
			end
			menu.dropbox_open = newdropbox_open
		end
		for k, v in pairs(menu.options) do
			for k1, v1 in pairs(v) do
				for k2, v2 in pairs(v1) do
					if v2[2] == "toggle" then
						if v2[6] then
							if not menu:GetVal("Settings", "Cheat Settings", "Allow Unsafe Features") then
								v2[1] = false
								for i = 0, 3 do
									v2[4][i + 1].Color = ColorRange(i, {
										[1] = { start = 0, color = RGB(50, 50, 50) },
										[2] = { start = 3, color = RGB(30, 30, 30) },
									})
								end
							end
						end
					end
				end
			end
		end
		if menu.open then
			if menu.options["Settings"]["Cheat Settings"]["Menu Accent"][1] then
				local clr = menu.options["Settings"]["Cheat Settings"]["Menu Accent"][5][1]
				menu.mc = { clr[1], clr[2], clr[3] }
			else
				menu.mc = { 127, 72, 163 }
			end
			menu:set_menu_clr(menu.mc[1], menu.mc[2], menu.mc[3])

			local wme = menu:GetVal("Settings", "Cheat Settings", "Watermark")
			for k, v in pairs(menu.watermark.rect) do
				v.Visible = wme
			end
			menu.watermark.text[1].Visible = wme
		end
	end

	local function mousebutton1upfunc()
		cp.dragging_m = false
		cp.dragging_r = false
		cp.dragging_b = false
		for k, v in pairs(menu.options) do
			if menu.tabnames[menu.activetab] == k then
				for k1, v1 in pairs(v) do
					for k2, v2 in pairs(v1) do
						if v2[2] == "slider" and v2[5] then
							v2[5] = false
						end
						if v2[2] == "button" and v2[1] then
							for i = 0, 8 do
								v2[4][i + 1].Color = ColorRange(i, {
									[1] = { start = 0, color = RGB(50, 50, 50) },
									[2] = { start = 8, color = RGB(35, 35, 35) },
								})
							end
							v2[1] = false
						end
					end
				end
			end
		end
	end

	local clickspot_x, clickspot_y, original_menu_x, original_menu_y = 0, 0, 0, 0

	menu.connections.mwf = LOCAL_MOUSE.WheelForward:Connect(function()
		if menu.open then
			for k, v in pairs(menu.options) do
				if menu.tabnames[menu.activetab] == k then
					for k1, v1 in pairs(v) do
						for k2, v2 in pairs(v1) do
							if v2[2] == "list" then
								if v2[3] > 1 then
									v2[3] -= 1
								end
							end
						end
					end
				end
			end
		end
	end)

	menu.connections.mwb = LOCAL_MOUSE.WheelBackward:Connect(function()
		if menu.open then
			for k, v in pairs(menu.options) do
				if menu.tabnames[menu.activetab] == k then
					for k1, v1 in pairs(v) do
						for k2, v2 in pairs(v1) do
							if v2[2] == "list" then
								if v2[5][v2[3] + v2[6]] ~= nil then
									v2[3] += 1
								end
							end
						end
					end
				end
			end
		end
	end)

	function menu:set_menu_alphaparency(transparency)
		for k, v in pairs(bbmouse) do
			v.Transparency = transparency / 255
		end
		for k, v in pairs(bbmenu) do
			v.Transparency = transparency / 255
		end
		for k, v in pairs(tabz[menu.activetab]) do
			v.Transparency = transparency / 255
		end
	end

	function menu:set_menu_visibility(visible)
		for k, v in pairs(bbmouse) do
			v.Visible = visible
		end
		for k, v in pairs(bbmenu) do
			v.Visible = visible
		end
		for k, v in pairs(tabz[menu.activetab]) do
			v.Visible = visible
		end

		if visible then
			for k, v in pairs(menu.multigroups) do
				if menu.tabnames[menu.activetab] == k then
					for k1, v1 in pairs(v) do
						for k2, v2 in pairs(v1.vals) do
							for k3, v3 in pairs(menu.mgrouptabz[k][k2]) do
								v3.Visible = v2
							end
						end
					end
				end
			end
		end
	end

	menu:set_menu_alphaparency(0)
	menu:set_menu_visibility(false)
	menu.lastActive = true
	menu.open = false
	menu.windowactive = true
	menu.connections.mousemoved = MouseMoved:connect(function(b)
		menu.windowactive = iswindowactive() or b
	end)

	local function renderSteppedMenu(fdt)
		menu.dt = fdt
		if menu.unloaded then
			return
		end
		SCREEN_SIZE = Camera.ViewportSize
		-- i pasted the old menu working ingame shit from the old source nate pls fix ty
		-- this is the really shitty alive check that we've been using since day one
		-- removed it :DDD
		-- im keepin all of our comments they're fun to look at
		-- i wish it showed comment dates that would be cool
		-- nah that would suck fk u (comment made on 3/4/2021 3:35 pm est by bitch)

		if menu.lastActive ~= menu.windowactive then
			setfpscap(menu.windowactive and (maxfps or 144) or 15)
		end

		menu.lastActive = menu.windowactive
		for button, time in next, buttonsInQue do
			if time and tick() - time < doubleclickDelay then button[4].text.Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) button[4].text.Text = "Confirm?" else button[4].text.Color = Color3.new(1, 1, 1) button[4].text.Text = button.name end end INPUT_SERVICE.MouseBehavior = menu.open and Enum.MouseBehavior.Default or Enum.MouseBehavior.LockCenter --[[ if menu.open then if client.char.alive then INPUT_SERVICE.MouseBehavior = Enum.MouseBehavior.Default else INPUT_SERVICE.MouseIconEnabled = false end else if client.char.alive then INPUT_SERVICE.MouseBehavior = Enum.MouseBehavior.LockCenter INPUT_SERVICE.MouseIconEnabled = false else INPUT_SERVICE.MouseBehavior = Enum.MouseBehavior.Default INPUT_SERVICE.MouseIconEnabled = true end end ]] if menu.open then if menu.backspaceheld then local dt = tick() - menu.backspacetime if dt > 0.4 then
					menu.backspaceflags += 1
					if menu.backspaceflags % 5 == 0 then
						local textbox = menu.textboxopen
						textbox[1] = string.sub(textbox[1], 0, #textbox[1] - 1)
						textbox[4].Text = textbox[1] .. "|"
					end
				end
			end
		end
		if menu.fading then
			if menu.open then
				local timesincefade = tick() - menu.fadestart
				local fade_amount = 255 - math.floor((timesincefade * 10) * 255)
				set_plusminus(0, 20, 20)
				menu:set_menu_alphaparency(fade_amount)
				if fade_amount <= 0 then menu.open = false menu.fading = false menu:set_menu_alphaparency(0) menu:set_menu_visibility(false) else menu:set_menu_alphaparency(fade_amount) end else menu:set_menu_visibility(true) setActiveTab(menu.activetab) local timesincefade = tick() - menu.fadestart local fade_amount = math.floor((timesincefade * 10) * 255) menu.fadeamount = fade_amount menu:set_menu_alphaparency(fade_amount) if fade_amount >= 255 then
					menu.open = true
					menu.fading = false
					menu:set_menu_alphaparency(255)
				else
					menu:set_menu_alphaparency(fade_amount)
				end
			end
		end
		menu:set_mouse_pos(LOCAL_MOUSE.x, LOCAL_MOUSE.y)
		set_tooltip(nil, nil, nil, false, fdt)
		if menu.open or menu.fading then
			set_plusminus(0, 20, 20)
			for k, v in pairs(menu.options) do
				if menu.tabnames[menu.activetab] == k then
					for k1, v1 in pairs(v) do
						local pass = true
						for k3, v3 in pairs(menu.multigroups) do
							if k == k3 then
								for k4, v4 in pairs(v3) do
									for k5, v5 in pairs(v4.vals) do
										if k1 == k5 then
											pass = v5
										end
									end
								end
							end
						end

						if pass then
							for k2, v2 in pairs(v1) do
								if v2[2] == "toggle" then
									if not menu.dropbox_open and not menu.colorpicker_open then
										if menu.open and menu:MouseInMenu(v2[3][1], v2[3][2], 30 + v2[4][5].TextBounds.x, 16)
										then
											if v2.tooltip then
												set_tooltip(
													menu.x + v2[3][1],
													menu.y + v2[3][2] + 18,
													v2.tooltip,
													true,
													fdt * 2--[[this is really fucking stupid]]
												)
											end
										end
									end
								elseif v2[2] == "slider" then
									if v2[5] then
										local new_val = (v2[6][2] - v2[6][1])  * (
												(
													LOCAL_MOUSE.x
													- menu.x
													- v2[3][1]
												) / v2[3][3]
											)
										v2[1] = (
												not v2.decimal and math.floor(new_val) or math.floor(new_val / v2.decimal) * v2.decimal
											) + v2[6][1]
										if v2[1] < v2[6][1] then v2[1] = v2[6][1] elseif v2[1] > v2[6][2] then
											v2[1] = v2[6][2]
										end
										local decplaces = v2.decimal and string.rep("0", math.log(1 / v2.decimal) / math.log(10))
										if decplaces and math.abs(v2[1]) < v2.decimal then v2[1] = 0 end v2[4][5].Text = v2.custom[v2[1]] or (v2[1] == math.floor(v2[1]) and v2.decimal) and tostring(v2[1]) .. "." .. decplaces .. v2[4][6] or tostring(v2[1]) .. v2[4][6] for i = 1, 4 do v2[4][i].Size = Vector2.new( (v2[3][3] - 4) * ((v2[1] - v2[6][1]) / (v2[6][2] - v2[6][1])), 2 ) end set_plusminus(1, v2[7][1], v2[7][2]) else if not menu.dropbox_open then if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 28) then if menu:MouseInMenu(v2[7][1], v2[7][2], 22, 13) then if menu:MouseInMenu(v2[7][1], v2[7][2], 11, 13) then set_plusminus(2, v2[7][1], v2[7][2]) elseif menu:MouseInMenu(v2[7][1] + 11, v2[7][2], 11, 13) then set_plusminus(3, v2[7][1], v2[7][2]) end else set_plusminus(1, v2[7][1], v2[7][2]) end end end end elseif v2[2] == "list" then for k3, v3 in pairs(v2[4].liststuff) do for i, v4 in ipairs(v3) do for i1, v5 in ipairs(v4) do v5.Visible = false end end end for i = 1, v2[6] do if v2[5][i + v2[3] - 1] ~= nil then for i1 = 1, v2[7] do v2[4].liststuff.words[i][i1].Text = v2[5][i + v2[3] - 1][i1][1] v2[4].liststuff.words[i][i1].Visible = true if v2[5][i + v2[3] - 1][i1][1] == v2[1] and i1 == 1 then if menu.options["Settings"]["Cheat Settings"]["Menu Accent"][1] then local clr = menu.options["Settings"]["Cheat Settings"]["Menu Accent"][5][1] v2[4].liststuff.words[i][i1].Color = RGB(clr[1], clr[2], clr[3]) else v2[4].liststuff.words[i][i1].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) end else v2[4].liststuff.words[i][i1].Color = v2[5][i + v2[3] - 1][i1][2] end end for k3, v3 in pairs(v2[4].liststuff.rows[i]) do v3.Visible = true end elseif v2[3] > 1 then
											v2[3] -= 1
										end
									end
									if v2[3] == 1 then
										for k3, v3 in pairs(v2[4].uparrow) do
											if v3.Visible then
												v3.Visible = false
											end
										end
									else
										for k3, v3 in pairs(v2[4].uparrow) do
											if not v3.Visible then
												v3.Visible = true
												menu:SetMenuPos(menu.x, menu.y)
											end
										end
									end
									if v2[5][v2[3] + v2[6]] == nil then
										for k3, v3 in pairs(v2[4].downarrow) do
											if v3.Visible then
												v3.Visible = false
											end
										end
									else
										for k3, v3 in pairs(v2[4].downarrow) do
											if not v3.Visible then
												v3.Visible = true
												menu:SetMenuPos(menu.x, menu.y)
											end
										end
									end
								end
							end
						end
					end
				end
			end
			menu.inmenu = LOCAL_MOUSE.x > menu.x and LOCAL_MOUSE.x < menu.x + menu.w and LOCAL_MOUSE.y > menu.y - 32 and LOCAL_MOUSE.y < menu.y + menu.h menu.inmiddlemenu = LOCAL_MOUSE.x > menu.x + 9 and LOCAL_MOUSE.x < menu.x + menu.w - 9 and LOCAL_MOUSE.y > menu.y - 9 and LOCAL_MOUSE.y < menu.y + menu.h - 47 if ( --[[( LOCAL_MOUSE.x > menu.x and LOCAL_MOUSE.x < menu.x + menu.w and LOCAL_MOUSE.y > menu.y - 32 and LOCAL_MOUSE.y < menu.y - 11
					)]]
					(
						menu.inmenu and 
						not menu.inmiddlemenu
					) or menu.dragging
				) and not menu.dontdrag
			then
				if menu.mousedown then
					if not menu.dragging then
						clickspot_x = LOCAL_MOUSE.x
						clickspot_y = LOCAL_MOUSE.y - 36 original_menu_X = menu.x original_menu_y = menu.y
						menu.dragging = true
					end
					menu.x = (original_menu_X - clickspot_x) + LOCAL_MOUSE.x
					menu.y = (original_menu_y - clickspot_y) + LOCAL_MOUSE.y - 36
					if menu.y < 0 then
						menu.y = 0
					end
					if menu.x < -menu.w / 4 * 3 then menu.x = -menu.w / 4 * 3 end if menu.x + menu.w / 4 > SCREEN_SIZE.x then
						menu.x = SCREEN_SIZE.x - menu.w / 4
					end
					if menu.y > SCREEN_SIZE.y - 20 then
						menu.y = SCREEN_SIZE.y - 20
					end
					menu:SetMenuPos(menu.x, menu.y)
				else
					menu.dragging = false
				end
			elseif menu.mousedown then
				menu.dontdrag = true
			elseif not menu.mousedown then
				menu.dontdrag = false
			end
			if menu.colorpicker_open then
				if cp.dragging_m then
					set_dragbar_m(
						clamp(LOCAL_MOUSE.x, cp.x + 12, cp.x + 167) - 2,
						clamp(LOCAL_MOUSE.y + 36, cp.y + 25, cp.y + 180) - 2
					)

					cp.hsv.s = (clamp(LOCAL_MOUSE.x, cp.x + 12, cp.x + 167) - cp.x - 12) / 155
					cp.hsv.v = 1 - ((clamp(LOCAL_MOUSE.y + 36, cp.y + 23, cp.y + 178) - cp.y - 23) / 155)
					newcolor.Color = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v)
				elseif cp.dragging_r then
					set_dragbar_r(cp.x + 175, clamp(LOCAL_MOUSE.y + 36, cp.y + 23, cp.y + 178))

					maincolor.Color = Color3.fromHSV(
							1 - ((clamp(LOCAL_MOUSE.y + 36, cp.y + 23, cp.y + 178) - cp.y - 23) / 155),
							1,
							1
						)

					cp.hsv.h = 1 - ((clamp(LOCAL_MOUSE.y + 36, cp.y + 23, cp.y + 178) - cp.y - 23) / 155)
					newcolor.Color = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v)
				elseif cp.dragging_b then
					set_dragbar_b(clamp(LOCAL_MOUSE.x, cp.x + 10, cp.x + 168), cp.y + 188)
					newcolor.Transparency = (clamp(LOCAL_MOUSE.x, cp.x + 10, cp.x + 168) - cp.x - 10) / 158
					cp.hsv.a = math.floor(((clamp(LOCAL_MOUSE.x, cp.x + 10, cp.x + 168) - cp.x - 10) / 158) * 255)
				else
					local setvisnew = menu:MouseInColorPicker(197, 37, 75, 40)
					for i, v in ipairs(newcopy) do
						v.Visible = setvisnew
					end

					local setvisold = menu:MouseInColorPicker(197, 91, 75, 40)
					for i, v in ipairs(oldcopy) do
						v.Visible = setvisold
					end
				end
			end
		else
			menu.dragging = false
		end
	end

	menu.connections.inputstart = INPUT_SERVICE.InputBegan:Connect(function(input)
		if menu then
			if input.UserInputType == Enum.UserInputType.MouseButton1 then
				menu.mousedown = true
				if menu.open and not menu.fading then
					mousebutton1downfunc()
				end
			elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
				if menu.open and not menu.fading then
					mousebutton2downfunc()
				end
			end

			if input.UserInputType == Enum.UserInputType.Keyboard then
				if input.KeyCode.Name:match("Shift") then
					local kcn = input.KeyCode.Name
					local direction = kcn:split("Shift")[1]
					menu.modkeys.shift.direction = direction:lower()
				end
				if input.KeyCode.Name:match("Alt") then
					local kcn = input.KeyCode.Name
					local direction = kcn:split("Alt")[1]
					menu.modkeys.alt.direction = direction:lower()
				end
			end
			if not menu then
				return
			end -- this fixed shit with unload
			menu:InputBeganMenu(input)
			menu:InputBeganKeybinds(input)
			if menu.open then
				if menu.tabnames[menu.activetab] == "Settings" then
					bbmenu[27].Text = menu:GetVal("Settings", "Cheat Settings", "Custom Menu Name") and menu:GetVal("Settings", "Cheat Settings", "MenuName") or "Bitch Bot"

					menu.watermark.text[1].Text = menu.options["Settings"]["Cheat Settings"]["MenuName"][1]
						.. menu.watermark.textString

					for i, v in ipairs(menu.watermark.rect) do
						local len = #menu.watermark.text[1].Text * 7 + 10
						if i == #menu.watermark.rect then
							len += 2
						end
						v.Size = Vector2.new(len, v.Size.y)
					end
				end
			end
			if input.KeyCode == Enum.KeyCode.Home then
				menu.stat_menu = not menu.stat_menu

				for k, v in pairs(graphs) do
					if k ~= "other" then
						for k1, v1 in pairs(v) do
							if k1 ~= "pos" then
								for k2, v2 in pairs(v1) do
									v2.Visible = menu.stat_menu
								end
							end
						end
					end
				end

				for k, v in pairs(graphs.other) do
					v.Visible = menu.stat_menu
				end
			end
		end
	end)

	menu.connections.inputended = INPUT_SERVICE.InputEnded:Connect(function(input)
		menu:InputEndedKeybinds(input)
		if input.UserInputType == Enum.UserInputType.MouseButton1 then
			menu.mousedown = false
			if menu.open and not menu.fading then
				mousebutton1upfunc()
			end
		end
		if input.UserInputType == Enum.UserInputType.Keyboard then
			if input.KeyCode.Name:match("Shift") then
				menu.modkeys.shift.direction = nil
			end
			if input.KeyCode.Name:match("Alt") then
				menu.modkeys.alt.direction = nil
			end
		end
	end)

	menu.connections.renderstepped = game.RunService.RenderStepped:Connect(renderSteppedMenu) -- fucking asshole 🖕🖕🖕

	function menu:unload()
		getgenv().v2 = nil
		self.unloaded = true

		for k, conn in next, self.connections do
			if not getrawmetatable(conn) then
				conn()
			else
				conn:Disconnect()
			end
			self.connections[k] = nil
		end

		game:service("ContextActionService"):UnbindAction("BB Keycheck")
		--[[ if self.game == "pf" then
			game:service("ContextActionService"):UnbindAction("BB PF check")
		elseif self.game == "uni" then
			game:service("ContextActionService"):UnbindAction("BB UNI check")
		end ]]

		local mt = getrawmetatable(game)

		setreadonly(mt, false)

		local oldmt = menu.oldmt

		if oldmt then
			for k, v in next, mt do
				if oldmt[k] then
					mt[k] = oldmt[k]
				end
			end
		else
			--TODO nate do this please
			-- remember to store any "game" metatable hooks PLEASE PLEASE because this will ensure it replaces the meta so that it UNLOADS properly
			--rconsoleerr("fatal error: no old game meta found! (UNLOAD PROBABLY WON'T WORK AS EXPECTED)")
		end

		setreadonly(mt, true)

		if menu.game == "pf" or menu.pfunload then
			menu:pfunload()
		end

		Draw:UnRender()
		CreateNotification = nil
		allrender = nil
		menu = nil
		Draw = nil
		self.unloaded = true
	end
end

local StatMenuRendered = event.new("StatMenuRendered")
menu.connections.heartbeatmenu = game.RunService.Heartbeat:Connect(function() --ANCHOR MENU HEARTBEAT
	if menu.y < 0 then
		menu.y = 0
		menu:SetMenuPos(menu.x, 0)
	end
	if menu.x < -menu.w / 4 * 3 then menu.x = -menu.w / 4 * 3 menu:SetMenuPos(-menu.w / 4 * 3, menu.y) end if menu.x + menu.w / 4 > SCREEN_SIZE.x then
		menu.x = SCREEN_SIZE.x - menu.w / 4
		menu:SetMenuPos(SCREEN_SIZE.x - menu.w / 4, menu.y)
	end
	if menu.y > SCREEN_SIZE.y - 20 then
		menu.y = SCREEN_SIZE.y - 20
		menu:SetMenuPos(menu.x, SCREEN_SIZE.y - 20)
	end
	if menu.stat_menu == false then
		return
	end
end)

local function keycheck(actionName, inputState, inputObject)
	if actionName == "BB Keycheck" then
		if menu.open then
			if menu.textboxopen then
				if inputObject.KeyCode == Enum.KeyCode.Backspace then
					if menu.selectall then
						menu.textboxopen[1] = ""
						menu.textboxopen[4].Text = "|"
						menu.textboxopen[4].Color = RGB(unpack(menu.mc))
						menu.selectall = false
					end
					local on = inputState == Enum.UserInputState.Begin
					menu.backspaceheld = on
					menu.backspacetime = on and tick() or -1
					if not on then
						menu.backspaceflags = 0
					end
				end

				if inputObject.KeyCode ~= Enum.KeyCode.A and (not inputObject.KeyCode.Name:match("^Left") and not inputObject.KeyCode.Name:match("^Right")) and inputObject.KeyCode ~= Enum.KeyCode.RightShift
				then
					if menu.selectall then
						menu.textboxopen[4].Color = RGB(unpack(menu.mc))
						menu.selectall = false
					end
				end

				if inputObject.KeyCode == Enum.KeyCode.A then
					if inputState == Enum.UserInputState.Begin and INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftControl)
					then
						menu.selectall = true
						local textbox = menu.textboxopen
						textbox[4].Color = RGB(menu.mc[3], menu.mc[2], menu.mc[1])
					end
				end

				return Enum.ContextActionResult.Sink
			end
		end

		return Enum.ContextActionResult.Pass
	end
end

game:service("ContextActionService"):BindAction("BB Keycheck", keycheck, false, Enum.UserInputType.Keyboard)

menu.Initialize({
	{ --ANCHOR stuffs
		name = "Legit",
		content = {
			{
				name = "Aim Assist",
				autopos = "left",
				content = {
					{
						type = "toggle",
						name = "Enabled",
						value = false,
						callback = function(bool)
					print(bool)	    
					end},
					{
						type = "slider",
						name = "Aimbot FOV",
						value = 20,
						minvalue = 0,
						maxvalue = 180,
						stradd = "°",
					},
					{
						type = "slider",
						name = "Smoothing",
						value = 20,
						minvalue = 0,
						maxvalue = 100,
						stradd = "%",
					},
					{
						type = "dropbox",
						name = "Smoothing Type",
						value = 2,
						values = { "Exponential", "Linear" },
					},
					{
						type = "slider",
						name = "Randomization",
						value = 5,
						minvalue = 0,
						maxvalue = 20,
						custom = { [0] = "Off" },
					},
					{
						type = "slider",
						name = "Deadzone FOV",
						value = 1,
						minvalue = 0,
						maxvalue = 50,
						stradd = "°",
						decimal = 0.1,
						custom = { [0] = "Off" },
					},
					{
						type = "dropbox",
						name = "Aimbot Key",
						value = 1,
						values = { "Mouse 1", "Mouse 2", "Always" },
					},
					{
						type = "dropbox",
						name = "Hitscan Priority",
						value = 1,
						values = { "Head", "Body", "Closest" },
					},
					{
						type = "combobox",
						name = "Hitscan Points",
						values = { { "Head", true }, { "Body", true }, { "Arms", false }, { "Legs", false } },
					},
					{
						type = "toggle",
						name = "Adjust for Bullet Drop",
						value = false,
					},
					{
						type = "toggle",
						name = "Target Prediction",
						value = false,
					},
					{
						type = "slider",
						name = "Enlarge Enemy Hitboxes",
						value = 0,
						minvalue = 0,
						maxvalue = 100,
						stradd = "%",
					},
				},
			},
			{
				name = "Trigger Bot",
				autopos = "right",
				content = {
					{
						type = "toggle",
						name = "Enabled",
						value = false,
						extra = {
							type = "keybind",
							key = Enum.KeyCode.M,
						},
					},
					{
						type = "combobox",
						name = "Trigger Bot Hitboxes",
						values = { { "Head", true }, { "Body", true }, { "Arms", false }, { "Legs", false } },
					},
					{
						type = "toggle",
						name = "Trigger When Aiming",
						value = false,
					},
					{
						type = "slider",
						name = "Aim Percentage",
						minvalue = 0,
						maxvalue = 100,
						value = 90,
						stradd = "%",
					},
					--[[
			{
				type = "toggle",
				name = "Magnet Triggerbot",
				value = false
			},
			{
				type = "slider",
				name = "Magnet FOV",
				value = 80,
				minvalue = 0,
				maxvalue = 180,
				stradd = "°"
			},
			{
				type = "slider",
				name = "Magnet Smoothing Factor",
				value = 20,
				minvalue = 0,
				maxvalue = 50,
				stradd = "%"
			},
			{
				type = "dropbox",
				name = "Magnet Priority",
				value = 1,
				values = {"Head", "Body"}
			},]]
				},
			},
			{
				name = "Bullet Redirection",
				autopos = "right",
				autofill = true,
				content = {
					{
						type = "toggle",
						name = "Silent Aim",
						value = false,
					},
					{
						type = "slider",
						name = "Silent Aim FOV",
						value = 5,
						minvalue = 0.1,
						maxvalue = 180,
						stradd = "°",
						decimal = 0.1,
					},
					{
						type = "slider",
						name = "Hit Chance",
						value = 30,
						minvalue = 0,
						maxvalue = 100,
						stradd = "%",
					},
					{
						type = "slider",
						name = "Accuracy",
						value = 90,
						minvalue = 0,
						maxvalue = 100,
						stradd = "%",
					},
					{
						type = "dropbox",
						name = "Hitscan Priority",
						value = 1,
						values = { "Head", "Body", "Closest" },
					},
					{
						type = "combobox",
						name = "Hitscan Points",
						values = { { "Head", true }, { "Body", true }, { "Arms", false }, { "Legs", false } },
					},
				},
			},
			{
				name = "Recoil Control",
				autopos = "left",
				autofill = true,
				content = {
					{
						type = "toggle",
						name = "Weapon RCS",
						value = false,
					},
					{
						type = "slider",
						name = "Recoil Control X",
						value = 10,
						minvalue = 0,
						maxvalue = 100,
						stradd = "%",
					},
					{
						type = "slider",
						name = "Recoil Control Y",
						value = 10,
						minvalue = 0,
						maxvalue = 100,
						stradd = "%",
					},
				},
			},
		},
	},
	{
		name = "Rage",
		content = {
			{
				name = "Aimbot",
				autopos = "left",
				content = {
					{
						type = "toggle",
						name = "Enabled",
						value = false,
						extra = {
							type = "keybind",
							toggletype = 4,
						},
						unsafe = true,
					},
					{
						type = "toggle",
						name = "Silent Aim",
						value = false,
					},
					{
						type = "toggle",
						name = "Rotate Viewmodel",
						value = false,
					},
					{
						type = "slider",
						name = "Aimbot FOV",
						value = 180,
						minvalue = 0,
						maxvalue = 181,
						stradd = "°",
						custom = { [181] = "Ignored" },
					},
					{
						type = "dropbox",
						name = "Auto Wall",
						value = 1,
						values = { "Off", "Standard", "Legacy" },
					},
					{
						type = "slider",
						name = "Autowall FPS (Standard)",
						value = 30,
						minvalue = 10,
						maxvalue = 30,
						stradd = "fps",
					},
					{
						type = "toggle",
						name = "Auto Shoot",
						value = false,
					},
					{
						type = "toggle",
						name = "Double Tap",
						value = false,
					},
					{
						type = "dropbox",
						name = "Hitscan Priority",
						value = 1,
						values = { "Head", "Body" },
					},
				},
			},
			{
				name = "Hack vs. Hack",
				autopos = "right",
				content = {
					--[[{
				type = "toggle",
				name = "Extend Penetration",
				value = false
			},]]
					-- {
					-- 	type = "slider",
					-- 	name = "Extra Penetration",
					-- 	value = 11,
					-- 	minvalue = 1,
					-- 	maxvalue = 20,
					-- 	stradd = " studs",
					-- 	tooltip = "does nothing",
					-- }, -- fuck u json
					{
						type = "toggle",
						name = "Autowall Hitscan",
						value = false,
						unsafe = true,
					},
					{
						type = "combobox",
						name = "Hitscan Points",
						values = {
							{ "Up", true },
							{ "Down", true },
							{ "Left", false },
							{ "Right", false },
							{ "Forward", true },
							{ "Backward", true },
							{ "Origin", true },
							{ "Towards", true },
						},
					},
					{
						type = "toggle",
						name = "Hitbox Shifting",
						value = false,
						tooltip = "Increases possible penetration with Autowall. The higher\nthe Hitbox Shift Distance the more likely it is to miss shots.\nWhen it misses it will try disable this.",
					},
					{
						type = "slider",
						name = "Hitbox Shift Distance",
						value = 16,
						minvalue = 1,
						maxvalue = 30,
						stradd = " studs",
					},
					{
						type = "toggle",
						name = "Force Player Stances",
						value = false,
					},
					{
						type = "dropbox",
						name = "Stance Choice",
						value = 1,
						values = { "Stand", "Crouch", "Prone" },
					},
					{
						type = "toggle", 
						name = "Backtracking",
						value = false,
					},
					{
						type = "slider",
						name = "Backtracking Time",
						value = 4000,
						minvalue = 0,
						maxvalue = 5000,
						stradd = " ms",
					},
					{
						type = "toggle",
						name = "Freestanding",
						value = false,
						extra = {
							type = "keybind",
						},
					},
				},
			},
			{
				name = { "Extra", "Settings" },
				autopos = "left",
				autofill = true,
				[1] = {
					content = {
						{
							type = "toggle",
							name = "Knife Bot",
							value = false,
							extra = {
								type = "keybind",
							},
							unsafe = true,
						},
						{
							type = "dropbox",
							name = "Knife Bot Type",
							value = 2,
							values = { "Assist", "Multi Aura", "Flight Aura" },
						},
						{
							type = "toggle",
							name = "Auto Peek",
							value = false,
							extra = {
								type = "keybind",
								toggletype = 1,
							},
							tooltip = "Hitscans from in front of your camera,\nif a target is found it will move you towards the point automatically",
						},
					},
				},
				[2] = {
					content = {
						{
							type = "toggle",
							name = "Aimbot Performance Mode",
							value = true,
							tooltip = "Lowers polling rate for targetting in Rage Aimbot.",
						},
						{
							type = "toggle",
							name = "Aimbot Damage Prediction",
							value = true,
							tooltip = "Predicts damage done to enemies as to prevent wasting ammo and time on certain players.\nHelps for users, and against players with high latency.",
						},
						{
							type = "slider",
							name = "Damage Prediction Limit",
							value = 100,
							minvalue = 0,
							maxvalue = 300,
							stradd = "hp",
						},
						{
							type = "slider",
							name = "Damage Prediction Time",
							value = 200,
							minvalue = 100,
							maxvalue = 500,
							stradd = "%",
						},
						{
							type = "slider",
							name = "Max Hitscan Points",
							value = 30,
							minvalue = 0,
							maxvalue = 300,
							stradd = " points",
						},
					},
				},
			},
			{
				name = { "Anti Aim", "Fake Lag" },
				autopos = "right",
				autofill = true,
				[1] = {
					content = {
						{
							type = "toggle",
							name = "Enabled",
							value = false,
							tooltip = "When this is enabled, your server-side yaw, pitch and stance are set to the values in this tab.",
						},
						{
							type = "dropbox",
							name = "Pitch",
							value = 4,
							values = {
								"Off",
								"Up",
								"Zero",
								"Down",
								"Upside Down",
								"Roll Forward",
								"Roll Backward",
								"Random",
								"Bob",
								"Glitch",
							},
						},
						{
							type = "dropbox",
							name = "Yaw",
							value = 2,
							values = { "Forward", "Backward", "Spin", "Random", "Glitch Spin", "Stutter Spin" },
						},
						{
							type = "slider",
							name = "Spin Rate",
							value = 10,
							minvalue = -100,
							maxvalue = 100,
							stradd = "°/s",
						},
						{
							type = "dropbox",
							name = "Force Stance",
							value = 4,
							values = { "Off", "Stand", "Crouch", "Prone" },
						},
						{
							type = "toggle",
							name = "Hide in Floor",
							value = true,
							tooltip = "Shifts your body slightly under the ground\nso as to hide it when Force Stance is set to Prone.",
						},
						{
							type = "toggle",
							name = "Lower Arms",
							value = false,
							tooltip = "Lowers your arms on the server.",
						},
						{
							type = "toggle",
							name = "Tilt Neck",
							value = false,
							tooltip = "Forces the replicated aiming state so that it appears as though your head is tilted.",
						},
					},
				},
				[2] = {
					content = {
						{
							type = "toggle",
							name = "Enabled",
							value = false,
						},
						{
							type = "slider",
							name = "Fake Lag Amount",
							value = 1,
							minvalue = 1,
							maxvalue = 1000,
							stradd = " kbps",
						},
						{
							type = "slider",
							name = "Fake Lag Distance",
							value = 1,
							minvalue = 1,
							maxvalue = 40,
							stradd = " studs",
						},
						{
							type = "toggle",
							name = "Manual Choke",
							extra = {
								type = "keybind",
							},
						},
						{
							type = "toggle",
							name = "Release Packets on Shoot",
							value = false,
						},
					},
				},
			},
		},
	},
	{
		name = "Visuals",
		content = {
			{
				name = { "Enemy ESP", "Team ESP", "Local" },
				autopos = "left",
				size = 330,
				[1] = {
					content = {
						{
							type = "toggle",
							name = "Enabled",
							value = true,
						},
						{
							type = "toggle",
							name = "Name",
							value = true,
							extra = {
								type = "single colorpicker",
								name = "Enemy Name",
								color = { 255, 255, 255, 200 },
							},
						},
						{
							type = "toggle",
							name = "Rank",
							value = false,
						},
						{
							type = "toggle",
							name = "Box",
							value = true,
							extra = {
								type = "single colorpicker",
								name = "Enemy Box",
								color = { 255, 0, 0, 150 },
							},
						},
						{
							type = "toggle",
							name = "Filled Box",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Enemy Filled Box",
								color = { 255, 0, 0, 90 },
							},
						},
						{
							type = "toggle",
							name = "Health Bar",
							value = true,
							extra = {
								type = "double colorpicker",
								name = { "Enemy Low Health", "Enemy Max Health" },
								color = { { 255, 0, 0 }, { 0, 255, 0 } },
							},
						},
						{
							type = "toggle",
							name = "Health Number",
							value = true,
							extra = {
								type = "single colorpicker",
								name = "Enemy Health Number",
								color = { 255, 255, 255, 255 },
							},
						},
						{
							type = "toggle",
							name = "Held Weapon",
							value = true,
							extra = {
								type = "single colorpicker",
								name = "Enemy Held Weapon",
								color = { 255, 255, 255, 200 },
							},
						},
						{
							type = "toggle",
							name = "Distance",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Enemy Distance",
								color = { 255, 255, 255, 200 },
							},
						},
						{
							type = "toggle",
							name = "Chams",
							value = true,
							extra = {
								type = "double colorpicker",
								name = { "Visible Enemy Chams", "Invisible Enemy Chams" },
								color = { { 255, 0, 0, 200 }, { 100, 0, 0, 100 } },
							},
						},
						{
							type = "toggle",
							name = "Skeleton",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Enemy skeleton",
								color = { 255, 255, 255, 120 },
							},
						},
						{
							type = "toggle",
							name = "Out of View",
							value = true,
							extra = {
								type = "single colorpicker",
								name = "Arrow Color",
								color = { 255, 255, 255, 255 },
							},
						},
						{
							type = "slider",
							name = "Arrow Distance",
							value = 50,
							minvalue = 10,
							maxvalue = 100,
							stradd = "%",
						},
						{
							type = "toggle",
							name = "Dynamic Arrow Size",
							value = true,
						},
						{
							type = "toggle",
							name = "Show Resolved Position",
							value = false,
						},
						{
							type = "toggle",
							name = "Show Backtracked Position",
							value = false,
						},
					},
				},
				[2] = {
					content = {
						{
							type = "toggle",
							name = "Enabled",
							value = false,
						},
						{
							type = "toggle",
							name = "Name",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Team Name",
								color = { 255, 255, 255, 200 },
							},
						},
						{
							type = "toggle",
							name = "Rank",
							value = false,
						},
						{
							type = "toggle",
							name = "Box",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Team Box",
								color = { 0, 255, 0, 150 },
							},
						},
						{
							type = "toggle",
							name = "Filled Box",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Team Filled Box",
								color = { 0, 255, 0, 90 },
							},
						},
						{
							type = "toggle",
							name = "Health Bar",
							value = false,
							extra = {
								type = "double colorpicker",
								name = { "Team Low Health", "Team Max Health" },
								color = { { 255, 0, 0 }, { 0, 255, 0 } },
							},
						},
						{
							type = "toggle",
							name = "Health Number",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Team Health Number",
								color = { 255, 255, 255, 255 },
							},
						},
						{
							type = "toggle",
							name = "Held Weapon",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Team Held Weapon",
								color = { 255, 255, 255, 200 },
							},
						},
						{
							type = "toggle",
							name = "Distance",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Team Distance",
								color = { 255, 255, 255, 200 },
							},
						},
						{
							type = "toggle",
							name = "Chams",
							value = false,
							extra = {
								type = "double colorpicker",
								name = { "Visible Team Chams", "Invisible Team Chams" },
								color = { { 0, 255, 0, 200 }, { 0, 100, 0, 100 } },
							},
						},
						{
							type = "toggle",
							name = "Skeleton",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Team skeleton",
								color = { 255, 255, 255, 120 },
							},
						},
					},
				},
				[3] = {
					content = {
						{
							type = "toggle",
							name = "Arm Chams",
							value = false,
							extra = {
								type = "double colorpicker",
								name = { "Sleeve Color", "Hand Color" },
								color = { { 106, 136, 213, 255 }, { 181, 179, 253, 255 } },
							},
						},
						{
							type = "dropbox",
							name = "Arm Material",
							value = 1,
							values = { "Plastic", "Ghost", "Neon", "Foil", "Glass" },
						},
						{
							type = "toggle",
							name = "Weapon Chams",
							value = false,
							extra = {
								type = "double colorpicker",
								name = { "Weapon Color", "Laser Color" },
								color = { { 106, 136, 213, 255 }, { 181, 179, 253, 255 } },
							},
						},
						{
							type = "dropbox",
							name = "Weapon Material",
							value = 1,
							values = { "Plastic", "Ghost", "Neon", "Foil", "Glass" },
						},
						{
							type = "toggle",
							name = "Animate Ghost Material",
							value = false,
							tooltip = "Toggles whether or not the 'Ghost' material will be animated or not.",
						},
						{
							type = "toggle",
							name = "Remove Weapon Skin",
							value = false,
							tooltip = "If a loaded weapon has a skin, it will remove it.",
						},
						{
							type = "toggle",
							name = "Third Person",
							value = false,
							extra = {
								type = "keybind",
								key = nil,
								toggletype = 2,
							},
						},
						{
							type = "slider",
							name = "Third Person Distance",
							value = 60,
							minvalue = 1,
							maxvalue = 150,
						},
						{
							type = "toggle",
							name = "Local Player Chams",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Local Player Chams",
								color = { 106, 136, 213, 255 },
							},
							tooltip = "Changes the color and material of the local third person body when it is on.",
						},
						{
							type = "dropbox",
							name = "Local Player Material",
							value = 1,
							values = { "Plastic", "Ghost", "Neon", "Foil", "Glass" },
						},
					},
				},
			},
			{
				name = "ESP Settings",
				autopos = "left",
				autofill = true,
				content = {
					{
						type = "slider",
						name = "Max HP Visibility Cap",
						value = 90,
						minvalue = 50,
						maxvalue = 100,
						stradd = "hp",
					},
					{
						type = "dropbox",
						name = "Text Case",
						value = 2,
						values = { "lowercase", "Normal", "UPPERCASE" },
					},
					{
						type = "slider",
						name = "Max Text Length",
						value = 0,
						minvalue = 0,
						maxvalue = 32,
						custom = { [0] = "Unlimited" },
					},
					{
						type = "toggle",
						name = "Highlight Aimbot Target",
						value = false,
						extra = {
							type = "single colorpicker",
							name = "Aimbot Target",
							color = { 255, 0, 0, 255 },
						},
					},
					{
						type = "toggle",
						name = "Highlight Friends",
						value = true,
						extra = {
							type = "single colorpicker",
							name = "Friended Players",
							color = { 0, 255, 255, 255 },
						},
					},
					{
						type = "toggle",
						name = "Highlight Priority",
						value = true,
						extra = {
							type = "single colorpicker",
							name = "Priority Players",
							color = { 255, 210, 0, 255 },
						},
					},
					-- {
					-- 	type = "slider",
					-- 	name = "Max Player Text",
					-- 	value = 0,
					-- 	minvalue = 0,
					-- 	maxvalue = 32,
					-- 	custom = {[0] = "None"},
					-- }
				},
			},
			{
				name = { "Camera Visuals", "Viewmodel" },
				autopos = "right",
				size = 240,
				[1] = {
					content = {
						{
							type = "slider",
							name = "Camera FOV",
							value = 85,
							minvalue = 60,
							maxvalue = 120,
							stradd = "°",
						},
						{
							type = "toggle",
							name = "No Camera Bob",
							value = false,
						},
						{
							type = "toggle",
							name = "No Scope Sway",
							value = false,
						},
						{
							type = "toggle",
							name = "Disable ADS FOV",
							value = false,
						},
						{
							type = "toggle",
							name = "No Scope Border",
							value = false,
						},
						{
							type = "toggle",
							name = "No Visual Suppression",
							value = false,
							tooltip = "Removes the suppression of enemies' bullets.",
						},
						{
							type = "toggle",
							name = "No Gun Bob or Sway",
							value = false,
							tooltip = "Removes the bob and sway of weapons when walking.\nThis does not remove the swing effect when moving your mouse.",
						},
						{
							type = "toggle",
							name = "Reduce Camera Recoil",
							value = false,
							tooltip = "Reduces camera recoil by X%. Does not affect visible weapon recoil or kick.",
						},
						{
							type = "slider",
							name = "Camera Recoil Reduction",
							value = 10,
							minvalue = 0,
							maxvalue = 100,
							stradd = "%",
						},
					},
				},
				[2] = {
					content = {
						{
							type = "toggle",
							name = "Enabled",
							value = false,
						},
						{
							type = "slider",
							name = "Offset X",
							value = 0,
							minvalue = -3,
							maxvalue = 3,
							decimal = 0.01,
							stradd = " studs",
						},
						{
							type = "slider",
							name = "Offset Y",
							value = 0,
							minvalue = -3,
							maxvalue = 3,
							decimal = 0.01,
							stradd = " studs",
						},
						{
							type = "slider",
							name = "Offset Z",
							value = 0,
							minvalue = -3,
							maxvalue = 3,
							decimal = 0.01,
							stradd = " studs",
						},
						{
							type = "slider",
							name = "Pitch",
							value = 0,
							minvalue = -180,
							maxvalue = 180,
							stradd = "°",
						},
						{
							type = "slider",
							name = "Yaw",
							value = 0,
							minvalue = -180,
							maxvalue = 180,
							stradd = "°",
						},
						{
							type = "slider",
							name = "Roll",
							value = 0,
							minvalue = -180,
							maxvalue = 180,
							stradd = "°",
						},
					},
				},
			},
			{
				name = { "World", "Misc", "Keybinds", "FOV" },

				autopos = "right",
				size = 144,
				[1] = {
					content = {
						{
							type = "toggle",
							name = "Ambience",
							value = false,
							extra = {
								type = "double colorpicker",
								name = { "Inside Ambience", "Outside Ambience" },
								color = { { 117, 76, 236 }, { 117, 76, 236 } },
							},
							tooltip = "Changes the map's ambient colors to the user defined colors.",
						},
						{
							type = "toggle",
							name = "Force Time",
							value = false,
							tooltip = "Forces the time to the time set by the user below.",
						},
						{
							type = "slider",
							name = "Custom Time",
							value = 0,
							minvalue = 0,
							maxvalue = 24,
							decimal = 0.1,
						},
						{
							type = "toggle",
							name = "Custom Saturation",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Saturation Tint",
								color = { 255, 255, 255 },
							},
							tooltip = "Adds custom saturation the image of the game.",
						},
						{
							type = "slider",
							name = "Saturation Density",
							value = 0,
							minvalue = 0,
							maxvalue = 100,
							stradd = "%",
						},
					},
				},
				[2] = {
					content = {
						{
							type = "toggle",
							name = "Crosshair Color",
							value = false,
							extra = {
								type = "double colorpicker",
								name = { "Inline", "Outline" },
								color = { { 127, 72, 163 }, { 25, 25, 25 } },
							},
						},
						{
							type = "toggle",
							name = "Laser Pointer",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Laser Pointer Color",
								color = { 255, 255, 255, 255 },
							},
						},
						{
							type = "toggle",
							name = "Ragdoll Chams",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Ragdoll Chams",
								color = { 106, 136, 213, 255 },
							},
						},
						{
							type = "dropbox",
							name = "Ragdoll Material",
							value = 1,
							values = { "Plastic", "Ghost", "Neon", "Foil", "Glass" },
						},
						{
							type = "toggle",
							name = "Bullet Tracers",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Bullet Tracers",
								color = { 201, 69, 54 },
							},
						},
					},
				},
				[3] = {
					content = {
						{
							type = "toggle",
							name = "Enabled",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Text Color",
								color = { 127, 72, 163, 255 },
							},
						},
						{
							type = "toggle",
							name = "Use List Sizes",
							value = false,
						},
						{
							type = "toggle",
							name = "Log Keybinds",
							value = false
						}
					},
				},
				[4] = {
					content = {
						{
							type = "toggle",
							name = "Enabled",
							value = false,
						},
						{
							type = "toggle",
							name = "Aim Assist",
							value = true,
							extra = {
								type = "single colorpicker",
								name = "Aim Assist FOV",
								color = { 127, 72, 163, 255 },
							},
						},
						{
							type = "toggle",
							name = "Aim Assist Deadzone",
							value = true,
							extra = {
								type = "single colorpicker",
								name = "Deadzone FOV",
								color = { 50, 50, 50, 255 },
							},
						},
						{
							type = "toggle",
							name = "Bullet Redirection",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Bullet Redirection FOV",
								color = { 163, 72, 127, 255 },
							},
						},
						{
							type = "toggle",
							name = "Ragebot",
							value = false,
							extra = {
								type = "single colorpicker",
								name = "Ragebot FOV",
								color = { 255, 210, 0, 255 },
							},
						},
					},
				},
			},
			{
				name = "Dropped ESP",
				autopos = "right",
				autofill = true,
				content = {
					{
						type = "toggle",
						name = "Weapon Names",
						value = false,
						extra = {
							type = "double colorpicker",
							name = { "Highlighted Weapons", "Weapon Names" },
							color = { { 255, 125, 255, 255 }, { 255, 255, 255, 255 } },
						},
						tooltip = "Displays dropped weapons as you get closer to them,\nHighlights the weapon you are holding in the second color.",
					},
					{
						type = "toggle",
						name = "Weapon Ammo",
						value = false,
						extra = {
							type = "single colorpicker",
							name = "Weapon Ammo",
							color = { 61, 168, 235, 150 },
						},
					},
					{
						type = "toggle",
						name = "Dropped Weapon Chams",
						value = false,
						extra = {
							type = "single colorpicker",
							name = "Dropped Weapon Color",
							color = { 3, 252, 161, 150 },
						},
					},
					{
						type = "toggle",
						name = "Grenade Warning",
						value = true,
						extra = {
							type = "single colorpicker",
							name = "Slider Color",
							color = { 68, 92, 227 },
						},
						tooltip = "Displays where grenades that will deal\ndamage to you will land and the damage they will deal.",
					},
					{
						type = "toggle",
						name = "Grenade ESP",
						value = false,
						extra = {
							type = "double colorpicker",
							name = { "Inner Color", "Outer Color" },
							color = { { 195, 163, 255 }, { 123, 69, 224 } },
						},
						tooltip = "Displays the full path of any grenade that will deal damage to you is thrown.",
					},
				},
			},
		},
	},
	{
		name = "Misc",
		content = {
			{
				name = { "Movement", "Tweaks" },
				autopos = "left",
				size = 250,
				[1] = {
					content = {
						{
							type = "toggle",
							name = "Fly",
							value = false,
							unsafe = true,
							tooltip = "Manipulates your velocity to make you fly.\nUse 60 speed or below to never get flagged.",
							extra = {
								type = "keybind",
								key = Enum.KeyCode.B,
								toggletype = 2,
							},
						},
						{
							type = "slider",
							name = "Fly Speed",
							value = 60,
							minvalue = 1,
							maxvalue = 400,
							stradd = " stud/s",
						},
						{
							type = "toggle",
							name = "Auto Jump",
							value = false,
							tooltip = "When you hold the spacebar, it will automatically jump repeatedly, ignoring jump delay.",
						},
						{
							type = "toggle",
							name = "Speed",
							value = false,
							unsafe = true,
							tooltip = "Manipulates your velocity to make you move faster, unlike fly it doesn't make you fly.\nUse 60 speed or below to never get flagged.",
							extra = {
								type = "keybind",
								toggletype = 4,
							},
						},
						{
							type = "dropbox",
							name = "Speed Type",
							value = 1,
							values = { "Always", "In Air", "On Hop" },
						},
						{
							type = "slider",
							name = "Speed Factor",
							value = 40,
							minvalue = 1,
							maxvalue = 400,
							stradd = " stud/s",
						},
						{
							type = "toggle",
							name = "Circle Strafe",
							value = false,
							extra = {
								type = "keybind",
							},
							tooltip = "When you hold this keybind, it will strafe in a perfect circle.\nSpeed of strafing is borrowed from Speed Factor.",
						},
						{
							type = "toggle",
							name = "Bypass Speed Checks",
							value = false,
							unsafe = true,
							tooltip = "Attempts to bypass maximum speed limit on the server.",
						},
					},
				},
				[2] = {
					content = {
						{
							type = "toggle",
							name = "Gravity Shift",
							value = false,
							tooltip = "Shifts movement gravity by X%. (Does not affect bullet acceleration.)",
						},
						{
							type = "slider",
							name = "Gravity Shift Percentage",
							value = -50,
							minvalue = -500,
							maxvalue = 500,
							stradd = "%",
						},
						{
							type = "toggle",
							name = "Jump Power",
							value = false,
							tooltip = "Shifts movement jump power by X%.",
						},
						{
							type = "slider",
							name = "Jump Power Percentage",
							value = 150,
							minvalue = 0,
							maxvalue = 1000,
							stradd = "%",
						},
						{
							type = "toggle",
							name = "Prevent Fall Damage",
							value = false,
						},
					},
				},
			},
			{
				name = "Weapon Modifications",
				autopos = "left",
				autofill = true,
				content = {
					{
						type = "toggle",
						name = "Enabled",
						value = false,
						tooltip = "Allows Bitch Bot to modify weapons.",
					},
					{
						type = "slider",
						name = "Fire Rate Scale",
						value = 150,
						minvalue = 50,
						maxvalue = 500,
						stradd = "%",
						tooltip = "Scales all weapons' firerate by X%.\n100% = Normal firerate",
					},
					{
						type = "slider",
						name = "Recoil Scale",
						value = 10,
						minvalue = 0,
						maxvalue = 100,
						stradd = "%",
						tooltip = "Scales all weapons' recoil by X%.\n0% = No recoil | 50% = Halved recoil",
					},
					{
						type = "toggle",
						name = "Remove Animations",
						value = true,
						tooltip = "Removes all animations from any gun.\nThis will also completely remove the equipping animations.",
					},
					{
						type = "toggle",
						name = "Instant Equip",
						value = true,
					},
					{
						type = "toggle",
						name = "Fully Automatic",
						value = true,
					},
					{
						type = "toggle",
						name = "Run and Gun",
						value = false,
						tooltip = "Makes it so that your weapon does not\nsway due to mouse movement, or turns over while sprinting.",
					},
				},
			},
			{
				name = { "Extra", "Exploits" },
				autopos = "right",
				autofill = true,
				[1] = {
					content = {
						{
							type = "toggle",
							name = "Ignore Friends",
							value = true,
							tooltip = "When turned on, bullets do not deal damage to friends,\nand Rage modules won't target friends.",
						},
						{
							type = "toggle",
							name = "Target Only Priority Players",
							value = false,
							tooltip = "When turned on, all modules except for Aim Assist that target players\nwill ignore anybody that isn't on the Priority list.",
						},
						{
							type = "toggle",
							name = "Suppress Only",
							value = false,
							tooltip = "When turned on, bullets do not deal damage.",
						},
						{
							type = "toggle",
							name = "Auto Respawn",
							value = false,
							tooltip = "Automatically respawns after deaths.",
						},
						{
							type = "toggle",
							name = "Auto Vote",
							value = false,
							tooltip = "When votekicks are started, Bitch Bot will automatically choose\nwhat choice to make depending on the options below.",
						},
						{
							type = "dropbox",
							name = "Vote Friends",
							value = 1,
							values = { "Off", "Yes", "No" },
						},
						{
							type = "dropbox",
							name = "Vote Priority",
							value = 1,
							values = { "Off", "Yes", "No" },
						},
						{
							type = "dropbox",
							name = "Default Vote",
							value = 1,
							values = { "Off", "Yes", "No" },
						},
						{
							type = "toggle",
							name = "Kill Sound",
							value = false,
						},
						{
							type = "textbox",
							name = "killsoundid",
							text = "6229978482",
							tooltip = "The Roblox sound ID or file inside of synapse\n workspace to play when Kill Sound is on.",
						},
						{
							type = "slider",
							name = "Kill Sound Volume",
							value = 20,
							minvalue = 0,
							maxvalue = 100,
							stradd = "%",
						},
						{
							type = "toggle",
							name = "Kill Say",
							value = false,
							tooltip = "Kill say messages, located in bitchbot/killsay.txt \n[name] is the target's name\n[weapon] is the weapon used\n[hitbox] says head or body depending on where you shot the player",
						},
						{
							type = "dropbox",
							name = "Chat Spam",
							value = 1,
							values = {
								"Off",
								"Original",
								"t0nymode",
								"Chinese Propaganda",
								"Emojis",
								"Deluxe",
								"Youtube Title",
								"Custom",
								"Custom Combination",
							},
							tooltip = "Spams chat, Custom options are located in the bitchbot/chatspam.txt",
						},
						{
							type = "toggle",
							name = "Chat Spam Repeat",
							value = false,
							tooltip = "Repeats the same Chat Spam message in chat.",
						},
						{
							type = "slider",
							name = "Chat Spam Delay",
							minvalue = 1,
							maxvalue = 10,
							value = 5,
							stradd = " seconds",
						},
						{
							type = "toggle",
							name = "Auto Martyrdom",
							value = false,
							tooltip = "Whenever you die to an enemy, this will drop a grenade\nat your death position. If Grenade Teleport is on, it will place the grenade at the enemy.",
						},
						{
							type = "toggle",
							name = "Break Windows",
							value = false,
							tooltip = "Breaks all windows in the map when you spawn."
						},
						{
							type = "button",
							name = "Join New Game",
							value = false,
							unsafe = false,
							doubleclick = true,
						},

					},
				},
				[2] = {
					content = {

						--[[{
					type = "toggle",
					name = "Super Invisibility",
					value = false,
					extra = {
						type = "keybind"
					}
				},]]
						{
							type = "button",
							name = "Crash Server",
							doubleclick = true,
							tooltip = "Attempts to overwhelm the server so that users are kicked for internet connection problems.\nRoblox may detect strange activity and automatically\nkick you for it before the server can crash.",
						},
						{
							type = "toggle",
							name = "Invisibility",
							extra = {
								type = "keybind",
								toggletype = 0,
							},
						},
						{
							type = "toggle",
							name = "Rapid Kill",
							value = false,
							extra = {
								type = "keybind",
								toggletype = 0,
							},
							tooltip = "Throws 3 grenades instantly on random enemies.",
						},
						{
							type = "toggle",
							name = "Auto Rapid Kill",
							value = false,
							tooltip = "Throws 3 grenades instantly on random enemies,\nthen respawns to do it again.\nWorks only when Rapid Kill is enabled.",
						},
						{
							type = "toggle",
							name = "Grenade Teleport",
							value = false,
							tooltip = "Sets any spawned grenade's position to the nearest enemy to your cursor and instantly explodes.",
						},
						{
							type = "toggle",
							name = "Crimwalk",
							value = false,
							extra = {
								type = "keybind",
							},
						},
						{
							type = "toggle",
							name = "Teleport",
							value = false,
							extra = {
								type = "keybind",
								toggletype = 0,
							},
							tooltip = "When key pressed you will teleport to the mouse position",
						},
						{
							type = "toggle",
							name = "Disable Crimwalk on Shot",
							value = true,
						},
						{
							type = "toggle",
							name = "Vertical Floor Clip",
							value = false,
							extra = {
								type = "keybind",
								toggletype = 0,
							},
							tooltip = "Teleports you 19 studs under the ground. Must be over glass or non-collidable parts to work. \nHold Alt to go up, and Shift to go forwards.",
						},
						{
							type = "toggle",
							name = "Fake Equip",
							value = false,
							unsafe = true,
						},
						{
							type = "dropbox",
							name = "Fake Slot",
							values = { "Primary", "Secondary", "Melee" },
							value = 1,
						},

						-- {
						-- 	type = "toggle",
						-- 	name = "Noclip",
						-- 	value = false,
						-- 	extra = {
						-- 		type = "keybind",
						-- 		key = nil
						-- 	},
						-- 	unsafe = true,
						-- 	tooltip = "Allows you to noclip through most parts of the map. Must be over glass or non-collidable parts to work."
						-- },
						-- {
						-- 	type = "toggle",
						-- 	name = "Fake Position",
						-- 	value = false,
						-- 	extra = {
						-- 		type = "keybind"
						-- 	},
						-- 	unsafe = true,
						-- 	tooltip = "Fakes your server-side position. Works best when stationary, and allows you to be unhittable."
						-- },
						{
							type = "toggle",
							name = "Lock Player Positions",
							value = false,
							extra = {
								type = "keybind",
							},
							tooltip = "Locks all other players' positions.",
						},
						{
							type = "toggle",
							name = "Skin Changer",
							value = false,
							tooltip = "While this is enabled, all custom skins will apply with the custom settings below.",
							extra = {
								type = "single colorpicker",
								name = "Weapon Skin Color",
								color = { 127, 72, 163, 255 },
							},
						},
						{
							type = "textbox",
							name = "skinchangerTexture",
							text = "6156783684",
						},
						{
							type = "slider",
							name = "Scale X",
							value = 10,
							minvalue = 1,
							maxvalue = 500,
							stradd = "%",
						},
						{
							type = "slider",
							name = "Scale Y",
							value = 10,
							minvalue = 1,
							maxvalue = 500,
							stradd = "%",
						},
						{
							type = "dropbox",
							name = "Skin Material",
							value = 1,
							values = { "Plastic", "Ghost", "Neon", "Foil", "Glass" },
						},
					},
				},
			},
		},
	},
	{
		name = "Settings",
		content = {
			
			{
				name = "Cheat Settings",
				x = menu.columns.left,
				y = menu.columns.right - 185,
				width = menu.columns.width,
				height = 182,
				content = {
					{
						type = "toggle",
						name = "Menu Accent",
						value = false,
						extra = {
							type = "single colorpicker",
							name = "Accent Color",
							color = { 127, 72, 163 },
						},
					},
					{
						type = "toggle",
						name = "Watermark",
						value = true,
					},
					{
						type = "toggle",
						name = "Custom Menu Name",
						value = MenuName and true or false,
					},
					{
						type = "textbox",
						name = "MenuName",
						text = MenuName or "Bitch Bot",
					},
					{
						type = "button",
						name = "Set Clipboard Game ID",
					},
					{
						type = "button",
						name = "Unload Cheat",
						doubleclick = true,
					},
					{
						type = "toggle",
						name = "Allow Unsafe Features",
						value = false,
					},
				},
			},
			{
				name = "Configuration",
				x = menu.columns.right,
				y = menu.columns.left + 50,
				width = menu.columns.width,
				height = 182,
				content = {
					{
						type = "textbox",
						name = "ConfigName",
						file = true,
						text = "",
					},
					{
						type = "dropbox",
						name = "Configs",
						value = 1,
						values = GetConfigs(),
					},
					{
						type = "button",
						name = "Load Config",
						doubleclick = true,
					},
					{
						type = "button",
						name = "Save Config",
						doubleclick = true,
					},
					{
						type = "button",
						name = "Delete Config",
						doubleclick = true,
					},
				},
			},
		},
	},
})



do
	local wm = menu.watermark
	wm.textString = " | " .. "user" .. " | " .. os.date("%b. %d, %Y")
	wm.pos = Vector2.new(50, 9)
	wm.text = {}
	local fulltext = menu.options["Settings"]["Cheat Settings"]["MenuName"][1] .. wm.textString
	wm.width = #fulltext * 7 + 10
	wm.height = 19
	wm.rect = {}

	Draw:FilledRect(
		false,
		wm.pos.x,
		wm.pos.y + 1,
		wm.width,
		2,
		{ menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40, 255 },
		wm.rect
	)
	Draw:FilledRect(false, wm.pos.x, wm.pos.y, wm.width, 2, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, wm.rect)
	Draw:FilledRect(false, wm.pos.x, wm.pos.y + 3, wm.width, wm.height - 5, { 50, 50, 50, 255 }, wm.rect)
	for i = 0, wm.height - 4 do
		Draw:FilledRect(
			false,
			wm.pos.x,
			wm.pos.y + 3 + i,
			wm.width,
			1,
			{ 50 - i * 1.7, 50 - i * 1.7, 50 - i * 1.7, 255 },
			wm.rect
		)
	end
	Draw:OutlinedRect(false, wm.pos.x, wm.pos.y, wm.width, wm.height, { 0, 0, 0, 255 }, wm.rect)
	Draw:OutlinedRect(false, wm.pos.x - 1, wm.pos.y - 1, wm.width + 2, wm.height + 2, { 0, 0, 0, 255 * 0.4 }, wm.rect)
	Draw:OutlinedText(
		fulltext,
		2,
		false,
		wm.pos.x + 5,
		wm.pos.y + 3,
		13,
		false,
		{ 255, 255, 255, 255 },
		{ 0, 0, 0, 255 },
		wm.text
	)
end

--ANCHOR watermak
for k, v in pairs(menu.watermark.rect) do
	v.Visible = true
end

menu.watermark.text[1].Visible = true

local textbox = menu.options["Settings"]["Configuration"]["ConfigName"]
local relconfigs = GetConfigs()
textbox[1] = relconfigs[menu.options["Settings"]["Configuration"]["Configs"][1]]
textbox[4].Text = textbox[1]

menu.load_time = math.floor((tick() - loadstart) * 1000)
CreateNotification(string.format("Done loading the " .. menu.game .. " cheat. (%d ms)", menu.load_time))
CreateNotification("Press DELETE to open and close the menu!")

loadingthing.Visible = false -- i do it this way because otherwise it would fuck up the Draw:UnRender function, it doesnt cause any lag sooooo
if not menu.open then
	menu.fading = true
	menu.fadestart = tick()
end

menu.Initialize = true -- let me freeeeee
-- not lettin u free asshole bitch
-- i meant the program memory, alan...............  fuckyouAlan_iHateYOU from v1
-- im changing all the var names that had typos by me back to what they were now because of this.... enjoy hieght....
-- wutw

 

Remember to employ a dummy account when injecting scripts. We cannot be held responsible for any potential harm caused to your Roblox account.