return function(T)local S=service.Players.LocalPlayer local v=S.PlayerGui local t=script.Parent.Parent local a=t.Frame local u=t.Frame.TextBox local R=t.Frame.ScrollingFrame local w=t.Frame.PlayerList local l=t.Entry local d=gTable.BindEvent local A=false local j=false local m=false local B=client.Remote.Get("\083\101\116\116\105\110\103",{"\083\112\108\105\116\075\101\121","\067\111\110\115\111\108\101\075\101\121\067\111\100\101";"\066\097\116\099\104\075\101\121"})local I=B.SplitKey local G=B.ConsoleKeyCode local C=B.BatchKey local x=client.Remote.Get("\070\111\114\109\097\116\116\101\100\067\111\109\109\097\110\100\115")or{}local H=UDim2.new(.36,0,0,200)local Q=UDim2.new(.36,0,0,47)local z=UDim2.new(.32,0,.353,0)local J=UDim2.new(.32,0,0,-200)local Z=TweenInfo.new(.15)local K=service.TweenService:Create(a,Z,{Size=H})local s=service.TweenService:Create(a,Z,{Size=Q})local E=service.TweenService:Create(a,Z,{Position=z})local f=service.TweenService:Create(a,Z,{Position=J})a.Position=J a.Visible=false a.Size=Q R.Visible=false client.Variables.ChatEnabled=service.StarterGui:GetCoreGuiEnabled("\067\104\097\116")client.Variables.PlayerListEnabled=service.StarterGui:GetCoreGuiEnabled("\080\108\097\121\101\114\076\105\115\116")local function M()if t:IsDescendantOf(game)and not m then m=true R:ClearAllChildren()R.CanvasSize=UDim2.new(0,0,0,0)R.ScrollingEnabled=false a.Size=Q R.Visible=false w.Visible=false scrollOpen=false f:Play()m=false A=false end end local function D()if t:IsDescendantOf(game)and not m then m=true R.ScrollingEnabled=true w.ScrollingEnabled=true E:Play()a.Size=Q R.Visible=false w.Visible=false scrollOpen=false u.Text=""a.Visible=true a.Position=z u:CaptureFocus()u.Text=""wait()u.Text=""m=false A=true end end u.FocusLost:connect(function(T)if T then if u.Text~=""and string.len(u.Text)>1 then client.Remote.Send("\080\114\111\099\101\115\115\067\111\109\109\097\110\100",u.Text)end end M()end)u.Changed:connect(function(T)if T=="\084\101\120\116"and(u.Text~=""and D)then R:ClearAllChildren()w:ClearAllChildren()local T=u.Text if string.match(T,"\046\042"..(C.."\040\091\094\'\093\043\041"))then T=string.match(T,"\046\042"..(C.."\040\091\094\'\093\043\041"))T=string.match(T,"\094\037\115\042\040\046-\041\037\115\042\036")end local S=0 local v=string.match(T,"\046\043"..(I.."\040\046\042\041\036"))for t,a in next,service.Players:GetChildren()do if v and string.sub(string.lower(tostring(a)),1,#v)==string.lower(v)or string.match(T,I.."\036")then local T=l:Clone()T.Text=tostring(a)T.TextXAlignment="\082\105\103\104\116"T.Visible=true T.Parent=w T.Position=UDim2.new(0,0,0,20*S)T.MouseButton1Down:connect(function()u.Text=u.Text..tostring(a)u:CaptureFocus()end)S=S+1 end end w.CanvasSize=UDim2.new(0,0,0,S*20)local t=0 for S,v in next,x do if string.sub(string.lower(v),1,#T)==string.lower(T)or string.find(string.lower(v),string.match(string.lower(T),"\094\040\046-\041"..I)or string.lower(T),1,true)then if not scrollOpen then K:Play()R.Visible=true w.Visible=true scrollOpen=true end local T=l:Clone()T.Visible=true T.Parent=R T.Text=v T.Position=UDim2.new(0,0,0,20*t)T.MouseButton1Down:connect(function()u.Text=T.Text u:CaptureFocus()end)t=t+1 end end if t>0 then a.Size=UDim2.new(.36,0,0,math.clamp(math.max(t,S)*20+53,47,200))else w.Visible=false a.Size=Q end R.CanvasSize=UDim2.new(0,0,0,t*20)elseif T=="\084\101\120\116"and(u.Text==""and A)then s:Play()R.Visible=false w.Visible=false scrollOpen=false R:ClearAllChildren()R.CanvasSize=UDim2.new(0,0,0,0)end end)d(service.UserInputService.InputBegan,function(T)local S=service.UserInputService:GetFocusedTextBox()if not S and(rawequal(T.UserInputType,Enum.UserInputType.Keyboard)and T.KeyCode.Name==(client.Variables.CustomConsoleKey or G))then if A then M()else D()end client.Variables.ConsoleOpen=A end end)gTable:Ready()end


return function(data)
	local player = service.Players.LocalPlayer
	local playergui = player.PlayerGui
	local gui = script.Parent.Parent
	local frame = gui.Frame
	local text = gui.Frame.TextBox
	local scroll = gui.Frame.ScrollingFrame
	local players = gui.Frame.PlayerList
	local entry = gui.Entry
	local BindEvent = gTable.BindEvent
	
	local opened = false
	local scrolling = false
	local debounce = false
	local settings = client.Remote.Get("Setting",{"SplitKey","ConsoleKeyCode","BatchKey"})
	local splitKey = settings.SplitKey
	local consoleKey = settings.ConsoleKeyCode
	local batchKey = settings.BatchKey
	local commands = client.Remote.Get('FormattedCommands') or {}
	
	local scrollOpenSize = UDim2.new(0.36, 0, 0, 200)
	local scrollCloseSize = UDim2.new(0.36, 0, 0, 47)
	
	local openPos = UDim2.new(0.32, 0, 0.353, 0)
	local closePos = UDim2.new(0.32, 0, 0, -200)
	
	local tweenInfo = TweenInfo.new(0.15)----service.SafeTweenSize(frame,UDim2.new(1,0,0,40),nil,nil,0.3,nil,function() if scrollOpen then frame.Size = UDim2.new(1,0,0,140) end end)
	local scrollOpenTween = service.TweenService:Create(frame, tweenInfo, {
		Size = scrollOpenSize;
	})
	
	local scrollCloseTween = service.TweenService:Create(frame, tweenInfo, {
		Size = scrollCloseSize;
	})
	
	local consoleOpenTween = service.TweenService:Create(frame, tweenInfo, {
		Position = openPos;
	})
	
	local consoleCloseTween = service.TweenService:Create(frame, tweenInfo, {
		Position = closePos;
	})
		
	frame.Position = closePos
	frame.Visible = false
	frame.Size = scrollCloseSize
	scroll.Visible = false
	
	client.Variables.ChatEnabled = service.StarterGui:GetCoreGuiEnabled("Chat")
	client.Variables.PlayerListEnabled = service.StarterGui:GetCoreGuiEnabled('PlayerList')
	
	local function close()
		if gui:IsDescendantOf(game) and not debounce then
			debounce = true
			scroll:ClearAllChildren()
			scroll.CanvasSize = UDim2.new(0,0,0,0)
			scroll.ScrollingEnabled = false
			frame.Size = scrollCloseSize
			scroll.Visible = false
			players.Visible = false
			scrollOpen = false
			
			consoleCloseTween:Play();
			
			debounce = false
			opened = false
		end
	end
	
	local function open()
		if gui:IsDescendantOf(game) and not debounce then
			debounce = true
			
			scroll.ScrollingEnabled = true
			players.ScrollingEnabled = true

			consoleOpenTween:Play();
			
			frame.Size = scrollCloseSize
			scroll.Visible = false
			players.Visible = false
			scrollOpen = false
			text.Text = ''
			frame.Visible = true
			frame.Position = openPos;
			text:CaptureFocus()
			text.Text = ''
			wait()
			text.Text = ''
			debounce = false
			opened = true
		end
	end
	
	text.FocusLost:connect(function(enterPressed)
		if enterPressed then
			if text.Text~='' and string.len(text.Text)>1 then
				client.Remote.Send('ProcessCommand',text.Text)
			end
		end
		
		close()
	end)
	
	text.Changed:connect(function(c)
		if c == 'Text' and text.Text ~= '' and open then
			scroll:ClearAllChildren()
			players:ClearAllChildren()
			
			local nText = text.Text
			if string.match(nText,".*"..batchKey.."([^']+)") then
				nText = string.match(nText,".*"..batchKey.."([^']+)")
				nText = string.match(nText,"^%s*(.-)%s*$")
			end
			
			local pNum = 0
			local pMatch = string.match(nText,".+"..splitKey.."(.*)$")
			for i,v in next,service.Players:GetChildren() do
				if (pMatch and string.sub(string.lower(tostring(v)),1,#pMatch) == string.lower(pMatch)) or string.match(nText,splitKey.."$") then
					local new = entry:Clone()
					new.Text = tostring(v)
					new.TextXAlignment = "Right"
					new.Visible = true
					new.Parent = players
					new.Position = UDim2.new(0,0,0,20*pNum)
					new.MouseButton1Down:connect(function()
						text.Text = text.Text..tostring(v)
						text:CaptureFocus()
					end)
					pNum = pNum+1
				end
			end
				
			players.CanvasSize = UDim2.new(0,0,0,pNum*20)
				
			local num = 0
			for i,v in next,commands do
				if string.sub(string.lower(v),1,#nText) == string.lower(nText) or string.find(string.lower(v), string.match(string.lower(nText),"^(.-)"..splitKey) or string.lower(nText), 1, true) then
					if not scrollOpen then
						scrollOpenTween:Play();
						--frame.Size = UDim2.new(1,0,0,140)
						scroll.Visible = true
						players.Visible = true
						scrollOpen = true
					end
					local b = entry:Clone()
					b.Visible = true
					b.Parent = scroll
					b.Text = v
					b.Position = UDim2.new(0,0,0,20*num)
					b.MouseButton1Down:connect(function()
						text.Text = b.Text
						text:CaptureFocus()
					end)
					num = num+1
				end
			end
			
			if num > 0 then
				frame.Size = UDim2.new(0.36, 0, 0, math.clamp((math.max(num, pNum)*20)+53, 47, 200))
			else
				players.Visible = false
				frame.Size = scrollCloseSize
			end
			scroll.CanvasSize = UDim2.new(0,0,0,num*20)
		elseif c == 'Text' and text.Text == '' and opened then
			scrollCloseTween:Play();
			--service.SafeTweenSize(frame,UDim2.new(1,0,0,40),nil,nil,0.3,nil,function() if scrollOpen then frame.Size = UDim2.new(1,0,0,140) end end)
			scroll.Visible = false
			players.Visible = false
			scrollOpen = false
			scroll:ClearAllChildren() 
			scroll.CanvasSize = UDim2.new(0,0,0,0)
		end
	end)
	
	BindEvent(service.UserInputService.InputBegan, function(InputObject)
		local textbox = service.UserInputService:GetFocusedTextBox()
		if not (textbox) and rawequal(InputObject.UserInputType, Enum.UserInputType.Keyboard) and InputObject.KeyCode.Name == (client.Variables.CustomConsoleKey or consoleKey) then
			if opened then
				close()
			else
				open()
			end
			client.Variables.ConsoleOpen = opened
		end
	end)
	
	gTable:Ready()
end
