Lowpita

Archimonde_ShackleHUD.lua

Oct 21st, 2015
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 17.25 KB | None | 0 0
  1. -- Auro: Archimonde - ShackleHUD
  2. -- Version: 0.2.1
  3. -- Load: Zone[Hellfire Citadel]
  4. -- Do Not Load: EncounterID
  5.  
  6. -- Trigger [ENCOUNTER_START, ENCOUNTER_END, COMBAT_LOG_EVENT_UNFILTERED, AuroBM_ShackleHUD]
  7. function(event, encounterID, msg, _, srcGUID, srcName, _, _, destGUID, destName, _, _, spellID, spellName)
  8.   if (event == "ENCOUNTER_START" and aura_env.encounterIDs[encounterID] == true) then
  9.     aura_env.wipe2DTable(aura_env.shackles);
  10.     aura_env.wipeTable(aura_env.rosterIDs);
  11.     aura_env.playerRaidID = nil;
  12.     aura_env.rosterSize = GetNumGroupMembers();
  13.     for i = 1, aura_env.rosterSize do
  14.       local guid = UnitGUID("raid" .. i);
  15.       aura_env.rosterIDs[guid] = i;
  16.       if (guid == aura_env.playerGUID) then
  17.         aura_env.playerRaidID = i;
  18.       end
  19.     end
  20.     print("Auro: Archimonde ShackleHUD - Loaded");
  21.   elseif (event == "ENCOUNTER_END" and aura_env.encounterIDs[encounterID] == true) then
  22.     aura_env.wipe2DTable(aura_env.shackles);
  23.     aura_env.wipeTable(aura_env.rosterIDs);
  24.     aura_env.playerRaidID = nil;
  25.     -- Turns off HUD
  26.     aura_env.core:Request2Show(aura_env.id, false);
  27.     WeakAuras.ScanEvents(aura_env.eventName);
  28.   end
  29.   if (event == "COMBAT_LOG_EVENT_UNFILTERED") then
  30.     if (msg == "SPELL_AURA_APPLIED" and spellID == aura_env.shackleDebuffSpellID) then
  31.       -- Delete leftover disks
  32.       if (aura_env.shackles[destGUID]) then
  33.         aura_env.wipeTable(aura_env.shackles[destGUID]);
  34.         aura_env.shackles[destGUID] = nil;
  35.       end
  36.       -- Find Unit
  37.       local unit = aura_env.core.roster[destGUID];
  38.       if not unit then return end
  39.       local pos = {unpack(aura_env.core.positions[unit])};
  40.       if not pos then return end
  41.       local raidID = aura_env.rosterIDs[destGUID];
  42.       if not raidID then return false; end
  43.       local x, y, z, map = UnitPosition("raid" .. raidID);
  44.       if not x then return false; end
  45.       if not y then return false; end
  46.  
  47.       -- Create disk
  48.       local disk = aura_env.core:NewDisk(aura_env.shackleRange * aura_env.core.db.scale);
  49.       -- Assumes destGUID is focused and destGUID is wrought
  50.       disk:Stick(pos);
  51.       -- Color / put in table
  52.       aura_env.shackles[destGUID] = {};
  53.       aura_env.shackles[destGUID]["x"] = x;
  54.       aura_env.shackles[destGUID]["y"] = y;
  55.       aura_env.shackles[destGUID]["unit"] = raidID;
  56.       aura_env.shackles[destGUID]["disk"] = disk;
  57.  
  58.       if (destGUID == aura_env.playerGUID) then
  59.         disk = aura_env.core:NewDisk(aura_env.personalShackleRange * aura_env.core.db.scale);
  60.         disk:Stick(pos);
  61.         disk:Color(0, 0, 1, aura_env.diskOpacity - 0.05);
  62.         aura_env.personalShackle = disk;
  63.       end
  64.  
  65.       return true;
  66.     elseif ((msg == "SPELL_AURA_REMOVED" and spellID == aura_env.shackleDebuffSpellID) or (msg == "UNIT_DIED" and aura_env.shackles[destGUID])) then
  67.       -- Clear Disk
  68.       if (aura_env.shackles[destGUID]) then
  69.         aura_env.wipeTable(aura_env.shackles[destGUID]);
  70.         aura_env.shackles[destGUID] = nil;
  71.       end
  72.  
  73.       if (destGUID == aura_env.playerGUID) then
  74.         local disk = aura_env.personalShackle;
  75.         if disk then
  76.           disk:Free();
  77.           aura_env.personalShackle = nil;
  78.         end
  79.       end
  80.  
  81.       if not next(aura_env.shackles) then
  82.         aura_env.core:Request2Show(aura_env.id, false);
  83.         WeakAuras.ScanEvents(aura_env.eventName);
  84.       end
  85.     elseif (msg == "SPELL_CAST_START" and spellID == aura_env.ascensionSpellID) then
  86.       -- P3 Disable HUD
  87.       aura_env.wipe2DTable(aura_env.shackles);
  88.       local disk = aura_env.personalShackle;
  89.       if disk then
  90.         disk:Free();
  91.         aura_env.personalShackle = nil;
  92.       end
  93.       -- Turns off HUD
  94.       aura_env.core:Request2Show(aura_env.id, false);
  95.       WeakAuras.ScanEvents(aura_env.eventName);
  96.     elseif (msg == "SPELL_CAST_START" and spellID == aura_env.shackleCastSpellID) then
  97.       -- If shackles from last shackle are still out the new shackles do not show
  98.       -- I think I should hide here, and show on cast success
  99.       aura_env.wipe2DTable(aura_env.shackles);
  100.       local disk = aura_env.personalShackle;
  101.       if disk then
  102.         disk:Free();
  103.         aura_env.personalShackle = nil;
  104.       end
  105.     elseif (msg == "SPELL_CAST_SUCCESS" and spellID == aura_env.shackleCastSpellID) then
  106.       aura_env.core:Request2Show(aura_env.id, true, aura_env.hudScale);
  107.     end
  108.   end
  109. end
  110.  
  111. -- Untrigger
  112. function(event)
  113.   if (event == aura_env.eventName) then
  114.     return true;
  115.   end
  116. end
  117.  
  118. -- Custom Text [Every Frame]
  119. function()
  120.   if not aura_env.core then return "" end
  121.   if not aura_env.rosterSize then return "" end
  122.   if not aura_env.rosterIDs then return "" end
  123.   if not aura_env.playerRaidID then return "" end
  124.  
  125.   local chaosOpacity = 0;
  126.   local wroughtCheck = UnitDebuff("player", "Wrought Chaos");
  127.   local focusCheck = UnitDebuff("player", "Focused Chaos");
  128.   if (wroughtCheck ~= nil or focusCheck ~= nil) then
  129.     chaosOpacity = 0.1;
  130.   end
  131.  
  132.   for guid in pairs (aura_env.shackles) do
  133.     -- Variables
  134.     local shackleUnit = aura_env.shackles[guid]["unit"];
  135.     local shackleX = aura_env.shackles[guid]["x"];
  136.     local shackleY = aura_env.shackles[guid]["y"];
  137.     local disk = aura_env.shackles[guid]["disk"];
  138.     local num = 0;
  139.     local playerIn = false;
  140.     local personalDisk = aura_env.personalShackle;
  141.  
  142.     if not shackleX then break end
  143.     if not shackleY then break end
  144.     if not shackleUnit then break end
  145.     if not disk then break end
  146.  
  147.     for i = 1, aura_env.rosterSize do
  148.       local isDead = UnitIsDeadOrGhost("raid" .. i);
  149.       if (shackleUnit ~= i and isDead == false) then
  150.         local raidX, raidY = UnitPosition("raid" .. i);
  151.         if not raidX then break end
  152.         local distance = aura_env.distance(shackleX, shackleY, raidX, raidY);
  153.         if (distance <= aura_env.shackleRange) then
  154.           num = num + 1;
  155.           if (i == aura_env.playerRaidID) then
  156.             playerIn = true;
  157.           end
  158.         end;
  159.       end
  160.     end
  161.  
  162.     disk.timer:SetText(num);
  163.     if (num > 0 and playerIn == true) then
  164.       disk:Color(1, 0, 0, aura_env.diskOpacity - chaosOpacity);
  165.     elseif (num > 0 and playerIn == false) then
  166.       disk:Color(1, 1, 0, aura_env.diskOpacity - chaosOpacity);
  167.     else
  168.       disk:Color(0, 0.5, 0, aura_env.diskOpacity - chaosOpacity);
  169.     end
  170.   end
  171.   if personalDisk then
  172.     disk:Color(0, 0, 1, aura_env.diskOpacity - chaosOpacity - 0.05);
  173.   end
  174.  
  175.   if not next(aura_env.shackles) then
  176.     aura_env.core:Request2Show(aura_env.id, false);
  177.     WeakAuras.ScanEvents(aura_env.eventName);
  178.   end
  179.   return "";
  180. end
  181.  
  182.  
  183. -- Init
  184. aura_env.core = WA_RaidHUD;
  185. aura_env.hudScale = 6;
  186. aura_env.eventName = "AuroBM_ShackleHUD";
  187. aura_env.playerGUID = UnitGUID("player");
  188. aura_env.playerRaidID = nil;
  189. aura_env.rosterSize = nil;
  190. aura_env.rosterIDs = {};
  191. aura_env.shackles = {};
  192. aura_env.personalShackle = nil;
  193. aura_env.shackleCastSpellID = 184931;
  194. aura_env.shackleDebuffSpellID = 184964;
  195. aura_env.ascensionSpellID = 190313;
  196. aura_env.shackleRange = 25;
  197. aura_env.personalShackleRange = 30;
  198. aura_env.encounterIDs = {};
  199. aura_env.encounterIDs[1799] = true;
  200. aura_env.diskOpacity = 0.2;
  201. aura_env.wipeTable = function(table)
  202.   -- Clear Table
  203.   for guid in pairs(table) do
  204.     if (guid == "disk" or guid == "line") then
  205.       local disk = table[guid];
  206.       disk:Free();
  207.     end
  208.     table[guid] = nil;
  209.   end
  210. end
  211. aura_env.wipe2DTable = function(table)
  212.   -- Clear Table
  213.   for guid in pairs(table) do
  214.       for v in pairs(table[guid]) do
  215.         if (v == "disk" or v == "line") then
  216.           local disk = table[guid][v];
  217.           if (disk) then
  218.             disk:Free();
  219.           end
  220.         end
  221.         table[guid][v] = nil;
  222.       end
  223.       table[guid] = nil;
  224.   end
  225. end
  226. aura_env.distance = function(x1, y1, x2, y2)
  227.   local dx = x2 - x1;
  228.   local dy = y2 - y1;
  229.   local distance = (dx * dx) + (dy * dy);
  230.   distance = math.sqrt(distance);
  231.   return distance;
  232. end
  233.  
  234.  
  235. ************
  236. di12VaGiGQlbrLyuuOtrrwfevXRGOszwOQClsu7cc)IukkddPIJHu0YiH8miQyAevPUgev12qQK(gevPXrufohsLyDKs17qvMhPuuDpKyFquP6Giv1cjQkpeO0ejkxKuYgrQuFePWijLsNKu1krPzcu0nPOQ2jj4NivzOevvlfIYtHIPcrUksPTsrf9vIQKXskfolfv4TuqZfIkP7srzVqP)cKbRomIftbEmjnzu5YuTzsXNjrgnO60q61iPzdv3gvv7MWVjYWjvoorv0YP0ZbmDqUok2oO8DsOgpqHZtuz9uuL3trLA(KsrUpfvY(LXstSiHfd)yXWHfdhwKWIHdfqhoroKCWaclgKlQyXOYaajXpsoyaHfJYk3GLbasI)gjhmGAd1cMBLRPBlHF3Sy1WiuHqLegnfB3DJQPfsqnHXsa5cyiuLSEdb3fT1HySIgCWBxWfB3DJQPfsqnHXsa5cyiSsaqUfdQ55neCx0whIXkAWbVDbxSD3nQMwib1eglbKlGHWkba5w9YaAi4UOToeJv0GdE7cUy7UBunTqcQjmwcixadHoCICUfzeuo9YAi4UOToeJv0GdE7cUy7U7y7UBCjvcERcNibqpDevui5AknD4fB3DJlPsWBfBLyucoeyH7QuBknTcuizUbmA0yeCD4e5Cl481GlVSsmkbhQblCIea4M4fB3DJlPsWBnsQmaGfURsTP00kqHK5gWOrJrW1HtKZTGZxdoDlPYa4CnyHtKaa3eVy7UBunTrfBLyucoeyH7Qu70MO0cu8wY2AKuzaalCxLAN2eLwGIBQHG7Iy7U7U7wforcGE6iQOqY1uA6GGM8IT7UDbxSD3DSD3TgjBRedkxJkADeulqBKWyjGCbmeaWjQuXDatnNuSD3D3DRSYT5KyrjgG7aX2D3D3nUKkbVbGtuPI70kqHAknHXsa5cyiaGtuPI7agQedkNzgcoJafcCZ4fB3D3D34sQe8gaorLkURnAknHXsa5cyiaGtuPI7agQedkNzgcoyaUz8IT7U7UBCjvcEdaNOsf3nhnLMWyjGCbmeaWjQuXDadvIbLZmdbxoWnJxSD3D3DJlPsWBouaQnLMWyjGCbmeaWjQuXDadvIbLZmdbNdfGk4MXl2U7U7UXLuj4TGH)MsthEX2D3D3nUKkbV1HtKZT6fnLwdbhW5fB3D3D34sQe8wNBbKeeCzOauBknHXsa5cyi05wajbbhdCIkvCNxSD3D3DhB3D3D3OAAHeudaNOsf31gneCx0gyDc12fCX2D3D3nQMwib1aWjQuXDZrdb3fTbwNqTDbxSD3D3DJQPfsqnaCIkvCNwbkudb3fTbwNqTDbxSD3D3DJQPfsqnhka1gcUlAdSoHA7cUy7U7U7o2U7U7U1izB0Mstt(AcJLaYfWqyLaGClguZZBoPy7U7U7U7UXLuj4nkGmNW1uAAfOq6bK5eo6zPbCjaiJGBjOCG3iq0OM4fB3D3D3D3nQM2iaCIkvCNwbkuN2eLgTjcUgfqMt4AkuAneCa3udb3fX2D3D3D3D3D34sQe82sq50g81wckN5OP00kqHKFjauiujHrWTeuoWBeiAut8IT7U7U7U7U7Ur10cjO2sq50gneCx0gyDc12fCX2D3D3D3D3D34sQe8MdfaIiu9MstySeqUagcouaiIq1ncaNOsf31g81aWjQuXDZbFTLGYPn4RTeuoZHjEX2D3D3D3D3D3OAAJCOaqeHQ3AZP0eglbKlGHaaorLkUJmIqj3udb3fX2D3D3D3D3D3D3TGH)Msly4VrU10KxSD3D3D3D3D3D3DJQPnI2uO0eglbKlGHqhoro3ImckNEzMAi4Ui2U7U7U7U7U7U7U7UBD4e5CRErtPHSmoVy7U7U7U7U7U7U72fCX2D3D3D3D3D3UGJxSD3D3D3D3UGl2U7U7UDbxSD3D3DhB3D3D3COauraHYVB1oghcjhmGmky43eVy7U7U7gvtBuWWFJCVPtteCToCICUvVOPqPHSmUPgcUlIT7U7U7U7MdfGQ2bReUK1in5RPdFnD4Rjmwcixadbhkav6PJOIcjxRCRcNibqpDevui5mXl2U7U7UDCahvtBuWWFJCVPtteCToCICUvVOPqP1qWbCtneCxeB3D3D3D3nhkavTdwjCjRrAYxtt(A6WxtySeqUagcouaQ0thrffsUw5wforcGE6iQOqYzIxSD3D3D74aESD3D3D3D3COau1oyLWLSgPdFnDqG85RPdFnHXsa5cyi4qbOspDevui5ALBv4eja6PJOIcjNjEX2D3D3Tl4IT7UDbxSD3nQMwNBbKeeCzOauBi4Ui2U7U7U5qbOQDWkHlznsh(A6Wxtt(AcJLaYfWqWHcqLE6iQOqY1k3QWjsa0thrffsUw5MoiOdY3eVy7UBxWfB3DhB3DJQPfsqTWbdiJeglbKlGHaaorLkUdyQHG7Iy7U7U7MWyjGCbmeQswx7iZLNmoaKIWaxsXgjmwcixadbkhFTgcoGBIxSD3D3DlVCcv6ZyjaiWOseAbZfqagjmwcixadHdZfqkq43nXl2U72fCX2D3whIXkAWbNxSUGl2yJnwSyiQqOscaSiHfdQafclsyXWjbsLbasIFSYhwmQmaqs8JfJYk36fOqXsySeqUagcvjR3uA5f9bHmckN2sRmEXsySeqUagc4mCyuj4EtPPR8ILWyjGCbmeomxaPaHFVP0GtFgRK8z(GWaNOsf31wALboVyjmwcixadHoCICULg0QxwtPPvGcrdA1lZi46WjY5wWnXlwcJLaYfWqOdNiNBrgbLtVSMslqX5flHXsa5cyiSsaqUfdQ55nLwGIZlwcJLaYfWqyLaGCREzanL2CBU4flHXsa5cyiaGtuPI7anL2CBU4flHXsa5cyi05wajbbhdCIkvCVP0cuCEXsySeqUagca4evQ4oyjaqy05446L1uAAkpK30fKdn5flHXsa5cyiaGtuPI7YCdy0ObJohhxVSMstt5H8MUqxL38ILWyjGCbmeeavxaGkjWOZXX1lRP00KUqhKdnro8ILWyjGCbmeaWjQuXDKrek5nLwriFEXsySeqUagcDUfqsqWXaNOsf3rgrOK3uAKdD4flHXsa5cyiCHQeJaYT6Lb0uAZT5IxSeglbKlGHWfQsmci3QxgGH0e5LUqxmRP0qwgNxSeglbKlGHGdfGk90rurHKRP00bHI4flHXsa5cyiumQohjIb4EtP1WiuHqLegHigG7MITBLvUblUtSnsedW9y7wJKTvIbLRrfTocQfWieXaC3uZjfB3DJQPnQedkxtHsdohkavWBjBRedkxtHsdooQWb3udb3fX2D3DJlPsWBouaQnLgIyaUBOsmOCMXl2U7UBouaQANUTUB0eVy7UBxWfB3Ddrma3nujguoZAkTafNxSD7cUyDbxSeglbKlGHqXO6CfjdjIb4EtP1WiuHqLegHigG7MITBLvUblUtSnsedW9y7wJKTvIbLRrfTocQfWieXaC3uZjfB3D3TgjBdRrfTocQfWieXaC3qLyq5mZuZjfB3D3D3OAAJWAkuAW5qbOcElzBynfkn44OchCtneCxeB3D3D3DJlPsWBouaQnLgIyaUBOsmOCMzimZ4fB3D3D3DJQPnYHcq1udb3fX2D3D3D3DZHcqv70T1DJM4fB3D3D3D7cUy7U7U72fCX2D3D3neXaC3qLyq5mZqyM1uAbkoVy7U7UDbxSD3D3qedWDdvIbLZSMslqX5fB3UGlwxWflHXsa5cyi4qbGicvVP0AyeQqOscJGbn5RLJM81GHI4RLtrMITBCjvcEZbgnLgmuuRCdg0KxSDJlPsWBo5AkTCkQvULJM8ITBCjvcEZHcareQEtPnYbgnYtZbgMAKBTro5AKNMtot8ITBouaiIq1Bkn)ei4iaKNwiJCOaqeHQBIxSDBDigRO5qbGicvNxSUGdlewiSy0ijGOBCIsayXqpArcm1RGwyXa44AKFjubewmGvlfqslKHfdKfvjLClwKWIbsoDowmQmaqs8JfJdZfqyXaw4eO28DaaIsowmmaoigbkew5dlghMlGaWIrlfal9OvbK0czGWGe9rgs81APayPhTkGKwidKwkiJVgS0Z8Lp6JeiWKE0aKwMtTuajq0QaDRhmrslKPLm(A6ZyLKpZheg4evQ4U2sRmSyuzaGK4hlgLvUrYIQKsUTnulfal9OvbK0czGWGe9rgs81APayPhTkGKwidKwkiJVgS0Z8Lp6JeiWKE0aKwMtTuajq0QaDRhmrslKPLm(A6ZyLKpZheg4evQ4U2sRmZIvdJqfcvsy0H5ci(AxOkXiGCREz818dOeFni(AaRknOvVm(AaRQce(D(Aq81G4R5CaiAqREz81CoaKce(D(Aq81G4Rb05446LXxdOZXXvGWVBk2U7gvtB0H5cOMcLgCTuaS0JwfqslKbcds0hzibEteCnHXsa5cyiCHQeJaYT6LbyOluLyeqUvVmZAkuAilJBQHG7Iy7U7U7MWyjGCbmekgvNRizirma3nsySeqUagca4evQ4oGjEX2D3D3nHXsa5cyiumQohjIb4UrcJLaYfWqyLaGCREzaM4fB3D3D3eglbKlGHqhoro3ImckNEznLwGIZl2U7U7UjmwcixadHvcaYTyqnpVP00WHuGHFAyLy0z(o)g4waJM4fB3D3D3AKSnAtPPjFnHXsa5cyiSsaqUfdQ55nNuSD3D3D3D34sQe8wjguUMstRafIg0QxMrWTeuoWBeiAut8IT7U7U7U7MWyjGCbmewjai3QxgGHkXGYzwtPr5fB3D3D3D3nQM2OsmOCnfknHXsa5cyi0HtKZT0Gw9Ym1qWDrSD3D3D3D3D3nHXsa5cyi0HtKZTiJGYPxwtPr5fB3D3D3D3Tl4IT7U7UBxWfB3D3D36SOciJGtFgRK2B6BvHJYVKGZBmWjQuXDTLwzTYnykr4CoWnXl2U72XbCunTrhMlGAkuAW1sbWspAvajTqgiTuqg4nrW1eglbKlGHWfQsmci3QxgGHUqvIra5w9YmRPqPHSmUPgcUlIT7U7UBcJLaYfWqOyuDUIKHeXaC3iHXsa5cyiaGtuPI7aM4fB3D3D3eglbKlGHqXO6CKigG7gjmwcixadHvcaYT6LbyIxSD3D3DtySeqUagcD4e5ClYiOC6L1uAbkoVy7U7U7wzLBKyScGwsJMwBPvwSD3D3DtySeqUagcvjRRDK5YtghasryGlPyJeglbKlGHaLJVwdbhWnXl2U7U7ULxoHk9zSeaeyujcTG5ciaJeglbKlGHWH5cifi87M4fB3D7cUy7UBunTrhMlGAkuAWbl9mF5J(ibcmPhnaPL5ulfqceTkq36btK0czAjdCtneCxeB3D3D3OAAJ8dOutHsdog5xlWembrFArg9brF5x(bt9Ajd8Mi4AaDooUEznfknHXsa5cyiaGtuPI7YCdy0ObJohhxVmtneCxeB3D3D3D3TYk3YCChYBCxdKem32COaubIT7U7U7U7gvtBKWyjGCbmeaWjQuXDad5CaiAqREzMzQHG7Iy7U7U7U7U7UBcJLaYfWqOyuDosedWDJeglbKlGHaaorLkUdyiNdardA1lZmt8IT7U7U7U7U7UjmwcixadbaCIkvChWqohaIg0QxMznLwGIZl2U7U7U7UBxWfB3D3D3D3TYk30nQGRPvGcfB3D3D3D3nUKkbVzeOqnLMWyjGCbmeQswhHvcaYTgY5aq0Gw9YmJxSD3D3D3D3OAAHeuZiqHAi4UOToeJv0UGl2U7U7U7UBCjvcERtcOP0MBgHoIkvJeglbKlGHqvY6i0jbGcHkjamKrGczMjZfVy7U7U7U7Ur10cjOwNeqdb3fT1HySI2fCX2D3D3D3DJlPsWBlbLtVSMstySeqUagcReaKB1ldWqohaIg0QxMz8IT7U7U7U7gvtlKGAlbLtVSgcUlARdXyfTgcoGZRDbxSD3D3D3D34sQe8gm4RLJV284R5NORP00kqHKFjauiujHrWTeuoWBeiAlbLtVmt8IT7U7U7U7gvtlKGAWOHG7I26qmwrRHGd48AxWfB3D3D3D3nQMwib1Y1qWDrBDigRO1qWbCETl4IT7U7U7U7o2U7U7U7UBLvUbR1jqEZHcqn2U7U7U7UBCjvcEZHcqTP0eglbKlGHqvY6AxbxXYqbOAKWyjGCbmeaWjQuXDKrek5nYttySeqUagcvjRJGZaeaQeC3eVy7U7U7U7Uvw5M(aam87anNdardA1lRrbAnsQmaoxteCnNdardA1lRrbAfBLyucouSD3D3D3D3COau1ogiuvQg1jbyIxSD3D3D3D3kRCdwjCjBRnR1Xa1OIgIyaUhB3D3D3D3nHXsa5cyiaGtuPI7agY5aq0Gw9YmRP0MBZfVy7U7U7U7UjmwcixadbaCIkvChWqohaIg0QxMzgcoyaUznLgm4fB3D3D3D3nHXsa5cyiaGtuPI7agY5aq0Gw9YmZqWLdCZAkTC8IT7U7U7U7MWyjGCbmeaWjQuXDad5CaiAqREzMzi4mcuiWnRP0wckNEz8IT7U7U7U7MWyjGCbmeaWjQuXDad5CaiAqREzMzi4COaub3SMsZHcqLxSD3D3D3D3X2D3D3D3DJQPnY5aq0Gw9YAkuAcJLaYfWqOdNiNBPbT6LzQHG7Iy7U7U7U7U7UBouaQnLMWyjGCbmeQswx7k4kwgkavJeglbKlGHqNBbKeeCmWjQuXDKrek5nYttySeqUagcvjRJGZaeaQeC3eVy7U7U7U7U7UBouaQAhdeQkvJ6KamXl2U7U7U7U7U7MdfGQ2bReUK1iD4RPdFnn5Rjmwcixadbhkav6PJOIcjxRCthe0b5BIxSD3D3D3D3D3nHXsa5cyi05wajbbhdCIkvCVP0COau5fB3D3D3D3Tl4IT7U7U7U7o2U7U7U7UBRdXyfnKLX5fB3D3D3ooGJQPnAKFaLAkuAWXi)AbMGji6tlYOpiKPL5tpZPwYaVjcUgqNJJRxwtHstySeqUagca4evQ4Um3agnAWOZXX1lZulzBJ8dOutHsdoTkOhjqY0RLmWBIGRjmwcixadbaCIkvChWqohaIg0QxMzMm1qWDrSD3D3D3D3kRCdwCNyBzOauJT7U7U7U7gvtBKWyjGCbmeaWjQuXDad5CaiAqREzMzQHG7Iy7U7U7U7U7UBcJLaYfWqOyuDosedWDJeglbKlGHaaorLkUdyiNdardA1lZmt8IT7U7U7U7U7UjmwcixadbaCIkvChWqohaIg0QxMznLwGIZl2U7U7U7UBxWfB3D3D3D3DSD3D3D3D3OAAJCoaenOvVSMcLMWyjGCbme6WjY5wAqREzMAi4Ui2U7U7U7U7U7gxsLG3COauBknHXsa5cyi05wajbbhdCIkvCNxSD3D3D3D3D3nQMMdfGAdb3fX2D3D3D3D3D3D3nhkavTt3w3nAIxSD3D3D3D3D3D3DtySeqUagcDUfqsqWXaNOsf3BkTafNxSD3D3D3D3D3Tl4IT7U7U7U72fCX2D3D3D3DhB3D3D3D3nQMwib1chmGmsySeqUagca4evQ4oGPgcUlIT7U7U7U7U7UjmwcixadHQK11oYC5jJdaPimWLuSrcJLaYfWqGYXxRHGd4M4fB3D3D3D3D3DlVCcv6ZyjaiWOseAbZfqagjmwcixadHdZfqkq43nXl2U7U7U7UBxWfB3D3D3ooGJQPnYpGsnfkn4yKFTatWeeyPpgKaHbj6JmKaVjcUgqNJJRxwtHstySeqUagccGQlaqLey05446LzQHG7Iy7U7U7U7Uvw5w(roTmuaIb4ERT0kl2U7U7U7UBcJLaYfWqOyuDUIKHeXaC3iHXsa5cyiaGtuPI7aM4fB3D3D3D3nUKkbV5qbO2uAcJLaYfWqOZTasccog4evQ4oVy7U7U7U7Ur10COauBi4Ui2U7U7U7U7U7MdfGQ2PBR7gnXl2U7U7U7U7U7MWyjGCbme6ClGKGGJborLkU3uAbkoVy7U7U7U7UDbxSD3D3D3D3kRCJeJva0sA00AlTYIT7U7U7U7MWyjGCbmeQswx7iZLNmoaKIWaxsXgjmwcixadbkhFTgcoGBIxSD3D3D3D3YlNqL(mwcacmQeHwWCbeGrcJLaYfWq4WCbKce(Dt8IT7U7UBhhWr10g5hqPMcLgCmYVwGjyccS0hdsGWGe9rgsG3ebxdOZXX1lRPqPjmwcixadbaCIkvChSeaim6CCC9Ym1qWDrSD3D3D3D3kRCRxtdaNOsf3bAnwj(BCcaudaNOsf3BI1BaiuC8wIbQHG7TWvCdaNOsf3bAoPwib1aWLuCSD3D3D3D3kRCRVHGJkO26Ba4sm4CnCuoVH7wNVMi4Aa4skULeTkbaQbyuvDaGy7U7U7U7UjmwcixadHIr15ksgsedWDJeglbKlGHaaorLkUdyIxSD3D3D3D34sQe8MdfGAtPjmwcixadHo3ciji4yGtuPI78IT7U7U7U7gvtZHcqTHG7Iy7U7U7U7U7UBouaQANUTUB0eVy7U7U7U7U7UBcJLaYfWqOZTasccog4evQ4EtPfO48IT7U7U7U72fCX2D3D3TJd4OAAJ8dOutHsdog5xlWembbw6JbjqyOfSGvlmyaVjcUgqNJJRxwtHstySeqUagca4evQ4oyjaqy05446LzQHG7Iy7U7U7U7UjmwcixadHQK11oYC5jJdaPimWLuSrcJLaYfWqGYXxdzzC(AcJLaYfWqaNHdJkb3nXl2U7U7UDbxSD3Tl4I1fCXgBSyXOc3vPIfJdZfqyXOYaajXpii505yXaarGyaWIHr4WCbewmegijSyuzaGK4heCuohlgiu(DoSqyXaaHQsvozmwceQKaRbyXa3rvcoew6MUqh6qxPlkc5Lo0vAst5H8GUsh5bwnkJ8royXGlr4WIewmMNKWXIrBDCCnOwVblkeHZXXIHdvJguvgCi5WIewm8ZGdHIfjSqyHWIHbWbzEschR8HfJLO6yrclg(zWHqXIewiSqyXyLWDSiHfd)m4qOyrclewiSyyaCqMNKW1ZH1aSyGi4UaclsyXWpdoekwKWcHfclewmCOa6WjYHbIOsfalgKlQyXyDLqLeijNohlgihmGWIbvGcbsvIFD4oKZHvbAIfdaerLkayLeqeub)Uaclg9kGrVmTWIX8KK4hRc0blgcdKew5dlguvjbw5dlguoSyOVvfok)scoheg4evQ4U2sRmSyumkheCS0T8g5thKdYRIORihfjpOl0b5J8Qi5bwnkJ8vewmCoabIXsGCSgGfJGHFKSOkPKBbWQanXIbvaZTaowdWIHrazrvsj3IfjSyuzaGK4hlgLvUPvazrvsj3gRggHkeQKWOdZfqMIT7Ur10gDyUaQPqPjmwcixadHdZfqkq43n1qWDrSD3D3DBDigROHSmoVy7UBxWfRl4In2yXcHfdhkGoCIC6vLeyXOxa5wnevh5QEvjbaYvSyaGiQubKFjubewmYh9qcj6z(itpn0wKWIbYbdiWkHlzXIewfOjwfOjwfuewfOjwfqoyvGMyvqEJvbAIfclewmayXOie0ebDqqt6kwmWWQanL3kIMyHWIfa
Add Comment
Please, Sign In to add comment