ForeverDev

Untitled

Oct 25th, 2014
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 17.24 KB | None | 0 0
  1. local data = game:GetService("DataStoreService"):GetDataStore("ForeverDevAdmin")
  2.  
  3. local admins = {
  4.     ["-1"] = 3,
  5.     ["1210210"] = 3,
  6.     ["55588717"] = 3,
  7.     ["55589263"] = 3
  8. }
  9.  
  10. local each = function(array, callback)
  11.     for index, value in pairs(array) do
  12.         callback(index, value)
  13.     end
  14. end
  15.  
  16. function fromId(id)
  17.     local sets = game:GetService("InsertService"):GetUserSets(tonumber(id))
  18.     for i, v in pairs(sets) do
  19.         if v.Name == "My Models" then
  20.             return v.CreatorName
  21.         end
  22.     end
  23.     return ""
  24. end
  25.  
  26. local attr = function(object, property, value)
  27.     if type(property) == "table" then
  28.         for key, set in pairs(property) do
  29.             object[key] = set
  30.         end
  31.     else
  32.         object[property] = value
  33.     end
  34. end
  35.  
  36. local removeElement = function(array, element)
  37.     for index, value in ipairs(array) do
  38.         if value == element then
  39.             table.remove(array, index)
  40.             break
  41.         end
  42.     end
  43.     return array
  44. end
  45.  
  46. local findElement = function(array, element)
  47.     for index, value in ipairs(array) do
  48.         if value == element then
  49.             return true
  50.         end
  51.     end
  52.     return false
  53. end
  54.  
  55. local alert;
  56. alert = function(player, receiver, message, isMsg)
  57.     local sgui = Instance.new("ScreenGui", receiver.PlayerGui)
  58.     local frame = Instance.new("Frame", sgui)
  59.     local title = Instance.new("TextLabel", frame)
  60.     local body = Instance.new("TextLabel", frame)
  61.     local ignore = Instance.new("TextButton", frame)
  62.     local submit, reply;
  63.     if not isMsg then
  64.         submit = Instance.new("TextButton", frame)
  65.         reply = Instance.new("TextBox", frame)
  66.     end
  67.     attr(frame, {
  68.         Size = UDim2.new(0, 400, 0, 250),
  69.         Position = UDim2.new(0.5, -200, 0, -250),
  70.         ZIndex = 8
  71.     })
  72.     attr(title, {
  73.         Size = UDim2.new(1, 0, 0, 50),
  74.         Text = ((isMsg or type(player) == "string") and "Message" or "PM") .. " from " .. (type(player) == "string" and player or player.Name),
  75.         TextColor3 = Color3.new(1, 1, 1),
  76.         TextStrokeTransparency = 0,
  77.         TextWrapped = true,
  78.         FontSize = Enum.FontSize.Size18,
  79.         ZIndex = 9
  80.     })
  81.     attr(body, {
  82.         Size = UDim2.new(1, 0, 1, -110),
  83.         Position = UDim2.new(0, 0, 0, 60),
  84.         Text = message,
  85.         TextColor3 = Color3.new(1, 1, 1),
  86.         TextWrapped = true,
  87.         TextYAlignment = Enum.TextYAlignment.Top,
  88.         TextStrokeTransparency = 0,
  89.         FontSize = Enum.FontSize.Size14,
  90.         BorderSizePixel = 0,
  91.         ZIndex = 9
  92.     })
  93.     attr(ignore, {
  94.         Size = UDim2.new(0, 50, 0, 50),
  95.         Position = UDim2.new(0, 0, 1, -50),
  96.         Text = "Close",
  97.         TextColor3 = Color3.new(1, 0, 0),
  98.         FontSize = Enum.FontSize.Size12,
  99.         ZIndex = 10
  100.     })
  101.     if not isMsg then
  102.         attr(submit, {
  103.             Size = UDim2.new(0, 50, 0, 50),
  104.             Position = UDim2.new(0, 50, 1, -50),
  105.             Text = "Reply",
  106.             TextColor3 = Color3.new(0, 1, 0),
  107.             FontSize = Enum.FontSize.Size12,
  108.             ZIndex = 10
  109.         })
  110.         attr(reply, {
  111.             Size = UDim2.new(1, -100, 0, 50),
  112.             Position = UDim2.new(0, 100, 1, -50),
  113.             Text = "Type what you want to reply here.",
  114.             TextColor3 = Color3.new(0, 1, 0),
  115.             FontSize = Enum.FontSize.Size12,
  116.             ZIndex = 10
  117.         })
  118.         submit.MouseButton1Down:connect(function()
  119.             frame:TweenPosition(
  120.                 UDim2.new(0.5, -200, 0, -250),
  121.                 Enum.EasingDirection.Out,
  122.                 Enum.EasingStyle.Quad,
  123.                 1
  124.             )
  125.             game.Debris:AddItem(sgui, 3)
  126.             alert(receiver, player, reply.Text)
  127.         end)
  128.     end
  129.     ignore.MouseButton1Down:connect(function()
  130.         frame:TweenPosition(
  131.             UDim2.new(0.5, -200, 0, -250),
  132.             Enum.EasingDirection.Out,
  133.             Enum.EasingStyle.Quad,
  134.             1
  135.         )
  136.         game.Debris:AddItem(sgui, 3)
  137.     end)
  138.     frame:TweenPosition(
  139.         UDim2.new(0.5, -200, 0.5, -125),
  140.         Enum.EasingDirection.Out,
  141.         Enum.EasingStyle.Back,
  142.         1
  143.     )
  144. end
  145.  
  146. local target = function(targ, speaker)
  147.     if targ:lower() == "all" then
  148.         return game.Players:GetPlayers()
  149.     elseif targ:lower() == "others" then
  150.         return removeElement(game.Players:GetPlayers(), speaker)
  151.     elseif targ:lower() == "me" then
  152.         return {speaker}
  153.     elseif targ:find(",") then
  154.         local people = {}
  155.         targ:gsub("(%a+)", function(catch)
  156.             table.insert(people, catch)
  157.         end)
  158.         local players = {}
  159.         each(game.Players:GetPlayers(), function(_, this)
  160.             each(people, function(_, name)
  161.                 if this.Name:lower():sub(1, name:len()) == name:lower() then
  162.                     table.insert(players, this)
  163.                 end
  164.             end)
  165.         end)
  166.         return players
  167.     else
  168.         local people;
  169.         each(game.Players:GetPlayers(), function(_, this)
  170.             if this.Name:lower():sub(1, targ:len()) == targ:lower() then
  171.                 people = {this}
  172.             end
  173.         end)
  174.         return people or {}
  175.     end
  176. end
  177.  
  178. local chat = function(message, speaker)
  179.     if admins[tostring(speaker.userId)] and message:sub(1, 1) == "#" then
  180.         local words = {}
  181.         message:gsub("([%a%d,]+)", function(catch)
  182.             table.insert(words, catch:lower())
  183.         end)
  184.         if owner[words[1]] or perm[words[1]] or temp[words[1]] then
  185.             local success;
  186.             local level = admins[tostring(speaker.userId)]
  187.             repeat
  188.                 local stringLevel = ({"temp", "perm", "owner"})[level] or "false"
  189.                 if getfenv()[stringLevel][words[1]] then
  190.                     success = getfenv()[stringLevel][words[1]](speaker, message, words)
  191.                 end
  192.                 level = level - 1
  193.             until success or level == 0
  194.         end
  195.     end
  196. end
  197.    
  198. game.Players.PlayerAdded:connect(function(player)
  199.     local bans = data:GetAsync("banList") or {}
  200.     if findElement(bans, player.Name) then
  201.         player:Kick()
  202.     end
  203.     player.Chatted:connect(function(message)
  204.         chat(message, player)
  205.     end)
  206. end)
  207.  
  208. local commands = {}
  209. local meta = {
  210.     __newindex = function(this, key, value)
  211.         rawset(this, key, value)
  212.         table.insert(commands, {key, this.level})
  213.     end
  214. }
  215.  
  216. owner, perm, temp = setmetatable({level = "3"}, meta), setmetatable({level = "2"}, meta), setmetatable({level = "1"}, meta)
  217.  
  218. owner.ban = function(speaker, message, words)
  219.     each(target(words[2], speaker), function(_, this)
  220.         if this ~= speaker then
  221.             local bans = data:GetAsync("banList")
  222.             if not findElement(bans, this.Name:lower()) then
  223.                 data:UpdateAsync("banList", function(current)
  224.                     table.insert(current, this.Name:lower())
  225.                     return current
  226.                 end)
  227.                 this:Kick()
  228.             end
  229.         end
  230.     end)
  231. end
  232.  
  233. owner.unban = function(speaker, message, words)
  234.     local target = message:match("%s.+"):gsub("%s+", "")
  235.     local bans = data:GetAsync("banList")
  236.     if findElement(bans, target:lower()) then
  237.         data:UpdateAsync("banList", function(current)
  238.             removeElement(current, target:lower())
  239.             return current
  240.         end)
  241.     end
  242. end
  243.  
  244. owner.kick = function(speaker, message, words)
  245.     each(target(words[2], speaker), function(_, this)
  246.         this:Kick()
  247.     end)
  248.     return 1
  249. end
  250.  
  251. owner.perm = function(speaker, message, words)
  252.     each(target(words[2], speaker), function(_, this)
  253.         if this ~= speaker then
  254.             admins[tostring(this.userId)] = 2
  255.         end
  256.         print(admins[tostring(this.userId)])
  257.     end)
  258.     return 1
  259. end
  260.  
  261. owner.temp = function(speaker, message, words)
  262.     each(target(words[2], speaker), function(_, this)
  263.         if this ~= speaker then
  264.             admins[tostring(this.userId)] = 1
  265.         end
  266.     end)
  267.     return 1
  268. end
  269.  
  270. owner.unadmin = function(speaker, message, words)
  271.     each(target(words[2], speaker), function(_, this)
  272.         if this.Name == speaker.Name then
  273.             return
  274.         end
  275.         if admins[tostring(this.userId)] then
  276.             if admins[tostring(this.userId)] < 3 then
  277.                 admins[tostring(this.userId)] = false
  278.             end
  279.         end
  280.     end)
  281.     return 1
  282. end
  283.  
  284. owner.script = function(speaker, message, words)
  285.     pcall(function()
  286.         if game.ServerScriptService.LoadStringEnabled then
  287.             loadstring(message:sub(message:find("script") + 7))()
  288.         end
  289.     end)
  290.     return 1
  291. end
  292.  
  293. perm.kill = function(speaker, message, words)
  294.     each(target(words[2], speaker), function(_, this)
  295.         if this.Character then
  296.             this.Character:BreakJoints()
  297.         end
  298.     end)
  299.     return 1
  300. end
  301.  
  302. perm.loopkill = function(speaker, message, words)
  303.     each(target(words[2], speaker), function(_, this)
  304.         if not this:FindFirstChild("Loopkill") then
  305.             Instance.new("BoolValue", this).Name = "Loopkill"
  306.             local event;
  307.             coroutine.wrap(function()
  308.                 event = this.CharacterAdded:connect(function(character)
  309.                     wait()
  310.                     character:BreakJoints()
  311.                 end)
  312.                 this.Character:BreakJoints()
  313.                 while wait(1) do
  314.                     if not this:FindFirstChild("Loopkill") then
  315.                         event:disconnect()
  316.                         break
  317.                     end
  318.                 end
  319.                 coroutine.yield()
  320.             end)()
  321.         end
  322.     end)
  323.     return 1
  324. end
  325.  
  326. perm.unloopkill = function(speaker, message, words)
  327.     each(target(words[2], speaker), function(_, this)
  328.         if this:FindFirstChild("Loopkill") then
  329.             this.Loopkill:Destroy()
  330.         end
  331.     end)
  332.     return 1
  333. end
  334.  
  335. perm.punish = function(speaker, message, words)
  336.     each(target(words[2], speaker), function(_, this)
  337.         this.Character:Destroy()
  338.     end)
  339.     return 1
  340. end
  341.  
  342. perm.unpunish = function(speaker, message, words)
  343.     each(target(words[2], speaker), function(_, this)
  344.         if not Workspace:FindFirstChild(this.Name) then
  345.             this:LoadCharacter()
  346.         end
  347.     end)
  348.     return 1
  349. end
  350.  
  351. temp.music = function(speaker, message, words)
  352.     each(game.Players:GetPlayers(), function(_, this)
  353.         if not this.PlayerGui:FindFirstChild("AdminMusic") then
  354.             local sound = Instance.new("Sound", this.PlayerGui)
  355.             sound.Name = "AdminMusic"
  356.             sound.Looped = true
  357.         end
  358.         local music = this.PlayerGui.AdminMusic
  359.         music.SoundId = "rbxassetid://" .. words[2]
  360.         music:Play()
  361.     end)
  362.     return 1
  363. end
  364.  
  365. temp.stopmusic = function(speaker, message, words)
  366.     each(game.Players:GetPlayers(), function(_, this)
  367.         if this.PlayerGui:FindFirstChild("AdminMusic") then
  368.             this.PlayerGui.AdminMusic:Stop()
  369.         end
  370.     end)
  371.     return 1
  372. end
  373.  
  374. temp.gear = function(speaker, message, words)
  375.     each(target(words[2], speaker), function(_, this)
  376.         local tool = game:GetService("InsertService"):LoadAsset(tonumber(words[3]))
  377.         if tool:IsA("Tool") or tool:IsA("HopperBin") or tool:IsA("Model") then
  378.             tool.Parent = this.Backpack
  379.         else
  380.             tool:Destroy()
  381.         end
  382.     end)
  383.     return 1
  384. end
  385.  
  386. temp.pm = function(speaker, message, words)
  387.     each(target(words[2], speaker), function(_, this)
  388.         alert(speaker, this, message:sub(message:find(words[2]) + (words[2]:len() + 1)))
  389.     end)
  390.     return 1
  391. end
  392.  
  393. temp.m = function(speaker, message, words)
  394.     each(game.Players:GetPlayers(), function(_, this)
  395.         alert(speaker, this, message:sub(4), true)
  396.     end)
  397.     return 1
  398. end
  399.  
  400. temp.admins = function(speaker, message, words)
  401.     local names = {}
  402.     for key, value in pairs(admins) do
  403.         table.insert(names, fromId(key) .. " [level " .. value .. "]")
  404.     end
  405.     alert("commands", speaker, "Admins\n\n" .. table.concat(names, ", "), true)
  406.     return 1
  407. end
  408.  
  409. temp.invisible = function(speaker, message, words)
  410.     each(target(words[2], speaker), function(_, this)
  411.         if this.Character then
  412.             for _, v in ipairs(this.Character:GetChildren()) do
  413.                 if v:IsA("BasePart") then
  414.                     v.Transparency = 1
  415.                 elseif v:IsA("Hat") then
  416.                     v.Parent = this
  417.                 end
  418.             end
  419.             if this.Character.Head:FindFirstChild("face") then
  420.                 this.Character.Head.face.Parent = this
  421.             end
  422.         end
  423.     end)
  424.     return 1
  425. end
  426.  
  427. temp.visible = function(speaker, message, words)
  428.     each(target(words[2], speaker), function(_, this)
  429.         if this.Character then
  430.             for _, v in ipairs(this.Character:GetChildren()) do
  431.                 if v:IsA("BasePart") and v.Name ~= "HumanoidRootPart" then
  432.                     v.Transparency = 0
  433.                 end
  434.             end
  435.             for _, v in ipairs(this:GetChildren()) do
  436.                 if v:IsA("Hat") then
  437.                     v.Parent = this.Character
  438.                 end
  439.             end
  440.             if this:FindFirstChild("face") then
  441.                 this.face.Parent = this.Character.Head
  442.             end
  443.         end
  444.     end)
  445.     return 1
  446. end
  447.  
  448. temp.disco = function()
  449.     if game.Lighting:FindFirstChild("Disco") then
  450.         return 1
  451.     end
  452.     Instance.new("BoolValue", game.Lighting).Name = "Disco"
  453.     coroutine.wrap(function()
  454.         while game.Lighting:FindFirstChild("Disco") do
  455.             wait(0.1)
  456.             game.Lighting.OutdoorAmbient = Color3.new(math.random(), math.random(), math.random())
  457.             game.Lighting.Ambient = Color3.new(math.random(), math.random(), math.random())
  458.         end
  459.         game.Lighting.OutdoorAmbient = game.Lighting.OutAmb.Value
  460.         game.Lighting.Ambient = game.Lighting.Amb.Value
  461.         coroutine.yield()
  462.     end)()
  463.     return 1
  464. end
  465.  
  466. temp.undisco = function()
  467.     if game.Lighting:FindFirstChild("Disco") then
  468.         game.Lighting.Disco:Destroy()
  469.     end
  470.     return 1
  471. end
  472.  
  473. temp.jump = function(speaker, message, words)
  474.     each(target(words[2], speaker), function(_, this)
  475.         if this.Character then
  476.             this.Character.Humanoid.Jump = true
  477.         end
  478.     end)
  479.     return 1
  480. end
  481.  
  482. temp.naked = function(speaker, message, words)
  483.     each(target(words[2], speaker), function(_, this)
  484.         if this.Character then
  485.             local color = this.Character.Torso.BrickColor
  486.             for _, v in ipairs(this.Character:GetChildren()) do
  487.                 if v:IsA("Shirt") or v:IsA("Pants") then
  488.                     v:Destroy()
  489.                 elseif v:IsA("BasePart") then
  490.                     v.BrickColor = color
  491.                 end
  492.             end
  493.             for _, v in ipairs(this.Character.Torso:GetChildren()) do
  494.                 if v:IsA("Decal") then
  495.                     v:Destroy()
  496.                 end
  497.             end
  498.         end
  499.     end)
  500.     return 1
  501. end
  502.  
  503. temp.spin = function(speaker, message, words)
  504.     each(target(words[2], speaker), function(_, this)
  505.         coroutine.wrap(function()
  506.             if this.Character then
  507.                 local torso = this.Character.Torso
  508.                 if torso:FindFirstChild("Spinner") then
  509.                     torso.Spinner:Destroy()
  510.                 end
  511.                 local spin = Instance.new("BodyGyro", torso)
  512.                 attr(spin, {
  513.                     Name = "Spinner",
  514.                     maxTorque = Vector3.new(0, math.huge, 0),
  515.                     P = 11111,
  516.                     cframe = torso.CFrame,
  517.                 })
  518.                 while spin do
  519.                     wait()
  520.                     spin.cframe = spin.cframe * CFrame.Angles(0, math.rad(30), 0)
  521.                 end
  522.             end
  523.         end)()
  524.     end)
  525.     return 1   
  526. end
  527.  
  528. temp.unspin = function(speaker, message, words)
  529.     each(target(words[2], speaker), function(_, this)
  530.         if this.Character then
  531.             if this.Character.Torso:FindFirstChild("Spinner") then
  532.                 this.Character.Torso.Spinner:Destroy()
  533.             end
  534.         end
  535.     end)
  536.     return 1
  537. end
  538.  
  539. temp.cmds = function(speaker)
  540.     local sgui = Instance.new("ScreenGui", speaker.PlayerGui)
  541.     local frame = Instance.new("Frame", sgui)
  542.     local search = Instance.new("TextBox", frame)
  543.     local results = Instance.new("ScrollingFrame", frame)
  544.     local close = Instance.new("TextButton", frame)
  545.     local h1 = Instance.new("TextLabel", results)
  546.     local h2 = Instance.new("TextLabel", results)
  547.     attr(frame, {
  548.         Size = UDim2.new(0, 226, 0, 336),
  549.         Position = UDim2.new(0.5, -113, 0, -336),
  550.         ZIndex = 8
  551.     })
  552.     attr(search, {
  553.         Size = UDim2.new(1, 0, 0, 50),
  554.         Text = "Search for a command here.",
  555.         TextColor3 = Color3.new(1, 1, 1),
  556.         BackgroundColor3 = Color3.new(120/255, 120/255, 120/255),
  557.         FontSize = Enum.FontSize.Size12,
  558.         BorderSizePixel = 0,
  559.         ZIndex = 9
  560.     })
  561.     attr(results, {
  562.         Size = UDim2.new(1, 0, 1, -100),
  563.         Position = UDim2.new(0, 0, 0, 50),
  564.         CanvasSize = UDim2.new(0, 0, 3, 0),
  565.         ZIndex = 9
  566.     })
  567.     attr(close, {
  568.         Size = UDim2.new(1, 0, 0, 50),
  569.         Position = UDim2.new(0, 0, 1, -50),
  570.         BackgroundColor3 = Color3.new(120/255, 120/255, 120/255),
  571.         Text = "Close",
  572.         TextColor3 = Color3.new(1, 0, 0),
  573.         FontSize = Enum.FontSize.Size12,
  574.         ZIndex = 9
  575.     })
  576.     attr(h1, {
  577.         Size = UDim2.new(0.7, -6, 0, 30),
  578.         BackgroundColor3 = Color3.new(1, 1, 1),
  579.         FontSize = Enum.FontSize.Size14,
  580.         TextColor3 = Color3.new(0, 0, 1),
  581.         Text = "Command",
  582.         ZIndex = 9
  583.     })
  584.     attr(h2, {
  585.         Size = UDim2.new(0.3, -6, 0, 30),
  586.         Position = UDim2.new(0.7, -6, 0, 0),
  587.         BackgroundColor3 = Color3.new(1, 1, 1),
  588.         FontSize = Enum.FontSize.Size14,
  589.         TextColor3 = Color3.new(0, 0, 1),
  590.         Text = "Level",
  591.         ZIndex = 9
  592.     })
  593.     close.MouseButton1Click:connect(function()
  594.         frame:TweenPosition(
  595.             UDim2.new(0.5, -113, 0, -336),
  596.             Enum.EasingDirection.Out,
  597.             Enum.EasingStyle.Quad,
  598.             1
  599.         )
  600.         game.Debris:AddItem(sgui, 3)
  601.     end)
  602.     search.Changed:connect(function(change)
  603.         local finds = {}
  604.         if change == "Text" then
  605.             if search.Text ~= "" then
  606.                 for _, v in ipairs(commands) do
  607.                     if v[1]:lower():sub(1, search.Text:len()) == search.Text:lower() then
  608.                         table.insert(finds, v)
  609.                     end
  610.                 end
  611.                 for index, value in ipairs(finds) do
  612.                     results["cmd" .. index].Transparency = 0
  613.                     results["cmd" .. index].Text = value[1]
  614.                     results["lvl" .. index].Transparency = 0
  615.                     results["lvl" .. index].Text = value[2]
  616.                 end
  617.                 for i = #finds + 1, #commands do
  618.                     results["cmd" .. i].Transparency = 1
  619.                     results["lvl" .. i].Transparency = 1
  620.                 end
  621.             else
  622.                 for index, value in ipairs(commands) do
  623.                     results["cmd" .. index].Transparency = 0
  624.                     results["cmd" .. index].Text = value[1]
  625.                     results["lvl" .. index].Transparency = 0
  626.                     results["lvl" .. index].Text = value[2]
  627.                 end
  628.             end
  629.         end
  630.     end)
  631.     for i = 1, #commands do
  632.         local l1, l2 = Instance.new("TextLabel", results), Instance.new("TextLabel", results)
  633.         attr(l1, {
  634.             Size = UDim2.new(0.7, -6, 0, 30),
  635.             Position = UDim2.new(0, 0, 0, i * 30),
  636.             BackgroundColor3 = Color3.new(1, 1, 1),
  637.             FontSize = Enum.FontSize.Size12,
  638.             ZIndex = 9,
  639.             Text = commands[i][1],
  640.             Name = "cmd" .. i
  641.         })
  642.         attr(l2, {
  643.             Size = UDim2.new(0.3, -6, 0, 30),
  644.             Position = UDim2.new(0.7, -6, 0, i * 30),
  645.             BackgroundColor3 = Color3.new(1, 1, 1),
  646.             FontSize = Enum.FontSize.Size12,
  647.             ZIndex = 9,
  648.             Text = commands[i][2],
  649.             Name = "lvl" .. i
  650.         })
  651.     end
  652.     frame:TweenPosition(
  653.         UDim2.new(0.5, -113, 0.5, -153),
  654.         Enum.EasingDirection.Out,
  655.         Enum.EasingStyle.Back,
  656.         1
  657.     )
  658.     return 1
  659. end
  660.  
  661. local setup = function()
  662.     local amb = Instance.new("Color3Value", game.Lighting)
  663.     local outa = Instance.new("Color3Value", game.Lighting)
  664.     attr(amb, {
  665.         Value = game.Lighting.Ambient,
  666.         Name = "Amb"
  667.     })
  668.     attr(outa, {
  669.         Value = game.Lighting.OutdoorAmbient,
  670.         Name = "OutAmb"
  671.     })
  672. end
  673. setup()
  674.  
  675. table.sort(commands, function(a, b)
  676.     return a[1] < b[1]
  677. end)
Add Comment
Please, Sign In to add comment